Skip to main content

Sudo-Noclip

Sudo-Noclip is a 3D, backrooms-style horror game that runs entirely in the terminal.

00


Greetings, Traveller.

Trust your heart.
Stay in the light.
Do not close your eyes.
Do not let your light go out...


Get Started

Playtime: ~20 minutes

To play, simply install the game using pip and run it:

pip install sudo-noclip
sudo-noclip
  • WASD to move
  • O to turn left
  • P to turn right
  • 1-4 number keys adjust the graphics quality
  • T toggles the grain VFX
  • X quits the game

Check out the in game guide for more details

Rendering

At its core, this game uses a 2D grid for the map. Raycasting runs every frame across the player's field of view in a horizontal scanline, casting rays to calculate hit distances and collisions. That distance data is then used to draw walls, with a floor and ceiling filling the top and bottom of the screen.

To keep performance high while allowing for precise ray marching, the raycaster uses a downscaled version of the world map alongside the full resolution map to skip marching rays across empty corridors.

01

Shading

To render graphics within a terminal, I used Unicode full-block characters (" █ ") as pixels, with ANSI escape codes to add colour. Every frame, the screen buffer is translated into a string, with ANSI escape codes inserted only when the colour along a row changes, as to avoid the ANSI compute cost on non-GPU terminals.

To further mitigate the ANSI cost, I added colour quantisation to restrict the colour shades to a fixed number of steps. This produces fewer colour transitions per row, minimising the frequency of ANSI escape codes.

For lighting, a lightmap is ray-traced during level generation, where each tile on the lightmap corresponds to a tile on the main map. To improve performance, lighting is traced per tile rather than at a finer resolution.

On water-based levels, screen-space reflections (SSR) create the illusion of transparency by using the vertical symmetry of raycasting. For each floor pixel, the y screen coordinate is reflected across the bottom of the wall in that column to sample the reflection. Both colour samples are then alpha blended together to render the water effect.

02

JIT

To achieve smooth frame rates in a standard Python interpreter, loop heavy functions (raycasting, lightmap generation, rasterisation, and pathfinding) are accelerated using Numba Just In Time (JIT) compilation.

Licence

This project is licensed under the MIT License

Metadata

Release files for sudo-noclip 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sudo-noclip 1.0.0
File Size Uploaded Provenance Actions
sudo_noclip-1.0.0.tar.gz 17.1 kB Without provenance Details for sudo_noclip-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sudo-noclip 1.0.0
File Interpreter ABI Platform Actions
sudo_noclip-1.0.0-py3-none-any.whl Python 3 none any Details for sudo_noclip-1.0.0-py3-none-any.whl

Total release size: 33.0 kB

Release files / sudo_noclip-1.0.0.tar.gz

Download URL sudo_noclip-1.0.0.tar.gz
Size 17.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e29bff18d2428aa5b2b9bedf42fc69833af462ebb4138547787af6b25ef708ba
BLAKE2b-256 checksum
How to use checksums
8dfbdf2e60840fd328f90d3e09bfc2799027cec6b1e7e92c0e5367ce012f214d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.15

Release files / sudo_noclip-1.0.0-py3-none-any.whl

Download URL sudo_noclip-1.0.0-py3-none-any.whl
Size 15.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf81b7df470d3baeeb8cdfda2e9a64da69e043fab1356ad0f3941d0a4fb059c8
BLAKE2b-256 checksum
How to use checksums
4b47fc7649c9697a559d58302853716d7ef4eef1aa1c195702e26345f2b44268
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.15

Security for sudo-noclip 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page