mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-29 23:43:01 +00:00
Synchronized WDW initial water level
This commit is contained in:
parent
333a77b647
commit
1536ce87c8
3 changed files with 33 additions and 16 deletions
|
@ -46,9 +46,8 @@
|
||||||
|
|
||||||
#define WARP_NODE_CREDITS_MIN 0xF8
|
#define WARP_NODE_CREDITS_MIN 0xF8
|
||||||
|
|
||||||
|
struct SavedWarpValues gReceiveWarp = { 0 };
|
||||||
u8 gControlledWarp = 0;
|
u8 gControlledWarp = 0;
|
||||||
u8 gReceiveWarp = 0;
|
|
||||||
struct WarpDest gReceiveWarpDest = { 0 };
|
|
||||||
extern s8 sReceivedLoadedActNum;
|
extern s8 sReceivedLoadedActNum;
|
||||||
|
|
||||||
#ifdef VERSION_JP
|
#ifdef VERSION_JP
|
||||||
|
@ -991,9 +990,16 @@ void basic_update(UNUSED s16 *arg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_received_warp(void) {
|
static void check_received_warp(void) {
|
||||||
if (!gReceiveWarp) { return; }
|
extern float gPaintingMarioYEntry;
|
||||||
gReceiveWarp = FALSE;
|
if (!gReceiveWarp.received) { return; }
|
||||||
sWarpDest = gReceiveWarpDest;
|
gReceiveWarp.received = FALSE;
|
||||||
|
|
||||||
|
// keep do_warp(void) in sync with this
|
||||||
|
sWarpDest = gReceiveWarp.warpDest;
|
||||||
|
gInWarpCheckpoint = gReceiveWarp.inWarpCheckpoint;
|
||||||
|
gTTCSpeedSetting = gReceiveWarp.ttcSpeedSetting;
|
||||||
|
D_80339EE0 = gReceiveWarp.D_80339EE0;
|
||||||
|
gPaintingMarioYEntry = gReceiveWarp.paintingMarioYEntry;
|
||||||
|
|
||||||
if (!gControlledWarp) {
|
if (!gControlledWarp) {
|
||||||
// force well behaved state
|
// force well behaved state
|
||||||
|
@ -1054,7 +1060,7 @@ s32 play_mode_normal(void) {
|
||||||
} else if (sTransitionTimer != 0) {
|
} else if (sTransitionTimer != 0) {
|
||||||
set_play_mode(PLAY_MODE_CHANGE_AREA);
|
set_play_mode(PLAY_MODE_CHANGE_AREA);
|
||||||
}
|
}
|
||||||
} else if (!gReceiveWarp) {
|
} else if (!gReceiveWarp.received) {
|
||||||
if (sWarpDest.type == WARP_TYPE_CHANGE_LEVEL) {
|
if (sWarpDest.type == WARP_TYPE_CHANGE_LEVEL) {
|
||||||
set_play_mode(PLAY_MODE_SYNC_LEVEL);
|
set_play_mode(PLAY_MODE_SYNC_LEVEL);
|
||||||
network_send_level_warp_begin();
|
network_send_level_warp_begin();
|
||||||
|
|
|
@ -84,6 +84,15 @@ struct WarpDest {
|
||||||
u32 arg;
|
u32 arg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SavedWarpValues {
|
||||||
|
u8 received;
|
||||||
|
struct WarpDest warpDest;
|
||||||
|
s8 inWarpCheckpoint;
|
||||||
|
s16 ttcSpeedSetting;
|
||||||
|
s16 D_80339EE0;
|
||||||
|
f32 paintingMarioYEntry;
|
||||||
|
};
|
||||||
|
|
||||||
extern struct WarpDest sWarpDest;
|
extern struct WarpDest sWarpDest;
|
||||||
extern s8 gInWarpCheckpoint;
|
extern s8 gInWarpCheckpoint;
|
||||||
|
|
||||||
|
|
|
@ -15,16 +15,11 @@ static u8 remoteLastSeqId = (u8)-1;
|
||||||
|
|
||||||
extern s16 gTTCSpeedSetting;
|
extern s16 gTTCSpeedSetting;
|
||||||
extern s16 D_80339EE0;
|
extern s16 D_80339EE0;
|
||||||
|
extern float gPaintingMarioYEntry;
|
||||||
extern u8 gControlledWarp; // two-player hack
|
extern u8 gControlledWarp; // two-player hack
|
||||||
extern u8 gReceiveWarp;
|
|
||||||
extern struct WarpDest gReceiveWarpDest;
|
|
||||||
|
|
||||||
struct SavedWarpValues {
|
extern struct SavedWarpValues gReceiveWarp;
|
||||||
struct WarpDest warpDest;
|
struct SavedWarpValues saved = { 0 };
|
||||||
s8 inWarpCheckpoint;
|
|
||||||
s16 ttcSpeedSetting;
|
|
||||||
s16 D_80339EE0;
|
|
||||||
} saved = { 0 };
|
|
||||||
|
|
||||||
static clock_t lastDoneEvent = 0;
|
static clock_t lastDoneEvent = 0;
|
||||||
static bool isInWarp = FALSE;
|
static bool isInWarp = FALSE;
|
||||||
|
@ -39,6 +34,7 @@ struct PacketLevelWarpData {
|
||||||
s8 inWarpCheckpoint;
|
s8 inWarpCheckpoint;
|
||||||
s16 ttcSpeedSetting;
|
s16 ttcSpeedSetting;
|
||||||
s16 D_80339EE0;
|
s16 D_80339EE0;
|
||||||
|
f32 paintingMarioYEntry;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void populate_packet_data(struct PacketLevelWarpData* data, bool done, u8 packetEventId) {
|
static void populate_packet_data(struct PacketLevelWarpData* data, bool done, u8 packetEventId) {
|
||||||
|
@ -50,6 +46,7 @@ static void populate_packet_data(struct PacketLevelWarpData* data, bool done, u8
|
||||||
data->inWarpCheckpoint = saved.inWarpCheckpoint;
|
data->inWarpCheckpoint = saved.inWarpCheckpoint;
|
||||||
data->ttcSpeedSetting = saved.ttcSpeedSetting;
|
data->ttcSpeedSetting = saved.ttcSpeedSetting;
|
||||||
data->D_80339EE0 = saved.D_80339EE0;
|
data->D_80339EE0 = saved.D_80339EE0;
|
||||||
|
data->paintingMarioYEntry = saved.paintingMarioYEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void network_send_level_warp_begin(void) {
|
void network_send_level_warp_begin(void) {
|
||||||
|
@ -58,6 +55,7 @@ void network_send_level_warp_begin(void) {
|
||||||
saved.inWarpCheckpoint = gInWarpCheckpoint;
|
saved.inWarpCheckpoint = gInWarpCheckpoint;
|
||||||
saved.ttcSpeedSetting = gTTCSpeedSetting;
|
saved.ttcSpeedSetting = gTTCSpeedSetting;
|
||||||
saved.D_80339EE0 = D_80339EE0;
|
saved.D_80339EE0 = D_80339EE0;
|
||||||
|
saved.paintingMarioYEntry = gPaintingMarioYEntry;
|
||||||
|
|
||||||
float elapsedSinceDone = (clock() - lastDoneEvent) / CLOCKS_PER_SEC;
|
float elapsedSinceDone = (clock() - lastDoneEvent) / CLOCKS_PER_SEC;
|
||||||
gControlledWarp = (elapsedSinceDone < 1.0f)
|
gControlledWarp = (elapsedSinceDone < 1.0f)
|
||||||
|
@ -113,11 +111,13 @@ static void network_send_level_warp_done(u8 remoteEventId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_warp(void) {
|
static void do_warp(void) {
|
||||||
gReceiveWarpDest = saved.warpDest;
|
// keep check_received_warp(void) in sync with this
|
||||||
|
gReceiveWarp = saved;
|
||||||
|
gReceiveWarp.received = TRUE;
|
||||||
gInWarpCheckpoint = saved.inWarpCheckpoint;
|
gInWarpCheckpoint = saved.inWarpCheckpoint;
|
||||||
gTTCSpeedSetting = saved.ttcSpeedSetting;
|
gTTCSpeedSetting = saved.ttcSpeedSetting;
|
||||||
D_80339EE0 = saved.D_80339EE0;
|
D_80339EE0 = saved.D_80339EE0;
|
||||||
gReceiveWarp = TRUE;
|
gPaintingMarioYEntry = saved.paintingMarioYEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void network_receive_level_warp(struct Packet* p) {
|
void network_receive_level_warp(struct Packet* p) {
|
||||||
|
@ -160,6 +160,7 @@ void network_receive_level_warp(struct Packet* p) {
|
||||||
saved.inWarpCheckpoint = remote.inWarpCheckpoint;
|
saved.inWarpCheckpoint = remote.inWarpCheckpoint;
|
||||||
saved.ttcSpeedSetting = remote.ttcSpeedSetting;
|
saved.ttcSpeedSetting = remote.ttcSpeedSetting;
|
||||||
saved.D_80339EE0 = remote.D_80339EE0;
|
saved.D_80339EE0 = remote.D_80339EE0;
|
||||||
|
saved.paintingMarioYEntry = remote.paintingMarioYEntry;
|
||||||
|
|
||||||
do_warp();
|
do_warp();
|
||||||
network_send_level_warp_done(remote.eventId);
|
network_send_level_warp_done(remote.eventId);
|
||||||
|
@ -188,6 +189,7 @@ void network_receive_level_warp(struct Packet* p) {
|
||||||
saved.inWarpCheckpoint = remote.inWarpCheckpoint;
|
saved.inWarpCheckpoint = remote.inWarpCheckpoint;
|
||||||
saved.ttcSpeedSetting = remote.ttcSpeedSetting;
|
saved.ttcSpeedSetting = remote.ttcSpeedSetting;
|
||||||
saved.D_80339EE0 = remote.D_80339EE0;
|
saved.D_80339EE0 = remote.D_80339EE0;
|
||||||
|
saved.paintingMarioYEntry = remote.paintingMarioYEntry;
|
||||||
|
|
||||||
LOG_INFO("finished event [%d]!", remote.eventId);
|
LOG_INFO("finished event [%d]!", remote.eventId);
|
||||||
do_warp();
|
do_warp();
|
||||||
|
|
Loading…
Reference in a new issue