zTrojan/blind-sector

C++

12

2 commits

updated Oct 17, 2026

See the code

See what people are saying

SourceMessageScoreDate

Vibe coded a 16 KB FPS game as an experiment (r/ClaudeAI)

I wanted to see how far I could get by vibe coding something that normally takes deep demoscene knowledge. Ended up with a small FPS that fits in 16 KB I used Fable 5 High for the initial planning and Opus 5.5 High for implementation, polishing and optimization The game: You’re blind, underground.…

270

Oct 16, 2026

README

Blind Sector: Frequencies

A first-person shooter for Windows in a single 16 KB executable (limit: 16 384 bytes). Underground, in the dark, your scanner pulse paints the world: wherever its front passes with line of sight, the contours light up and then fade to a faint trace. The things that hunt you show only in a pulse. Every pulse is also noise, and everything down there hunts noise.

Working title; the final name is still open (candidates: PULSE, ECHO//LOC, ЕХОЛОТ).

Play

blind_sector.exe in the repository root (16 004 bytes, the current build; a build writes out/blind_sector.exe). Fullscreen, any key layout with WASD positions.

InputAction
WASD / arrowsmove
Mouselook
LMB (hold)fire the current scanner mode
1 / 2 / 3, Q, RMB, wheelLF / HF / Discharge (Discharge from sector 2)
Spacejump
Escback to the menu
  • LF (blue): wide and quiet, reveals walls and Crawlers.
  • HF (amber): a long narrow beam, reveals Sprinters and hidden passages only where you aim.
  • Discharge (white): reveals everything, strong blast, very loud, throws you back (use it to jump onto ledges).
  • Lamps are islands of steady light: energy recharges twice as fast, but you can be seen from afar.

Three sectors (Tunnels, Machine Hall, Arena), Crawler / Sprinter / Listener and the boss, pits and bridges, generative menu and final music. The menu has a mouse speed setting.

Photosensitivity: the Discharge flash ramps up over 150 ms and cannot repeat faster than once every 2 s; there are no strobes. A warning is shown on the title screen.

How it fits

The level is not a mesh: one fragment shader (shaders/world.frag) ray-casts the 64x64 cell grid, lights it from the pulses with shadows, adds corner AO and per-room wall patterns, draws the enemies as jointed distance fields, the post effects and the HUD text. The CPU side (src/render.cpp) fills one float texture per frame and draws one rectangle: no uniforms, no matrices, no depth buffer. The window is a "static" popup with raw mouse input read in the message loop. Code is x87 C++ without the CRT, packed with Crinkler. What each feature cost is in budget.md.

Antivirus note

Packed executables are sometimes flagged by antivirus heuristics. On the development machine Windows Defender did not remove the Crinkler-packed build. out/tiny/blind_unpacked.exe (≈41 KB, no packer) is the same game for players whose antivirus blocks the packed file.

Build

Requirements: Visual Studio 2022 (MSVC x86) + Windows SDK, Python 3 (stdlib only). Crinkler and Shader Minifier are in tools/bin.

powershell -ExecutionPolicy Bypass -File build/build.ps1 -Profile All

That regenerates every data table from the readable sources, builds the Dev and Tiny configurations, packs with Crinkler and checks the size.

ScriptWhat it does
build/scenario.ps1 [-Name n] [-Runs 10]headless test scenarios (tests/*.json), determinism check, replay check
build/capture.ps1 [-Scene s]reference frames from build/scenes.json to out/frames/
build/exe_snapshot.ps1 -Exe out/blind_sector.exestarts the packed exe and copies its window to a PNG
build/assets_preview.ps1model previews, level maps, all sounds as WAV, contact sheets (out/preview/)
build/compare.ps1 -Base <tag>size, per-pixel frame and scenario deltas against a git tag
build/compare_selftest.ps1proves compare.ps1 catches an intentional regression
build/promo.ps1renders the 15 s promo GIF (out/promo/promo.gif)

Dev build extras (out/dev/blind_dev.exe): --level N, --god, --record f.inp, --play f.inp (--headless for bit-exact replay), --scenario f.scn, --capture f.png --cam x,y,z,yaw,pitch, --bench N, --export-sounds dir, --export-music dir, --stuck-test N.

Layout

  • docs/ — the original design, plan and rules (Ukrainian), written for the 64K game this edition was cut from. CLAUDE.md — rules for the coding agent.
  • src/ — C++ unity build; src/data/ is generated (not in git).
  • shaders/, levels/, tools/ — readable sources and the generators that compact them.
  • tests/ — scenarios; build/ — scripts, toolchain.lock.md.
  • budget.md — measured byte budget; PROPOSALS.md — deviations from docs/ awaiting a decision.

zTrojan/blind-sector

C++

12

2 commits

updated Oct 17, 2026

See the code

See what people are saying

SourceMessageScoreDate

Vibe coded a 16 KB FPS game as an experiment (r/ClaudeAI)

I wanted to see how far I could get by vibe coding something that normally takes deep demoscene knowledge. Ended up with a small FPS that fits in 16 KB I used Fable 5 High for the initial planning and Opus 5.5 High for implementation, polishing and optimization The game: You’re blind, underground.…

270

Oct 16, 2026

README

Blind Sector: Frequencies

A first-person shooter for Windows in a single 16 KB executable (limit: 16 384 bytes). Underground, in the dark, your scanner pulse paints the world: wherever its front passes with line of sight, the contours light up and then fade to a faint trace. The things that hunt you show only in a pulse. Every pulse is also noise, and everything down there hunts noise.

Working title; the final name is still open (candidates: PULSE, ECHO//LOC, ЕХОЛОТ).

Play

blind_sector.exe in the repository root (16 004 bytes, the current build; a build writes out/blind_sector.exe). Fullscreen, any key layout with WASD positions.

InputAction
WASD / arrowsmove
Mouselook
LMB (hold)fire the current scanner mode
1 / 2 / 3, Q, RMB, wheelLF / HF / Discharge (Discharge from sector 2)
Spacejump
Escback to the menu
  • LF (blue): wide and quiet, reveals walls and Crawlers.
  • HF (amber): a long narrow beam, reveals Sprinters and hidden passages only where you aim.
  • Discharge (white): reveals everything, strong blast, very loud, throws you back (use it to jump onto ledges).
  • Lamps are islands of steady light: energy recharges twice as fast, but you can be seen from afar.

Three sectors (Tunnels, Machine Hall, Arena), Crawler / Sprinter / Listener and the boss, pits and bridges, generative menu and final music. The menu has a mouse speed setting.

Photosensitivity: the Discharge flash ramps up over 150 ms and cannot repeat faster than once every 2 s; there are no strobes. A warning is shown on the title screen.

How it fits

The level is not a mesh: one fragment shader (shaders/world.frag) ray-casts the 64x64 cell grid, lights it from the pulses with shadows, adds corner AO and per-room wall patterns, draws the enemies as jointed distance fields, the post effects and the HUD text. The CPU side (src/render.cpp) fills one float texture per frame and draws one rectangle: no uniforms, no matrices, no depth buffer. The window is a "static" popup with raw mouse input read in the message loop. Code is x87 C++ without the CRT, packed with Crinkler. What each feature cost is in budget.md.

Antivirus note

Packed executables are sometimes flagged by antivirus heuristics. On the development machine Windows Defender did not remove the Crinkler-packed build. out/tiny/blind_unpacked.exe (≈41 KB, no packer) is the same game for players whose antivirus blocks the packed file.

Build

Requirements: Visual Studio 2022 (MSVC x86) + Windows SDK, Python 3 (stdlib only). Crinkler and Shader Minifier are in tools/bin.

powershell -ExecutionPolicy Bypass -File build/build.ps1 -Profile All

That regenerates every data table from the readable sources, builds the Dev and Tiny configurations, packs with Crinkler and checks the size.

ScriptWhat it does
build/scenario.ps1 [-Name n] [-Runs 10]headless test scenarios (tests/*.json), determinism check, replay check
build/capture.ps1 [-Scene s]reference frames from build/scenes.json to out/frames/
build/exe_snapshot.ps1 -Exe out/blind_sector.exestarts the packed exe and copies its window to a PNG
build/assets_preview.ps1model previews, level maps, all sounds as WAV, contact sheets (out/preview/)
build/compare.ps1 -Base <tag>size, per-pixel frame and scenario deltas against a git tag
build/compare_selftest.ps1proves compare.ps1 catches an intentional regression
build/promo.ps1renders the 15 s promo GIF (out/promo/promo.gif)

Dev build extras (out/dev/blind_dev.exe): --level N, --god, --record f.inp, --play f.inp (--headless for bit-exact replay), --scenario f.scn, --capture f.png --cam x,y,z,yaw,pitch, --bench N, --export-sounds dir, --export-music dir, --stuck-test N.

Layout

  • docs/ — the original design, plan and rules (Ukrainian), written for the 64K game this edition was cut from. CLAUDE.md — rules for the coding agent.
  • src/ — C++ unity build; src/data/ is generated (not in git).
  • shaders/, levels/, tools/ — readable sources and the generators that compact them.
  • tests/ — scenarios; build/ — scripts, toolchain.lock.md.
  • budget.md — measured byte budget; PROPOSALS.md — deviations from docs/ awaiting a decision.