Sudo-Noclip
Sudo-Noclip is a 3D, backrooms-style horror game that runs entirely in the terminal.
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
WASDto moveOto turn leftPto turn right1-4number keys adjust the graphics qualityTtoggles the grain VFXXquits 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.
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.
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.