diff --git a/src/game/level_update.c b/src/game/level_update.c index f278811e..8e1c0a99 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -28,6 +28,8 @@ #include "course_table.h" #include "thread6.h" +#include "pc/cliopts.h" + #define PLAY_MODE_NORMAL 0 #define PLAY_MODE_PAUSED 2 #define PLAY_MODE_CHANGE_AREA 3 @@ -1197,7 +1199,7 @@ s32 init_level(void) { if (gMarioState->action != ACT_UNINITIALIZED) { if (save_file_exists(gCurrSaveFileNum - 1)) { set_mario_action(gMarioState, ACT_IDLE, 0); - } else { + } else if (gCLIOpts.SkipIntro == 0) { set_mario_action(gMarioState, ACT_INTRO_CUTSCENE, 0); val4 = 1; } diff --git a/src/pc/cliopts.c b/src/pc/cliopts.c new file mode 100644 index 00000000..162b3e1a --- /dev/null +++ b/src/pc/cliopts.c @@ -0,0 +1,20 @@ +#include "cliopts.h" + +struct PCCLIOptions gCLIOpts; + +void parse_cli_opts(int argc, char* argv[]) +{ + // Initialize options with false values. + gCLIOpts.SkipIntro = 0; + + // Scan arguments for options + if (argc > 1) + { + int i; + for (i = 1; i < argc; i++) + { + if (strcmp(argv[i], "--skip-intro") == 0) // Skip Peach Intro + gCLIOpts.SkipIntro = 1; + } + } +} \ No newline at end of file diff --git a/src/pc/cliopts.h b/src/pc/cliopts.h new file mode 100644 index 00000000..2f08cc4e --- /dev/null +++ b/src/pc/cliopts.h @@ -0,0 +1,10 @@ +#include "sm64.h" + +struct PCCLIOptions +{ + u8 SkipIntro; +}; + +extern struct PCCLIOptions gCLIOpts; + +void parse_cli_opts(int argc, char* argv[]); \ No newline at end of file diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c index 5b4bcd23..ca7adf51 100644 --- a/src/pc/pc_main.c +++ b/src/pc/pc_main.c @@ -18,6 +18,7 @@ #include "audio/audio_sdl.h" #include "audio/audio_null.h" +#include "cliopts.h" #include "configfile.h" OSMesg D_80339BEC; @@ -155,6 +156,7 @@ void main_func(void) { } int main(int argc, char *argv[]) { + parse_cli_opts(argc, argv); main_func(); return 0; }