aboutsummaryrefslogtreecommitdiffstats
path: root/engine/pikachu_follow.asm
diff options
context:
space:
mode:
authorRangi <remy.oukaour+rangi42@gmail.com>2020-11-04 15:16:20 -0500
committerRangi <remy.oukaour+rangi42@gmail.com>2020-11-04 19:44:31 -0500
commitaae999f72bd81a3156c7e00da4ebf499f52da5a6 (patch)
tree32fef70a31af3a0b5ad2b0d34042c312574fb42d /engine/pikachu_follow.asm
parentMerge branch 'master' of https://github.com/pret/pokered (diff)
downloadpokeyellow-aae999f72bd81a3156c7e00da4ebf499f52da5a6.tar.gz
pokeyellow-aae999f72bd81a3156c7e00da4ebf499f52da5a6.tar.xz
pokeyellow-aae999f72bd81a3156c7e00da4ebf499f52da5a6.zip
Start reorganizing pokeyellow
Diffstat (limited to 'engine/pikachu_follow.asm')
-rwxr-xr-xengine/pikachu_follow.asm1578
1 files changed, 0 insertions, 1578 deletions
diff --git a/engine/pikachu_follow.asm b/engine/pikachu_follow.asm
deleted file mode 100755
index fd2fbc47..00000000
--- a/engine/pikachu_follow.asm
+++ /dev/null
@@ -1,1578 +0,0 @@
-ShouldPikachuSpawn::
-; possibly to test if pika should be out?
- ld a, [wPikachuOverworldStateFlags]
- bit 5, a
- jr nz, .hide
- 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
-
-SchedulePikachuSpawnForAfterText::
- ld hl, wPikachuOverworldStateFlags
- bit 4, [hl]
- res 4, [hl]
- jr nz, .normal_spawn_state
- call EnablePikachuFollowingPlayer
- call ClearPikachuSpriteStateData
- ld a, $ff
- ld [wSpritePikachuStateData1ImageIndex], a
- call ClearPikachuFollowCommandBuffer
- call CalculatePikachuFacingDirection
- ret
-
-.normal_spawn_state
- call CalculatePikachuPlacementCoords
- xor a
- ld [wPikachuSpawnState], a
- ld a, [wSpritePlayerStateData1FacingDirection]
- ld [wSpritePikachuStateData1FacingDirection], a
- ret
-
-ClearPikachuSpriteStateData::
- ld hl, wSpritePikachuStateData1PictureID
- call .clear
- ld hl, wSpritePikachuStateData2
-.clear
- ld bc, $10
- xor a
- call FillMemory
- ret
-
-CalculatePikachuSpawnCoordsAndFacing::
- call CalculatePikachuPlacementCoords
- call CalculatePikachuFacingDirection
- xor a
- ld [wPikachuSpawnState], a
- ret
-
-CalculatePikachuPlacementCoords::
- ld bc, wSpritePikachuStateData1PictureID
- 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, [wSpritePlayerStateData1FacingDirection]
- 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, [wSpritePlayerStateData1FacingDirection]
- 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, wSpritePlayerStateData2MapY - wSpritePlayerStateData1
- 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::
- ld a, $49
- ld [wSpritePikachuStateData1PictureID], a
- ld a, $ff
- ld [wSpritePikachuStateData1ImageIndex], 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, [wSpritePlayerStateData1FacingDirection]
- ld [wSpritePikachuStateData1FacingDirection], a
- ret
-
-.force_facing_down
- ld a, SPRITE_FACING_DOWN
- ld [wSpritePikachuStateData1FacingDirection], a
- ret
-
-.face_the_other_way
- ld a, [wSpritePlayerStateData1FacingDirection]
- xor $4
- ld [wSpritePikachuStateData1FacingDirection], a
- ret
-
-SetPikachuSpawnOutside::
- ld a, [wCurMap]
- cp OAKS_LAB
- jr z, .oaks_lab
- cp ROUTE_22_GATE
- jr z, .route_22_gate
- cp MT_MOON_B1F
- jr z, .mt_moon_2
- cp ROCK_TUNNEL_1F
- 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, [wSpritePlayerStateData1FacingDirection]
- and a
- jr nz, .not_map_list_2
- ld a, $3
- jr .load
-
-.route_22_gate
- ld a, [wSpritePlayerStateData1FacingDirection]
- 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::
- db VICTORY_ROAD_2F
- 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::
- db VIRIDIAN_FOREST_NORTH_GATE
- db CERULEAN_BADGE_HOUSE
- db CERULEAN_TRASHED_HOUSE
- db VERMILION_DOCK
- db CELADON_MANSION_1F
- db ROUTE_2_GATE
- db FUCHSIA_GOOD_ROD_HOUSE
- db $ff
-
-SetPikachuSpawnWarpPad::
- ld a, [wCurMap]
- cp VIRIDIAN_FOREST_NORTH_GATE
- jr z, .viridian_forest_exit
- cp VIRIDIAN_FOREST_SOUTH_GATE
- 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, [wSpritePlayerStateData1FacingDirection]
- cp SPRITE_FACING_UP
- jr z, .in_array
- jr .not_in_array
-
-.viridian_forest_entrance
- ld a, [wSpritePlayerStateData1FacingDirection]
- 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::
- db VIRIDIAN_FOREST
- db SAFARI_ZONE_CENTER_REST_HOUSE
- db SAFARI_ZONE_WEST_REST_HOUSE
- db SAFARI_ZONE_EAST_REST_HOUSE
- db SAFARI_ZONE_NORTH_REST_HOUSE
- db SAFARI_ZONE_SECRET_HOUSE
- db SILPH_CO_ELEVATOR
- db CELADON_MART_ELEVATOR
- db CINNABAR_LAB_TRADE_ROOM
- db CINNABAR_LAB_METRONOME_ROOM
- db CINNABAR_LAB_FOSSIL_ROOM
- db $ff
-
-SetPikachuSpawnBackOutside::
- 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, [wSpritePlayerStateData1FacingDirection]
- cp SPRITE_FACING_UP
- jr z, .asm_fc6b9
- jr .asm_fc6bd
-
-.asm_fc6b0
- ld a, [wSpritePlayerStateData1FacingDirection]
- 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::
- push hl
- ld hl, wPikachuOverworldStateFlags
- set 2, [hl]
- pop hl
- ret
-
-ResetPikachuOverworldStateFlag2::
- push hl
- ld hl, wPikachuOverworldStateFlags
- res 2, [hl]
- pop hl
- ret
-
-SpawnPikachu_::
- call ResetPikachuOverworldStateFlag2
- call TrySpawnPikachu
- ret nc
-
- push bc
- call WillPikachuSpawnOnTheScreen
- pop bc
- ret c
-
- ld bc, wSpritePikachuStateData1
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- bit 7, [hl]
- jp nz, Func_fc745
- ld a, [wFontLoaded]
- bit 0, a
- jp nz, Func_fc76a
- call CheckPikachuFollowingPlayer
- jp nz, Func_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:
- 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 .nop
-
-.nop:
- ret
-
-TrySpawnPikachu:
- call ShouldPikachuSpawn
- jr nc, .dont_spawn
- ld a, [wSpritePikachuStateData1MovementStatus]
- and a
- jr nz, .already_spawned
- push bc
- push hl
- call CalculatePikachuSpawnCoordsAndFacing
- pop hl
- pop bc
-.already_spawned
- scf
- ret
-
-.dont_spawn
- ld hl, wSpritePikachuStateData1ImageIndex
- ld [hl], $ff
- dec hl
- ld [hl], $0
- xor a
- ret
-
-Func_fc745:
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- res 7, [hl]
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
- call CheckPikachuFollowingPlayer
- jr nz, .okay
- ; Have Pikachu face in the opposite direction of you
- ld a, [wSpritePlayerStateData1FacingDirection]
- xor $4
- ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
-.okay
- xor a
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hli], a
- ld [hl], a
- call UpdatePikachuWalkingSprite
- ret
-
-Func_fc76a:
- xor a
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hli], a
- ld [hl], a
- call UpdatePikachuWalkingSprite
- call Func_fc82e
- jr c, .skip
- push bc
- callfar InitializeSpriteScreenPosition
- pop bc
-.skip
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $1
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $0
- call RefreshPikachuFollow
- ret
-
-Func_fc793:
- call RefreshPikachuFollow
- push bc
- callfar InitializeSpriteScreenPosition
- pop bc
- ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $ff
- dec hl
- ld [hl], $1
- ret
-
-Func_fc7aa:
- 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, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
- ld a, [de]
- inc de
- ld hl, wSpritePikachuStateData1XStepVector - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
- dec hl
- dec hl
- ld a, [de]
- ld [hl], a
- inc de
- ld a, [de]
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
- cp $4
- jp z, Func_fca0a
- call AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer
- jp c, FastPikachuFollow
- jp NormalPikachuFollow
-
-Pointer_fc7e3:
- 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:
- call Func_fcae2
- ret c
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- 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, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
-.asm_fc823
- xor a
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hli], a
- ld [hl], a
- call UpdatePikachuWalkingSprite
- ret
-
-Func_fc82e:
- ld a, [wWalkCounter]
- and a
- ret z
- scf
- ret
-
-Func_fc835:
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $10
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $1
- ret
-
-Func_fc842:
- ld hl, $0
- push af
- call Random
- ldh 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:
- dw Func_fc862
- dw Func_fc8f8
- dw Func_fc92b
- dw Func_fc95d
-
-Func_fc862:
- dec a
- add a
- add a
- and $c
- ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1
- add hl, bc
- ld [hl], a
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $6
- xor a
- ld [wd432], a
- ld [wd433], a
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $11
-asm_fc87f:
- ld a, [wd432]
- ld e, a
- ld a, [wd433]
- ld d, a
- call Func_fc82e
- jr c, Func_fc8c7
- call SetPikachuOverworldStateFlag2
- ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1
- 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, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- 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, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1
- add hl, bc
- ld [hl], e
- inc hl
- inc hl
- ld [hl], d
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- jp Func_fc835
-
-Func_fc8c7:
- ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1
- 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:
- 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:
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $7
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $30
-asm_fc904:
- call Func_fc82e
- jp c, Func_fc835
- call SetPikachuOverworldStateFlag2
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- 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, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- jp Func_fc835
-
-Func_fc92b:
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $20
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $8
-asm_fc937:
- call Func_fc82e
- jp c, Func_fc835
- call SetPikachuOverworldStateFlag2
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- 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, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- jp Func_fc835
-
-Func_fc95d:
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $20
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $9
-asm_fc969:
- call Func_fc82e
- jp c, Func_fc835
- call SetPikachuOverworldStateFlag2
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- add hl, bc
- ld a, [hl]
- inc a
- cp $8
- ld [hl], a
- jr nz, .skip
- xor a
- ld [hl], a
- ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1
- add hl, bc
- ld a, [hl]
- call .TurnClockwise
- ld [hl], a
-.skip
- call UpdatePikachuWalkingSprite
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- jp Func_fc835
-
-.TurnClockwise:
- push hl
- ld hl, .Facings
- ld d, a
-.loop
- ld a, [hli]
- cp d
- jr nz, .loop
- ld a, [hl]
- pop hl
- ret
-
-.TurnCounterclockwise:
- push hl
- ld hl, .Facings_End
- ld d, a
-.loop_
- ld a, [hld]
- cp d
- jr nz, .loop_
- ld a, [hl]
- pop hl
- ret
-
-.Facings:
- 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
-.Facings_End:
-
-NormalPikachuFollow:
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $8
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $3
- call AddPikachuStepVector
-asm_fc9c3:
- call TryDoubleAddPikachuStepVectorToScreenPixelCoords
- call GetPikachuWalkingAnimationSpeed
- call UpdatePikachuWalkingSprite
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- call ResetPikachuStepVector
- call ComputePikachuFacingDirection
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $1
- ret
-
-FastPikachuFollow:
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $4
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $5
- call AddPikachuStepVector
-asm_fc9ee:
- call DoubleAddPikachuStepVectorToScreenPixelCoords
- call GetPikachuWalkingAnimationSpeed
- call UpdatePikachuWalkingSprite
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- call ResetPikachuStepVector
- call ComputePikachuFacingDirection
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $1
- ret
-
-Func_fca0a:
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $8
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $4
- call AddPikachuStepVector
- call AddPikachuStepVector
-asm_fca1c:
- call DoubleAddPikachuStepVectorToScreenPixelCoords
- call GetPikachuWalkingAnimationSpeed
- call UpdatePikachuWalkingSprite
- ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1
- add hl, bc
- dec [hl]
- ret nz
- call ResetPikachuStepVector
- call ComputePikachuFacingDirection
- ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $1
- ret
-
-AddPikachuStepVector:
- ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1
- add hl, bc
- ld e, [hl]
- inc hl
- inc hl
- ld d, [hl]
- ld hl, wSpritePikachuStateData2MapY - wSpritePikachuStateData1
- add hl, bc
- ld a, [hl]
- add e
- ld [hli], a
- ld a, [hl]
- add d
- ld [hl], a
- ret
-
-TryDoubleAddPikachuStepVectorToScreenPixelCoords:
- ld a, [wWalkBikeSurfState]
- cp $1 ; biking
- jr nz, AddPikachuStepVectorToScreenPixelCoords
- ld a, [wd736]
- bit 6, a
- jr nz, AddPikachuStepVectorToScreenPixelCoords
-DoubleAddPikachuStepVectorToScreenPixelCoords:
- ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1
- 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:
- ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1
- 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:
- ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1
- add hl, bc
- xor a
- ld [hli], a
- inc hl
- ld [hl], a
- ret
-
-GetPikachuWalkingAnimationSpeed:
- call ComparePikachuHappinessTo80
- ld d, $2
- jr nc, .happy
- ld d, $5
-.happy
- ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1
- 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:
- ld a, [wPikachuOverworldStateFlags]
- bit 3, a
- jr nz, .uninitialized
- ld hl, wSpritePikachuStateData2ImageBaseOffset - wSpritePikachuStateData1
- 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, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1
- 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, wSpritePikachuStateData1AnimFrameCounter - wSpritePikachuStateData1
- add hl, bc
- ld a, d
- or [hl]
- ld d, a
-.load_sprite_index
- ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1
- add hl, bc
- ld [hl], d
- ret
-
-.uninitialized
- ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $ff
- ret
-
-.copy_player
- ld a, [wSpritePlayerStateData1ImageIndex]
- and $f
- or d
- ld [wSpritePikachuStateData1ImageIndex], a
- ret
-
-Func_fcae2:
- ld hl, wSpritePikachuStateData2MapY - wSpritePikachuStateData1
- 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, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1
- add hl, bc
- ld [hl], $ff
- scf
- ret
-
-.on_screen
- and a
- ret
-
-IsPikachuRightNextToPlayer:
- push bc
- push de
- push hl
- ld bc, wSpritePikachuStateData1PictureID
- ld a, [wXCoord]
- add $4
- ld d, a
- ld a, [wYCoord]
- add $4
- ld e, a
- ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1
- 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, wSpritePlayerStateData2MapX - wSpritePlayerStateData1
- add hl, bc
- ld a, [hl]
- sub d
- jr z, .good
- jr .bad
-
-.equal
- ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1
- 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::
- call GetPikachuFacingDirection
- ld e, a
- ret
-
-GetPikachuFacingDirection:
- ld bc, wSpritePikachuStateData1PictureID
- ld a, [wXCoord]
- add $4
- ld d, a
- ld a, [wYCoord]
- add $4
- ld e, a
- ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1
- 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, wSpritePlayerStateData2MapX - wSpritePlayerStateData1
- 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:
- push bc
- ld hl, wPikachuFollowCommandBufferSize
- ld [hl], $ff
- inc hl
- ld bc, $10
- xor a
- call FillMemory
- pop bc
- ret
-
-AppendPikachuFollowCommandToBuffer:
- ld hl, wPikachuFollowCommandBufferSize
- inc [hl]
- ld e, [hl]
- ld d, 0
- ld hl, wPikachuFollowCommandBuffer
- add hl, de
- ld [hl], a
- ret
-
-RefreshPikachuFollow:
- call ClearPikachuFollowCommandBuffer
- call ComputePikachuFollowCommand
- ret c
- call AppendPikachuFollowCommandToBuffer
- ret
-
-ComputePikachuFollowCommand:
- ld bc, wSpritePikachuStateData1PictureID
- ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1
- 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, wSpritePlayerStateData2MapX - wSpritePlayerStateData1
- 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:
- jr nc, .positive
- cpl
- inc a
-.positive
- cp $2
- ret
-
-Func_fcc08::
- 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:
- 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:
- 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:
- 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:
- 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::
- 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, [wSpritePikachuStateData2MapY]
- 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, [wSpritePikachuStateData2MapX]
- 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, [wSpritePlayerStateData1FacingDirection]
-.load
- ld [wSpritePikachuStateData1FacingDirection], a
- ret
-
-GetPikachuFollowCommand:
- 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:
- 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:
- ld a, [wPikachuFollowCommandBufferSize]
- cp $ff
- ret z
- cp $2
- jr nc, .set_carry
- and a
- ret
-
-.set_carry
- scf
- ret
-
-WillPikachuSpawnOnTheScreen:
- ld h, wSpriteStateData2 / $100
- ldh a, [hCurrentSpriteOffset] ; If we're here, this can only be $f0
- add wSpritePikachuStateData2MapY - wSpritePikachuStateData2
- 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
- ldh a, [hCurrentSpriteOffset]
- add wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1
- ld l, a
- ld [hl], $ff
- scf
- jr .return
-
-.on_screen
- ld h, wSpriteStateData2 / $100
- ldh a, [hCurrentSpriteOffset]
- add wSpritePikachuStateData2GrassPriority - wSpritePikachuStateData2
- 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:
- ld h, wSpriteStateData1 / $100
- ldh a, [hCurrentSpriteOffset]
- add wSpritePikachuStateData1YPixels - wSpritePikachuStateData1
- 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:
-; preserves a and bc
- push bc
- push af
- ld a, [wPikachuHappiness]
- cp 80
- pop bc
- ld a, b
- pop bc
- ret