A fast, retro-terminal-styled desktop game where you defend a fictional "core" server from hostile network traffic for a 90-second shift. Built as a single C++17 file using Dear ImGui for the UI, rendered with OpenGL via GLFW.
Note: Nothing about this game is real. It does not scan your actual network, files, or system. The whole "network," the packets flowing across it, and the "hostile signatures" are procedurally generated for gameplay purposes only. The only thing it reads or writes on your machine is a small preferences file storing your high score and display settings.
- It's a desktop GUI application, not a command-line tool or a web app.
- It needs a graphical session to run (a monitor / X11 or Wayland desktop), because it opens a real OS window via GLFW and draws to it with OpenGL.
- It depends on three external libraries at build and run time: Dear ImGui, GLFW3, and OpenGL. It is a single source file, but it is not dependency-free — those libraries must be installed.
- Aside from those graphics/UI libraries, it only uses the C++ standard library (no networking stack, no database, no external assets or config files beyond the one preferences file described below).
Yes. It's a single-player, real-time strategy/arcade game with a hacker-terminal aesthetic. You watch a small network of nodes on screen, packets travel along the connections toward your core, and you spend limited "energy" on actions to stop the bad ones before they do damage — all against a 90-second countdown.
No. Everything you see — the node graph, the packets, which ones are "hostile," corruption levels, etc. — is entirely simulated using a random number generator seeded either:
- automatically from the system clock (different game every time), or
- manually via
--seed <number>(same layout and packet sequence every time — useful for practicing or sharing a challenge).
The only file it touches on your machine is a small plain-text preferences file:
~/.black_ice_localhost.cfg
It stores just five lines: your high score and four UI toggles (difficulty, scanlines, motion effects, auto-scroll). If $HOME isn't set, it falls back to writing that file in the current directory instead. That's the full extent of its interaction with your system — no real files are read, no real network traffic is inspected, no other data leaves or enters the game.
- Linux (Debian/Ubuntu-based tested), with a graphical desktop session
- A C++17 compiler (
g++) - Development packages:
libimgui-dev,libglfw3-dev,libgl1-mesa-dev,pkg-config
sudo apt-get update && sudo apt-get install -y \
build-essential pkg-config libimgui-dev libglfw3-dev libgl1-mesa-dev
g++ -std=c++17 -O2 -Wall -Wextra -pedantic main.cpp -o black_ice \
$(pkg-config --cflags --libs imgui glfw3) -lGL -ldl -pthread
./black_icePass a fixed seed to get the exact same node layout and packet sequence every time — handy for testing or comparing scores fairly:
./black_ice --seed 1996You are defending CORE-00, the center node of a small network, for a 90-second shift. Data packets spawn at the four edge "gateways" and travel inward toward the core along the network's connections.
- Clean packets (squares) are safe — let them reach the core for score and energy.
- Hostile packets (diamonds, once revealed) damage the core's integrity if they get through.
- Some hostiles are cloaked — they look like dim, amber-edged squares until you
Scanthe area to expose them. Letting one slip through disguised as clean is the main risk in the game.
If Core Integrity hits 0%, the shift ends in failure ("Core Breach"). If you survive the full 90 seconds, it's a win, graded into a rank (S/A/B/C) based on how much integrity you kept, whether you completed the side mission, and how many hits you took.
| Action | Key | Energy | Effect |
|---|---|---|---|
| Scan | 1 |
8 | Reveals cloaked hostiles at the selected node and its neighbors |
| Purge | 2 |
22 | Destroys hostile packets currently near the selected node, scrubs its corruption |
| Isolate | 3 |
14 | Quarantines the node for 5.5s — kills nearby hostiles but may force clean traffic to reroute (or drop) |
| Overclock | 4 |
18 | Speeds up traffic through the node — clean traffic 1.75x, hostile only 1.28x — but raises your "trace" (heat) level |
| Input | Action |
|---|---|
| Left mouse click | Select a node |
1 / 2 / 3 / 4 |
Scan / Purge / Isolate / Overclock on the selected node |
Tab |
Cycle to the next node |
Space |
Pause / resume |
F1 |
Open/close the field manual (help) |
Esc |
Close the field manual |
The in-game terminal (bottom panel) accepts typed commands as an alternative to mouse/keyboard shortcuts:
HELP List commands
STATUS Show core/energy/trace/score summary
SELECT <NODE> Select a node by ID (0-12) or label (e.g. GATE-NE)
SCAN [NODE] Scan a node (defaults to selected node)
PURGE [NODE] Purge a node
ISOLATE [NODE] Isolate a node
BOOST [NODE] Overclock a node
MODE <PATROL|STANDARD|BLACKOUT> Change difficulty
PAUSE / RESUME / RUN Pause or resume the simulation
RESTART Start a new shift (next seed)
SEED <uint32> Restart with a specific seed
CLEAR / CLS Clear the terminal log
Command history is navigable with the Up/Down arrow keys while the terminal input is focused.
Each shift randomly rolls one of three side objectives (seeded, so it's consistent for a given --seed):
- Ghost Hunter — Purge/isolate a target number of hostile packets.
- Clean Pipe — Deliver a target number of clean packets to the core.
- Visible Spectrum — Expose a target number of cloaked hostile signatures via Scan.
Completing it grants a large score bonus, restores some energy, and reduces your trace level.
| Mode | Spawn rate | Hostile ratio | Packet speed | Core damage per hit |
|---|---|---|---|---|
| Patrol | Slow | Lower | Slower | Lower |
| Standard | Medium | Medium | Medium | Medium |
| Blackout | Fast | Higher | Faster | Higher |
Change it via the Terminal (MODE <name>) or the dropdown in the telemetry panel.
Your high score and a few display preferences (CRT scanlines, motion effects, terminal auto-scroll, last difficulty) are saved to ~/.black_ice_localhost.cfg when you close the game or finish a shift. This is the only data the game writes anywhere. Deleting that file resets your high score and preferences to defaults — it has no effect on gameplay logic itself, since the network/packets are always freshly generated per run.