diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2025-01-25 19:36:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-25 19:36:44 -0700 |
| commit | ce9b4f25bea2018051f9861f74f90a7099dd1ccd (patch) | |
| tree | a40ac23fb5b7f60c6b4abf282c6beb35f022e0ee /src/render_objects.c | |
| parent | 995c60c85cac45d23dbcbfea45f29ec4ed7618b6 (diff) | |
Fix Remaining Widescreen Issues and Fix Audio Sizes (#174)
* Fix some boxes that shouldn't be wide
* forgot fix
* Fix widescreen for sliding lap texture
* Fix lakitu towing fade in out
* Add DOUBLE_SIZE_ON_64_BIT and ssize_t
Diffstat (limited to 'src/render_objects.c')
| -rw-r--r-- | src/render_objects.c | 105 |
1 files changed, 101 insertions, 4 deletions
diff --git a/src/render_objects.c b/src/render_objects.c index 83c16b56b..409bab57c 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -1659,6 +1659,52 @@ void render_texture_rectangle_wide(s32 x, s32 y, s32 width, s32 height, s32 arg4 // 1 << 10); } +void render_texture_rectangle_wide_left(s32 x, s32 y, s32 width, s32 height, s32 arg4, s32 arg5, s32 arg6) { + s32 xh = (((x + width) - 1)); + s32 yh = (((y + height) - 1) << 2); + s32 xl = ((x)); + s32 yl = y << 2; + + s32 xh2 = (((x + width))); + s32 yh2 = ((y + height) << 2); + + // if center of image is to the left side of the screen then align left, + // otherwise align right + + s32 coordX = 0; + s32 coordX2 = 0; + + switch (gScreenModeSelection) { + case SCREEN_MODE_3P_4P_SPLITSCREEN: + if (gPlayerCount == 3) { + // Center item in area of screen + s32 center = (s32) ((OTRGetDimensionFromLeftEdge(SCREEN_WIDTH) - SCREEN_WIDTH) / 2) + + ((SCREEN_WIDTH / 4) + (SCREEN_WIDTH / 2)); + s32 coordX = (s32) (center - (width / 2)) << 2; + s32 coordX2 = (s32) (center + (width / 2)) << 2; + gSPWideTextureRectangle(gDisplayListHead++, coordX, yl, coordX2, yh2, G_TX_RENDERTILE, arg4 << 5, + (arg5 << 5), 1 << 10, 1 << 10); + } else { // 4 players + s32 renderWidth = SCREEN_WIDTH; + s32 center = (renderWidth / 2); + coordX = (s32) (center - (width / 2)) << 2; + coordX2 = (s32) (center + (width / 2)) << 2; + gSPWideTextureRectangle(gDisplayListHead++, coordX, yl, coordX2, yh2, G_TX_RENDERTILE, arg4 << 5, + (arg5 << 5), 1 << 10, 1 << 10); + } + break; + default: + coordX = (s32) OTRGetDimensionFromLeftEdge(xl) << 2; + coordX2 = (s32) OTRGetDimensionFromLeftEdge(xh2) << 2; + gSPWideTextureRectangle(gDisplayListHead++, coordX, yl, coordX2, yh2, G_TX_RENDERTILE, arg4 << 5, + (arg5 << 5), 1 << 10, 1 << 10); + break; + } + + // gSPTextureRectangle(gDisplayListHead++, xl, yl, xh2, yh2, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 1 << 10, + // 1 << 10); +} + void render_texture_rectangle_wrap(s32 x, s32 y, s32 width, s32 height, s32 mode) { // (0, 0) means texture coordinates will be rendered from the top left corner render_texture_rectangle(x, y, width, height, 0, 0, mode); @@ -1714,6 +1760,30 @@ void func_8004B97C_wide(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { } } +void func_8004B97C_wide_left(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { + UNUSED s32 pad[2]; + s32 sp2C; + s32 var_a1; + s32 var_v0; + s32 var_v1; + + if ((-arg2 < arg0) && (-arg3 < arg1)) { + var_v0 = 0; + var_v1 = 0; + sp2C = arg0; + var_a1 = arg1; + if (arg0 < 0) { + var_v1 = -arg0; + sp2C = 0; + } + if (arg1 < 0) { + var_v0 = -arg1; + var_a1 = 0; + } + render_texture_rectangle_wide_left(sp2C, var_a1, arg2 - var_v1, arg3 - var_v0, var_v1, var_v0, arg4); + } +} + // extra mode minimap void func_8004BA08(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { UNUSED s32 pad[2]; @@ -1904,6 +1974,27 @@ void func_8004C268(u32 arg0, u32 arg1, u8* texture, u32 width, u32 arg4, u32 hei } } +void func_8004C268_wide(u32 arg0, u32 arg1, u8* texture, u32 width, u32 arg4, u32 height, s32 arg6) { + s32 i; + u8* img2; + + arg0 -= (width / 2); + arg1 -= (arg4 / 2); + img2 = texture; + + for (i = 0; (u32) i < (arg4 / height); i++) { + load_texture_block_rgba16_mirror(img2, width, height); + func_8004B97C_wide_left(arg0, arg1, width, height, arg6); +//! @todo fakematch? +#ifdef AVOID_UB + img2 += (width * height) * 2; +#else + img2 += (width * height) * 2 ^ ((arg4 / height) * 0); +#endif + arg1 += height; + } +} + UNUSED void func_8004C354() { } @@ -2001,6 +2092,12 @@ void func_8004C9D8(s32 arg0, s32 arg1, s32 arg2, u8* texture, s32 arg4, s32 arg5 func_8004C268(arg0, arg1, texture, arg4, arg5, arg7, 1); } +void func_8004C9D8_wide(s32 arg0, s32 arg1, s32 arg2, u8* texture, s32 arg4, s32 arg5, UNUSED s32 arg6, s32 arg7) { + gSPDisplayList(gDisplayListHead++, D_0D007F38); + set_transparency(arg2); + func_8004C268_wide(arg0, arg1, texture, arg4, arg5, arg7, 1); +} + void func_8004CA58(s32 arg0, s32 arg1, f32 arg2, u8* texture, s32 arg4, s32 arg5) { gSPDisplayList(gDisplayListHead++, D_0D007F78); load_texture_block_rgba16_mirror(texture, arg4, arg5); @@ -2584,15 +2681,15 @@ void func_8004EB38(s32 playerId) { func_8004F950((s32) temp_s0->lap2CompletionTimeX, (s32) temp_s0->timerY, 0x00000050, (s32) temp_s0->someTimer); } if ((u8) temp_s0->unk_7E != 0) { - func_8004C9D8((s32) temp_s0->lapAfterImage1X, temp_s0->lapY + 3, 0x00000080, (u8*) common_texture_hud_lap, + func_8004C9D8_wide((s32) temp_s0->lapAfterImage1X, temp_s0->lapY + 3, 0x00000080, (u8*) common_texture_hud_lap, 0x00000020, 8, 0x00000020, 8); - func_8004C9D8(temp_s0->lapAfterImage1X + 0x1C, (s32) temp_s0->lapY, 0x00000080, + func_8004C9D8_wide(temp_s0->lapAfterImage1X + 0x1C, (s32) temp_s0->lapY, 0x00000080, (u8*) gHudLapTextures[temp_s0->alsoLapCount], 0x00000020, 0x00000010, 0x00000020, 0x00000010); } if ((u8) temp_s0->unk_7F != 0) { - func_8004C9D8((s32) temp_s0->lapAfterImage2X, temp_s0->lapY + 3, 0x00000050, (u8*) common_texture_hud_lap, + func_8004C9D8_wide((s32) temp_s0->lapAfterImage2X, temp_s0->lapY + 3, 0x00000050, (u8*) common_texture_hud_lap, 0x00000020, 8, 0x00000020, 8); - func_8004C9D8(temp_s0->lapAfterImage2X + 0x1C, (s32) temp_s0->lapY, 0x00000050, + func_8004C9D8_wide(temp_s0->lapAfterImage2X + 0x1C, (s32) temp_s0->lapY, 0x00000050, (u8*) gHudLapTextures[temp_s0->alsoLapCount], 0x00000020, 0x00000010, 0x00000020, 0x00000010); } } |
