From b1af1ade33941ca5b8efaaa86cd5e4aa85e34107 Mon Sep 17 00:00:00 2001 From: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Date: Mon, 10 Mar 2025 21:13:58 +1000 Subject: [PATCH] fixed get_level_num_from_course_num --- src/game/save_file.c | 25 +++++++++++++++++++------ src/game/save_file.h | 1 - 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/game/save_file.c b/src/game/save_file.c index 85efa72f1..b4769c738 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -55,11 +55,14 @@ s8 gLevelToCourseNumTable[] = { #undef STUB_LEVEL #undef DEFINE_LEVEL -#define STUB_LEVEL(_0, levelenum, _2, _3, _4, _5, _6, _7, _8) levelenum, -#define DEFINE_LEVEL(_0, levelenum, _2, _3, _4, _5, _6, _7, _8, _9, _10) levelenum, -s8 gCourseNumToLevelNumTable[] = { +#define STUB_LEVEL(_0, levelenum, courseenum, _3, _4, _5, _6, _7, _8) [courseenum] = levelenum, +#define DEFINE_LEVEL(_0, levelenum, courseenum, _3, _4, _5, _6, _7, _8, _9, _10) [courseenum] = levelenum, +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverride-init" // this is hacky, but its dealt with in the getter function +s8 sCourseNumToLevelNumTable[] = { #include "levels/level_defines.h" }; +#pragma GCC diagnostic pop #undef STUB_LEVEL #undef DEFINE_LEVEL @@ -70,7 +73,17 @@ s8 get_level_num_from_course_num(s16 courseNum) { if (courseNum < 0 || courseNum >= COURSE_COUNT) { return LEVEL_NONE; } - return gCourseNumToLevelNumTable[courseNum]; + switch (courseNum) { // deal with the overridden courses + case COURSE_NONE: + return LEVEL_CASTLE; + case COURSE_BITDW: + return LEVEL_BITDW; + case COURSE_BITFS: + return LEVEL_BITFS; + case COURSE_BITS: + return LEVEL_BITS; + } + return sCourseNumToLevelNumTable[courseNum]; } s8 get_level_course_num(s16 levelNum) { @@ -707,11 +720,11 @@ void save_file_set_star_flags(s32 fileIndex, s32 courseIndex, u32 starFlags) { void save_file_remove_star_flags(s32 fileIndex, s32 courseIndex, u32 starFlagsToRemove) { if (INVALID_FILE_INDEX(fileIndex)) { return; } if (INVALID_SRC_SLOT(gSaveFileUsingBackupSlot)) { return; } - + if (courseIndex == -1) { gSaveBuffer.files[fileIndex][gSaveFileUsingBackupSlot].flags &= ~STAR_FLAG_TO_SAVE_FLAG(starFlagsToRemove); network_send_save_remove_flag(fileIndex, courseIndex, 0, STAR_FLAG_TO_SAVE_FLAG(starFlagsToRemove)); - } + } else if (!INVALID_COURSE_STAR_INDEX(courseIndex)) { gSaveBuffer.files[fileIndex][gSaveFileUsingBackupSlot].courseStars[courseIndex] &= ~starFlagsToRemove; network_send_save_remove_flag(fileIndex, courseIndex, starFlagsToRemove, 0); diff --git a/src/game/save_file.h b/src/game/save_file.h index 55cb7191d..bd3f9b7f6 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -80,7 +80,6 @@ extern s8 sUnusedGotGlobalCoinHiScore; extern u8 gGotFileCoinHiScore; extern u8 gCurrCourseStarFlags; extern s8 gLevelToCourseNumTable[]; -extern s8 gCourseNumToLevelNumTable[]; // game progress flags #define SAVE_FLAG_FILE_EXISTS /* 0x00000001 */ (1 << 0)