More movement stuff
This commit is contained in:
870
main.asm
870
main.asm
@@ -1568,21 +1568,21 @@ GetRelativeFacing:: ; 8417
|
||||
ret
|
||||
; 848a
|
||||
|
||||
Function848a: ; 848a
|
||||
call Function849d
|
||||
QueueFollowerFirstStep: ; 848a
|
||||
call .QueueFirstStep
|
||||
jr c, .same
|
||||
ld [wd4d1], a
|
||||
ld [wFollowMovementQueue], a
|
||||
xor a
|
||||
ld [wd4d0], a
|
||||
ld [wFollowerMovementQueueLength], a
|
||||
ret
|
||||
|
||||
.same
|
||||
ld a, -1
|
||||
ld [wd4d0], a
|
||||
ld [wFollowerMovementQueueLength], a
|
||||
ret
|
||||
; 849d
|
||||
|
||||
Function849d: ; 849d
|
||||
.QueueFirstStep
|
||||
ld a, [wObjectFollow_Leader]
|
||||
call GetObjectStruct
|
||||
ld hl, OBJECT_NEXT_MAP_X
|
||||
@@ -1600,12 +1600,12 @@ Function849d: ; 849d
|
||||
jr z, .check_y
|
||||
jr c, .left
|
||||
and a
|
||||
ld a, $c + RIGHT
|
||||
ld a, movement_step_right
|
||||
ret
|
||||
|
||||
.left
|
||||
and a
|
||||
ld a, $c + LEFT
|
||||
ld a, movement_step_left
|
||||
ret
|
||||
|
||||
.check_y
|
||||
@@ -1616,12 +1616,12 @@ Function849d: ; 849d
|
||||
jr z, .same_xy
|
||||
jr c, .up
|
||||
and a
|
||||
ld a, $c + DOWN
|
||||
ld a, movement_step_down
|
||||
ret
|
||||
|
||||
.up
|
||||
and a
|
||||
ld a, $c + UP
|
||||
ld a, movement_step_up
|
||||
ret
|
||||
|
||||
.same_xy
|
||||
@@ -11520,855 +11520,7 @@ INCLUDE "text/phone/extra.asm"
|
||||
|
||||
SECTION "bank20", ROMX, BANK[$20]
|
||||
|
||||
DoPlayerMovement:: ; 80000
|
||||
|
||||
call GetMovementInput
|
||||
ld a, movement_step_sleep_1
|
||||
ld [MovementAnimation], a
|
||||
xor a
|
||||
ld [wd041], a
|
||||
call GetPlayerMovement
|
||||
ld c, a
|
||||
ld a, [MovementAnimation]
|
||||
ld [wc2de], a
|
||||
ret
|
||||
; 80017
|
||||
|
||||
GetMovementInput: ; 80017
|
||||
|
||||
ld a, [hJoyDown]
|
||||
ld [CurInput], a
|
||||
|
||||
; Standing downhill instead moves down.
|
||||
|
||||
ld hl, BikeFlags
|
||||
bit 2, [hl] ; downhill
|
||||
ret z
|
||||
|
||||
ld c, a
|
||||
and D_PAD
|
||||
ret nz
|
||||
|
||||
ld a, c
|
||||
or D_DOWN
|
||||
ld [CurInput], a
|
||||
ret
|
||||
; 8002d
|
||||
|
||||
GetPlayerMovement: ; 8002d
|
||||
|
||||
ld a, [PlayerState]
|
||||
cp PLAYER_NORMAL
|
||||
jr z, .Normal
|
||||
cp PLAYER_SURF
|
||||
jr z, .Surf
|
||||
cp PLAYER_SURF_PIKA
|
||||
jr z, .Surf
|
||||
cp PLAYER_BIKE
|
||||
jr z, .Normal
|
||||
cp PLAYER_SLIP
|
||||
jr z, .Ice
|
||||
|
||||
.Normal
|
||||
call CheckForcedMovementInput
|
||||
call GetMovementAction
|
||||
call CheckTileMovement
|
||||
ret c
|
||||
call CheckTurning
|
||||
ret c
|
||||
call TryStep
|
||||
ret c
|
||||
call TryJumpLedge
|
||||
ret c
|
||||
call CheckEdgeWarp
|
||||
ret c
|
||||
jr .NotMoving
|
||||
|
||||
.Surf
|
||||
call CheckForcedMovementInput
|
||||
call GetMovementAction
|
||||
call CheckTileMovement
|
||||
ret c
|
||||
call CheckTurning
|
||||
ret c
|
||||
call TrySurfStep
|
||||
ret c
|
||||
jr .NotMoving
|
||||
|
||||
.Ice
|
||||
call CheckForcedMovementInput
|
||||
call GetMovementAction
|
||||
call CheckTileMovement
|
||||
ret c
|
||||
call CheckTurning
|
||||
ret c
|
||||
call TryStep
|
||||
ret c
|
||||
call TryJumpLedge
|
||||
ret c
|
||||
call CheckEdgeWarp
|
||||
ret c
|
||||
ld a, [WalkingDirection]
|
||||
cp STANDING
|
||||
jr z, .HitWall
|
||||
call PlayBump
|
||||
.HitWall
|
||||
call StandInPlace
|
||||
xor a
|
||||
ret
|
||||
|
||||
.NotMoving
|
||||
ld a, [WalkingDirection]
|
||||
cp STANDING
|
||||
jr z, .Standing
|
||||
|
||||
; Walking into an edge warp won't bump.
|
||||
ld a, [EngineBuffer4]
|
||||
and a
|
||||
jr nz, .CantMove
|
||||
call PlayBump
|
||||
.CantMove
|
||||
call WalkInPlace
|
||||
xor a
|
||||
ret
|
||||
|
||||
.Standing
|
||||
call StandInPlace
|
||||
xor a
|
||||
ret
|
||||
; 800b7
|
||||
|
||||
CheckTileMovement: ; 800b7
|
||||
; Tiles such as waterfalls and warps move the player
|
||||
; in a given direction, overriding input.
|
||||
|
||||
ld a, [PlayerNextTile]
|
||||
ld c, a
|
||||
call CheckWhirlpoolTile
|
||||
jr c, .asm_800c4
|
||||
ld a, 3
|
||||
scf
|
||||
ret
|
||||
|
||||
.asm_800c4
|
||||
and $f0
|
||||
cp $30 ; moving water
|
||||
jr z, .water
|
||||
cp $40 ; moving land 1
|
||||
jr z, .land1
|
||||
cp $50 ; moving land 2
|
||||
jr z, .land2
|
||||
cp $70 ; warps
|
||||
jr z, .warps
|
||||
jr .asm_8013c
|
||||
|
||||
.water
|
||||
ld a, c
|
||||
and 3
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, .water_table
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [WalkingDirection], a
|
||||
jr .asm_8013e
|
||||
|
||||
.water_table
|
||||
db RIGHT
|
||||
db LEFT
|
||||
db UP
|
||||
db DOWN
|
||||
|
||||
.land1
|
||||
ld a, c
|
||||
and 7
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, .land1_table
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp STANDING
|
||||
jr z, .asm_8013c
|
||||
ld [WalkingDirection], a
|
||||
jr .asm_8013e
|
||||
|
||||
.land1_table
|
||||
db STANDING
|
||||
db RIGHT
|
||||
db LEFT
|
||||
db UP
|
||||
db DOWN
|
||||
db STANDING
|
||||
db STANDING
|
||||
db STANDING
|
||||
|
||||
.land2
|
||||
ld a, c
|
||||
and 7
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, .land2_table
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp STANDING
|
||||
jr z, .asm_8013c
|
||||
ld [WalkingDirection], a
|
||||
jr .asm_8013e
|
||||
|
||||
.land2_table
|
||||
db RIGHT
|
||||
db LEFT
|
||||
db UP
|
||||
db DOWN
|
||||
db STANDING
|
||||
db STANDING
|
||||
db STANDING
|
||||
db STANDING
|
||||
|
||||
.warps
|
||||
ld a, c
|
||||
cp $71 ; door
|
||||
jr z, .down
|
||||
cp $79
|
||||
jr z, .down
|
||||
cp $7a ; stairs
|
||||
jr z, .down
|
||||
cp $7b ; cave
|
||||
jr nz, .asm_8013c
|
||||
|
||||
.down
|
||||
ld a, DOWN
|
||||
ld [WalkingDirection], a
|
||||
jr .asm_8013e
|
||||
|
||||
.asm_8013c
|
||||
xor a
|
||||
ret
|
||||
|
||||
.asm_8013e
|
||||
ld a, STEP_WALK
|
||||
call DoStep
|
||||
ld a, 5
|
||||
scf
|
||||
ret
|
||||
; 80147
|
||||
|
||||
CheckTurning: ; 80147
|
||||
; If the player is turning, change direction first. This also lets
|
||||
; the player change facing without moving by tapping a direction.
|
||||
|
||||
ld a, [wd04e]
|
||||
cp 0
|
||||
jr nz, .asm_80169
|
||||
ld a, [WalkingDirection]
|
||||
cp STANDING
|
||||
jr z, .asm_80169
|
||||
|
||||
ld e, a
|
||||
ld a, [PlayerDirection]
|
||||
rrca
|
||||
rrca
|
||||
and 3
|
||||
cp e
|
||||
jr z, .asm_80169
|
||||
|
||||
ld a, STEP_TURN
|
||||
call DoStep
|
||||
ld a, 2
|
||||
scf
|
||||
ret
|
||||
|
||||
.asm_80169
|
||||
xor a
|
||||
ret
|
||||
; 8016b
|
||||
|
||||
TryStep: ; 8016b
|
||||
|
||||
; Surfing actually calls TrySurfStep directly instead of passing through here.
|
||||
ld a, [PlayerState]
|
||||
cp PLAYER_SURF
|
||||
jr z, TrySurfStep
|
||||
cp PLAYER_SURF_PIKA
|
||||
jr z, TrySurfStep
|
||||
|
||||
call CheckLandPermissions
|
||||
jr c, .bump
|
||||
|
||||
call IsNPCInFront
|
||||
and a
|
||||
jr z, .bump
|
||||
cp 2
|
||||
jr z, .bump
|
||||
|
||||
ld a, [PlayerNextTile]
|
||||
call CheckIceTile
|
||||
jr nc, .ice
|
||||
|
||||
; Downhill riding is slower when not moving down.
|
||||
call CheckRiding
|
||||
jr nz, .walk
|
||||
|
||||
ld hl, BikeFlags
|
||||
bit 2, [hl] ; downhill
|
||||
jr z, .fast
|
||||
|
||||
ld a, [WalkingDirection]
|
||||
cp DOWN
|
||||
jr z, .fast
|
||||
|
||||
ld a, STEP_WALK
|
||||
call DoStep
|
||||
scf
|
||||
ret
|
||||
|
||||
.fast
|
||||
ld a, STEP_BIKE
|
||||
call DoStep
|
||||
scf
|
||||
ret
|
||||
|
||||
.walk
|
||||
ld a, STEP_WALK
|
||||
call DoStep
|
||||
scf
|
||||
ret
|
||||
|
||||
.ice
|
||||
ld a, STEP_ICE
|
||||
call DoStep
|
||||
scf
|
||||
ret
|
||||
|
||||
; unused?
|
||||
xor a
|
||||
ret
|
||||
|
||||
.bump
|
||||
xor a
|
||||
ret
|
||||
; 801c0
|
||||
|
||||
TrySurfStep: ; 801c0
|
||||
|
||||
call CheckWaterPermissions
|
||||
ld [wd040], a
|
||||
jr c, .bump
|
||||
|
||||
call IsNPCInFront
|
||||
ld [wd03f], a
|
||||
and a
|
||||
jr z, .bump
|
||||
cp 2
|
||||
jr z, .bump
|
||||
|
||||
ld a, [wd040]
|
||||
and a
|
||||
jr nz, .ExitWater
|
||||
|
||||
ld a, STEP_WALK
|
||||
call DoStep
|
||||
scf
|
||||
ret
|
||||
|
||||
.ExitWater
|
||||
call WaterToLandSprite
|
||||
call PlayMapMusic
|
||||
ld a, STEP_WALK
|
||||
call DoStep
|
||||
ld a, 6
|
||||
scf
|
||||
ret
|
||||
|
||||
.bump
|
||||
xor a
|
||||
ret
|
||||
; 801f3
|
||||
|
||||
TryJumpLedge: ; 801f3
|
||||
ld a, [PlayerNextTile]
|
||||
ld e, a
|
||||
and $f0
|
||||
cp $a0 ; ledge
|
||||
jr nz, .DontJump
|
||||
|
||||
ld a, e
|
||||
and 7
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .data_8021e
|
||||
add hl, de
|
||||
ld a, [FacingDirection]
|
||||
and [hl]
|
||||
jr z, .DontJump
|
||||
|
||||
ld de, SFX_JUMP_OVER_LEDGE
|
||||
call PlaySFX
|
||||
ld a, STEP_LEDGE
|
||||
call DoStep
|
||||
ld a, 7
|
||||
scf
|
||||
ret
|
||||
|
||||
.DontJump
|
||||
xor a
|
||||
ret
|
||||
|
||||
.data_8021e
|
||||
db FACE_RIGHT
|
||||
db FACE_LEFT
|
||||
db FACE_UP
|
||||
db FACE_DOWN
|
||||
db FACE_RIGHT | FACE_DOWN
|
||||
db FACE_DOWN | FACE_LEFT
|
||||
db FACE_UP | FACE_RIGHT
|
||||
db FACE_UP | FACE_LEFT
|
||||
; 80226
|
||||
|
||||
CheckEdgeWarp: ; 80226
|
||||
|
||||
; Bug: Since no case is made for STANDING here, it will check
|
||||
; [.edgewarps + $ff]. This resolves to $3e at $8035a.
|
||||
; This causes wd041 to be nonzero when standing on tile $3e,
|
||||
; making bumps silent.
|
||||
|
||||
ld a, [WalkingDirection]
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .EdgeWarps
|
||||
add hl, de
|
||||
ld a, [PlayerNextTile]
|
||||
cp [hl]
|
||||
jr nz, .nope
|
||||
|
||||
ld a, 1
|
||||
ld [wd041], a
|
||||
ld a, [WalkingDirection]
|
||||
cp STANDING
|
||||
jr z, .nope
|
||||
|
||||
ld e, a
|
||||
ld a, [PlayerDirection]
|
||||
rrca
|
||||
rrca
|
||||
and 3
|
||||
cp e
|
||||
jr nz, .nope
|
||||
call WarpCheck
|
||||
jr nc, .nope
|
||||
|
||||
call StandInPlace
|
||||
scf
|
||||
ld a, 1
|
||||
ret
|
||||
|
||||
.nope
|
||||
xor a
|
||||
ret
|
||||
|
||||
.EdgeWarps
|
||||
db $70, $78, $76, $7e
|
||||
; 8025f
|
||||
|
||||
DoStep: ; 8025f
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .Steps
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
|
||||
ld a, [WalkingDirection]
|
||||
ld e, a
|
||||
cp STANDING
|
||||
jp z, StandInPlace
|
||||
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [MovementAnimation], a
|
||||
|
||||
ld hl, .WalkInPlace
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [wd04e], a
|
||||
|
||||
ld a, 4
|
||||
ret
|
||||
|
||||
.Steps
|
||||
dw .Slow
|
||||
dw .Walk
|
||||
dw .Bike
|
||||
dw .Ledge
|
||||
dw .Ice
|
||||
dw .Turn
|
||||
dw .BackwardsLedge
|
||||
dw .WalkInPlace
|
||||
|
||||
.Slow
|
||||
slow_step_down
|
||||
slow_step_up
|
||||
slow_step_left
|
||||
slow_step_right
|
||||
.Walk
|
||||
step_down
|
||||
step_up
|
||||
step_left
|
||||
step_right
|
||||
.Bike
|
||||
big_step_down
|
||||
big_step_up
|
||||
big_step_left
|
||||
big_step_right
|
||||
.Ledge
|
||||
jump_step_down
|
||||
jump_step_up
|
||||
jump_step_left
|
||||
jump_step_right
|
||||
.Ice
|
||||
fast_slide_step_down
|
||||
fast_slide_step_up
|
||||
fast_slide_step_left
|
||||
fast_slide_step_right
|
||||
.BackwardsLedge
|
||||
jump_step_up
|
||||
jump_step_down
|
||||
jump_step_right
|
||||
jump_step_left
|
||||
.Turn
|
||||
half_step_down
|
||||
half_step_up
|
||||
half_step_left
|
||||
half_step_right
|
||||
.WalkInPlace
|
||||
db $80 + movement_turn_head_down
|
||||
db $80 + movement_turn_head_up
|
||||
db $80 + movement_turn_head_left
|
||||
db $80 + movement_turn_head_right
|
||||
; 802b3
|
||||
|
||||
StandInPlace: ; 802b3
|
||||
ld a, 0
|
||||
ld [wd04e], a
|
||||
ld a, movement_step_sleep_1
|
||||
ld [MovementAnimation], a
|
||||
xor a
|
||||
ret
|
||||
; 802bf
|
||||
|
||||
WalkInPlace: ; 802bf
|
||||
ld a, 0
|
||||
ld [wd04e], a
|
||||
ld a, movement_step_bump
|
||||
ld [MovementAnimation], a
|
||||
xor a
|
||||
ret
|
||||
; 802cb
|
||||
|
||||
CheckForcedMovementInput: ; 802cb
|
||||
; When sliding on ice, input is forced to remain in the same direction.
|
||||
|
||||
call CheckStandingOnIce
|
||||
ret nc
|
||||
|
||||
ld a, [wd04e]
|
||||
cp 0
|
||||
ret z
|
||||
|
||||
and 3
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .data_802e8
|
||||
add hl, de
|
||||
ld a, [CurInput]
|
||||
and BUTTONS
|
||||
or [hl]
|
||||
ld [CurInput], a
|
||||
ret
|
||||
|
||||
.data_802e8
|
||||
db D_DOWN, D_UP, D_LEFT, D_RIGHT
|
||||
; 802ec
|
||||
|
||||
GetMovementAction: ; 802ec
|
||||
; Poll player input and update movement info.
|
||||
|
||||
ld hl, .table
|
||||
ld de, .table2 - .table1
|
||||
ld a, [CurInput]
|
||||
bit 7, a
|
||||
jr nz, .down
|
||||
bit 6, a
|
||||
jr nz, .up
|
||||
bit 5, a
|
||||
jr nz, .left
|
||||
bit 4, a
|
||||
jr nz, .right
|
||||
; Standing
|
||||
jr .update
|
||||
|
||||
.down add hl, de
|
||||
.up add hl, de
|
||||
.left add hl, de
|
||||
.right add hl, de
|
||||
|
||||
.update
|
||||
ld a, [hli]
|
||||
ld [WalkingDirection], a
|
||||
ld a, [hli]
|
||||
ld [FacingDirection], a
|
||||
ld a, [hli]
|
||||
ld [WalkingX], a
|
||||
ld a, [hli]
|
||||
ld [WalkingY], a
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld a, [hl]
|
||||
ld [WalkingTile], a
|
||||
ret
|
||||
|
||||
.table
|
||||
; struct:
|
||||
; walk direction
|
||||
; facing
|
||||
; x movement
|
||||
; y movement
|
||||
; tile collision pointer
|
||||
.table1
|
||||
db STANDING, FACE_CURRENT, 0, 0
|
||||
dw PlayerNextTile
|
||||
.table2
|
||||
db RIGHT, FACE_RIGHT, 1, 0
|
||||
dw TileRight
|
||||
db LEFT, FACE_LEFT, -1, 0
|
||||
dw TileLeft
|
||||
db UP, FACE_UP, 0, -1
|
||||
dw TileUp
|
||||
db DOWN, FACE_DOWN, 0, 1
|
||||
dw TileDown
|
||||
; 80341
|
||||
|
||||
IsNPCInFront: ; 80341
|
||||
; Returns 0 if there is an NPC in front that you can't move
|
||||
; Returns 1 if there is no NPC in front
|
||||
; Returns 2 if there is a movable NPC in front
|
||||
ld a, 0
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
; Load the next X coordinate into d
|
||||
ld a, [PlayerNextMapX]
|
||||
ld d, a
|
||||
ld a, [WalkingX]
|
||||
add d
|
||||
ld d, a
|
||||
; Load the next Y coordinate into e
|
||||
ld a, [PlayerNextMapY]
|
||||
ld e, a
|
||||
ld a, [WalkingY]
|
||||
add e
|
||||
ld e, a
|
||||
; Find an object struct with coordinates equal to d,e
|
||||
ld bc, ObjectStructs ; redundant
|
||||
callba IsNPCAtCoord
|
||||
jr nc, .nope
|
||||
call Function8036f
|
||||
jr c, .no_bump
|
||||
|
||||
; .bump
|
||||
xor a
|
||||
ret
|
||||
|
||||
.nope
|
||||
ld a, 1
|
||||
ret
|
||||
|
||||
.no_bump
|
||||
ld a, 2
|
||||
ret
|
||||
; 8036f
|
||||
|
||||
Function8036f: ; 8036f
|
||||
|
||||
ld hl, BikeFlags
|
||||
bit 0, [hl] ; using strength
|
||||
jr z, .nope
|
||||
|
||||
ld hl, OBJECT_DIRECTION_WALKING
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp STANDING
|
||||
jr nz, .nope
|
||||
|
||||
ld hl, OBJECT_PALETTE
|
||||
add hl, bc
|
||||
bit 6, [hl]
|
||||
jr z, .nope
|
||||
|
||||
ld hl, OBJECT_FLAGS2
|
||||
add hl, bc
|
||||
set 2, [hl]
|
||||
|
||||
ld a, [WalkingDirection]
|
||||
ld d, a
|
||||
ld hl, OBJECT_RANGE
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and $fc
|
||||
or d
|
||||
ld [hl], a
|
||||
|
||||
scf
|
||||
ret
|
||||
|
||||
.nope
|
||||
xor a
|
||||
ret
|
||||
; 8039e
|
||||
|
||||
CheckLandPermissions: ; 8039e
|
||||
; Return 0 if walking onto land and tile permissions allow it.
|
||||
; Otherwise, return carry.
|
||||
|
||||
ld a, [TilePermissions]
|
||||
ld d, a
|
||||
ld a, [FacingDirection]
|
||||
and d
|
||||
jr nz, .NotWalkable
|
||||
|
||||
ld a, [WalkingTile]
|
||||
call CheckWalkable
|
||||
jr c, .NotWalkable
|
||||
|
||||
xor a
|
||||
ret
|
||||
|
||||
.NotWalkable
|
||||
scf
|
||||
ret
|
||||
; 803b4
|
||||
|
||||
CheckWaterPermissions: ; 803b4
|
||||
; Return 0 if moving in water, or 1 if moving onto land.
|
||||
; Otherwise, return carry.
|
||||
|
||||
ld a, [TilePermissions]
|
||||
ld d, a
|
||||
ld a, [FacingDirection]
|
||||
and d
|
||||
jr nz, .NotSurfable
|
||||
|
||||
ld a, [WalkingTile]
|
||||
call CheckSurfable
|
||||
jr c, .NotSurfable
|
||||
|
||||
and a
|
||||
ret
|
||||
|
||||
.NotSurfable
|
||||
scf
|
||||
ret
|
||||
; 803ca
|
||||
|
||||
CheckRiding: ; 803ca
|
||||
|
||||
ld a, [PlayerState]
|
||||
cp PLAYER_BIKE
|
||||
ret z
|
||||
cp PLAYER_SLIP
|
||||
ret
|
||||
; 803d3
|
||||
|
||||
CheckWalkable: ; 803d3
|
||||
; Return 0 if tile a is land. Otherwise, return carry.
|
||||
|
||||
call GetTileCollision
|
||||
and a ; land
|
||||
ret z
|
||||
scf
|
||||
ret
|
||||
; 803da
|
||||
|
||||
CheckSurfable: ; 803da
|
||||
; Return 0 if tile a is water, or 1 if land.
|
||||
; Otherwise, return carry.
|
||||
|
||||
call GetTileCollision
|
||||
cp 1
|
||||
jr z, .Water
|
||||
|
||||
; Can walk back onto land from water.
|
||||
and a
|
||||
jr z, .Land
|
||||
|
||||
jr .Neither
|
||||
|
||||
.Water
|
||||
xor a
|
||||
ret
|
||||
|
||||
.Land
|
||||
ld a, 1
|
||||
and a
|
||||
ret
|
||||
|
||||
.Neither
|
||||
scf
|
||||
ret
|
||||
; 803ee
|
||||
|
||||
PlayBump: ; 803ee
|
||||
|
||||
call CheckSFX
|
||||
ret c
|
||||
ld de, SFX_BUMP
|
||||
call PlaySFX
|
||||
ret
|
||||
; 803f9
|
||||
|
||||
WaterToLandSprite: ; 803f9
|
||||
push bc
|
||||
ld a, PLAYER_NORMAL
|
||||
ld [PlayerState], a
|
||||
call ReplaceKrisSprite ; UpdateSprites
|
||||
pop bc
|
||||
ret
|
||||
; 80404
|
||||
|
||||
CheckStandingOnIce:: ; 80404
|
||||
ld a, [wd04e]
|
||||
cp 0
|
||||
jr z, .nope
|
||||
cp $f0
|
||||
jr z, .nope
|
||||
ld a, [PlayerNextTile]
|
||||
call CheckIceTile
|
||||
jr nc, .yep
|
||||
ld a, [PlayerState]
|
||||
cp PLAYER_SLIP
|
||||
jr nz, .nope
|
||||
|
||||
.yep
|
||||
scf
|
||||
ret
|
||||
|
||||
.nope
|
||||
and a
|
||||
ret
|
||||
; 80422
|
||||
|
||||
Function80422:: ; 80422
|
||||
ld hl, wc2de
|
||||
ld a, movement_step_sleep_1
|
||||
cp [hl]
|
||||
ret z
|
||||
|
||||
ld [hl], a
|
||||
ld a, 0
|
||||
ld [wd04e], a
|
||||
ret
|
||||
; 80430
|
||||
INCLUDE "engine/player_movement.asm"
|
||||
|
||||
INCLUDE "engine/engine_flags.asm"
|
||||
; 80648
|
||||
|
Reference in New Issue
Block a user