From e20cc976d0c9e96fa60ff390f66c90d18b0d0dca Mon Sep 17 00:00:00 2001 From: xCrystal Date: Sun, 3 Mar 2024 15:57:52 +0100 Subject: [PATCH] Multiplayer engine: player_location macro [Commit 4] (#40) --- engine/overworld/player_object.asm | 12 +++++++----- engine/overworld/spawn_points.asm | 20 +++++++------------- macros/ram.asm | 7 +++++++ ram/wram.asm | 25 +++++-------------------- 4 files changed, 26 insertions(+), 38 deletions(-) diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index f740f214b..edb978f7a 100644 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -854,6 +854,12 @@ QueueFollowerFirstStep: scf ret +PositionAllPlayerObjectsExceptCurrent: +; called by MAPSETUP_NEXTPLAYER +; calls RepositionMockedPlayerObject for each player according to wNumLevelPlayers, +; except for the player at wCurTurnPlayer. + ret + RepositionMockedPlayerObject:: ; map setup command called by map setup script MAPSETUP_CONNECTION after LoadBlockData, ; once the new map blocks have been loaded to wOverworldMapBlocks. @@ -929,12 +935,8 @@ RepositionMockedPlayerObject:: ld [wMockingWhichPlayer], a jr MockPlayerObject.loaded_player_mock_coords -MockAllPlayerObjectsExceptCurrent: -; calls MockPlayerObject_Multiplayer for each player according to wNumLevelPlayers, -; except for the player at wCurTurnPlayer. - ret - MockPlayerObject_Multiplayer:: +; input: a: value to write into wMockingWhichPlayer maskbits MAX_PLAYERS ld [wMockingWhichPlayer], a ; ld a, [wMockingWhichPlayer] diff --git a/engine/overworld/spawn_points.asm b/engine/overworld/spawn_points.asm index 1052a8285..a9411a71c 100644 --- a/engine/overworld/spawn_points.asm +++ b/engine/overworld/spawn_points.asm @@ -6,7 +6,7 @@ EnterMapSpawnPoint: push de ld a, [wDefaultSpawnpoint] cp SPAWN_N_A - jr z, .done + jr z, .spawn_n_a cp SPAWN_FROM_RAM jr z, .spawn_from_ram ld l, a @@ -32,31 +32,25 @@ EnterMapSpawnPoint: cp MAPSETUP_EXITVIEWMAP jr nz, .not_exit_view_map ; exiting from View Map mode - ld a, [wBeforeViewMapMapGroup] - ld [wMapGroup], a - ld a, [wBeforeViewMapMapNumber] - ld [wMapNumber], a - ld a, [wBeforeViewMapYCoord] - ld [wYCoord], a - ld a, [wBeforeViewMapXCoord] - ld [wXCoord], a - jr .done + ld hl, wBeforeViewMapLocation + jr .copy .not_exit_view_map ; "moving camera" to next turn player ld a, [wCurTurnPlayer] ld hl, wPlayer1MapGroup ld bc, wPlayer2MapGroup - wPlayer1MapGroup call AddNTimes +.copy ld a, [hli] ld [wMapGroup], a ld a, [hli] ld [wMapNumber], a ld a, [hli] - ld [wXCoord], a - ld a, [hl] ld [wYCoord], a + ld a, [hl] + ld [wXCoord], a -.done +.spawn_n_a pop de pop hl ret diff --git a/macros/ram.asm b/macros/ram.asm index 65676186e..30713e2fc 100644 --- a/macros/ram.asm +++ b/macros/ram.asm @@ -415,3 +415,10 @@ MACRO space_struct \1Effect:: db \1NextSpace:: db ENDM + +MACRO player_location +\1MapGroup:: db +\1MapNumber:: db +\1YCoord:: db +\1XCoord:: db +ENDM diff --git a/ram/wram.asm b/ram/wram.asm index eee8c53c1..c10c2fe7f 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -1723,11 +1723,8 @@ wViewMapModeRange:: db wViewMapModeDisplacementY:: db wViewMapModeDisplacementX:: db ; coords and map backup to know where to spawn after returning from View Map mode -wBeforeViewMapYCoord:: db -wBeforeViewMapXCoord:: db +wBeforeViewMapLocation:: player_location wBeforeViewMap wBeforeViewMapDirection:: db -wBeforeViewMapMapGroup:: db -wBeforeViewMapMapNumber:: db ENDU wBattleMenuCursorPosition:: @@ -2578,22 +2575,10 @@ wCurSpaceStructEnd:: wCurOverworldMiscPal:: db ; in multiplayer only, original location of each player -wPlayer1MapGroup:: db -wPlayer1MapNumber:: db -wPlayer1YCoord:: db -wPlayer1XCoord:: db -wPlayer2MapGroup:: db -wPlayer2MapNumber:: db -wPlayer2YCoord:: db -wPlayer2XCoord:: db -wPlayer3MapGroup:: db -wPlayer3MapNumber:: db -wPlayer3YCoord:: db -wPlayer3XCoord:: db -wPlayer4MapGroup:: db -wPlayer4MapNumber:: db -wPlayer4YCoord:: db -wPlayer4XCoord:: db +wPlayer1Location:: player_location wPlayer1 +wPlayer2Location:: player_location wPlayer2 +wPlayer3Location:: player_location wPlayer3 +wPlayer4Location:: player_location wPlayer4 ; used in MockPlayerObject_* and RepositionMockedPlayerObject ; player 1: used during a View Map mode session or in multiplayer