summaryrefslogtreecommitdiff
path: root/engine/overworld/player_object.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/overworld/player_object.asm')
-rwxr-xr-xengine/overworld/player_object.asm603
1 files changed, 333 insertions, 270 deletions
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm
index 627e3d3f..28323eba 100755
--- a/engine/overworld/player_object.asm
+++ b/engine/overworld/player_object.asm
@@ -5,38 +5,38 @@ BlankScreen:
call ClearBGPalettes
call ClearSprites
hlcoord 0, 0
- ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld bc, wTilemapEnd - wTilemap
ld a, " "
call ByteFill
- ld hl, wAttrmap
- ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ hlcoord 0, 0, wAttrmap
+ ld bc, wAttrmapEnd - wAttrmap
ld a, $7
call ByteFill
call WaitBGMap2
call SetPalettes
ret
-SpawnPlayer: ; 861a (2:461a)
- ld a, $ff
+SpawnPlayer:
+ ld a, -1
ld [wObjectFollow_Leader], a
ld [wObjectFollow_Follower], a
- ld a, $0
- ld hl, .PlayerObjectTemplate
+ ld a, PLAYER
+ ld hl, PlayerObjectTemplate
call CopyPlayerObjectTemplate
- ld b, $0
+ ld b, PLAYER
call PlayerSpawn_ConvertCoords
- ld a, $0
+ ld a, PLAYER_OBJECT
ldh [hObjectStructIndexBuffer], a
ld de, wObjectStructs
- ld a, $0
+ ld a, PLAYER_OBJECT
ldh [hMapObjectIndexBuffer], a
ld bc, wMapObjects
call CopyMapObjectToObjectStruct
- ld a, $0
+ ld a, PLAYER
ld [wCenteredObject], a
ret
-.PlayerObjectTemplate
+PlayerObjectTemplate:
; A dummy map object used to initialize the player object.
; Shorter than the actual amount copied by two bytes.
; Said bytes seem to be unused.
@@ -47,10 +47,10 @@ CopyDECoordsToMapObject::
ld a, b
call GetMapObject
pop de
- ld hl, $3
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld [hl], d
- ld hl, $2
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld [hl], e
ret
@@ -58,10 +58,10 @@ CopyDECoordsToMapObject::
PlayerSpawn_ConvertCoords:
push bc
ld a, [wXCoord]
- add $4
+ add 4
ld d, a
ld a, [wYCoord]
- add $4
+ add 4
ld e, a
pop bc
call CopyDECoordsToMapObject
@@ -71,13 +71,14 @@ WriteObjectXY::
ld a, b
call CheckObjectVisibility
ret c
- 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]
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
ld b, a
call CopyDECoordsToMapObject
and a
@@ -85,23 +86,23 @@ WriteObjectXY::
RefreshPlayerCoords:
ld a, [wXCoord]
- add $4
+ add 4
ld d, a
ld hl, wPlayerStandingMapX
sub [hl]
ld [hl], d
- ld hl, wPlayerObjectXCoord
+ ld hl, wMapObjects + MAPOBJECT_X_COORD
ld [hl], d
ld hl, wPlayerLastMapX
ld [hl], d
ld d, a
ld a, [wYCoord]
- add $4
+ add 4
ld e, a
ld hl, wPlayerStandingMapY
sub [hl]
ld [hl], e
- ld hl, wPlayerObjectYCoord
+ ld hl, wMapObjects + MAPOBJECT_Y_COORD
ld [hl], e
ld hl, wPlayerLastMapY
ld [hl], e
@@ -112,340 +113,375 @@ RefreshPlayerCoords:
ret
SpawnPlayer2:
- ld a, $1
+ ld a, 1
ld hl, .PlayerObjectTemplate
call CopyPlayerObjectTemplate
- ld b, $1
+ ld b, 1
call PlayerSpawn_ConvertCoords
ret
.PlayerObjectTemplate:
object_event -4, -4, SPRITE_CHRIS, SPRITEMOVEDATA_12, 15, 15, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, 0, -1
-CopyObjectStruct:: ; 86d7 (2:46d7)
+CopyObjectStruct::
call CheckObjectMask
and a
- ret nz
- ld hl, wPlayerStructEnd
- ld a, $1
- ld de, $28
-.asm_86e4
+ ret nz ; masked
+
+ ld hl, wObjectStructs + OBJECT_LENGTH * 1
+ ld a, 1
+ ld de, OBJECT_LENGTH
+.loop
ldh [hObjectStructIndexBuffer], a
ld a, [hl]
and a
- jr z, .asm_86f4
+ jr z, .done
add hl, de
- ldh a, [hConnectedMapWidth]
+ ldh a, [hObjectStructIndexBuffer]
inc a
- cp $d
- jr nz, .asm_86e4
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
scf
- ret
+ ret ; overflow
-.asm_86f4
+.done
ld d, h
ld e, l
call CopyMapObjectToObjectStruct
ld a, [wVramState]
bit 7, a
ret z
- ld hl, $5
+
+ ld hl, OBJECT_FLAGS2
add hl, de
set 5, [hl]
ret
-CopyMapObjectToObjectStruct: ; 8706 (2:4706)
- call CopyMapObjectToTempObject
+CopyMapObjectToObjectStruct:
+ call .CopyMapObjectToTempObject
call CopyTempObjectToObjectStruct
ret
-CopyMapObjectToTempObject: ; 870d (2:470d)
- ldh a, [hConnectedMapWidth]
- ld hl, $0
+.CopyMapObjectToTempObject:
+ ldh a, [hObjectStructIndexBuffer]
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld [hl], a
+
ldh a, [hMapObjectIndexBuffer]
ld [wTempObjectCopyMapObjectIndex], a
- ld hl, $1
+
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
- ld [wce9a], a
+ ld [wTempObjectCopySprite], a
+
call GetSpriteVTile
- ld [wce9b], a
+ ld [wTempObjectCopySpriteVTile], a
+
ld a, [hl]
call GetSpritePalette
- ld [wce9c], a
- ld hl, $8
+ ld [wTempObjectCopyPalette], a
+
+ ld hl, MAPOBJECT_COLOR
add hl, bc
ld a, [hl]
and $f0
- jr z, .asm_873e
+ jr z, .skip_color_override
swap a
- and $7
- ld [wce9c], a
-.asm_873e
- ld hl, $4
+ and PALETTE_MASK
+ ld [wTempObjectCopyPalette], a
+
+.skip_color_override
+ ld hl, MAPOBJECT_MOVEMENT
add hl, bc
ld a, [hl]
- ld [wce9d], a
- ld hl, $9
+ ld [wTempObjectCopyMovement], a
+
+ ld hl, MAPOBJECT_RANGE
add hl, bc
ld a, [hl]
ld [wTempObjectCopyRange], a
- ld hl, $3
+
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, [hl]
- ld [wce9f], a
- ld hl, $2
+ ld [wTempObjectCopyX], a
+
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, [hl]
- ld [wcea0], a
- ld hl, $5
+ ld [wTempObjectCopyY], a
+
+ ld hl, MAPOBJECT_RADIUS
add hl, bc
ld a, [hl]
- ld [wcea1], a
+ ld [wTempObjectCopyRadius], a
ret
InitializeVisibleSprites:
ld bc, wMap2Object
- ld a, $2
-.asm_876c
- ldh [hConnectionStripLength], a
- ld hl, $1
+ ld a, 2
+.loop
+ ldh [hMapObjectIndexBuffer], a
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_87ab
- ld hl, $0
+ jr z, .next
+
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_87ab
+ cp -1
+ jr nz, .next
+
ld a, [wXCoord]
ld d, a
ld a, [wYCoord]
ld e, a
- ld hl, $3
+
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub d
- jr c, .asm_87ab
- cp $c
- jr nc, .asm_87ab
- ld hl, $2
+ jr c, .next
+
+ cp MAPOBJECT_SCREEN_WIDTH
+ jr nc, .next
+
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_87ab
- cp $b
- jr nc, .asm_87ab
+ jr c, .next
+
+ cp MAPOBJECT_SCREEN_HEIGHT
+ jr nc, .next
+
push bc
call CopyObjectStruct
pop bc
- jp c, Function87b9
-.asm_87ab
- ld hl, $10
+ jp c, .ret
+
+.next
+ ld hl, MAPOBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hMapObjectIndexBuffer]
inc a
- cp $10
- jr nz, .asm_876c
+ cp NUM_OBJECTS
+ jr nz, .loop
ret
-Function87b9: ; 87b9 (2:47b9)
+.ret
ret
CheckObjectEnteringVisibleRange::
nop
ld a, [wPlayerStepDirection]
- cp $ff
+ cp STANDING
ret z
- ld hl, .Jumptable
+ ld hl, .dw
rst JumpTable
ret
-.Jumptable:
- dw Function87d5
- dw Function87ce
- dw Function8822
- dw Function8829
+.dw
+ dw .Down
+ dw .Up
+ dw .Left
+ dw .Right
-Function87ce:
+.Up:
ld a, [wYCoord]
- sub $1
- jr asm_87da
+ sub 1
+ jr .Vertical
-Function87d5:
+.Down:
ld a, [wYCoord]
- add $9
-asm_87da:
+ add 9
+.Vertical:
ld d, a
ld a, [wXCoord]
ld e, a
ld bc, wMap2Object
- ld a, $2
-.asm_87e4
- ldh [hConnectionStripLength], a
- ld hl, $1
+ ld a, 2
+.loop_v
+ ldh [hMapObjectIndexBuffer], a
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_8814
- ld hl, $2
+ jr z, .next_v
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, d
cp [hl]
- jr nz, .asm_8814
- ld hl, $0
+ jr nz, .next_v
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_8814
- ld hl, $3
+ cp -1
+ jr nz, .next_v
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_8814
- cp $c
- jr nc, .asm_8814
+ jr c, .next_v
+ cp MAPOBJECT_SCREEN_WIDTH
+ jr nc, .next_v
push de
push bc
call CopyObjectStruct
pop bc
pop de
-.asm_8814
- ld hl, $10
+
+.next_v
+ ld hl, MAPOBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hMapObjectIndexBuffer]
inc a
- cp $10
- jr nz, .asm_87e4
+ cp NUM_OBJECTS
+ jr nz, .loop_v
ret
-Function8822:
+.Left:
ld a, [wXCoord]
- sub $1
- jr asm_882e
+ sub 1
+ jr .Horizontal
-Function8829:
+.Right:
ld a, [wXCoord]
- add $a
-asm_882e:
+ add 10
+.Horizontal:
ld e, a
ld a, [wYCoord]
ld d, a
ld bc, wMap2Object
- ld a, $2
-.asm_8838
- ldh [hConnectionStripLength], a
- ld hl, $1
+ ld a, 2
+.loop_h
+ ldh [hMapObjectIndexBuffer], a
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_8868
- ld hl, $3
+ jr z, .next_h
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, e
cp [hl]
- jr nz, .asm_8868
- ld hl, $0
+ jr nz, .next_h
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_8868
- ld hl, $2
+ cp -1
+ jr nz, .next_h
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub d
- jr c, .asm_8868
- cp $b
- jr nc, .asm_8868
+ jr c, .next_h
+ cp MAPOBJECT_SCREEN_HEIGHT
+ jr nc, .next_h
push de
push bc
call CopyObjectStruct
pop bc
pop de
-.asm_8868
- ld hl, $10
+
+.next_h
+ ld hl, MAPOBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
inc a
- cp $10
- jr nz, .asm_8838
+ cp NUM_OBJECTS
+ jr nz, .loop_h
ret
-CopyTempObjectToObjectStruct: ; 8876 (2:4876)
+CopyTempObjectToObjectStruct:
ld a, [wTempObjectCopyMapObjectIndex]
- ld hl, $1
+ ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, de
ld [hl], a
- ld a, [wce9d]
+
+ ld a, [wTempObjectCopyMovement]
call CopySpriteMovementData
- ld a, [wce9c]
- ld hl, $6
+
+ ld a, [wTempObjectCopyPalette]
+ ld hl, OBJECT_PALETTE
add hl, de
or [hl]
ld [hl], a
- ld a, [wcea0]
- call InitTempObjectYCoord
- ld a, [wce9f]
- call InitTempObjectXCoord
- ld a, [wce9a]
- ld hl, $0
+
+ ld a, [wTempObjectCopyY]
+ call .InitYCoord
+
+ ld a, [wTempObjectCopyX]
+ call .InitXCoord
+
+ ld a, [wTempObjectCopySprite]
+ ld hl, OBJECT_SPRITE
add hl, de
ld [hl], a
- ld a, [wce9b]
- ld hl, $2
+
+ ld a, [wTempObjectCopySpriteVTile]
+ ld hl, OBJECT_SPRITE_TILE
add hl, de
ld [hl], a
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, de
- ld [hl], $0
- ld hl, $d
+ ld [hl], STEP_TYPE_00
+
+ ld hl, OBJECT_FACING_STEP
add hl, de
- ld [hl], $ff
- ld a, [wcea1]
- call InitTempObjectRadius
+ ld [hl], STANDING
+
+ ld a, [wTempObjectCopyRadius]
+ call .InitRadius
+
ld a, [wTempObjectCopyRange]
- ld hl, $20
+ ld hl, OBJECT_RANGE
add hl, de
ld [hl], a
+
and a
ret
-InitTempObjectYCoord: ; 88c5 (2:48c5)
- ld hl, $15
+.InitYCoord:
+ ld hl, OBJECT_INIT_Y
add hl, de
ld [hl], a
- ld hl, $11
+
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld [hl], a
+
ld hl, wYCoord
sub [hl]
and $f
swap a
ld hl, wPlayerBGMapOffsetY
sub [hl]
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, de
ld [hl], a
ret
-InitTempObjectXCoord: ; 88e1 (2:48e1)
- ld hl, $14
+.InitXCoord:
+ ld hl, OBJECT_INIT_X
add hl, de
ld [hl], a
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld [hl], a
ld hl, wXCoord
@@ -454,12 +490,12 @@ InitTempObjectXCoord: ; 88e1 (2:48e1)
swap a
ld hl, wPlayerBGMapOffsetX
sub [hl]
- ld hl, $17
+ ld hl, OBJECT_SPRITE_X
add hl, de
ld [hl], a
ret
-InitTempObjectRadius: ; 88fd (2:48fd)
+.InitRadius:
ld h, a
inc a
and $f
@@ -468,7 +504,7 @@ InitTempObjectRadius: ; 88fd (2:48fd)
add $10
and $f0
or l
- ld hl, $16
+ ld hl, OBJECT_RADIUS
add hl, de
ld [hl], a
ret
@@ -480,75 +516,84 @@ TrainerWalkToPlayer::
call AppendToMovementBuffer
ld a, [wWalkingIntoNPC]
dec a
- jr z, .asm_892b
+ jr z, .TerminateStep
ldh a, [hLastTalked]
ld b, a
ld c, PLAYER
- ld d, $1
- call GetTrainerPathToPlayer
+ ld d, 1
+ call .GetPathToPlayer
call DecrementMovementBufferCount
-.asm_892b
+
+.TerminateStep:
ld a, movement_step_end
call AppendToMovementBuffer
ret
-GetTrainerPathToPlayer: ; 8931 (2:4931)
+.GetPathToPlayer:
push de
push bc
+; get player object struct, load to de
ld a, c
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
call GetObjectStruct
ld d, b
ld e, c
+
+; get last talked object struct, load to bc
pop bc
ld a, b
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
call GetObjectStruct
- ld hl, $10
+
+; get last talked coords, load to bc
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld c, [hl]
ld b, a
- ld hl, $10
+
+; get player coords, load to de
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld e, [hl]
ld d, a
+
pop af
call ComputePathToWalkToPlayer
ret
-SurfStartStep: ; 8969 (2:4969)
+SurfStartStep:
call InitMovementBuffer
- call GetInitialSurfStep
+ call .GetMovementData
call AppendToMovementBuffer
ld a, movement_step_end
call AppendToMovementBuffer
ret
-GetInitialSurfStep: ; 8978 (2:4978)
+.GetMovementData:
ld a, [wPlayerDirection]
srl a
srl a
- and $3
+ maskbits NUM_DIRECTIONS
ld e, a
- ld d, $0
- ld hl, .Data ; $498a
+ ld d, 0
+ ld hl, .movement_data
add hl, de
ld a, [hl]
ret
-.Data
+.movement_data
slow_step DOWN
slow_step UP
slow_step LEFT
@@ -562,43 +607,48 @@ FollowNotExact::
ld e, c
pop bc
ret c
+
ld a, b
call CheckObjectVisibility
ret c
- ld hl, $10
+
+; object 2 is now in bc, object 1 is now in de
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld c, [hl]
ld b, a
- ld hl, $10
+
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld a, [hl]
cp b
- jr z, .asm_89b7
- jr c, .asm_89b4
+ jr z, .same_x
+ jr c, .to_the_left
inc b
- jr .asm_89c5
+ jr .continue
-.asm_89b4
+.to_the_left
dec b
- jr .asm_89c5
+ jr .continue
-.asm_89b7
- ld hl, $11
+.same_x
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld a, [hl]
cp c
- jr z, .asm_89c5
- jr c, .asm_89c4
+ jr z, .continue
+ jr c, .below
inc c
- jr .asm_89c5
+ jr .continue
-.asm_89c4
+.below
dec c
-.asm_89c5
- ld hl, $10
+
+.continue
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld [hl], b
ld a, b
@@ -608,10 +658,10 @@ FollowNotExact::
swap a
ld hl, wPlayerBGMapOffsetX
sub [hl]
- ld hl, $17
+ ld hl, OBJECT_SPRITE_X
add hl, de
ld [hl], a
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld [hl], c
ld a, c
@@ -621,169 +671,182 @@ FollowNotExact::
swap a
ld hl, wPlayerBGMapOffsetY
sub [hl]
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, de
ld [hl], a
ldh a, [hObjectStructIndexBuffer]
- ld hl, $20
+ ld hl, OBJECT_RANGE
add hl, de
ld [hl], a
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, de
- ld [hl], $1a
- ld hl, $9
+ ld [hl], SPRITEMOVEDATA_FOLLOWNOTEXACT
+ ld hl, OBJECT_STEP_TYPE
add hl, de
- ld [hl], $0
+ ld [hl], STEP_TYPE_00
ret
GetRelativeFacing::
+; Determines which way map object e would have to turn to face map object d. Returns carry if it's impossible for whatever reason.
ld a, d
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $d
- jr nc, .asm_8a27
+ cp NUM_OBJECT_STRUCTS
+ jr nc, .carry
ld d, a
ld a, e
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $d
- jr nc, .asm_8a27
+ cp NUM_OBJECT_STRUCTS
+ jr nc, .carry
ld e, a
- call GetFacing_e_relativeto_d
+ call .GetFacing_e_relativeto_d
ret
-.asm_8a27
+.carry
scf
ret
-GetFacing_e_relativeto_d: ; 8a29 (2:4a29)
+.GetFacing_e_relativeto_d:
+; Determines which way object e would have to turn to face object d. Returns carry if it's impossible.
+; load the coordinates of object d into bc
ld a, d
call GetObjectStruct
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld c, [hl]
ld b, a
push bc
+; load the coordinates of object e into de
ld a, e
call GetObjectStruct
- 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 bc
+; |x1 - x2|
ld a, b
sub d
- jr z, .asm_8a5c
- jr nc, .asm_8a50
+ jr z, .same_x_1
+ jr nc, .b_right_of_d_1
cpl
inc a
-.asm_8a50
+
+.b_right_of_d_1
+; |y1 - y2|
ld h, a
ld a, c
sub e
- jr z, .asm_8a6a
- jr nc, .asm_8a59
+ jr z, .same_y_1
+ jr nc, .c_below_e_1
cpl
inc a
-.asm_8a59
+
+.c_below_e_1
+; |y1 - y2| - |x1 - x2|
sub h
- jr c, .asm_8a6a
-.asm_8a5c
+ jr c, .same_y_1
+
+.same_x_1
+; compare the y coordinates
ld a, c
cp e
- jr z, .asm_8a78
- jr c, .asm_8a66
- ld d, $0
+ jr z, .same_x_and_y
+ jr c, .c_directly_below_e
+; c directly above e
+ ld d, DOWN
and a
ret
-.asm_8a66
- ld d, $1
+.c_directly_below_e
+ ld d, UP
and a
ret
-.asm_8a6a
+.same_y_1
ld a, b
cp d
- jr z, .asm_8a78
- jr c, .asm_8a74
- ld d, $3
+ jr z, .same_x_and_y
+ jr c, .b_directly_right_of_d
+; b directly left of d
+ ld d, RIGHT
and a
ret
-.asm_8a74
- ld d, $2
+.b_directly_right_of_d
+ ld d, LEFT
and a
ret
-.asm_8a78
+.same_x_and_y
scf
ret
-QueueFollowerFirstStep: ; 8a7a (2:4a7a)
- call Function8a8d
- jr c, .asm_8a87
+QueueFollowerFirstStep:
+ call .QueueFirstStep
+ jr c, .same
ld [wFollowMovementQueue], a
xor a
ld [wFollowerMovementQueueLength], a
ret
-.asm_8a87
- ld a, $ff
+.same
+ ld a, -1
ld [wFollowerMovementQueueLength], a
ret
-Function8a8d: ; 8a8d (2:4a8d)
+.QueueFirstStep:
ld a, [wObjectFollow_Leader]
call GetObjectStruct
- 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]
ld a, [wObjectFollow_Follower]
call GetObjectStruct
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, d
cp [hl]
- jr z, .asm_8ab5
- jr c, .asm_8ab1
+ jr z, .check_y
+ jr c, .left
and a
- ld a, $f
+ ld a, movement_step + RIGHT
ret
-.asm_8ab1
+.left
and a
- ld a, $e
+ ld a, movement_step + LEFT
ret
-.asm_8ab5
- ld hl, $11
+.check_y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, e
cp [hl]
- jr z, .asm_8ac7
- jr c, .asm_8ac3
+ jr z, .same_xy
+ jr c, .up
and a
- ld a, $c
+ ld a, movement_step + DOWN
ret
-.asm_8ac3
+.up
and a
- ld a, $d
+ ld a, movement_step + UP
ret
-.asm_8ac7
+.same_xy
scf
ret