shithub: pokered

Download patch

ref: 17d6c0d0f7de10572f15a99323d834c2ab4af6ff
parent: 76311b6e5420d7286ca171a4f2df2a1351673c4a
author: xeons <xeons@xeons.net>
date: Fri Mar 30 17:36:54 EDT 2012

Forced biking or surfing map handling functions

hg-commit-id: 7980878962c4


--- a/extras/gbz80disasm.py
+++ b/extras/gbz80disasm.py
@@ -604,7 +604,8 @@
     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
--- a/main.asm
+++ b/main.asm
@@ -470,8 +470,8 @@
 	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 @@
 	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 @@
 	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