diff --git a/include/config.h b/include/config.h index 45c0faa0..38eea8fb 100644 --- a/include/config.h +++ b/include/config.h @@ -36,13 +36,15 @@ // Border Height Define for NTSC Versions #ifdef TARGET_N64 #ifndef VERSION_EU -#define BORDER_HEIGHT 8 +#define BORDER_HEIGHT_CONSOLE 8 +#define BORDER_HEIGHT_EMULATOR 0 #else -#define BORDER_HEIGHT 1 +#define BORDER_HEIGHT_CONSOLE 8 +#define BORDER_HEIGHT_EMULATOR 0 #endif #else -// What's the point of having a border? -#define BORDER_HEIGHT 0 +#define BORDER_HEIGHT_CONSOLE 8 +#define BORDER_HEIGHT_EMULATOR 0 #endif #endif // CONFIG_H diff --git a/lib/libs2d_engine.a b/lib/libs2d_engine.a new file mode 100644 index 00000000..ab363747 Binary files /dev/null and b/lib/libs2d_engine.a differ diff --git a/src/game/area.c b/src/game/area.c index af9d0156..976a1a50 100644 --- a/src/game/area.c +++ b/src/game/area.c @@ -365,16 +365,16 @@ void render_game(void) { gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&D_8032CF00)); - gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, - SCREEN_HEIGHT - BORDER_HEIGHT); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH, + SCREEN_HEIGHT - gBorderHeight); render_hud(); gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); render_text_labels(); do_cutscene_handler(); print_displaying_credits_entry(); - gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, - SCREEN_HEIGHT - BORDER_HEIGHT); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH, + SCREEN_HEIGHT - gBorderHeight); gPauseScreenMode = render_menus_and_dialogs(); if (gPauseScreenMode != 0) { @@ -384,8 +384,8 @@ void render_game(void) { if (D_8032CE78 != NULL) { make_viewport_clip_rect(D_8032CE78); } else - gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, - SCREEN_HEIGHT - BORDER_HEIGHT); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH, + SCREEN_HEIGHT - gBorderHeight); if (gWarpTransition.isActive) { if (gWarpTransDelay == 0) { diff --git a/src/game/game_init.c b/src/game/game_init.c index 2097383d..bbcd496e 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -41,6 +41,8 @@ struct GfxPool *gGfxPool; OSContStatus gControllerStatuses[4]; OSContPad gControllerPads[4]; u8 gControllerBits; +u8 gIsConsole; +u8 gBorderHeight; #ifdef EEP s8 gEepromProbe; #endif @@ -140,8 +142,8 @@ void clear_z_buffer(void) { gDPSetFillColor(gDisplayListHead++, GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0)); - gDPFillRectangle(gDisplayListHead++, 0, BORDER_HEIGHT, SCREEN_WIDTH - 1, - SCREEN_HEIGHT - 1 - BORDER_HEIGHT); + gDPFillRectangle(gDisplayListHead++, 0, gBorderHeight, SCREEN_WIDTH - 1, + SCREEN_HEIGHT - 1 - gBorderHeight); } /** Sets up the final framebuffer image. */ @@ -151,8 +153,8 @@ void display_frame_buffer(void) { gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalFrameBuffers[frameBufferIndex]); - gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH, - SCREEN_HEIGHT - BORDER_HEIGHT); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH, + SCREEN_HEIGHT - gBorderHeight); } /** Clears the framebuffer, allowing it to be overwritten. */ @@ -164,8 +166,8 @@ void clear_frame_buffer(s32 color) { gDPSetFillColor(gDisplayListHead++, color); gDPFillRectangle(gDisplayListHead++, - GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), BORDER_HEIGHT, - GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - BORDER_HEIGHT - 1); + GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), gBorderHeight, + GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - gBorderHeight - 1); gDPPipeSync(gDisplayListHead++); @@ -207,11 +209,11 @@ void draw_screen_borders(void) { gDPSetFillColor(gDisplayListHead++, GPACK_RGBA5551(0, 0, 0, 0) << 16 | GPACK_RGBA5551(0, 0, 0, 0)); -#if BORDER_HEIGHT != 0 +#if gBorderHeight != 0 gDPFillRectangle(gDisplayListHead++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), 0, - GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, BORDER_HEIGHT - 1); + GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, gBorderHeight - 1); gDPFillRectangle(gDisplayListHead++, - GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), SCREEN_HEIGHT - BORDER_HEIGHT, + GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), SCREEN_HEIGHT - gBorderHeight, GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - 1); #endif } @@ -322,6 +324,13 @@ void draw_reset_bars(void) { } void rendering_init(void) { + if (IO_READ(DPC_PIPEBUSY_REG) == 0) { + gIsConsole = 0; + gBorderHeight = BORDER_HEIGHT_EMULATOR; + } else { + gIsConsole = 1; + gBorderHeight = BORDER_HEIGHT_CONSOLE; + } gGfxPool = &gGfxPools[0]; set_segment_base_addr(1, gGfxPool->buffer); gGfxSPTask = &gGfxPool->spTask; diff --git a/src/game/game_init.h b/src/game/game_init.h index f1948718..ee5c13b2 100644 --- a/src/game/game_init.h +++ b/src/game/game_init.h @@ -41,6 +41,8 @@ extern Gfx *gDisplayListHead; extern u8 *gGfxPoolEnd; extern struct GfxPool *gGfxPool; extern u8 gControllerBits; +extern u8 gIsConsole; +extern u8 gBorderHeight; #ifdef EEP extern s8 gEepromProbe; #endif diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 9344738d..a7d2a226 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1826,13 +1826,13 @@ void render_dialog_entries(void) { render_dialog_triangle_choice(); } #ifdef VERSION_EU - #undef BORDER_HEIGHT - #define BORDER_HEIGHT 8 + #undef gBorderHeight + #define gBorderHeight 8 #endif - gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 2, 2, SCREEN_WIDTH - BORDER_HEIGHT/2, SCREEN_HEIGHT - BORDER_HEIGHT/2); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 2, 2, SCREEN_WIDTH - gBorderHeight/2, SCREEN_HEIGHT - gBorderHeight/2); #ifdef VERSION_EU - #undef BORDER_HEIGHT - #define BORDER_HEIGHT 1 + #undef gBorderHeight + #define gBorderHeight 1 #endif if (gLastDialogPageStrPos != -1 && gDialogBoxState == DIALOG_STATE_VERTICAL) { render_dialog_string_color(dialog->linesPerBox); diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index 58238e83..9cdab49b 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -521,8 +521,8 @@ static void geo_process_background(struct GraphNodeBackground *node) { gDPPipeSync(gfx++); gDPSetCycleType(gfx++, G_CYC_FILL); gDPSetFillColor(gfx++, node->background); - gDPFillRectangle(gfx++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), BORDER_HEIGHT, - GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - BORDER_HEIGHT - 1); + gDPFillRectangle(gfx++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), gBorderHeight, + GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - gBorderHeight - 1); gDPPipeSync(gfx++); gDPSetCycleType(gfx++, G_CYC_1CYCLE); gSPEndDisplayList(gfx++);