aboutsummaryrefslogtreecommitdiffstats
path: root/engine/bank3f.asm
diff options
context:
space:
mode:
authorluckytyphlosion <alan.rj.huang@gmail.com>2015-12-31 15:24:54 -0500
committerluckytyphlosion <alan.rj.huang@gmail.com>2015-12-31 15:24:54 -0500
commit94eee4e89ef5c0857599c2951befee9dc709ae85 (patch)
tree463218b7b459d0f1d90f0e488cd026e7a2da27dc /engine/bank3f.asm
parentBankF documentation from HasMonFainted to Func_3d536 (diff)
downloadpokeyellow-94eee4e89ef5c0857599c2951befee9dc709ae85.tar.gz
pokeyellow-94eee4e89ef5c0857599c2951befee9dc709ae85.tar.xz
pokeyellow-94eee4e89ef5c0857599c2951befee9dc709ae85.zip
Cleanup with yellow-exclusive banks
Also introduce charmap for $ec (unfilled menu arrow cursor)
Diffstat (limited to 'engine/bank3f.asm')
-rw-r--r--engine/bank3f.asm1750
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