From d0b537adffbfbbb4567611a2e981a51522d340e9 Mon Sep 17 00:00:00 2001 From: aquanight Date: Mon, 9 Feb 2026 19:32:17 -0700 Subject: [PATCH 1/3] Equipment Menu tile and behavior --- patches/ips/split_speed.ips | Bin 330 -> 963 bytes patches/src/split_speed.asm | 123 +++++++++++++++++++++++++++++++++++- 2 files changed, 122 insertions(+), 1 deletion(-) diff --git a/patches/ips/split_speed.ips b/patches/ips/split_speed.ips index 555e573b18a9d57979ca966e848c6b3cec521397..f8d10d50bc0dc8e24588d2afe53f0692ff1c5c14 100644 GIT binary patch literal 963 zcmZ{gPiPZC6vp3f8avI_5(NLm)-p{mdMFe`P^o2%RXhlK@E~{@Xeq_5mQcMF-Gi4v zwv8u+O^D{Uhi&zsJq4n8$)yB5Sx?r3SQJ)h%pSHp-zKd{$;|Na&CGA+&3o_G<=a=T zYXhGkp3aAbZSCAD#5hMy%z|Fy+7k}FrvNVKAX!|8Sgyud{BFmO=R2NC!6Cj7<^*Rc zmyXCEe5WW6L$)Nq@hW|E)EM<941d@~v{w_wNyEz+bsY+aT^;Ocv1-lVAR;AQ4p%cQvqLRK^P3qO}ykjo?ne9pOmFA_<3=L`jw` zk|@0_^Rg&Q5-+#o_R>?E8sN<(WYi&VI3Wj@KnJ8@6mG7bi$V z3ciRQ-X|?8co9vU!v%by;8XYu=PANZ1s^3oO&U{hI{r7h)%Ovr_!OJegYNZr^8ZRd zbmxP34^t#l!L#@Wf0MEbzCrzu=7xf2aSdNlj?)UB#C3c_dad9q#3HSC;a6{7`wMW% B0^9%q delta 25 hcmX@ieu{}Tz%j(xW1^NhqtC=7---YBGQ0Y_0RU_|2($nI diff --git a/patches/src/split_speed.asm b/patches/src/split_speed.asm index 065eb8abd..544f241f5 100644 --- a/patches/src/split_speed.asm +++ b/patches/src/split_speed.asm @@ -1,9 +1,15 @@ !bank_90_free_space_start = $90FC40 -!bank_90_free_space_end = $90FCC0 +!bank_90_free_space_end = $90FCE0 !bank_91_free_space_start = $91F7F4 !bank_91_free_space_end = $91F88C +!bank_82_free_space_start = $82FF20 +!bank_82_free_space_end = $82FF30 + +!bank_B6_free_space_start = $B6FC00 +!bank_B6_free_space_end = $B6FE00 + !equipped_items = $09A2 !fake_shinecharge = $7EF597 @@ -13,6 +19,29 @@ !speed_booster = $2000 !any_booster = !blue_booster|!spark_booster|!speed_booster +org $828ED3 + jsl hook_setup_speedbooster_menu_tile + nop + +org $82B5AE + jsr hook_equip_enable + +org $82C066 +; Speedbooster bitset + dw !any_booster + +org !bank_82_free_space_start + +hook_equip_enable: + ; X = equipment bitmask + ; Y = equipment bitset + ; A = loaded with previously equipped items + ora $0000,x ; Hijacked code (sets the bitmask) + and $0002,y ; AND with collected items + rts + +warnpc !bank_82_free_space_end + ; Accelerate Samus' animation with any booster item: org $908502 bit #!any_booster @@ -194,4 +223,96 @@ hook_update_speed_echoes: lda $0b3e ; run hi-jacked instruction rts +hook_setup_speedbooster_menu_tile: + php + ;sep #$30 + ; Hijacked vanilla code to execute the channel 1 DMA transfer it just set up (populating the pause menu BG1/BG2 tiles) + lda #$02 ; Channel 1 (Vanilla just set this up) + sta $420B ; Execute DMA (CPU pauses until complete - consistent with vanilla right now) + + rep #$30 + lda $09A2 + and #!any_booster + beq .no ; No boosters + bit #!speed_booster + bne .no ; Full speedbooster + + cmp #!blue_booster|!spark_booster + beq .no ; Blue+Spark = Speed + + ; Prepare VRAM for copy + ldx #$1240 + stx $2116 + sep #$10 ; X = 8-bit + ldx #$80 ; Auto-increment, 1 word + stx $2115 + + cmp #!blue_booster + beq .blue + + ; Spark booster + jsl $8091A9 + db $01, $01, $18 + dl menu_tiles_spark_booster + dw menu_tiles_spark_booster_end-menu_tiles_spark_booster + + bra .dma + +.blue + jsl $8091A9 + db $01, $01, $18 + dl menu_tiles_blue_booster + dw menu_tiles_blue_booster_end-menu_tiles_blue_booster + +.dma + sep #$30 + lda #$02 + sta $420B ; DMA execute + +.no + plp + rtl +warnpc !bank_90_free_space_end assert pc() <= !bank_90_free_space_end + +org !bank_B6_free_space_start + +menu_tiles_blue_booster: + db $FF, $FF, $FF, $FF, $8D, $FF, $B5, $FF, $8D, $FF, $B5, $FF, $8C, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $DA, $FF, $DA, $FF, $DA, $FF, $DA, $FF, $66, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $1C, $FF, $FD, $FF, $3C, $FF, $FD, $FF, $1C, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $73, $FF, $AD, $FF, $6D, $FF, $AD, $FF, $73, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $9C, $FF, $6B, $FF, $68, $FF, $6F, $FF, $98, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $44, $FF, $ED, $FF, $6C, $FF, $6D, $FF, $EC, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $23, $FF, $ED, $FF, $63, $FF, $ED, $FF, $2D, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF +.end + +menu_tiles_spark_booster: + db $FF, $FF, $FF, $FF, $C4, $FF, $BD, $FF, $84, $FF, $F5, $FF, $8D, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $73, $FF, $AD, $FF, $6D, $FF, $E1, $FF, $ED, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $1B, $FF, $6A, $FF, $19, $FF, $6A, $FF, $6B, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $71, $FF, $F6, $FF, $F1, $FF, $F6, $FF, $71, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $CE, $FF, $B5, $FF, $B5, $FF, $B5, $FF, $CE, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $71, $FF, $AF, $FF, $A1, $FF, $BD, $FF, $63, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $10, $FF, $B7, $FF, $B1, $FF, $B7, $FF, $B0, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF + db $FF, $FF, $FF, $FF, $8F, $FF, $B7, $FF, $8F, $FF, $B7, $FF, $B7, $FF, $FF, $FF + db $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF +.end + +warnpc !bank_B6_free_space_end \ No newline at end of file From e8b2e332a7d63277a5edcb872e7aed8110cbf473 Mon Sep 17 00:00:00 2001 From: aquanight Date: Tue, 10 Feb 2026 18:56:15 -0700 Subject: [PATCH 2/3] Split speed equipment menu --- patches/ips/map_area.ips | Bin 4548 -> 4550 bytes patches/ips/split_speed.ips | Bin 963 -> 964 bytes patches/src/map_area.asm | 7 +++++-- patches/src/split_speed.asm | 17 +++++++++-------- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/patches/ips/map_area.ips b/patches/ips/map_area.ips index 072e1cceb37a566e88aa674fce75540e71c551a7..4cbf0266d939498585a2393a59732d6c7f97ab4c 100644 GIT binary patch delta 478 zcmX@2d`x*mEu*OC_a;V$JO(zUTgzKty<+5bVPIBpm^_Iw-E-e}Mu8Iy%sv5s7zMc) znEz;fXB1Qg%BBEm10cN#NJl~GjX+uw$o~nXMZPl%F+jwHqk;N2O?F~(WZXBoh3P`Q z;&;aQLkuiRFPFD6CVmGhI`y3~C5wUSgA8Lz5s(sLOzB`?YT#f@nFMsw?qwh+r7Qxf z`|+JI&5nUp=@ZbEjOi&rk-y&=(@!$6D;)j)3J4g>`5AsI6)tH_P*PhAB(^MWRd8RO zpmcswYl6b-r`ZYzV3y@(w`7Y~($pvg>JRFYOHMN2vbeQ)x(HTge>B$wjU3ol;u889nc-F%x%j+HTF^Dq8Wi~y4Wu;c&$ delta 500 zcmX@6d_;LeEu*O0_a;V$JO(zU+sj*Dy<+5bVPICUoji##-E;SMMu8Iy%sv5s7zMc) znE$AMXB1Qg$|eG710cN~NJl~G3qV>D$o~nXMZPl%F+jwHqk;O@Pj+H*WZXTuh3P`Q z+;_(KLkuiRua>tmCVmGhI{uw8C5wUSgA8Lz5s(sLOzB`?YT#f@nFMswo@F2>r7Qxf z`}&`5AsF6)kB^P*PhAB({Kv^NU&& z6kb2gR+#8CF>K=MiH4J}G3zpBOlD!3!Du>pF3WPRnC00_izcwnP`EbPk2O^{XX#1~ zhU~S`^1Vs&3OP#^l$R<^Sk$U?thGUbY1^Fttl3KcH#9IDssqW{On$&Rfw@>^dTI7s9jIGr=+dIbjlUR8Fbo<9>3CMw%8 SPMetI%W}wI?UIc Date: Wed, 11 Feb 2026 07:21:42 -0700 Subject: [PATCH 3/3] small tweak to map_area, update Bank files, comments --- patches/ips/map_area.ips | Bin 4550 -> 4549 bytes patches/rom_map/Bank 82.txt | 2 +- patches/rom_map/Bank 90.txt | 2 +- patches/rom_map/Bank B6.txt | 4 +++- patches/src/map_area.asm | 6 +----- patches/src/split_speed.asm | 2 +- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/patches/ips/map_area.ips b/patches/ips/map_area.ips index 4cbf0266d939498585a2393a59732d6c7f97ab4c..92c3ae5572a6a459bf818c92fb93d617b7059af2 100644 GIT binary patch delta 254 zcmX@6d{lWuEu*N%_a;V$JO(zUTgzKty<+5bVPICUpFD{%-E;4EMu8Iy%sv5s7zMc) znEz;gXB1Qg$|eJ810cN-NJl~GjX+uw$o~nXMZPl%F+jwHqk;N2PIh8)WZXNsh3SHj z!gt2_LkuiRFPFD6CVmGhIypIwS>5dWcg8e323Dm{KsPX^rvSzOd}mBQ$-u5~Y{!Mo!7im$^Q(0RVhBTQC3s delta 267 zcmX@Ad`x*mEu)<0_a;V$JO(zUTgzKty<+5bVPIBp_|C{z$`H+Q$YAn8Hp$6b7+pR0 zeP5i-Gx%)^|ohRiM%oAZ-AoHv#D=D7_I#O9J^nfwahXMj-}>xNtO3 z|E9@KOpc8ECbuwM5K{ck7=MU?Md{`8R>s8dKt-n}r!lLW|MvJTDG8R;C|KN^F~RIoz38)xI}*+?vEGx%m>;XEp%luV29c diff --git a/patches/rom_map/Bank 82.txt b/patches/rom_map/Bank 82.txt index 0a3866fda..b27e301d2 100644 --- a/patches/rom_map/Bank 82.txt +++ b/patches/rom_map/Bank 82.txt @@ -16,7 +16,7 @@ FE00 - FE70: load_plms_early.asm FE70 - FE80: fast_reload.asm FE80 - FF00: zebes_asleep_music.asm FF00 - FF20: reserve_hud.asm -FF20 - FF30: [FREE] +FF20 - FF30: split_speed.asm FF30 - FF80: reserve_hud.asm FF80 - FFFA: pause_menu_objectives.asm FFFA - FFFC: room name/map_area diff --git a/patches/rom_map/Bank 90.txt b/patches/rom_map/Bank 90.txt index 848cf8b83..0da5f2293 100644 --- a/patches/rom_map/Bank 90.txt +++ b/patches/rom_map/Bank 90.txt @@ -9,4 +9,4 @@ $FA00 - $FC00: map_progress_maintain.asm (list of cross-area tiles to reveal) $FC00 - $FC10: Fake Lava.asm $FC10 - $FC20: vanilla_bugfixes.asm $FC20 - $FC40: remove_spikesuit.asm -$FC40 - $FCC0: split_speed.asm \ No newline at end of file +$FC40 - $FCE0: split_speed.asm \ No newline at end of file diff --git a/patches/rom_map/Bank B6.txt b/patches/rom_map/Bank B6.txt index 32cd45820..102f4cc7d 100644 --- a/patches/rom_map/Bank B6.txt +++ b/patches/rom_map/Bank B6.txt @@ -1,4 +1,6 @@ F200-F660: pause_menu_objectives.asm -F660-FE60: [FREE] +F660-FC00: [FREE] +FC00-FE00: split_speed.asm +FE00-FE60: [FREE] FE60-FE80: disable_etanks.asm FE80-FFFF: map_area.asm diff --git a/patches/src/map_area.asm b/patches/src/map_area.asm index e234dd5c2..ac033bf36 100644 --- a/patches/src/map_area.asm +++ b/patches/src/map_area.asm @@ -276,8 +276,7 @@ load_map_screen_wrapper: load_equipment_screen_wrapper: jsl load_equipment_screen - jsr $AB47 - rts + jmp $AB47 load_area_wrapper: jsl load_area @@ -565,9 +564,6 @@ load_map_screen: rtl load_equipment_screen: - ; run hi-jacked instruction: - ;sta $0725 - ; Fix color used for pink doors on map screen lda #$6E7A sta $7EC0CE diff --git a/patches/src/split_speed.asm b/patches/src/split_speed.asm index e0748f7cc..6d2f5cd3d 100644 --- a/patches/src/split_speed.asm +++ b/patches/src/split_speed.asm @@ -33,7 +33,7 @@ org $82C066 org !bank_82_free_space_start hook_setup_speedbooster_menu_tile_wrapper: - sta $0725 + sta $0725 ; run hi-jacked instruction jsl hook_setup_speedbooster_menu_tile rts