summaryrefslogtreecommitdiff
path: root/engine/overworld
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-04-26 20:45:59 -0400
committerentrpntr <entrpntr@gmail.com>2020-04-26 22:15:31 -0400
commitd53f3afe500ad9e92f18a7e6de77982928a6061f (patch)
tree9fd2697a741c82a98104b1c23437907f061be034 /engine/overworld
parent0b33dabae2d43591a964774154f8bec5bf7194b1 (diff)
Clean up some overworld code.
Diffstat (limited to 'engine/overworld')
-rwxr-xr-xengine/overworld/map_object_action.asm274
-rwxr-xr-xengine/overworld/map_objects.asm2632
-rwxr-xr-xengine/overworld/movement.asm1081
-rwxr-xr-xengine/overworld/npc_movement.asm2
-rwxr-xr-xengine/overworld/player_movement.asm4
-rwxr-xr-xengine/overworld/player_object.asm16
-rwxr-xr-xengine/overworld/player_step.asm8
7 files changed, 2745 insertions, 1272 deletions
diff --git a/engine/overworld/map_object_action.asm b/engine/overworld/map_object_action.asm
index 7701ec4f..8f749f84 100755
--- a/engine/overworld/map_object_action.asm
+++ b/engine/overworld/map_object_action.asm
@@ -1,260 +1,264 @@
- ld hl, $b
- add hl, bc
- ld a, [hl]
- ld l, a
- ld h, $0
- add hl, hl
- add hl, hl
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- call _hl_
- ret
+ObjectActionPairPointers:
+; entries correspond to OBJECT_ACTION_* constants
+ dw SetFacingStanding, SetFacingStanding
+ dw SetFacingStandAction, SetFacingCurrent
+ dw SetFacingStepAction, SetFacingCurrent
+ dw SetFacingBumpAction, SetFacingCurrent
+ dw SetFacingCounterclockwiseSpin, SetFacingCurrent
+ dw SetFacingCounterclockwiseSpin2, SetFacingStanding
+ dw SetFacingFish, SetFacingFish
+ dw SetFacingShadow, SetFacingStanding
+ dw SetFacingEmote, SetFacingEmote
+ dw SetFacingBigDollSym, SetFacingBigDollSym
+ dw SetFacingBounce, SetFacingFreezeBounce
+ dw SetFacingWeirdTree, SetFacingCurrent
+ dw SetFacingBigDollAsym, SetFacingBigDollAsym
+ dw SetFacingBigDoll, SetFacingBigDoll
+ dw SetFacingBoulderDust, SetFacingStanding
+ dw SetFacingGrassShake, SetFacingStanding
-Pointers4460:
- dw Function44a0, Function44a0
- dw Function44b2, Function44a7
- dw Function44be, Function44a7
- dw Function44e1, Function44a7
- dw Function4502, Function44a7
- dw Function4512, Function44a0
- dw Function4547, Function4547
- dw Function4554, Function44a0
- dw Function455b, Function455b
- dw Function4562, Function4562
- dw Function4569, Function457d
- dw Function4584, Function44a7
- dw Function4597, Function4597
- dw Function459e, Function459e
- dw Function45b3, Function44a0
- dw Function45c6, Function44a0
-
-Function44a0:
- ld hl, $d
+SetFacingStanding:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
-Function44a7: ; 44a7 (1:44a7)
+SetFacingCurrent:
call GetSpriteDirection
- or $0
- ld hl, $d
+ or FACING_STEP_DOWN_0 ; useless
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
ret
-Function44b2:
- ld hl, $d
+SetFacingStandAction:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld a, [hl]
- and $1
- jr nz, Function44be
- jp Function44a7
+ and 1
+ jr nz, SetFacingStepAction
+ jp SetFacingCurrent
-Function44be:
- ld hl, $4
+SetFacingStepAction:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 3, [hl]
- jp nz, Function44a7
- ld hl, $c
+ bit SLIDING_F, [hl]
+ jp nz, SetFacingCurrent
+
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
inc a
- and $f
+ and %00001111
ld [hl], a
+
rrca
rrca
- and $3
+ maskbits NUM_DIRECTIONS
ld d, a
+
call GetSpriteDirection
- or $0
+ or FACING_STEP_DOWN_0 ; useless
or d
- ld hl, $d
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
ret
-Function44e1:
- ld hl, $4
+SetFacingBumpAction:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 3, [hl]
- jp nz, Function44a7
- ld hl, $c
+ bit SLIDING_F, [hl]
+ jp nz, SetFacingCurrent
+
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
inc [hl]
+
ld a, [hl]
rrca
rrca
rrca
- and $3
+ maskbits NUM_DIRECTIONS
ld d, a
+
call GetSpriteDirection
- or $0
+ or FACING_STEP_DOWN_0 ; useless
or d
- ld hl, $d
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
ret
-Function4502:
- call Function4518
- ld hl, $8
+SetFacingCounterclockwiseSpin:
+ call CounterclockwiseSpinAction
+ ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
- or $0
- ld hl, $d
+ or FACING_STEP_DOWN_0 ; useless
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
ret
-Function4512:
- call Function4518
- jp Function44a0
+SetFacingCounterclockwiseSpin2:
+ call CounterclockwiseSpinAction
+ jp SetFacingStanding
-Function4518: ; 4518 (1:4518)
- ld hl, $c
+CounterclockwiseSpinAction:
+; Here, OBJECT_STEP_FRAME consists of two 2-bit components,
+; using only bits 0,1 and 4,5.
+; bits 0,1 is a timer (4 overworld frames)
+; bits 4,5 determines the facing - the direction is counterclockwise.
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
- and $f0
+ and %11110000
ld e, a
+
ld a, [hl]
inc a
- and $f
+ and %00001111
ld d, a
- cp $4
- jr c, .asm_4531
- ld d, $0
+ cp 4
+ jr c, .ok
+
+ ld d, 0
ld a, e
add $10
- and $30
+ and %00110000
ld e, a
-.asm_4531
+
+.ok
ld a, d
or e
ld [hl], a
+
swap e
- ld d, $0
- ld hl, .directions
+ ld d, 0
+ ld hl, .Directions
add hl, de
ld a, [hl]
- ld hl, $8
+ ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
-.directions
+.Directions:
db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT
-Function4547:
+SetFacingFish:
call GetSpriteDirection
rrca
rrca
- add $10
- ld hl, $d
+ add FACING_FISH_DOWN
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
ret
-Function4554:
- ld hl, $d
+SetFacingShadow:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $15
+ ld [hl], FACING_SHADOW
ret
-Function455b:
- ld hl, $d
+SetFacingEmote:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $14
+ ld [hl], FACING_EMOTE
ret
-Function4562:
- ld hl, $d
+SetFacingBigDollSym:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $17
+ ld [hl], FACING_BIG_DOLL_SYM
ret
-Function4569:
- ld hl, $c
+SetFacingBounce:
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
inc a
- and $f
+ and %00001111
ld [hl], a
- and $8
- jr z, Function457d
- ld hl, $d
+ and %00001000
+ jr z, SetFacingFreezeBounce
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $4
+ ld [hl], FACING_STEP_UP_0
ret
-Function457d:
- ld hl, $d
+SetFacingFreezeBounce:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $0
+ ld [hl], FACING_STEP_DOWN_0
ret
-Function4584:
- ld hl, $c
+SetFacingWeirdTree:
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
inc a
ld [hl], a
- and $c
+ maskbits NUM_DIRECTIONS, 2
rrca
rrca
- add $18
- ld hl, $d
+ add FACING_WEIRD_TREE_0
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
ret
-Function4597:
- ld hl, $d
+SetFacingBigDollAsym:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $16
+ ld [hl], FACING_BIG_DOLL_ASYM
ret
-Function459e:
+SetFacingBigDoll:
ld a, [wVariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS]
- ld d, $17
- cp $33
- jr z, .asm_45ad
- cp $47
- jr z, .asm_45ad
- ld d, $16
-.asm_45ad
- ld hl, $d
+ ld d, FACING_BIG_DOLL_SYM ; symmetric
+ cp SPRITE_BIG_SNORLAX
+ jr z, .ok
+ cp SPRITE_BIG_LAPRAS
+ jr z, .ok
+ ld d, FACING_BIG_DOLL_ASYM ; asymmetric
+
+.ok
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], d
ret
-Function45b3:
- ld hl, $c
+SetFacingBoulderDust:
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
inc [hl]
ld a, [hl]
- ld hl, $d
+
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- and $2
- ld a, $1c
- jr z, .asm_45c4
- inc a
-.asm_45c4
+ and 2
+ ld a, FACING_BOULDER_DUST_1
+ jr z, .ok
+ inc a ; FACING_BOULDER_DUST_2
+.ok
ld [hl], a
ret
-Function45c6:
- ld hl, $c
+SetFacingGrassShake:
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
inc [hl]
ld a, [hl]
- ld hl, $d
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- and $4
- ld a, $1e
- jr z, .asm_45d7
- inc a
-.asm_45d7
+ and 4
+ ld a, FACING_GRASS_1
+ jr z, .ok
+ inc a ; FACING_GRASS_2
+
+.ok
ld [hl], a
ret
diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm
index a59be34f..25f3720f 100755
--- a/engine/overworld/map_objects.asm
+++ b/engine/overworld/map_objects.asm
@@ -2,27 +2,27 @@ INCLUDE "data/sprites/facings.asm"
INCLUDE "data/sprites/map_objects.asm"
-DeleteMapObject:: ; 4358 (1:4358)
+DeleteMapObject::
push bc
- ld hl, $1
+ ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, bc
ld a, [hl]
push af
ld h, b
ld l, c
- ld bc, $28
+ ld bc, OBJECT_LENGTH
xor a
call ByteFill
pop af
- cp $ff
- jr z, .asm_437a
+ cp -1
+ jr z, .ok
bit 7, a
- jr nz, .asm_437a
+ jr nz, .ok
call GetMapObject
- ld hl, $0
+ ld hl, OBJECT_SPRITE
add hl, bc
- ld [hl], $ff
-.asm_437a
+ ld [hl], -1
+.ok
pop bc
ret
@@ -33,306 +33,322 @@ Function437c:
call .HandleObjectAction
ret
-.CheckObjectStillVisible: ; 4387 (1:4387)
- ld hl, $5
+.CheckObjectStillVisible:
+ ld hl, OBJECT_FLAGS2
add hl, bc
- res 6, [hl]
+ res OBJ_FLAGS2_6, [hl]
ld a, [wXCoord]
ld e, a
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_43b3
- cp $c
- jr nc, .asm_43b3
+ jr c, .ok
+ cp MAPOBJECT_SCREEN_WIDTH
+ jr nc, .ok
ld a, [wYCoord]
ld e, a
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_43b3
- cp $b
- jr nc, .asm_43b3
- jr .asm_43dd
+ jr c, .ok
+ cp MAPOBJECT_SCREEN_HEIGHT
+ jr nc, .ok
+ jr .yes
-.asm_43b3
- ld hl, $5
+.ok
+ ld hl, OBJECT_FLAGS2
add hl, bc
- set 6, [hl]
+ set OBJ_FLAGS2_6, [hl]
ld a, [wXCoord]
ld e, a
- ld hl, $14
+ ld hl, OBJECT_INIT_X
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_43df
- cp $c
- jr nc, .asm_43df
+ jr c, .ok2
+ cp MAPOBJECT_SCREEN_WIDTH
+ jr nc, .ok2
ld a, [wYCoord]
ld e, a
- ld hl, $15
+ ld hl, OBJECT_INIT_Y
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_43df
- cp $b
- jr nc, .asm_43df
-.asm_43dd
+ jr c, .ok2
+ cp MAPOBJECT_SCREEN_HEIGHT
+ jr nc, .ok2
+.yes
and a
ret
-.asm_43df
- ld hl, $4
+.ok2
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 1, [hl]
- jr nz, .asm_43ec
+ bit WONT_DELETE_F, [hl]
+ jr nz, .yes2
call DeleteMapObject
scf
ret
-.asm_43ec
- ld hl, $5
+.yes2
+ ld hl, OBJECT_FLAGS2
add hl, bc
- set 6, [hl]
+ set OBJ_FLAGS2_6, [hl]
and a
ret
-.HandleStepType: ; 43f4 (1:43f4)
- ld hl, $9
+.HandleStepType:
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_440a
- ld hl, $5
+ jr z, .zero
+ ld hl, OBJECT_FLAGS2
add hl, bc
- bit 5, [hl]
- jr nz, .asm_4427
- cp $1
- jr z, .asm_4415
- jr .asm_4422
+ bit OBJ_FLAGS2_5, [hl]
+ jr nz, .bit5
+ cp STEP_TYPE_SLEEP
+ jr z, .one
+ jr .ok3
-.asm_440a
+.zero
call ObjectMovementReset
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, bc
- bit 5, [hl]
- jr nz, .asm_4427
-.asm_4415
+ bit OBJ_FLAGS2_5, [hl]
+ jr nz, .bit5
+.one
call MapObjectMovementPattern
- ld hl, $9
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
ld a, [hl]
and a
ret z
- cp $1
+ cp STEP_TYPE_SLEEP
ret z
-.asm_4422
+.ok3
ld hl, StepTypesJumptable
rst JumpTable
ret
-.asm_4427
+.bit5
ret
-.HandleObjectAction: ; 4428 (1:4428)
- ld hl, $4
+.HandleObjectAction:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 0, [hl]
- jr nz, Function44a0
- ld hl, $5
+ bit INVISIBLE_F, [hl]
+ jr nz, SetFacingStanding
+ ld hl, OBJECT_FLAGS2
add hl, bc
- bit 6, [hl]
- jr nz, Function44a0
- bit 5, [hl]
+ bit OBJ_FLAGS2_6, [hl]
+ jr nz, SetFacingStanding
+ bit OBJ_FLAGS2_5, [hl]
jr nz, asm_4449
- ld de, Pointers4460
+ ld de, ObjectActionPairPointers ; use first column
jr _HandleObjectAction
Function4441:
- ld hl, $4
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 0, [hl]
- jr nz, Function44a0
+ bit INVISIBLE_F, [hl]
+ jr nz, SetFacingStanding
asm_4449:
- ld de, Pointers4460 + 2
+ ld de, ObjectActionPairPointers + 2 ; use second column
jr _HandleObjectAction
_HandleObjectAction:
+; call [4 * wObjectStructs[ObjInd, OBJECT_ACTION] + de]
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld a, [hl]
+ ld l, a
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call _hl_
+ ret
+
INCLUDE "engine/overworld/map_object_action.asm"
-CopyNextCoordsTileToStandingCoordsTile: ; 45d9 (1:45d9)
- ld hl, $10
+CopyNextCoordsTileToStandingCoordsTile:
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $12
+ ld hl, OBJECT_MAP_X
add hl, bc
ld [hl], a
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
- ld hl, $13
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld [hl], a
- ld hl, $e
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
- ld hl, $f
+ ld hl, OBJECT_STANDING_TILE
add hl, bc
ld [hl], a
- call SetGrassPriority
- ld hl, $e
+ call SetTallGrassFlags
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call UselessAndA
ret
Function4603:
- ld hl, $12
+ ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld [hl], a
- ld hl, $13
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld [hl], a
ret
-UpdateGrassPriority:
- ld hl, $5
+UpdateTallGrassFlags:
+ ld hl, OBJECT_FLAGS2
add hl, bc
- bit 3, [hl]
- jr z, .asm_4628
- ld hl, $e
+ bit OVERHEAD_F, [hl]
+ jr z, .ok
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
- call SetGrassPriority
-.asm_4628
- ld hl, $e
+ call SetTallGrassFlags
+.ok
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call UselessAndA
- ret c
- ld hl, $f
+ ret c ; never happens
+ ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call UselessAndA
ret
-SetGrassPriority: ; 463a (1:463a)
+SetTallGrassFlags:
call CheckSuperTallGrassTile
- jr z, .asm_4644
+ jr z, .set
call CheckGrassTile
- jr c, .asm_464b
-.asm_4644
- ld hl, $5
+ jr c, .reset
+.set
+ ld hl, OBJECT_FLAGS2
add hl, bc
- set 3, [hl]
+ set OVERHEAD_F, [hl]
ret
-.asm_464b
- ld hl, $5
+.reset
+ ld hl, OBJECT_FLAGS2
add hl, bc
- res 3, [hl]
+ res OVERHEAD_F, [hl]
ret
-UselessAndA: ; 4652 (1:4652)
+UselessAndA:
and a
ret
EndSpriteMovement:
xor a
- ld hl, $c
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], a
- ld hl, $1b
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
ld [hli], a
ld [hli], a
ld [hli], a
- ld [hl], a
- ld hl, $7
+ ld [hl], a ; OBJECT_1E
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
InitStep:
- ld hl, $7
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], a
- ld hl, $4
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 2, [hl]
+ bit FIXED_FACING_F, [hl]
jr nz, GetNextTile
add a
add a
- and $c
- ld hl, $8
+ and %00001100
+ ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
GetNextTile:
call GetStepVector
- ld hl, $a
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld a, d
call GetStepVectorSign
- ld hl, $12
+ ld hl, OBJECT_MAP_X
add hl, bc
add [hl]
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld [hl], a
ld d, a
ld a, e
call GetStepVectorSign
- ld hl, $13
+ ld hl, OBJECT_MAP_Y
add hl, bc
add [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld [hl], a
ld e, a
push bc
call GetCoordTile
pop bc
- ld hl, $e
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld [hl], a
ret
-AddStepVector: ; 46b0 (1:46b0)
+AddStepVector:
call GetStepVector
- ld hl, $17
+ ld hl, OBJECT_SPRITE_X
add hl, bc
ld a, [hl]
add d
ld [hl], a
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, bc
ld a, [hl]
add e
ld [hl], a
ret
-GetStepVector: ; 46c2 (1:46c2)
- ld hl, $7
+GetStepVector:
+; Return (x, y, duration, speed) in (d, e, a, h).
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld a, [hl]
- and $f
+ and %00001111
add a
add a
ld l, a
- ld h, $0
+ ld h, 0
ld de, StepVectors
add hl, de
ld d, [hl]
@@ -343,7 +359,7 @@ GetStepVector: ; 46c2 (1:46c2)
ld h, [hl]
ret
-StepVectors: ; 46d9
+StepVectors:
; x, y, duration, speed
; slow
db 0, 1, 16, 1
@@ -361,19 +377,19 @@ StepVectors: ; 46d9
db -4, 0, 4, 4
db 4, 0, 4, 4
-GetStepVectorSign: ; 4709 (1:4709)
+GetStepVectorSign:
add a
- ret z
- ld a, $1
- ret nc
- ld a, $ff
- ret
+ ret z ; 0 or 128
+ ld a, 1
+ ret nc ; 1 - 127
+ ld a, -1
+ ret ; 129 - 255
UpdatePlayerStep:
- ld hl, $7
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld a, [hl]
- and $3
+ and %00000011
ld [wPlayerStepDirection], a
call AddStepVector
ld a, [wPlayerStepVectorX]
@@ -383,14 +399,14 @@ UpdatePlayerStep:
add e
ld [wPlayerStepVectorY], a
ld hl, wPlayerStepFlags
- set 5, [hl]
+ set PLAYERSTEP_CONTINUE_F, [hl]
ret
Function4732:
push bc
ld e, a
- ld d, $0
- ld hl, $1
+ ld d, 0
+ ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, bc
ld a, [hl]
call GetMapObject
@@ -399,40 +415,1480 @@ Function4732:
pop bc
ret
-INCLUDE "engine/movement_pattern.asm"
-INCLUDE "engine/step_types.asm"
-INCLUDE "engine/overworld/movement.asm"
+RestoreDefaultMovement:
+ ld hl, OBJECT_MAP_OBJECT_INDEX
+ add hl, bc
+ ld a, [hl]
+ cp -1
+ jr z, .ok
+ push bc
+ call GetMapObject
+ ld hl, MAPOBJECT_MOVEMENT
+ add hl, bc
+ ld a, [hl]
+ pop bc
+ ret
+
+.ok
+ ld a, SPRITEMOVEDATA_STANDING_DOWN
+ ret
-Function5429: ; 5429 (1:5429)
+ClearObjectMovementByteIndex:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
+ add hl, bc
+ ld [hl], 0
+ ret
+
+IncrementObjectMovementByteIndex:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
+ add hl, bc
+ inc [hl]
+ ret
+
+DecrementObjectMovementByteIndex:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
+ add hl, bc
+ dec [hl]
+ ret
+
+MovementAnonymousJumptable:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ rst JumpTable
+ ret
+
+ClearObjectStructField1c:
+ ld hl, OBJECT_1C
+ add hl, bc
+ ld [hl], 0
+ ret
+
+IncrementObjectStructField1c:
+ ld hl, OBJECT_1C
+ add hl, bc
+ inc [hl]
+ ret
+
+Field1cAnonymousJumptable:
+ ld hl, OBJECT_1C
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ rst JumpTable
+ ret
+
+GetValueObjectStructField1c:
+ ld hl, OBJECT_1C
+ add hl, bc
+ ld a, [hl]
+ ret
+
+SetValueObjectStructField1c:
+ ld hl, OBJECT_1C
+ add hl, bc
+ ld [hl], a
+ ret
+
+ObjectMovementReset:
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ push bc
+ call GetCoordTile
+ pop bc
+ ld hl, OBJECT_NEXT_TILE
+ add hl, bc
+ ld [hl], a
+ call CopyNextCoordsTileToStandingCoordsTile
+ call EndSpriteMovement
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+MapObjectMovementPattern:
+ call ClearObjectStructField1c
+ call GetSpriteMovementFunction
+ ld a, [hl]
+ ld hl, .Pointers
+ rst JumpTable
+ ret
+
+.Pointers:
+; entries correspond to SPRITEMOVEFN_* constants
+ dw .Null_00 ; 00
+ dw .RandomWalkY ; 01
+ dw .RandomWalkX ; 02
+ dw .RandomWalkXY ; 03
+ dw .RandomSpin1 ; 04
+ dw .RandomSpin2 ; 05
+ dw .Standing ; 06
+ dw .ObeyDPad ; 07
+ dw .Movement08 ; 08
+ dw .Movement09 ; 09
+ dw .Movement0a ; 0a
+ dw .Movement0b ; 0b
+ dw .Movement0c ; 0c
+ dw .Movement0d ; 0d
+ dw .Movement0e ; 0e
+ dw .Follow ; 0f
+ dw .Script ; 10
+ dw .Strength ; 11
+ dw .FollowNotExact ; 12
+ dw .MovementShadow ; 13
+ dw .MovementEmote ; 14
+ dw .MovementBigStanding ; 15
+ dw .MovementBouncing ; 16
+ dw .MovementScreenShake ; 17
+ dw .MovementSpinClockwise ; 18
+ dw .MovementSpinCounterclockwise ; 19
+ dw .MovementBoulderDust ; 1a
+ dw .MovementShakingGrass ; 1b
+
+.Null_00:
+ ret
+
+.RandomWalkY:
+ call Random
+ ldh a, [hRandomAdd]
+ and %00000001
+ jp .RandomWalkContinue
+
+.RandomWalkX:
+ call Random
+ ldh a, [hRandomAdd]
+ and %00000001
+ or %00000010
+ jp .RandomWalkContinue
+
+.RandomWalkXY:
+ call Random
+ ldh a, [hRandomAdd]
+ and %00000011
+ jp .RandomWalkContinue
+
+.RandomSpin1:
+ call Random
+ ldh a, [hRandomAdd]
+ and %00001100
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ jp RandomStepDuration_Slow
+
+.RandomSpin2:
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld a, [hl]
+ and %00001100
+ ld d, a
+ call Random
+ ldh a, [hRandomAdd]
+ and %00001100
+ cp d
+ jr nz, .keep
+ xor %00001100
+.keep
+ ld [hl], a
+ jp RandomStepDuration_Fast
+
+.Standing:
+ call Function4603
+ call EndSpriteMovement
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STAND
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_05
+ ret
+
+.ObeyDPad:
+ ld hl, Function4fa8
+ jp HandleMovementData
+
+.Movement08:
+ ld hl, Function4fbd
+ jp HandleMovementData
+
+.Movement09:
+ ld hl, Function4fce
+ jp HandleMovementData
+
+.Movement0a:
+ jp _GetMovementObject
+
+.Movement0b:
+ jp _GetMovementObject
+
+.Movement0c:
+ jp _GetMovementObject
+
+.Movement0d:
+ ld hl, Function4fa8
+ jp HandleMovementData
+
+.Movement0e:
+ jp _GetMovementObject
+
+.Follow:
+ ld hl, GetFollowerNextMovementByte
+ jp HandleMovementData
+
+.Script:
+ ld hl, GetMovementByte
+ jp HandleMovementData
+
+.Strength:
+ call MovementAnonymousJumptable
+ dw .Strength_Start
+ dw .Strength_Stop
+
+.Strength_Start:
+ ld hl, OBJECT_NEXT_TILE
+ add hl, bc
+ ld a, [hl]
+ call CheckPitTile
+ jr z, .on_pit
+ ld hl, OBJECT_FLAGS2
+ add hl, bc
+ bit OBJ_FLAGS2_2, [hl]
+ res OBJ_FLAGS2_2, [hl]
+ jr z, .ok
+ ld hl, OBJECT_RANGE
+ add hl, bc
+ ld a, [hl]
+ and %00000011
+ or 0
call InitStep
- ld hl, $1f
+ call CanObjectMoveInDirection
+ jr c, .ok2
+ ld de, SFX_STRENGTH
+ call PlaySFX
+ call SpawnStrengthBoulderDust
+ call UpdateTallGrassFlags
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_0F
+ ret
+
+.ok2
+ call Function4603
+.ok
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ret
+
+.on_pit
+ call IncrementObjectMovementByteIndex
+.Strength_Stop:
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ret
+
+.FollowNotExact:
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ ld hl, OBJECT_RANGE
+ add hl, bc
+ ld a, [hl]
+ push bc
+ call GetObjectStruct
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld a, [hl]
+ cp STANDING
+ jr z, .standing
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jr z, .equal
+ jr c, .less
+ ld a, 3
+ jr .done
+
+.less
+ ld a, 2
+ jr .done
+
+.equal
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr z, .standing
+ jr c, .less2
+ ld a, 0
+ jr .done
+
+.less2
+ ld a, 1
+.done
+ ld d, a
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld a, [hl]
+ and %00001100
+ or d
+ pop bc
+ jp NormalStep
+
+.standing
+ pop bc
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STAND
+ ret
+
+.MovementBigStanding:
+ call EndSpriteMovement
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_BIG_DOLL_SYM
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_04
+ ret
+
+.MovementBouncing:
+ call EndSpriteMovement
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_BOUNCE
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_04
+ ret
+
+.MovementSpinCounterclockwise:
+ call MovementAnonymousJumptable
+ dw .MovementSpinInit
+ dw .MovementSpinRepeat
+ dw .MovementSpinTurnLeft
+
+.MovementSpinClockwise:
+ call MovementAnonymousJumptable
+ dw .MovementSpinInit
+ dw .MovementSpinRepeat
+ dw .MovementSpinTurnRight
+
+.MovementSpinInit:
+ call EndSpriteMovement
+ call IncrementObjectMovementByteIndex
+.MovementSpinRepeat:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STAND
+ ld hl, OBJECT_RANGE
+ add hl, bc
+ ld a, [hl]
+ ld a, $10
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_03
+ call IncrementObjectMovementByteIndex
+ ret
+
+.MovementSpinTurnLeft:
+ ld de, .DirectionData_Counterclockwise
+ call .MovementSpinNextFacing
+ jr .MovementSpinCounterclockwise
+
+.DirectionData_Counterclockwise:
+ db OW_RIGHT, OW_LEFT, OW_DOWN, OW_UP
+
+.MovementSpinTurnRight:
+ ld de, .DirectionData_Clockwise
+ call .MovementSpinNextFacing
+ jr .MovementSpinClockwise
+
+.DirectionData_Clockwise:
+ db OW_LEFT, OW_RIGHT, OW_UP, OW_DOWN
+
+.MovementSpinNextFacing:
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld a, [hl]
+ and %00001100
+ rrca
+ rrca
+ push hl
+ ld l, a
+ ld h, 0
+ add hl, de
+ ld a, [hl]
+ pop hl
+ ld [hl], a
+ call DecrementObjectMovementByteIndex
+ ret
+
+.MovementShadow:
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_SHADOW
+ ld hl, OBJECT_STEP_DURATION
+ add hl, de
+ ld a, [hl]
+ inc a
+ add a
+ add 0
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
- ld [hl], $0
- ld hl, $5
+ ld [hl], a
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, de
+ ld a, [hl]
+ maskbits NUM_DIRECTIONS
+ ld d, 1 * 8 + 6
+ cp DOWN
+ jr z, .ok_13
+ cp UP
+ jr z, .ok_13
+ ld d, 1 * 8 + 4
+.ok_13
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
- res 3, [hl]
- ld hl, $b
+ ld [hl], 0
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_TRACKING_OBJECT
+ ret
+
+.MovementEmote:
+ call EndSpriteMovement
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_EMOTE
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], -2 * 8
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_TRACKING_OBJECT
+ ret
+
+.MovementBoulderDust:
+ call EndSpriteMovement
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $2
- call Function54c8
+ ld [hl], OBJECT_ACTION_BOULDER_DUST
+ ld hl, OBJECT_STEP_DURATION
+ add hl, de
+ ld a, [hl]
+ inc a
+ add a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, de
+ ld a, [hl]
+ and %00000011
+ ld e, a
+ ld d, 0
+ ld hl, .data_4a81
+ add hl, de
+ add hl, de
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], e
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_TRACKING_OBJECT
+ ret
+
+.data_4a81
+ ; x, y
+ db 0, -4
+ db 0, 8
+ db 6, 2
+ db -6, 2
+
+.MovementShakingGrass:
+ call EndSpriteMovement
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_GRASS_SHAKE
+ ld hl, OBJECT_STEP_DURATION
+ add hl, de
+ ld a, [hl]
+ add -1
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_TRACKING_OBJECT
+ ret
+
+._MovementShadow_Grass_Emote_BoulderDust:
+ ld hl, OBJECT_RANGE
+ add hl, bc
+ ld a, [hl]
+ push bc
+ call GetObjectStruct
+ ld d, b
+ ld e, c
+ pop bc
+ ld hl, OBJECT_1D
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+.MovementScreenShake:
+ call EndSpriteMovement
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_00
+ ld hl, OBJECT_RANGE
+ add hl, bc
+ ld a, [hl]
+ call ._MovementScreenShake
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], e
+ ld hl, OBJECT_1E
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_15
+ ret
+
+._MovementScreenShake:
+ ld d, a
+ and %00111111
+ ld e, a
+ ld a, d
+ rlca
+ rlca
+ and %00000011
+ ld d, a
+ inc d
+ ld a, 1
+.loop
+ dec d
+ ret z
+ add a
+ jr .loop
+
+.RandomWalkContinue:
+ call InitStep
+ call CanObjectMoveInDirection ; check whether the object can move in that direction
+ jr c, .NewDuration
+ call UpdateTallGrassFlags
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STEP
ld hl, wCenteredObject
ldh a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_5450
- ld hl, $9
+ jr z, .load_6
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_07
+ ret
+
+.load_6
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_PLAYER_WALK
+ ret
+
+.NewDuration:
+ call EndSpriteMovement
+ call Function4603
+RandomStepDuration_Slow:
+ call Random
+ ldh a, [hRandomAdd]
+ and %01111111
+ jr SetRandomStepDuration
+
+RandomStepDuration_Fast:
+ call Random
+ ldh a, [hRandomAdd]
+ and %00011111
+SetRandomStepDuration:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STAND
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_03
+ ret
+
+StepTypesJumptable:
+; entries correspond to STEP_TYPE_* constants
+ dw ObjectMovementReset ; 00
+ dw MapObjectMovementPattern ; 01
+ dw NPCStep ; 02
+ dw StepType03 ; 03
+ dw StepType04 ; 04
+ dw StepType05 ; 05
+ dw PlayerStep ; 06
+ dw StepType07 ; 07
+ dw NPCJump ; 08
+ dw PlayerJump ; 09
+ dw PlayerOrNPCTurnStep ; 0a
+ dw StepTypeBump ; 0b
+ dw TeleportFrom ; 0c
+ dw TeleportTo ; 0d
+ dw Skyfall ; 0e
+ dw StepType0f ; 0f
+ dw GotBiteStep ; 10
+ dw RockSmashStep ; 11
+ dw ReturnDigStep ; 12
+ dw StepTypeTrackingObject ; 13
+ dw StepType14 ; 14
+ dw StepType15 ; 15
+ dw StepType16 ; 16
+ dw StepType17 ; 17
+ dw StepType18 ; 18
+
+WaitStep_InPlace:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+NPCJump:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .Jump
+ dw .Land
+
+.Jump:
+ call AddStepVector
+ call UpdateJumpPosition
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call CopyNextCoordsTileToStandingCoordsTile
+ call GetNextTile
+ ld hl, OBJECT_FLAGS2
add hl, bc
- ld [hl], $8
+ res OVERHEAD_F, [hl]
+ call IncrementObjectStructField1c
ret
-.asm_5450
- ld hl, $9
+.Land:
+ call AddStepVector
+ call UpdateJumpPosition
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call CopyNextCoordsTileToStandingCoordsTile
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+PlayerJump:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .initjump
+ dw .stepjump
+ dw .initland
+ dw .stepland
+
+.initjump
+ ld hl, wPlayerStepFlags
+ set PLAYERSTEP_START_F, [hl]
+ call IncrementObjectStructField1c
+.stepjump
+ call UpdateJumpPosition
+ call UpdatePlayerStep
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call CopyNextCoordsTileToStandingCoordsTile
+ ld hl, OBJECT_FLAGS2
+ add hl, bc
+ res OVERHEAD_F, [hl]
+ ld hl, wPlayerStepFlags
+ set PLAYERSTEP_STOP_F, [hl]
+ set PLAYERSTEP_MIDAIR_F, [hl]
+ call IncrementObjectStructField1c
+ ret
+
+.initland
+ call GetNextTile
+ ld hl, wPlayerStepFlags
+ set PLAYERSTEP_START_F, [hl]
+ call IncrementObjectStructField1c
+.stepland
+ call UpdateJumpPosition
+ call UpdatePlayerStep
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, wPlayerStepFlags
+ set PLAYERSTEP_STOP_F, [hl]
+ call CopyNextCoordsTileToStandingCoordsTile
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $9
+ ld [hl], STEP_TYPE_SLEEP
ret
-Function5457: ; 5457 (1:5457)
+
+TeleportFrom:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .InitSpin
+ dw .DoSpin
+ dw .InitSpinRise
+ dw .DoSpinRise
+
+.InitSpin:
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ call IncrementObjectStructField1c
+.DoSpin:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_SPIN
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call IncrementObjectStructField1c
+ ret
+
+.InitSpinRise:
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_1F
+ add hl, bc
+ ld [hl], $10
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ ld hl, OBJECT_FLAGS2
+ add hl, bc
+ res OVERHEAD_F, [hl]
+ call IncrementObjectStructField1c
+.DoSpinRise:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_SPIN
+ ld hl, OBJECT_1F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld d, $60
+ call Sine
+ ld a, h
+ sub $60
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+TeleportTo:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .InitWait
+ dw .DoWait
+ dw .InitDescent
+ dw .DoDescent
+ dw .InitFinalSpin
+ dw .DoFinalSpin
+ dw .FinishStep
+
+.InitWait:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_00
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ call IncrementObjectStructField1c
+ ret
+
+.DoWait:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call IncrementObjectStructField1c
+.InitDescent:
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_1F
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ call IncrementObjectStructField1c
+ ret
+
+.DoDescent:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_SPIN
+ ld hl, OBJECT_1F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld d, $60
+ call Sine
+ ld a, h
+ sub $60
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call IncrementObjectStructField1c
+.InitFinalSpin:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ call IncrementObjectStructField1c
+ ret
+
+.DoFinalSpin:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_SPIN
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+.FinishStep:
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+Skyfall:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .Init
+ dw .Step
+ dw .Fall
+ dw .Finish
+
+.Init:
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_00
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ call IncrementObjectStructField1c
+.Step:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STEP
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_1F
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 16
+ call IncrementObjectStructField1c
+.Fall:
+ ld hl, OBJECT_1F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld d, $60
+ call Sine
+ ld a, h
+ sub $60
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call IncrementObjectStructField1c
+.Finish:
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+GotBiteStep:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .Init
+ dw .Run
+
+.Init:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 8
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], 0
+ call IncrementObjectStructField1c
+.Run:
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld a, [hl]
+ xor 1
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], 0
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+RockSmashStep:
+ call .Step
+ jp WaitStep_InPlace
+
+.Step:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld a, [hl]
+ and %00000001
+ ld a, OBJECT_ACTION_STAND
+ jr z, .yes
+ ld a, OBJECT_ACTION_00
+.yes
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], a
+ ret
+
+ReturnDigStep:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld a, [hl]
+ and %00000001
+ ld a, OBJECT_ACTION_SPIN
+ jr z, .yes
+ ld a, OBJECT_ACTION_SPIN_FLICKER
+.yes
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], a
+ jp WaitStep_InPlace
+
+StepType03:
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+StepType18:
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ jp DeleteMapObject
+
+StepTypeBump:
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+StepType05:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .Reset
+ dw StepType04
+
+.Reset:
+ call RestoreDefaultMovement
+ call GetInitialFacing
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ call IncrementObjectStructField1c
+StepType04:
+ call Stubbed_Function4fb2
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ret
+
+NPCStep:
+ call Stubbed_Function4fb2
+ call AddStepVector
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call CopyNextCoordsTileToStandingCoordsTile
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+StepType07:
+ call AddStepVector
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call CopyNextCoordsTileToStandingCoordsTile
+ jp RandomStepDuration_Slow
+
+PlayerStep:
+; AnimateStep?
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .init
+ dw .step
+
+.init
+ ld hl, wPlayerStepFlags
+ set PLAYERSTEP_START_F, [hl]
+ call IncrementObjectStructField1c
+.step
+ call UpdatePlayerStep
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, wPlayerStepFlags
+ set PLAYERSTEP_STOP_F, [hl]
+ call CopyNextCoordsTileToStandingCoordsTile
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+PlayerOrNPCTurnStep:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .init1
+ dw .step1
+ dw .init2
+ dw .step2
+
+.init1
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_FRAME
+ add hl, bc
+ ld a, [hl]
+ ld [hl], 2
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 2
+ call IncrementObjectStructField1c
+.step1
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call IncrementObjectStructField1c
+.init2
+ ld hl, OBJECT_1D ; new facing
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], 2
+ call IncrementObjectStructField1c
+.step2
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+StepType0f:
+ call AddStepVector
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ push bc
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ ld hl, OBJECT_MAP_OBJECT_INDEX
+ add hl, bc
+ ld a, [hl]
+ ld b, a
+ farcall CopyDECoordsToMapObject
+ pop bc
+ ld hl, OBJECT_FLAGS2
+ add hl, bc
+ res OBJ_FLAGS2_2, [hl]
+ call CopyNextCoordsTileToStandingCoordsTile
+ ld hl, OBJECT_DIRECTION_WALKING
+ add hl, bc
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_SLEEP
+ ret
+
+StepTypeTrackingObject:
+ ld hl, OBJECT_1D
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, OBJECT_SPRITE
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .nope
+ ld hl, OBJECT_SPRITE_X
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_X
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_SPRITE_Y
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ ret nz
+.nope
+ jp DeleteMapObject
+
+StepType14:
+StepType15:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .Init
+ dw .Run
+
+.Init:
+ xor a
+ ld hl, OBJECT_1D
+ add hl, bc
+ ld [hl], a
+ call IncrementObjectStructField1c
+.Run:
+ ld hl, OBJECT_1D
+ add hl, bc
+ ld d, [hl]
+ ld a, [wPlayerStepVectorY]
+ sub d
+ ld [wPlayerStepVectorY], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ jr z, .ok
+ ld a, [hl]
+ call .GetSign
+ ld hl, OBJECT_1D
+ add hl, bc
+ ld [hl], a
+ ld d, a
+ ld a, [wPlayerStepVectorY]
+ add d
+ ld [wPlayerStepVectorY], a
+ ret
+
+.ok
+ call DeleteMapObject
+ ret
+
+.GetSign:
+ ld hl, OBJECT_1E
+ add hl, bc
+ and 1
+ ld a, [hl]
+ ret z
+ cpl
+ inc a
+ ret
+
+StepType16:
+ call Field1cAnonymousJumptable ; ????
+StepType17:
+ call Field1cAnonymousJumptable
+; anonymous dw
+ dw .null
+ dw .null
+ dw .null
+.null
+
+Stubbed_Function4fb2:
+ ret
+ ld hl, OBJECT_1D
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ srl a
+ srl a
+ and %00000111
+ ld l, a
+ ld h, 0
+ ld de, .y
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+.y
+ db 0, -1, -2, -3, -4, -3, -2, -1
+UpdateJumpPosition:
+ call GetStepVector
+ ld a, h
+ ld hl, OBJECT_1F
+ add hl, bc
+ ld e, [hl]
+ add e
+ ld [hl], a
+ nop
+ srl e
+ ld d, 0
+ ld hl, .y
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+.y
+ db -4, -6, -8, -10, -11, -12, -12, -12
+ db -11, -10, -9, -8, -6, -4, 0, 0
+
+Function4fa8: ; unscripted?
+; copy [wPlayerNextMovement] to [wPlayerMovement]
+ ld a, [wPlayerNextMovement]
+ ld hl, wPlayerMovement
+ ld [hl], a
+; load [wPlayerNextMovement] with movement_step_sleep
+ ld a, movement_step_sleep
+ ld [wPlayerNextMovement], a
+; recover the previous value of [wPlayerNextMovement]
+ ld a, [hl]
+ ret
+
+GetMovementByte:
+ ld hl, wMovementDataBank
+ call _GetMovementByte
+ ret
+
+Function4fbd:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
+ add hl, bc
+ ld e, [hl]
+ inc [hl]
+ ld d, 0
+ ld hl, wMovementObject
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld a, [hl]
+ ret
+
+Function4fce:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
+ add hl, bc
+ ld e, [hl]
+ inc [hl]
+ ld d, 0
+ ld hl, wce8f
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld a, [hl]
+ ret
+
+_GetMovementObject:
+ ld hl, GetMovementObject
+ jp HandleMovementData
+
+GetMovementObject:
+ ld a, [wMovementObject]
+ ret
+
+HandleMovementData:
+ call .StorePointer
+.loop
+ xor a
+ ld [wMovementByteWasControlSwitch], a
+ call JumpMovementPointer
+ call DoMovementFunction
+ ld a, [wMovementByteWasControlSwitch]
+ and a
+ jr nz, .loop
+ ret
+
+.StorePointer:
+ ld a, l
+ ld [wMovementPointer], a
+ ld a, h
+ ld [wMovementPointer + 1], a
+ ret
+
+JumpMovementPointer:
+ ld hl, wMovementPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+ContinueReadingMovement:
+ ld a, 1
+ ld [wMovementByteWasControlSwitch], a
+ ret
+
+DoMovementFunction:
+ push af
+ call ApplyMovementToFollower
+ pop af
+ ld hl, MovementPointers
+ rst JumpTable
+ ret
+
+INCLUDE "engine/overworld/movement.asm"
+
+ApplyMovementToFollower:
ld e, a
ld a, [wObjectFollow_Follower]
- cp $ff
+ cp -1
ret z
ld a, [wObjectFollow_Leader]
ld d, a
@@ -440,21 +1896,21 @@ Function5457: ; 5457 (1:5457)
cp d
ret nz
ld a, e
- cp $3e
+ cp movement_step_sleep
ret z
- cp $47
+ cp movement_step_end
ret z
- cp $4b
+ cp movement_step_4b
ret z
- cp $50
+ cp movement_step_bump
ret z
- cp $8
+ cp movement_slow_step
ret c
push af
ld hl, wFollowerMovementQueueLength
inc [hl]
ld e, [hl]
- ld d, $0
+ ld d, 0
ld hl, wFollowMovementQueue
add hl, de
pop af
@@ -465,143 +1921,149 @@ GetFollowerNextMovementByte:
ld hl, wFollowerMovementQueueLength
ld a, [hl]
and a
- jr z, .asm_54a2
- cp $ff
- jr z, .asm_54a2
+ jr z, .done
+ cp -1
+ jr z, .done
dec [hl]
ld e, a
- ld d, $0
+ ld d, 0
ld hl, wFollowMovementQueue
add hl, de
inc e
- ld a, $ff
-.asm_549b
+ ld a, -1
+.loop
ld d, [hl]
ld [hld], a
ld a, d
dec e
- jr nz, .asm_549b
+ jr nz, .loop
ret
-.asm_54a2
- call Function54a9
+.done
+ call .CancelFollowIfLeaderMissing
ret c
- ld a, $3e
+ ld a, movement_step_sleep
ret
-Function54a9: ; 54a9 (1:54a9)
+.CancelFollowIfLeaderMissing:
ld a, [wObjectFollow_Leader]
- cp $ff
- jr z, .asm_54bf
+ cp -1
+ jr z, .nope
push bc
call GetObjectStruct
- ld hl, $0
+ ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
pop bc
and a
- jr z, .asm_54bf
+ jr z, .nope
and a
ret
-.asm_54bf
- ld a, $ff
+.nope
+ ld a, -1
ld [wObjectFollow_Follower], a
- ld a, $47
+ ld a, movement_step_end
scf
ret
-Function54c8: ; 54c8 (1:54c8)
+SpawnShadow:
push bc
- ld de, .data
- call Function5558
- call Function554b
+ ld de, .ShadowObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data db $fc, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW
+.ShadowObject:
+ ; vtile, palette, movement
+ db $fc, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW
-Function54d7: ; 54d7 (1:54d7)
+SpawnStrengthBoulderDust:
push bc
- ld de, .data
- call Function5558
- call Function554b
+ ld de, .BoulderDustObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data db $fe, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST
+.BoulderDustObject:
+ db $fe, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST
-Function54e6: ; 54e6 (1:54e6)
+SpawnEmote:
push bc
- ld de, .data
- call Function5558
- call Function554b
+ ld de, .EmoteObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data db $f8, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE
+.EmoteObject:
+ db $f8, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE
-Function54f5: ; 54f5 (1:54f5)
+ShakeGrass:
push bc
- ld de, .data
- call Function5558
- call Function554b
+ ld de, .GrassObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data db $fe, PAL_OW_TREE, SPRITEMOVEDATA_GRASS
+.GrassObject
+ db $fe, PAL_OW_TREE, SPRITEMOVEDATA_GRASS
-Function5504: ; 5504 (1:5504)
+ShakeScreen:
push bc
push af
- ld de, .data
- call Function5558
+ ld de, .ScreenShakeObject
+ call CopyTempObjectData
pop af
- ld [wce9e], a
- call Function554b
+ ld [wTempObjectCopyRange], a
+ call InitTempObject
pop bc
ret
-.data db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE
+.ScreenShakeObject:
+ db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE
-Function5518: ; 5518 (1:5518)
+DespawnEmote:
push bc
ldh a, [hMapObjectIndexBuffer]
ld c, a
- call Function5521
+ call .DeleteEmote
pop bc
ret
-Function5521: ; 5521 (1:5521)
- ld de, wPlayerStruct
- ld a, $d
-.asm_5526
+.DeleteEmote:
+ ld de, wObjectStructs
+ ld a, NUM_OBJECT_STRUCTS
+.loop
push af
- ld hl, $4
+ ld hl, OBJECT_FLAGS1
add hl, de
- bit 7, [hl]
- jr z, .asm_5540
- ld hl, $0
+ bit EMOTE_OBJECT_F, [hl]
+ jr z, .next
+ ld hl, OBJECT_SPRITE
add hl, de
ld a, [hl]
and a
- jr z, .asm_5540
+ jr z, .next
push bc
xor a
- ld bc, $28
+ ld bc, OBJECT_LENGTH
call ByteFill
pop bc
-.asm_5540
- ld hl, $28
+.next
+ ld hl, OBJECT_LENGTH
add hl, de
ld d, h
ld e, l
pop af
dec a
- jr nz, .asm_5526
+ jr nz, .loop
ret
-Function554b: ; 554b (1:554b)
+InitTempObject:
call FindFirstEmptyObjectStruct
ret nc
ld d, h
@@ -609,11 +2071,14 @@ Function554b: ; 554b (1:554b)
farcall CopyTempObjectToObjectStruct
ret
-Function5558: ; 5558 (1:5558)
- ld hl, wce99
- ld [hl], $ff
+CopyTempObjectData:
+; load into wTempObjectCopy:
+; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [NextMapX], [NextMapY], -1
+; This spawns the object at the same place as whichever object is loaded into bc.
+ ld hl, wTempObjectCopyMapObjectIndex
+ ld [hl], -1
inc hl
- ld [hl], $ff
+ ld [hl], -1
inc hl
ld a, [de]
inc de
@@ -626,10 +2091,10 @@ Function5558: ; 5558 (1:5558)
ldh a, [hMapObjectIndexBuffer]
ld [hli], a
push hl
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
pop hl
@@ -637,56 +2102,57 @@ Function5558: ; 5558 (1:5558)
inc hl
ld [hl], e
inc hl
- ld [hl], $ff
+ ld [hl], -1
ret
-Function557f:: ; 557f (1:557f)
+Function557f::
ld a, [wVramState]
bit 0, a
ret z
- ld bc, wPlayerStruct
+ ld bc, wObjectStructs
xor a
-.asm_5589
- ldh [hConnectionStripLength], a
+.loop
+ ldh [hMapObjectIndexBuffer], a
call DoesObjectHaveASprite
- jr z, .asm_5593
+ jr z, .ok
call Function55ef
-.asm_5593
- ld hl, $28
+.ok
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hMapObjectIndexBuffer]
inc a
- cp $d
- jr nz, .asm_5589
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
ret
Function55a1:
- call Function55d8
- ld a, $0
- call Function55bc
+; called at battle start
+ call Function55d8 ; clear sprites
+ ld a, PLAYER
+ call Function55bc ; respawn player
ld a, [wBattleScriptFlags]
bit 7, a
- jr z, .asm_55b8
+ jr z, .ok
ldh a, [hLastTalked]
and a
- jr z, .asm_55b8
- call Function55bc
-.asm_55b8
+ jr z, .ok
+ call Function55bc ; respawn opponent
+.ok
call _UpdateSprites
ret
-Function55bc: ; 55bc (1:55bc)
- cp $10
+Function55bc:
+ cp NUM_OBJECTS
ret nc
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
+ cp -1
ret z
- cp $d
+ cp NUM_OBJECT_STRUCTS
ret nc
call GetObjectStruct
call DoesObjectHaveASprite
@@ -694,209 +2160,211 @@ Function55bc: ; 55bc (1:55bc)
call Function5606
ret
-Function55d8: ; 55d8 (1:55d8)
+Function55d8:
xor a
- ld bc, wPlayerStruct
-.asm_55dc
+ ld bc, wObjectStructs
+.loop
ldh [hMapObjectIndexBuffer], a
- call Function5613
- ld hl, $28
+ call SetFacing_Standing
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
inc a
- cp $d
- jr nz, .asm_55dc
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
ret
-Function55ef: ; 55ef (1:55ef)
+Function55ef:
push bc
call Function5660
pop bc
- jr c, Function5613
+ jr c, SetFacing_Standing
call Function5636
- jr c, Function5613
+ jr c, SetFacing_Standing
call Function561b
- farcall Function4441 ; same bank
+ farcall Function4441
xor a
ret
-Function5606: ; 5606 (1:5606)
+Function5606:
call Function5636
- jr c, Function5613
- farcall Function4441 ; same bank
+ jr c, SetFacing_Standing
+ farcall Function4441
xor a
ret
-Function5613: ; 5613 (1:5613)
- ld hl, $d
+SetFacing_Standing:
+ ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
scf
ret
-Function561b: ; 561b (1:561b)
+Function561b:
push bc
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
call GetCoordTile
pop bc
- ld hl, $e
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld [hl], a
- farcall UpdateGrassPriority ; same bank
+ farcall UpdateTallGrassFlags ; no need to farcall
ret
-Function5636: ; 5636 (1:5636)
- ld hl, $10
+Function5636:
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
inc d
inc e
ld a, [wXCoord]
cp d
- jr z, .asm_564f
- jr nc, .asm_565e
- add $b
+ jr z, .equal_x
+ jr nc, .nope
+ add MAPOBJECT_SCREEN_WIDTH - 1
cp d
- jr c, .asm_565e
-.asm_564f
+ jr c, .nope
+.equal_x
ld a, [wYCoord]
cp e
- jr z, .asm_565c
- jr nc, .asm_565e
- add $a
+ jr z, .equal_y
+ jr nc, .nope
+ add MAPOBJECT_SCREEN_HEIGHT - 1
cp e
- jr c, .asm_565e
-.asm_565c
+ jr c, .nope
+.equal_y
xor a
ret
-.asm_565e
+.nope
scf
ret
-Function5660: ; 5660 (1:5660)
- ld a, [wce81]
+Function5660:
+ ld a, [wPlayerBGMapOffsetX]
ld d, a
- ld hl, $19
+ ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld a, [hl]
- ld hl, $17
+ ld hl, OBJECT_SPRITE_X
add hl, bc
add [hl]
add d
cp $f0
- jr nc, .asm_5678
+ jr nc, .ok1
cp $a0
- jp nc, Function56fb
-.asm_5678
- and $7
- ld d, $2
- cp $4
- jr c, .asm_5682
- ld d, $3
-.asm_5682
+ jp nc, .nope
+.ok1
+ and %00000111
+ ld d, 2
+ cp 4
+ jr c, .ok2
+ ld d, 3
+.ok2
ld a, [hl]
srl a
srl a
srl a
- cp $14
- jr c, .asm_568f
- sub $20
-.asm_568f
- ldh [hUsedSpriteIndex], a
- ld a, [wce82]
+ cp SCREEN_WIDTH
+ jr c, .ok3
+ sub BG_MAP_WIDTH
+.ok3
+ ldh [hCurSpriteXCoord], a
+ ld a, [wPlayerBGMapOffsetY]
ld e, a
- ld hl, $1a
+ ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld a, [hl]
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, bc
add [hl]
add e
cp $f0
- jr nc, .asm_56a8
+ jr nc, .ok4
cp $90
- jr nc, Function56fb
-.asm_56a8
- and $7
- ld e, $2
- cp $4
- jr c, .asm_56b2
- ld e, $3
-.asm_56b2
+ jr nc, .nope
+.ok4
+ and %00000111
+ ld e, 2
+ cp 4
+ jr c, .ok5
+ ld e, 3
+.ok5
ld a, [hl]
srl a
srl a
srl a
- cp $12
- jr c, .asm_56bf
- sub $20
-.asm_56bf
- ldh [hUsedSpriteTile], a
- ld hl, $6
- add hl, bc
- bit 7, [hl]
- jr z, .asm_56d1
+ cp SCREEN_HEIGHT
+ jr c, .ok6
+ sub BG_MAP_HEIGHT
+.ok6
+ ldh [hCurSpriteYCoord], a
+ ld hl, OBJECT_PALETTE
+ add hl, bc
+ bit BIG_OBJECT_F, [hl]
+ jr z, .ok7
ld a, d
- add $2
+ add 2
ld d, a
ld a, e
- add $2
+ add 2
ld e, a
-.asm_56d1
+.ok7
ld a, d
- ldh [hFFC1], a
-.asm_56d4
- ldh a, [hFFC1]
+ ldh [hCurSpriteXPixel], a
+.loop
+ ldh a, [hCurSpriteXPixel]
ld d, a
- ldh a, [hUsedSpriteTile]
+ ldh a, [hCurSpriteYCoord]
add e
dec a
- cp $12
- jr nc, .asm_56f6
+ cp SCREEN_HEIGHT
+ jr nc, .ok9
ld b, a
-.asm_56e0
- ldh a, [hUsedSpriteIndex]
+.next
+ ldh a, [hCurSpriteXCoord]
add d
dec a
- cp $14
- jr nc, .asm_56f3
+ cp SCREEN_WIDTH
+ jr nc, .ok8
ld c, a
push bc
call Coord2Tile
pop bc
+; NPCs disappear if standing on tile $60-$7f (or $e0-$ff),
+; since those IDs are for text characters and textbox frames.
ld a, [hl]
- cp $60
- jr nc, Function56fb
-.asm_56f3
+ cp FIRST_REGULAR_TEXT_CHAR
+ jr nc, .nope
+.ok8
dec d
- jr nz, .asm_56e0
-.asm_56f6
+ jr nz, .next
+.ok9
dec e
- jr nz, .asm_56d4
+ jr nz, .loop
and a
ret
-Function56fb: ; 56fb (1:56fb)
+.nope
scf
ret
HandleNPCStep::
- call Function5704
- call Function5714
+ call .ResetStepVector
+ call .DoStepsForAllObjects
ret
-Function5704: ; 5704 (1:5704)
+.ResetStepVector:
xor a
ld [wPlayerStepVectorX], a
ld [wPlayerStepVectorY], a
@@ -905,119 +2373,119 @@ Function5704: ; 5704 (1:5704)
ld [wPlayerStepDirection], a
ret
-Function5714: ; 5714 (1:5714)
- ld bc, wPlayerSprite
+.DoStepsForAllObjects:
+ ld bc, wObjectStructs
xor a
-.asm_5718
+.loop
ldh [hMapObjectIndexBuffer], a
call DoesObjectHaveASprite
- jr z, .asm_5722
+ jr z, .next
call Function437c
-.asm_5722
- ld hl, $28
+.next
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
inc a
- cp $d
- jr nz, .asm_5718
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
ret
-RefreshPlayerSprite:: ; 5730 (1:5730)
- ld a, $3e
- ld [wce87], a
- ld [wce88], a
+RefreshPlayerSprite::
+ ld a, movement_step_sleep
+ ld [wPlayerNextMovement], a
+ ld [wPlayerMovement], a
xor a
ld [wPlayerTurningDirection], a
ld [wPlayerObjectStepFrame], a
- call Function574f
+ call .TryResetPlayerAction
farcall CheckWarpFacingDown
call c, SpawnInFacingDown
- call Function5761
+ call .SpawnInCustomFacing
ret
-Function574f: ; 574f (1:574f)
+.TryResetPlayerAction:
ld hl, wPlayerSpriteSetupFlags
bit 7, [hl]
- jr nz, .asm_575b
+ jr nz, .ok
bit 6, [hl]
- jr nz, .asm_575b
+ jr nz, .ok
ret
-.asm_575b
- ld a, $0
+.ok
+ ld a, OBJECT_ACTION_00
ld [wPlayerAction], a
ret
-Function5761: ; 5761 (1:5761)
+.SpawnInCustomFacing:
ld hl, wPlayerSpriteSetupFlags
- bit 5, [hl]
+ bit PLAYERSPRITESETUP_CUSTOM_FACING_F, [hl]
ret z
ld a, [wPlayerSpriteSetupFlags]
- and $3
+ and PLAYERSPRITESETUP_FACING_MASK
add a
add a
- jr asm_5772
+ jr ContinueSpawnFacing
SpawnInFacingDown:
- ld a, $0
-asm_5772:
- ld bc, wObjectStructs
+ ld a, DOWN
+ContinueSpawnFacing:
+ ld bc, wPlayerStruct
call SetSpriteDirection
ret
StartFollow::
push bc
ld a, b
- call Function578b
+ call SetLeaderIfVisible
pop bc
ret c
ld a, c
- call Function57a2
+ call SetFollowerIfVisible
farcall QueueFollowerFirstStep
ret
-Function578b: ; 578b (1:578b)
+SetLeaderIfVisible:
call CheckObjectVisibility
ret c
ldh a, [hObjectStructIndexBuffer]
ld [wObjectFollow_Leader], a
ret
-StopFollow:: ; 5795 (1:5795)
- call Function579c
- call Function57bd
+StopFollow::
+ call ResetLeader
+ call ResetFollower
ret
-Function579c: ; 579c (1:579c)
- ld a, $ff
+ResetLeader:
+ ld a, -1
ld [wObjectFollow_Leader], a
ret
-Function57a2: ; 57a2 (1:57a2)
+SetFollowerIfVisible:
push af
- call Function57bd
+ call ResetFollower
pop af
call CheckObjectVisibility
ret c
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
- ld [hl], $13
- ld hl, $9
+ ld [hl], SPRITEMOVEDATA_FOLLOWING
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $0
- ldh a, [hConnectedMapWidth]
+ ld [hl], STEP_TYPE_00
+ ldh a, [hObjectStructIndexBuffer]
ld [wObjectFollow_Follower], a
ret
-Function57bd: ; 57bd (1:57bd)
+ResetFollower:
ld a, [wObjectFollow_Follower]
- cp $ff
+ cp -1
ret z
call GetObjectStruct
- farcall Function5859 ; same bank
- ld a, $ff
+ farcall Function5859 ; no need to bankswitch
+ ld a, -1
ld [wObjectFollow_Follower], a
ret
@@ -1028,134 +2496,138 @@ SetFlagsForMovement_1::
push bc
call Function57f0
pop bc
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, bc
- res 5, [hl]
+ res OBJ_FLAGS2_5, [hl]
xor a
ret
Function57e4:
call CheckObjectVisibility
ret c
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, bc
- set 5, [hl]
+ set OBJ_FLAGS2_5, [hl]
xor a
ret
-Function57f0: ; 57f0 (1:57f0)
- ld bc, wPlayerStruct
+Function57f0:
+ ld bc, wObjectStructs
xor a
-.asm_57f4
+.loop
push af
call DoesObjectHaveASprite
- jr z, .asm_5800
- ld hl, $5
+ jr z, .next
+ ld hl, OBJECT_FLAGS2
add hl, bc
- set 5, [hl]
-.asm_5800
- ld hl, $28
+ set OBJ_FLAGS2_5, [hl]
+.next
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
pop af
inc a
- cp $d
- jr nz, .asm_57f4
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
ret
_SetFlagsForMovement_2::
ld a, [wObjectFollow_Leader]
- cp $ff
+ cp -1
ret z
push bc
call GetObjectStruct
- ld hl, $1
+ ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, bc
ld a, [hl]
pop bc
cp c
ret nz
ld a, [wObjectFollow_Follower]
- cp $ff
+ cp -1
ret z
call GetObjectStruct
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, bc
- res 5, [hl]
+ res OBJ_FLAGS2_5, [hl]
ret
Function582f::
push bc
- ld bc, wPlayerSprite
+ ld bc, wObjectStructs
xor a
-.asm_5834
+.loop
push af
call DoesObjectHaveASprite
- jr z, .asm_5840
- ld hl, $5
+ jr z, .next
+ ld hl, OBJECT_FLAGS2
add hl, bc
- res 5, [hl]
-.asm_5840
- ld hl, $28
+ res OBJ_FLAGS2_5, [hl]
+.next
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
pop af
inc a
- cp $d
- jr nz, .asm_5834
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
pop bc
ret
Function584e:
call CheckObjectVisibility
ret c
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, bc
- res 5, [hl]
+ res OBJ_FLAGS2_5, [hl]
ret
-Function5859:
- ld hl, $1
+Function5859::
+ ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, bc
ld a, [hl]
- cp $ff
- jp z, Function5879
+ cp -1
+ jp z, Function5879 ; a jr would have been appropriate here
push bc
call GetMapObject
- ld hl, $4
+ ld hl, MAPOBJECT_MOVEMENT
add hl, bc
ld a, [hl]
pop bc
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld [hl], a
- ld hl, $9
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $0
+ ld [hl], STEP_TYPE_00
ret
-Function5879: ; 5879 (1:5879)
+Function5879:
call GetSpriteDirection
rrca
rrca
ld e, a
- ld d, $0
- ld hl, .data
+ ld d, 0
+ ld hl, .standing_movefns
add hl, de
ld a, [hl]
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld [hl], a
- ld hl, $9
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $0
+ ld [hl], STEP_TYPE_00
ret
-.data db 6,7,8,9
+.standing_movefns
+ db SPRITEMOVEDATA_STANDING_DOWN
+ db SPRITEMOVEDATA_STANDING_UP
+ db SPRITEMOVEDATA_STANDING_LEFT
+ db SPRITEMOVEDATA_STANDING_RIGHT
-_UpdateSprites:: ; 5896 (1:5896)
+_UpdateSprites::
ld a, [wVramState]
bit 0, a
ret z
@@ -1163,119 +2635,124 @@ _UpdateSprites:: ; 5896 (1:5896)
ldh [hUsedSpriteIndex], a
ldh a, [hOAMUpdate]
push af
- ld a, $1
+ ld a, 1
ldh [hOAMUpdate], a
- call Function58fe
- call Function58b0
+ call InitSprites
+ call .fill
pop af
ldh [hOAMUpdate], a
ret
-Function58b0: ; 58b0 (1:58b0)
- ld b, $a0
+.fill
+ ld b, OBJECT_LENGTH * SPRITEOAMSTRUCT_LENGTH
ldh a, [hUsedSpriteIndex]
cp b
ret nc
ld l, a
- ld h, wVirtualOAM / $100
- ld de, $4
+ ld h, HIGH(wVirtualOAM)
+ ld de, SPRITEOAMSTRUCT_LENGTH
ld a, b
- ld c, $a0
-.asm_58bf
- ld [hl], c
+ ld c, SCREEN_HEIGHT_PX + 2 * TILE_WIDTH
+.loop
+ ld [hl], c ; y
add hl, de
cp l
- jr nz, .asm_58bf
+ jr nz, .loop
ret
-ApplyBGMapAnchorToObjects:: ; 58c5 (1:58c5)
+ApplyBGMapAnchorToObjects::
push hl
push de
push bc
- ld a, [wce81]
+ ld a, [wPlayerBGMapOffsetX]
ld d, a
- ld a, [wce82]
+ ld a, [wPlayerBGMapOffsetY]
ld e, a
- ld bc, wPlayerStruct
- ld a, $d
-.asm_58d5
+ ld bc, wObjectStructs
+ ld a, NUM_OBJECT_STRUCTS
+.loop
push af
call DoesObjectHaveASprite
- jr z, .asm_58e9
- ld hl, $17
+ jr z, .skip
+ ld hl, OBJECT_SPRITE_X
add hl, bc
ld a, [hl]
add d
ld [hl], a
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, bc
ld a, [hl]
add e
ld [hl], a
-.asm_58e9
- ld hl, $28
+.skip
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
pop af
dec a
- jr nz, .asm_58d5
+ jr nz, .loop
xor a
- ld [wce81], a
- ld [wce82], a
+ ld [wPlayerBGMapOffsetX], a
+ ld [wPlayerBGMapOffsetY], a
pop bc
pop de
pop hl
ret
-Function58fe: ; 58fe (1:58fe)
- call Function5911
- ld c, $30
- call Function5960
- ld c, $20
- call Function5960
- ld c, $10
- call Function5960
+PRIORITY_LOW EQU $10
+PRIORITY_NORM EQU $20
+PRIORITY_HIGH EQU $30
+
+InitSprites:
+ call .DeterminePriorities
+ ld c, PRIORITY_HIGH
+ call .InitSpritesByPriority
+ ld c, PRIORITY_NORM
+ call .InitSpritesByPriority
+ ld c, PRIORITY_LOW
+ call .InitSpritesByPriority
ret
-Function5911: ; 5911 (1:5911)
+.DeterminePriorities:
xor a
- ld hl, wce94
- ld bc, $d
+ ld hl, wMovementPointer
+ ld bc, NUM_OBJECT_STRUCTS
call ByteFill
- ld d, $0
+ ld d, 0
ld bc, wObjectStructs
- ld hl, wce94
-.asm_5923
+ ld hl, wMovementPointer
+.loop
push hl
call DoesObjectHaveASprite
- jr z, .asm_5946
- ld hl, $d
+ jr z, .skip
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_5946
- ld e, $10
- ld hl, $5
- add hl, bc
- bit 0, [hl]
- jr nz, .asm_594f
- ld e, $20
- bit 1, [hl]
- jr z, .asm_594f
- ld e, $30
- jr .asm_594f
-
-.asm_5946
- ld hl, $28
+ cp STANDING
+ jr z, .skip
+; Define the sprite priority.
+ ld e, PRIORITY_LOW
+ ld hl, OBJECT_FLAGS2
+ add hl, bc
+ bit LOW_PRIORITY_F, [hl]
+ jr nz, .add
+ ld e, PRIORITY_NORM
+ bit HIGH_PRIORITY_F, [hl]
+ jr z, .add
+ ld e, PRIORITY_HIGH
+ jr .add
+
+.skip
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
pop hl
- jr .asm_5959
+ jr .next
-.asm_594f
- ld hl, $28
+.add
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
@@ -1283,93 +2760,94 @@ Function5911: ; 5911 (1:5911)
ld a, d
or e
ld [hli], a
-.asm_5959
+.next
inc d
ld a, d
- cp $d
- jr nz, .asm_5923
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
ret
-Function5960: ; 5960 (1:5960)
- ld hl, wce94
-.asm_5963
+.InitSpritesByPriority:
+ ld hl, wMovementPointer
+.next_sprite
ld a, [hli]
ld d, a
and $f0
ret z
cp c
- jr nz, .asm_5963
+ jr nz, .next_sprite
push bc
push hl
ld a, d
and $f
- call Function5a27
- call Function597a
+ call .GetObjectStructPointer
+ call .InitSprite
pop hl
pop bc
- jr .asm_5963
+ jr .next_sprite
-Function597a: ; 597a (1:597a)
+.InitSprite:
xor a
- ld hl, $5
+.skip1
+ ld hl, OBJECT_FLAGS2
add hl, bc
ld e, [hl]
- bit 7, e
- jr z, .asm_5986
- or $80
-.asm_5986
- bit 4, e
- jr z, .asm_598c
- or $10
-.asm_598c
- ld hl, $6
+ bit OBJ_FLAGS2_7, e
+ jr z, .skip2
+ or PRIORITY
+.skip2
+ bit USE_OBP1_F, e
+ jr z, .skip3
+ or OBP_NUM
+.skip3
+ ld hl, OBJECT_PALETTE
add hl, bc
ld d, a
ld a, [hl]
- and $7
+ and PALETTE_MASK
or d
ld d, a
xor a
- bit 3, e
- jr z, .asm_599d
- or $80
-.asm_599d
- ldh [hFFC4], a
- ld hl, $2
+ bit OVERHEAD_F, e
+ jr z, .skip4
+ or PRIORITY
+.skip4
+ ldh [hCurSpriteOAMFlags], a
+ ld hl, OBJECT_SPRITE_TILE
add hl, bc
ld a, [hl]
- ldh [hFFC3], a
- ld hl, $17
+ ldh [hCurSpriteTile], a
+ ld hl, OBJECT_SPRITE_X
add hl, bc
ld a, [hl]
- ld hl, $19
+ ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
add [hl]
- add $8
+ add 8
ld e, a
- ld a, [wce81]
+ ld a, [wPlayerBGMapOffsetX]
add e
- ldh [hFFC1], a
- ld hl, $18
+ ldh [hCurSpriteXPixel], a
+ ld hl, OBJECT_SPRITE_Y
add hl, bc
ld a, [hl]
- ld hl, $1a
+ ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
add [hl]
- add $c
+ add 12
ld e, a
- ld a, [wce82]
+ ld a, [wPlayerBGMapOffsetY]
add e
- ldh [hFFC2], a
- ld hl, $d
+ ldh [hCurSpriteYPixel], a
+ ld hl, OBJECT_FACING_STEP
add hl, bc
ld a, [hl]
- cp $ff
- jp z, .asm_5a23
- cp $20
- jp nc, .asm_5a23
+ cp STANDING
+ jp z, .done
+ cp NUM_FACINGS
+ jp nc, .done
ld l, a
- ld h, $0
+ ld h, 0
add hl, hl
ld bc, Facings
add hl, bc
@@ -1378,62 +2856,62 @@ Function597a: ; 597a (1:597a)
ld l, a
ldh a, [hUsedSpriteIndex]
ld c, a
- ld b, $c3
+ ld b, HIGH(wVirtualOAM)
ld a, [hli]
ldh [hUsedSpriteTile], a
add c
- cp $a0
- jr nc, .asm_5a25
-.asm_59f3
- ldh a, [hFFC2]
+ cp LOW(wVirtualOAMEnd)
+ jr nc, .full
+.addsprite
+ ldh a, [hCurSpriteYPixel]
add [hl]
inc hl
- ld [bc], a
+ ld [bc], a ; y
inc c
- ldh a, [hFFC1]
+ ldh a, [hCurSpriteXPixel]
add [hl]
inc hl
- ld [bc], a
+ ld [bc], a ; x
inc c
ld e, [hl]
inc hl
- ldh a, [hFFC3]
- bit 2, e
- jr z, .asm_5a08
+ ldh a, [hCurSpriteTile]
+ bit ABSOLUTE_TILE_ID_F, e
+ jr z, .nope1
xor a
-.asm_5a08
+.nope1
add [hl]
inc hl
- ld [bc], a
+ ld [bc], a ; tile id
inc c
ld a, e
- bit 1, a
- jr z, .asm_5a14
- ldh a, [hFFC4]
+ bit RELATIVE_ATTRIBUTES_F, a
+ jr z, .nope2
+ ldh a, [hCurSpriteOAMFlags]
or e
-.asm_5a14
- and $f0
+.nope2
+ and OBP_NUM | X_FLIP | Y_FLIP | PRIORITY
or d
- ld [bc], a
+ ld [bc], a ; attributes
inc c
ldh a, [hUsedSpriteTile]
dec a
ldh [hUsedSpriteTile], a
- jr nz, .asm_59f3
+ jr nz, .addsprite
ld a, c
ldh [hUsedSpriteIndex], a
-.asm_5a23
+.done
xor a
ret
-.asm_5a25
+.full
scf
ret
-Function5a27: ; 5a27 (1:5a27)
+.GetObjectStructPointer:
ld c, a
- ld b, $0
- ld hl, ObjectStructPointers
+ ld b, 0
+ ld hl, .Addresses
add hl, bc
add hl, bc
ld c, [hl]
@@ -1441,7 +2919,7 @@ Function5a27: ; 5a27 (1:5a27)
ld b, [hl]
ret
-ObjectStructPointers:
+.Addresses:
dw wPlayerStruct
dw wObject1Struct
dw wObject2Struct
diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm
index 39f99480..1a819acb 100755
--- a/engine/overworld/movement.asm
+++ b/engine/overworld/movement.asm
@@ -1,776 +1,767 @@
-GetMovementByte:
- ld hl, wMovementDataBank
- call _GetMovementByte
+MovementPointers:
+; entries correspond to macros/scripts/movement.asm enumeration
+ dw Movement_turn_head_down ; 00
+ dw Movement_turn_head_up ; 01
+ dw Movement_turn_head_left ; 02
+ dw Movement_turn_head_right ; 03
+ dw Movement_turn_step_down ; 04
+ dw Movement_turn_step_up ; 05
+ dw Movement_turn_step_left ; 06
+ dw Movement_turn_step_right ; 07
+ dw Movement_slow_step_down ; 08
+ dw Movement_slow_step_up ; 09
+ dw Movement_slow_step_left ; 0a
+ dw Movement_slow_step_right ; 0b
+ dw Movement_step_down ; 0c
+ dw Movement_step_up ; 0d
+ dw Movement_step_left ; 0e
+ dw Movement_step_right ; 0f
+ dw Movement_big_step_down ; 10
+ dw Movement_big_step_up ; 11
+ dw Movement_big_step_left ; 12
+ dw Movement_big_step_right ; 13
+ dw Movement_slow_slide_step_down ; 14
+ dw Movement_slow_slide_step_up ; 15
+ dw Movement_slow_slide_step_left ; 16
+ dw Movement_slow_slide_step_right ; 17
+ dw Movement_slide_step_down ; 18
+ dw Movement_slide_step_up ; 19
+ dw Movement_slide_step_left ; 1a
+ dw Movement_slide_step_right ; 1b
+ dw Movement_fast_slide_step_down ; 1c
+ dw Movement_fast_slide_step_up ; 1d
+ dw Movement_fast_slide_step_left ; 1e
+ dw Movement_fast_slide_step_right ; 1f
+ dw Movement_turn_away_down ; 20
+ dw Movement_turn_away_up ; 21
+ dw Movement_turn_away_left ; 22
+ dw Movement_turn_away_right ; 23
+ dw Movement_turn_in_down ; 24
+ dw Movement_turn_in_up ; 25
+ dw Movement_turn_in_left ; 26
+ dw Movement_turn_in_right ; 27
+ dw Movement_turn_waterfall_down ; 28
+ dw Movement_turn_waterfall_up ; 29
+ dw Movement_turn_waterfall_left ; 2a
+ dw Movement_turn_waterfall_right ; 2b
+ dw Movement_slow_jump_step_down ; 2c
+ dw Movement_slow_jump_step_up ; 2d
+ dw Movement_slow_jump_step_left ; 2e
+ dw Movement_slow_jump_step_right ; 2f
+ dw Movement_jump_step_down ; 30
+ dw Movement_jump_step_up ; 31
+ dw Movement_jump_step_left ; 32
+ dw Movement_jump_step_right ; 33
+ dw Movement_fast_jump_step_down ; 34
+ dw Movement_fast_jump_step_up ; 35
+ dw Movement_fast_jump_step_left ; 36
+ dw Movement_fast_jump_step_right ; 37
+ dw Movement_remove_sliding ; 38
+ dw Movement_set_sliding ; 39
+ dw Movement_remove_fixed_facing ; 3a
+ dw Movement_fix_facing ; 3b
+ dw Movement_show_object ; 3c
+ dw Movement_hide_object ; 3d
+ dw Movement_step_sleep_1 ; 3e
+ dw Movement_step_sleep_2 ; 3f
+ dw Movement_step_sleep_3 ; 40
+ dw Movement_step_sleep_4 ; 41
+ dw Movement_step_sleep_5 ; 42
+ dw Movement_step_sleep_6 ; 43
+ dw Movement_step_sleep_7 ; 44
+ dw Movement_step_sleep_8 ; 45
+ dw Movement_step_sleep ; 46
+ dw Movement_step_end ; 47
+ dw Movement_48 ; 48
+ dw Movement_remove_object ; 49
+ dw Movement_step_loop ; 4a
+ dw Movement_4b ; 4b
+ dw Movement_teleport_from ; 4c
+ dw Movement_teleport_to ; 4d
+ dw Movement_skyfall ; 4e
+ dw Movement_step_dig ; 4f
+ dw Movement_step_bump ; 50
+ dw Movement_fish_got_bite ; 51
+ dw Movement_fish_cast_rod ; 52
+ dw Movement_hide_emote ; 53
+ dw Movement_show_emote ; 54
+ dw Movement_step_shake ; 55
+ dw Movement_tree_shake ; 56
+ dw Movement_rock_smash ; 57
+ dw Movement_return_dig ; 58
+
+Movement_teleport_from:
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_TELEPORT_FROM
ret
-Function4fbd:
- ld hl, $1b
- add hl, bc
- ld e, [hl]
- inc [hl]
- ld d, $0
- ld hl, wMovementObject
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, de
- ld a, [hl]
- ret
-
-Function4fce:
- ld hl, $1b
- add hl, bc
- ld e, [hl]
- inc [hl]
- ld d, $0
- ld hl, wce8f
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, de
- ld a, [hl]
- ret
-
-Function4fdf: ; 4fdf (1:4fdf)
- ld hl, GetMovementPerson
- jp Function4fe9
-
-GetMovementPerson:
- ld a, [wMovementObject]
- ret
-
-Function4fe9: ; 4fe9 (1:4fe9)
- call Function4ffd
-.asm_4fec
- xor a
- ld [wce93], a
- call Function5006
- call Function5013
- ld a, [wce93]
- and a
- jr nz, .asm_4fec
- ret
-
-Function4ffd: ; 4ffd (1:4ffd)
- ld a, l
- ld [wce94], a
- ld a, h
- ld [wce95], a
- ret
-
-Function5006: ; 5006 (1:5006)
- ld hl, wce94
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl
-
-Function500d: ; 500d (1:500d)
- ld a, $1
- ld [wce93], a
- ret
-
-Function5013: ; 5013 (1:5013)
- push af
- call Function5457
- pop af
- ld hl, MovementPointers
- rst JumpTable
- ret
-
-MovementPointers: ; 501d
- dw Function527d
- dw Function5281
- dw Function5285
- dw Function5289
- dw Function538f
- dw Function5393
- dw Function5397
- dw Function539b
- dw Function529f
- dw Function52a4
- dw Function52a9
- dw Function52ae
- dw Function52b3
- dw Function52b8
- dw Function52bd
- dw Function52c2
- dw Function52c7
- dw Function52cc
- dw Function52d1
- dw Function52d6
- dw Function5317
- dw Function531c
- dw Function5321
- dw Function5326
- dw Function532b
- dw Function5330
- dw Function5335
- dw Function533a
- dw Function533f
- dw Function5344
- dw Function5349
- dw Function534e
- dw Function52db
- dw Function52e0
- dw Function52e5
- dw Function52ea
- dw Function52ef
- dw Function52f4
- dw Function52f9
- dw Function52fe
- dw Function5303
- dw Function5308
- dw Function530d
- dw Function5312
- dw Function5353
- dw Function5358
- dw Function535d
- dw Function5362
- dw Function5367
- dw Function536c
- dw Function5371
- dw Function5376
- dw Function537b
- dw Function5380
- dw Function5385
- dw Function538a
- dw Function5232
- dw Function523b
- dw Function5244
- dw Function524d
- dw Function5256
- dw Function525f
- dw Function51c1
- dw Function51c5
- dw Function51c9
- dw Function51cd
- dw Function51d1
- dw Function51d5
- dw Function51d9
- dw Function51dd
- dw Function51e1
- dw Function5160
- dw Function517a
- dw Function519c
- dw Function5157
- dw Function51af
- dw Function50cf
- dw Function50d6
- dw Function50dd
- dw Function50e4
- dw Function51fe
- dw Function5128
- dw Function514a
- dw Function5268
- dw Function526e
- dw Function5274
- dw Function5218
- dw Function5135
- dw Function5109
-
-Function50cf: ; 50cf (1:50cf)
- ld hl, $9
- add hl, bc
- ld [hl], $c
- ret
-
-Function50d6: ; 50d6 (1:50d6)
- ld hl, $9
+Movement_teleport_to:
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $d
+ ld [hl], STEP_TYPE_TELEPORT_TO
ret
-Function50dd: ; 50dd (1:50dd)
- ld hl, $9
+Movement_skyfall:
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $e
+ ld [hl], STEP_TYPE_SKYFALL
ret
-Function50e4: ; 50e4 (1:50e4)
+Movement_step_dig:
call GetSpriteDirection
rlca
rlca
- ld hl, $c
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], a
- ld hl, $b
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $4
- call Function5006
- ld hl, $a
+ ld [hl], OBJECT_ACTION_SPIN
+ call JumpMovementPointer
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $9
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
- ld hl, $7
+ ld [hl], STEP_TYPE_03
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
-Function5109: ; 5109 (1:5109)
+Movement_return_dig:
call GetSpriteDirection
rlca
rlca
- ld hl, $c
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], a
- call Function5006
- ld hl, $a
+ call JumpMovementPointer
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $7
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
- ld hl, $9
+ ld [hl], STANDING
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $12
+ ld [hl], STEP_TYPE_RETURN_DIG
ret
-Function5128: ; 5128 (1:5128)
- ld hl, $b
+Movement_fish_got_bite:
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $6
- ld hl, $9
+ ld [hl], OBJECT_ACTION_FISHING
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $10
+ ld [hl], STEP_TYPE_GOT_BITE
ret
-Function5135: ; 5135 (1:5135)
- call Function5006
- ld hl, $a
+Movement_rock_smash:
+ call JumpMovementPointer
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $b
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
- ld hl, $9
+ ld [hl], OBJECT_ACTION_STAND
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $11
+ ld [hl], STEP_TYPE_ROCK_SMASH
ret
-Function514a: ; 514a (1:514a)
- ld hl, $b
+Movement_fish_cast_rod:
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $6
- ld hl, $9
+ ld [hl], OBJECT_ACTION_FISHING
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $1
+ ld [hl], STEP_TYPE_SLEEP
ret
-Function5157: ; 5157 (1:5157)
- ld hl, $1b
+Movement_step_loop:
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
ld [hl], $0
- jp Function500d
+ jp ContinueReadingMovement
-Function5160: ; 5160 (1:5160)
+Movement_step_end:
call RestoreDefaultMovement
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld [hl], a
- ld hl, $1b
+
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
ld [hl], $0
+
ld hl, wVramState
res 7, [hl]
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $1
+ ld [hl], STEP_TYPE_SLEEP
ret
-Function517a: ; 517a (1:517a)
+Movement_48:
call RestoreDefaultMovement
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld [hl], a
- ld hl, $1b
+
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
ld [hl], $0
- call Function5006
- ld hl, $a
+
+ call JumpMovementPointer
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
+ ld [hl], STEP_TYPE_03
+
ld hl, wVramState
res 7, [hl]
ret
-Function519c: ; 519c (1:519c)
+Movement_remove_object:
call DeleteMapObject
ld hl, wObjectFollow_Leader
ldh a, [hMapObjectIndexBuffer]
cp [hl]
- jr nz, .asm_51a9
- ld [hl], $ff
-.asm_51a9
+ jr nz, .not_leading
+ ld [hl], -1
+
+.not_leading
ld hl, wVramState
res 7, [hl]
ret
-Function51af: ; 51af (1:51af)
- ld hl, $b
+Movement_4b:
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
- ld hl, $9
+ ld [hl], OBJECT_ACTION_STAND
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $4
+ ld [hl], STEP_TYPE_04
+
ld hl, wVramState
res 7, [hl]
ret
-Function51c1: ; 51c1 (1:51c1)
- ld a, $1
- jr asm_51e6
+Movement_step_sleep_1:
+ ld a, 1
+ jr Movement_step_sleep_common
+
+Movement_step_sleep_2:
+ ld a, 2
+ jr Movement_step_sleep_common
-Function51c5: ; 51c5 (1:51c5)
- ld a, $2
- jr asm_51e6
+Movement_step_sleep_3:
+ ld a, 3
+ jr Movement_step_sleep_common
-Function51c9: ; 51c9 (1:51c9)
- ld a, $3
- jr asm_51e6
+Movement_step_sleep_4:
+ ld a, 4
+ jr Movement_step_sleep_common
-Function51cd: ; 51cd (1:51cd)
- ld a, $4
- jr asm_51e6
+Movement_step_sleep_5:
+ ld a, 5
+ jr Movement_step_sleep_common
-Function51d1: ; 51d1 (1:51d1)
- ld a, $5
- jr asm_51e6
+Movement_step_sleep_6:
+ ld a, 6
+ jr Movement_step_sleep_common
-Function51d5: ; 51d5 (1:51d5)
- ld a, $6
- jr asm_51e6
+Movement_step_sleep_7:
+ ld a, 7
+ jr Movement_step_sleep_common
-Function51d9: ; 51d9 (1:51d9)
- ld a, $7
- jr asm_51e6
+Movement_step_sleep_8:
+ ld a, 8
+ jr Movement_step_sleep_common
-Function51dd: ; 51dd (1:51dd)
- ld a, $8
- jr asm_51e6
+Movement_step_sleep:
+; parameters:
+; duration (DecimalParam)
-Function51e1: ; 51e1 (1:51e1)
- call Function5006
- jr asm_51e6
+ call JumpMovementPointer
+ jr Movement_step_sleep_common
-asm_51e6:
- ld hl, $a
+Movement_step_sleep_common:
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
- ld hl, $b
+ ld [hl], STEP_TYPE_03
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
- ld hl, $7
+ ld [hl], OBJECT_ACTION_STAND
+
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
-Function51fe: ; 51fe (1:51fe)
- ld a, $1
- ld hl, $a
+Movement_step_bump:
+ ld a, 1
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $b
- ld hl, $b
+ ld [hl], STEP_TYPE_BUMP
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $3
- ld hl, $7
+ ld [hl], OBJECT_ACTION_BUMP
+
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
-Function5218: ; 5218 (1:5218)
- ld a, $18
- ld hl, $a
+Movement_tree_shake:
+ ld a, 24
+ ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
- ld hl, $b
+ ld [hl], STEP_TYPE_03
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $b
- ld hl, $7
+ ld [hl], OBJECT_ACTION_WEIRD_TREE
+
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
-Function5232: ; 5232 (1:5232)
- ld hl, $4
+Movement_remove_sliding:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- res 3, [hl]
- jp Function500d
+ res SLIDING_F, [hl]
+ jp ContinueReadingMovement
-Function523b: ; 523b (1:523b)
- ld hl, $4
+Movement_set_sliding:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- set 3, [hl]
- jp Function500d
+ set SLIDING_F, [hl]
+ jp ContinueReadingMovement
-Function5244: ; 5244 (1:5244)
- ld hl, $4
+Movement_remove_fixed_facing:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- res 2, [hl]
- jp Function500d
+ res FIXED_FACING_F, [hl]
+ jp ContinueReadingMovement
-Function524d: ; 524d (1:524d)
- ld hl, $4
+Movement_fix_facing:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- set 2, [hl]
- jp Function500d
+ set FIXED_FACING_F, [hl]
+ jp ContinueReadingMovement
-Function5256: ; 5256 (1:5256)
- ld hl, $4
+Movement_show_object:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- res 0, [hl]
- jp Function500d
+ res INVISIBLE_F, [hl]
+ jp ContinueReadingMovement
-Function525f: ; 525f (1:525f)
- ld hl, $4
+Movement_hide_object:
+ ld hl, OBJECT_FLAGS1
add hl, bc
- set 0, [hl]
- jp Function500d
+ set INVISIBLE_F, [hl]
+ jp ContinueReadingMovement
+
+Movement_hide_emote:
+ call DespawnEmote
+ jp ContinueReadingMovement
-Function5268: ; 5268 (1:5268)
- call Function5518
- jp Function500d
+Movement_show_emote:
+ call SpawnEmote
+ jp ContinueReadingMovement
-Function526e: ; 526e (1:526e)
- call Function54e6
- jp Function500d
+Movement_step_shake:
+; parameters:
+; displacement (DecimalParam)
-Function5274: ; 5274 (1:5274)
- call Function5006
- call Function5504
- jp Function500d
+ call JumpMovementPointer
+ call ShakeScreen
+ jp ContinueReadingMovement
-Function527d: ; 527d (1:527d)
- ld a, $0
- jr asm_528d
+Movement_turn_head_down:
+ ld a, OW_DOWN
+ jr TurnHead
-Function5281: ; 5281 (1:5281)
- ld a, $4
- jr asm_528d
+Movement_turn_head_up:
+ ld a, OW_UP
+ jr TurnHead
-Function5285: ; 5285 (1:5285)
- ld a, $8
- jr asm_528d
+Movement_turn_head_left:
+ ld a, OW_LEFT
+ jr TurnHead
-Function5289: ; 5289 (1:5289)
- ld a, $c
- jr asm_528d
+Movement_turn_head_right:
+ ld a, OW_RIGHT
+ jr TurnHead
-asm_528d:
- ld hl, $8
+TurnHead:
+ ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
- ld hl, $b
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
- ld hl, $7
+ ld [hl], OBJECT_ACTION_STAND
+
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- ld [hl], $ff
+ ld [hl], STANDING
ret
-Function529f: ; 529f (1:529f)
- ld a, $0
- jp Function53b1
+Movement_slow_step_down:
+ ld a, STEP_SLOW << 2 | DOWN
+ jp NormalStep
-Function52a4: ; 52a4 (1:52a4)
- ld a, $1
- jp Function53b1
+Movement_slow_step_up:
+ ld a, STEP_SLOW << 2 | UP
+ jp NormalStep
-Function52a9: ; 52a9 (1:52a9)
- ld a, $2
- jp Function53b1
+Movement_slow_step_left:
+ ld a, STEP_SLOW << 2 | LEFT
+ jp NormalStep
-Function52ae: ; 52ae (1:52ae)
- ld a, $3
- jp Function53b1
+Movement_slow_step_right:
+ ld a, STEP_SLOW << 2 | RIGHT
+ jp NormalStep
-Function52b3: ; 52b3 (1:52b3)
- ld a, $4
- jp Function53b1
+Movement_step_down:
+ ld a, STEP_WALK << 2 | DOWN
+ jp NormalStep
-Function52b8: ; 52b8 (1:52b8)
- ld a, $5
- jp Function53b1
+Movement_step_up:
+ ld a, STEP_WALK << 2 | UP
+ jp NormalStep
-Function52bd: ; 52bd (1:52bd)
- ld a, $6
- jp Function53b1
+Movement_step_left:
+ ld a, STEP_WALK << 2 | LEFT
+ jp NormalStep
-Function52c2: ; 52c2 (1:52c2)
- ld a, $7
- jp Function53b1
+Movement_step_right:
+ ld a, STEP_WALK << 2 | RIGHT
+ jp NormalStep
-Function52c7: ; 52c7 (1:52c7)
- ld a, $8
- jp Function53b1
+Movement_big_step_down:
+ ld a, STEP_BIKE << 2 | DOWN
+ jp NormalStep
-Function52cc: ; 52cc (1:52cc)
- ld a, $9
- jp Function53b1
+Movement_big_step_up:
+ ld a, STEP_BIKE << 2 | UP
+ jp NormalStep
-Function52d1: ; 52d1 (1:52d1)
- ld a, $a
- jp Function53b1
+Movement_big_step_left:
+ ld a, STEP_BIKE << 2 | LEFT
+ jp NormalStep
-Function52d6: ; 52d6 (1:52d6)
- ld a, $b
- jp Function53b1
+Movement_big_step_right:
+ ld a, STEP_BIKE << 2 | RIGHT
+ jp NormalStep
-Function52db: ; 52db (1:52db)
- ld a, $0
- jp Function53e5
+Movement_turn_away_down:
+ ld a, STEP_SLOW << 2 | DOWN
+ jp TurningStep
-Function52e0: ; 52e0 (1:52e0)
- ld a, $1
- jp Function53e5
+Movement_turn_away_up:
+ ld a, STEP_SLOW << 2 | UP
+ jp TurningStep
-Function52e5: ; 52e5 (1:52e5)
- ld a, $2
- jp Function53e5
+Movement_turn_away_left:
+ ld a, STEP_SLOW << 2 | LEFT
+ jp TurningStep
-Function52ea: ; 52ea (1:52ea)
- ld a, $3
- jp Function53e5
+Movement_turn_away_right:
+ ld a, STEP_SLOW << 2 | RIGHT
+ jp TurningStep
-Function52ef: ; 52ef (1:52ef)
- ld a, $4
- jp Function53e5
+Movement_turn_in_down:
+ ld a, STEP_WALK << 2 | DOWN
+ jp TurningStep
-Function52f4: ; 52f4 (1:52f4)
- ld a, $5
- jp Function53e5
+Movement_turn_in_up:
+ ld a, STEP_WALK << 2 | UP
+ jp TurningStep
-Function52f9: ; 52f9 (1:52f9)
- ld a, $6
- jp Function53e5
+Movement_turn_in_left:
+ ld a, STEP_WALK << 2 | LEFT
+ jp TurningStep
-Function52fe: ; 52fe (1:52fe)
- ld a, $7
- jp Function53e5
+Movement_turn_in_right:
+ ld a, STEP_WALK << 2 | RIGHT
+ jp TurningStep
-Function5303: ; 5303 (1:5303)
- ld a, $8
- jp Function53e5
+Movement_turn_waterfall_down:
+ ld a, STEP_BIKE << 2 | DOWN
+ jp TurningStep
-Function5308: ; 5308 (1:5308)
- ld a, $9
- jp Function53e5
+Movement_turn_waterfall_up:
+ ld a, STEP_BIKE << 2 | UP
+ jp TurningStep
-Function530d: ; 530d (1:530d)
- ld a, $a
- jp Function53e5
+Movement_turn_waterfall_left:
+ ld a, STEP_BIKE << 2 | LEFT
+ jp TurningStep
-Function5312: ; 5312 (1:5312)
- ld a, $b
- jp Function53e5
+Movement_turn_waterfall_right:
+ ld a, STEP_BIKE << 2 | RIGHT
+ jp TurningStep
-Function5317: ; 5317 (1:5317)
- ld a, $0
- jp Function5407
+Movement_slow_slide_step_down:
+ ld a, STEP_SLOW << 2 | DOWN
+ jp SlideStep
-Function531c: ; 531c (1:531c)
- ld a, $1
- jp Function5407
+Movement_slow_slide_step_up:
+ ld a, STEP_SLOW << 2 | UP
+ jp SlideStep
-Function5321: ; 5321 (1:5321)
- ld a, $2
- jp Function5407
+Movement_slow_slide_step_left:
+ ld a, STEP_SLOW << 2 | LEFT
+ jp SlideStep
-Function5326: ; 5326 (1:5326)
- ld a, $3
- jp Function5407
+Movement_slow_slide_step_right:
+ ld a, STEP_SLOW << 2 | RIGHT
+ jp SlideStep
-Function532b: ; 532b (1:532b)
- ld a, $4
- jp Function5407
+Movement_slide_step_down:
+ ld a, STEP_WALK << 2 | DOWN
+ jp SlideStep
-Function5330: ; 5330 (1:5330)
- ld a, $5
- jp Function5407
+Movement_slide_step_up:
+ ld a, STEP_WALK << 2 | UP
+ jp SlideStep
-Function5335: ; 5335 (1:5335)
- ld a, $6
- jp Function5407
+Movement_slide_step_left:
+ ld a, STEP_WALK << 2 | LEFT
+ jp SlideStep
-Function533a: ; 533a (1:533a)
- ld a, $7
- jp Function5407
+Movement_slide_step_right:
+ ld a, STEP_WALK << 2 | RIGHT
+ jp SlideStep
-Function533f: ; 533f (1:533f)
- ld a, $8
- jp Function5407
+Movement_fast_slide_step_down:
+ ld a, STEP_BIKE << 2 | DOWN
+ jp SlideStep
-Function5344: ; 5344 (1:5344)
- ld a, $9
- jp Function5407
+Movement_fast_slide_step_up:
+ ld a, STEP_BIKE << 2 | UP
+ jp SlideStep
-Function5349: ; 5349 (1:5349)
- ld a, $a
- jp Function5407
+Movement_fast_slide_step_left:
+ ld a, STEP_BIKE << 2 | LEFT
+ jp SlideStep
-Function534e: ; 534e (1:534e)
- ld a, $b
- jp Function5407
+Movement_fast_slide_step_right:
+ ld a, STEP_BIKE << 2 | RIGHT
+ jp SlideStep
-Function5353: ; 5353 (1:5353)
- ld a, $0
- jp Function5429
+Movement_slow_jump_step_down:
+ ld a, STEP_SLOW << 2 | DOWN
+ jp JumpStep
-Function5358: ; 5358 (1:5358)
- ld a, $1
- jp Function5429
+Movement_slow_jump_step_up:
+ ld a, STEP_SLOW << 2 | UP
+ jp JumpStep
-Function535d: ; 535d (1:535d)
- ld a, $2
- jp Function5429
+Movement_slow_jump_step_left:
+ ld a, STEP_SLOW << 2 | LEFT
+ jp JumpStep
-Function5362: ; 5362 (1:5362)
- ld a, $3
- jp Function5429
+Movement_slow_jump_step_right:
+ ld a, STEP_SLOW << 2 | RIGHT
+ jp JumpStep
-Function5367: ; 5367 (1:5367)
- ld a, $4
- jp Function5429
+Movement_jump_step_down:
+ ld a, STEP_WALK << 2 | DOWN
+ jp JumpStep
-Function536c: ; 536c (1:536c)
- ld a, $5
- jp Function5429
+Movement_jump_step_up:
+ ld a, STEP_WALK << 2 | UP
+ jp JumpStep
-Function5371: ; 5371 (1:5371)
- ld a, $6
- jp Function5429
+Movement_jump_step_left:
+ ld a, STEP_WALK << 2 | LEFT
+ jp JumpStep
-Function5376: ; 5376 (1:5376)
- ld a, $7
- jp Function5429
+Movement_jump_step_right:
+ ld a, STEP_WALK << 2 | RIGHT
+ jp JumpStep
-Function537b: ; 537b (1:537b)
- ld a, $8
- jp Function5429
+Movement_fast_jump_step_down:
+ ld a, STEP_BIKE << 2 | DOWN
+ jp JumpStep
-Function5380: ; 5380 (1:5380)
- ld a, $9
- jp Function5429
+Movement_fast_jump_step_up:
+ ld a, STEP_BIKE << 2 | UP
+ jp JumpStep
-Function5385: ; 5385 (1:5385)
- ld a, $a
- jp Function5429
+Movement_fast_jump_step_left:
+ ld a, STEP_BIKE << 2 | LEFT
+ jp JumpStep
-Function538a: ; 538a (1:538a)
- ld a, $b
- jp Function5429
+Movement_fast_jump_step_right:
+ ld a, STEP_BIKE << 2 | RIGHT
+ jp JumpStep
-Function538f: ; 538f (1:538f)
- ld a, $0
- jr asm_539f
+Movement_turn_step_down:
+ ld a, OW_DOWN
+ jr TurnStep
-Function5393: ; 5393 (1:5393)
- ld a, $4
- jr asm_539f
+Movement_turn_step_up:
+ ld a, OW_UP
+ jr TurnStep
-Function5397: ; 5397 (1:5397)
- ld a, $8
- jr asm_539f
+Movement_turn_step_left:
+ ld a, OW_LEFT
+ jr TurnStep
-Function539b: ; 539b (1:539b)
- ld a, $c
- jr asm_539f
+Movement_turn_step_right:
+ ld a, OW_RIGHT
+ jr TurnStep
-asm_539f:
- ld hl, $1d
+TurnStep:
+ ld hl, OBJECT_1D ; new facing
add hl, bc
ld [hl], a
- ld hl, $b
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $2
- ld hl, $9
+ ld [hl], OBJECT_ACTION_STEP
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $a
+ ld [hl], STEP_TYPE_HALF_STEP
ret
-Function53b1: ; 53b1 (1:53b1)
+NormalStep:
call InitStep
- call UpdateGrassPriority
- ld hl, $b
+ call UpdateTallGrassFlags
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $2
- ld hl, $e
+ ld [hl], OBJECT_ACTION_STEP
+
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call CheckSuperTallGrassTile
- jr z, .asm_53cc
+ jr z, .shake_grass
+
call CheckGrassTile
- jr c, .asm_53cf
-.asm_53cc
- call Function54f5
-.asm_53cf
+ jr c, .skip_grass
+
+.shake_grass
+ call ShakeGrass
+
+.skip_grass
ld hl, wCenteredObject
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_53de
- ld hl, $9
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $2
+ ld [hl], STEP_TYPE_NPC_WALK
ret
-.asm_53de
- ld hl, $9
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $6
+ ld [hl], STEP_TYPE_PLAYER_WALK
ret
-Function53e5: ; 53e5 (1:53e5)
+TurningStep:
call InitStep
- call UpdateGrassPriority
- ld hl, $b
+ call UpdateTallGrassFlags
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $4
+ ld [hl], OBJECT_ACTION_SPIN
+
ld hl, wCenteredObject
ldh a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_5400
- ld hl, $9
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $2
+ ld [hl], STEP_TYPE_NPC_WALK
ret
-.asm_5400
- ld hl, $9
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $6
+ ld [hl], STEP_TYPE_PLAYER_WALK
ret
-Function5407: ; 5407 (1:5407)
+SlideStep:
call InitStep
- call UpdateGrassPriority
- ld hl, $b
+ call UpdateTallGrassFlags
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
+ ld [hl], OBJECT_ACTION_STAND
+
ld hl, wCenteredObject
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_5422
- ld hl, $9
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_NPC_WALK
+ ret
+
+.player
+ ld hl, OBJECT_STEP_TYPE
+ add hl, bc
+ ld [hl], STEP_TYPE_PLAYER_WALK
+ ret
+
+JumpStep:
+ call InitStep
+ ld hl, OBJECT_1F
+ add hl, bc
+ ld [hl], $0
+
+ ld hl, OBJECT_FLAGS2
+ add hl, bc
+ res OVERHEAD_F, [hl]
+
+ ld hl, OBJECT_ACTION
+ add hl, bc
+ ld [hl], OBJECT_ACTION_STEP
+ call SpawnShadow
+ ld hl, wCenteredObject
+ ldh a, [hMapObjectIndexBuffer]
+ cp [hl]
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $2
+ ld [hl], STEP_TYPE_NPC_JUMP
ret
-.asm_5422
- ld hl, $9
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $6
+ ld [hl], STEP_TYPE_PLAYER_JUMP
ret
diff --git a/engine/overworld/npc_movement.asm b/engine/overworld/npc_movement.asm
index e40f2b1c..c0b88a8b 100755
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -1,4 +1,4 @@
-CheckNPCMovementPermissions: ; 6fa0 (1:6fa0)
+CanObjectMoveInDirection: ; 6fa0 (1:6fa0)
ld hl, $6
add hl, bc
bit 5, [hl]
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
index 98cce97d..21dd97ca 100755
--- a/engine/overworld/player_movement.asm
+++ b/engine/overworld/player_movement.asm
@@ -7,7 +7,7 @@ DoPlayerMovement:: ; 10000 (4:4000)
call Function1002d
ld c, a
ld a, [wMovementAnimation]
- ld [wce87], a
+ ld [wPlayerNextMovement], a
ret
Function10017: ; 10017 (4:4017)
@@ -725,7 +725,7 @@ CheckStandingOnIce::
ret
StopPlayerForEvent::
- ld hl, wce87
+ ld hl, wPlayerNextMovement
ld a, $3e
cp [hl]
ret z
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm
index ee8ebe1b..627e3d3f 100755
--- a/engine/overworld/player_object.asm
+++ b/engine/overworld/player_object.asm
@@ -165,7 +165,7 @@ CopyMapObjectToTempObject: ; 870d (2:470d)
add hl, bc
ld [hl], a
ldh a, [hMapObjectIndexBuffer]
- ld [wce99], a
+ ld [wTempObjectCopyMapObjectIndex], a
ld hl, $1
add hl, bc
ld a, [hl]
@@ -191,7 +191,7 @@ CopyMapObjectToTempObject: ; 870d (2:470d)
ld hl, $9
add hl, bc
ld a, [hl]
- ld [wce9e], a
+ ld [wTempObjectCopyRange], a
ld hl, $3
add hl, bc
ld a, [hl]
@@ -385,7 +385,7 @@ asm_882e:
ret
CopyTempObjectToObjectStruct: ; 8876 (2:4876)
- ld a, [wce99]
+ ld a, [wTempObjectCopyMapObjectIndex]
ld hl, $1
add hl, de
ld [hl], a
@@ -416,7 +416,7 @@ CopyTempObjectToObjectStruct: ; 8876 (2:4876)
ld [hl], $ff
ld a, [wcea1]
call InitTempObjectRadius
- ld a, [wce9e]
+ ld a, [wTempObjectCopyRange]
ld hl, $20
add hl, de
ld [hl], a
@@ -434,7 +434,7 @@ InitTempObjectYCoord: ; 88c5 (2:48c5)
sub [hl]
and $f
swap a
- ld hl, wce82
+ ld hl, wPlayerBGMapOffsetY
sub [hl]
ld hl, $18
add hl, de
@@ -452,7 +452,7 @@ InitTempObjectXCoord: ; 88e1 (2:48e1)
sub [hl]
and $f
swap a
- ld hl, wce81
+ ld hl, wPlayerBGMapOffsetX
sub [hl]
ld hl, $17
add hl, de
@@ -606,7 +606,7 @@ FollowNotExact::
sub [hl]
and $f
swap a
- ld hl, wce81
+ ld hl, wPlayerBGMapOffsetX
sub [hl]
ld hl, $17
add hl, de
@@ -619,7 +619,7 @@ FollowNotExact::
sub [hl]
and $f
swap a
- ld hl, wce82
+ ld hl, wPlayerBGMapOffsetY
sub [hl]
ld hl, $18
add hl, de
diff --git a/engine/overworld/player_step.asm b/engine/overworld/player_step.asm
index e55fc4e7..2653fd2e 100755
--- a/engine/overworld/player_step.asm
+++ b/engine/overworld/player_step.asm
@@ -26,12 +26,12 @@ _HandlePlayerStep::
ld d, a
ld a, [wPlayerStepVectorY]
ld e, a
- ld a, [wce81]
+ ld a, [wPlayerBGMapOffsetX]
sub d
- ld [wce81], a
- ld a, [wce82]
+ ld [wPlayerBGMapOffsetX], a
+ ld a, [wPlayerBGMapOffsetY]
sub e
- ld [wce82], a
+ ld [wPlayerBGMapOffsetY], a
ret
ScrollScreen::