summaryrefslogtreecommitdiff
path: root/engine/overworld/player_movement.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/overworld/player_movement.asm')
-rwxr-xr-xengine/overworld/player_movement.asm735
1 files changed, 735 insertions, 0 deletions
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
new file mode 100755
index 00000000..61b45a72
--- /dev/null
+++ b/engine/overworld/player_movement.asm
@@ -0,0 +1,735 @@
+DoPlayerMovement:: ; 10000 (4:4000)
+ call Function10017
+ ld a, movement_step_sleep
+ ld [wcf2d], a
+ xor a
+ ld [wcf2c], a
+ call Function1002d
+ ld c, a
+ ld a, [wcf2d]
+ ld [wce87], a
+ ret
+
+Function10017: ; 10017 (4:4017)
+ ld a, [hJoyDown]
+ ld [wcf29], a
+ CheckFlagHL ENGINE_DOWNHILL
+ ret z
+ ld c, a
+ and $f0
+ ret nz
+ ld a, c
+ or $80
+ ld [wcf29], a
+ ret
+
+Function1002d: ; 1002d (4:402d)
+ ld a, [wPlayerBikeSurfState]
+ cp PLAYER_NORMAL
+ jr z, .asm_10044
+ cp PLAYER_SURF
+ jr z, .asm_10060
+ cp PLAYER_SURF_PIKA
+ jr z, .asm_10060
+ cp PLAYER_BIKE
+ jr z, .asm_10044
+ cp PLAYER_SLIP
+ jr z, .asm_10074
+.asm_10044
+ call Function102cb
+ call Function102ec
+ call Function100b7
+ ret c
+ call Function10147
+ ret c
+ call Function1016b
+ ret c
+ call Function101f3
+ ret c
+ call Function10226
+ ret c
+ jr .asm_1009d
+
+.asm_10060
+ call Function102cb
+ call Function102ec
+ call Function100b7
+ ret c
+ call Function10147
+ ret c
+ call Function101c0
+ ret c
+ jr .asm_1009d
+
+.asm_10074
+ call Function102cb
+ call Function102ec
+ call Function100b7
+ ret c
+ call Function10147
+ ret c
+ call Function1016b
+ ret c
+ call Function101f3
+ ret c
+ call Function10226
+ ret c
+ ld a, [wcf2e]
+ cp $ff
+ jr z, .asm_10098
+ call Function103ee
+.asm_10098
+ call Function102b3
+ xor a
+ ret
+
+.asm_1009d
+ ld a, [wcf2e]
+ cp $ff
+ jr z, .asm_100b2
+ ld a, [wTempTrainerHeader]
+ and a
+ jr nz, .asm_100ad
+ call Function103ee
+.asm_100ad
+ call Function102bf
+ xor a
+ ret
+
+.asm_100b2
+ call Function102b3
+ xor a
+ ret
+
+Function100b7: ; 100b7 (4:40b7)
+ ld a, [wPlayerStandingTile]
+ ld c, a
+ call CheckWhirlpoolTile
+ jr c, .asm_100c4
+ ld a, $3
+ scf
+ ret
+
+.asm_100c4
+ and $f0
+ cp $30
+ jr z, .asm_100d8
+ cp $40
+ jr z, .asm_100ec
+ cp $50
+ jr z, .asm_10108
+ cp $70
+ jr z, .asm_10124
+ jr .asm_1013c
+
+.asm_100d8
+ ld a, c
+ and $3
+ ld c, a
+ ld b, $0
+ ld hl, .water_table
+ add hl, bc
+ ld a, [hl]
+ ld [wcf2e], a
+ jr .asm_1013e
+
+.water_table
+ db RIGHT
+ db LEFT
+ db UP
+ db DOWN
+
+.asm_100ec
+ ld a, c
+ and $7
+ ld c, a
+ ld b, $0
+ ld hl, .land1_table
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_1013c
+ ld [wcf2e], a
+ jr .asm_1013e
+
+.land1_table
+ db STANDING
+ db RIGHT
+ db LEFT
+ db UP
+ db DOWN
+ db STANDING
+ db STANDING
+ db STANDING
+
+.asm_10108
+ ld a, c
+ and $7
+ ld c, a
+ ld b, $0
+ ld hl, .land2_table
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_1013c
+ ld [wcf2e], a
+ jr .asm_1013e
+
+.land2_table
+ db RIGHT
+ db LEFT
+ db UP
+ db DOWN
+ db STANDING
+ db STANDING
+ db STANDING
+ db STANDING
+
+.asm_10124
+ ld a, c
+ cp $71
+ jr z, .asm_10135
+ cp $79
+ jr z, .asm_10135
+ cp $7a
+ jr z, .asm_10135
+ cp $7b
+ jr nz, .asm_1013c
+.asm_10135
+ ld a, $0
+ ld [wcf2e], a
+ jr .asm_1013e
+
+.asm_1013c
+ xor a
+ ret
+
+.asm_1013e
+ ld a, $1
+ call Function1025f
+ ld a, $5
+ scf
+ ret
+
+Function10147: ; 10147 (4:4147)
+ ld a, [wcf39]
+ cp $0
+ jr nz, .asm_10169
+ ld a, [wcf2e]
+ cp $ff
+ jr z, .asm_10169
+ ld e, a
+ ld a, [wPlayerDirection]
+ rrca
+ rrca
+ and $3
+ cp e
+ jr z, .asm_10169
+ ld a, $5
+ call Function1025f
+ ld a, $2
+ scf
+ ret
+
+.asm_10169
+ xor a
+ ret
+
+Function1016b: ; 1016b (4:416b)
+ ld a, [wPlayerBikeSurfState]
+ cp $4
+ jr z, Function101c0
+ cp $8
+ jr z, Function101c0
+ call Function1039e
+ jr c, .asm_101be
+ call Function10341
+ and a
+ jr z, .asm_101be
+ cp $2
+ jr z, .asm_101be
+ ld a, [wPlayerStandingTile]
+ call CheckIceTile
+ jr nc, .asm_101b5
+ call Function103ca
+ jr nz, .asm_101ae
+ ld hl, wBikeFlags
+ bit 2, [hl]
+ jr z, .asm_101a7
+ ld a, [wcf2e]
+ cp $0
+ jr z, .asm_101a7
+ ld a, $1
+ call Function1025f
+ scf
+ ret
+
+.asm_101a7
+ ld a, $2
+ call Function1025f
+ scf
+ ret
+
+.asm_101ae
+ ld a, $1
+ call Function1025f
+ scf
+ ret
+
+.asm_101b5
+ ld a, $4
+ call Function1025f
+ scf
+ ret
+
+ xor a
+ ret
+
+.asm_101be
+ xor a
+ ret
+
+Function101c0: ; 101c0 (4:41c0)
+ call Function103b4
+ ld [wcf2b], a
+ jr c, .asm_101f1
+ call Function10341
+ ld [wcf2a], a
+ and a
+ jr z, .asm_101f1
+ cp $2
+ jr z, .asm_101f1
+ ld a, [wcf2b]
+ and a
+ jr nz, .asm_101e2
+ ld a, $1
+ call Function1025f
+ scf
+ ret
+
+.asm_101e2
+ call Function103f9
+ call PlayMapMusic
+ ld a, $1
+ call Function1025f
+ ld a, $6
+ scf
+ ret
+
+.asm_101f1
+ xor a
+ ret
+
+Function101f3: ; 101f3 (4:41f3)
+ ld a, [wPlayerStandingTile]
+ ld e, a
+ and $f0
+ cp $a0
+ jr nz, .asm_1021c
+ ld a, e
+ and $7
+ ld e, a
+ ld d, $0
+ ld hl, .data_1021e
+ add hl, de
+ ld a, [wcf2f]
+ and [hl]
+ jr z, .asm_1021c
+ ld de, $16
+ call PlaySFX
+ ld a, $3
+ call Function1025f
+ ld a, $7
+ scf
+ ret
+
+.asm_1021c
+ xor a
+ ret
+
+.data_1021e
+ 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
+
+Function10226: ; 10226 (4:4226)
+ ld a, [wcf2e]
+ ld e, a
+ ld d, $0
+ ld hl, .edge_warps
+ add hl, de
+ ld a, [wPlayerStandingTile]
+ cp [hl]
+ jr nz, .asm_10259
+ ld a, $1
+ ld [wTempTrainerHeader], a
+ ld a, [wcf2e]
+ cp $ff
+ jr z, .asm_10259
+ ld e, a
+ ld a, [wPlayerDirection]
+ rrca
+ rrca
+ and $3
+ cp e
+ jr nz, .asm_10259
+ call Function22a5
+ jr nc, .asm_10259
+ call Function102b3
+ scf
+ ld a, $1
+ ret
+
+.asm_10259
+ xor a
+ ret
+
+.edge_warps
+ db $70, $78, $76, $7e
+
+Function1025f: ; 1025f (4:425f)
+ 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, [wcf2e]
+ ld e, a
+ cp $ff
+ jp z, Function102b3
+ add hl, de
+ ld a, [hl]
+ ld [wcf2d], a
+ ld hl, $42af
+ add hl, de
+ ld a, [hl]
+ ld [wcf39], a
+ ld a, $4
+ ret
+
+.Steps:
+ dw .SlowStep
+ dw .NormalStep
+ dw .FastStep
+ dw .JumpStep
+ dw .SlideStep
+ dw .TurningStep
+ dw .BackJumpStep
+ dw .FinishFacing
+
+.SlowStep:
+ slow_step DOWN
+ slow_step UP
+ slow_step LEFT
+ slow_step RIGHT
+.NormalStep:
+ step DOWN
+ step UP
+ step LEFT
+ step RIGHT
+.FastStep:
+ big_step DOWN
+ big_step UP
+ big_step LEFT
+ big_step RIGHT
+.JumpStep:
+ jump_step DOWN
+ jump_step UP
+ jump_step LEFT
+ jump_step RIGHT
+.SlideStep:
+ fast_slide_step DOWN
+ fast_slide_step UP
+ fast_slide_step LEFT
+ fast_slide_step RIGHT
+.BackJumpStep:
+ jump_step UP
+ jump_step DOWN
+ jump_step RIGHT
+ jump_step LEFT
+.TurningStep:
+ turn_step DOWN
+ turn_step UP
+ turn_step LEFT
+ turn_step RIGHT
+.FinishFacing:
+ db $80 + DOWN
+ db $80 + UP
+ db $80 + LEFT
+ db $80 + RIGHT
+
+Function102b3: ; 102b3 (4:42b3)
+ ld a, $0
+ ld [wcf39], a
+ ld a, $3e
+ ld [wcf2d], a
+ xor a
+ ret
+
+Function102bf: ; 102bf (4:42bf)
+ ld a, $0
+ ld [wTempTrainerHeaderEnd], a
+ ld a, $50
+ ld [wcf2d], a
+ xor a
+ ret
+
+Function102cb: ; 102cb (4:42cb)
+ call Function10404
+ ret nc
+ ld a, [wTempTrainerHeaderEnd]
+.asm_102d2
+ cp $0
+ ret z
+ and $3
+ ld e, a
+ ld d, $0
+ ld hl, .forced_dpad
+ add hl, de
+ ld a, [wcf29]
+ and $f
+ or [hl]
+ ld [wcf29], a
+ ret
+
+.forced_dpad
+ db D_DOWN, D_UP, D_LEFT, D_RIGHT
+
+Function102ec: ; 102ec (4:42ec)
+ ld hl, .table
+ ld de, .table2 - .table1
+ ld a, [wcf29]
+ bit 7, a
+ jr nz, .asm_10307
+ bit 6, a
+ jr nz, .asm_10308
+.asm_102fc
+ bit 5, a
+ jr nz, .asm_10309
+ bit 4, a
+ jr nz, .asm_1030a
+ jr .asm_1030b
+
+.asm_10307
+ add hl, de
+.asm_10308
+ add hl, de
+.asm_10309
+ add hl, de
+.asm_1030a
+ add hl, de
+.asm_1030b
+ ld a, [hli]
+ ld [wcf2e], a
+ ld a, [hli]
+ ld [wcf2f], a
+ ld a, [hli]
+ ld [wcf30], a
+ ld a, [hli]
+ ld [wcf31], a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hl]
+ ld [wWinTextPointer], a
+ ret
+
+.table
+; struct:
+; walk direction
+; facing
+; x movement
+; y movement
+; tile collision pointer
+.table1
+ db STANDING, FACE_CURRENT, 0, 0
+ dw wPlayerStandingTile
+.table2
+ db RIGHT, FACE_RIGHT, 1, 0
+ dw wTileRight
+ db LEFT, FACE_LEFT, -1, 0
+ dw wTileLeft
+ db UP, FACE_UP, 0, -1
+ dw wTileUp
+ db DOWN, FACE_DOWN, 0, 1
+ dw wTileDown
+
+Function10341: ; 10341 (4:4341)
+ ld a, 0
+ ld [hMapObjectIndexBuffer], a
+ ld a, [wPlayerStandingMapX]
+ ld d, a
+ ld a, [wcf30]
+ add d
+ ld d, a
+ ld a, [wPlayerStandingMapY]
+ ld e, a
+ ld a, [wcf31]
+ add e
+ ld e, a
+ ld bc, wPlayerSprite
+ callba Function7120
+ jr nc, .asm_10369
+ call Function1036f
+ jr c, .asm_1036c
+ xor a
+ ret
+
+.asm_10369
+ ld a, $1
+ ret
+
+.asm_1036c
+ ld a, $2
+ ret
+
+Function1036f: ; 1036f (4:436f)
+ ld hl, wBikeFlags
+ bit 0, [hl]
+ jr z, .asm_1039c
+ ld hl, $7
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr nz, .asm_1039c
+ ld hl, $6
+ add hl, bc
+ bit 6, [hl]
+ jr z, .asm_1039c
+ ld hl, $5
+ add hl, bc
+ set 2, [hl]
+ ld a, [wcf2e]
+ ld d, a
+ ld hl, $20
+ add hl, bc
+ ld a, [hl]
+ and $fc
+ or d
+ ld [hl], a
+ scf
+ ret
+
+.asm_1039c
+ xor a
+ ret
+
+Function1039e: ; 1039e (4:439e)
+ ld a, [wTilePermissions]
+ ld d, a
+ ld a, [wcf2f]
+ and d
+ jr nz, .asm_103b2
+ ld a, [wWinTextPointer]
+ call Function103d3
+ jr c, .asm_103b2
+ xor a
+ ret
+
+.asm_103b2
+ scf
+ ret
+
+Function103b4: ; 103b4 (4:43b4)
+ ld a, [wTilePermissions]
+ ld d, a
+ ld a, [wcf2f]
+ and d
+ jr nz, .asm_103c8
+ ld a, [wWinTextPointer]
+ call Function103da
+ jr c, .asm_103c8
+ and a
+ ret
+
+.asm_103c8
+ scf
+ ret
+
+Function103ca: ; 103ca (4:43ca)
+ ld a, [wPlayerBikeSurfState]
+ cp $1
+ ret z
+ cp $2
+ ret
+
+Function103d3: ; 103d3 (4:43d3)
+ call GetTileCollision
+ and a
+ ret z
+ scf
+ ret
+
+Function103da: ; 103da (4:43da)
+ call GetTileCollision
+ cp $1
+ jr z, .asm_103e6
+ and a
+ jr z, .asm_103e8
+ jr .asm_103ec
+
+.asm_103e6
+ xor a
+ ret
+
+.asm_103e8
+ ld a, $1
+ and a
+ ret
+
+.asm_103ec
+ scf
+ ret
+
+Function103ee: ; 103ee (4:43ee)
+ call CheckSFX
+ ret c
+ ld de, $24
+ call PlaySFX
+ ret
+
+Function103f9: ; 103f9 (4:43f9)
+ push bc
+ ld a, $0
+ ld [wPlayerBikeSurfState], a
+ call ReplacePlayerSprite
+ pop bc
+ ret
+
+Function10404: ; 10404 (4:4404)
+ ld a, [wTempTrainerHeaderEnd]
+ cp $0
+ jr z, .asm_10420
+ cp $f0
+ jr z, .asm_10420
+ ld a, [wPlayerStandingTile]
+ call CheckIceTile
+ jr nc, .asm_1041e
+ ld a, [wPlayerBikeSurfState]
+ cp $2
+ jr nz, .asm_10420
+.asm_1041e
+ scf
+ ret
+
+.asm_10420
+ and a
+ ret
+
+StopPlayerForEvent::
+ ld hl, wce87
+ ld a, $3e
+ cp [hl]
+ ret z
+ ld [hl], a
+ ld a, $0
+ ld [wcf39], a
+ ret