diff options
Diffstat (limited to 'engine/bank3f.asm')
| -rw-r--r-- | engine/bank3f.asm | 1750 |
1 files changed, 1750 insertions, 0 deletions
diff --git a/engine/bank3f.asm b/engine/bank3f.asm new file mode 100644 index 00000000..1bc32483 --- /dev/null +++ b/engine/bank3f.asm @@ -0,0 +1,1750 @@ +INCLUDE "data/map_songs.asm" +INCLUDE "data/map_header_pointers.asm" +INCLUDE "data/map_header_banks.asm" + +Func_fc4dd:: ; fc4dd (3f:44dd) +; possibly to test if pika should be out? + ld a,[wd430] + bit 5,a + jr nz,.asm_fc4f8 ; 3f:44f8 + ld a,[wd430] + bit 7,a + jr nz,.asm_fc4f8 + call IsStarterPikachuInOurParty + jr nc,.asm_fc4f8 + ld a,[wWalkBikeSurfState] + and a + jr nz,.asm_fc4f8 + scf + ret +.asm_fc4f8 + and a + ret + +Func_fc4fa:: ; fc4fa (3f:44fa) + ld hl,wd430 + bit 4,[hl] + res 4,[hl] + jr nz,.asm_fc515 + call Func_1542 + call Func_fc523 + ld a,$ff + ld [wSpriteStateData1 + $f2],a + call Func_fcb84 + call Func_fc5bc + ret + +.asm_fc515 + call Func_fc53f + xor a + ld [wd431],a + ld a,[wSpriteStateData1 + $9] + ld [wSpriteStateData1 + $f9],a + ret + +Func_fc523:: ; fc523 (3f:4523) + ld hl,wSpriteStateData1 + $f0 + call Func_fc52c + ld hl,wSpriteStateData2 + $f0 +Func_fc52c:: ; fc52c (3f:4523) + ld bc,$10 + xor a + call FillMemory + ret + +Func_fc534:: ; fc534 (3f:4534) + call Func_fc53f + call Func_fc5bc + xor a + ld [wd431],a + ret + +Func_fc53f:: ; fc53f (3f:453f) + ld bc,wSpriteStateData1 + $f0 + ld a,[wYCoord] + add $4 + ld e,a + ld a,[wXCoord] + add $4 + ld d,a + ld a,[wd431] + and a + jr z,.asm_fc5aa + cp $1 + jr z,.asm_fc59e + cp $2 + jr z,.asm_fc584 + cp $3 + jr z,.asm_fc5aa + cp $4 + jr z,.asm_fc5a4 + cp $5 + jr z,.asm_fc5a7 + cp $6 + jr z,.asm_fc5a1 + cp $7 + jr z,.asm_fc572 + jr .asm_fc59e + +.asm_fc572 + ld a,[wSpriteStateData1 + $9] + and a ; SPRITE_FACING_DOWN + jr z,.asm_fc5a4 + cp SPRITE_FACING_UP + jr z,.asm_fc5a7 + cp SPRITE_FACING_LEFT + jr z,.asm_fc5a1 + cp SPRITE_FACING_RIGHT + jr z,.asm_fc59e +.asm_fc584 + ld a,[wSpriteStateData1 + $9] + and a + jr nz,.asm_fc58d + dec e + jr .asm_fc5aa +.asm_fc58d + cp SPRITE_FACING_UP + jr nz,.asm_fc594 + inc e + jr .asm_fc5aa +.asm_fc594 + cp SPRITE_FACING_LEFT + jr nz,.asm_fc59b + inc d + jr .asm_fc5aa +.asm_fc59b + dec d + jr .asm_fc5aa +.asm_fc59e + inc d + jr .asm_fc5aa +.asm_fc5a1 + dec d + jr .asm_fc5aa +.asm_fc5a4 + inc e + jr .asm_fc5aa +.asm_fc5a7 + dec e + jr .asm_fc5aa ; useless jr +.asm_fc5aa + ld hl,$104 + add hl,bc + ld [hl],e + inc hl + ld [hl],d + inc hl +Func_fc4b2:: ; fc4b2 (3f:44b2) + ld [hl],$fe + push hl + ld hl,wd472 + set 5,[hl] + pop hl + ret + +Func_fc5bc:: ; fc5bc (3f:45bc) + ld a,$49 + ld [wSpriteStateData1 + $f0],a + ld a,$ff + ld [wSpriteStateData1 + $f2],a + ld a,[wd431] + and a + jr z,.asm_fc5e4 + cp $1 + jr z,.asm_fc5e4 + cp $3 + jr z,.asm_fc5eb + cp $4 + jr z,.asm_fc5e4 + cp $6 + jr z,.asm_fc5e4 + cp $7 + jr z,.asm_fc5f1 + call Func_fccb2 + ret + +.asm_fc5e4 + ld a,[wSpriteStateData1 + $9] + ld [wSpriteStateData1 + $f9],a + ret +.asm_fc5eb + ld a,$0 + ld [wSpriteStateData1 + $f9],a + ret +.asm_fc5f1 + ld a,[wSpriteStateData1 + $9] + xor $4 + ld [wSpriteStateData1 + $f9],a + ret + +Func_fc5fa:: ; fc5fa (3f:45fa) + ld a,[wCurMap] + cp OAKS_LAB + jr z,.asm_fc63d + cp ROUTE_22_GATE + jr z,.asm_fc62d + cp MT_MOON_2 + jr z,.asm_fc635 + cp ROCK_TUNNEL_1 + jr z,.asm_fc645 + ld a,[wCurMap] + ld hl,Pointer_fc64b + call Func_1568 ; similar to IsInArray, but not the same + jr c,.asm_fc639 + ld a,[wCurMap] + ld hl,Pointer_fc653 + call Func_1568 + jr nc,.asm_fc641 + ld a,[wSpriteStateData1 + $9] + and a + jr nz,.asm_fc641 + ld a,$3 + jr .asm_fc647 + +.asm_fc62d + ld a,[wSpriteStateData1 + $9] + and a + jr z,.asm_fc645 + jr .asm_fc641 +.asm_fc635 + ld a,$3 + jr .asm_fc647 +.asm_fc639 + ld a,$4 + jr .asm_fc647 +.asm_fc63d + ld a,$6 + jr .asm_fc647 +.asm_fc641 + ld a,$1 + jr .asm_fc647 +.asm_fc645 + ld a,$3 +.asm_fc647 + ld [wd431],a + ret + +Pointer_fc64b:: ; fc64b (3f:464b) + db $c2,$4c,$4f,$ba,$be,$b8,$54,$ff + +Pointer_fc653:: ; fc653 (3f:4653) + db $2f,$e6,$3e,$5e,$80,$31,$a4,$ff + +Func_fc65b:: ; fc65b (3f:465b) + ld a,[wCurMap] + cp VIRIDIAN_FOREST_EXIT + jr z,.asm_fc673 + cp VIRIDIAN_FOREST_ENTRANCE + jr z,.asm_fc67c + ld a,[wCurMap] + ld hl,Pointer_fc68e + call Func_1568 + jr c,.asm_fc688 + jr .asm_fc684 +.asm_fc673 + ld a,[wSpriteStateData1 + $9] + cp SPRITE_FACING_UP + jr z,.asm_fc688 + jr .asm_fc684 +.asm_fc67c + ld a,[wSpriteStateData1 + $9] + and a ; SPRITE_FACING_DOWN + jr z,.asm_fc684 + jr .asm_fc688 +.asm_fc684 + ld a,$0 + jr .asm_fc68a +.asm_fc688 + ld a,$1 +.asm_fc68a + ld [wd431],a + ret + +Pointer_fc68e:: ; fc68e (3f:468e) + db $33,$dd,$df,$e0,$e1,$de,$ec,$7f,$a8,$a9,$aa,$ff + +Func_fc69a:: ; fc69a (3f:469a) + ld a,[wCurMap] + cp ROUTE_22_GATE + jr z,.asm_fc6a7 + cp ROUTE_2_GATE + jr z,.asm_fc6b0 + jr .asm_fc6bd +.asm_fc6a7 + ld a,[wSpriteStateData1 + $9] + cp SPRITE_FACING_UP + jr z,.asm_fc6b9 + jr .asm_fc6bd +.asm_fc6b0 + ld a,[wSpriteStateData1 + $9] + cp SPRITE_FACING_UP + jr z,.asm_fc6b9 + jr .asm_fc6bd +.asm_fc6b9 + ld a,$1 + jr .asm_fc6c1 +.asm_fc6bd + ld a,$3 + jr .asm_fc6c1 +.asm_fc6c1 + ld [wd431],a + ret + +Func_fc6c5:: ; fc6c5 (3f:46c5) + push hl + ld hl,wd430 + set 2,[hl] + pop hl + ret + +Func_fc6cd:: ; fc6cd (3f:46cd) + push hl + ld hl,wd430 + res 2,[hl] + pop hl + ret + +Func_fc6d5:: ; fc6d5 (3f:46d5) + call Func_fc6cd + call Func_fc727 + ret nc + push bc + call Func_fcd25 + pop bc + ret c + ld bc,wSpriteStateData1 + $f0 + ld hl,$1 + add hl,bc + bit 7,[hl] + jp nz,asm_fc745 + ld a,[wFontLoaded] + bit 0,a + jp nz,asm_fc76a + call Func_154a + jp nz,asm_fc76a + ld a,[hl] + and $7f + cp $a + jr c,.asm_fc704 + xor a +.asm_fc704 + add a + ld e,a + ld d,0 + ld hl,PointerTable_fc710 + add hl,de + ld a,[hli] + ld h,[hl] + ld l,a + jp hl + +PointerTable_fc710: ; fc710 (3f:4710) + dw Func_fc793 + dw Func_fc7aa + dw Func_fc803 + dw asm_fc9c3 + dw asm_fca1c + dw asm_fc9ee + dw asm_fc87f + dw asm_fc904 + dw asm_fc937 + dw asm_fc969 + dw Func_fc726 + +Func_fc726: ; fc726 (3f:4726) + ret + +Func_fc727: ; fc727 (3f:4727) + call Func_fc4dd + jr nc,.asm_fc73b + ld a,[wSpriteStateData1 + $f1] + and a + jr nz,.asm_fc739 + push bc + push hl + call Func_fc534 + pop hl + pop bc +.asm_fc739 + scf + ret +.asm_fc73b + ld hl,wSpriteStateData1 + $f2 + ld [hl],$ff + dec hl + ld [hl],$0 + xor a + ret +asm_fc745: ; fc745 (3f:4745) + ld hl,$1 + add hl,bc + res 7,[hl] + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],a + call Func_154a + jr nz,.asm_fc75f + ld a,[wSpriteStateData1 + $9] + xor $4 + ld hl,$9 + add hl,bc + ld [hl],a +.asm_fc75f + xor a + ld hl,$7 + add hl,bc + ld [hli],a + ld [hl],a + call Func_fca99 + ret +asm_fc76a: ; fc76a (3f:476a) + xor a + ld hl,$7 + add hl,bc + ld [hli],a + ld [hl],a + call Func_fca99 + call Func_fc82e + jr c,.asm_fc783 + push bc + callab InitializeSpriteScreenPosition + pop bc +.asm_fc783 + ld hl,$1 + add hl,bc + ld [hl],$1 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$0 + call Func_fcba1 + ret + +Func_fc793: ; fc793 (3f:4793) + call Func_fcba1 + push bc + callab InitializeSpriteScreenPosition + pop bc + ld hl,$2 + add hl,bc + ld [hl],$ff + dec hl + ld [hl],$1 + ret + +Func_fc7aa: ; fc7aa (3f:47aa) + call Func_fcc92 + jp c,Func_fc803 + dec a + ld l,a + ld h,$0 + add hl,hl + add hl,hl + ld de,Pointer_fc7e3 + add hl,de + ld d,h + ld e,l + ld a,[de] + inc de + ld hl,$9 + add hl,bc + ld [hl],a + ld a,[de] + inc de + ld hl,$5 + add hl,bc + ld [hl],a + dec hl + dec hl + ld a,[de] + ld [hl],a + inc de + ld a,[de] + ld hl,$1 + add hl,bc + ld [hl],a + cp $4 + jp z,Func_fca0a + call Func_fcd17 + jp c,Func_fc9df + jp Func_fc9b4 + +Pointer_fc7e3: ; fc7e3 (3f:47e3) + db $0,$0 + db $1,$3 + db $4,$0 + db $ff,$3 + db $8,$ff + db $0,$3 + db $c,$1 + db $0,$3 + db $0,$0 + db $1,$4 + db $4,$0 + db $ff,$4 + db $8,$ff + db $0,$4 + db $c,$1 + db $0,$4 + +Func_fc803: ; fc803 (3f:4803) + call Func_fcae2 + ret c + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + jr nz,.asm_fc823 + push hl + call Func_fccee + pop hl + cp $5 + jr nc,Func_fc842 + ld [hl],$20 + call Random + and $c + ld hl,$9 + add hl,bc + ld [hl],a +.asm_fc823 + xor a + ld hl,$7 + add hl,bc + ld [hli],a + ld [hl],a + call Func_fca99 + ret + +Func_fc82e: ; fc82e (3f:482e) + ld a,[wWalkCounter] + and a + ret z + scf + ret + +Func_fc835: ; fc835 (3f:4835) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$10 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fc842: ; fc842 (3f:4842) + ld hl,$0 + push af + call Random + ld a,[hRandomAdd] + and %11 + ld e,a + ld d,$0 + ld hl,PointerTable_fc85a + add hl,de + add hl,de + ld a,[hli] + ld h,[hl] + ld l,a + pop af + jp hl + +PointerTable_fc85a: ; fc85a (3f:485a) + dw Func_fc862 + dw Func_fc8f8 + dw Func_fc92b + dw Func_fc95d + +Func_fc862: ; fc862 (3f:4862) + dec a + add a + add a + and $c + ld hl,$9 + add hl,bc + ld [hl],a + ld hl,$1 + add hl,bc + ld [hl],$6 + xor a + ld [wd432],a + ld [wd433],a + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$11 +asm_fc87f: ; fc87f (3f:487f) + ld a,[wd432] + ld e,a + ld a,[wd433] + ld d,a + call Func_fc82e + jr c,Func_fc8c7 + call Func_fc6c5 + ld hl,$4 + add hl,bc + ld a,[hl] + sub e + ld e,a + inc hl + inc hl + ld a,[hl] + sub d + ld d,a + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld a,[hl] + dec a + add a + add $d6 + ld l,a + ld a,$48 + adc $0 + ld h,a + ld a,[hli] + ld [wd432],a + add e + ld e,a + ld a,[hl] + ld [wd433],a + add d + ld d,a + ld hl,$4 + add hl,bc + ld [hl],e + inc hl + inc hl + ld [hl],d + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc8c7: ; fc8c7 (3f:48c7) + ld hl,$4 + add hl,bc + ld a,[hl] + sub e + ld [hl],a + inc hl + inc hl + ld a,[hl] + sub d + ld [hl],a + jp Func_fc835 + +Pointer_fc8d6: ; fc8d6 (3f:48d6) + db $0,$0,$fe,$1,$fc + db $2,$fe,$3,$0,$4 + db $fe,$3,$fc,$2,$fe + db $1,$0,$0,$fe,$ff + db $fc,$fe,$fe,$fd,$0 + db $fc,$fe,$fd,$fc,$fe + db $fe,$ff,$00,$00 + +Func_fc8f8: ; fc8f8 (3f:48f8) + ld hl,$1 + add hl,bc + ld [hl],$7 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$30 +asm_fc904: ; fc904 (3f:4904) + call Func_fc82e + jp c,Func_fc835 + call Func_fc6c5 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp $8 + ld [hl],a + jr nz,.asm_fc91f + xor a + ld [hli],a + ld a,[hl] + inc a + and %11 + ld [hl],a +.asm_fc91f + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc92b: ; fc92b (3f:492b) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$20 + ld hl,$1 + add hl,bc + ld [hl],$8 +asm_fc937: ; fc937 (3f:4937) + call Func_fc82e + jp c,Func_fc835 + call Func_fc6c5 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp $8 + ld [hl],a + jr nz,.asm_fc951 + xor a + ld [hli],a + ld a,[hl] + xor $1 + ld [hl],a +.asm_fc951 + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc95d: ; fc95d (3f:495d) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$20 + ld hl,$1 + add hl,bc + ld [hl],$9 +asm_fc969: ; fc969 (3f:4969) + call Func_fc82e + jp c,Func_fc835 + call Func_fc6c5 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp $8 + ld [hl],a + jr nz,.asm_fc988 + xor a + ld [hl],a + ld hl,$9 + add hl,bc + ld a,[hl] + call Func_fc994 + ld [hl],a +.asm_fc988 + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc994: ; fc994 (3f:4994) + push hl + ld hl,Pointer_fc9ac + ld d,a +.loop + ld a,[hli] + cp d + jr nz,.loop + ld a,[hl] + pop hl + ret + +Func_fc9a0: ; fc9a0 (3f:49a0) + push hl + ld hl,Pointer_fc9ac_End + ld d,a +.loop + ld a,[hld] + cp d + jr nz,.loop + ld a,[hl] + pop hl + ret + +Pointer_fc9ac: ; fc9ac (3f:49ac) + db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT +Pointer_fc9ac_End: +Func_fc9b4: ; fc9b4 (3f:49b4) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$8 + ld hl,$1 + add hl,bc + ld [hl],$3 + call Func_fca38 +asm_fc9c3: ; fc9c3 (3f:49c3) + call Func_fca4b + call Func_fca7e + call Func_fca99 + ld hl,$100 + add hl,bc + dec [hl] + ret nz + call Func_fca75 + call Func_fccb2 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fc9df: ; fc9df (3f:49df) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$4 + ld hl,$1 + add hl,bc + ld [hl],$5 + call Func_fca38 +asm_fc9ee: ; fc9ee (3f:49ee) + call asm_fca59 + call Func_fca7e + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + call Func_fca75 + call Func_fccb2 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fca0a: ; fca0a (3f:4a0a) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$8 + ld hl,$1 + add hl,bc + ld [hl],$4 + call Func_fca38 + call Func_fca38 +asm_fca1c: ; fca1c (3f:4a1c) + call asm_fca59 + call Func_fca7e + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + call Func_fca75 + call Func_fccb2 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fca38: ; fca38 (3f:4a38) + ld hl,$3 + add hl,bc + ld e,[hl] + inc hl + inc hl + ld d,[hl] + ld hl,$104 + add hl,bc + ld a,[hl] + add e + ld [hli],a + ld a,[hl] + add d + ld [hl],a + ret + +Func_fca4b: ; fca4b (3f:4a4b) + ld a,[wWalkBikeSurfState] + cp $1 + jr nz,Func_fca68 + ld a,[wd736] + bit 6,a + jr nz,Func_fca68 +asm_fca59: ; fca59 (3f:4a59) + ld hl,$3 + add hl,bc + ld a,[hli] + add a + add a + add [hl] + ld [hli],a + ld a,[hli] + add a + add a + add [hl] + ld [hl],a + ret + +Func_fca68: ; fca68 (3f:4a68) + ld hl,$3 + add hl,bc + ld a,[hli] + add a + add [hl] + ld [hli],a + ld a,[hli] + add a + add [hl] + ld [hli],a + ret + +Func_fca75: ; fca75 (3f:4a75) + ld hl,$3 + add hl,bc + xor a + ld [hli],a + inc hl + ld [hl],a + ret + +Func_fca7e: ; fca7e (3f:4a7e) + call Func_fcdad + ld d,$2 + jr nc,.asm_fca87 + ld d,$5 +.asm_fca87 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp d + jr nz,.asm_fca91 + xor a +.asm_fca91 + ld [hli],a + ret nz + ld a,[hl] + inc a + and $3 + ld [hl],a + ret + +Func_fca99: ; fca99 (3f:4a99) + ld a,[wd430] + bit 3,a + jr nz,.asm_fcad1 + ld hl,$10e + add hl,bc + ld a,[hl] + dec a + swap a + ld d,a + ld a,[wd736] + bit 7,a + jr nz,.asm_fcad8 + ld hl,$9 + add hl,bc + ld a,[hl] + or d + ld d,a + ld a,[wFontLoaded] + bit 0,a + jr z,.asm_fcac4 + call Func_fcae2 + ret c + jr .asm_fcacb +.asm_fcac4 + ld hl,$8 + add hl,bc + ld a,d + or [hl] + ld d,a +.asm_fcacb + ld hl,$2 + add hl,bc + ld [hl],d + ret +.asm_fcad1 + ld hl,$2 + add hl,bc + ld [hl],$ff + ret +.asm_fcad8 + ld a,[wSpriteStateData1 + $2] + and $f + or d + ld [wSpriteStateData1 + $f2],a + ret + +Func_fcae2: ; fcae2 (3f:4ae2) + ld hl,$104 + add hl,bc + ld a,[wYCoord] + add $4 + cp [hl] + jr nz,.asm_fcaff + inc hl + ld a,[wXCoord] + add $4 + cp [hl] + jr nz,.asm_fcaff + ld hl,$2 + add hl,bc + ld [hl],$ff + scf + ret +.asm_fcaff + and a + ret + +Func_fcb01: ; fcb01 (3f:4b01) + push bc + push de + push hl + ld bc,wSpriteStateData1 + $f0 + ld a,[wXCoord] + add $4 + ld d,a + ld a,[wYCoord] + add $4 + ld e,a + ld hl,$104 + add hl,bc + ld a,[hl] + sub e + and a + jr z,.asm_fcb30 + cp $ff + jr z,.asm_fcb26 + cp $1 + jr z,.asm_fcb26 + jr .asm_fcb48 +.asm_fcb26 + ld hl,$105 + add hl,bc + ld a,[hl] + sub d + jr z,.asm_fcb43 + jr .asm_fcb48 +.asm_fcb30 + ld hl,$105 + add hl,bc + ld a,[hl] + sub d + cp $ff + jr z,.asm_fcb43 + cp $1 + jr z,.asm_fcb43 + and a + jr z,.asm_fcb43 + jr .asm_fcb48 +.asm_fcb43 + pop hl + pop de + pop bc + scf + ret +.asm_fcb48 + pop hl + pop de + pop bc + xor a + ret + +Func_fcb4d: ; fcb4d (3f:4b4d) + call Func_fcb52 + ld e,a + ret + +Func_fcb52: ; fcb52 (3f:4b52) + ld bc,wSpriteStateData1 + $f0 + ld a,[wXCoord] + add $4 + ld d,a + ld a,[wYCoord] + add $4 + ld e,a + ld hl,$104 + add hl,bc + ld a,[hl] + cp e + jr z,Func_fcb71 + jr nc,.asm_fcb6e + ld a,$4 + ret +.asm_fcb6e + ld a,$0 + ret + +Func_fcb71: ; fcb71 (3f:4b71) + ld hl,$105 + add hl,bc + ld a,[hl] + cp d + jr z,.asm_fcb81 + jr nc,.asm_fcb7e + ld a,$8 + ret +.asm_fcb7e + ld a,$c + ret +.asm_fcb81 + ld a,$ff + ret + +Func_fcb84: ; fcb84 (3f:4b84) + push bc + ld hl,wd437 + ld [hl],$ff + inc hl + ld bc,$10 + xor a + call FillMemory + pop bc + ret + +Func_fcb94: ; fcb94 (3f:4b94) + ld hl,wd437 + inc [hl] + ld e,[hl] + ld d,0 + ld hl,wd438 + add hl,de + ld [hl],a + ret + +Func_fcba1: ; fcba1 (3f:4ba1) + call Func_fcb84 + call Func_fcbac + ret c + call Func_fcb94 + ret + +Func_fcbac: ; fcbac (3f:4bac) + ld bc,wSpriteStateData1 + $f0 + ld hl,$104 + add hl,bc + ld a,[wYCoord] + add $4 + sub [hl] + jr z,.asm_fcbd7 + jr c,.asm_fcbca + call Func_fcc01 + jr c,.asm_fcbc6 + ld a,$5 + and a + ret +.asm_fcbc6 + ld a,$1 + and a + ret +.asm_fcbca + call Func_fcc01 + jr c,.asm_fcbd3 + ld a,$6 + and a + ret +.asm_fcbd3 + ld a,$2 + and a + ret +.asm_fcbd7 + ld hl,$105 + add hl,bc + ld a,[wXCoord] + add $4 + sub [hl] + jr z,.asm_fcbff + jr c,.asm_fcbf2 + call Func_fcc01 + jr c,.asm_fcbee + ld a,$8 + and a + ret +.asm_fcbee + ld a,$4 + and a + ret +.asm_fcbf2 + call Func_fcc01 + jr c,.asm_fcbfb + ld a,$7 + and a + ret +.asm_fcbfb + ld a,$3 + and a + ret +.asm_fcbff + scf + ret + +Func_fcc01: ; fcc01 (3f:4c01) + jr nc,.asm_fcc05 + cpl + inc a +.asm_fcc05 + cp $2 + ret + +Func_fcc08:: ; fcc08 (3f:4c08) + call Func_fcc23 + ret nc + ld a,[wd736] + bit 6,a + jr nz,.asm_fcc1b + call Func_fcc42 + ret c + call Func_fcb94 + ret +.asm_fcc1b + call Func_fcc64 + ret c + call Func_fcb94 + ret + +Func_fcc23: ; fcc23 (3f:4c28) + ld a,[wd430] + bit 5,a + jr nz,.asm_fcc40 + ld a,[wd430] + bit 7,a + jr nz,.asm_fcc40 + ld a,[wd472] + bit 7,a + jr z,.asm_fcc40 + ld a,[wWalkBikeSurfState] + and a + jr nz,.asm_fcc40 + scf + ret +.asm_fcc40 + and a + ret + +Func_fcc42: ; fcc42 (3f:4c42) + xor a + ld a,[wPlayerDirection] + bit 3,a + jr nz,.asm_fcc58 + bit 2,a + jr nz,.asm_fcc5b + bit 1,a + jr nz,.asm_fcc5e + bit 0,a + jr nz,.asm_fcc61 + scf + ret +.asm_fcc58 + ld a,$2 + ret +.asm_fcc5b + ld a,$1 + ret +.asm_fcc5e + ld a,$3 + ret +.asm_fcc61 + ld a,$4 + ret + +Func_fcc64: ; fcc64 (3f:4c64) + ld hl,wd430 + bit 6,[hl] + jr z,.asm_fcc6e + res 6,[hl] + ret +.asm_fcc6e + set 6,[hl] + xor a + ld a,[wPlayerDirection] + bit 3,a + jr nz,.asm_fcc86 + bit 2,a + jr nz,.asm_fcc89 + bit 1,a + jr nz,.asm_fcc8c + bit 0,a + jr nz,.asm_fcc8f + scf + ret +.asm_fcc86 + ld a,$6 + ret +.asm_fcc89 + ld a,$5 + ret +.asm_fcc8c + ld a,$7 + ret +.asm_fcc8f + ld a,$8 + ret + +Func_fcc92: ; fcc92 (3f:4c92) + ld hl,wd437 + ld a,[hl] + cp $ff + jr z,.asm_fccb0 + and a + jr z,.asm_fccb0 + dec [hl] + ld e,a + ld d,0 + ld hl,wd438 + add hl,de + inc e + ld a,$ff +.asm_fcca8 + ld d,[hl] + ldd [hl],a + ld a,d + dec e + jr nz,.asm_fcca8 + and a + ret +.asm_fccb0 + scf + ret + +Func_fccb2:: ; fccb2 (3f:4cb2) + call Func_fcd01 + and a + jr z,.asm_fccbf + dec a + and $3 + add a + add a + jr .asm_fccea +.asm_fccbf + ld a,[wYCoord] + add $4 + ld d,a + ld a,[wXCoord] + add $4 + ld e,a + ld a,[wSpriteStateData2 + $f4] + cp d + jr z,.asm_fccd9 + ld a,SPRITE_FACING_DOWN + jr c,.asm_fccea + ld a,SPRITE_FACING_UP + jr .asm_fccea +.asm_fccd9 + ld a,[wSpriteStateData2 + $f5] + cp e + jr z,.asm_fcce7 + ld a,SPRITE_FACING_RIGHT + jr c,.asm_fccea + ld a,SPRITE_FACING_LEFT + jr .asm_fccea +.asm_fcce7 + ld a,[wSpriteStateData1 + $9] +.asm_fccea + ld [wSpriteStateData1 + $f9],a + ret + +Func_fccee: ; fccee (3f:4cee) + ld hl,wd437 + ld a,[hl] + cp $ff + jr z,.asm_fccff + ld e,a + ld d,0 + ld hl,wd438 + add hl,de + ld a,[hl] + ret +.asm_fccff + xor a + ret + +Func_fcd01: ; fcd01 (3f:4d01) + ld hl,wd437 + ld a,[hl] + cp $ff + jr z,.asm_fcd15 + and a + jr z,.asm_fcd15 + ld e,a + ld d,0 + ld hl,wd438 + add hl,de + ld a,[hl] + ret +.asm_fcd15 + xor a + ret + +Func_fcd17: ; fcd17 (3f:4d17) + ld a,[wd437] + cp $ff + ret z + cp $2 + jr nc,.asm_fcd23 + and a + ret +.asm_fcd23 + scf + ret + +Func_fcd25: ; fcd25 (3f:4d25) + ld h,wSpriteStateData2 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $4 + ld l,a + ld b,[hl] + ld a,[wYCoord] + cp b + jr z,.asm_fcd3a + jr nc,.asm_fcd63 + add $8 + cp b + jr c,.asm_fcd63 +.asm_fcd3a + inc l + ld b,[hl] + ld a,[wXCoord] + cp b + jr z,.asm_fcd49 + jr nc,.asm_fcd63 + add $9 + cp b + jr c,.asm_fcd63 +.asm_fcd49 + call Func_fcd83 + ld d,$60 + ld a,[hli] + ld e,a + cp d + jr nc,.asm_fcd63 + ld a,[hld] + cp d + jr nc,.asm_fcd63 + ld bc,-20 + add hl,bc + ld a,[hli] + cp d + jr nc,.asm_fcd63 + ld a,[hl] + cp d + jr c,.asm_fcd6f +.asm_fcd63 + ld h,wSpriteStateData1 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $2 + ld l,a + ld [hl],$ff + scf + jr .asm_fcd82 +.asm_fcd6f + ld h,wSpriteStateData2 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $7 + ld l,a + ld a,[wGrassTile] + cp e + ld a,$0 + jr nz,.asm_fcd80 + ld a,$80 +.asm_fcd80 + ld [hl],a + and a +.asm_fcd82 + ret + +Func_fcd83: ; fcd83 (3f:4d83) + ld h,wSpriteStateData1 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $4 + ld l,a + ld a,[hli] + add $4 + and $f0 + srl a + ld c,a + ld b,$0 + inc l + ld a,[hl] + add $2 + srl a + srl a + srl a + add SCREEN_WIDTH + ld d,0 + ld e,a + ld hl,wTileMap + rept 5 + add hl,bc + endr + add hl,de + ret + +Func_fcdad: ; fcdad (3f:4dad) + push bc + push af + ld a,[wPikachuHappiness] + cp $50 + pop bc + ld a,b + pop bc + ret + +IsStarterPikachuInOurParty:: ; fcdb8 (3f:4db8) + ld hl,wPartySpecies + ld de,wPartyMon1OTID + ld bc,wPartyMonOT + push hl +.loop + pop hl + ld a,[hli] + push hl + inc a + jr z,.noPlayerPikachu + cp PIKACHU + 1 + jr nz,.curMonNotPlayerPikachu + ld h,d + ld l,e + ld a,[wPlayerID] + cp [hl] + jr nz,.curMonNotPlayerPikachu + inc hl + ld a,[wPlayerID+1] + cp [hl] + jr nz,.curMonNotPlayerPikachu + push de + push bc + ld hl,wPlayerName + ld d,$6 ; possible player length - 1 +.nameCompareLoop + dec d + jr z,.sameOT + ld a,[bc] + inc bc + cp [hl] + inc hl + jr z,.nameCompareLoop + pop bc + pop de +.curMonNotPlayerPikachu + ld hl,wPartyMon2 - wPartyMon1 + add hl,de + ld d,h + ld e,l + ld hl,NAME_LENGTH + add hl,bc + ld b,h + ld c,l + jr .loop +.sameOT + pop bc + pop de + ld h,d + ld l,e + ld bc,-NAME_LENGTH + add hl,bc + ld a,[hli] + or [hl] + jr z,.noPlayerPikachu ; XXX how is this determined? + pop hl + scf + ret +.noPlayerPikachu + pop hl + and a + ret + +IsThisPartymonStarterPikachu_Box:: ; fce0d (3f:4e0d) + ld hl,wBoxMon1 + ld bc,wBoxMon2 - wBoxMon1 + ld de,wBoxMonOT + jr asm_fce21 + +IsThisPartymonStarterPikachu_Party:: ; fce18 (3f:4e18) +IsThisPartymonStarterPikachu:: + ld hl,wPartyMon1 + ld bc,wPartyMon2 - wPartyMon1 + ld de,wPartyMonOT +asm_fce21: ; fce21 (3f:4e21) + ld a,[wWhichPokemon] + call AddNTimes + ld a,[hl] + cp PIKACHU + jr nz,.notPlayerPikachu + ld bc,wPartyMon1OTID - wPartyMon1 + add hl,bc + ld a,[wPlayerID] + cp [hl] + jr nz,.notPlayerPikachu + inc hl + ld a,[wPlayerID+1] + cp [hl] + jr nz,.notPlayerPikachu + ld h,d + ld l,e + ld a,[wWhichPokemon] + ld bc,NAME_LENGTH + call AddNTimes + ld de,wPlayerName + ld b,$6 +.loop + dec b + jr z,.isPlayerPikachu + ld a,[de] + inc de + cp [hl] + inc hl + jr z,.loop +.notPlayerPikachu + and a + ret +.isPlayerPikachu + scf + ret + +Func_fce5a:: ; fce5a (3f:4e5a) + push de + call IsStarterPikachuInOurParty + pop de + ret nc + ld a,d + cp $80 + ld a,[wPikachuMood] + jr c,.asm_fce6c + cp d + jr c,.asm_fce6e + ret +.asm_fce6c + cp d + ret c +.asm_fce6e + ld a,d + ld [wPikachuMood],a + ret + +Func_fce73:: ; fce73 (3f:4e73) +; function to test if a pokemon is alive? + xor a + ld [wWhichPokemon],a + ld hl,wPartyCount +.loop + inc hl + ld a,[hl] + cp $ff + jr z,.asm_fcea9 + push hl + call IsThisPartymonStarterPikachu_Party + pop hl + jr nc,.asm_fce9e + ld a,[wWhichPokemon] + ld hl,wPartyMon1HP + ld bc,wPartyMon2 - wPartyMon1 + call AddNTimes + ld a,[hli] + or [hl] + ld d,a + inc hl + inc hl + ld a,[hl] + and a + jr nz,.asm_fcea7 + jr .asm_fcea9 +.asm_fce9e + ld a,[wWhichPokemon] + inc a + ld [wWhichPokemon],a + jr .loop +.asm_fcea7 + scf + ret +.asm_fcea9 + and a + ret + +Func_fceab:: ; fceab (3f:4eab) + ld hl,wPartySpecies + ld de,wPartyMon1Moves + ld bc,wPartyMonOT + push hl +.loop + pop hl + ld a,[hli] + push hl + inc a + jr z,.noSurfingPlayerPikachu + cp PIKACHU+1 + jr nz,.curMonNotSurfingPlayerPikachu + ld h,d + ld l,e + push hl + push bc + ld b,NUM_MOVES +.moveSearchLoop + ld a,[hli] + cp SURF + jr z,.foundSurfingPikachu + dec b + jr nz,.moveSearchLoop + pop bc + pop hl + jr .curMonNotSurfingPlayerPikachu +.foundSurfingPikachu + pop bc + pop hl + inc hl + inc hl + inc hl + inc hl + ld a,[wPlayerID] + cp [hl] + jr nz,.curMonNotSurfingPlayerPikachu + inc hl + ld a,[wPlayerID+1] + cp [hl] + jr nz,.curMonNotSurfingPlayerPikachu + push de + push bc + ld hl,wPlayerName + ld d,$6 +.nameCompareLoop + dec d + jr z,.foundSurfingPlayerPikachu + ld a,[bc] + inc bc + cp [hl] + inc hl + jr z,.nameCompareLoop + pop bc + pop de +.curMonNotSurfingPlayerPikachu + ld hl,wPartyMon2 - wPartyMon1 + add hl,de + ld d,h + ld e,l + ld hl,NAME_LENGTH + add hl,bc + ld b,h + ld c,l + jr .loop +.foundSurfingPlayerPikachu + pop bc + pop de + pop hl + scf + ret +.noSurfingPlayerPikachu + pop hl + and a + ret + +Func_fcf0c:: ; fcf0c (3f:4f0c) + dr $fcf0c,$fd001 +Func_fd001:: ; fd001 (3f:5001) + dr $fd001,$fd004 +Func_fd004:: ; fd004 (3f:5004) + dr $fd004,$fd0d0 +Func_fd0d0:: ; fd0d0 (3f:50d0) + dr $fd0d0,$fd252 +Func_fd252: ; fd252 (3f:5252) + dr $fd252,$fd2a1 +Func_fd2a1:: ; fd2a1 (3f:52a1) + dr $fd2a1,$fe66f + +OfficerJennySprite: INCBIN "gfx/sprites/officer_jenny.2bpp" +PikachuSprite: INCBIN "gfx/sprites/pikachu.2bpp" +SandshrewSprite: INCBIN "gfx/sprites/sandshrew.2bpp" +OddishSprite: INCBIN "gfx/sprites/oddish.2bpp" +BulbasaurSprite: INCBIN "gfx/sprites/bulbasaur.2bpp" +JigglypuffSprite: INCBIN "gfx/sprites/jigglypuff.2bpp" +Clefairy2Sprite: INCBIN "gfx/sprites/clefairy2.2bpp" +ChanseySprite: INCBIN "gfx/sprites/chansey.2bpp" +SurfingPikachuSprite: INCBIN "gfx/sprites/surfing_pikachu.2bpp" +JessieSprite: INCBIN "gfx/sprites/jessie.2bpp" +JamesSprite: INCBIN "gfx/sprites/james.2bpp"
\ No newline at end of file |
