mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-23 03:16:20 -05:00
1578 lines
26 KiB
NASM
Executable File
1578 lines
26 KiB
NASM
Executable File
Func_fc4dd:: ; fc4dd (3f:44dd)
|
|
; possibly to test if pika should be out?
|
|
ld a, [wPikachuOverworldStateFlags]
|
|
bit 5, a
|
|
jr nz, .hide ; 3f:44f8
|
|
ld a, [wPikachuOverworldStateFlags]
|
|
bit 7, a
|
|
jr nz, .hide
|
|
call IsStarterPikachuInOurParty
|
|
jr nc, .hide
|
|
ld a, [wWalkBikeSurfState]
|
|
and a
|
|
jr nz, .hide
|
|
scf
|
|
ret
|
|
|
|
.hide
|
|
and a
|
|
ret
|
|
|
|
Func_fc4fa:: ; fc4fa (3f:44fa)
|
|
ld hl, wPikachuOverworldStateFlags
|
|
bit 4, [hl]
|
|
res 4, [hl]
|
|
jr nz, .normal_spawn_state
|
|
call EnablePikachuFollowingPlayer
|
|
call ClearPikachuSpriteStateData
|
|
ld a, $ff
|
|
ld [wPikachuSpriteImageIdx], a
|
|
call ClearPikachuFollowCommandBuffer
|
|
call CalculatePikachuFacingDirection
|
|
ret
|
|
|
|
.normal_spawn_state
|
|
call CalculatePikachuPlacementCoords
|
|
xor a
|
|
ld [wPikachuSpawnState], a
|
|
ld a, [wPlayerFacingDirection]
|
|
ld [wPikachuFacingDirection], a
|
|
ret
|
|
|
|
ClearPikachuSpriteStateData:: ; fc523 (3f:4523)
|
|
ld hl, wPikachuPictureID
|
|
call .clear
|
|
ld hl, wPikachuSpriteStateData2
|
|
.clear
|
|
ld bc, $10
|
|
xor a
|
|
call FillMemory
|
|
ret
|
|
|
|
Func_fc534:: ; fc534 (3f:4534)
|
|
call CalculatePikachuPlacementCoords
|
|
call CalculatePikachuFacingDirection
|
|
xor a
|
|
ld [wPikachuSpawnState], a
|
|
ret
|
|
|
|
CalculatePikachuPlacementCoords:: ; fc53f (3f:453f)
|
|
ld bc, wPikachuPictureID
|
|
ld a, [wYCoord]
|
|
add $4
|
|
ld e, a
|
|
ld a, [wXCoord]
|
|
add $4
|
|
ld d, a
|
|
ld a, [wPikachuSpawnState]
|
|
and a
|
|
jr z, .load_coords
|
|
cp $1
|
|
jr z, .right_of_player
|
|
cp $2
|
|
jr z, .check_player_facing2
|
|
cp $3
|
|
jr z, .load_coords
|
|
cp $4
|
|
jr z, .below_player
|
|
cp $5
|
|
jr z, .above_player
|
|
cp $6
|
|
jr z, .left_of_player
|
|
cp $7
|
|
jr z, .check_player_facing
|
|
jr .right_of_player
|
|
|
|
.check_player_facing
|
|
ld a, [wPlayerFacingDirection]
|
|
and a ; SPRITE_FACING_DOWN
|
|
jr z, .below_player
|
|
cp SPRITE_FACING_UP
|
|
jr z, .above_player
|
|
cp SPRITE_FACING_LEFT
|
|
jr z, .left_of_player
|
|
cp SPRITE_FACING_RIGHT
|
|
jr z, .right_of_player
|
|
.check_player_facing2
|
|
ld a, [wPlayerFacingDirection]
|
|
and a
|
|
jr nz, .check_up
|
|
dec e
|
|
jr .load_coords
|
|
|
|
.check_up
|
|
cp SPRITE_FACING_UP
|
|
jr nz, .check_left
|
|
inc e
|
|
jr .load_coords
|
|
|
|
.check_left
|
|
cp SPRITE_FACING_LEFT
|
|
jr nz, .left_of_player_2
|
|
inc d
|
|
jr .load_coords
|
|
|
|
.left_of_player_2
|
|
dec d
|
|
jr .load_coords
|
|
|
|
.right_of_player
|
|
inc d
|
|
jr .load_coords
|
|
|
|
.left_of_player
|
|
dec d
|
|
jr .load_coords
|
|
|
|
.below_player
|
|
inc e
|
|
jr .load_coords
|
|
|
|
.above_player
|
|
dec e
|
|
jr .load_coords ; useless jr
|
|
.load_coords
|
|
ld hl, wPlayerMapY - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
inc hl
|
|
ld [hl], $fe
|
|
push hl
|
|
ld hl, wd472
|
|
set 5, [hl]
|
|
pop hl
|
|
ret
|
|
|
|
CalculatePikachuFacingDirection:: ; fc5bc (3f:45bc)
|
|
ld a, $49
|
|
ld [wPikachuPictureID], a
|
|
ld a, $ff
|
|
ld [wPikachuSpriteImageIdx], a
|
|
ld a, [wPikachuSpawnState]
|
|
and a
|
|
jr z, .copy_player_facing
|
|
cp $1
|
|
jr z, .copy_player_facing
|
|
cp $3
|
|
jr z, .force_facing_down
|
|
cp $4
|
|
jr z, .copy_player_facing
|
|
cp $6
|
|
jr z, .copy_player_facing
|
|
cp $7
|
|
jr z, .face_the_other_way
|
|
call ComputePikachuFacingDirection
|
|
ret
|
|
|
|
.copy_player_facing
|
|
ld a, [wPlayerFacingDirection]
|
|
ld [wPikachuFacingDirection], a
|
|
ret
|
|
|
|
.force_facing_down
|
|
ld a, SPRITE_FACING_DOWN
|
|
ld [wPikachuFacingDirection], a
|
|
ret
|
|
|
|
.face_the_other_way
|
|
ld a, [wPlayerFacingDirection]
|
|
xor $4
|
|
ld [wPikachuFacingDirection], a
|
|
ret
|
|
|
|
CalculatePikachuSpawnState1:: ; fc5fa (3f:45fa)
|
|
ld a, [wCurMap]
|
|
cp OAKS_LAB
|
|
jr z, .oaks_lab
|
|
cp ROUTE_22_GATE
|
|
jr z, .route_22_gate
|
|
cp MT_MOON_2
|
|
jr z, .mt_moon_2
|
|
cp ROCK_TUNNEL_1
|
|
jr z, .rock_tunnel_1
|
|
ld a, [wCurMap]
|
|
ld hl, Pointer_fc64b
|
|
call Pikachu_IsInArray ; similar to IsInArray, but not the same
|
|
jr c, .map_list_1
|
|
ld a, [wCurMap]
|
|
ld hl, Pointer_fc653
|
|
call Pikachu_IsInArray
|
|
jr nc, .not_map_list_2
|
|
ld a, [wPlayerFacingDirection]
|
|
and a
|
|
jr nz, .not_map_list_2
|
|
ld a, $3
|
|
jr .load
|
|
|
|
.route_22_gate
|
|
ld a, [wPlayerFacingDirection]
|
|
and a
|
|
jr z, .rock_tunnel_1
|
|
jr .not_map_list_2
|
|
|
|
.mt_moon_2
|
|
ld a, $3
|
|
jr .load
|
|
|
|
.map_list_1
|
|
ld a, $4
|
|
jr .load
|
|
|
|
.oaks_lab
|
|
ld a, $6
|
|
jr .load
|
|
|
|
.not_map_list_2
|
|
ld a, $1
|
|
jr .load
|
|
|
|
.rock_tunnel_1
|
|
ld a, $3
|
|
.load
|
|
ld [wPikachuSpawnState], a
|
|
ret
|
|
|
|
Pointer_fc64b:: ; fc64b (3f:464b)
|
|
db VICTORY_ROAD_2
|
|
db ROUTE_7_GATE
|
|
db ROUTE_8_GATE
|
|
db ROUTE_16_GATE_1F
|
|
db ROUTE_18_GATE_1F
|
|
db ROUTE_15_GATE_1F
|
|
db ROUTE_11_GATE_1F
|
|
db $ff
|
|
|
|
Pointer_fc653:: ; fc653 (3f:4653)
|
|
db VIRIDIAN_FOREST_EXIT
|
|
db CERULEAN_HOUSE_2
|
|
db TRASHED_HOUSE
|
|
db VERMILION_DOCK
|
|
db CELADON_MANSION_1
|
|
db ROUTE_2_GATE
|
|
db FUCHSIA_HOUSE_3
|
|
db $ff
|
|
|
|
CalculatePikachuSpawnState2:: ; fc65b (3f:465b)
|
|
ld a, [wCurMap]
|
|
cp VIRIDIAN_FOREST_EXIT
|
|
jr z, .viridian_forest_exit
|
|
cp VIRIDIAN_FOREST_ENTRANCE
|
|
jr z, .viridian_forest_entrance
|
|
ld a, [wCurMap]
|
|
ld hl, Pointer_fc68e
|
|
call Pikachu_IsInArray
|
|
jr c, .in_array
|
|
jr .not_in_array
|
|
|
|
.viridian_forest_exit
|
|
ld a, [wPlayerFacingDirection]
|
|
cp SPRITE_FACING_UP
|
|
jr z, .in_array
|
|
jr .not_in_array
|
|
|
|
.viridian_forest_entrance
|
|
ld a, [wPlayerFacingDirection]
|
|
and a ; SPRITE_FACING_DOWN
|
|
jr z, .not_in_array
|
|
jr .in_array
|
|
|
|
.not_in_array
|
|
ld a, $0
|
|
jr .load_spawn_state
|
|
|
|
.in_array
|
|
ld a, $1
|
|
.load_spawn_state
|
|
ld [wPikachuSpawnState], a
|
|
ret
|
|
|
|
Pointer_fc68e:: ; fc68e (3f:468e)
|
|
db VIRIDIAN_FOREST
|
|
db SAFARI_ZONE_REST_HOUSE_1
|
|
db SAFARI_ZONE_REST_HOUSE_2
|
|
db SAFARI_ZONE_REST_HOUSE_3
|
|
db SAFARI_ZONE_REST_HOUSE_4
|
|
db SAFARI_ZONE_SECRET_HOUSE
|
|
db SILPH_CO_ELEVATOR
|
|
db CELADON_MART_ELEVATOR
|
|
db CINNABAR_LAB_2
|
|
db CINNABAR_LAB_3
|
|
db CINNABAR_LAB_4
|
|
db $ff
|
|
|
|
CalculatePikachuSpawnState3:: ; 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, [wPlayerFacingDirection]
|
|
cp SPRITE_FACING_UP
|
|
jr z, .asm_fc6b9
|
|
jr .asm_fc6bd
|
|
|
|
.asm_fc6b0
|
|
ld a, [wPlayerFacingDirection]
|
|
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 [wPikachuSpawnState], a
|
|
ret
|
|
|
|
SetPikachuOverworldStateFlag2:: ; fc6c5 (3f:46c5)
|
|
push hl
|
|
ld hl, wPikachuOverworldStateFlags
|
|
set 2, [hl]
|
|
pop hl
|
|
ret
|
|
|
|
ResetPikachuOverworldStateFlag2:: ; fc6cd (3f:46cd)
|
|
push hl
|
|
ld hl, wPikachuOverworldStateFlags
|
|
res 2, [hl]
|
|
pop hl
|
|
ret
|
|
|
|
SpawnPikachu_:: ; fc6d5 (3f:46d5)
|
|
call ResetPikachuOverworldStateFlag2
|
|
call Func_fc727
|
|
ret nc
|
|
|
|
push bc
|
|
call WillPikachuSpawnOnTheScreen
|
|
pop bc
|
|
ret c
|
|
|
|
ld bc, wPikachuPictureID
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
bit 7, [hl]
|
|
jp nz, asm_fc745
|
|
ld a, [wFontLoaded]
|
|
bit 0, a
|
|
jp nz, asm_fc76a
|
|
call CheckPikachuFollowingPlayer
|
|
jp nz, asm_fc76a
|
|
ld a, [hl]
|
|
and $7f
|
|
cp $a
|
|
jr c, .valid
|
|
xor a
|
|
.valid
|
|
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, .dont_spawn
|
|
ld a, [wPikachuMovementStatus]
|
|
and a
|
|
jr nz, .already_spawned
|
|
push bc
|
|
push hl
|
|
call Func_fc534
|
|
pop hl
|
|
pop bc
|
|
.already_spawned
|
|
scf
|
|
ret
|
|
|
|
.dont_spawn
|
|
ld hl, wPikachuSpriteImageIdx
|
|
ld [hl], $ff
|
|
dec hl
|
|
ld [hl], $0
|
|
xor a
|
|
ret
|
|
|
|
asm_fc745: ; fc745 (3f:4745)
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
res 7, [hl]
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
call CheckPikachuFollowingPlayer
|
|
jr nz, .asm_fc75f
|
|
ld a, [wPlayerFacingDirection]
|
|
xor $4
|
|
ld hl, wSprite01FacingDirection - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
.asm_fc75f
|
|
xor a
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hli], a
|
|
ld [hl], a
|
|
call UpdatePikachuWalkingSprite
|
|
ret
|
|
|
|
asm_fc76a: ; fc76a (3f:476a)
|
|
xor a
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hli], a
|
|
ld [hl], a
|
|
call UpdatePikachuWalkingSprite
|
|
call Func_fc82e
|
|
jr c, .asm_fc783
|
|
push bc
|
|
callab InitializeSpriteScreenPosition
|
|
pop bc
|
|
.asm_fc783
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $1
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $0
|
|
call RefreshPikachuFollow
|
|
ret
|
|
|
|
Func_fc793: ; fc793 (3f:4793)
|
|
call RefreshPikachuFollow
|
|
push bc
|
|
callab InitializeSpriteScreenPosition
|
|
pop bc
|
|
ld hl, wSprite01SpriteImageIdx - wSprite01SpriteStateData1
|
|
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, wSprite01FacingDirection - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, wSprite01XStepVector - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
dec hl
|
|
dec hl
|
|
ld a, [de]
|
|
ld [hl], a
|
|
inc de
|
|
ld a, [de]
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
cp $4
|
|
jp z, Func_fca0a
|
|
call AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer
|
|
jp c, FastPikachuFollow
|
|
jp NormalPikachuFollow
|
|
|
|
Pointer_fc7e3: ; fc7e3 (3f:47e3)
|
|
db 0, 0
|
|
db 1, 3
|
|
db 4, 0
|
|
db -1, 3
|
|
db 8, -1
|
|
db 0, 3
|
|
db 12, 1
|
|
db 0, 3
|
|
db 0, 0
|
|
db 1, 4
|
|
db 4, 0
|
|
db -1, 4
|
|
db 8, -1
|
|
db 0, 4
|
|
db 12, 1
|
|
db 0, 4
|
|
|
|
Func_fc803: ; fc803 (3f:4803)
|
|
call Func_fcae2
|
|
ret c
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
jr nz, .asm_fc823
|
|
push hl
|
|
call GetPikachuFollowCommand
|
|
pop hl
|
|
cp $5
|
|
jr nc, Func_fc842
|
|
ld [hl], $20
|
|
call Random
|
|
and $c
|
|
ld hl, wSprite01FacingDirection - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
.asm_fc823
|
|
xor a
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hli], a
|
|
ld [hl], a
|
|
call UpdatePikachuWalkingSprite
|
|
ret
|
|
|
|
Func_fc82e: ; fc82e (3f:482e)
|
|
ld a, [wWalkCounter]
|
|
and a
|
|
ret z
|
|
scf
|
|
ret
|
|
|
|
Func_fc835: ; fc835 (3f:4835)
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $10
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
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, wSprite01FacingDirection - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $6
|
|
xor a
|
|
ld [wd432], a
|
|
ld [wd433], a
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
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 SetPikachuOverworldStateFlag2
|
|
ld hl, wSprite01YPixels - wSprite01SpriteStateData1
|
|
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, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
dec a
|
|
add a
|
|
add Pointer_fc8d6 % $100
|
|
ld l, a
|
|
ld a, Pointer_fc8d6 / $100
|
|
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, wSprite01YPixels - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], e
|
|
inc hl
|
|
inc hl
|
|
ld [hl], d
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
ret nz
|
|
jp Func_fc835
|
|
|
|
Func_fc8c7: ; fc8c7 (3f:48c7)
|
|
ld hl, wSprite01YPixels - wSprite01SpriteStateData1
|
|
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
|
|
db -2, 1
|
|
db -4, 2
|
|
db -2, 3
|
|
db 0, 4
|
|
db -2, 3
|
|
db -4, 2
|
|
db -2, 1
|
|
db 0, 0
|
|
db -2, -1
|
|
db -4, -2
|
|
db -2, -3
|
|
db 0, -4
|
|
db -2, -3
|
|
db -4, -2
|
|
db -2, -1
|
|
db 0, 0
|
|
|
|
Func_fc8f8: ; fc8f8 (3f:48f8)
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $7
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $30
|
|
asm_fc904: ; fc904 (3f:4904)
|
|
call Func_fc82e
|
|
jp c, Func_fc835
|
|
call SetPikachuOverworldStateFlag2
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
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 UpdatePikachuWalkingSprite
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
ret nz
|
|
jp Func_fc835
|
|
|
|
Func_fc92b: ; fc92b (3f:492b)
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $20
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $8
|
|
asm_fc937: ; fc937 (3f:4937)
|
|
call Func_fc82e
|
|
jp c, Func_fc835
|
|
call SetPikachuOverworldStateFlag2
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
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 UpdatePikachuWalkingSprite
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
ret nz
|
|
jp Func_fc835
|
|
|
|
Func_fc95d: ; fc95d (3f:495d)
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $20
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $9
|
|
asm_fc969: ; fc969 (3f:4969)
|
|
call Func_fc82e
|
|
jp c, Func_fc835
|
|
call SetPikachuOverworldStateFlag2
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
inc a
|
|
cp $8
|
|
ld [hl], a
|
|
jr nz, .asm_fc988
|
|
xor a
|
|
ld [hl], a
|
|
ld hl, wSprite01FacingDirection - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call Func_fc994
|
|
ld [hl], a
|
|
.asm_fc988
|
|
call UpdatePikachuWalkingSprite
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
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:
|
|
|
|
NormalPikachuFollow: ; fc9b4 (3f:49b4)
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $8
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $3
|
|
call AddPikachuStepVector
|
|
asm_fc9c3: ; fc9c3 (3f:49c3)
|
|
call TryDoubleAddPikachuStepVectorToScreenPixelCoords
|
|
call GetPikachuWalkingAnimationSpeed
|
|
call UpdatePikachuWalkingSprite
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
ret nz
|
|
call ResetPikachuStepVector
|
|
call ComputePikachuFacingDirection
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $1
|
|
ret
|
|
|
|
FastPikachuFollow: ; fc9df (3f:49df)
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $4
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $5
|
|
call AddPikachuStepVector
|
|
asm_fc9ee: ; fc9ee (3f:49ee)
|
|
call DoubleAddPikachuStepVectorToScreenPixelCoords
|
|
call GetPikachuWalkingAnimationSpeed
|
|
call UpdatePikachuWalkingSprite
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
ret nz
|
|
call ResetPikachuStepVector
|
|
call ComputePikachuFacingDirection
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $1
|
|
ret
|
|
|
|
Func_fca0a: ; fca0a (3f:4a0a)
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $8
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $4
|
|
call AddPikachuStepVector
|
|
call AddPikachuStepVector
|
|
asm_fca1c: ; fca1c (3f:4a1c)
|
|
call DoubleAddPikachuStepVectorToScreenPixelCoords
|
|
call GetPikachuWalkingAnimationSpeed
|
|
call UpdatePikachuWalkingSprite
|
|
ld hl, wSprite01WalkAnimationCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
dec [hl]
|
|
ret nz
|
|
call ResetPikachuStepVector
|
|
call ComputePikachuFacingDirection
|
|
ld hl, wSprite01MovementStatus - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $1
|
|
ret
|
|
|
|
AddPikachuStepVector: ; fca38 (3f:4a38)
|
|
ld hl, wSprite01YStepVector - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld e, [hl]
|
|
inc hl
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, wSprite01MapY - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add e
|
|
ld [hli], a
|
|
ld a, [hl]
|
|
add d
|
|
ld [hl], a
|
|
ret
|
|
|
|
TryDoubleAddPikachuStepVectorToScreenPixelCoords: ; fca4b (3f:4a4b)
|
|
ld a, [wWalkBikeSurfState]
|
|
cp $1 ; biking
|
|
jr nz, AddPikachuStepVectorToScreenPixelCoords
|
|
ld a, [wd736]
|
|
bit 6, a
|
|
jr nz, AddPikachuStepVectorToScreenPixelCoords
|
|
DoubleAddPikachuStepVectorToScreenPixelCoords: ; fca59 (3f:4a59)
|
|
ld hl, wSprite01YStepVector - wSprite01SpriteStateData1
|
|
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
|
|
|
|
AddPikachuStepVectorToScreenPixelCoords: ; fca68 (3f:4a68)
|
|
ld hl, wSprite01YStepVector - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hli]
|
|
add a
|
|
add [hl]
|
|
ld [hli], a
|
|
ld a, [hli]
|
|
add a
|
|
add [hl]
|
|
ld [hli], a
|
|
ret
|
|
|
|
ResetPikachuStepVector: ; fca75 (3f:4a75)
|
|
ld hl, wSprite01YStepVector - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
xor a
|
|
ld [hli], a
|
|
inc hl
|
|
ld [hl], a
|
|
ret
|
|
|
|
GetPikachuWalkingAnimationSpeed: ; fca7e (3f:4a7e)
|
|
call ComparePikachuHappinessTo80
|
|
ld d, $2
|
|
jr nc, .happy
|
|
ld d, $5
|
|
.happy
|
|
ld hl, wSprite01IntraAnimFrameCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
inc a
|
|
cp d
|
|
jr nz, .dont_reset
|
|
xor a
|
|
.dont_reset
|
|
ld [hli], a
|
|
ret nz
|
|
ld a, [hl]
|
|
inc a
|
|
and $3
|
|
ld [hl], a
|
|
ret
|
|
|
|
UpdatePikachuWalkingSprite: ; fca99 (3f:4a99)
|
|
ld a, [wPikachuOverworldStateFlags]
|
|
bit 3, a
|
|
jr nz, .uninitialized
|
|
ld hl, wSprite01SpriteImageBaseOffset - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
dec a
|
|
swap a
|
|
ld d, a
|
|
ld a, [wd736]
|
|
bit 7, a
|
|
jr nz, .copy_player
|
|
ld hl, wSprite01FacingDirection - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
or d
|
|
ld d, a
|
|
ld a, [wFontLoaded]
|
|
bit 0, a
|
|
jr z, .normal_get_sprite_index
|
|
call Func_fcae2
|
|
ret c
|
|
jr .load_sprite_index
|
|
|
|
.normal_get_sprite_index
|
|
ld hl, wSprite01AnimFrameCounter - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, d
|
|
or [hl]
|
|
ld d, a
|
|
.load_sprite_index
|
|
ld hl, wSprite01SpriteImageIdx - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], d
|
|
ret
|
|
|
|
.uninitialized
|
|
ld hl, wSprite01SpriteImageIdx - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $ff
|
|
ret
|
|
|
|
.copy_player
|
|
ld a, [wPlayerSpriteImageIdx]
|
|
and $f
|
|
or d
|
|
ld [wPikachuSpriteImageIdx], a
|
|
ret
|
|
|
|
Func_fcae2: ; fcae2 (3f:4ae2)
|
|
ld hl, wSprite01MapY - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld a, [wYCoord]
|
|
add $4
|
|
cp [hl]
|
|
jr nz, .on_screen
|
|
inc hl
|
|
ld a, [wXCoord]
|
|
add $4
|
|
cp [hl]
|
|
jr nz, .on_screen
|
|
ld hl, wSprite01SpriteImageIdx - wSprite01SpriteStateData1
|
|
add hl, bc
|
|
ld [hl], $ff
|
|
scf
|
|
ret
|
|
|
|
.on_screen
|
|
and a
|
|
ret
|
|
|
|
IsPikachuRightNextToPlayer: ; fcb01 (3f:4b01)
|
|
push bc
|
|
push de
|
|
push hl
|
|
ld bc, wPikachuPictureID
|
|
ld a, [wXCoord]
|
|
add $4
|
|
ld d, a
|
|
ld a, [wYCoord]
|
|
add $4
|
|
ld e, a
|
|
ld hl, wPlayerMapY - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
sub e
|
|
and a
|
|
jr z, .equal
|
|
cp $ff
|
|
jr z, .one_away
|
|
cp $1
|
|
jr z, .one_away
|
|
jr .bad
|
|
|
|
.one_away
|
|
ld hl, wPlayerMapX - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
sub d
|
|
jr z, .good
|
|
jr .bad
|
|
|
|
.equal
|
|
ld hl, wPlayerMapX - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
sub d
|
|
cp $ff
|
|
jr z, .good
|
|
cp $1
|
|
jr z, .good
|
|
and a
|
|
jr z, .good
|
|
jr .bad
|
|
|
|
.good
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
scf
|
|
ret
|
|
|
|
.bad
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
xor a
|
|
ret
|
|
|
|
GetPikachuFacingDirectionAndReturnToE: ; fcb4d (3f:4b4d)
|
|
call GetPikachuFacingDirection
|
|
ld e, a
|
|
ret
|
|
|
|
GetPikachuFacingDirection: ; fcb52 (3f:4b52)
|
|
ld bc, wPikachuPictureID
|
|
ld a, [wXCoord]
|
|
add $4
|
|
ld d, a
|
|
ld a, [wYCoord]
|
|
add $4
|
|
ld e, a
|
|
ld hl, wPlayerMapY - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp e
|
|
jr z, .asm_fcb71
|
|
jr nc, .asm_fcb6e
|
|
ld a, SPRITE_FACING_UP
|
|
ret
|
|
|
|
.asm_fcb6e
|
|
ld a, SPRITE_FACING_DOWN
|
|
ret
|
|
|
|
.asm_fcb71
|
|
ld hl, wPlayerMapX - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp d
|
|
jr z, .asm_fcb81
|
|
jr nc, .asm_fcb7e
|
|
ld a, SPRITE_FACING_LEFT
|
|
ret
|
|
|
|
.asm_fcb7e
|
|
ld a, SPRITE_FACING_RIGHT
|
|
ret
|
|
|
|
.asm_fcb81
|
|
ld a, $ff ; standing
|
|
ret
|
|
|
|
ClearPikachuFollowCommandBuffer: ; fcb84 (3f:4b84)
|
|
push bc
|
|
ld hl, wPikachuFollowCommandBufferSize
|
|
ld [hl], $ff
|
|
inc hl
|
|
ld bc, $10
|
|
xor a
|
|
call FillMemory
|
|
pop bc
|
|
ret
|
|
|
|
AppendPikachuFollowCommandToBuffer: ; fcb94 (3f:4b94)
|
|
ld hl, wPikachuFollowCommandBufferSize
|
|
inc [hl]
|
|
ld e, [hl]
|
|
ld d, 0
|
|
ld hl, wPikachuFollowCommandBuffer
|
|
add hl, de
|
|
ld [hl], a
|
|
ret
|
|
|
|
RefreshPikachuFollow: ; fcba1 (3f:4ba1)
|
|
call ClearPikachuFollowCommandBuffer
|
|
call ComputePikachuFollowCommand
|
|
ret c
|
|
call AppendPikachuFollowCommandToBuffer
|
|
ret
|
|
|
|
ComputePikachuFollowCommand: ; fcbac (3f:4bac)
|
|
ld bc, wPikachuPictureID
|
|
ld hl, wPlayerMapY - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [wYCoord]
|
|
add $4
|
|
sub [hl]
|
|
jr z, .checkXCoord
|
|
jr c, .pikaAbovePlayer
|
|
call CheckAbsoluteValueLessThan2
|
|
jr c, .return1
|
|
ld a, $5
|
|
and a
|
|
ret
|
|
|
|
.return1
|
|
ld a, $1
|
|
and a
|
|
ret
|
|
|
|
.pikaAbovePlayer
|
|
call CheckAbsoluteValueLessThan2
|
|
jr c, .return2
|
|
ld a, $6
|
|
and a
|
|
ret
|
|
|
|
.return2
|
|
ld a, $2
|
|
and a
|
|
ret
|
|
|
|
.checkXCoord
|
|
ld hl, wPlayerMapX - wPlayerSpriteStateData1
|
|
add hl, bc
|
|
ld a, [wXCoord]
|
|
add $4
|
|
sub [hl]
|
|
jr z, .pikachuOnTopOfPlayer
|
|
jr c, .pikaToLeftOfPlayer
|
|
call CheckAbsoluteValueLessThan2
|
|
jr c, .return4
|
|
ld a, $8
|
|
and a
|
|
ret
|
|
|
|
.return4
|
|
ld a, $4
|
|
and a
|
|
ret
|
|
|
|
.pikaToLeftOfPlayer
|
|
call CheckAbsoluteValueLessThan2
|
|
jr c, .return3
|
|
ld a, $7
|
|
and a
|
|
ret
|
|
|
|
.return3
|
|
ld a, $3
|
|
and a
|
|
ret
|
|
|
|
.pikachuOnTopOfPlayer
|
|
scf
|
|
ret
|
|
|
|
CheckAbsoluteValueLessThan2: ; fcc01 (3f:4c01)
|
|
jr nc, .positive
|
|
cpl
|
|
inc a
|
|
.positive
|
|
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 AppendPikachuFollowCommandToBuffer
|
|
ret
|
|
|
|
.asm_fcc1b
|
|
call Func_fcc64
|
|
ret c
|
|
call AppendPikachuFollowCommandToBuffer
|
|
ret
|
|
|
|
Func_fcc23: ; fcc23 (3f:4c28)
|
|
ld a, [wPikachuOverworldStateFlags]
|
|
bit 5, a
|
|
jr nz, .asm_fcc40
|
|
ld a, [wPikachuOverworldStateFlags]
|
|
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, wPikachuOverworldStateFlags
|
|
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, wPikachuFollowCommandBufferSize
|
|
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, wPikachuFollowCommandBuffer
|
|
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
|
|
|
|
ComputePikachuFacingDirection:: ; fccb2 (3f:4cb2)
|
|
call GetPikachuFollowCommandIfBufferSizeNonzero
|
|
and a
|
|
jr z, .check_y
|
|
dec a
|
|
and $3
|
|
add a
|
|
add a
|
|
jr .load
|
|
|
|
.check_y
|
|
ld a, [wYCoord]
|
|
add $4
|
|
ld d, a
|
|
ld a, [wXCoord]
|
|
add $4
|
|
ld e, a
|
|
ld a, [wPikachuMapY]
|
|
cp d
|
|
jr z, .check_x
|
|
ld a, SPRITE_FACING_DOWN
|
|
jr c, .load
|
|
ld a, SPRITE_FACING_UP
|
|
jr .load
|
|
|
|
.check_x
|
|
ld a, [wPikachuMapX]
|
|
cp e
|
|
jr z, .copy_from_player
|
|
ld a, SPRITE_FACING_RIGHT
|
|
jr c, .load
|
|
ld a, SPRITE_FACING_LEFT
|
|
jr .load
|
|
|
|
.copy_from_player
|
|
ld a, [wPlayerFacingDirection]
|
|
.load
|
|
ld [wPikachuFacingDirection], a
|
|
ret
|
|
|
|
GetPikachuFollowCommand: ; fccee (3f:4cee)
|
|
ld hl, wPikachuFollowCommandBufferSize
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .asm_fccff
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wPikachuFollowCommandBuffer
|
|
add hl, de
|
|
ld a, [hl]
|
|
ret
|
|
|
|
.asm_fccff
|
|
xor a
|
|
ret
|
|
|
|
GetPikachuFollowCommandIfBufferSizeNonzero: ; fcd01 (3f:4d01)
|
|
ld hl, wPikachuFollowCommandBufferSize
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .default
|
|
and a
|
|
jr z, .default
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wPikachuFollowCommandBuffer
|
|
add hl, de
|
|
ld a, [hl]
|
|
ret
|
|
|
|
.default
|
|
xor a
|
|
ret
|
|
|
|
AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer: ; fcd17 (3f:4d17)
|
|
ld a, [wPikachuFollowCommandBufferSize]
|
|
cp $ff
|
|
ret z
|
|
cp $2
|
|
jr nc, .set_carry
|
|
and a
|
|
ret
|
|
|
|
.set_carry
|
|
scf
|
|
ret
|
|
|
|
WillPikachuSpawnOnTheScreen: ; fcd25 (3f:4d25)
|
|
ld h, wSpriteStateData2 / $100
|
|
ld a, [H_CURRENTSPRITEOFFSET] ; If we're here, this can only be $f0
|
|
add wPikachuMapY - wPikachuSpriteStateData2
|
|
ld l, a
|
|
ld b, [hl]
|
|
ld a, [wYCoord]
|
|
cp b
|
|
jr z, .same_y
|
|
jr nc, .not_on_screen
|
|
add (SCREEN_HEIGHT / 2) - 1
|
|
cp b
|
|
jr c, .not_on_screen
|
|
.same_y
|
|
inc l
|
|
ld b, [hl]
|
|
ld a, [wXCoord]
|
|
cp b
|
|
jr z, .same_x
|
|
jr nc, .not_on_screen
|
|
add (SCREEN_WIDTH / 2) - 1
|
|
cp b
|
|
jr c, .not_on_screen
|
|
.same_x
|
|
call .GetNPCCurrentTile
|
|
ld d, $60
|
|
ld a, [hli]
|
|
ld e, a
|
|
cp d
|
|
jr nc, .not_on_screen
|
|
ld a, [hld]
|
|
cp d
|
|
jr nc, .not_on_screen
|
|
ld bc, -20
|
|
add hl, bc
|
|
ld a, [hli]
|
|
cp d
|
|
jr nc, .not_on_screen
|
|
ld a, [hl]
|
|
cp d
|
|
jr c, .on_screen
|
|
.not_on_screen
|
|
ld h, wSpriteStateData1 / $100
|
|
ld a, [H_CURRENTSPRITEOFFSET]
|
|
add wPikachuSpriteImageIdx - wPikachuSpriteStateData1
|
|
ld l, a
|
|
ld [hl], $ff
|
|
scf
|
|
jr .return
|
|
|
|
.on_screen
|
|
ld h, wSpriteStateData2 / $100
|
|
ld a, [H_CURRENTSPRITEOFFSET]
|
|
add wPikachuGrassPriority - wPikachuSpriteStateData2
|
|
ld l, a
|
|
ld a, [wGrassTile]
|
|
cp e
|
|
ld a, $0
|
|
jr nz, .priority
|
|
ld a, $80
|
|
.priority
|
|
ld [hl], a
|
|
and a
|
|
.return
|
|
ret
|
|
|
|
.GetNPCCurrentTile: ; fcd83 (3f:4d83)
|
|
ld h, wSpriteStateData1 / $100
|
|
ld a, [H_CURRENTSPRITEOFFSET]
|
|
add wPikachuYPixels - wPikachuSpriteStateData1
|
|
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
|
|
|
|
ComparePikachuHappinessTo80: ; fcdad (3f:4dad)
|
|
; preserves a and bc
|
|
push bc
|
|
push af
|
|
ld a, [wPikachuHappiness]
|
|
cp 80
|
|
pop bc
|
|
ld a, b
|
|
pop bc
|
|
ret
|