diff --git a/include/config.h b/include/config.h index 4d2630d9..fe07bb4b 100644 --- a/include/config.h +++ b/include/config.h @@ -40,6 +40,11 @@ #else // What's the point of having a border? #define BORDER_HEIGHT 0 + #endif +// --ultrasm64-extbounds specific settings-- +// Enable widescreen (16:9) support +#define WIDE + #endif // CONFIG_H diff --git a/src/game/game_init.c b/src/game/game_init.c index a7963e66..c72b60cf 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -63,6 +63,9 @@ UNUSED u8 filler80339D30[0x90]; s32 unused8032C690 = 0; u32 gGlobalTimer = 0; u8 gIsConsole; +#ifdef WIDE +u8 gWidescreen; +#endif u16 sCurrFBNum = 0; u16 frameBufferIndex = 0; diff --git a/src/game/game_init.h b/src/game/game_init.h index 8bcd83c5..ab658eaf 100644 --- a/src/game/game_init.h +++ b/src/game/game_init.h @@ -42,6 +42,9 @@ extern u8 *gGfxPoolEnd; extern struct GfxPool *gGfxPool; extern u8 gControllerBits; extern u8 gIsConsole; +#ifdef WIDE +extern u8 gWidescreen; +#endif #ifdef EEP extern s8 gEepromProbe; #endif diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 0f18b652..4a909c0f 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -22,7 +22,7 @@ #include "sm64.h" #include "text_strings.h" #include "types.h" -#define wide // DELETE THIS DEFINE IF YOU DON'T WANT WIDESCREEN SUPPORT IN YOUR HACK (why tho) +#include "config.h" u16 gDialogColorFadeTimer; s8 gLastDialogLineNum; @@ -39,7 +39,6 @@ u8 textCurrRatio43[] = { TEXT_HUD_CURRENT_RATIO_43 }; u8 textCurrRatio169[] = { TEXT_HUD_CURRENT_RATIO_169 }; u8 textWideInfo[] = { TEXT_HUD_WIDE_INFO }; u8 textWideInfo2[] = { TEXT_HUD_WIDE_INFO2 }; -u8 widescreen = 0; extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; @@ -2272,8 +2271,8 @@ void render_pause_my_score_coins(void) { print_generic_string(get_string_width(gTextCourseArr[gInGameLanguage]) + 51, 157, strCourseNum); #else print_generic_string(CRS_NUM_X1, 157, strCourseNum); -#ifdef wide - if (widescreen == 0) { +#ifdef WIDE + if (!gWidescreen) { if (COURSE_IS_MAIN_COURSE(gCurrCourseNum)) { print_generic_string(10, 40, textCurrRatio43); } else { @@ -2583,20 +2582,20 @@ void render_pause_castle_main_strings(s16 x, s16 y) { } } } -#ifdef wide +#ifdef WIDE if (gPlayer1Controller->buttonPressed & L_TRIG){ - if (widescreen == 0){ - widescreen = 1; + if (!gWidescreen){ + gWidescreen = 1; } else{ - widescreen = 0; + gWidescreen = 0; } } #endif gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); -#ifdef wide - if (widescreen == 0) { +#ifdef WIDE + if (!gWidescreen) { print_generic_string(10, 20, textCurrRatio43); } else { @@ -2670,14 +2669,16 @@ s16 render_pause_courses_and_castle(void) { shade_screen(); render_pause_my_score_coins(); render_pause_red_coins(); + #ifdef WIDE if (gPlayer1Controller->buttonPressed & L_TRIG){ - if (widescreen == 0){ - widescreen = 1; + if (!gWidescreen){ + gWidescreen = 1; } else{ - widescreen = 0; + gWidescreen = 0; } } + #endif if (gMarioStates[0].action & ACT_FLAG_PAUSE_EXIT) { render_pause_course_options(99, 93, &gDialogLineNum, 15); diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index 8089f9bc..bceb8474 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -10,6 +10,7 @@ #include "rendering_graph_node.h" #include "shadow.h" #include "sm64.h" +#include "game_init.h" #define WIDESCREEN /** @@ -237,7 +238,6 @@ static void geo_process_ortho_projection(struct GraphNodeOrthoProjection *node) /** * Process a perspective projection node. */ -extern u8 widescreen; static void geo_process_perspective(struct GraphNodePerspective *node) { if (node->fnNode.func != NULL) { node->fnNode.func(GEO_CONTEXT_RENDER, &node->fnNode.node, gMatStack[gMatStackIndex]); @@ -245,17 +245,16 @@ static void geo_process_perspective(struct GraphNodePerspective *node) { if (node->fnNode.node.children != NULL) { u16 perspNorm; Mtx *mtx = alloc_display_list(sizeof(*mtx)); - -#ifdef VERSION_EU - f32 aspect = ((f32) gCurGraphNodeRoot->width / (f32) gCurGraphNodeRoot->height) * 1.1f; -#else - if (widescreen == 1){ + #ifdef WIDE + if (gWidescreen){ aspect = 1.775f; } else{ aspect = 1.33333f; } -#endif + #else + aspect = 1.33333f; + #endif guPerspective(mtx, &perspNorm, node->fov, aspect, node->near / WORLD_SCALE, node->far / WORLD_SCALE, 1.0f); gSPPerspNormalize(gDisplayListHead++, perspNorm); diff --git a/src/menu/file_select.c b/src/menu/file_select.c index fceab623..7c485218 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -2854,12 +2854,13 @@ Gfx *geo_file_select_strings_and_menu_cursor(s32 callContext, UNUSED struct Grap * Relocates cursor position of the last save if the game goes back to the Mario Screen * either completing a course choosing "SAVE & QUIT" or having a game over. */ -extern u8 widescreen; s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { #ifdef VERSION_EU s8 fileNum; #endif - widescreen = 0; +#ifdef WIDE + gWidescreen = 0; +#endif sSelectedButtonID = MENU_BUTTON_NONE; sCurrentMenuLevel = MENU_LAYER_MAIN; sTextBaseAlpha = 0; diff --git a/src/menu/star_select.c b/src/menu/star_select.c index ec4d1b05..af55ae76 100644 --- a/src/menu/star_select.c +++ b/src/menu/star_select.c @@ -20,6 +20,7 @@ #include "star_select.h" #include "text_strings.h" #include "prevent_bss_reordering.h" +#include "game/game_init.h" /** * @file star_select.c @@ -52,7 +53,8 @@ static s8 sSelectableStarIndex = 0; // Act Selector menu timer that keeps counting until you choose an act. static s32 sActSelectorMenuTimer = 0; -extern u8 widescreen; +#ifdef WIDE +#endif /** * Act Selector Star Type Loop Action * Defines a select type for a star in the act selector. @@ -92,7 +94,8 @@ void bhv_act_selector_star_type_loop(void) { void render_100_coin_star(u8 stars) { if (stars & (1 << 6)) { // If the 100 coin star has been collected, create a new star selector next to the coin score. - if (widescreen == 1){ + #ifdef WIDE + if (gWidescreen){ sStarSelectorModels[6] = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_STAR, bhvActSelectorStarType, ((370*4.0f)/3), 24, -300, 0, 0, 0); } @@ -100,6 +103,10 @@ void render_100_coin_star(u8 stars) { sStarSelectorModels[6] = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_STAR, bhvActSelectorStarType, 370, 24, -300, 0, 0, 0); } + #else + sStarSelectorModels[6] = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_STAR, + bhvActSelectorStarType, 370, 24, -300, 0, 0, 0); + #endif sStarSelectorModels[6]->oStarSelectorSize = 0.8; sStarSelectorModels[6]->oStarSelectorType = STAR_SELECTOR_100_COINS; @@ -154,7 +161,8 @@ void bhv_act_selector_init(void) { } // Render star selector objects - if (widescreen == 1) { + #ifdef WIDE + if (gWidescreen) { for (i = 0; i < sVisibleStars; i++) { sStarSelectorModels[i] = spawn_object_abs_with_rot(gCurrentObject, 0, selectorModelIDs[i], bhvActSelectorStarType, @@ -170,6 +178,14 @@ void bhv_act_selector_init(void) { sStarSelectorModels[i]->oStarSelectorSize = 1.0f; } } + #else + for (i = 0; i < sVisibleStars; i++) { + sStarSelectorModels[i] = + spawn_object_abs_with_rot(gCurrentObject, 0, selectorModelIDs[i], bhvActSelectorStarType, + 75 + sVisibleStars * -75 + i * 152, 248, -300, 0, 0, 0); + sStarSelectorModels[i]->oStarSelectorSize = 1.0f; + } + #endif render_100_coin_star(stars); }