From b97470e032df4554d93d1fff4ce33dfbf05cf580 Mon Sep 17 00:00:00 2001 From: xCrystal Date: Tue, 5 Mar 2024 14:03:31 +0100 Subject: [PATCH] Multiplayer engine: bug fixes [Commit 9] (#40) --- data/maps/setup_scripts.asm | 5 ++++- data/players/objects.asm | 6 +++--- engine/overworld/player_object.asm | 21 ++++++++++++++++----- engine/overworld/scripting.asm | 2 ++ 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/data/maps/setup_scripts.asm b/data/maps/setup_scripts.asm index 402cc5a58..75e739528 100644 --- a/data/maps/setup_scripts.asm +++ b/data/maps/setup_scripts.asm @@ -138,6 +138,10 @@ MapSetupScript_Train: db -1 ; end MapSetupScript_NextPlayer: +; remove FadeMapMusicAndPalettes, InitSound, PlayMapMusicBike to not apply fading to music (and palettes). +; would require consistent music across all maps/states of the level. + mapsetup FadeMapMusicAndPalettes + mapsetup ClearBGPalettes mapsetup DisableLCD mapsetup InitSound mapsetup BackupMapObjects @@ -159,7 +163,6 @@ MapSetupScript_NextPlayer: mapsetup SpawnInFacingDown mapsetup RefreshMapSprites mapsetup PlayMapMusicBike - mapsetup FadeInToMusic mapsetup FadeInFromWhite mapsetup ActivateMapAnims mapsetup LoadWildMonData diff --git a/data/players/objects.asm b/data/players/objects.asm index 3629535c8..8af2aa68a 100755 --- a/data/players/objects.asm +++ b/data/players/objects.asm @@ -51,7 +51,7 @@ PlayerObjects: .BugCatcher1: object_event 0, 0, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, ObjectEvent, -1 ; [wPlayerState], sprite id, palette - db PLAYER_NORMAL, SPRITE_YOUNGSTER, PAL_NPC_BROWN << 4 | OBJECTTYPE_SCRIPT - db PLAYER_SURF, SPRITE_YOUNGSTER, PAL_NPC_BROWN << 4 | OBJECTTYPE_SCRIPT - db PLAYER_BIKE, SPRITE_YOUNGSTER, PAL_NPC_BROWN << 4 | OBJECTTYPE_SCRIPT + db PLAYER_NORMAL, SPRITE_BUG_CATCHER, PAL_NPC_BROWN << 4 | OBJECTTYPE_SCRIPT + db PLAYER_SURF, SPRITE_BUG_CATCHER, PAL_NPC_BROWN << 4 | OBJECTTYPE_SCRIPT + db PLAYER_BIKE, SPRITE_BUG_CATCHER, PAL_NPC_BROWN << 4 | OBJECTTYPE_SCRIPT db -1 diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index 8e4c44260..c7ce94852 100644 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -852,7 +852,6 @@ RepositionMockedPlayerObjects_NextPlayer: ; once the new map blocks have been loaded to wOverworldMapBlocks. ; position all players according to wNumLevelPlayers, except for the player at wCurTurnPlayer (which isn't being mocked). ld a, [wNumLevelPlayers] - maskbits MAX_PLAYERS cp 1 ret z ; return if single player mode .loop @@ -880,7 +879,6 @@ RepositionMockedPlayerObjects_Connection:: cp BOARDEVENT_VIEW_MAP_MODE jr nz, RepositionMockedPlayerObjects_NextPlayer ld a, [wNumLevelPlayers] - maskbits MAX_PLAYERS .loop dec a cp -1 @@ -906,7 +904,7 @@ RepositionMockedPlayerObject: jr nz, .next_map_1 ld a, [wMapNumber] cp c - jp z, MockPlayerObject_ViewMapMode ; is current map + jp z, .is_current_map ; is current map .next_map_1 ld a, [wNorthConnectedMapGroup] cp b @@ -942,7 +940,7 @@ RepositionMockedPlayerObject: .is_connected_map ld [wTempByteValue], a - ld hl, .got_sprite_coords + ld hl, .connected_sprite_coords_obtained push hl ld a, [wMockingWhichPlayer] ld hl, wPlayer1YCoord @@ -960,7 +958,20 @@ RepositionMockedPlayerObject: dw GetWestConnectedSpriteCoords dw GetEastConnectedSpriteCoords -.got_sprite_coords +.is_current_map + ld a, [wMockingWhichPlayer] + ld hl, wPlayer1MockYCoord + ld bc, wPlayer2MockYCoord - wPlayer1MockYCoord + call AddNTimes + push hl + ld a, [wMockingWhichPlayer] + ld hl, wPlayer1YCoord + ld bc, wPlayer2YCoord - wPlayer1YCoord + call AddNTimes + pop de + jr MockPlayerObject + +.connected_sprite_coords_obtained ret nc ; return if sprite is not in visible part of connected map ; hl is y,x coordinates: load them into wPlayer*MockYCoord and wPlayer*MockXCoord push hl diff --git a/engine/overworld/scripting.asm b/engine/overworld/scripting.asm index 0bfd41769..a032129c4 100644 --- a/engine/overworld/scripting.asm +++ b/engine/overworld/scripting.asm @@ -1273,6 +1273,8 @@ Script_reloadmaptonextplayer: ldh [hMapEntryMethod], a ld a, SPAWN_FROM_RAM ld [wDefaultSpawnpoint], a + ld a, BOARDEVENT_DISPLAY_MENU + ldh [hCurBoardEvent], a ld a, MAPSTATUS_ENTER call LoadMapStatus call StopScript