Commit Graph

22 Commits

Author SHA1 Message Date
type-two
f96fbaeb06 restyle_frames.py: generate frames@<style> tiers (pillow-xray + farm engines); vesper gets 4th band 'xray'
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 15:43:29 +10:00
type-two
c1eca9e1a0 hp_bands wardrobe mode: states as mini health bars + segmented HUD
Each wardrobe state owns an equal hp band; emptying a band breaks the
fighter into the next look (white flash). HUD draws one colored segment
per band. --demo=bands + --shot-ticks for multi-shot verification.
Vesper (geared/base/torn) switched to hp_bands as the pilot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 15:11:36 +10:00
m3ultra
4e2004e740 Settings page, pause menu, menu navigation; fix packed-app portraits
- select screen portraits load via pck-safe loader (the blank-cards bug
  in the shipped build)
- Settings (title menu + persisted user://settings.json): fullscreen,
  hitbox viewer default, master volume
- Esc: pause menu in fights (resume/rematch/select/menu), back-to-title
  from select/editor/settings
- FOITIN_SHOT env hook smoke-tests exported builds end-to-end

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 21:31:16 +10:00
m3ultra
58beabe4e8 Ignore build outputs
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 15:16:10 +10:00
m3ultra
12528b4de0 Title screen, FOITIN editor, pck-safe loaders, export presets
- Title: PLAY / EDITOR entry
- Editor (in-app): edit fighter name/stats/colour -> user://overrides,
  import character folders -> user://characters, add stage backgrounds
  -> user://stages, open content folder
- loaders work in editor, exported .pck, and user:// drop-ins
  (ResourceLoader remap-stripping + byte-buffer fallbacks)
- stage backgrounds render behind fights when present
- export_presets: mac (universal, ad-hoc sign), win x86_64, linux x86_64

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 15:02:37 +10:00
m3ultra
ab087659f0 MIRPAMO wave: SIREN + DAPHNE (fighters 17-18), roster grid 3rd size tier
- batch_roster kit_glb mode: pre-retargeted MIRPAMO kits render via
  --self-anim; unmapped actions dropped
- both nude bases fully playable: 16 moves, auto finisher timing,
  base-only wardrobe until WARDROBEGOD garments arrive
- select grid scales to 18+ (9 per row tier)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 14:44:28 +10:00
m3ultra
b033879963 strip_skin: export GLB not FBX — Blender 5 FBX exporter flattens slotted actions
This was the entire 'MIRPAMO retarget is mushy' mystery: the retarget math
was fine, the converted clips were flat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 14:39:58 +10:00
m3ultra
c3d682b7dd Finisher timing pass: measured impact windows for all batch fighters
tools/tune_finishers.py detects each finisher's impact frame (max forward
extent of the sprite) and sets real-time totals + active windows; values
persist in finisher_timings.json and win over DEFAULT_FINISHER in tune.
kachujin/vesper keep hand-tuned values.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 14:31:13 +10:00
m3ultra
e624bec379 MeshGod eight rebuilt at full scale; dizzy trims
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 13:58:05 +10:00
m3ultra
1005422053 Closed-loop camera calibration: pixel servo handles arbitrary rig conventions
MeshGod/TRELLIS Mixamo re-rigs pose half a metre underground and compressed
(bone-space origin at hips, 0.01/100 scale sandwich). Instead of fighting
transform conventions, the renderer probes the first posed frame, measures
the actual sprite in pixels, and servo-corrects ortho scale + camera z:
unclip -> converge height -> pin feet to the ground row. Also: normalize
scales all root objects, deformed-height helper.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 13:37:58 +10:00
m3ultra
87f9b421bb MeshGod wave config: 8 fighters, wildcard tear filter for fused TRELLIS meshes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 13:09:15 +10:00
m3ultra
5f2515d89f MIRPAMO integration groundwork: strip_skin converter, --self-anim render mode
- pipeline/strip_skin.py: with-skin Mixamo FBX -> anim-only, normalises
  numbered bone namespaces (mixamorigN: -> mixamorig:)
- render_moves.py --self-anim renders actions baked into the char file
  (MIRPAMO retarget output)
