pokecrystal-board/engine/overworld/player_step.asm

290 lines
4.1 KiB
NASM
Raw Permalink Normal View History

2018-06-24 07:09:41 -07:00
_HandlePlayerStep::
ld a, [wPlayerStepFlags]
and a
ret z
2019-01-24 18:41:14 -08:00
bit PLAYERSTEP_START_F, a
jr nz, .update_overworld_map
2019-01-24 18:41:14 -08:00
bit PLAYERSTEP_STOP_F, a
jr nz, .update_player_coords
2019-01-24 18:41:14 -08:00
bit PLAYERSTEP_CONTINUE_F, a
jr nz, .finish
ret
.update_overworld_map
ld a, 4
ld [wHandlePlayerStep], a
call UpdateOverworldMap
jr .finish
.update_player_coords
call UpdatePlayerCoords
jr .finish
.finish
call HandlePlayerStep
ld a, [wPlayerStepVectorX]
ld d, a
ld a, [wPlayerStepVectorY]
ld e, a
2016-05-04 19:34:09 -07:00
ld a, [wPlayerBGMapOffsetX]
sub d
2016-05-04 19:34:09 -07:00
ld [wPlayerBGMapOffsetX], a
ld a, [wPlayerBGMapOffsetY]
sub e
2016-05-04 19:34:09 -07:00
ld [wPlayerBGMapOffsetY], a
ret
2018-06-24 07:09:41 -07:00
ScrollScreen::
ld a, [wPlayerStepVectorX]
ld d, a
ld a, [wPlayerStepVectorY]
ld e, a
ldh a, [hSCX]
add d
ldh [hSCX], a
ldh a, [hSCY]
add e
ldh [hSCY], a
ret
2018-06-24 07:09:41 -07:00
HandlePlayerStep:
ld hl, wHandlePlayerStep
ld a, [hl]
and a
ret z
dec [hl]
ld a, [hl]
ld hl, .Jumptable
rst JumpTable
ret
2018-06-24 07:09:41 -07:00
.Jumptable:
2015-12-26 18:59:03 -08:00
dw GetMovementPermissions
dw BufferScreen
dw .mobile
dw .fail2
; The rest are never used. Ever.
2015-12-26 18:59:03 -08:00
dw .fail1
dw .fail1
dw .fail1
dw .fail1
dw .fail1
dw .fail1
dw .fail1
2018-06-24 07:09:41 -07:00
.fail1
ret
2018-06-24 07:09:41 -07:00
.mobile
ret
2018-06-24 07:09:41 -07:00
.fail2
ret
2018-06-24 07:09:41 -07:00
UpdatePlayerCoords:
ld a, [wPlayerStepDirection]
and a
jr nz, .check_step_down
2018-01-23 14:39:09 -08:00
ld hl, wYCoord
inc [hl]
ldh a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementY
inc [hl]
ret
.check_step_down
cp UP
jr nz, .check_step_left
2018-01-23 14:39:09 -08:00
ld hl, wYCoord
dec [hl]
ldh a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementY
dec [hl]
ret
.check_step_left
cp LEFT
jr nz, .check_step_right
2018-01-23 14:39:09 -08:00
ld hl, wXCoord
dec [hl]
ldh a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementX
dec [hl]
ret
.check_step_right
cp RIGHT
ret nz
2018-01-23 14:39:09 -08:00
ld hl, wXCoord
inc [hl]
ldh a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementX
inc [hl]
ret
2018-06-24 07:09:41 -07:00
UpdateOverworldMap:
ld a, [wPlayerStepDirection]
and a
jr z, .step_down
cp UP
jr z, .step_up
cp LEFT
jr z, .step_left
cp RIGHT
jr z, .step_right
ret
.step_down
call .ScrollOverworldMapDown
2024-02-10 15:16:00 -08:00
call LoadOverworldTilemap
2019-06-06 14:59:13 -07:00
call ScrollMapDown
ret
.step_up
call .ScrollOverworldMapUp
2024-02-10 15:16:00 -08:00
call LoadOverworldTilemap
2019-06-06 14:59:13 -07:00
call ScrollMapUp
ret
.step_left
call .ScrollOverworldMapLeft
2024-02-10 15:16:00 -08:00
call LoadOverworldTilemap
2019-06-06 14:59:13 -07:00
call ScrollMapLeft
ret
.step_right
call .ScrollOverworldMapRight
2024-02-10 15:16:00 -08:00
call LoadOverworldTilemap
2019-06-06 14:59:13 -07:00
call ScrollMapRight
ret
2018-06-24 07:09:41 -07:00
.ScrollOverworldMapDown:
ld a, [wBGMapAnchor]
add 2 * BG_MAP_WIDTH
ld [wBGMapAnchor], a
jr nc, .not_overflowed
ld a, [wBGMapAnchor + 1]
inc a
2018-01-11 09:00:01 -08:00
and %11
2017-12-28 04:32:33 -08:00
or HIGH(vBGMap0)
ld [wBGMapAnchor + 1], a
.not_overflowed
ld hl, wPlayerMetatileY
inc [hl]
ld a, [hl]
cp 2 ; was 1
jr nz, .done_down
ld [hl], 0
2019-06-06 14:59:13 -07:00
call .ScrollMapDataDown
.done_down
ret
2019-06-06 14:59:13 -07:00
.ScrollMapDataDown:
ld hl, wOverworldMapAnchor
2018-01-23 14:39:09 -08:00
ld a, [wMapWidth]
2019-06-06 14:59:13 -07:00
add 3 * 2 ; surrounding tiles
add [hl]
ld [hli], a
ret nc
inc [hl]
ret
2018-06-24 07:09:41 -07:00
.ScrollOverworldMapUp:
ld a, [wBGMapAnchor]
sub 2 * BG_MAP_WIDTH
ld [wBGMapAnchor], a
jr nc, .not_underflowed
ld a, [wBGMapAnchor + 1]
dec a
2018-01-11 09:00:01 -08:00
and %11
2017-12-28 04:32:33 -08:00
or HIGH(vBGMap0)
ld [wBGMapAnchor + 1], a
.not_underflowed
ld hl, wPlayerMetatileY
dec [hl]
ld a, [hl]
cp -1 ; was 0
jr nz, .done_up
ld [hl], $1
2019-06-06 14:59:13 -07:00
call .ScrollMapDataUp
.done_up
ret
2019-06-06 14:59:13 -07:00
.ScrollMapDataUp:
ld hl, wOverworldMapAnchor
2018-01-23 14:39:09 -08:00
ld a, [wMapWidth]
2019-06-06 14:59:13 -07:00
add 3 * 2 ; surrounding tiles
ld b, a
ld a, [hl]
sub b
ld [hli], a
ret nc
dec [hl]
ret
2018-06-24 07:09:41 -07:00
.ScrollOverworldMapLeft:
ld a, [wBGMapAnchor]
ld e, a
and $e0
ld d, a
ld a, e
sub $2
and $1f
or d
ld [wBGMapAnchor], a
ld hl, wPlayerMetatileX
dec [hl]
ld a, [hl]
cp -1
jr nz, .done_left
ld [hl], 1
2019-06-06 14:59:13 -07:00
call .ScrollMapDataLeft
.done_left
ret
2019-06-06 14:59:13 -07:00
.ScrollMapDataLeft:
ld hl, wOverworldMapAnchor
ld a, [hl]
sub 1
ld [hli], a
ret nc
dec [hl]
ret
2018-06-24 07:09:41 -07:00
.ScrollOverworldMapRight:
ld a, [wBGMapAnchor]
ld e, a
and $e0
ld d, a
ld a, e
add $2
and $1f
or d
ld [wBGMapAnchor], a
ld hl, wPlayerMetatileX
inc [hl]
ld a, [hl]
cp 2
jr nz, .done_right
ld [hl], 0
2019-06-06 14:59:13 -07:00
call .ScrollMapDataRight
.done_right
ret
2019-06-06 14:59:13 -07:00
.ScrollMapDataRight:
ld hl, wOverworldMapAnchor
ld a, [hl]
add 1
ld [hli], a
ret nc
inc [hl]
ret