Synchronized TTC speed setting

This commit is contained in:
MysterD 2020-09-24 21:59:03 -07:00
parent 8c1ec4beba
commit 333a77b647
1 changed files with 32 additions and 18 deletions

View File

@ -13,14 +13,18 @@ static u8 remoteFinishedEventId[2] = { (u8)-1, (u8)-1 };
static u8 seqId = 0; static u8 seqId = 0;
static u8 remoteLastSeqId = (u8)-1; static u8 remoteLastSeqId = (u8)-1;
extern s16 gTTCSpeedSetting;
extern s16 D_80339EE0; extern s16 D_80339EE0;
extern u8 gControlledWarp; // two-player hack extern u8 gControlledWarp; // two-player hack
extern u8 gReceiveWarp; extern u8 gReceiveWarp;
extern struct WarpDest gReceiveWarpDest; extern struct WarpDest gReceiveWarpDest;
s16 saved_D_80339EE0 = 0; struct SavedWarpValues {
struct WarpDest savedWarpNode = { 0 }; struct WarpDest warpDest;
s8 savedInWarpCheckpoint = 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;
@ -33,6 +37,7 @@ struct PacketLevelWarpData {
u8 controlledWarp; u8 controlledWarp;
struct WarpDest warpDest; struct WarpDest warpDest;
s8 inWarpCheckpoint; s8 inWarpCheckpoint;
s16 ttcSpeedSetting;
s16 D_80339EE0; s16 D_80339EE0;
}; };
@ -41,16 +46,18 @@ static void populate_packet_data(struct PacketLevelWarpData* data, bool done, u8
data->eventId = packetEventId; data->eventId = packetEventId;
data->done = done; data->done = done;
data->controlledWarp = gControlledWarp; data->controlledWarp = gControlledWarp;
data->warpDest = savedWarpNode; data->warpDest = saved.warpDest;
data->inWarpCheckpoint = savedInWarpCheckpoint; data->inWarpCheckpoint = saved.inWarpCheckpoint;
data->D_80339EE0 = saved_D_80339EE0; data->ttcSpeedSetting = saved.ttcSpeedSetting;
data->D_80339EE0 = saved.D_80339EE0;
} }
void network_send_level_warp_begin(void) { void network_send_level_warp_begin(void) {
isInWarp = TRUE; isInWarp = TRUE;
savedWarpNode = sWarpDest; saved.warpDest = sWarpDest;
savedInWarpCheckpoint = gInWarpCheckpoint; saved.inWarpCheckpoint = gInWarpCheckpoint;
saved_D_80339EE0 = D_80339EE0; saved.ttcSpeedSetting = gTTCSpeedSetting;
saved.D_80339EE0 = D_80339EE0;
float elapsedSinceDone = (clock() - lastDoneEvent) / CLOCKS_PER_SEC; float elapsedSinceDone = (clock() - lastDoneEvent) / CLOCKS_PER_SEC;
gControlledWarp = (elapsedSinceDone < 1.0f) gControlledWarp = (elapsedSinceDone < 1.0f)
@ -106,9 +113,10 @@ static void network_send_level_warp_done(u8 remoteEventId) {
} }
static void do_warp(void) { static void do_warp(void) {
gReceiveWarpDest = savedWarpNode; gReceiveWarpDest = saved.warpDest;
gInWarpCheckpoint = savedInWarpCheckpoint; gInWarpCheckpoint = saved.inWarpCheckpoint;
D_80339EE0 = saved_D_80339EE0; gTTCSpeedSetting = saved.ttcSpeedSetting;
D_80339EE0 = saved.D_80339EE0;
gReceiveWarp = TRUE; gReceiveWarp = TRUE;
} }
@ -147,9 +155,12 @@ void network_receive_level_warp(struct Packet* p) {
// client initiated warp // client initiated warp
LOG_INFO("client initiated warp!"); LOG_INFO("client initiated warp!");
gControlledWarp = !remote.controlledWarp; // two-player hack gControlledWarp = !remote.controlledWarp; // two-player hack
savedWarpNode = remote.warpDest;
savedInWarpCheckpoint = remote.inWarpCheckpoint; saved.warpDest = remote.warpDest;
saved_D_80339EE0 = remote.D_80339EE0; saved.inWarpCheckpoint = remote.inWarpCheckpoint;
saved.ttcSpeedSetting = remote.ttcSpeedSetting;
saved.D_80339EE0 = remote.D_80339EE0;
do_warp(); do_warp();
network_send_level_warp_done(remote.eventId); network_send_level_warp_done(remote.eventId);
return; return;
@ -172,9 +183,12 @@ void network_receive_level_warp(struct Packet* p) {
// server initiated warp // server initiated warp
LOG_INFO("server initiated warp!"); LOG_INFO("server initiated warp!");
gControlledWarp = !remote.controlledWarp; // two-player hack gControlledWarp = !remote.controlledWarp; // two-player hack
savedWarpNode = remote.warpDest;
savedInWarpCheckpoint = remote.inWarpCheckpoint; saved.warpDest = remote.warpDest;
saved_D_80339EE0 = remote.D_80339EE0; saved.inWarpCheckpoint = remote.inWarpCheckpoint;
saved.ttcSpeedSetting = remote.ttcSpeedSetting;
saved.D_80339EE0 = remote.D_80339EE0;
LOG_INFO("finished event [%d]!", remote.eventId); LOG_INFO("finished event [%d]!", remote.eventId);
do_warp(); do_warp();
network_send_level_warp_done(remote.eventId); network_send_level_warp_done(remote.eventId);