mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
Synchronized red coin count on join.
This commit is contained in:
parent
518a1fda4b
commit
3ab1b0b4b5
3 changed files with 25 additions and 8 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
#include <stdio.h>
|
||||
#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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue