Compare commits

...

3 Commits

Author SHA1 Message Date
Brian Fertig 0e93c6ed56 More adjustments 2026-07-04 17:48:34 -06:00
Brian Fertig c601771c92 Cards being dealt animations 2026-07-04 13:21:13 -06:00
Brian Fertig 29cf5972b6 Dungeon Boss item positioning 2026-07-04 12:34:37 -06:00
8 changed files with 862 additions and 79 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

View File

@ -10,12 +10,24 @@
" art-window aspect the renderer uses).",
" 3. Map each card id to its 0-based frame index in the matching map below.",
"Sheets: rooms are landscape windows; heroes/spells portrait; bosses larger",
"portrait. Ids not present in a map (or maps left empty) stay procedural."
"portrait. Ids not present in a map (or maps left empty) stay procedural.",
"deckBackSheet is different: it's the FULL card back (not an art window",
"inset into a procedural frame), used by the small deck-pile display on the",
"left side of the board. 4 frames in a 2x2 grid, 300x420 each, row-major:",
"0=Room Deck, 1=Spell Deck, 2=Hero Deck, 3=Epic Hero Deck. Until a path is",
"set, each pile falls back to a procedural back design with a unique glyph.",
"iconSheet is small badge icons (transparent bg, no border/plate — that's",
"still drawn procedurally), reused all over the UI: the 4 treasure-class",
"badges, the soul-count icon (hero cards, both boards, the soul-collect fx),",
"and the hero HP heart (filled) / boss wound-tracker pip (filled=remaining,",
"heartEmpty=lost). 128x128 each, 4x2 grid. Map key is the icon id."
],
"roomSheet": { "key": "dungeonboss-rooms", "path": "assets/images/dungeonboss-rooms.png", "frameWidth": 300, "frameHeight": 200 },
"heroSheet": { "key": "dungeonboss-heroes", "path": "assets/images/dungeonboss-heroes.png", "frameWidth": 300, "frameHeight": 225 },
"spellSheet": { "key": "dungeonboss-spells", "path": "assets/images/dungeonboss-spells.png", "frameWidth": 300, "frameHeight": 160 },
"bossSheet": { "key": "dungeonboss-bosses", "path": "assets/images/dungeonboss-bosses.png", "frameWidth": 300, "frameHeight": 275 },
"deckBackSheet": { "key": "dungeonboss-deckbacks", "path": "assets/images/dungeonboss-deckbacks.png", "frameWidth": 300, "frameHeight": 420 },
"iconSheet": { "key": "dungeonboss-icons", "path": "assets/images/dungeonboss-icons.png", "frameWidth": 128, "frameHeight": 128 },
"rooms": {
"darkaltar": 0, "opengrave": 1, "specterssanctum": 2, "succubusspa": 3,
@ -47,5 +59,11 @@
"bosses": {
"draculord": 0, "cleopatra": 1, "kingcroak": 2, "xyzax": 3,
"cerebellus": 4, "seducia": 5, "gorgona": 6, "robobo": 7
},
"deckBacks": {
"room": 0, "spell": 1, "hero": 2, "epic": 3
},
"icons": {
"fighter": 0, "mage": 1, "thief": 2, "cleric": 3, "soul": 4, "heartEmpty": 5, "heart": 6
}
}

File diff suppressed because it is too large Load Diff

View File

