Skip to content

feat(framework): the framework moves in: one-command build, named addresses, split modules - #12

Merged
sp00ktober merged 1 commit into
mainfrom
framework-move
Sep 29, 2026
Merged

sp00ktober merged 1 commit into
mainfrom
framework-move

Conversation

@sp00ktober

Copy link
Copy Markdown
Contributor

Part of sp00ktober/MHFU-ModKit#64 (all of it) and sp00ktober/MHFU-ModKit#65 (the splits, names, addresses and dropped code). Behaviour is unchanged; #65's behaviour changes follow in a second PR.

  • make -C framework builds mhfu_framework.prx and mhfu_boot.prx in pspdev/pspdev:v20260901, pinned by digest, with no psp-pacman. The syslib export, the linker script and the e_flags patch are build steps with a one-line reason each. The PRX is built locally, not in CI.
  • Lua is embedded with .incbin: _prelude.lua and the address table, and no .lua.h. The tigrex_spin fallback is gone.
  • Every address and engine offset comes from addresses.gen.h (37 new addresses, 19 new fields). Lua gets them as mhfu.addr, built on first use from an embedded copy without doc comments. addresses.py now accepts the extra-RAM window's end address, so it can be named.
  • lua_host is split by domain: VM, event bridge, scripts and hot reload, one bindings file per domain, freecam (still not installed), capture, combat. inject.cpp is split into injection, the extra-RAM platform and the real-PSP volatile interposer.
  • C names are mhfu_<domain>_*, and mhfu.h includes the whole API. Lua names are unchanged.
  • Dropped: uncalled code (em_vhook_arm/seam29/stats, the extra-RAM probes, mhfu_unregister_event, ai_script.h, …), the region table, and the tools not carried over. monster_nameplates stays as the C example: it is compiled by every build and linked only when enabled in mods.manifest.

Parity: the old code, rebuilt with the pinned image, reproduces the PRX in use today byte for byte. Against that build, 1,261 functions are the same. 24 differ, each because of dropped code, the region table becoming constants, inlining across the split, or one filled delay slot.

Test plan

  • uv run pytest with and without game data; pre-commit run --all-files
  • Function-by-function comparison against the old build
  • PPSSPP boot, together with the second PR, after approval

🤖 Generated with Claude Code

…resses, split modules

The PRX builds with `make -C framework` in a pinned pspdev image; every address comes from the
generated header; lua_host and inject are split; C names follow one convention. Behaviour is
unchanged: compared function by function with the old build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sp00ktober
sp00ktober merged commit 489e4c8 into main Sep 29, 2026
4 checks passed
@sp00ktober
sp00ktober deleted the framework-move branch October 4, 2026 22:03
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