summaryrefslogtreecommitdiff
path: root/engine/pikachu_movement.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/pikachu_movement.asm')
-rwxr-xr-xengine/pikachu_movement.asm843
1 files changed, 426 insertions, 417 deletions
diff --git a/engine/pikachu_movement.asm b/engine/pikachu_movement.asm
index fbb71ffd..65640cbd 100755
--- a/engine/pikachu_movement.asm
+++ b/engine/pikachu_movement.asm
@@ -5,7 +5,7 @@ ApplyPikachuMovementData_:: ; fd2a1 (3f:52a1)
ld [wPikachuMovementScriptAddress], a
ld a, h
ld [wPikachuMovementScriptAddress + 1], a
- call PikachuSwapSpriteStateData
+ call .SwapSpriteStateData
.loop
call LoadPikachuMovementCommandData
jr nc, .done
@@ -13,11 +13,11 @@ ApplyPikachuMovementData_:: ; fd2a1 (3f:52a1)
jr .loop
.done
- call PikachuSwapSpriteStateData
+ call .SwapSpriteStateData
call DelayFrame
ret
-PikachuSwapSpriteStateData:
+.SwapSpriteStateData:
ld a, [wUpdateSpritesEnabled]
push af
ld a, $ff
@@ -26,15 +26,15 @@ PikachuSwapSpriteStateData:
push de
push bc
- ld hl, wSpriteStateData1
+ ld hl, wPlayerSpriteStateData1
ld de, wPikachuSpriteStateData1
ld c, $10
- call SwapBytes3f
+ call .SwapBytes
- ld hl, wSpriteStateData2
+ ld hl, wPlayerSpriteStateData2
ld de, wPikachuSpriteStateData2
ld c, $10
- call SwapBytes3f
+ call .SwapBytes
pop bc
pop de
@@ -43,8 +43,7 @@ PikachuSwapSpriteStateData:
ld [wUpdateSpritesEnabled], a
ret
-SwapBytes3f:
-.loop
+.SwapBytes:
ld b, [hl]
ld a, [de]
ld [hli], a
@@ -52,7 +51,7 @@ SwapBytes3f:
ld [de], a
inc de
dec c
- jr nz, .loop
+ jr nz, .SwapBytes
ret
LoadPikachuMovementCommandData:
@@ -61,52 +60,52 @@ LoadPikachuMovementCommandData:
ret z
ld c, a
ld b, 0
- ld hl, Data_fd3b0
+ ld hl, PikachuMovementDatabase
add hl, bc
add hl, bc
add hl, bc
add hl, bc
ld a, [hli]
- ld [wPikaPicAnimPointer + 1], a
+ ld [wCurPikaMovementFunc1], a
ld a, [hli]
cp $80
jr nz, .no_param
call GetPikachuMovementScriptByte
.no_param
- ld [wPikaPicAnimPointer], a
+ ld [wCurPikaMovementParam1], a
ld a, [hli]
- ld [wPikaPicAnimCurGraphicID], a
+ ld [wCurPikaMovementFunc2], a
ld a, [hli]
cp $80
jr nz, .no_param2
call GetPikachuMovementScriptByte
.no_param2
- ld [wPikaPicAnimPointerSetupFinished], a
+ ld [wCurPikaMovementParam2], a
xor a
- ld [wPikaPicAnimTimer], a
+ ld [wd451], a
scf
ret
ExecutePikachuMovementCommand:
xor a
- ld [wd44d], a
- ld [wd457], a
- ld [wd458], a
+ ld [wPikachuMovementFlags], a
+ ld [wPikachuStepTimer], a
+ ld [wPikachuStepSubtimer], a
ld a, [wPlayerGrassPriority]
push af
.loop
- ld bc, wSpriteStateData1
- ld a, [wPikaPicAnimPointer + 1]
- ld hl, Jumptable_fd4ac
+ ld bc, wPlayerSpriteStateData1 ; Currently holds Pikachu's sprite state data
+ ld a, [wCurPikaMovementFunc1]
+ ld hl, PikaMovementFunc1Jumptable
call .JumpTable
- ld a, [wPikaPicAnimCurGraphicID]
- ld hl, Jumptable_fd65c
+ ld a, [wCurPikaMovementFunc2]
+ ld hl, PikaMovementFunc2Jumptable
call .JumpTable
- call Func_fd36e
- call Func_fd39d
+ call GetCoordsForPikachuShadow
+ call AnimatePikachuShadow
call DelayFrame
call DelayFrame
- ld hl, wd44d
+ ld hl, wPikachuMovementFlags
bit 7, [hl]
jr z, .loop
pop af
@@ -124,62 +123,65 @@ ExecutePikachuMovementCommand:
ld l, a
jp [hl]
-Func_fd36e:
- ld hl, 2
+GetCoordsForPikachuShadow:
+ ld hl, wPlayerSpriteImageIdx - wPlayerSpriteStateData1
add hl, bc
- ld a, [wPikaPicAnimTimer + 1]
+ ld a, [wCurPikaMovementSpriteImageIdx]
ld [hl], a
ld a, [wPikaSpriteY]
ld d, a
- ld a, [wd456]
+ ld a, [wPikachuMovementYOffset]
add d
- ld hl, 4
+ ld hl, wPlayerYPixels - wPlayerSpriteStateData1
add hl, bc
ld [hl], a
- ld a, [wPikaPicAnimDelay]
+ ld a, [wPikaSpriteX]
ld d, a
- ld a, [wPikaPicTextboxStartY]
+ ld a, [wPikachuMovementXOffset]
add d
- ld hl, 6
+ ld hl, wPlayerXPixels - wPlayerSpriteStateData1
add hl, bc
ld [hl], a
- ld hl, wd44d
+ ld hl, wPikachuMovementFlags
bit 6, [hl]
ret z
- ld hl, wPlayerGrassPriority - wSpriteStateData1
+ ld hl, wPlayerGrassPriority - wPlayerSpriteStateData1
add hl, bc
ld [hl], 0
ret
-Func_fd39d:
- ld hl, wd44d
+AnimatePikachuShadow:
+ ld hl, wPikachuMovementFlags
bit 6, [hl]
res 6, [hl]
ld hl, wd736
res 6, [hl]
ret z
set 6, [hl]
- call Func_fd7f3
+ call LoadPikachuShadowOAMData
ret
-Data_fd3b0:
- db $01, $00, $00, $00 ; $00
- db $03, $80, $01, $00 ; $01
- db $04, $80, $01, $00 ; $02
- db $05, $80, $01, $00 ; $03
- db $06, $80, $01, $00 ; $04
- db $07, $80, $01, $00 ; $05
- db $08, $80, $01, $00 ; $06
- db $09, $80, $01, $00 ; $07
- db $0a, $80, $01, $00 ; $08
- db $03, $80, $06, $00 ; $09
- db $04, $80, $06, $00 ; $0a
- db $05, $80, $06, $00 ; $0b
- db $06, $80, $06, $00 ; $0c
- db $07, $80, $06, $00 ; $0d
- db $08, $80, $06, $00 ; $0e
- db $09, $80, $06, $00 ; $0f
- db $0a, $80, $06, $00 ; $10
+PikachuMovementDatabase:
+ db $01, 1 - 1, $00, 1 - 1 ; $00 start
+
+ db $03, $80, $01, 1 - 1 ; $01
+ db $04, $80, $01, 1 - 1 ; $02
+ db $05, $80, $01, 1 - 1 ; $03
+ db $06, $80, $01, 1 - 1 ; $04
+ db $07, $80, $01, 1 - 1 ; $05
+ db $08, $80, $01, 1 - 1 ; $06
+ db $09, $80, $01, 1 - 1 ; $07
+ db $0a, $80, $01, 1 - 1 ; $08
+
+ db $03, $80, $06, 1 - 1 ; $09
+ db $04, $80, $06, 1 - 1 ; $0a
+ db $05, $80, $06, 1 - 1 ; $0b
+ db $06, $80, $06, 1 - 1 ; $0c
+ db $07, $80, $06, 1 - 1 ; $0d
+ db $08, $80, $06, 1 - 1 ; $0e
+ db $09, $80, $06, 1 - 1 ; $0f
+ db $0a, $80, $06, 1 - 1 ; $10
+
db $03, $80, $03, $80 ; $11
db $04, $80, $03, $80 ; $12
db $05, $80, $03, $80 ; $13
@@ -188,290 +190,296 @@ Data_fd3b0:
db $08, $80, $03, $80 ; $16
db $09, $80, $03, $80 ; $17
db $0a, $80, $03, $80 ; $18
+
db $03, $80, $07, $80 ; $19
db $04, $80, $07, $80 ; $1a
db $05, $80, $07, $80 ; $1b
db $06, $80, $07, $80 ; $1c
- db $0b, $27, $02, $00 ; $1d step down
- db $0c, $27, $02, $00 ; $1e step up
- db $0d, $27, $02, $00 ; $1f step left
- db $0e, $27, $02, $00 ; $20 step right
- db $0f, $27, $02, $00 ; $21
- db $10, $27, $02, $00 ; $22
- db $11, $27, $02, $00 ; $23
- db $12, $27, $02, $00 ; $24
- db $0b, $0f, $02, $00 ; $25
- db $0c, $0f, $02, $00 ; $26
- db $0d, $0f, $02, $00 ; $27
- db $0e, $0f, $02, $00 ; $28
- db $0f, $0f, $02, $00 ; $29
- db $10, $0f, $02, $00 ; $2a
- db $11, $0f, $02, $00 ; $2b
- db $12, $0f, $02, $00 ; $2c
- db $0b, $0f, $08, $17 ; $2d
- db $0c, $0f, $08, $17 ; $2e
- db $0d, $0f, $08, $17 ; $2f
- db $0e, $0f, $08, $17 ; $30
- db $0f, $0f, $08, $17 ; $31
- db $10, $0f, $08, $17 ; $32
- db $11, $0f, $08, $17 ; $33
- db $12, $0f, $08, $17 ; $34
- db $13, $0f, $06, $00 ; $35 look down
- db $14, $0f, $06, $00 ; $36 look up
- db $15, $0f, $06, $00 ; $37 look left
- db $16, $0f, $06, $00 ; $38 look right
- db $02, $80, $04, $00 ; $39
- db $02, $80, $05, $00 ; $3a
+
+ db $0b, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1d step down
+ db $0c, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1e step up
+ db $0d, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1f step left
+ db $0e, (1 << 5) | 8 - 1, $02, 1 - 1 ; $20 step right
+ db $0f, (1 << 5) | 8 - 1, $02, 1 - 1 ; $21 step down left
+ db $10, (1 << 5) | 8 - 1, $02, 1 - 1 ; $22 step down right
+ db $11, (1 << 5) | 8 - 1, $02, 1 - 1 ; $23 step up left
+ db $12, (1 << 5) | 8 - 1, $02, 1 - 1 ; $24 step up right
+
+ db $0b, 16 - 1, $02, 1 - 1 ; $25 slide down
+ db $0c, 16 - 1, $02, 1 - 1 ; $26 slide up
+ db $0d, 16 - 1, $02, 1 - 1 ; $27 slide left
+ db $0e, 16 - 1, $02, 1 - 1 ; $28 slide right
+ db $0f, 16 - 1, $02, 1 - 1 ; $29 slide down left
+ db $10, 16 - 1, $02, 1 - 1 ; $2a slide down right
+ db $11, 16 - 1, $02, 1 - 1 ; $2b slide up left
+ db $12, 16 - 1, $02, 1 - 1 ; $2c slide up right
+
+ db $0b, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2d hop down
+ db $0c, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2e hop up
+ db $0d, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2f hop left
+ db $0e, 16 - 1, $08, (1 << 4) | 8 - 1 ; $30 hop right
+ db $0f, 16 - 1, $08, (1 << 4) | 8 - 1 ; $31 hop down left
+ db $10, 16 - 1, $08, (1 << 4) | 8 - 1 ; $32 hop down right
+ db $11, 16 - 1, $08, (1 << 4) | 8 - 1 ; $33 hop up left
+ db $12, 16 - 1, $08, (1 << 4) | 8 - 1 ; $34 hop up right
+
+ db $13, 16 - 1, $06, 1 - 1 ; $35 look down
+ db $14, 16 - 1, $06, 1 - 1 ; $36 look up
+ db $15, 16 - 1, $06, 1 - 1 ; $37 look left
+ db $16, 16 - 1, $06, 1 - 1 ; $38 look right
+
+ db $02, $80, $04, 1 - 1 ; $39
+ db $02, $80, $05, 1 - 1 ; $3a
db $02, $80, $03, $80 ; $3b
db $02, $80, $07, $80 ; $3c
db $02, $80, $09, $80 ; $3d
- db $02, $80, $06, $00 ; $3e
-
-Jumptable_fd4ac:
- dw Func_fd4e5
- dw Func_fd4e9
- dw Func_fd504
- dw Func_fd50c
- dw Func_fd511
- dw Func_fd518
- dw Func_fd52c
- dw Func_fd540
- dw Func_fd553
- dw Func_fd566
- dw Func_fd579
- dw Func_fd5b1
- dw Func_fd5b5
- dw Func_fd5b9
- dw Func_fd5bd
- dw Func_fd5c1
- dw Func_fd5c5
- dw Func_fd5c9
- dw Func_fd5cd
- dw Func_fd5ea
- dw Func_fd5ee
- dw Func_fd5f2
- dw Func_fd5f6
- dw Func_fd4e5
-
-Func_fd4dc:
- ld a, [wd44d]
+ db $02, $80, $06, 1 - 1 ; $3e
+
+PikaMovementFunc1Jumptable:
+ dw PikaMovementFunc1_EndCommand_ ; 00
+ dw PikaMovementFunc1_LoadPikachuCurrentPosition ; 01
+ dw PikaMovementFunc1_DelayFrames ; 02
+ dw PikaMovementFunc1_WalkInCurrentFacingDirection ; 03
+ dw PikaMovementFunc1_WalkInOppositeFacingDirection ; 04
+ dw PikaMovementFunc1_StepTurningCounterclockwise ; 05
+ dw PikaMovementFunc1_StepTurningClockwise ; 06
+ dw PikaMovementFunc1_StepForwardLeft ; 07
+ dw PikaMovementFunc1_StepForwardRight ; 08
+ dw PikaMovementFunc1_StepBackwardLeft ; 09
+ dw PikaMovementFunc1_StepBackwardRight ; 0a
+ dw PikaMovementFunc1_MoveDown ; 0b
+ dw PikaMovementFunc1_MoveUp ; 0c
+ dw PikaMovementFunc1_MoveLeft ; 0d
+ dw PikaMovementFunc1_MoveRight ; 0e
+ dw PikaMovementFunc1_MoveDownLeft ; 0f
+ dw PikaMovementFunc1_MoveDownRight ; 10
+ dw PikaMovementFunc1_MoveUpLeft ; 11
+ dw PikaMovementFunc1_MoveUpRight ; 12
+ dw PikaMovementFunc1_LookDown ; 13
+ dw PikaMovementFunc1_LookUp ; 14
+ dw PikaMovementFunc1_LookLeft ; 15
+ dw PikaMovementFunc1_LookRight ; 16
+ dw PikaMovementFunc1_EndCommand_ ; 17
+
+PikaMovementFunc1_EndCommand:
+ ld a, [wPikachuMovementFlags]
set 7, a
- ld [wd44d], a
+ ld [wPikachuMovementFlags], a
ret
-Func_fd4e5:
- call Func_fd4dc
+PikaMovementFunc1_EndCommand_:
+ call PikaMovementFunc1_EndCommand
ret
-Func_fd4e9:
- ld hl, 4
+PikaMovementFunc1_LoadPikachuCurrentPosition:
+ ld hl, wPlayerYPixels - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
ld [wPikaSpriteY], a
- ld hl, 6
+ ld hl, wPlayerXPixels - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
- ld [wPikaPicAnimDelay], a
+ ld [wPikaSpriteX], a
xor a
- ld [wd456], a
- ld [wPikaPicTextboxStartY], a
- call Func_fd4dc
+ ld [wPikachuMovementYOffset], a
+ ld [wPikachuMovementXOffset], a
+ call PikaMovementFunc1_EndCommand
ret
-Func_fd504:
- call Func_fd775
+PikaMovementFunc1_DelayFrames:
+ call CheckPikachuStepTimer1
ret nz
- call Func_fd4dc
+ call PikaMovementFunc1_EndCommand
ret
-Func_fd50c:
- call GetObjectFacing
- jr asm_fd58c
+PikaMovementFunc1_WalkInCurrentFacingDirection:
+ call GetPikachuFacing
+ jr PikaMovementFunc1_ApplyStepVector
-Func_fd511:
- call GetObjectFacing
+PikaMovementFunc1_WalkInOppositeFacingDirection:
+ call GetPikachuFacing
xor %100
- jr asm_fd58c
-
-Func_fd518:
- call GetObjectFacing
- ld hl, Data_fd523
- call Func_fd5a0
- jr asm_fd58c
-
-Data_fd523:
- db SPRITE_FACING_DOWN, SPRITE_FACING_RIGHT
- db SPRITE_FACING_UP, SPRITE_FACING_LEFT
- db SPRITE_FACING_LEFT, SPRITE_FACING_DOWN
- db SPRITE_FACING_RIGHT, SPRITE_FACING_UP
+ jr PikaMovementFunc1_ApplyStepVector
+
+PikaMovementFunc1_StepTurningCounterclockwise:
+ call GetPikachuFacing
+ ld hl, .Data
+ call PikaMovementFunc1_GetNextFacing
+ jr PikaMovementFunc1_ApplyStepVector
+
+.Data:
+ db SPRITE_FACING_DOWN, PIKASTEPDIR_RIGHT << 2
+ db SPRITE_FACING_UP, PIKASTEPDIR_LEFT << 2
+ db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN << 2
+ db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP << 2
db $ff
-Func_fd52c:
- call GetObjectFacing
- ld hl, Data_fd537
- call Func_fd5a0
- jr asm_fd58c
-
-Data_fd537:
- db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT
- db SPRITE_FACING_UP, SPRITE_FACING_RIGHT
- db SPRITE_FACING_LEFT, SPRITE_FACING_UP
- db SPRITE_FACING_RIGHT, SPRITE_FACING_DOWN
+PikaMovementFunc1_StepTurningClockwise:
+ call GetPikachuFacing
+ ld hl, .Data
+ call PikaMovementFunc1_GetNextFacing
+ jr PikaMovementFunc1_ApplyStepVector
+
+.Data:
+ db SPRITE_FACING_DOWN, PIKASTEPDIR_LEFT << 2
+ db SPRITE_FACING_UP, PIKASTEPDIR_RIGHT << 2
+ db SPRITE_FACING_LEFT, PIKASTEPDIR_UP << 2
+ db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN << 2
db $ff
-Func_fd540:
- call GetObjectFacing
- ld hl, Data_fd54b
- call Func_fd5a0
- jr asm_fd58c
-
-Data_fd54b:
- db SPRITE_FACING_DOWN, SPRITE_FACING_UP | $10
- db SPRITE_FACING_UP, SPRITE_FACING_LEFT | $10
- db SPRITE_FACING_LEFT, SPRITE_FACING_DOWN | $10
- db SPRITE_FACING_RIGHT, SPRITE_FACING_RIGHT | $10
-
-Func_fd553:
- call GetObjectFacing
- ld hl, Data_fd55e
- call Func_fd5a0
- jr asm_fd58c
-
-Data_fd55e:
- db SPRITE_FACING_DOWN, SPRITE_FACING_DOWN | $10
- db SPRITE_FACING_UP, SPRITE_FACING_RIGHT | $10
- db SPRITE_FACING_LEFT, SPRITE_FACING_LEFT | $10
- db SPRITE_FACING_RIGHT, SPRITE_FACING_UP | $10
-
-Func_fd566:
- call GetObjectFacing
- ld hl, Data_fd571
- call Func_fd5a0
- jr asm_fd58c
-
-Data_fd571:
- db SPRITE_FACING_DOWN, SPRITE_FACING_RIGHT | $10
- db SPRITE_FACING_UP, SPRITE_FACING_DOWN | $10
- db SPRITE_FACING_LEFT, SPRITE_FACING_UP | $10
- db SPRITE_FACING_RIGHT, SPRITE_FACING_LEFT | $10
-
-Func_fd579:
- call GetObjectFacing
- ld hl, Data_fd584
- call Func_fd5a0
- jr asm_fd58c
-
-Data_fd584:
- db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT | $10
- db SPRITE_FACING_UP, SPRITE_FACING_UP | $10
- db SPRITE_FACING_LEFT, SPRITE_FACING_RIGHT | $10
- db SPRITE_FACING_RIGHT, SPRITE_FACING_DOWN | $10
-
-asm_fd58c
+PikaMovementFunc1_StepForwardLeft:
+ call GetPikachuFacing
+ ld hl, .Data
+ call PikaMovementFunc1_GetNextFacing
+ jr PikaMovementFunc1_ApplyStepVector
+
+.Data:
+ db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_RIGHT << 2
+ db SPRITE_FACING_UP, PIKASTEPDIR_UP_LEFT << 2
+ db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_LEFT << 2
+ db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_RIGHT << 2
+
+PikaMovementFunc1_StepForwardRight:
+ call GetPikachuFacing
+ ld hl, .Data
+ call PikaMovementFunc1_GetNextFacing
+ jr PikaMovementFunc1_ApplyStepVector
+
+.Data:
+ db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_LEFT << 2
+ db SPRITE_FACING_UP, PIKASTEPDIR_UP_RIGHT << 2
+ db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_LEFT << 2
+ db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_RIGHT << 2
+
+PikaMovementFunc1_StepBackwardLeft:
+ call GetPikachuFacing
+ ld hl, .Data
+ call PikaMovementFunc1_GetNextFacing
+ jr PikaMovementFunc1_ApplyStepVector
+
+.Data:
+ db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_RIGHT << 2
+ db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_LEFT << 2
+ db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_RIGHT << 2
+ db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_LEFT << 2
+
+PikaMovementFunc1_StepBackwardRight:
+ call GetPikachuFacing
+ ld hl, .Data
+ call PikaMovementFunc1_GetNextFacing
+ jr PikaMovementFunc1_ApplyStepVector
+
+.Data:
+ db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_LEFT << 2
+ db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_RIGHT << 2
+ db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_RIGHT << 2
+ db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_LEFT << 2
+
+PikaMovementFunc1_ApplyStepVector:
rrca
rrca
and $7
ld e, a
- call Func_fd784
+ call GetPikachuStepVectorMagnitude
ld d, a
call UpdatePikachuPosition
- call Func_fd775
+ call CheckPikachuStepTimer1
ret nz
- call Func_fd4dc
+ call PikaMovementFunc1_EndCommand
ret
-Func_fd5a0:
+PikaMovementFunc1_GetNextFacing:
push de
ld d, a
-.asm_fd5a2
+.loop
ld a, [hli]
cp d
- jr z, .asm_fd5ad
+ jr z, .found
inc hl
cp $ff
- jr nz, .asm_fd5a2
+ jr nz, .loop
pop de
ret
-.asm_fd5ad
+.found
ld a, [hl]
pop de
scf
ret
-Func_fd5b1:
- ld a, SPRITE_FACING_DOWN >> 2
- jr asm_fd5d1
+PikaMovementFunc1_MoveDown:
+ ld a, PIKASTEPDIR_DOWN
+ jr PikaMovementFunc1_ApplyFacingAndMove
-Func_fd5b5:
- ld a, SPRITE_FACING_UP >> 2
- jr asm_fd5d1
+PikaMovementFunc1_MoveUp:
+ ld a, PIKASTEPDIR_UP
+ jr PikaMovementFunc1_ApplyFacingAndMove
-Func_fd5b9:
- ld a, SPRITE_FACING_LEFT >> 2
- jr asm_fd5d1
+PikaMovementFunc1_MoveLeft:
+ ld a, PIKASTEPDIR_LEFT
+ jr PikaMovementFunc1_ApplyFacingAndMove
-Func_fd5bd:
- ld a, SPRITE_FACING_RIGHT >> 2
- jr asm_fd5d1
+PikaMovementFunc1_MoveRight:
+ ld a, PIKASTEPDIR_RIGHT
+ jr PikaMovementFunc1_ApplyFacingAndMove
-Func_fd5c1:
- ld e, 4
- jr asm_fd5d5
+PikaMovementFunc1_MoveDownLeft:
+ ld e, PIKASTEPDIR_DOWN_LEFT
+ jr PikaMovementFunc1_MoveDiagonally
-Func_fd5c5:
- ld e, 5
- jr asm_fd5d5
+PikaMovementFunc1_MoveDownRight:
+ ld e, PIKASTEPDIR_DOWN_RIGHT
+ jr PikaMovementFunc1_MoveDiagonally
-Func_fd5c9:
- ld e, 6
- jr asm_fd5d5
+PikaMovementFunc1_MoveUpLeft:
+ ld e, PIKASTEPDIR_UP_LEFT
+ jr PikaMovementFunc1_MoveDiagonally
-Func_fd5cd:
- ld e, 7
- jr asm_fd5d5
+PikaMovementFunc1_MoveUpRight:
+ ld e, PIKASTEPDIR_UP_RIGHT
+ jr PikaMovementFunc1_MoveDiagonally
-asm_fd5d1
+PikaMovementFunc1_ApplyFacingAndMove:
ld e, a
- call SetObjectFacing
-asm_fd5d5
- call Func_fd784
+ call SetPikachuFacing
+PikaMovementFunc1_MoveDiagonally:
+ call GetPikachuStepVectorMagnitude
ld d, a
push de
call UpdatePikachuPosition
pop de
- call Func_fd775
+ call CheckPikachuStepTimer1
ret nz
ld a, e
- call Func_fd7cb
- call Func_fd4dc
+ call ApplyPikachuStepVector
+ call PikaMovementFunc1_EndCommand
ret
-Func_fd5ea:
- ld a, SPRITE_FACING_DOWN >> 2
- jr asm_fd5fa
+PikaMovementFunc1_LookDown:
+ ld a, PIKASTEPDIR_DOWN
+ jr PikaMovementFunc1_ApplyFacing
-Func_fd5ee:
- ld a, SPRITE_FACING_UP >> 2
- jr asm_fd5fa
+PikaMovementFunc1_LookUp:
+ ld a, PIKASTEPDIR_UP
+ jr PikaMovementFunc1_ApplyFacing
-Func_fd5f2:
- ld a, SPRITE_FACING_LEFT >> 2
- jr asm_fd5fa
+PikaMovementFunc1_LookLeft:
+ ld a, PIKASTEPDIR_LEFT
+ jr PikaMovementFunc1_ApplyFacing
-Func_fd5f6:
- ld a, SPRITE_FACING_RIGHT >> 2
- jr asm_fd5fa
+PikaMovementFunc1_LookRight:
+ ld a, PIKASTEPDIR_RIGHT
+ jr PikaMovementFunc1_ApplyFacing
-asm_fd5fa
- call SetObjectFacing
- call Func_fd4dc
+PikaMovementFunc1_ApplyFacing:
+ call SetPikachuFacing
+ call PikaMovementFunc1_EndCommand
ret
UpdatePikachuPosition:
push de
ld d, 0
- ld hl, Jumptable_fd60f
+ ld hl, .Jumptable
add hl, de
add hl, de
ld a, [hli]
@@ -481,217 +489,217 @@ UpdatePikachuPosition:
ld a, d
jp [hl]
-Jumptable_fd60f:
- dw MovePikachuSpriteDown
- dw MovePikachuSpriteUp
- dw MovePikachuSpriteLeft
- dw MovePikachuSpriteRight
- dw MovePikachuSpriteDownLeft
- dw MovePikachuSpriteDownRight
- dw MovePikachuSpriteUpLeft
- dw MovePikachuSpriteUpRight
-
-MovePikachuSpriteDown:
+.Jumptable:
+ dw .Down
+ dw .Up
+ dw .Left
+ dw .Right
+ dw .DownLeft
+ dw .DownRight
+ dw .UpLeft
+ dw .UpRight
+
+.Down:
ld d, 0
ld e, a
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteUp:
+.Up:
ld d, 0
cpl
inc a
ld e, a
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteLeft:
+.Left:
cpl
inc a
ld d, a
ld e, 0
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteRight:
+.Right:
ld d, a
ld e, 0
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteDownLeft:
+.DownLeft:
ld e, a
cpl
inc a
ld d, a
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteDownRight:
+.DownRight:
ld e, a
ld d, a
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteUpLeft:
+.UpLeft:
cpl
inc a
ld e, a
ld d, a
- jr asm_fd64d
+ jr .ApplyVector
-MovePikachuSpriteUpRight:
+.UpRight:
ld d, a
cpl
inc a
ld e, a
- jr asm_fd64d
+ jr .ApplyVector
-asm_fd64d
- ld a, [wPikaPicAnimDelay]
+.ApplyVector:
+ ld a, [wPikaSpriteX]
add d
- ld [wPikaPicAnimDelay], a
+ ld [wPikaSpriteX], a
ld a, [wPikaSpriteY]
add e
ld [wPikaSpriteY], a
ret
-Jumptable_fd65c:
- dw Func_fd678
- dw Func_fd6a3
- dw Func_fd698
- dw Func_fd6f4
- dw Func_fd6ff
- dw Func_fd718
- dw Func_fd68c
- dw Func_fd6c6
- dw Func_fd6c0
- dw Func_fd6e2
- dw Func_fd68b
-
-Func_fd672:
- ld hl, wd44d
+PikaMovementFunc2Jumptable:
+ dw PikaMovementFunc2_ResetFrameCounterAndFaceCurrent ; 0
+ dw PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection ; 1
+ dw PikaMovementFunc2_UpdateSpriteImageIdxWithFacing ; 2
+ dw PikaMovementFunc2_TurnParameter ; 3
+ dw PikaMovementFunc2_TurnClockwise ; 4
+ dw PikaMovementFunc2_TurnCounterClockwise ; 5
+ dw PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx ; 6
+ dw PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection ; 7
+ dw PikaMovementFunc2_UpdateJumpWithFacing ; 8
+ dw PikaMovementFunc2_CopyFacingToJump ; 9
+ dw PikaMovementFunc2_nop ; 10
+
+PikaMovement_SetSpawnShadow:
+ ld hl, wPikachuMovementFlags
set 6, [hl]
ret
-Func_fd678:
- ld hl, 7
+PikaMovementFunc2_ResetFrameCounterAndFaceCurrent:
+ ld hl, wPlayerIntraAnimFrameCounter - wPlayerSpriteStateData1
add hl, bc
xor a
ld [hli], a
ld [hl], a
- call Func_fd74a
+ call PikaMovementFunc2_GetImageBaseOffset
ld d, a
- call GetObjectFacing
+ call GetPikachuFacing
or d
- ld [wPikaPicAnimTimer + 1], a
+ ld [wCurPikaMovementSpriteImageIdx], a
ret
-Func_fd68b:
+PikaMovementFunc2_nop:
ret
-Func_fd68c:
- call Func_fd74a
+PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx:
+ call PikaMovementFunc2_GetImageBaseOffset
ld d, a
- call Func_fd755
+ call PikaMovementFunc2_GetSpriteImageIdxDirection
or d
- ld [wPikaPicAnimTimer + 1], a
+ ld [wCurPikaMovementSpriteImageIdx], a
ret
-Func_fd698:
- call Func_fd74a
+PikaMovementFunc2_UpdateSpriteImageIdxWithFacing:
+ call PikaMovementFunc2_GetImageBaseOffset
ld d, a
- call GetObjectFacing
+ call GetPikachuFacing
or d
ld d, a
- jr asm_fd6ac
+ jr PikaMovementFunc2_UpdateSpriteImageIdx
-Func_fd6a3:
- call Func_fd74a
+PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection:
+ call PikaMovementFunc2_GetImageBaseOffset
ld d, a
- call Func_fd755
+ call PikaMovementFunc2_GetSpriteImageIdxDirection
or d
ld d, a
-asm_fd6ac
- ld hl, 8
+PikaMovementFunc2_UpdateSpriteImageIdx:
+ ld hl, wPlayerAnimFrameCounter - wPlayerSpriteStateData1
add hl, bc
- call Func_fd78e
- jr nz, .asm_fd6b6
+ call CheckPikachuStepTimer2 ; does not preserve hl
+ jr nz, .skip
inc [hl]
-.asm_fd6b6
+.skip
ld a, [hl]
rrca
rrca
and 3
or d
- ld [wPikaPicAnimTimer + 1], a
+ ld [wCurPikaMovementSpriteImageIdx], a
ret
-Func_fd6c0:
- call GetObjectFacing
+PikaMovementFunc2_UpdateJumpWithFacing:
+ call GetPikachuFacing
ld d, a
- jr asm_fd6ca
+ jr PikaMovementFunc2_UpdateJump
-Func_fd6c6:
- call Func_fd755
+PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection:
+ call PikaMovementFunc2_GetSpriteImageIdxDirection
ld d, a
-asm_fd6ca
- call Func_fd74a
+PikaMovementFunc2_UpdateJump:
+ call PikaMovementFunc2_GetImageBaseOffset
or d
ld d, a
- call Func_fd736
+ call PikaMovementFunc2_Timer
or d
- ld [wPikaPicAnimTimer + 1], a
- call Func_fd79d
- ld [wd456], a
+ ld [wCurPikaMovementSpriteImageIdx], a
+ call PikaMovementFunc_Sine
+ ld [wPikachuMovementYOffset], a
and a
ret z
- call Func_fd672
+ call PikaMovement_SetSpawnShadow
ret
-Func_fd6e2:
- call GetObjectFacing
+PikaMovementFunc2_CopyFacingToJump:
+ call GetPikachuFacing
ld d, a
- call Func_fd74a
+ call PikaMovementFunc2_GetImageBaseOffset
or d
- ld [wPikaPicAnimTimer + 1], a
- call Func_fd79d
- ld [wd456], a
+ ld [wCurPikaMovementSpriteImageIdx], a
+ call PikaMovementFunc_Sine
+ ld [wPikachuMovementYOffset], a
ret
-Func_fd6f4:
- ld a, [wPikaPicAnimPointerSetupFinished]
+PikaMovementFunc2_TurnParameter:
+ ld a, [wCurPikaMovementParam2]
and $40
cp $40
- jr z, Func_fd6ff
- jr Func_fd718
+ jr z, PikaMovementFunc2_TurnClockwise
+ jr PikaMovementFunc2_TurnCounterClockwise
-Func_fd6ff:
- call Func_fd755
+PikaMovementFunc2_TurnClockwise:
+ call PikaMovementFunc2_GetSpriteImageIdxDirection
ld d, a
- call Func_fd78e
- jr nz, .asm_fd710
+ call CheckPikachuStepTimer2
+ jr nz, .skip
ld hl, Data_fd731
-.asm_fd70b
+.loop
ld a, [hli]
cp d
- jr nz, .asm_fd70b
+ jr nz, .loop
ld d, [hl]
-.asm_fd710
- call Func_fd74a
+.skip
+ call PikaMovementFunc2_GetImageBaseOffset
or d
- ld [wPikaPicAnimTimer + 1], a
+ ld [wCurPikaMovementSpriteImageIdx], a
ret
-Func_fd718:
- call Func_fd755
+PikaMovementFunc2_TurnCounterClockwise:
+ call PikaMovementFunc2_GetSpriteImageIdxDirection
ld d, a
- call Func_fd78e
- jr nz, .asm_fd529
+ call CheckPikachuStepTimer2
+ jr nz, .skip
ld hl, Data_fd731End
-.asm_fd524
+.loop
ld a, [hld]
cp d
- jr nz, .asm_fd524
+ jr nz, .loop
ld d, [hl]
-.asm_fd529
- call Func_fd74a
+.skip
+ call PikaMovementFunc2_GetImageBaseOffset
or d
- ld [wPikaPicAnimTimer + 1], a
+ ld [wCurPikaMovementSpriteImageIdx], a
ret
Data_fd731:
@@ -702,27 +710,27 @@ Data_fd731:
db SPRITE_FACING_DOWN
Data_fd731End:
-Func_fd736:
+PikaMovementFunc2_Timer:
push hl
- ld hl, 7
+ ld hl, wPlayerIntraAnimFrameCounter - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
inc a
and $3
ld [hli], a
- jr nz, .asm_fd747
+ jr nz, .load_pop
ld a, [hl]
inc a
and $3
ld [hl], a
-.asm_fd747
+.load_pop
ld a, [hl]
pop hl
ret
-Func_fd74a:
+PikaMovementFunc2_GetImageBaseOffset:
push hl
- ld hl, wSpriteStateData2 - wSpriteStateData1 + 14
+ ld hl, wPlayerSpriteImageBaseOffset - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
dec a
@@ -730,27 +738,27 @@ Func_fd74a:
pop hl
ret
-Func_fd755:
+PikaMovementFunc2_GetSpriteImageIdxDirection:
push hl
- ld hl, 2
+ ld hl, wPlayerSpriteImageIdx - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
and $c
pop hl
ret
-GetObjectFacing:
+GetPikachuFacing:
push hl
- ld hl, 9
+ ld hl, wPlayerFacingDirection - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
and $c
pop hl
ret
-SetObjectFacing:
+SetPikachuFacing:
push hl
- ld hl, 9
+ ld hl, wPlayerFacingDirection - wPlayerSpriteStateData1
add hl, bc
add a
add a
@@ -759,10 +767,10 @@ SetObjectFacing:
pop hl
ret
-Func_fd775:
- ld hl, wd457
+CheckPikachuStepTimer1:
+ ld hl, wPikachuStepTimer
inc [hl]
- ld a, [wPikaPicAnimPointer]
+ ld a, [wCurPikaMovementParam1]
and $1f
inc a
cp [hl]
@@ -770,18 +778,19 @@ Func_fd775:
ld [hl], 0
ret
-Func_fd784:
- ld a, [wPikaPicAnimPointer]
+GetPikachuStepVectorMagnitude:
+ ; *XX*****
+ ld a, [wCurPikaMovementParam1]
swap a
rrca
and $3
inc a
ret
-Func_fd78e:
- ld hl, wd458
+CheckPikachuStepTimer2:
+ ld hl, wPikachuStepSubtimer
inc [hl]
- ld a, [wPikaPicAnimPointerSetupFinished]
+ ld a, [wCurPikaMovementParam2]
and $f
inc a
cp [hl]
@@ -789,11 +798,11 @@ Func_fd78e:
ld [hl], 0
ret
-Func_fd79d:
- call Func_fd7b2
- ld a, [wd458]
+PikaMovementFunc_Sine:
+ call .GetArgument
+ ld a, [wPikachuStepSubtimer]
add e
- ld [wd458], a
+ ld [wPikachuStepSubtimer], a
add $20
ld e, a
push hl
@@ -803,37 +812,37 @@ Func_fd79d:
pop hl
ret
-Func_fd7b2:
- ld a, [wPikaPicAnimPointerSetupFinished]
+.GetArgument:
+ ld a, [wCurPikaMovementParam2]
and $f
inc a
ld d, a
- ld a, [wPikaPicAnimPointerSetupFinished]
+ ld a, [wCurPikaMovementParam2]
swap a
and $7
ld e, a
ld a, 1
- jr z, .asm_fd7c9
-.asm_fd7c5
+ jr z, .okay
+.loop
add a
dec e
- jr nz, .asm_fd7c5
-.asm_fd7c9
+ jr nz, .loop
+.okay
ld e, a
ret
-Func_fd7cb:
+ApplyPikachuStepVector:
push bc
ld c, a
ld b, 0
- ld hl, Data_fd7e3
+ ld hl, .StepVectors
add hl, bc
add hl, bc
ld d, [hl]
inc hl
ld e, [hl]
pop bc
- ld hl, wSpriteStateData2 - wSpriteStateData1 + 4
+ ld hl, wPlayerMapY - wPlayerSpriteStateData1
add hl, bc
ld a, [hl]
add e
@@ -843,7 +852,7 @@ Func_fd7cb:
ld [hl], a
ret
-Data_fd7e3:
+.StepVectors:
db 0, 1
db 0, -1
db -1, 0
@@ -853,7 +862,7 @@ Data_fd7e3:
db -1, -1
db 1, -1
-Func_fd7f3:
+LoadPikachuShadowOAMData:
push bc
push de
push hl
@@ -861,22 +870,22 @@ Func_fd7f3:
ld bc, wOAMBuffer + 4 * 36
ld a, [wPikaSpriteY]
ld e, a
- ld a, [wPikaPicAnimDelay]
+ ld a, [wPikaSpriteX]
ld d, a
- ld hl, Data_fd80b
- call Func_fd814
+ ld hl, .OAMData
+ call .LoadOAMData
pop hl
pop de
pop bc
ret
-Data_fd80b:
- db $02
+.OAMData:
+ db 2
db $0c, $00, $ff, 0
db $0c, $08, $ff, 1 << OAM_X_FLIP
-Func_fd814:
+.LoadOAMData:
ld a, e
add $10
ld e, a
@@ -884,7 +893,7 @@ Func_fd814:
add $8
ld d, a
ld a, [hli]
-.asm_fd81d
+.loop
push af
ld a, [hli]
add e
@@ -902,7 +911,7 @@ Func_fd814:
inc bc
pop af
dec a
- jr nz, .asm_fd81d
+ jr nz, .loop
ret
LoadPikachuShadowIntoVRAM:
@@ -924,7 +933,7 @@ LoadPikachuBallIconIntoVRAM:
Func_fd851:
ld hl, vNPCSprites + $c * $10
ld a, 3
-.asm_fd856
+.loop
push af
push hl
ld de, GFX_fd86b
@@ -935,7 +944,7 @@ Func_fd851:
add hl, de
pop af
dec a
- jr nz, .asm_fd856
+ jr nz, .loop
ret
GFX_fd86b: