# Vigor — playable combat front-end A browser battler that drives `combat-core` (via `combat-wasm`) in real time: pick a foe, manage your single Vigor pool, and try not to spend your survival. The engine is authoritative and unchanged — this is just a presentation layer and a [`HumanController`] pushing your intent between ticks. ## What's here - `index.html` / `style.css` / `game.js` — the UI (torch-lit dark fantasy). - `portraits/` — AI-generated monster art (Z-Image on the LAN workstation; see `../tools/portraits.py`). Committed so the game runs offline. - `pkg/` — the wasm-bindgen output (gitignored; rebuild with the command below). ## Build & play ```sh # 1. Build the wasm bridge into ./pkg (cargo on PATH; from combat/) export PATH="$HOME/.cargo/bin:$PATH" wasm-pack build combat-wasm --dev --target web \ --out-dir ../combat-web/pkg --out-name combat_wasm # 2. Serve combat/ as the web root (so the page AND configs/ resolve) python3 -m http.server 8013 --directory . # 3. Open the game open http://127.0.0.1:8013/combat-web/ ``` (Re)generate portraits — needs the LAN ComfyUI / Z-Image server up: ```sh python3 tools/portraits.py --url http://192.168.1.26:8188 --size 768 ``` ## How to play - **Click a foe** to start. The fight runs in real time (10 ticks/second). - **Auto-attack** is on by default (toggle with the AUTO button or `space`). - **Abilities**: click a card or press `1`–`5`. Each shows its **fill cost** — spending fill lowers your **capacity**, so a big hit leaves you fragile. - Watch the **dual bar**: bright = current fill, dim = regen headroom, the gold line is your **ceiling** (`cap`), and the dark cracked zone on the right is **fatigue** — ceiling lost for the rest of the fight. When the ceiling collapses to your fill, the next hit overruns you (daze → KO). - **Second Wind** restores ceiling; **Guard** opens a brief block window. Passive auto-attacking beats the weak foes (Dire Rat, Skeleton); the Golem, Troll, and Wraith want real play — recover, punish when they're spent, don't over-commit. Difficulty is a table: edit `../configs/default.json` (monster stats, ability numbers, the con curve) to taste — the same file the sim tunes against.