diff --git a/src/game/level_update.c b/src/game/level_update.c index ab18a3dc9..6fd6ebbeb 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -170,7 +170,7 @@ s8 gShouldNotPlayCastleMusic; struct MarioState *gMarioState = &gMarioStates[0]; u8 unused1[4] = { 0 }; -s8 D_8032C9E0 = 0; +s8 gInWarpCheckpoint = 0; u8 unused3[4]; u8 unused4[2]; @@ -675,18 +675,18 @@ struct WarpNode *get_painting_warp_node(void) { return warpNode; } -static void initiate_painting_warp_node(struct WarpNode *pWarpNode, u8 instant) { +static void initiate_painting_warp_node(struct WarpNode *pWarpNode) { struct WarpNode warpNode = *pWarpNode; if (!(warpNode.destLevel & 0x80)) { - D_8032C9E0 = check_warp_checkpoint(&warpNode); + gInWarpCheckpoint = check_warp_checkpoint(&warpNode); } initiate_warp(warpNode.destLevel & 0x7F, warpNode.destArea, warpNode.destNode, 0); check_if_should_set_warp_checkpoint(&warpNode); - play_transition_after_delay(WARP_TRANSITION_FADE_INTO_COLOR, 30, 255, 255, 255, instant ? 1 : 45); - level_set_transition(instant ? 1 : 74, basic_update); + play_transition_after_delay(WARP_TRANSITION_FADE_INTO_COLOR, 30, 255, 255, 255, 45); + level_set_transition(74, basic_update); play_sound(SOUND_MENU_STAR_SOUND, gDefaultSoundArgs); fadeout_music(398); @@ -705,7 +705,7 @@ void initiate_painting_warp(void) { if (gMarioState->action & ACT_FLAG_INTANGIBLE) { play_painting_eject_sound(); } else if (pWarpNode->id != 0) { - initiate_painting_warp_node(pWarpNode, false); + initiate_painting_warp_node(pWarpNode); set_mario_action(gMarioState, ACT_DISAPPEARED, 0); gMarioState->marioObj->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE; } @@ -1384,9 +1384,9 @@ s32 lvl_init_from_save_file(UNUSED s16 arg0, s32 levelNum) { } s32 lvl_set_current_level(UNUSED s16 arg0, s32 levelNum) { - s32 val4 = D_8032C9E0; + s32 val4 = gInWarpCheckpoint; - D_8032C9E0 = 0; + gInWarpCheckpoint = 0; gCurrLevelNum = levelNum; gCurrCourseNum = gLevelToCourseNumTable[levelNum - 1]; diff --git a/src/game/level_update.h b/src/game/level_update.h index a756ae429..beb985d05 100644 --- a/src/game/level_update.h +++ b/src/game/level_update.h @@ -85,6 +85,7 @@ struct WarpDest { }; extern struct WarpDest sWarpDest; +extern s8 gInWarpCheckpoint; extern s16 D_80339EE0; extern s16 sDelayedWarpOp; diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/pc/controller/controller_keyboard_debug.c index 7b42236f1..8b4df323c 100644 --- a/src/pc/controller/controller_keyboard_debug.c +++ b/src/pc/controller/controller_keyboard_debug.c @@ -5,7 +5,7 @@ #ifdef DEBUG -static u8 warpToLevel = LEVEL_BITFS; +static u8 warpToLevel = LEVEL_SSL; #define SCANCODE_0 0x0B #define SCANCODE_3 0x04 diff --git a/src/pc/network/packets/packet_level_warp.c b/src/pc/network/packets/packet_level_warp.c index 9abf0b38b..90033166e 100644 --- a/src/pc/network/packets/packet_level_warp.c +++ b/src/pc/network/packets/packet_level_warp.c @@ -20,6 +20,7 @@ extern struct WarpDest gReceiveWarpDest; s16 saved_D_80339EE0 = 0; struct WarpDest savedWarpNode = { 0 }; +s8 savedInWarpCheckpoint = 0; static clock_t lastDoneEvent = 0; static bool isInWarp = FALSE; @@ -31,6 +32,7 @@ struct PacketLevelWarpData { u8 done; u8 controlledWarp; struct WarpDest warpDest; + s8 inWarpCheckpoint; s16 D_80339EE0; }; @@ -40,12 +42,14 @@ static void populate_packet_data(struct PacketLevelWarpData* data, bool done, u8 data->done = done; data->controlledWarp = gControlledWarp; data->warpDest = savedWarpNode; + data->inWarpCheckpoint = savedInWarpCheckpoint; data->D_80339EE0 = saved_D_80339EE0; } void network_send_level_warp_begin(void) { isInWarp = TRUE; savedWarpNode = sWarpDest; + savedInWarpCheckpoint = gInWarpCheckpoint; saved_D_80339EE0 = D_80339EE0; float elapsedSinceDone = (clock() - lastDoneEvent) / CLOCKS_PER_SEC; @@ -103,6 +107,7 @@ static void network_send_level_warp_done(u8 remoteEventId) { static void do_warp(void) { gReceiveWarpDest = savedWarpNode; + gInWarpCheckpoint = savedInWarpCheckpoint; D_80339EE0 = saved_D_80339EE0; gReceiveWarp = TRUE; } @@ -143,6 +148,7 @@ void network_receive_level_warp(struct Packet* p) { LOG_INFO("client initiated warp!"); gControlledWarp = !remote.controlledWarp; // two-player hack savedWarpNode = remote.warpDest; + savedInWarpCheckpoint = remote.inWarpCheckpoint; saved_D_80339EE0 = remote.D_80339EE0; do_warp(); network_send_level_warp_done(remote.eventId); @@ -167,6 +173,7 @@ void network_receive_level_warp(struct Packet* p) { LOG_INFO("server initiated warp!"); gControlledWarp = !remote.controlledWarp; // two-player hack savedWarpNode = remote.warpDest; + savedInWarpCheckpoint = remote.inWarpCheckpoint; saved_D_80339EE0 = remote.D_80339EE0; LOG_INFO("finished event [%d]!", remote.eventId); do_warp();