From 3ab1b0b4b54356ebe63d274a69c7b80e4ffe63b2 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 13 Jun 2021 18:32:35 -0700 Subject: [PATCH] Synchronized red coin count on join. --- src/pc/network/network.c | 6 +----- src/pc/network/packets/packet_level.c | 23 +++++++++++++++++++--- src/pc/network/packets/packet_sync_valid.c | 4 ++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/pc/network/network.c b/src/pc/network/network.c index c2311a6b1..db1ca74c7 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -23,7 +23,6 @@ struct NetworkSystem* gNetworkSystem = &gNetworkSystemSocket; #endif #define LOADING_LEVEL_THRESHOLD 10 -#define SYNCING_LEVEL_THRESHOLD 30 * 6 u16 networkLoadingLevel = 0; bool gNetworkLevelLoaded = false; @@ -225,15 +224,12 @@ void network_receive(u8 localIndex, u8* data, u16 dataLength) { void network_update(void) { // check for level loaded event - if (networkLoadingLevel < SYNCING_LEVEL_THRESHOLD) { + if (networkLoadingLevel < LOADING_LEVEL_THRESHOLD) { networkLoadingLevel++; if (!gNetworkLevelLoaded && networkLoadingLevel >= LOADING_LEVEL_THRESHOLD) { gNetworkLevelLoaded = true; network_on_loaded_level(); } - if (networkLoadingLevel >= SYNCING_LEVEL_THRESHOLD) { - gNetworkLevelSyncing = false; - } } // send out update packets diff --git a/src/pc/network/packets/packet_level.c b/src/pc/network/packets/packet_level.c index e80813710..d9fe3a99f 100644 --- a/src/pc/network/packets/packet_level.c +++ b/src/pc/network/packets/packet_level.c @@ -1,7 +1,12 @@ #include #include "../network.h" +#include "game/object_list_processor.h" #include "game/interaction.h" #include "game/level_update.h" +#include "game/ingame_menu.h" +#include "behavior_table.h" +#include "object_constants.h" +#include "object_fields.h" #define DISABLE_MODULE_LOG 1 #include "pc/debuglog.h" @@ -20,6 +25,7 @@ void network_send_level(struct NetworkPlayer* toNp, bool sendArea) { // level variables packet_write(&p, &gMarioStates[0].numCoins, sizeof(s16)); + packet_write(&p, &gRedCoinsCollected, sizeof(u8)); packet_write(&p, &gPssSlideStarted, sizeof(u8)); packet_write(&p, &gHudDisplay.timer, sizeof(u16)); @@ -61,7 +67,18 @@ void network_receive_level(struct Packet* p) { } // read level variables - packet_write(p, &gMarioStates[0].numCoins, sizeof(s16)); - packet_write(p, &gPssSlideStarted, sizeof(u8)); - packet_write(p, &gHudDisplay.timer, sizeof(u16)); + u8 redCoinsCollected; + packet_read(p, &gMarioStates[0].numCoins, sizeof(s16)); + packet_read(p, &redCoinsCollected, sizeof(u8)); + packet_read(p, &gPssSlideStarted, sizeof(u8)); + packet_read(p, &gHudDisplay.timer, sizeof(u16)); + + // hacky way to override red coins collected + gRedCoinsCollected = redCoinsCollected; + for (int i = 0; i < OBJECT_POOL_CAPACITY; i++) { + struct Object* o = &gObjectPool[i]; + if (o->behavior == bhvBowserCourseRedCoinStar || o->behavior == bhvHiddenRedCoinStar) { + o->oHiddenStarTriggerCounter = redCoinsCollected; + } + } } diff --git a/src/pc/network/packets/packet_sync_valid.c b/src/pc/network/packets/packet_sync_valid.c index 74aa602a6..9c4b5be17 100644 --- a/src/pc/network/packets/packet_sync_valid.c +++ b/src/pc/network/packets/packet_sync_valid.c @@ -10,6 +10,7 @@ void network_send_sync_valid(struct NetworkPlayer* toNp) { if (toNp == gNetworkPlayerLocal) { // the player is the server, no need to send it + gNetworkLevelSyncing = false; return; } @@ -59,4 +60,7 @@ void network_receive_sync_valid(struct Packet* p) { LOG_INFO("informing server of sync valid"); network_send_sync_valid(gNetworkPlayerServer); } + + // we're no longer syncing + gNetworkLevelSyncing = false; }