WUXIA: 100 Days After — full game

Single-file ink-painting wuxia sect-survival RPG.
Lead a sect through 100 days: martial arts combos, cultivation,
tactical combat, faction war, chronicle endings.

- src/ 13 modules (data, sim, combat, render, UI, app shell)
- wuxia.html self-contained build (no dependencies)
- tools/build.js bundler
- tests: headless 100-day sims + jsdom UI smoke + real-browser
  Chromium click-through (playwright)
This commit is contained in:
2026-08-23 07:01:52 +00:00
commit 3b1c7a72da
22 changed files with 21119 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
# WUXIA: 100 DAYS AFTER — 武林百日后
A single-file, browser-based wuxia sect-survival RPG in the style of a Chinese ink
painting. Lead a small martial-arts school through exactly **100 days** of the
jianghu — recruit disciples, learn (or steal) techniques, combine martial arts into
devastating sets, survive faction war, and decide what your legend becomes.
**Everything ships in one file: [`wuxia.html`](wuxia.html)** (~390 KB, no dependencies,
no network). Open it directly in any modern browser (`file://` works), or serve it:
```bash
python3 -m http.server 8080
# → http://localhost:8080/wuxia.html
```
## The game
- **Core loop:** PLAN (limited AP) → TRAVEL an procedurally-drawn jianghu → EXPLORE /
gather / recruit / spy → EVENTS with real consequences → turn-based tactical COMBAT →
TRAIN disciples & assign sect duties → manage gold/food/medicine → ADVANCE DAY.
- **Martial arts combinations:** equip up to 4 arts. Certain sets fuse into **combos**
(13 total) — e.g. *Iron Palm + Lightning Step + Drunken Fist* unlocks the
**Drunken Thunder** ultimate. Forbidden pairings (*Nine Yin + Phantom Steps*) grant
power but inflict round-by-round backlash.
- **Cultivation realms:** Mortal → Legend, with risky breakthroughs (failure injures;
catastrophic failure can kill). Pills and high Medicine help.
- **Living characters:** traits, loyalty, relationships, memories, romance; disciples
train assigned arts, gain scars, and can die permanently.
- **9 factions & 2 rival sects:** reputation on five axes (Honor/Fear/Mercy/Ambition/
Deception), fame titles, war that erupts mid-run, raids on your mountain, and a
scripted final invasion around day 92.
- **Endings:** 11 chronicle-driven endings (Legend, New Era, Conqueror, Demonic,
Hermit, Betrayer, Martyr…) computed from what you actually did.
- **Presentation:** canvas isometric ink-painting rendering (weather, day/night,
parallax mountains), procedural portraits & event scene art, cinematic brush-stroke
technique FX, generative pentatonic soundtrack + synthesized SFX (WebAudio),
autosave/slots/export codes, 11 achievements, 4 difficulties.
## Repository layout
```
wuxia.html ← the game (self-contained build output; also copied to index.html)
src/
00_boot.js W namespace, seeded RNG, utils, event bus, constants
05_audio.js generative music + SFX engine (WebAudio)
10_data_arts.js 47 martial arts, 13 combos, realms
12_data_world.js backgrounds, factions, items, buildings, enemies, locations…
14_data_events.js ~40 data-driven events (world / travel / sect)
20_state.js state factory, world gen, save/load/export
22_sim.js simulation API: actions, days, events, meetings, breakthroughs
24_combat.js tactical grid combat (AI, statuses, combo ultimates)
30_render_world.js isometric ink renderer
32_render_fx.js portraits, scene art, cinematic FX
40_ui.js all screens, HUD, panels, modals
50_app.js boot, main loop, input, achievements, flow orchestration
style.css ink/lacquer theme
tools/build.js bundles src/* into wuxia.html
test/headless.js full-game simulations (random play, N seeds)
test/ui_smoke.js jsdom boot + click-through smoke test of the real UI
```
## Development
```bash
node tools/build.js # rebuild wuxia.html after editing src/
node test/headless.js 40 # simulate 40 complete runs headlessly
node test/ui_smoke.js # boot the built file in jsdom and drive the UI
```
## Tips for new sect leaders
- Rest when hurt; dead disciples do not come back. Medicine heals injuries fast.
- Spar with wandering masters — losing teaches you their art anyway.
- Recruit early: assigned disciples generate inner-force growth every day.
- Watch your food. Hungry sects lose morale, then people.
- When the war comes (around day 4560), neutrality is also a choice… but someone
always remembers who stood aside.