@ -238,7 +238,65 @@ just make each one visually distinct and readable at the small on-board size.
---
## 5. Menu icon — `game-icons.png` frame **77** *(shared sheet)*
## 5. Deck-back sheet — `dungeonboss-deckbacks.png`
| | |
|---|---|
| **Path** | `public/assets/images/dungeonboss-deckbacks.png` |
| **Frame size** | **300 × 420 px** (aspect ≈ 0.71 : 1, portrait — a full card back, not an art window) |
| **Sheet size** | **2 columns × 2 rows = 600 × 840 px** holds all 4 frames exactly |
| **Status** | ✅ Art already dropped in and wired (`deckBackSheet.path` is set) |
| **JSON** | `deckBackSheet` (set `path`) + `deckBacks` map (already filled in for all 4 ids) |
Unlike the four sheets above, this one is **not** an illustration inset into a
procedurally-drawn card frame — draw the **entire card back**, border and all,
since it's shown as-is (just scaled) in the small "decks remaining" pile
display on the left side of the board, below the deck-count text. Until art
is supplied, each pile falls back to a procedural back design (dark plate,
double border, one glyph per deck: ⌂ room, ✦ spell, ⚔ hero, ♛ epic hero).
### Frame map
| Frame | id | Pile |
|---:|---|---|
| 0 | `room` | Room Deck |
| 1 | `spell` | Spell Deck |
| 2 | `hero` | Hero Deck |
| 3 | `epic` | Epic Hero Deck |
---
## 6. Icon sheet — `dungeonboss-icons.png`
| | |
|---|---|
| **Path** | `public/assets/images/dungeonboss-icons.png` |
| **Frame size** | **128 × 128 px**, transparent background |
| **Sheet size** | **4 columns × 2 rows = 512 × 256 px** holds all 7 frames (1 spare) |
| **Status** | ✅ Art already dropped in and wired (`iconSheet.path` is set) |
| **JSON** | `iconSheet` (set `path`) + `icons` map (already filled in for all 7 ids) |
Small badge icons, reused all over the UI rather than tied to one card. Unlike
the sheets above, these paint **only the glyph** — the dark backing plate
behind the treasure icons, and the card layout around the heart/soul badges,
stay procedural. These render tiny (as small as ~18–30px on screen), so keep
shapes bold and simple.
### Frame map
| Frame | id | Icon | Used for |
|---:|---|---|---|
| 0 | `fighter` | Sword | treasure-class badge (room/boss cards) |
| 1 | `mage` | Tome | treasure-class badge |
| 2 | `thief` | Coins | treasure-class badge |
| 3 | `cleric` | Ankh | treasure-class badge |
| 4 | `soul` | Soul/wisp | every soul-count display (hero card, both boards, soul-collect fx) |
| 5 | `heartEmpty` | Hollow heart | boss wound tracker, lost-wound pip |
| 6 | `heart` | Filled heart | hero-card HP badge (number still drawn on top by code); boss wound tracker, remaining-life pip |
---
## 7. Menu icon — `game-icons.png` frame **77** *(shared sheet)*
| | |
|---|---|
@ -262,8 +320,10 @@ rather than a new file.
- [x] `dungeonboss-spells.png` — 1200×640 (4×4 grid), 300×160 per frame, 16 frames (0–15); `spellSheet.path` set in `dungeonboss-artwork.json`.
- [x] `dungeonboss-heroes.png` — 2100×1350 (7×6 grid), 300×225 per frame, 41 frames (0–40); `heroSheet.path` set in `dungeonboss-artwork.json`.
- [x] `dungeonboss-bosses.png` — 1200×550 (4×2 grid), 300×275 per frame, 8 frames (0–7); `bossSheet.path` set in `dungeonboss-artwork.json`.
- [x] `dungeonboss-deckbacks.png` — 600×840 (2×2 grid), 300×420 per frame, 4 frames (0–3); `deckBackSheet.path` set in `dungeonboss-artwork.json`.
- [x] `dungeonboss-icons.png` — 512×256 (4×2 grid), 128×128 per frame, 7 frames (0–6); `iconSheet.path` set in `dungeonboss-artwork.json`.
- [ ] `game-icons.png` frame 77 — 44×44 menu icon.
The frame→id mappings for all four sheets are already filled in in
The frame→id mappings for all six sheets are already filled in in
`public/data/dungeonboss-artwork.json` — once you drop the PNGs in and set the
four `path` fields, art appears with no code changes.
`path` fields, art appears with no code changes.

View File

@ -230,7 +230,7 @@ export default class PreloadScene extends Phaser.Scene {
// Dungeon Boss drop-in spritesheets, same contract as Spire Climb's.
const dbArt = this.cache.json.get('dungeonboss-artwork');
const dbSheets = [dbArt?.roomSheet, dbArt?.heroSheet, dbArt?.spellSheet, dbArt?.bossSheet]
const dbSheets = [dbArt?.roomSheet, dbArt?.heroSheet, dbArt?.spellSheet, dbArt?.bossSheet, dbArt?.deckBackSheet, dbArt?.iconSheet]
.filter((s) => s && s.path && s.key && !this.textures.exists(s.key));
// Star Wars Deckbuilder drop-in spritesheets, same contract.