From 4ec84ad51c0645b502e948f827f6b4e8f504aaf9 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 26 May 2021 14:55:59 +0100 Subject: [PATCH] Added mario head skip as a toggle in config.h --- include/config.h | 2 ++ include/level_commands.h | 3 ++- levels/intro/geo.c | 6 ++++-- levels/intro/script.c | 8 ++++++-- sm64.ld | 7 ++++--- src/engine/level_script.c | 4 +++- src/game/mario_misc.c | 4 +++- src/game/mario_misc.h | 3 ++- 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/include/config.h b/include/config.h index 99473528..fa3c6beb 100644 --- a/include/config.h +++ b/include/config.h @@ -49,5 +49,7 @@ // When this option is enabled, LODs will ONLY work on console. // When this option is disabled, LODs will work regardless of whether console or emulator is used. #define AUTO_LOD +// Uncomment this if you want to keep the mario head and not skip it +#define KEEP_MARIO_HEAD #endif // CONFIG_H diff --git a/include/level_commands.h b/include/level_commands.h index a010644c..df1b797f 100644 --- a/include/level_commands.h +++ b/include/level_commands.h @@ -4,6 +4,7 @@ #include "command_macros_base.h" #include "level_table.h" +#include "config.h" #define OP_AND 0 #define OP_NAND 1 @@ -169,7 +170,7 @@ CMD_PTR(romEnd) #endif -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD #define LOAD_MARIO_HEAD(sethead) \ CMD_BBH(0x19, 0x04, sethead) #else diff --git a/levels/intro/geo.c b/levels/intro/geo.c index a04ac3f5..91783833 100644 --- a/levels/intro/geo.c +++ b/levels/intro/geo.c @@ -15,6 +15,8 @@ #include "levels/intro/header.h" +#include "config.h" + // 0x0E0002D0 const GeoLayout intro_geo_0002D0[] = { GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), @@ -61,7 +63,7 @@ const GeoLayout intro_geo_mario_head_regular[] = { GEO_ZBUFFER(1), GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM(45, 128, 16384), -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD GEO_OPEN_NODE(), GEO_ASM(2, geo_draw_mario_head_goddard), GEO_CLOSE_NODE(), @@ -94,7 +96,7 @@ const GeoLayout intro_geo_mario_head_dizzy[] = { GEO_ZBUFFER(1), GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM(45, 128, 16384), -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD GEO_OPEN_NODE(), GEO_ASM(3, geo_draw_mario_head_goddard), GEO_CLOSE_NODE(), diff --git a/levels/intro/script.c b/levels/intro/script.c index 39f3c7af..72d5088a 100644 --- a/levels/intro/script.c +++ b/levels/intro/script.c @@ -18,6 +18,8 @@ #include "make_const_nonconst.h" #include "levels/intro/header.h" +#include "config.h" + const LevelScript level_intro_splash_screen[] = { INIT_LEVEL(), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), @@ -45,10 +47,12 @@ const LevelScript level_intro_splash_screen[] = { const LevelScript level_intro_mario_head_regular[] = { INIT_LEVEL(), +#ifndef KEEP_MARIO_HEAD EXIT_AND_EXECUTE(/*seg*/ 0x14, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_1), +#endif BLACKOUT(/*active*/ TRUE), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE), #endif LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), @@ -75,7 +79,7 @@ const LevelScript level_intro_mario_head_dizzy[] = { INIT_LEVEL(), BLACKOUT(/*active*/ TRUE), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD LOAD_MARIO_HEAD(/*loadHeadID*/ DIZZY_FACE), #endif LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), diff --git a/sm64.ld b/sm64.ld index 6123bb58..32537a49 100755 --- a/sm64.ld +++ b/sm64.ld @@ -2,6 +2,7 @@ OUTPUT_ARCH (mips) #define LINKER /* Removes externs from preprocessed script */ #include "segments.h" +#include "config.h" #undef LINKER #define BEGIN_SEG(name, addr) \ @@ -286,7 +287,7 @@ SECTIONS BUILD_DIR/src/menu*.o(.text); BUILD_DIR/src/menu*.o(.data*); BUILD_DIR/src/menu*.o(.rodata*); -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD BUILD_DIR/libgoddard.a:*.o(.text); /* goddard subsystem data */ BUILD_DIR/libgoddard.a:gd_main.o(.data*); @@ -319,7 +320,7 @@ SECTIONS BEGIN_NOLOAD(goddard) { BUILD_DIR/src/menu*.o(.bss*); -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD BUILD_DIR/libgoddard.a:*.o(.bss*); #endif } @@ -345,7 +346,7 @@ SECTIONS YAY0_SEG(debug_level_select, 0x07000000) YAY0_SEG(title_screen_bg, 0x0A000000) -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD BEGIN_SEG(gd_dynlists, 0x04000000) { BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.data); diff --git a/src/engine/level_script.c b/src/engine/level_script.c index 5971781b..6687ac0d 100644 --- a/src/engine/level_script.c +++ b/src/engine/level_script.c @@ -25,6 +25,8 @@ #include "surface_collision.h" #include "surface_load.h" +#include "config.h" + #define CMD_GET(type, offset) (*(type *) (CMD_PROCESS_OFFSET(offset) + (u8 *) sCurrentCmd)) // These are equal @@ -281,7 +283,7 @@ static void level_cmd_load_yay0(void) { } static void level_cmd_load_mario_head(void) { -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD // TODO: Fix these hardcoded sizes void *addr = main_pool_alloc(DOUBLE_SIZE_ON_64_BIT(0xE1000), MEMORY_POOL_LEFT); if (addr != NULL) { diff --git a/src/game/mario_misc.c b/src/game/mario_misc.c index d7ed03ac..cbccf073 100644 --- a/src/game/mario_misc.c +++ b/src/game/mario_misc.c @@ -24,6 +24,8 @@ #include "skybox.h" #include "sound_init.h" +#include "config.h" + #define TOAD_STAR_1_REQUIREMENT 12 #define TOAD_STAR_2_REQUIREMENT 25 #define TOAD_STAR_3_REQUIREMENT 35 @@ -78,7 +80,7 @@ struct GraphNodeObject gMirrorMario; // copy of Mario's geo node for drawing mi // (message NPC related things, the Mario head geo, and Mario geo // functions) -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD /** * Geo node script that draws Mario's head on the title screen. */ diff --git a/src/game/mario_misc.h b/src/game/mario_misc.h index a65a7517..7053ca34 100644 --- a/src/game/mario_misc.h +++ b/src/game/mario_misc.h @@ -5,11 +5,12 @@ #include "macros.h" #include "types.h" +#include "config.h" extern struct GraphNodeObject gMirrorMario; extern struct MarioBodyState gBodyStates[2]; -#ifdef GODDARD +#ifdef KEEP_MARIO_HEAD Gfx *geo_draw_mario_head_goddard(s32 callContext, struct GraphNode *node, Mat4 *c); #endif void bhv_toad_message_loop(void);