{ "_readme": [ "Drop-in art for Spire Climb.", "CREATURES: a dedicated placeholder sheet ships at the creatureSheet.path below", " (spireclimb-creatures.png, 1500x600 = 10 frames of 300x300, 5 cols x 2 rows,", " row-major frame order). Regenerate it with `node genSpireClimbCreatures.js`, or", " paint over it keeping the same layout/frame order. The 'creatures' map ties each", " enemy id to its frame index.", "CARDS: still procedural until you add a sheet. To add card art:", " 1. Drop spireclimb-cards.png into /assets/images/.", " 2. Set cardSheet.path below + frameWidth/frameHeight.", " 3. Map each card id to its 0-based frame index in 'cards'.", "Cards show the illustration inside the procedural card frame's art window (no", "border/text needed). Recommended card frame 250x160 (art-window aspect). See", "src/games/spireclimb/sprites.md for the full sprite spec + frame maps.", "PLAYER SHEETS: one horizontal strip per class (warrior, rogue), 3 frames of", " 300x300 each (total sheet size 900x300). Frame order: 0=idle, 1=attack, 2=hit.", " Drop spireclimb-warrior.png and spireclimb-rogue.png into /assets/images/.", " The game reads playerSheets below to load and display them." ], "cardSheet": { "key": "spireclimb-cards", "path": "assets/images/spireclimb-cards.png", "frameWidth": 250, "frameHeight": 160 }, "creatureSheet": { "key": "spireclimb-creatures", "path": "assets/images/spireclimb-creatures.png", "frameWidth": 300, "frameHeight": 300 }, "playerSheets": { "warrior": { "key": "spireclimb-warrior", "path": "assets/images/spireclimb-warrior.png", "frameWidth": 300, "frameHeight": 300 }, "rogue": { "key": "spireclimb-rogue", "path": "assets/images/spireclimb-rogue.png", "frameWidth": 300, "frameHeight": 300 } }, "cards": { "strike": 0, "defend": 1, "bash": 2, "neutralize": 3, "survivor": 4, "ironwave": 5, "pommelstrike": 6, "cleave": 7, "shrugitoff": 8, "clothesline": 9, "inflame": 10, "uppercut": 11, "ghostlyarmor": 12, "bodyslam": 13, "metallicize": 14, "whirlwind": 15, "limitbreak": 16, "demonform": 17, "daggerthrow": 18, "poisonedstab": 19, "deadlypoison": 20, "backflip": 21, "sneakyhit": 22, "footwork": 23, "bladedance": 24, "caltrops": 25, "bouncingblade": 26, "crippling": 27, "catalyst": 28, "bandage": 29, "flashofsteel": 30, "wound": 31, "dazed": 32, "burn": 33, "anger": 34, "clash": 35, "flex": 36, "headbutt": 37, "heavyblade": 38, "twinstrike": 39, "thunderclap": 40, "wildstrike": 41, "bloodletting": 42, "carnage": 43, "disarm": 44, "entrench": 45, "hemokinesis": 46, "intimidate": 47, "pummel": 48, "secondwind": 49, "seeingred": 50, "shockwave": 51, "barricade": 52, "bludgeon": 53, "fiendfire": 54, "immolate": 55, "impervious": 56, "offering": 57, "reaper": 58, "acrobatics": 59, "bane": 60, "cloakdagger": 61, "daggerspray": 62, "deflect": 63, "flyingknee": 64, "outmaneuver": 65, "prepared": 66, "quickslash": 67, "slice": 68, "suckerpunch": 69, "backstab": 70, "dash": 71, "eviscerate": 72, "finisher": 73, "flechettes": 74, "legsweep": 75, "noxiousfumes": 76, "riddlewithholes": 77, "thousandcuts": 78, "adrenaline": 79, "diedidie": 80, "envenom": 81, "grandfinale": 82, "shiv": 83, "bite": 84, "blind": 85, "deepbreath": 86, "dramaticEntrance": 87, "finesse": 88, "goodinstincts": 89, "swiftstrike": 90 }, "creatures": { "jawworm": 0, "cultist": 1, "louse": 2, "fungi": 3, "spikeslime": 4, "sentry": 5, "gremlinnob": 6, "lagavulin": 7, "guardian": 8, "slimeboss": 9, "centurion": 10, "mystic": 11, "byrd": 12, "snecko": 13, "taskmaster": 14, "bookwyrm": 15, "automaton": 16, "darkling": 17, "spiker": 18, "maw": 19, "wraith": 20, "nemesis": 21, "giant": 22, "awakened": 23 } }