Skip to content

feat(hero): strike-pose attack hero GLB for combat-state swap (FLO-480)#123

Closed
Fl0p wants to merge 1 commit into
mainfrom
flo480-attack-pose-hero
Closed

feat(hero): strike-pose attack hero GLB for combat-state swap (FLO-480)#123
Fl0p wants to merge 1 commit into
mainfrom
flo480-attack-pose-hero

Conversation

@Fl0p

@Fl0p Fl0p commented Jun 21, 2026

Copy link
Copy Markdown
Collaborator

What & why

Delivers the strike-pose hero GLB (public/models/korovany_hero_player-attack.glb)
for FLO-480 — the attack-state avatar that unblocks the normal↔attack swap in
FLO-474. CTO decision was variant B (new strike-pose GLB), since the loader renders
GLBs statically and the pose must be baked into bind-pose geometry (FLO-434).

Second GLB of the same survivor character as korovany_hero_player-default, in a
forward lunging strike (lead fist raised/clenched). Bare fists, no weapon — the
default hero is empty-handed, so the silhouette matches.

Drop-in parity (Babylon NullEngine smoke loader)

asset tris size bbox x bbox y (height) bbox z longest extent
attack 2,905 295 KB 0.88 2.0 0.531 y (height)
default 2,884 298 KB 0.723 2.0 0.494 y (height)

Both have height 2.0 as the longest bbox extent → loadModel(targetSize:1.8)
renders both at the same in-scene height, grounded at y=0 and centred on x/z. No
scene-code change or vertical jump on swap.
A forward strike (not raised-overhead)
is what keeps height as the longest extent; an overhead raise would have shrunk the
body under fitScale.

Style / coherence

Flat-unlit 1× 1024 base-color (FLO-440 pattern) — no PBR gloss, coherent with the
default hero's v13 flat-matte treatment. Engine still facets via
convertToFlatShadedMesh at load like every character. ≤3,000-tri v1.2 Hero budget.

Pipeline (reproducible)

Meshy: preview 019eead7-8fc8-743b-a550-8c54b344a2d3 (20cr) → refine
019eead9-26e6-78f4-94b6-e7e9b7ac3a01 (10cr, geometry) → flat retexture
019eeadc-c569-72af-b3dc-642406681f6a (10cr) → resize to 1024. Total 40cr.
Full spec + prompt in assets/models/hero/korovany_hero_player-attack.README.md.
Renders: *.preview.png (silhouette truth), *.strike.png (palette truth).

Docs

  • public/models/README.md — catalog entry added.
  • assets/models/hero/korovany_hero_player-attack.README.md — spec sheet.

Review gate

Art-signoff: Iris (visual-truth) — pose reads as attack not surrender; facet+matte
coherence with the other characters. Combat-state wiring is FLO-474 (Wayland/Aldric),
not in this PR. Coordinator: Daedalus.

🤖 Generated with Claude Code

Second hero GLB of the same survivor character in an attack pose (forward
lunging strike, lead fist raised) for the normal<->attack avatar swap that
unblocks FLO-474. Drop-in twin of korovany_hero_player-default:

- 2,905 tris (<=3,000 cap), 295 KB, 1x 1024 flat unlit base-color.
- Same outfit/palette/identity; bbox height 2.0 = default's longest extent, so
  loadModel(targetSize:1.8) renders both at the same in-scene height -> no
  vertical jump or rescale on swap.
- Forward strike (not raised-overhead) keeps height as the longest bbox extent;
  an overhead raise would have silently shrunk the body under fitScale.
- Flat-matte retexture (FLO-440 pattern) -> coherent with the default, no PBR
  semi-realism; engine still facets via convertToFlatShadedMesh.
- Pose baked into bind-pose geometry (loader renders GLBs statically; rig is
  useless here -- lesson FLO-434).

Meshy: preview 019eead7-8fc8-743b-a550-8c54b344a2d3, refine
019eead9-26e6-78f4-94b6-e7e9b7ac3a01, flat retexture
019eeadc-c569-72af-b3dc-642406681f6a (40cr). Spec + renders in
assets/models/hero/. Combat-state wiring is FLO-474 (Wayland/Aldric).

Co-Authored-By: Pygmalion <pygmalion@agents.flopbut.local>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Fl0p

Fl0p commented Jun 21, 2026

Copy link
Copy Markdown
Collaborator Author

Landed on main via fast-forward (commit 35bb448, author preserved=Pygmalion, committer=Daedalus). LFS oid 7d361e44… (301848 B) intact post-merge. Closing as merged-by-FF.

@Fl0p Fl0p closed this Jun 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant