diff options
-rw-r--r-- | extras/gbz80disasm.py | 3 | ||||
-rw-r--r-- | main.asm | 85 |
2 files changed, 83 insertions, 5 deletions
diff --git a/extras/gbz80disasm.py b/extras/gbz80disasm.py index 80d169e5..ae8f0f6f 100644 --- a/extras/gbz80disasm.py +++ b/extras/gbz80disasm.py @@ -604,7 +604,8 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000): bank_id = 0 if original_offset > 0x8000: bank_id = original_offset / 0x4000 - print "bank id is: " + str(bank_id) + #print "bank id is: " + str(bank_id) + print "Function{0:x}:".format(original_offset); last_hl_address = None #for when we're scanning the main map script last_a_address = None @@ -470,8 +470,8 @@ EnterMap: ; 3A6 call Bankswitch ; display fly/teleport in graphical effect call $2429 ; move sprites .didNotFlyOrTeleportIn\@ - ld b,$03 - ld hl,$438b + ld b,BANK(CheckForceBikeOrSurf) + ld hl,CheckForceBikeOrSurf call Bankswitch ; handle currents in SF islands and forced bike riding in cycling road ld hl,$d72d res 5,[hl] @@ -2849,8 +2849,17 @@ SwitchToMapRomBank: ; 12BC pop bc pop hl ret + +INCBIN "baserom.gbc",$12DA,$12ED-$12DA -INCBIN "baserom.gbc",$12DA,$12F8 - $12DA +;appears to be called twice inside function $C38B +;if $d700,$d11a == $1 then biking +;if $d700,$d11a == $2 then surfing +ForceBikeOrSurf: ; 12ED + ld b,5 ;graphics bank 5 + ld hl,LoadPlayerSpriteGraphics ;load player sprite graphics + call Bankswitch ;loads bank 5 and then calls LoadPlayerSpriteGraphics + jp $2307 ;update map/player state? ; this is used to check if the player wants to interrupt the opening sequence at several points ; XXX is this used anywhere else? @@ -10795,7 +10804,75 @@ MapHeaderBanks: ; 423D db BANK(Bruno_h) db BANK(Agatha_h) -INCBIN "baserom.gbc",$C335,$C766-$C335 +INCBIN "baserom.gbc",$C335,$C38B-$C335 + +CheckForceBikeOrSurf: ; C38B + ld hl, $D732 + bit 5, [hl] + ret nz + ld hl, ForcedBikeSurfMaps + ld a, [W_YCOORD] + ld b, a + ld a, [W_XCOORD] + ld c, a + ld a, [W_CURMAP] + ld d, a +.loop\0 + ld a, [hli] + cp $ff + ret z ;if we reach FF then it's not part of the list + cp d ;compare to current map + jr nz, .incorrectMap\0 + ld a, [hli] + cp b ;compare y-coord + jr nz, .incorrectY\0 + ld a, [hli] + cp c ;compare x-coord + jr nz, .loop\0 ; incorrect x-coord, check next item + ld a, [W_CURMAP] + cp SEAFOAM_ISLANDS_4 + ld a, $2 + ld [$d666], a + jr z, .forceSurfing\0 + ld a, [$d35e] + cp SEAFOAM_ISLANDS_5 + ld a, $2 + ld [$d668], a + jr z, .forceSurfing\0 + ;force bike riding + ld hl, $d732 + set 5, [hl] + ld a, $1 + ld [$d700], a + ld [$d11a], a + jp ForceBikeOrSurf +.incorrectMap\0 + inc hl +.incorrectY\0 + inc hl + jr .loop\0 +.forceSurfing\0 + ld a, $2 + ld [$d700], a + ld [$d11a], a + jp ForceBikeOrSurf +; 0xc3e6 + +ForcedBikeSurfMaps: ;C3e6 +; map id, y, x +db ROUTE_16,$0A,$11 +db ROUTE_16,$0B,$11 +db ROUTE_18,$08,$21 +db ROUTE_18,$09,$21 +db SEAFOAM_ISLANDS_4,$07,$12 +db SEAFOAM_ISLANDS_4,$07,$13 +db SEAFOAM_ISLANDS_5,$0E,$04 +db SEAFOAM_ISLANDS_5,$0E,$05 +db $FF ;end +; 0xc3ff + +INCBIN "baserom.gbc",$C3FF,$C766-$C3FF + ld hl, TilesetsHeadPtr INCBIN "baserom.gbc",$C769,$C7BE-$C769 |