- 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> |
||
|---|---|---|
| characters | ||
| engine | ||
| pipeline | ||
| tools | ||
| .gitignore | ||
| Digitized Fighting Game Tech Report.pdf | ||
| project.godot | ||
| README.md | ||
| STUDY.md | ||
FOITIN
Original digitized-style fighting game — the Bikini Karate Babes / Mortal Kombat formula (frame-captured fighters, data-driven everything) rebuilt with a modern engine and a generative 3D asset pipeline. All assets are our own.
- STUDY.md — reverse-engineering study of the BKB games + the assessment this project is built on. Start here.
- characters/_spec/CHARACTER_SPEC.md — the drop-in character folder format.
- pipeline/README.md — MODELBEAST character pipeline.
Run
Godot 4.7+. Open the project, hit play — or:
/Applications/Godot.app/Contents/MacOS/Godot --path .
P1: WASD + J/K (punch/kick, →+J straight, QCF+J special)
P2: arrows + O/P · F1 hitbox viewer · R reset after KO
Layout
engine/core/ fixed-tick combat core (FSM, input buffer, boxes, hit resolution)
engine/debug/ training-mode hitbox overlay
characters/ one folder per fighter — the engine scans this at boot
tools/ gen_placeholder_char.py (stick-figure stand-in fighters)
pipeline/ render→hitbox→pack scripts for MODELBEAST-made characters
Design rules
- 60Hz deterministic tick. All gameplay advances in
tick(input_mask)from input only — keeps rollback netcode on the table. Rendering just reads state. - Characters are data. No fighter-specific code, ever. If a character needs a new mechanic, the mechanic becomes a generic engine feature driven by JSON.
- Art frame-rate ≠ game timing. Moves are timed in ticks; sprite sequences
stretch over them (BKB's
.bik+.zon+.geosplit, modernized).
Adding a character
# placeholder (instant):
python3 tools/gen_placeholder_char.py gamma '#8855ee'
# production (MODELBEAST): render moves to renders/<id>/<move>/*.png, then
python3 pipeline/pack_character.py renders/<id> --name NAME --color '#hex'
python3 pipeline/autohitbox.py characters/<id>
# tune timings/damage in each move's data.json, bind moves in manifest.json
Restart the game — the roster is whatever's in characters/.