Address and Patch Site Registry - smeagol44/MKMSZ-Randomizer GitHub Wiki
Rich Inventory diagnostic and rejected retry (2026-10-08): no new production site. Existing diagnostic v01 (SHA-256 9b7c47758be500535ef10a4c0a063667e50cded66ab28a1b101f0182d4be3152) redirects only rejection: ROM 0x8B158, 1440000A→1440000F; ROM 0x8B198, 00000000→0806CCEF (J 0x801B33BC), preserving delay slots. File-1A end at ROM 0xA514C changes 01819B9C→01819C00; helper/log fill its existing tail up to arena floor 0x801B3420. No ROM was built here. Proposed 1440FFFD retry at 0x8B158 is rejected for upstream research. The earlier two-byte Vanilla continuation repair remains a verified presentation fix, not music causation. See report and historical guards.
2026-10-06 Powers-as-pickups OFF earned-XP persistence — Runtime-confirmed bounded: no new permanent hook site is introduced. In OFF builds only, after lifecycle v06 installs its validated transfers, the five teardown/reconstruction sites ROM 0x172CC, 0x36178, 0x36934, 0x36B38, and 0x36BC0 are guarded against the exact v06 replacements and retargeted through XP snapshot wrappers in the existing Runtime-V2 XP payload. Each wrapper stores native current XP 0x8011200C to MKSV +0x44 and tail-enters the same v06 Pause/reason entry. The constructor 0x2F984 and terminal reset 0x367B4 remain exact v06. The pickup-manager resume retains the established fixed-size replacement shape but calls the OFF XP restore before four-box reconstruction. Stock XP award/store sites 0x2EDA8, 0x54CE8, 0x57D60, 0x57E2C, combo XP render calls, and cap table are explicitly guarded and left unchanged.
Inventory-HUD v20 guard (2026-10-05): exact v19 SHA aafcc7e26ecd77b04a3882cee9569161f8059d92af1fce003ac3e68e08406277; ROM 0x00074F08 / VA 0x80074308 / alias 0xA0074308: expected 00000000 → 24041200 (addiu a0,zero,0x1200). This initializes the first-load HUD allocation size in the null-branch delay slot without changing allocation ownership. Exact v20 SHA 3461ed86540d51881f5f7d1b45c17dee9113484889370c8af750b819a11b1daa; CRC1/CRC2 479EDF13 / E1BE6C34. Runtime-confirmed bounded: the user reports the TEST LAB Inventory hang is fixed on v20. See TEST LAB Inventory diagnosis.
2026-10-01 lifecycle production: accepted v06 promotes the static-closure sites at ROM 0x172CC, 0x36178, 0x36934, 0x36B38, 0x36BC0, 0x2F984, and 0x367B4, plus the HP overwrite suppression at 0x2FA44 and fresh-run configuration words at 0xA6BA8..0xA6BAD. Exact four-word guards and the Runtime-confirmed helper blob are enforced by run_lifecycle.py and tests. ROM 0x364EC remains prohibited for reset. Production XP/Mission Objective restoration and the four-box default-loader replacement retain their existing owners.
Scope: This page is the canonical owner for exact guarded ROM edits: patch location, expected/original bytes or guard condition, replacement/effect, and the feature that performs the edit.
It does not decide whether a continuous ROM/RDRAM interval is available or who owns a cave/reservation. Continuous ownership, lifecycle, conflicts, and production-safe bounds belong to Memory and allocation map. Function meanings belong to Function registry.
All ROM offsets are for the clean USA Rev. 0 .z64 image. “Production” means current browser/CLI pipeline ownership; proof-only sites are not written by the product. Multi-byte generated bodies may be validated by implementation/tests instead of reproducing every emitted word here, but their guarded write site and effect remain indexed here.
| ROM site | VA / context | Owner | Expected / guard | Replacement / effect |
|---|---|---|---|---|
0x0000DD60 |
— | Stage selector | 0x2414000A |
Last compact menu index becomes 7
|
0x0000DD64 |
— | Stage selector | 0x2A82000B |
Entry count becomes 8
|
0x0000DD70 |
0x8000D170 |
Stage selector movement SFX | 24040050 24050014 |
First word becomes JAL frontend-resident movement helper; original li a1,0x14 remains in delay slot. Helper plays descriptor 0x1FC only for a newly pressed single Up/Down edge and restores displaced draw arguments. |
0x0000E028 |
— | Stage selector | JAL 0x8002830C
|
JAL debug menu 0x8000D0B8
|
0x00015CD0 |
— | Stage selector | load from 0x800C11E0
|
JAL compact-index mapper |
0x0001674C |
— | Four-box input | 3C03802F 9463CE18 |
Call switching action routine, then resume 0x80015B54
|
0x0001C9A0..0x0001C9AF |
0x8001BDA0 |
Rainbow outfit | guarded first four frame-setup instructions |
rainbow mode only: tail-jump through uncached helper 0xA01AF700, which replays displaced instructions and resumes 0x8001BDB0
|
0x0002EB28 |
0x8002DF28 |
Toasty production trigger | 0C00B81E 03C02821 |
JAL shared Toasty dispatcher; only qualifying successful/unblocked reactions arm the comment countdown |
0x0005CCE0 |
0x8005C0E0 |
Toasty stage init | 3C048029 8C841C10 |
Jump through production-owned selector padding to load file 0x1A and initialize Toasty |
0x0005D2E0 |
0x8005C6E0 |
Toasty HUD compositor | 0C007AB9 A0C20046 |
JAL shared Toasty dispatcher while preserving the stock HUD submission path |
0x000396CC |
0x80038ACC |
Persistence | 3C03800A 8C63A910 |
Restore collected flags, resume 0x80038AD4
|
0x000172CC..0x000172DB |
0x800166CC |
Lifecycle v06 Pause Quit | Guard stock four-word Quit->Yes teardown call | Transfer to uncached helper, snapshot living HP/resources/inventory, replay stock teardown contract |
0x00036178..0x00036187 |
0x80035578 |
Lifecycle v06 failure root | Guard 27BDFFA0 AFB30044 00009821 AFBF005C
|
Commit inventory, classify failure/demo, invalidate living HP token, preserve stock death/Continue graph |
0x00036934..0x00036943 |
0x80035D34 |
Lifecycle v06 alternate reconstruction | Guard 27BDFFE0 AFB00010 00808021 3C02802F
|
Classify living/failure reconstruction through uncached helper |
0x00036B38..0x00036B47 |
0x80035F38 |
Lifecycle v06 valid-preserving reconstruction | Guard 3C02802F 8C42CE20 27BDFFE8 AFBF0010
|
Capture living state before teardown/reconstruction |
0x00036BC0..0x00036BCF |
0x80035FC0 |
Lifecycle v06 stage completion | Guard 27BDFFE8 24040012 2402001A AFBF0010
|
Capture living HP/resources, commit active inventory box, arm one-shot re-entry |
0x0002F984..0x0002F993 |
0x8002ED84 |
Lifecycle v06 player constructor | Guard 3C04802C 8C841AC0 3C02800C 844211F8
|
Consume one-shot living re-entry and seed native HP carrier before stock HP branch |
0x0002FA44 |
0x8002EE44 |
Lifecycle v06 HP preservation | A4A20654 |
NOP redundant second full-HP store; fresh/death/Continue full HP remains at earlier stock constructor branch |
0x000367B4..0x000367C3 |
0x80035BB4 |
Lifecycle v06 final Game Over | Guard 0C00A1E5 24040004 8FA7002C 00002021
|
Classified terminal reset, then replay stock yield/title chain |
0x000A6BA8..0x000A6BAD |
0x800A5FA8..0x800A5FAD |
Lifecycle run settings | Stock halfwords 2 / 3 / 1
|
Build-time difficulty 0..4 (Very Easy..Very Hard), lives 1..10, continues 0..5; defaults 4 / 5 / 3. Exact Runtime-confirmed v06 reference was 4 / 9 / 5. |
0x00016354 |
0x80015754 |
Production TURN action gate | A62406DC 3C058003 |
Jump to guarded v10/v06 action-install helper; suppress player states 23/24 only when effective LOCK is active |
0x00029FB0 |
0x800293B0 |
Production TURN direction decision | 8C640704 24020305 |
JAL production TURN decision trampoline; TOGGLE follows stock, LOCK uses accepted v10 facing correction while preserving stock forced-facing authority |
0x0002A0DC |
0x800294DC |
Production TURN release path | 8C820638 94430000 |
JAL leaf-only v06 release helper; forced-facing fallback uses bounded direct controller-list scan |
0x000770B8 |
frontend OPTIONS -> GAME SETTINGS call | Production GAME SETTINGS wrapper | 0C01D9AF 02402021 |
JAL frontend-resident wrapper; mirrors durable TURN bit into the stock editor and commits it on return; does not load gameplay expansion file |
0x00077480..0x000775DB |
GAME SETTINGS right-edit body | Production GAME SETTINGS frontend | guarded stock edit body | Five-setting TURN/ATTACK/SPECIALS/JUMP/RUN right-edit dispatcher plus JUMP/RUN draw helper |
0x00077600..0x0007769B |
GAME SETTINGS left-edit body | Production GAME SETTINGS frontend | guarded stock edit body | Five-setting TURN/ATTACK/SPECIALS/JUMP/RUN left-edit dispatcher |
0x00077888..0x0007790F |
GAME SETTINGS value draws | Production GAME SETTINGS frontend | guarded stock Lives/Continues draw bodies | Draw ATTACK and SPECIALS enum values at compact coordinates |
0x00077910..0x0007791B |
GAME SETTINGS loop tail | Production GAME SETTINGS frontend | 24080002 AFD006F4 AFC806F8 |
JAL JUMP draw/cursor helper + NOPs; v04 owns all three words so stock cannot overwrite cursor type |
0x000AF824..0x000AF833 |
GAME SETTINGS cursor coordinate table | Production GAME SETTINGS frontend | guarded stock type-2 four-entry table | Five-setting cursor coordinates; RUN/EXIT use stock OPTIONS cursor type 0 |
0x0003A018 |
0x80039418 |
Persistence | ACA2002C |
Capture stage/ordinal after collected store while preserving displaced store |
0x00039FD4..0x00039FDB |
0x800393D4..0x800393DB |
Global materializer acquisition re-mask | 00121040 00521021 |
PR #126 integration candidate: JAL shared file-0x1A acquisition-remask helper + replay first displaced instruction; helper commits LIVE inventory to backing then reconstructs stage-masked LIVE before replaying the second displaced instruction. v03 Runtime-confirmed at relocated helper 0x801B0970..0x801B0A5F; merge pending. |
0x0005D9CC |
HUD function | Box indicator | JAL 0x8001EAE4
|
JAL native box-indicator wrapper |
0x00066F60..0x00066F67 |
arena construction | Arena reservation | 3C02801B 2442F420 |
3C02801B 24423420 = floor 0x801B3420
|
0x00066FE0 |
0x800663E0 |
Bootstrap | guarded native sequence | Call native bootstrap stub |
0x00066FE4..0x00066FEB |
second stock arena construction / bootstrap precondition | Arena reservation + bootstrap | 3C02801B 2442F420 |
ArenaReservation guards the full pair and changes the low immediate to 0x3420; the later bootstrap hook supersedes 0x66FE4 with its delay-slot NOP while the generated stub establishes the same 0x801B3420 floor |
0x0007A3F4 |
0x800797F4 |
Logo bypass | 0C01F113 00000000 0C01F143 00000000 0C018576 24040080 |
first word 0x10000003 (beq zero,zero,+3); preserves fade/title |
0x00072C10 |
0x80072010 / Bridge all-three ownership scan |
Four-box inventory |
0x2463600C (addiu v1,v1,0x600C) |
0x24636048: preserve native Bridge use-site gate/completion path but start ownership scan at authoritative Box 1 |
0x00072C28 |
0x80072028 / Bridge all-three ownership scan |
Four-box inventory |
0x2882000A (slti v0,a0,10) |
0x28820028: scan 40 authoritative backing slots instead of ten LIVE slots |
0x00072C94 |
0x80072094 / Fire all-three ownership scan |
Four-box inventory |
0x2463600C (addiu v1,v1,0x600C) |
0x24636048: preserve native Fire use-site gate/completion path but start ownership scan at authoritative Box 1 |
0x00072CAC |
0x800720AC / Fire all-three ownership scan |
Four-box inventory |
0x2882000A (slti v0,a0,10) |
0x28820028: scan 40 authoritative backing slots instead of ten LIVE slots |
0x0007B900..0x0007B94B |
0x8007AD00 |
Four-box mask | guarded stock sanitizer body | Replace with stage-local key mask-copy routine |
0x0007B94C..0x0007B97F |
0x8007AD4C |
Four-box filtered SAVE | guarded stock default-loader body | Commit non-Glass LIVE slots to the active authoritative backing box; LIVE reconstruction is the separately owned mask wrapper/sanitizer |
0x0009B7DC |
0x8009ABDC |
Stage selector | 12 stock pointers | Eight safe stage labels plus zeros |
0x000B21D8..0x000B2211 |
selector cursor palette | Stage selector presentation | Guarded clean 29-entry orange palette; count word at 0x000B21D4 = 0x1D
|
Replace all 29 BGR555 entries with the separately guarded title-cursor palette from 0x000B32E8; selector file 0x5F and sprite frames remain unchanged. |
0x0001645C, 0x00029DDC, 0x0002BDF8, 0x0002BA5C
|
SPECIALS / standing Jump / moving Jump / ledge | Modern controls | Guarded stock call/decision sequences | Route selected controls through file-0x1A helpers; Slide/Super Slide retain native progression recognizers |
0x0001674C, 0x00029FD8, 0x0002A0A0, 0x0002A738, 0x0002A7C4, 0x0002A378
|
input capture / Run calls and active Run loop | Modern RUN | Guarded stock hook/calls/back-edge | Snapshot physical Run after remap, interpose HOLD/AUTO predicate and preserve running Jump classifier |
0x00015738, 0x0002A848, 0x00033410, 0x0004E3AC
|
modern Attack event, steady Block, startup Block, combo | Modern ATTACK | Guarded stock hook/call sequences | Event translation, Block+Attack cancellation and native combo parser |
0x00074324..0x00074333 |
0x80073724..0x80073733 / native Inventory loop entry |
In-Inventory four-box switching | exact 1640000F 00000000 0C01D06D 00000000
|
16-byte absolute trampoline to uncached switch module at 0xA01B2DF0; module replays Items/Power-Ups control flow and resumes native Inventory without closing it. |
0x0007372C..0x000737EF |
0x80072B2C..0x80072BEF / native Inventory legend text block |
Native four-box Inventory legend | exact guarded stock 0xC4-byte text-emission block |
First 16 bytes become an absolute trampoline to uncached legend helper 0xA01B2F50; the remainder of the stock text-emission block is NOPed. Helper resumes at 0x80072BF0, preserving the native six-tile panel/background. |
0x00074748 |
0x80073B48 / Inventory R-toggle count rejection |
Empty-box Power-Ups recovery |
0x18400005 (blez v0,0x80073B60) |
NOP only this item-count rejection; preceding positive-Power-count requirement remains, so an empty Items box can enter/return from Power Ups. |
0x000A5148 |
file entry 0x1A
|
Shared file 0x1A transport |
guarded clean zero entry | Production first builds the exact raw prefix at 0x00F68000..0x00F6B5D0; Inventory menu switching copies that final prefix to generated output 0x01816000 and appends its 0x154-byte module; the legend then adds 0x0C alignment plus the Runtime-confirmed 0x196-byte helper beginning at 0x01819730 / K0 0x801B2F50, and extends the same file-table entry. Stage-init destination remains 0x801AF820. |
0x000A5154 |
file entry 0x1B
|
Native payload | guarded stock file-table entry | Point file 0x1B at the production payload source/destination descriptor |
0x000A6BE4..0x000A6C0B |
0x800A5FE4..0x800A600B |
Four-box keys | guarded obsolete default-inventory template | Write item-0x0D..0x22 stage map |
0x000A6C48..0x000A6CEF |
0x800A6048..0x800A60EF |
Four-box state | guarded stock data | Four backing boxes, active state, and MKBX magic |
0x000A6E88 |
item-use table | SEALED mask (stock Glass ID 0x08) |
0x80071F58 |
Inert 0x80071F50
|
0x000AE40C..0x000AE413 |
stock item-name text | Foreign-key placeholder label | GLASS\0\0\0 |
SEALED\0\0; native item identity remains 0x08 and its inert-use dispatch remains unchanged. |
generated progression records +0x28
|
ordinary pickup presentation pointer | Power Upgrade Herbs visual | stock Herbs 0x800B1D38
|
0x800B1E68, a stock-resident 16-color Ice Blue descriptor; stage-local Herbs resource/model selector remains unchanged. |
0x000B2A68..0x000B2A8B / VA 0x800B1E68
|
stock resident palette descriptor | Power Upgrade Herbs palette source | guarded retail 16-color descriptor | Read-only reuse; no palette bytes or allocation changed. |
generated progression records +0x18
|
ordinary pickup callback pointer | Power Upgrade pickup feedback | existing progression callback 0xA01AF620
|
production wrapper 0xA01B21E0; wrapper awards synchronously, starts one guarded class-0x100 visual child when idle, and returns without sleeping. v23 Runtime-confirms the nonblocking architecture under rapid adjacent collection. |
0x00615A14..0x00615A93 |
Water resource palette data | Eel white-flash source | transparent index 0 + 63×0x7FFF white |
Guarded read-only source copied into MKMSZR file-0x1A; no Water overlay code/state is imported. |
0x00F6A940..0x00F6AAEF / runtime 0x801B2160..0x801B230F
|
shared file 0x1A
|
Power Upgrade flash module | clean ROM 0xFF guarded suballocation inside reserved expansion pool |
128-byte white palette; async helper 0x801B21E0..0x801B230B; active flag 0x801B230C. Allocation boundary unchanged; no damage/stun/input-lock semantics. |
0x000AF998..0x000AFA23 |
boot strings | Branding | guarded legal-text storage | Product title, spaced RANDOMIZER, configurable <CHAR> EDITION, 2026 credit, seeded joke, author |
0x000AFA24..0x000AFA97 |
0x800AEE24.. |
Box indicator | guarded legal-text region | Native wrapper and BOX 1 OF 4 text |
0x000AFA98..0x000AFABB |
boot strings | Branding | guarded license text | NOT LICENSED BY NINTENDO |
0x0078E16C.. |
palette data | Outfit | guarded 64-color BGR555 source palette | Transform clothing indices 0x21..0x3F
|
0x0002EDA8 |
0x8002E1A8 |
XP progression | AC24200C |
NOP central XP store |
0x00054CE8 |
0x800540E8 |
XP progression | AC23200C |
NOP direct XP store |
0x00057D60 |
0x80057160 |
XP progression | AC23200C |
NOP direct XP store |
0x00057E2C |
0x8005722C |
XP progression | AC23200C |
NOP direct XP store |
0x00063704 |
combo XP UI | XP progression UI | JAL native text renderer | Suppress combo EXPERIENCE label |
0x00063724 |
combo XP UI | XP progression UI | JAL native text renderer | Suppress combo EXPERIENCE value |
0x000A6FFC.. |
0x800A63FC |
XP progression | guarded signed stage-cap halfwords | Main-stage caps become 20000
|
0x000A5478 |
file entry 0x5E
|
Title branding | guarded stock file-table entry | Repoint title package to generated high-ROM copy |
0x000A5664 |
file entry 0x87
|
Rainbow outfit | stock 0x00748920..0x0078E300, raw flag 0
|
Compact rainbow deliberately leaves this entry unchanged; guards verify retail ownership |
0x000B3364 palette base |
0x800B2764 |
Title branding | selected guarded Candidate-B-unused CI8 entries | Replace 15 entries with the shared dark-to-light icy-blue art/edition ramp; index 0xFF stays the stock background |
| ROM 0x00074E68, 0x00073C98, 0x000759E0, 0x00075B88; retired span 0x00074EB8..0x00074FA7 | Native Inventory presentation | Randomizer HUD labels/portraits/paper/status | guarded stock text/preview/description paths | Shared row/preview/HUD dispatch plus paper trampoline and exact first-load 0x1200 data allocator. v20 closes first-load size bug; v21 closes ordinary-row fifth-argument forwarding and final status presentation. |
Boot string pointer instructions live at ROM 0x7A22C, 0x7A250, 0x7A274, 0x7A298, 0x7A2BC, 0x7A2E0, 0x7A304, 0x7A328, 0x7A34C, 0x7A370, and 0x7A394; every instruction is guarded before replacement.
The selector movement helper itself occupies production-owned ROM [0x0000E27C,0x0000E2B0); continuous ownership is canonical in the Memory Map. Production intentionally has no confirmation-SFX edit: v02's A-edge 0x1FD experiment is Rejected / failed and the Start-owned commit path remains stock apart from the established compact-index mapper/save-bypass behavior.
The following production writers target continuous owned regions. Their exact interval bounds, aliases, lifecycle, containment, and conflict status are deliberately not duplicated here; use the named Memory Map region as the canonical allocation record.
| Memory Map region | Writer / guard | Patch effect |
|---|---|---|
rom.production.inventory_action_cave |
inventory_boxes.py; guarded cave bytes and CI bounds |
Emit the four-box action routine |
rom.production.inventory_helper_cave |
inventory_boxes.py; guarded former selector-cave tail and CI bounds |
Emit switch/mask helper composition |
rom.production.bootstrap_composite |
native payload/persistence/flow writers; guarded pre-production bytes and capacity checks | Emit bootstrap, persistence helpers/tables, relocated selector mapper, and selector-only save-bypass write |
rom.production.payload_source |
output-expansion guard plus exact Runtime V2 size checks | Emit the reloadable 0x3B0-byte Runtime V2 code payload |
rom.production.rainbow_bank |
rainbow_palette.py; guarded stock file entry, all 15 allocation/load sites, file-0x92 entry, controls→Toasty gap, and exact bank size |
rainbow mode only: keep stock file 0x87 in place, allocate +0x2000, and append the dedicated 64-palette bank at runtime |
rom.production.title_high |
title builder capacity/clean-output guard | Emit the recompressed generated file 0x5E package |
Runtime-only slices such as the Runtime V2 inventory/XP payload subranges and persistent state are not ROM patch sites. Their canonical bounds and ownership remain only in the Memory Map; Core Runtime owns how those slices compose.
The corrected title implementation is Runtime-confirmed through the full production pipeline and is data-only. Its file-entry and palette edits are indexed above, while the generated package allocation is rom.production.title_high in the Memory Map.
The stock START setup at ROM 0x00079C24..0x00079C2B is intentionally left untouched and therefore is not a patch-site row. The rejected executable-wrapper attempt beginning at 0x9ADE0 is documented as an allocation conflict in the Memory Map; it is not current production.
| ROM/VA | Proof | Status |
|---|---|---|
ROM 0x0003D62C / VA 0x8003CA2C
|
Slide tier gate | v02 Runtime-confirmed bounded proof. Clean word 28420002 becomes 28420001, moving Slide from tier >=2 to tier >=1 while preserving the stock recognizer/action path. |
ROM 0x0004B018..0x0004B033 / VA 0x8004A418..0x8004A433
|
Ground Ice Blast tier-condition tail | v02 Runtime-confirmed bounded proof. Guarded in-place replacement changes only the native condition result from tier >=1 to tier >=2; Ice callback/action/resource behavior remains stock. |
ROM 0x000A6BB0..0x000A6BB7 / RAM 0x800A5FB0..0x800A5FB7
|
First two native Power Ups icon IDs | v02 Runtime-confirmed presentation proof. Swap stock Ice Blast / Slide entries so the first N icon strip matches the shuffled gameplay order. |
ROM 0x000A78A0..0x000A78A7
|
First two native Power Ups move-help pointers | v02 Runtime-confirmed presentation proof. Swap stock Ice Blast / Slide help/detail records so selection text/details match the shuffled icon order. |
The first-two v02 proof was generalized by Runtime-confirmed v04. The complete mapped tier-gate set used by the production implementation is:
| ROM/VA | Power | Stock tier / production edit |
|---|---|---|
ROM 0x0003D62C / VA 0x8003CA2C
|
Slide | Stock slti v0,v0,2; replace immediate with generated Slide slot |
ROM 0x0004B018..0x0004B033 / VA 0x8004A418..0x8004A433
|
Ground Ice Blast | Guarded seven-word stock tier-1 return tail; replace in place with arbitrary generated Ice Blast threshold while preserving 0x8000/0x4000 condition convention |
ROM 0x0004B084 / VA 0x8004A484
|
Directional Ice Up | Stock tier 3 compare -> generated Directional Ice slot |
ROM 0x0004B0F4 / VA 0x8004A4F4
|
Directional Ice Down | Stock tier 3 compare -> same generated Directional Ice slot |
ROM 0x0004AFBC / VA 0x8004A3BC
|
Air Ice Blast | Stock tier 4 compare -> generated Air Ice Blast slot |
ROM 0x0004AEA8 / VA 0x8004A2A8
|
Ice Clone | Stock tier 5 compare -> generated Ice Clone slot |
ROM 0x000515A0 / VA 0x800509A0
|
Ice Shatter contextual gate A | Stock tier 6 compare -> generated Ice Shatter slot |
ROM 0x000535C4 / VA 0x800529C4
|
Ice Shatter contextual gate B | Stock tier 6 compare -> same generated Ice Shatter slot |
ROM 0x0003D728 / VA 0x8003CB28
|
Super Slide | Stock tier 7 compare -> generated Super Slide slot |
ROM 0x0005B5DC / VA 0x8005A9DC
|
Freeze on Contact | Stock tier 8 compare -> generated Freeze on Contact slot |
ROM 0x0004B2B4 / VA 0x8004A6B4
|
Polar Blast | Stock tier 9 compare -> generated Polar Blast slot |
ROM 0x000A6BB0..0x000A6BD3 / RAM 0x800A5FB0..0x800A5FD3
|
Power Ups icon table | Reorder all nine icon IDs to the generated power order |
ROM 0x000A78A0..0x000A78C3
|
Power Ups help/detail pointer table | Reorder all nine pointers to the same generated power order |
v04 Runtime-confirmed the generalized mechanism on its tested nine-slot order. The production generator imposes exactly one ordering constraint: Ice Shatter must follow at least one of Ice Blast / Directional Ice / Air Ice Blast. Slide and Super Slide are independent. Final whole-product all-tier runtime validation remains a release gate.
| ROM/VA | Proof | Status |
|---|---|---|
ROM 0x000CC540 / VA 0x802EEE60
|
Temple scripted Map logical-award isolation |
Runtime-confirmed bounded v01. Clean word 2404000D loads Map item 0x0D in the delay slot of the jal 0x80075448 at ROM 0x000CC53C / VA 0x802EEE5C. v01 changes only this word to 24040004 (Herbs), preserving the scripted actor and later Temple progression path. User observed Herbs award and normal elevator/platform movement; Map visual remained stock by design. Proof SHA-256 c9334451576af3b5b5492e4c9c1b8e514da1b35686cf3c7fb5c13cca9d58900e, CRC1/CRC2 C34304BE / 5C014BB5. Proof establishes reward/progression separation, not arbitrary-reward visuals or production integration. |
ROM 0x000CC358..0x000CC42B, 0x000CC53C..0x000CC543 / Temple overlay VA 0x802EEC78..0x802EED4B, 0x802EEE5C..0x802EEE63
|
Temple scripted special-check v02 visual/persistence composition |
Runtime-confirmed bounded v02; promoted architecture. The entry hook at 0xCC358 branches to dedicated special-state logic; visual edits retarget the scripted actor to Temple native Herbs palette/resource selector 15; award call 0xCC53C wraps 0x80075448 while delay slot 0xCC540 supplies item 0x04. Collection commits MKSV flags bit 0x0001 and stock local word 0x8026E9A4=0x100; re-entry resumes stock post-award loop 0x802EEE94 without re-award. User confirmed correct Herbs visual/award, elevator/rope, title re-entry persistence, and Temple -> Wind. Proof SHA-256 d14380afe698d7daa9173a3295882e04f58e1bb747a88e33df33b32720118f66. |
ROM 0x00011C70..0x00011C83 / VA 0x80011070..0x80011083
|
Proposed Stage-7 → normal Fire selector-5 composition positive control, unbuilt | Guard five clean words 27BDFF98 24020001 AFB3005C 24130001 24040007; proposed replacement 24020005 3C01802C A42218F8 0800423F 00000000 sets 0x802C18F8=5 and tail-jumps to 0x800108FC. This aliases Stage 7 to ordinary Fire and intentionally loses the debug opponent; it is not a native Stage-7 repair, not Runtime-confirmed, and not production. See Stage flow and selector. |
ROM 0x00039454 / VA 0x80038854
|
Prison L1 key checkpoint-selector suppression |
Runtime-confirmed bounded v08. Stock instruction commits selector 7 to 0x802C18F8. v08 NOPs only this store while preserving inventory award and acquired bit 0; combined with the three direct generic-key presentation-spawn suppressions, runtime shows G4 S2 B1, normal L1 door opening, and natural no-checkpoint respawn after death. Prison-L1-specific proof only; not yet a generic key policy. |
ROM 0x000E5C28 / VA 0x802F0ED8
|
Fire key checkpoint-presentation suppression |
Runtime-confirmed bounded Fire v01. Stock JAL requests 0x8002830C(0x15,0x80062D60) from the shared Fire key callback. v01 NOPs only this JAL while retaining the award path. Used together with the Fire respawn-selector suppression below. Proof-only; do not generalize to other overlay callbacks. |
ROM 0x000E5C50 / VA 0x802F0F00
|
Fire key pickup-created respawn-selector suppression |
Runtime-confirmed bounded Fire v01. Stock halfword store commits s0+2 to 0x802C18F8; v01 NOPs only this store. Combined v01 produced no key-created checkpoint event, natural stage-start respawn after death, successful Fire God completion, and next-stage transition. |
ROM 0x000D500C / VA 0x802F2CDC
|
Wind key checkpoint-presentation candidate |
Static-confirmed candidate; runtime Pending. Clean word 0C00A0C3 JALs 0x8002830C; the callback supplies class 0x15 / process 0x80062D60 for parameters 0/1. Candidate proof replaces only this JAL with NOP. Preserve the parameter-2 0x802F60A0 write and all award/use logic. |
ROM 0x000D5024 / VA 0x802F2CF4
|
Wind key pickup-created respawn-selector candidate |
Static-confirmed candidate; runtime Pending. Clean word A42218F8 stores the callback-incremented selector to 0x802C18F8 for parameters 0/1. Candidate proof NOPs only this store. |
ROM 0x000BA60C / VA 0x802F247C
|
Water key pickup-created respawn-selector candidate |
Static-confirmed candidate; runtime Pending. Clean word A42218F8 stores selector+1 to 0x802C18F8 for all three Water keys. Candidate proof NOPs only this store; preserve the parameter-1 0x802F2980 update. |
ROM 0x000BA610 / VA 0x802F2480
|
Water key checkpoint-presentation candidate |
Static-confirmed candidate; runtime Pending. Clean word 0C00A0C3 JALs 0x8002830C with class 0x15 / process 0x80062D60. Candidate proof replaces only this JAL with NOP. |
ROM 0x000E1034 / VA 0x802F52D4
|
Earth Square checkpoint-presentation candidate |
Static-confirmed candidate; runtime Pending. Clean word 0C00A0C3 JALs 0x8002830C only for callback parameter 0 (Earth Square). Candidate proof replaces only this JAL with NOP. Parameters 1/2 do not take this branch. |
ROM 0x000E1044 / VA 0x802F52E4
|
Earth Square pickup-created respawn-selector candidate |
Static-confirmed candidate; runtime Pending. Clean word A42218F8 stores selector 2 to 0x802C18F8 only on the parameter-0 branch. Candidate proof NOPs only this store; preserve the parameter-1/2 local-state writes. |
ROM 0x0003CB50..0x0003CB57 / VA 0x8003BF50..0x8003BF57
|
Player respawn-coordinate selector proposal |
Static site; banner suppression rejected. Clean guard 3C04802C 848418F8 loads 0x802C18F8 for the spawn-table lookup in 0x8003BF4C. v03 substituted selector 0 for Prison player selector 7 and the visible CHECK POINT event still appeared. A death/respawn comparison was not reported, so the site remains only a separate respawn-coordinate proposal. Any future proof must be player-only, preserve ra/a2, use a valid saved non-key selector, and define reset/invalidation rules. |
ROM 0x00039AF8 / VA 0x80038EF8
|
Ice Blast -> Pickup action-eligibility hook |
Runtime-confirmed bounded v01; Post-1.0 / 4Fun. Guard 948306AA 14620034 00000000 (lhu v1,+0x6AA(a0) / reject non-stock pickup state). Proof JALs a helper that preserves stock 0x303 acceptance and additionally accepts only controller +0x6F0 == 0x8004AB84 with native Ice mode 0x80111F98 == 0; stock Pickup input/proximity/facing checks still run. |
ROM 0x00039BA4 / VA 0x80038FA4
|
Ice Blast -> Pickup commit hook |
Runtime-confirmed bounded v01; Post-1.0 / 4Fun. Guard 3C04802C 8C841AC0 (load published player controller). Proof JALs a helper that replays the displaced load, rechecks normal Ice, and clears special lock 0x800BF308 only after stock pickup gates have passed. Stock pickup transition/award remains authoritative. |
ROM [0x0009AE00,0x0009AE84) / VA [0x8009A200,0x8009A284)
|
Ice Blast -> Pickup proof helpers |
Runtime-confirmed bounded v01 proof storage only. Exact Wind v04-base proof used zero tail bytes for the two helpers. This interval is not promoted as reusable/production-free space; reproduce only through tools/build_iceblast_pickup_cancel_proof.py against its exact guarded base SHA. |
ROM 0x00015738 / VA 0x80014B38
|
ATTACK check v01 event-0 seam | User-reported Runtime-confirmed bounded full-composition check. Guard 0C005570 24070001; replace the JAL with the production-owned capture/event trampoline at 0x8009A218, retaining the stock delay instruction. The KSEG1 dispatcher distinguishes callers by return address and preserves capture's t0. Not yet in the product patch core. |
ROM 0x0002A848 / VA 0x80029C48
|
ATTACK check v01 Block seam | Guard 30624000 1440FF23; jump via proof stub at ROM [0x77688,0x77694), preloading the KSEG1 helper target's high word in the hook delay slot. CLASSIC helper replays the stock Down/Turn decisions; MODERN schedules native LP. Proof-only. |
ROM 0x0004E3AC / VA 0x8004D7AC
|
ATTACK check v01 stock combo-parser seam | Guard 000210C0 8CA306E0; JAL via proof stub at ROM [0x775D0,0x775DC), preloading target high word in the delay slot. The v04 helper replays the displaced actor load; CLASSIC also replays the original semantic shift. Proof-only. |
ROM [0x0009AE18,0x0009AE28), [0x000775D0,0x000775DC), [0x00077688,0x00077694)
|
ATTACK check v01 owned trampoline composition | Guard the generated production capture stub and zero-filled tails inside the already-owned GAME SETTINGS regions; retarget the first to shared capture/event KSEG1 dispatch and emit combo/Block entry stubs in the tails. Exact bounds/overlap: Memory and allocation map. The 0x9AEC0 proof trampoline remains untouched. |
ROM 0x000AF71C, 0x000AF708
|
ATTACK check v01 disposable frontend name/value | Guard COMBOS row label and pointer 0x800AEAD8 (ASSIST); change label to ATTACK and point the second value to existing MODERN at 0x800AEAE8. Durable bit 0x0400 and JUMP dependency are unchanged. Production still displays COMBOS/ASSIST. |
ROM 0x0002EB28 / VA 0x8002DF28
|
Toasty v43 successful-reaction hook | Implementation/static-confirmed; runtime Pending. Guard: 0C00B81E 03C02821 (jal 0x8002E078; move a1,fp). v43 replaces only the JAL with a proof trampoline and preserves the delay instruction; wrapper filters resolved callbacks 08/0E/12/13/14/15/17 then calls the original transfer unchanged. |
ROM 0xB44AA / RAM 0x800B38AA
|
First ordinary Fire enemy type 0x0A -> 0x09
|
Runtime-confirmed, not production |
Fire resource entry ROM 0xA52E0
|
Relocated/expanded Fire pickup resources | Runtime-confirmed architecture proof |
VA 0x8008EAEC / ROM 0x8F6EC
|
Dedicated Prison-key award callback | Runtime-confirmed proof; conflicts with production allocation rom.production.inventory_action_cave
|
Fire overlay tail ROM 0xE2148..0xE216B
|
Foreign fighter file load/allocation sequence | Runtime-confirmed monk import proof |
Seven Fire type-0x0A halfwords |
Replace ordinary Fire Hulk types with Temple monk type 0x01
|
Runtime-confirmed bounded proof |
ROM 0x00029FB0 / VA 0x800293B0
|
Direction-facing v02 mismatch decision hook | Runtime-confirmed proof; replaces 8C640704 24020305 with JAL to static KSEG0 trampoline + NOP, then expansion KSEG1 helper preserves/changes the stock forward-vs-back decision |
ROM 0x0002A0DC / VA 0x800294DC
|
Direction-facing v02 active-backward release hook | Runtime-confirmed proof; replaces 8C820638 94430000 with JAL trampoline + NOP so releasing Turn can leave backward mode without a direction repress |
ROM 0x0003E46C / VA 0x8003D86C
|
Direction-facing v02 standalone Turn gate | Runtime-confirmed proof; replaces 27BDFFE0 24040001 with a jump to a static trampoline that suppresses standalone Turn only for the player semantic controller |
ROM 0x000A5148 / global file entry 0x1A
|
Direction-facing v02 expansion transport | Runtime-confirmed proof; clean zero entry points to proof module ROM 0x00F72000..0x00F72268, raw-loaded to 0x801AF820 and executed via KSEG1 |
ROM 0x0009ADB8 plus 0x0009ADE8..0x0009AEBF
|
Direction-facing v02 proof loader/trampolines | Runtime-confirmed proof composition; bootstrap temporarily loads file 0x1A, and the former static pickup-capture-helper footprint becomes bounded loader/trampoline storage while the capture helper itself moves into the expansion module |
ROM 0x4BBF0, 0x4BBFC, 0x4BC00 (v75) |
Sektor projectile placement | Runtime-confirmed bounded v75: addiu a1,zero,5; addiu a2,zero,38; JAL 0x80031208. v78 redirected the call to its 0x80031394 shim and hard-hung; no placement production edit is accepted |
ROM 0x4C484..0x4C488 and 0x9AE90..0x9AF1F (v75) |
Sektor child entry and per-tick velocity | Runtime-confirmed bounded v75: child jump 0x8009A290, delay preload lui t2,0x800A, child callback 0x8009A2C8, initial 0x46666, cap 0xEEEEE; the source interval conflicts with production bootstrap ownership. Guarded by exact v73 hash in the builder |
ROM 0x9ADEC, 0x9AE2C..0x9AE54, 0x4BD14/30/4C/68/84/A0, 0x4B728, 0xB0234..0xB0243 (v79) |
Combined chest cursor, projectile selector, sleeps, screen tint and strike-record proof | Rejected / failed hard hang. These are proof-only edits from exact v75, with individual causes unresolved. See Sektor takeover proof history; do not reuse these as independently verified edits |
Relocated file-0x87 ROM 0xF40DBC (v80/v81) |
Live slot-0x24 token-0x0B resource-actor constructor operand |
Exact v75 guard 0x00034A58; v80/v81 set 0x0004E6E4 (genuine imported rocket entry). v80 is Runtime-confirmed stable but visually ineffective by itself; this proves only that descriptor replacement alone is insufficient. |
ROM 0x315E8 / VA 0x800309E8 (v81/v82 diagnostic) |
Token-0x0B newly constructed actor selector store before insertion |
Exact v75 A602009E = sh v0,0x9E(s0); v81/v82 use A600009E = sh zero,0x9E(s0) while preserving the preceding 0x8001C528 call. v81 Runtime-confirms this removes the one-frame blue projectile fallback but leaves the rocket corrupted, selector zero names fixed handle 0x80, not the dynamically acquired Sektor source; exact slot-zero contents unobserved. Disposable diagnostic only; not an accepted production/global edit. |
ROM 0x315EC..0x31603 / VA 0x800309EC..0x80030A03 (v82 diagnostic) |
Pre-insertion selector-0 active-handle coherence | Runtime-confirmed stable negative control: no visible change from v81. Stale +0x80 alone is rejected as the corruption cause. This edit is superseded and not reusable as an independently validated palette fix. |
ROM 0x316C8 / VA 0x80030AC8 plus proof ROM [0x9AE10,0x9AE90) (v83) |
Post-init/pre-insertion raw frame bind | Runtime-confirmed stable negative result: direct 0x8001BDA0 rocket bind before insertion leaves the initial Ice/Sektor projectile frame and Ice-blue missile unchanged. Parent 0x8004B584 subsequently advances the stock Ice entry, overwriting the early bind before flight. |
ROM 0x316C8 / VA 0x80030AC8 plus proof ROM [0x9AE10,0x9AE90) (v84) |
Contextual pre-insertion rocket bind | Partial Runtime-confirmed: removes the initial Ice/Sektor projectile fallback but leaves the missile graphically glitched. The zero-selector source and subsequent parent/child frame schedule remain unresolved by this early bind; same-shape rebuild is not the cause. |
ROM 0x316C8 / VA 0x80030AC8 and proof ROM [0x9AE10,0x9AE90) (v85) |
Deferred projectile list publication | Exact-v75 token jal 0x80024650 is NOPed while delay-slot sh v0,0xAE(a0) remains. The proposed wrapper would bind ROCKETD1 and call 0x80024650 with a temporary owner-Y sort key; this wrapper is bypassed on the ordinary straight branch. Built, Runtime untested, statically rejected on ordinary mode-zero straight flight: branch 0x8004B028 skips the only wrapper reinsertion. Active movement/render processing and 0x80024B00 free-list return both require listing; global token suppression is unsafe. |
ROM 0x315C8 / VA 0x800309C8 plus proof wrapper interval [0x9AE10,0x9AE90) (v86) |
Straight-token palette-source acquisition | Retargets only the guarded mode-zero projectile palette acquisition from stock Ice 0x800B1A24 to file-0x87 +0x4584C through stock 0x8001C528; selector store, insertion, frame schedule, helpers, child and flight remain v75. Partial Runtime-confirmed: rocket becomes materially more coherent but remains donor-inaccurate because the imported asset indices were previously remapped into grayscale Sektor TLUT entries. |
File-0x87 rocket/palette append + ROM 0x315C8, 0x316C8, 0xF40DBC, 0xF40DC4, proof [0x9AE10,0x9AE90) (v89) |
Synchronous pre-publication projectile texture-slot preparation | Keeps v87 exact ROCKETD1/ROCKET_P asset pair and dynamic selector; sets live constructor operand +0xDBC and ordinary-parent next frame +0xDC4 to ROCKETD1; wrapper at token insertion uses finalized actor slot +0x9C with native 0x8001BF70 to synchronously load the raw rocket, refreshes with 0x8001BDA0, then tail-calls stock 0x80024650. Runtime-confirmed for the bounded v89 route: removes the one-frame corrupted Sektor and preserves the correct rocket/flight. One-shot proof only because texture-storage advancement and release ownership are not productionized. |
Proof rows identify exact edits useful for reproduction; they do not grant allocation ownership. Where a proof overlaps current production, the Memory Map owns that conflict statement.
The relocated selector mapper emitted inside rom.production.bootstrap_composite is exactly:
3C03800C 8C6311E0 2C610006 50200001
24630002 3C028029 03E00008 A0441C0C
It reads the compact index, adds 2 for indices 6 and 7, and writes nonzero byte 0x15 to 0x80291C0C in the return delay slot. That is the game's native one-shot stage-entry save bypass; 0x800798A8 and all later/manual save flows remain unchanged.
- Memory and allocation map — continuous ROM/RDRAM intervals, availability, lifecycle, conflicts, and production ownership.
- Core runtime and native payload — bootstrap/payload architecture and runtime composition.
- Function registry — function semantics.
- Resource and overlay system — file-table, overlay, and resource-loading grammar.
- Address quick reference — derivative convenience subset only.
The Runtime-confirmed compact-tail v01 architecture edits all 15 stock Sub-Zero file-0x87 allocation/load pairs. Each allocation delay changes from addu a0,v0,zero to addiu a0,v0,0x2000; each raw-loader JAL is redirected to the production rainbow wrapper. The paired allocation ROM sites are 0xDF40, 0xE384, 0xEF00, 0xF628, 0xFEB0, 0x105B0, 0x106B0, 0x10DBC, 0x116DC, 0x117DC, 0x11EA4, 0x125B4, 0x12F70, 0x13068, 0x24768; paired loader JAL sites are 0xDF50, 0xE394, 0xEF10, 0xF638, 0xFEC0, 0x105C0, 0x106C0, 0x10DCC, 0x116EC, 0x117EC, 0x11EB4, 0x125C4, 0x12F80, 0x13078, 0x24778. File-table entry 0x92 at ROM 0xA56E8 becomes the optional raw rainbow-bank transport; ROM 0xF20000..0xF21FFF stores only the 8 KiB bank. The wrapper starts at runtime 0x801B0880 / ROM 0xF69060, inside the guarded controls→Toasty gap.
| Address | Ownership / edit | Evidence / guard |
|---|---|---|
ROM 0x000CB274 / VA 0x802EDB94
|
Temple Audio-1 stock descriptor-A immediate | Stock 24040041; remains stock in the corrected isolated architecture |
ROM 0x000CB280 / VA 0x802EDBA0
|
Temple Audio-1 stock descriptor-B immediate | Stock 24040042; remains stock in the corrected isolated architecture |
ROM 0x000CB2F8 / VA 0x802EDC18
|
Temple Audio-2 stock laugh descriptor immediate | Stock 24040043; remains stock in the corrected isolated architecture |
ROM 0x0097A200
|
Temple event 123 / descriptor 0x41
|
Replaced with selected donor 32-byte one-shot event rebased to patch 486 only when Audio 1 is selected |
ROM 0x0097A220
|
Temple event 124 / descriptor 0x42
|
Same Audio-1 replacement as event 123 so stock alternation still resolves to the same selected donor clip |
ROM 0x0097A240
|
Temple event 125 / descriptor 0x43
|
Replaced with selected donor 32-byte one-shot event rebased to patch 486 only when Audio 2 is selected |
ROM 0x00948450
|
Isolated host patch 486 | Stock 01000149; event 329 is its only initial-patch user and no stock in-stream program change selects 486 |
ROM 0x0094A11C
|
Isolated host subpatch 329 | Guarded; uniquely owned by patch 486; donor subpatch copied with waveform ID rebased to 319 |
ROM 0x0094DF20
|
Isolated host waveform 319 | Guarded; uniquely owned by subpatch 329; donor waveform copied with sample pointer rebased to Temple sample storage |
ROM 0x00964D88..0x00964E8F
|
Isolated host predictor 319 | Guarded by stock SHA-256; replaced by selected donor predictor |
ROM 0x000A3794, 0x0097C7D8, 0x009485C4, 0x0094A860, 0x0094E7D8
|
Superseded 0x20A -> 0x1A6 -> 579 -> 422 -> 412 carrier |
Rejected / leave stock. Runtime showed unrelated Bridge/Prison robot/miniboss audio reaches this route; regression tests require these bytes to remain unchanged. |
ROM 0x00F6BDF0..0x00F6D80F
|
Conditional selected Temple donor sample | Production-owned only when valid MKT donor is supplied; clean region must be FF and stock file-table overlap is rejected |
The earlier proof carrier descriptor 0x220 / event 0x1B8 is not a production edit site. Whole-ROM audit found live stock callers for descriptor 0x220; it remains proof history only.
| Site | Ownership / edit | Evidence |
|---|---|---|
ROM 0x00010E64
|
Stock Prison-entry JAL to 0x802ED538 is replaced by a JAL to the PR #129 reconstruction wrapper. The wrapper calls stock 0x802ED538 first, then rebuilds 0x802C0D54 bits 0..2 from authoritative four-box IDs 0x1A..0x1C. |
Implementation/CI-confirmed (#1583); Runtime Pending |
ROM 0x00F6AAF0..0x00F6B0CF / RDRAM 0x801B2310..0x801B28EF
|
Shared file-0x1A materializer helper containing logical-award dispatcher, destination actions, immediate re-mask helper, and Prison reconstruction. |
Implementation/CI-confirmed (#1583); Runtime Pending |
Ordinary pickup record +0x14
|
Low 15 bits encode logical award + destination action for wrapper-owned locations; raw bit 0x8000 remains destination activation state and is masked before callback dispatch. |
Static-confirmed ownership; Implementation/CI-confirmed emission |
Native per-stage selector writer sites are not globally NOPed or rewritten by this integration. Destination wrappers invoke only the separately researched location-owned transition/state effects.