diff options
| -rw-r--r-- | main.asm | 254 | 
1 files changed, 182 insertions, 72 deletions
| @@ -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? @@ -6891,7 +6900,22 @@ LoadHpBarAndStatusTilePatterns: ; 36C0  	ld bc,(BANK(HpBarAndStatusGraphics) << 8 | $1e)  	jp CopyVideoData ; if LCD is on, transfer during V-blank -INCBIN "baserom.gbc",$36E0,$3739 - $36E0 +;Fills memory range with the specified byte. +;input registers a = fill_byte, bc = length, hl = address +FillMemory: ;36E0 +	push de +	ld d, a +.loop\@ +	ld a, d +	ldi [hl], a +	dec bc +	ld a, b +	or c +	jr nz, .loop\@  +	pop de +	ret + +INCBIN "baserom.gbc",$36EB,$3739 - $36EB  DelayFrames: ; 3739  ; wait n frames, where n is the value in c @@ -7923,75 +7947,93 @@ Predef: ; 3E6D  	ld [$2000],a  	ret -INCBIN "baserom.gbc",$3E94,$3F22 - $3E94 +;loads hl from cc4f, de from cc51, and bc from cc53 + +Load16BitRegisters: ;3e94 +	ld a, [$cc4f] +	ld h, a +	ld a, [$cc50] +	ld l, a +	ld a, [$cc51] +	ld d, a +	ld a, [$cc52] +	ld e, a +	ld a, [$cc53] +	ld b, a +	ld a, [$cc54] +	ld c, a +	ret +; 0x3ead + +INCBIN "baserom.gbc",$3EAD,$3F22 - $3EAD  ; 0x3F22 -dw $66ee -dw $66f8 -dw $5b8e -dw $5b81 -dw $6960 -dw $697e -dw $6983 -dw $6cbd -dw $5bbe -dw $5ba8 -dw $5bd4 -dw $6453 -dw $6458 -dw $6511 -dw $64a3 -dw $64a8 -dw $64ad -dw $64b2 -dw $64d0 -dw $64d5 -dw $6502 -dw $64da -dw $64df -dw $64e4 -dw $64b7 -dw $64bc -dw $64c1 -dw $64c6 -dw $64cb -dw $6508 -dw $6529 -dw $69aa -dw $5ced -dw $5865 -dw $5878 -dw FoundHiddenItemText -dw HiddenItemBagFullText -dw $5df7 -dw $6a3d -dw $7e79 -dw $7e7e -dw $7e83 -dw FoundHiddenCoinsText -dw DroppedHiddenCoinsText -dw $6bdd -dw $6be2 -dw $6c05 -dw $6b69 -dw $6a25 -dw $7f37 -dw $7f32 -dw $5c29 -dw $69a4 -dw $6a2a -dw $6a10 -dw $6a1d -dw $6953 -dw $7bbf -dw $5ec8 -dw $5edb -dw $5eef -dw $5f02 -dw $7c12 -dw $7be8 -dw $7c0d -dw $7c45 +	dw $66ee +	dw $66f8 +	dw $5b8e +	dw $5b81 +	dw $6960 +	dw $697e +	dw $6983 +	dw $6cbd +	dw $5bbe +	dw $5ba8 +	dw $5bd4 +	dw $6453 +	dw $6458 +	dw $6511 +	dw $64a3 +	dw $64a8 +	dw $64ad +	dw $64b2 +	dw $64d0 +	dw $64d5 +	dw $6502 +	dw $64da +	dw $64df +	dw $64e4 +	dw $64b7 +	dw $64bc +	dw $64c1 +	dw $64c6 +	dw $64cb +	dw $6508 +	dw $6529 +	dw $69aa +	dw $5ced +	dw $5865 +	dw $5878 +	dw FoundHiddenItemText +	dw HiddenItemBagFullText +	dw $5df7 +	dw $6a3d +	dw $7e79 +	dw $7e7e +	dw $7e83 +	dw FoundHiddenCoinsText +	dw DroppedHiddenCoinsText +	dw $6bdd +	dw $6be2 +	dw $6c05 +	dw $6b69 +	dw $6a25 +	dw $7f37 +	dw $7f32 +	dw $5c29 +	dw $69a4 +	dw $6a2a +	dw $6a10 +	dw $6a1d +	dw $6953 +	dw $7bbf +	dw $5ec8 +	dw $5edb +	dw $5eef +	dw $5f02 +	dw $7c12 +	dw $7be8 +	dw $7c0d +	dw $7c45  SECTION "bank1",DATA,BANK[$1] @@ -10863,7 +10905,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, ForcedBikeOrSurfMaps +	ld a, [W_YCOORD] +	ld b, a +	ld a, [W_XCOORD] +	ld c, a +	ld a, [W_CURMAP] +	ld d, a +.loop\@ +	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\@ +	ld a, [hli] +	cp b ;compare y-coord +	jr nz, .incorrectY\@ +	ld a, [hli] +	cp c ;compare x-coord +	jr nz, .loop\@ ; incorrect x-coord, check next item +	ld a, [W_CURMAP] +	cp SEAFOAM_ISLANDS_4 +	ld a, $2 +	ld [$d666], a +	jr z, .forceSurfing\@ +	ld a, [$d35e] +	cp SEAFOAM_ISLANDS_5 +	ld a, $2 +	ld [$d668], a +	jr z, .forceSurfing\@ +	;force bike riding +	ld hl, $d732 +	set 5, [hl] +	ld a, $1 +	ld [$d700], a +	ld [$d11a], a +	jp ForceBikeOrSurf +.incorrectMap\@ +	inc hl +.incorrectY\@ +	inc hl +	jr .loop\@ +.forceSurfing\@ +	ld a, $2 +	ld [$d700], a +	ld [$d11a], a +	jp ForceBikeOrSurf +; 0xc3e6 + +ForcedBikeOrSurfMaps: ;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 | 
