pokegold/engine/player_movement.asm
2016-06-23 14:40:57 -04:00

736 lines
9.2 KiB
NASM
Executable File

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