Gear wardrobe state (Phase B): vesper geared with MODELBEAST boxing gloves + headgear
- gear GLBs generated on MODELBEAST (flux product shot -> bg_remove -> trellis_mac), staged in foitin_assets/gear/ - pipeline: --attach bone-parents rigid gear (armature-scale compensated, '|'-separated spec); render_geared.sh holds calibrated transforms - vesper: 3-state degradation geared -> base -> torn; specials knock gear off first, then shred clothes; kachujin stays 2-state (per-character data) - spec doc: wardrobe section in CHARACTER_SPEC.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ -8,11 +8,13 @@ one JSON per move instead of the binary `BKB!ZONE/GEOM/DAT2` sidecars.
|
||||
|
||||
```
|
||||
characters/<id>/
|
||||
manifest.json identity, stats, move bindings
|
||||
manifest.json identity, stats, move bindings, wardrobe states
|
||||
portrait.png select-screen / HUD portrait
|
||||
moves/<move>/
|
||||
data.json frame data (timing, boxes, damage, root motion)
|
||||
frames/0000.png ... sprite sequence, alphabetical order
|
||||
frames/0000.png ... sprite sequence, alphabetical order (base state)
|
||||
frames@torn/ ... optional wardrobe-state variants (same frame count;
|
||||
frames@geared/ ... missing variants fall back to base per-move)
|
||||
```
|
||||
|
||||
## Conventions
|
||||
@ -49,6 +51,21 @@ characters/<id>/
|
||||
- `command_moves`: checked before normals; `motion` is numpad notation
|
||||
(`[2,3,6]` = quarter-circle-forward), completed within 14 ticks.
|
||||
|
||||
## Wardrobe (battle damage)
|
||||
|
||||
```json
|
||||
"wardrobe": { "states": ["geared", "base", "torn"], "tear_below_hp": 0.35 }
|
||||
```
|
||||
|
||||
Ordered degradation states. Getting hit by a move with `"tears": true`
|
||||
advances one state (gear knocked off → clothes shredded); dropping below
|
||||
`tear_below_hp` × max health forces the final state. States map to
|
||||
`frames@<name>/` variant dirs per move ("base" = the default `frames/`).
|
||||
Render variants with `pipeline/render_moves.py --torn ...` (alpha-hole
|
||||
shredding) or `--attach ...` (bone-parented gear, see
|
||||
`pipeline/render_geared.sh` for calibrated specs). Per-character: a fighter
|
||||
with `["base","torn"]` simply has no gear stage.
|
||||
|
||||
## moves/<move>/data.json
|
||||
|
||||
```json
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
"sprite_scale": 1.25,
|
||||
"wardrobe": {
|
||||
"states": [
|
||||
"geared",
|
||||
"base",
|
||||
"torn"
|
||||
],
|
||||
|
||||
BIN
characters/vesper/moves/block/frames@geared/0000.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0001.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0002.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0003.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0004.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0005.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0006.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0007.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0008.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0009.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0010.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0011.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0012.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0013.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
characters/vesper/moves/block/frames@geared/0014.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
characters/vesper/moves/block/frames@geared/0015.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0016.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0017.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0018.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0019.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0020.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0021.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0022.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0023.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0024.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0025.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0026.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0027.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0028.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0029.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0030.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0031.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0032.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0033.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0034.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0035.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0036.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0037.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0038.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0039.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0040.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0041.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0042.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0043.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0044.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0045.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0046.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/block/frames@geared/0047.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0048.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0049.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/block/frames@geared/0050.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/block/frames@geared/0051.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0000.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0001.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0002.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0003.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0004.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0005.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0006.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0007.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0008.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0009.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0010.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0011.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0012.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0013.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
characters/vesper/moves/crouch/frames@geared/0014.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0000.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0001.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0002.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0003.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0004.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0005.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0006.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0007.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0008.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0009.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0010.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0011.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0012.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0013.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0014.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0015.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0016.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0017.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0018.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0019.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0020.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0021.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0022.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0023.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0024.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0025.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0026.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0027.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0028.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0029.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
characters/vesper/moves/hit/frames@geared/0030.png
Normal file
|
After Width: | Height: | Size: 117 KiB |