diff --git a/patches/ips/extended_msg_boxes.ips b/patches/ips/extended_msg_boxes.ips index 13dc5eed0..b290681ea 100644 Binary files a/patches/ips/extended_msg_boxes.ips and b/patches/ips/extended_msg_boxes.ips differ diff --git a/patches/ips/fast_reload.ips b/patches/ips/fast_reload.ips index c97e34533..e59651874 100644 Binary files a/patches/ips/fast_reload.ips and b/patches/ips/fast_reload.ips differ diff --git a/patches/ips/max_ammo_display_fast.ips b/patches/ips/max_ammo_display_fast.ips index f83ec653c..f961afad1 100644 Binary files a/patches/ips/max_ammo_display_fast.ips and b/patches/ips/max_ammo_display_fast.ips differ diff --git a/patches/ips/missile_refill_all.ips b/patches/ips/missile_refill_all.ips index bb6ca26f9..6dd7b2d16 100644 Binary files a/patches/ips/missile_refill_all.ips and b/patches/ips/missile_refill_all.ips differ diff --git a/patches/ips/spin_lock.ips b/patches/ips/spin_lock.ips index ee0a6dad3..c4ce5b00e 100644 Binary files a/patches/ips/spin_lock.ips and b/patches/ips/spin_lock.ips differ diff --git a/patches/rom_map/Bank 85.txt b/patches/rom_map/Bank 85.txt index ff56a4d64..8cf77fff4 100644 --- a/patches/rom_map/Bank 85.txt +++ b/patches/rom_map/Bank 85.txt @@ -1,12 +1,10 @@ -9643 - 96AF: [FREE] -96B0 - 97C1: ; extended_msg_boxes.asm -9800 - 9827: ; spin_lock.asm -9880 - 993A: ; fast_reload.asm +9643 - 98BB: ; extended_msg_boxes.asm 9980 - 9A23: ; stats.asm 9B00 - 9B1B: ; fix_hyper_slowlock.asm 9B20 - 9FEF: ; pause_menu_objectives.asm 9FF0 - A012: ; vanilla_fanfare_stop_sounds.asm -A050 - A0FF: [FREE] +A050 - A07A: ; spin_lock.asm +A07B - A0FF: [FREE] A100 - A16A: ; fix_transition_bad_tiles.asm A1D6 - A23C: ; special_door_reveal.asm A280 - A283: ; map_area.asm @@ -23,3 +21,4 @@ AEE0 - B599: ; crash_handle_base.asm B600 - B93E: ; map_area.asm C000 - C450: ; savestate.asm C500 - C900: ; pause_menu_objectives.asm +C900 - C9EF: ; fast_reload.asm \ No newline at end of file diff --git a/patches/rom_map/vanilla_hooks.txt b/patches/rom_map/vanilla_hooks.txt index 9a3c78bf3..1b9badbb1 100644 --- a/patches/rom_map/vanilla_hooks.txt +++ b/patches/rom_map/vanilla_hooks.txt @@ -553,10 +553,8 @@ EE41 - EE42: ; stats.asm 811E - 8121: ; fast_reload.asm 8122 - 8124: ; fast_saves.asm 8150 - 8168: ; map_area.asm -8243 - 8245: ; extended_msg_boxes.asm 82E5 - 82E7: ; crash_handle_base.asm 82EE - 82F0: ; crash_handle_base.asm -82F1 - 82F3: ; extended_msg_boxes.asm 840C - 840E: ; crash_handle_base.asm 8426 - 8435: ; map_area.asm 846D - 8471: ; item_dots_disappear.asm diff --git a/patches/src/HUD_Expansion/Data/Opaque/messages.ttb b/patches/src/HUD_Expansion/Data/Opaque/messages.ttb index 3b5a2792b..381c7490e 100644 Binary files a/patches/src/HUD_Expansion/Data/Opaque/messages.ttb and b/patches/src/HUD_Expansion/Data/Opaque/messages.ttb differ diff --git a/patches/src/extended_msg_boxes.asm b/patches/src/extended_msg_boxes.asm index 594a8a297..6f7127257 100644 --- a/patches/src/extended_msg_boxes.asm +++ b/patches/src/extended_msg_boxes.asm @@ -1,72 +1,196 @@ -; Message box handler for custom dialog boxes (walljump boots / split speed etc) -; This is separate to the crash dialog handler which intercepts the messagebox routine earlier. +;;; Extended messageboxes for custom PLMS +;;; This extends the available messsagebox definitions table and moves the other tables down, repoints the instructions that referenced the old table. +;;; nn357 -lorom +;;; *Address are tied to Patch.rs* +;;; Missile is overwritten to AMMO depending on QOL, this is handled in patch.rs (fn write_ammo_or_missile_refil) +;;; if this table is ever extended then this address will also need to be changed. -!bank_85_free_space_start = $8596B0 -!bank_85_free_space_end = $859800 +;;; repoint vanilla instructions to new table offsets: -;;; extended message box table references for custom plm boxes: +org $858412 + lda SpecialButtonOffset, x -org $858243 - jmp hook_item_id - -org $8582f1 - jsr hook_tilemap - -org !bank_85_free_space_start -hook_item_id: - lda $1c1f ; replaced code - cmp #$001e ; wall-jump boots or higher? - bcc .original - pha - sbc #$001E - asl - sta $95 - asl - clc - adc $95 - clc - adc #(message_box_table-$869b) - tax - pla - jmp $824f ; do ptr calls +org $85869B ;;; $869B: Message definitions ;; -.original - jmp $8246 ; resume normal func +dw $8436,$8289,MsgTilemap_Etank, ; 1: Energy tank + $83C5,$825A,MsgTilemap_Missile, ; 2: Missile + $83C5,$825A,MsgTilemap_Super, ; 3: Super missile + $83C5,$825A,MsgTilemap_PB, ; 4: Power bomb + $83C5,$825A,MsgTilemap_Grapple, ; 5: Grappling beam + $83CC,$825A,MsgTilemap_Xray, ; 6: X-ray scope + $8436,$8289,MsgTilemap_Varia, ; 7: Varia suit + $8436,$8289,MsgTilemap_Spring, ; 8: Spring ball + $8436,$8289,MsgTilemap_Morph, ; 9: Morphing ball + $8436,$8289,MsgTilemap_Screw, ; Ah: Screw attack + $8436,$8289,MsgTilemap_Hijump, ; Bh: Hi-jump boots + $8436,$8289,MsgTilemap_Space, ; Ch: Space jump + $83CC,$825A,MsgTilemap_Speed, ; Dh: Speed booster + $8436,$8289,MsgTilemap_Charge, ; Eh: Charge beam + $8436,$8289,MsgTilemap_Ice, ; Fh: Ice beam + $8436,$8289,MsgTilemap_Wave, ; 10h: Wave beam + $8436,$8289,MsgTilemap_Spazer, ; 11h: Spazer + $8436,$8289,MsgTilemap_Plasma, ; 12h: Plasma beam + $83C5,$825A,MsgTilemap_Bomb, ; 13h: Bomb + $8436,$8289,MsgTilemap_Map_complete, ; 14h: Map data access completed + $8436,$8289,MsgTilemap_Energy_complete, ; 15h: Energy recharge completed + $8436,$8289,MsgTilemap_Reload_complete, ; 16h: Missile reload completed + $8441,$8289,MsgTilemap_Saveyn, ; 17h: Would you like to save? + $8436,$8289,MsgTilemap_Save_complete, ; 18h: Save completed + $8436,$8289,MsgTilemap_Reserve, ; 19h: Reserve tank + $8436,$8289,MsgTilemap_Gravity, ; 1Ah: Gravity suit + $8436,$8289,MsgTilemap_Terminator, ; 1Bh: Terminator + $8441,$8289,MsgTilemap_Saveyn, ; 1Ch: Would you like to save? (Used by gunship) + $8436,$8289,MsgTilemap_Save_complete, ; 1Dh: Terminator. (Save completed, unused) + $8436,$8289,MsgTilemap_WallJump, ; 1Eh: Walljump boots + $83CC,$825A,MsgTilemap_BlueBooster, ; 1Fh: Blue booster + $83CC,$825A,MsgTilemap_SparkBooster, ; 20h: Spark booster + $8436,$8289,MsgTilemap_Reserved1, ; 21h: Reserved + $8436,$8289,MsgTilemap_Reserved2, ; 22h: Reserved + $8436,$8289,MsgTilemap_Reserved3, ; 23h: Reserved + $8436,$8289,MsgTilemap_End ; 24h: Terminator +SpecialButtonOffset: +dw $0000, ; 1: Energy tank + $012A, ; 2: Missile + $012A, ; 3: Super missile + $012C, ; 4: Power bomb + $012C, ; 5: Grappling beam + $012C, ; 6: X-ray scope + $0000, ; 7: Varia suit + $0000, ; 8: Spring ball + $0000, ; 9: Morphing ball + $0000, ; Ah: Screw attack + $0000, ; Bh: Hi-jump boots + $0000, ; Ch: Space jump + $0120, ; Dh: Speed booster + $0000, ; Eh: Charge beam + $0000, ; Fh: Ice beam + $0000, ; 10h: Wave beam + $0000, ; 11h: Spazer + $0000, ; 12h: Plasma beam + $012A, ; 13h: Bomb + $0000, ; 14h: Map data access completed + $0000, ; 15h: Energy recharge completed + $0000, ; 16h: Missile reload completed + $0000, ; 17h: Would you like to save? + $0000, ; 18h: Save completed + $0000, ; 19h: Reserve tank + $0000, ; 1Ah: Gravity suit + $0000, ; 1Bh: Dummy + $0000, ; 1Ch: Would you like to save? (gunship) + $0000, ; 1Dh: Save completed (unused) + $0000, ; 1Eh: Walljump boots + $0120, ; 1Fh: Blue booster + $0120, ; 20h: Spark booster + $0000, ; 21h: Reserved (small msg box template in place) + $0000, ; 22h: Reserved (small msg box template in place) + $0000, ; 23h: Reserved (small msg box template in place) + $0000 ; 24h: Terminator -hook_tilemap: - cpx #$00ae ; wall-jump boots? - bcc .orig - cpx #$00bb ; higher than blue booster? (crash dialogs) - bcs .orig - txa - sec - sbc #$00ae - clc - adc #(message_box_table+4-$869f) - tax -.orig - clc - lda $869f,x ; replaced code - rts +;;; These tilemaps contain the same palette adjustments / tile adjustments as the hud_expansion/messages.ttb +;;; Plus the tile patches from max_ammo_display_fast.asm -;;; (message box table, relocated from $85869B): -message_box_table: - dw $8436, $8289, wjb ; 1Eh: Wall-jump boots. - dw $8436, $8289, sparkbooster ; 1Fh: Spark Booster. - dw $8436, $8289, bluebooster ; 20h: Blue Booster. - dw $8436, $8289, msg_end ; 21h: Terminator. - -wjb: ; walljump boots +MsgTilemaps: +MsgTilemap_Etank: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $28C4, $28CD, $28C4, $28D1, $28C6, $28D8, $280F, $28D3, $28C0, $28CD, $28CA, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Missile: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $28CC, $28C8, $28D2, $28D2, $28C8, $28CB, $28C4, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $28E9, $28EA, $28EB, $280F, $3049, $304A, $304B, $280F, $28F8, $280F, $28E0, $28E1, $28E2, $28F0, $28F1, $28FE, $28C0, $28FF, $28E5, $28E6, $28E7, $28FB, $280F, $280F, $000E, $000E, $000E +MsgTilemap_Super: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $28D2, $28D4, $28CF, $28C4, $28D1, $280F, $28CC, $28C8, $28D2, $28D2, $28C8, $28CB, $28C4, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $28E9, $28EA, $28EB, $280F, $3034, $3035, $280F, $28F8, $280F, $28E0, $28E1, $28E2, $28F0, $28F1, $28FE, $3CC1, $28FF, $28E5, $28E6, $28E7, $28FB, $280F, $280F, $000E, $000E, $000E +MsgTilemap_PB: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $28CF, $28CE, $28D6, $28C4, $28D1, $280F, $28C1, $28CE, $28CC, $28C1, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $28E9, $28EA, $28EB, $280F, $3036, $7036, $280F, $28F8, $280F, $28F5, $28F6, $28F7, $280F, $28EE, $28EF, $28F0, $28F1, $28FE, $38D1, $28FF, $28E5, $28E6, $28E7, $28FB, $280F, $000E, $000E, $000E +MsgTilemap_Grapple: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $28C6, $28D1, $28C0, $28CF, $28CF, $28CB, $28C8, $28CD, $28C6, $280F, $28C1, $28C4, $28C0, $28CC, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $3038, $7038, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $28E9, $28EA, $28EB, $280F, $3039, $7039, $280F, $28E0, $28E1, $28E2, $280F, $28F8, $280F, $28E3, $28E4, $28F0, $28F1, $28FE, $38D8, $28FF, $28E5, $28E6, $28E7, $28FB, $280F, $000E, $000E, $000E +MsgTilemap_Xray: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $28D7, $28DD, $28D1, $28C0, $28D8, $280F, $28D2, $28C2, $28CE, $28CF, $28C4, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $303A, $703A, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $28E9, $28EA, $28EB, $280F, $303B, $703B, $280F, $28E0, $28E1, $28E2, $280F, $28F8, $280F, $28E3, $28E4, $28F0, $28F1, $28FE, $2CD7, $28FF, $28E5, $28E6, $28E7, $28FB, $280F, $000E, $000E, $000E +MsgTilemap_Varia: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $28D5, $28C0, $28D1, $28C8, $28C0, $280F, $28D2, $28D4, $28C8, $28D3, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Spring: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $28D2, $28CF, $28D1, $28C8, $28CD, $28C6, $280F, $28C1, $28C0, $28CB, $28CB, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Morph: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $28CC, $28CE, $28D1, $28CF, $28C7, $28C8, $28CD, $28C6, $280F, $28C1, $28C0, $28CB, $28CB, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Screw: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $28D2, $28C2, $28D1, $28C4, $28D6, $280F, $28C0, $28D3, $28D3, $28C0, $28C2, $28CA, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Hijump: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $28C7, $28C8, $28DD, $28C9, $28D4, $28CC, $28CF, $280F, $28C1, $28CE, $28CE, $28D3, $28D2, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Space: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $28D2, $28CF, $28C0, $28C2, $28C4, $280F, $28C9, $28D4, $28CC, $28CF, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Speed: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $28D2, $28CF, $28C4, $28C4, $28C3, $280F, $28C1, $28CE, $28CE, $28D2, $28D3, $28C4, $28D1, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $28E0, $28E1, $28E2, $280F, $28F8, $280F, $28E3, $28E4, $28F0, $28F1, $28FE, $38FA, $28FF, $28E5, $28E6, $28E7, $280F, $28F2, $280F, $28EC, $28ED, $28FB, $280F, $280F, $000E, $000E, $000E +MsgTilemap_Charge: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $28C2, $28C7, $28C0, $28D1, $28C6, $28C4, $280F, $28C1, $28C4, $28C0, $28CC, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Ice: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $28C8, $28C2, $28C4, $280F, $28C1, $28C4, $28C0, $28CC, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Wave: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $28D6, $28C0, $28D5, $28C4, $280F, $28C1, $28C4, $28C0, $28CC, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Spazer: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $28D2, $28CF, $28C0, $28D9, $28C4, $28D1, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Plasma: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $28CF, $28CB, $28C0, $28D2, $28CC, $28C0, $280F, $28C1, $28C4, $28C0, $28CC, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Bomb: + dw $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $28C1, $28CE, $28CC, $28C1, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $28B0, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $28B1, $28B3, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E + dw $000E, $000E, $000E, $280F, $280F, $28B2, $3CFC, $38FD, $3CF9, $280F, $28F8, $280F, $28F5, $28F6, $28F7, $280F, $28EE, $28EF, $28F0, $28F1, $28FE, $38CB, $28FF, $28E5, $28E6, $28E7, $28FB, $280F, $280F, $000E, $000E, $000E +MsgTilemap_Map_complete: + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3CCC, $3CC0, $3CCF, $3C0F, $3CC3, $3CC0, $3CD3, $3CC0, $3C0F, $3CC0, $3CC2, $3CC2, $3CC4, $3CD2, $3CD2, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3C0F, $3C0F, $3CC2, $3CCE, $3CCC, $3CCF, $3CCB, $3CC4, $3CD3, $3CC4, $3CC3, $3CDA, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Energy_complete: + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3CC4, $3CCD, $3CC4, $3CD1, $3CC6, $3CD8, $3C0F, $3CD1, $3CC4, $3CC2, $3CC7, $3CC0, $3CD1, $3CC6, $3CC4, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3C0F, $3C0F, $3CC2, $3CCE, $3CCC, $3CCF, $3CCB, $3CC4, $3CD3, $3CC4, $3CC3, $3CDA, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Reload_complete: + dw $000E, $000E, $000E, $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2CCC, $2CC8, $2CD2, $2CD2, $2CC8, $2CCB, $2CC4, $2C0F, $2CD1, $2CC4, $2CCB, $2CCE, $2CC0, $2CC3, $2C0F, $2C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $380F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $380F, $380F, $3C0F, $3CC2, $3CCE, $3CCC, $3CCF, $3CCB, $3CC4, $3CD3, $3CC4, $3CC3, $3CDA, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Saveyn: + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3CD6, $3CCE, $3CD4, $3CCB, $3CC3, $3C0F, $3CD8, $3CCE, $3CD4, $3C0F, $3CCB, $3CC8, $3CCA, $3CC4, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3CD3, $3CCE, $3C0F, $3CD2, $3CC0, $3CD5, $3CC4, $3CDE, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $38FC, $38FD, $3CD8, $3CC4, $3CD2, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $3C0F, $2CCD, $2CCE, $3C0F, $3C0F, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Save_complete: + dw $000E, $000E, $000E, $000E, $000E, $000E, $3C0F, $3C0F, $3CD2, $3CC0, $3CD5, $3CC4, $3C0F, $3CC2, $3CCE, $3CCC, $3CCF, $3CCB, $3CC4, $3CD3, $3CC4, $3CC3, $3CDA, $3C0F, $3C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Reserve: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $28D1, $28C4, $28D2, $28C4, $28D1, $28D5, $28C4, $280F, $28D3, $28C0, $28CD, $28CA, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Gravity: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $28C6, $28D1, $28C0, $28D5, $28C8, $28D3, $28D8, $280F, $28D2, $28D4, $28C8, $28D3, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Terminator: +MsgTilemap_WallJump: dw $000E, $000E, $000E, $000E, $000E, $000E, $2C0F, $2C0F, $2CD6, $2CC0, $2CCB, $2CCB, $2CDD, $2CC9, $2CD4, $2CCC, $2CCF, $2C0F, $2CC1, $2CCE, $2CCE, $2CD3, $2CD2, $2C0F, $2C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E -sparkbooster: ;spark booster - dw $000E, $000E, $000E, $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2CD2, $2CCF, $2CC0, $2CD1, $2CCA, $2C0F, $2CC1, $2CCE, $2CCE, $2CD2, $2CD3, $2CC4, $2CD1, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E -bluebooster: ;blue booster - dw $000E, $000E, $000E, $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2CC1, $2CCB, $2CD4, $2CC4, $2C0F, $2CC1, $2CCE, $2CCE, $2CD2, $2CD3, $2CC4, $2CD1, $2C0F,$2C0F, $2C0F, $000E, $000E, $000E, $000E, $000E, $000E, $000E - -msg_end: - dw $0000 - -assert pc() <= !bank_85_free_space_end +MsgTilemap_BlueBooster: + dw $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2CD2, $2CCF, $2CC0, $2CD1, $2CCA, $2C0F, $2CC1, $2CCE, $2CCE, $2CD2, $2CD3, $2CC4, $2CD1, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E + dw $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E + dw $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E + dw $000E, $000E, $000E, $2C0F, $2C0F, $2CE0, $2CE1, $2CE2, $2C0F, $2CF8, $2C0F, $2CE3, $2CE4, $2CF0, $2CF1, $2CFE, $38FA, $2CFF, $2CE5, $2CE6, $2CE7, $2C0F, $2CF2, $2C0F, $2CEC, $2CED, $2CFB, $2C0F, $2C0F, $000E, $000E, $000E +MsgTilemap_SparkBooster: + dw $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2CC1, $2CCB, $2CD4, $2CC4, $2C0F, $2CC1, $2CCE, $2CCE, $2CD2, $2CD3, $2CC4, $2CD1, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E + dw $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E + dw $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $2C0F, $000E, $000E, $000E + dw $000E, $000E, $000E, $2C0F, $2C0F, $2CE0, $2CE1, $2CE2, $2C0F, $2CF8, $2C0F, $2CE3, $2CE4, $2CF0, $2CF1, $2CFE, $38FA, $2CFF, $2CE5, $2CE6, $2CE7, $2C0F, $2CF2, $2C0F, $2CEC, $2CED, $2CFB, $2C0F, $2C0F, $000E, $000E, $000E +MsgTilemap_Reserved1: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Reserved2: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_Reserved3: + dw $000E, $000E, $000E, $000E, $000E, $000E, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $280F, $000E, $000E, $000E, $000E, $000E, $000E, $000E +MsgTilemap_End: \ No newline at end of file diff --git a/patches/src/fast_reload.asm b/patches/src/fast_reload.asm index afaf372b7..8dea5eee7 100644 --- a/patches/src/fast_reload.asm +++ b/patches/src/fast_reload.asm @@ -10,8 +10,8 @@ arch 65816 !bank_80_free_space_end = $80d330 !bank_82_free_space_start = $82FE70 !bank_82_free_space_end = $82FE80 -!bank_85_free_space_start = $859880 -!bank_85_free_space_end = $859980 +!bank_85_free_space_start = $85c900 +!bank_85_free_space_end = $85cC9DF !savestate_button_combo = $82FE78 ; This should be inside free space, and also consistent with reference in customize.rs !loadstate_button_combo = $82FE7A ; This should be inside free space, and also consistent with reference in customize.rs diff --git a/patches/src/max_ammo_display_fast.asm b/patches/src/max_ammo_display_fast.asm index 5b680c83c..549809c84 100644 --- a/patches/src/max_ammo_display_fast.asm +++ b/patches/src/max_ammo_display_fast.asm @@ -404,26 +404,7 @@ HUD_digits_tilemap_row1: dw $0000, $0001, $0002, $0003, $0004, $0005, $0006, $0007, $0008, $0009 -warnpc !bank_80_free_space_end - -;;; 85/ MISSILE/SUPER/POWER BOMB message tilemaps -org $858851 - dw $280F, $280F, $280F - -org $858891 - dw $3049, $304A, $304B - -org $858951 - dw $280F, $280F, $280F - -org $858993 - dw $3034, $3035 - -org $858A4F - dw $280F, $280F - -org $858A8F - dw $3036, $7036 +assert pc() <= !bank_80_free_space_end ;;; 9A/$B200: Standard BG3 tiles ;;; org $9AB542 diff --git a/patches/src/missile_refill_all.asm b/patches/src/missile_refill_all.asm index 3f7acddb2..619929820 100644 --- a/patches/src/missile_refill_all.asm +++ b/patches/src/missile_refill_all.asm @@ -53,9 +53,4 @@ fill_ammo: sta $09CE rts -assert pc() <= !bank_84_free_space_end - -; change MISSILE to AMMO -org $8592FF - dw $000E, $000E, $000E, $000E, $000E, $000E, $2C0F, $2C0F, $2C0F, $2C0F, $2CC0, $2CCC, $2CCC, $2CCE, $2C0F, $2CD1, $2CC4, $2CCB, $2CCE, $2CC0, $2CC3, $2C0F, $2C0F, $2C0F, $2C0F, $2C0E, $000E, $000E, $000E, $000E, $000E, $000E -assert pc() <= $8593BF \ No newline at end of file +assert pc() <= !bank_84_free_space_end \ No newline at end of file diff --git a/patches/src/spin_lock.asm b/patches/src/spin_lock.asm index c580943d5..726a0d731 100644 --- a/patches/src/spin_lock.asm +++ b/patches/src/spin_lock.asm @@ -1,5 +1,5 @@ -!bank_85_free_space_start = $859800 -!bank_85_free_space_end = $859880 +!bank_85_free_space_start = $85A050 +!bank_85_free_space_end = $85A07A incsrc "constants.asm" @@ -34,4 +34,4 @@ hook_spin_lock: lda $0A1C asl A rtl -warnpc !bank_85_free_space_end +assert pc() <= !bank_85_free_space_end diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index f01518c0e..45d848a77 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -621,9 +621,9 @@ impl Patcher<'_> { } } - if self.settings.other_settings.wall_jump == WallJump::Collectible - || self.settings.other_settings.speed_booster == SpeedBooster::Split - { + let extended_msg_boxes = self.settings.other_settings.wall_jump == WallJump::Collectible + || self.settings.other_settings.speed_booster == SpeedBooster::Split; + if extended_msg_boxes { patches.push("extended_msg_boxes"); } @@ -1364,6 +1364,30 @@ impl Patcher<'_> { Ok(()) } + fn write_ammo_or_missile_refil(&mut self) -> Result<()> { + // this overwrites the missile refill tilemap, if adjusting the extended message boxes table this + // will also need to be adjusted. + let extended_msg_boxes = self.settings.other_settings.wall_jump == WallJump::Collectible + || self.settings.other_settings.speed_booster == SpeedBooster::Split; + if self.settings.quality_of_life_settings.ammo_refill_all { + let base = if extended_msg_boxes { + 0x85933B + } else { + 0x8592FF + }; + let ammo_row: [u16; 32] = [ + 0x000E, 0x000E, 0x000E, 0x000E, 0x000E, 0x000E, 0x2C0F, 0x2C0F, 0x2C0F, 0x2C0F, + 0x2CC0, 0x2CCC, 0x2CCC, 0x2CCE, 0x2C0F, 0x2CD1, 0x2CC4, 0x2CCB, 0x2CCE, 0x2CC0, + 0x2CC3, 0x2C0F, 0x2C0F, 0x2C0F, 0x2C0F, 0x2C0E, 0x000E, 0x000E, 0x000E, 0x000E, + 0x000E, 0x000E, + ]; + for (i, &word) in ammo_row.iter().enumerate() { + self.rom.write_u16(snes2pc(base) + i * 2, word as isize)?; + } + } + Ok(()) + } + fn make_map_revealed(&mut self) -> Result<()> { // Zero out map revealed bits. These will be filled in later to identify area-transition markers, // which are tiles that need to be only fully revealed (not partial) since otherwise they would @@ -3895,6 +3919,7 @@ pub fn make_rom( { patcher.use_area_based_music()?; } + patcher.write_ammo_or_missile_refil()?; patcher.setup_door_specific_fx()?; if randomizer_settings.quality_of_life_settings.camera_fixes { //nn note - the cre wasn't applied in ultralow qol, is this also camera fixes or some other reason - check this too! diff --git a/scripts/build_ips.py b/scripts/build_ips.py index 72b74b045..3eedd2343 100644 --- a/scripts/build_ips.py +++ b/scripts/build_ips.py @@ -139,7 +139,11 @@ def check_range(filename, other_filename, overlap_start, overlap_end): ['max_ammo_display_fast', 0x858851, 0x858A93], ['max_ammo_display_fast', 0x9AB542, 0x9AB6C0], ['missile_refill_all', 0x8592FF, 0x85933F], - ['Area Palettes', 0x82E569, 0x82E56C] + ['Area Palettes', 0x82E569, 0x82E56C], + ['extended_msg_boxes', 0x85877F, 0x859643] + ], + 'extended_msg_boxes': [ + ['hud_expansion_opaque', 0x85877F, 0x859643] ], 'fast_saves': [ ['itemsounds', 0x858089, 0x85808B],