- phrtt2-nsfw + daphne rigged via MIRPAMO autorig (clean weights);
  17-clip kit retargeted but pose quality poor — retarget stage needs
  a bonemap/markers tuning pass before these ship as fighters

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 12:24:41 +10:00
m3ultra
cdafb83a33 Six new fighters: RAVER CHEF EXEC JINX ELVA UMBRA (batch-built, base+torn); trim dizzy to standing sway
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 00:07:43 +10:00
m3ultra
0f83637fcc Roster batch tooling: 6 new fighters from the asset library
- pipeline/batch_roster.py: model + clip-kit per fighter, renders
  base+torn, packs, hitboxes, tunes, portraits — sequential batch
- --strip flag (mesh removal) added; Mixamo pack models turn out hollow
  under clothes, so this batch ships base+torn; true clothes-off waits
  on rigging the wardrobegod nude bases (phrtt2, daphne)
- tune_fighters: manifests + default finisher timing for raver/chef/
  exec/jinx/elva/umbra; getup move tuned
- select screen wraps to a 4-per-row grid

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 23:38:16 +10:00
m3ultra
d743216b54 Character select screen + fatality-style finisher system
- Select scene (new main scene): roster cards from characters/* with
  portraits, dual cursors (P1 A/D+J, P2 arrows+O), picks via GameState
- finisher flow: KO puts loser in DIZZY with a 5s flashing FINISH! window;
  winner lands QCF+K in range -> finisher move (Brutal Assassination /
  Hell Slammer B) with darkened stage, victim plays synced death anim;
  window expiry or any stray hit = normal collapse
- new moves rendered for both fighters in all wardrobe states:
  dizzy (Stunned), finisher, death (Standing Death Backward)
- CHAR_TUNE per-character move overrides in tune_fighters.py

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 23:27:51 +10:00
m3ultra
9f5a8a7de9 Retire stick-figure placeholders to characters/_placeholders — default roster is kachujin vs vesper
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 23:10:23 +10:00
m3ultra
347804135d 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>
2026-07-28 22:23:05 +10:00
m3ultra
54a54f2467 Torn-clothing wardrobe mechanic (Phase A)
- engine: wardrobe states per character (manifest wardrobe.states),
  frames@<state> variant frame-sets per move with base fallback,
  tears:true moves advance state, hp threshold forces final state
- pipeline: --torn punches jagged alpha holes into clothing textures
  (alpha-clip materials) and renders @torn variants; pack maps them
- both fighters: full torn frame-sets for all 12 moves
- special gets designed forward lunge (clip travel was backward)
- verified: demo QCF+P connects, knockdown shows torn frames

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:09:06 +10:00
m3ultra
6c1c48c7c6 Phase 2: crouch/win/lose moves, vesper differentiated (bouncing idle + hurricane kick special)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 19:53:44 +10:00
m3ultra
da1cceadc2 Two real fighters: KACHUJIN and VESPER, 11 moves each from Mixamo combat clips
- per-frame hips-centred rendering + root-motion export (the BKB .geo
  approach modernised): traveling clips stay pivot-stable, movement data
  goes to root_motion_frames in data.json
- engine: frame-indexed root motion, pushbox widened for real sprites
- clip set: ginga idle, walks, jump, block, punching/boxing/martelo
  normals, chapa-giratoria QCF special, hit react, knockdown
- verified in-game: demo jab connects, damage applied, mirroring correct

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 19:50:56 +10:00
m3ultra
8e58b88262 Blender render pipeline + first real character from asset library
- pipeline/render_moves.py: headless Blender 5.x renderer — imports rigged
  FBX/GLB, remaps Mixamo bone namespaces (mixamorigN:), fixes FBX axis/scale,
  normalises height, centres ground pivot, renders transparent ortho sprites
- engine: sprite_scale in manifest (scales sprite + all boxes), --p1/--p2
  roster picks for testing
- characters/trainer: woman_athleisure_01 (Mixamo, web-ok) rendered through
  the full pipeline as integration proof — idle/jab/hit from NPC clips,
  silhouette auto-hurtboxes, verified in-game vs alpha

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 19:02:39 +10:00
m3ultra
b067bf7f0b Scaffold: deterministic 60Hz combat core, drop-in character format, MODELBEAST pipeline
- Godot 4.7 project; fixed-tick FSM fighter, facing-relative input buffer
  with numpad motion parsing, box collision, training-mode hitbox overlay
- characters/ = self-describing drop-in folders (spec in _spec/); two
  generated placeholder fighters (alpha, beta)
- pipeline/: pack_character.py + autohitbox.py (pose/silhouette hurtboxes)
- STUDY.md: reverse-engineering study of the BKB reference games

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 18:45:44 +10:00