Implementation of basic navigation and movement across linear spaces (#24)

This commit is contained in:
xCrystal 2023-10-18 17:46:57 +02:00
parent 806b048a9f
commit 3291b82069
8 changed files with 101 additions and 20 deletions

View File

@ -15,12 +15,13 @@ BoardMenuScript::
; save after opentext to reanchor map first ; save after opentext to reanchor map first
; save before processing variables like wCurTurn due to BoardMenuScript reentry after game reset ; save before processing variables like wCurTurn due to BoardMenuScript reentry after game reset
farcall AutoSaveGameInOverworld farcall AutoSaveGameInOverworld
ld hl, wCurTurn
inc [hl]
ld hl, wTurnData ld hl, wTurnData
ld bc, wTurnDataEnd - wTurnData ld bc, wTurnDataEnd - wTurnData
xor a xor a
jp ByteFill call ByteFill
ld hl, wCurTurn
inc [hl]
jp LoadCurSpaceData
.Die: .Die:
callasm BoardMenu_Die callasm BoardMenu_Die

29
engine/board/movement.asm Executable file
View File

@ -0,0 +1,29 @@
StepTowardsNextSpace::
ld a, [wCurSpaceNextSpace]
call LoadTempSpaceData
ld a, [wTempSpaceXCoord]
ld c, a
ld a, [wXCoord]
cp c
jr z, .check_y
ld a, D_RIGHT
jr c, .done
ld a, D_LEFT
jr .done
.check_y
ld a, [wTempSpaceYCoord]
ld c, a
ld a, [wYCoord]
cp c
jr z, .arrived
ld a, D_DOWN
jr c, .done
ld a, D_UP
jr .done
.arrived
xor a
.done
ld [wCurInput], a
ret

View File

@ -27,12 +27,18 @@ ArriveToRegularSpaceScript:
end end
ArriveToRegularSpace: ArriveToRegularSpace:
; load new space
ld a, [wCurSpaceNextSpace]
ld [wCurSpace], a
call LoadCurSpaceData
; decrease wSpacesLeft and copy to hScriptVar
ld hl, wSpacesLeft ld hl, wSpacesLeft
dec [hl] dec [hl]
ld a, [hl] ld a, [hl]
ld [hScriptVar], a ld [hScriptVar], a
; if landed, clear spaces left sprites
and a and a
jp nz, UpdateSecondarySprites ret nz
ld hl, wDisplaySecondarySprites ld hl, wDisplaySecondarySprites
res SECONDARYSPRITES_SPACES_LEFT_F, [hl] res SECONDARYSPRITES_SPACES_LEFT_F, [hl]
ret ret

View File

@ -71,10 +71,6 @@ AskTeachTMHM:
ret ret
ChooseMonToLearnTMHM: ChooseMonToLearnTMHM:
ld hl, wStringBuffer2
ld de, wTMHMMoveNameBackup
ld bc, MOVE_NAME_LENGTH - 1
call CopyBytes
call ClearBGPalettes call ClearBGPalettes
ChooseMonToLearnTMHM_NoRefresh: ChooseMonToLearnTMHM_NoRefresh:
farcall LoadPartyMenuGFX farcall LoadPartyMenuGFX
@ -95,10 +91,6 @@ ChooseMonToLearnTMHM_NoRefresh:
pop bc ; now contains the former contents of af pop bc ; now contains the former contents of af
jr z, .egg jr z, .egg
push bc push bc
ld hl, wTMHMMoveNameBackup
ld de, wStringBuffer2
ld bc, MOVE_NAME_LENGTH - 1
call CopyBytes
pop af ; now contains the original contents of af pop af ; now contains the original contents of af
ret ret

View File

@ -11,19 +11,25 @@ DoPlayerMovement::
ret ret
.GetDPad: .GetDPad:
ldh a, [hCurBoardEvent]
cp BOARDEVENT_HANDLE_BOARD
jr nz, .not_auto_in_board
; compute direction according to space layout and save to wCurInput
farcall StepTowardsNextSpace
ret
.not_auto_in_board
ldh a, [hJoyDown] ldh a, [hJoyDown]
ld [wCurInput], a ld [wCurInput], a
; Standing downhill instead moves down. ; Standing downhill instead moves down.
ld hl, wBikeFlags ld hl, wBikeFlags
bit BIKEFLAGS_DOWNHILL_F, [hl] bit BIKEFLAGS_DOWNHILL_F, [hl]
ret z ret z
ld c, a ld c, a
and D_PAD and D_PAD
ret nz ret nz
ld a, c ld a, c
or D_DOWN or D_DOWN
ld [wCurInput], a ld [wCurInput], a

View File

@ -2298,3 +2298,29 @@ LoadMapTileset::
pop bc pop bc
pop hl pop hl
ret ret
; a: which space to load
LoadTempSpaceData::
ld de, wTempSpaceData
jr LoadSpaceData
LoadCurSpaceData::
ld de, wCurSpaceData
ld a, [wCurSpace]
; fallthrough
; de: location where to load
; a: which space to load
LoadSpaceData::
push de
push af
ld hl, wMapSpacesPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld bc, wCurSpaceDataEnd - wCurSpaceData ; wTempSpaceDataEnd - wTempSpaceData
pop af
call AddNTimes
pop de
ld a, [wMapScriptsBank]
jp FarCopyBytes

View File

@ -244,6 +244,7 @@ SECTION "Board 1", ROMX
INCLUDE "engine/board/menu.asm" INCLUDE "engine/board/menu.asm"
INCLUDE "engine/board/spaces.asm" INCLUDE "engine/board/spaces.asm"
INCLUDE "engine/board/movement.asm"
SECTION "bank20", ROMX SECTION "bank20", ROMX

View File

@ -1669,14 +1669,23 @@ ENDU
SECTION "More WRAM 1", WRAMX SECTION "More WRAM 1", WRAMX
wTMHMMoveNameBackup:: ds MOVE_NAME_LENGTH
wStringBuffer1:: ds STRING_BUFFER_LENGTH wStringBuffer1:: ds STRING_BUFFER_LENGTH
wStringBuffer2:: ds STRING_BUFFER_LENGTH wStringBuffer2:: ds STRING_BUFFER_LENGTH
UNION
wStringBuffer3:: ds STRING_BUFFER_LENGTH wStringBuffer3:: ds STRING_BUFFER_LENGTH
wStringBuffer4:: ds STRING_BUFFER_LENGTH wStringBuffer4:: ds STRING_BUFFER_LENGTH
wStringBuffer5:: ds STRING_BUFFER_LENGTH wStringBuffer5:: ds STRING_BUFFER_LENGTH
NEXTU
wTempSpaceData::
wTempSpaceXCoord:: db
wTempSpaceYCoord:: db
wTempSpaceEffect:: db
wTempSpaceNextSpace:: db
wTempSpaceDataEnd::
ENDU
wBattleMenuCursorPosition:: wBattleMenuCursorPosition::
wStartMenuLastCursorPosition:: wStartMenuLastCursorPosition::
wBoardMenuLastCursorPosition:: wBoardMenuLastCursorPosition::
@ -2180,7 +2189,10 @@ ENDU
wBattleAction:: db wBattleAction:: db
wLinkBattleSentAction:: db wLinkBattleSentAction:: db
; wMapStatus ~ wMapStatusEnd is cleared in StartMap
wMapStatus:: db wMapStatus:: db
wMapEventStatus:: db wMapEventStatus:: db
wScriptFlags:: wScriptFlags::
@ -2236,13 +2248,14 @@ wReceiveCallDelay_StartTime:: ds 2 ; hour, min
wBugContestMinsRemaining:: db wBugContestMinsRemaining:: db
wBugContestSecsRemaining:: db wBugContestSecsRemaining:: db
wMapStatusEnd:: ; TurnData ~ wTurnDataEnd is cleared at the beginning of BoardMenuScript (i.e. on turn begin)
wTurnData:: wTurnData::
wDieRoll:: db wDieRoll:: db
wSpacesLeft:: db wSpacesLeft:: db
wTurnDataEnd:: wTurnDataEnd::
wMapStatusEnd::
wGameData:: wGameData::
wPlayerData:: wPlayerData::
wPlayerID:: dw wPlayerID:: dw
@ -2497,8 +2510,15 @@ wYCoord:: db
wXCoord:: db wXCoord:: db
wScreenSave:: ds SCREEN_META_WIDTH * SCREEN_META_HEIGHT wScreenSave:: ds SCREEN_META_WIDTH * SCREEN_META_HEIGHT
wCurSpace:: db
wCurTurn:: db wCurTurn:: db
wCurSpace:: db
wCurSpaceData::
wCurSpaceXCoord:: db
wCurSpaceYCoord:: db
wCurSpaceEffect:: db
wCurSpaceNextSpace:: db
wCurSpaceDataEnd::
wCurMapDataEnd:: wCurMapDataEnd::