1
0
Fork
You've already forked blackICE
0
blackICE — a cyberpunk Sokoban built in Sigil, running in the browser on the WASM bridges.
  • CSS 64.4%
  • Shell 24.7%
  • Makefile 7.4%
  • HTML 3.5%
Find a file
2026年06月01日 13:08:40 +03:00
docs Use generated web artifacts for blackICE workflow 2026年06月01日 13:08:40 +03:00
src/blackice Add mobile/touch support: swipe, on-screen D-pad, tappable banners 2026年05月30日 16:55:26 +03:00
test Add headless self-test (rules layer) + session log 2026年05月30日 16:39:25 +03:00
.gitignore Add Codeberg Pages publishing tooling (publish.sh + Makefile) 2026年05月30日 17:57:36 +03:00
dev-redirects.sgl blackICE MVP: cyberpunk Sokoban on the Sigil WASM bridges 2026年05月30日 16:23:12 +03:00
index.template.html Build generated web artifacts instead of checking them in 2026年05月30日 22:01:31 +03:00
Makefile Use generated web artifacts for blackICE workflow 2026年06月01日 13:08:40 +03:00
package.sgl Bundle lib modules for faster cold loads 2026年05月31日 10:00:27 +03:00
publish.sh Use generated web artifacts for blackICE workflow 2026年06月01日 13:08:40 +03:00
README.md Use generated web artifacts for blackICE workflow 2026年06月01日 13:08:40 +03:00
styles.css Build generated web artifacts instead of checking them in 2026年05月30日 22:01:31 +03:00

blackICE

A cyberpunk Sokoban that runs in the browser on the Sigil WASM bridges. You are a runner pushing a data payload through hostile ICE to a breach/extraction point: push data-blocks onto ports, collect fragments, open security gates with matching access tokens, dodge a patrolling daemon and corrupted-sector hazards, and reach extraction before the move-based trace timer runs out.

It is a real game and a WASM-bridge validator (one of three consumers gating the Sigil browser release). See docs/wasm-bridge-report.md for the bridge findings and the zero-JS-wiring browser-app pattern it prototypes.

Architecture

  • Pure rulessrc/blackice/{grid,level,game,levels}.sgl. Zero DOM/bridge references; a future canvas/WebGL renderer drops in without touching these.
    • grid — cell-index geometry and directions.
    • level — the compact text level-string format and its parser.
    • game — game state, the per-move turn (push/gate/hazard/daemon/trace), win/lose resolution, and an undo history stack.
    • levels — the 8-level campaign as level strings.
  • Renderingsrc/blackice/render.sgl. The only module that touches the DOM bridge: game/menu state → SXML, mounted under #app via sigil-wasm-dom.
  • App gluesrc/blackice/main.sgl. App state, input dispatch (sigil-web-dispatch-event), and sigil-browser local-storage persistence.
  • Generic loaderweb/sigil-web-app.js. App-agnostic: boots the runtime and forwards DOM events into Sigil. The app author writes no JS.

Controls

Keyboard: Arrows / WASD move · . wait · U undo · R restart · ESC sector select · ENTER jack in / next sector.

Touch (mobile): swipe on the grid to move, or use the on-screen D-pad and action buttons (shown automatically on touch devices). Tap a sector to jack in; tap the win/lose banner (or its button) to advance or retry. All touch input is routed through the same key-dispatch path as the keyboard by the generic loader, so the game logic stays input-agnostic.

Build

The WASM/browser release is held pending validation, so blackICE builds against the live monorepo tree via redirects (not a tagged release):

guix shell -m ../sigil/manifest.scm -- \
 ../sigil/build/dev/bin/sigil build --config web \
 --redirects ./dev-redirects.sgl

Output lands in build/web/ (index.html, blackice.wasm, bridge assets, and the bundled WASI library files). If you rebuild the dev sigil, rm -rf build first. The incremental cache does not invalidate on a compiler change (see the report, F8).

Run

Serve the generated web output over HTTP (file:// won't work) and open it:

guix shell -m ../sigil/manifest.scm -- \
 ../sigil/build/dev/bin/sigil serve --dir build/web

Levels

Levels are plain strings (src/blackice/levels.sgl), so the format doubles as a shareable/editable representation. Glyphs: # wall · . floor · @ player · $ data-block · o port · * block-on-port · f fragment · X extraction · ^ hazard · D daemon · r/g/b/y token · R/G/B/Y gate. Header lines: id:, name:, trace: (move budget), route: (daemon patrol, e.g. rrddll).