diff --git a/src/game/level_update.c b/src/game/level_update.c index 630311b72..dad9e42c0 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -1250,14 +1250,6 @@ s32 update_level(void) { } s32 init_level(void) { - // reset cap flags - if (save_file_exists(gCurrSaveFileNum - 1)) { - save_file_clear_flags(SAVE_FLAG_CAP_ON_GROUND); - save_file_clear_flags(SAVE_FLAG_CAP_ON_KLEPTO); - save_file_clear_flags(SAVE_FLAG_CAP_ON_UKIKI); - save_file_clear_flags(SAVE_FLAG_CAP_ON_MR_BLIZZARD); - } - reset_dialog_render_state(); s32 val4 = 0; diff --git a/src/game/mario.c b/src/game/mario.c index e8bcc175d..7fef51e21 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -2051,11 +2051,12 @@ static void init_single_mario(struct MarioState* m) { m->invincTimer = 0; - if (save_file_get_flags() & (SAVE_FLAG_CAP_ON_GROUND | SAVE_FLAG_CAP_ON_KLEPTO | SAVE_FLAG_CAP_ON_UKIKI | SAVE_FLAG_CAP_ON_MR_BLIZZARD)) { + // always put the cap on head + /*if (save_file_get_flags() & (SAVE_FLAG_CAP_ON_GROUND | SAVE_FLAG_CAP_ON_KLEPTO | SAVE_FLAG_CAP_ON_UKIKI | SAVE_FLAG_CAP_ON_MR_BLIZZARD)) { m->flags = 0; - } else { + } else {*/ m->flags = (MARIO_CAP_ON_HEAD | MARIO_NORMAL_CAP); - } + //} m->forwardVel = 0.0f; m->squishTimer = 0; diff --git a/src/game/save_file.c b/src/game/save_file.c index 788766539..1952624b9 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -603,6 +603,10 @@ s32 save_file_get_total_star_count(s32 fileIndex, s32 minCourse, s32 maxCourse) } void save_file_set_flags(u32 flags) { + // prevent saving any flag that would make the player hatless on level transition + flags &= ~(SAVE_FLAG_CAP_ON_GROUND | SAVE_FLAG_CAP_ON_KLEPTO | SAVE_FLAG_CAP_ON_MR_BLIZZARD | SAVE_FLAG_CAP_ON_UKIKI); + if (flags == 0) { return; } + gSaveBuffer.files[gCurrSaveFileNum - 1][0].flags |= (flags | SAVE_FLAG_FILE_EXISTS); gSaveFileModified = TRUE; network_send_save_set_flag(gCurrSaveFileNum - 1, 0, 0, (flags | SAVE_FLAG_FILE_EXISTS));