Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified patches/ips/map_area.ips
Binary file not shown.
Binary file modified patches/ips/split_speed.ips
Binary file not shown.
2 changes: 1 addition & 1 deletion patches/rom_map/Bank 82.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion patches/rom_map/Bank 90.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
$FC40 - $FCE0: split_speed.asm
4 changes: 3 additions & 1 deletion patches/rom_map/Bank B6.txt
Original file line number Diff line number Diff line change
@@ -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
9 changes: 4 additions & 5 deletions patches/src/map_area.asm
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ dw $3C33, $3C46,
org $8291F9
jsr load_map_screen_wrapper

org $8291D0
org $8291B1
jsr load_equipment_screen_wrapper

;;; Put new code in free space at end of bank $82:
Expand All @@ -276,7 +276,7 @@ load_map_screen_wrapper:

load_equipment_screen_wrapper:
jsl load_equipment_screen
rts
jmp $AB47

load_area_wrapper:
jsl load_area
Expand Down Expand Up @@ -564,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
Expand Down Expand Up @@ -617,9 +614,11 @@ load_equipment_screen:
lda #$6000
sta $4315 ; transfer size = $6000 bytes

php
sep #$30
lda #$02
sta $420B ; perform DMA transfer on channel 1
plp
rtl

load_target_palette_hook:
Expand Down
124 changes: 123 additions & 1 deletion patches/src/split_speed.asm
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -13,6 +19,34 @@
!speed_booster = $2000
!any_booster = !blue_booster|!spark_booster|!speed_booster

; Fine. Hijack the ENTIRE THING.
org $8291D0
jsr hook_setup_speedbooster_menu_tile_wrapper

org $82B5AE
jsr hook_equip_enable

org $82C066
; Speedbooster bitset
dw !any_booster

org !bank_82_free_space_start

hook_setup_speedbooster_menu_tile_wrapper:
sta $0725 ; run hi-jacked instruction
jsl hook_setup_speedbooster_menu_tile
rts

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
Expand Down Expand Up @@ -194,4 +228,92 @@ hook_update_speed_echoes:
lda $0b3e ; run hi-jacked instruction
rts

hook_setup_speedbooster_menu_tile:
php

rep #$30
lda $09A4
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