diff --git a/include/mk64.h b/include/mk64.h index 9e4d10da9..2e7e1a207 100644 --- a/include/mk64.h +++ b/include/mk64.h @@ -138,7 +138,8 @@ void gSPDisplayListOffset(Gfx* pkt, Gfx* dl, int offset); void gSPVertex(Gfx* pkt, uintptr_t v, int n, int v0); void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr); -#define TEXTURE_SHIFT 2 +#define TEXTURE_LOAD_FIX 2 +#define TEXTURE_SIZE_FIX 1 // Dumb hack to fix load tile size on higher than native resolutions #define gMKLoadTextureTile(pkt, timg, fmt, siz, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, \ @@ -149,12 +150,12 @@ void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr); maskt, shiftt, cms, masks, shifts); \ gDPLoadSync(pkt); \ gDPLoadTile(pkt, G_TX_LOADTILE, (uls) << G_TEXTURE_IMAGE_FRAC, (ult) << G_TEXTURE_IMAGE_FRAC, \ - (lrs) << G_TEXTURE_IMAGE_FRAC, (lrt + TEXTURE_SHIFT) << G_TEXTURE_IMAGE_FRAC); \ + (lrs) << G_TEXTURE_IMAGE_FRAC, (lrt + TEXTURE_LOAD_FIX) << G_TEXTURE_IMAGE_FRAC); \ gDPPipeSync(pkt); \ gDPSetTile(pkt, fmt, siz, (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0, G_TX_RENDERTILE, pal, cmt, \ maskt, shiftt, cms, masks, shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, (uls) << G_TEXTURE_IMAGE_FRAC, (ult) << G_TEXTURE_IMAGE_FRAC, \ - (lrs) << G_TEXTURE_IMAGE_FRAC, (lrt) << G_TEXTURE_IMAGE_FRAC); \ + (lrs) << G_TEXTURE_IMAGE_FRAC, (lrt - TEXTURE_SIZE_FIX) << G_TEXTURE_IMAGE_FRAC); \ }) #define gMKLoadTextureTile_4b(pkt, timg, fmt, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, \ @@ -165,12 +166,12 @@ void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr); shiftt, cms, masks, shifts); \ gDPLoadSync(pkt); \ gDPLoadTile(pkt, G_TX_LOADTILE, (uls) << (G_TEXTURE_IMAGE_FRAC - 1), (ult) << (G_TEXTURE_IMAGE_FRAC), \ - (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), (lrt + TEXTURE_SHIFT) << (G_TEXTURE_IMAGE_FRAC)); \ + (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), (lrt + TEXTURE_LOAD_FIX) << (G_TEXTURE_IMAGE_FRAC)); \ gDPPipeSync(pkt); \ gDPSetTile(pkt, fmt, G_IM_SIZ_4b, (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, G_TX_RENDERTILE, pal, cmt, \ maskt, shiftt, cms, masks, shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, (uls) << G_TEXTURE_IMAGE_FRAC, (ult) << G_TEXTURE_IMAGE_FRAC, \ - (lrs) << G_TEXTURE_IMAGE_FRAC, (lrt) << G_TEXTURE_IMAGE_FRAC); \ + (lrs) << G_TEXTURE_IMAGE_FRAC, (lrt - TEXTURE_SIZE_FIX) << G_TEXTURE_IMAGE_FRAC); \ }) #ifdef __cplusplus diff --git a/src/code_80057C60.c b/src/code_80057C60.c index a17b52bf5..c69c2e3a5 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -577,7 +577,7 @@ void render_object_p2(void) { gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[1]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); CourseManager_DrawBombKarts(PLAYER_TWO); - //render_bomb_karts_wrap(PLAYER_TWO); + // render_bomb_karts_wrap(PLAYER_TWO); render_object_for_player(PLAYER_TWO); } @@ -588,7 +588,7 @@ void render_object_p3(void) { gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[2]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); CourseManager_DrawBombKarts(PLAYER_THREE); - //render_bomb_karts_wrap(PLAYER_THREE); + // render_bomb_karts_wrap(PLAYER_THREE); render_object_for_player(PLAYER_THREE); } @@ -600,9 +600,9 @@ void render_object_p4(void) { gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[3]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); CourseManager_DrawBombKarts(PLAYER_FOUR); - //render_bomb_karts_wrap(PLAYER_FOUR); + // render_bomb_karts_wrap(PLAYER_FOUR); if ((!gDemoMode) && (gPlayerCountSelection1 == 4)) { - //render_lakitu(PLAYER_FOUR); + // render_lakitu(PLAYER_FOUR); } render_object_for_player(PLAYER_FOUR); } @@ -785,7 +785,7 @@ void render_object_for_player(s32 cameraId) { } if (gModeSelection == BATTLE) { CourseManager_DrawBattleBombKarts(cameraId); - //render_battle_bomb_karts(cameraId); + // render_battle_bomb_karts(cameraId); } } @@ -1122,7 +1122,8 @@ void render_hud_2p_vertical_player_two(void) { void render_hud_lap_3p_4p(s32 playerId) { if (gModeSelection != BATTLE) { if (D_801657F8 && gIsHUDVisible) { - //draw_hud_2d_texture_32x8(playerHUD[playerId].lapX, playerHUD[playerId].lapY, (u8*) common_texture_hud_lap); + // draw_hud_2d_texture_32x8(playerHUD[playerId].lapX, playerHUD[playerId].lapY, (u8*) + // common_texture_hud_lap); draw_hud_2d_texture(playerHUD[playerId].lapX, playerHUD[playerId].lapY, 32, 8, common_texture_hud_lap); draw_lap_count(playerHUD[playerId].lapX - 12, playerHUD[playerId].lapY + 4, playerHUD[playerId].alsoLapCount); @@ -1239,7 +1240,7 @@ void func_8005995C(void) { void func_80059A88(s32 playerId) { func_80059820(playerId); if (!gDemoMode) { - //update_object_lakitu(playerId); // Moved to CourseManager_TickObjects60fps + // update_object_lakitu(playerId); // Moved to CourseManager_TickObjects60fps func_8007BB9C(playerId); } } @@ -1314,7 +1315,7 @@ void func_80059D00(void) { func_80059820(PLAYER_ONE); func_8005B914(); if (!gDemoMode) { - //func_8007AA44(0); + // func_8007AA44(0); } func_80078C70(0); if (playerHUD[PLAYER_ONE].raceCompleteBool == 0) { @@ -1334,14 +1335,14 @@ void func_80059D00(void) { func_80059820(PLAYER_ONE); func_8005D0FC(PLAYER_ONE); if (!gDemoMode) { - //func_8007AA44(0); + // func_8007AA44(0); } func_80078C70(1); func_8005D1F4(0); func_80059820(PLAYER_TWO); func_8005D0FC(PLAYER_TWO); if (!gDemoMode) { - //func_8007AA44(1); + // func_8007AA44(1); } func_80078C70(2); func_8005D1F4(1); @@ -1352,14 +1353,14 @@ void func_80059D00(void) { func_80059820(PLAYER_ONE); func_8005D0FC(PLAYER_ONE); if (!gDemoMode) { - //func_8007AA44(0); + // func_8007AA44(0); } func_80078C70(3); func_8005D1F4(0); func_80059820(PLAYER_TWO); func_8005D0FC(PLAYER_TWO); if (!gDemoMode) { - //func_8007AA44(1); + // func_8007AA44(1); } func_80078C70(4); func_8005D1F4(1); @@ -1372,26 +1373,26 @@ void func_80059D00(void) { func_80059820(PLAYER_ONE); func_8005D0FC(PLAYER_ONE); if (!gDemoMode) { - //func_8007AA44(0); + // func_8007AA44(0); } func_8005D1F4(0); func_80059820(PLAYER_TWO); func_8005D0FC(PLAYER_TWO); if (!gDemoMode) { - //func_8007AA44(1); + // func_8007AA44(1); } func_8005D1F4(1); func_80059820(PLAYER_THREE); func_8005D0FC(PLAYER_THREE); if (!gDemoMode) { - //func_8007AA44(2); + // func_8007AA44(2); } func_8005D1F4(2); if (gPlayerCountSelection1 == 4) { func_80059820(PLAYER_FOUR); func_8005D0FC(PLAYER_FOUR); if ((!gDemoMode) && (gPlayerCountSelection1 == 4)) { - //func_8007AA44(3); + // func_8007AA44(3); } func_8005D1F4(3); } @@ -1412,10 +1413,10 @@ void func_8005A070(void) { if (gIsGamePaused == false) { func_8005C728(); if (gGamestate == ENDING) { - //func_80086604(); - //func_80086D80(); - //update_cheep_cheep(1); - //func_80077640(); + // func_80086604(); + // func_80086D80(); + // update_cheep_cheep(1); + // func_80077640(); CourseManager_TickObjects(); CM_TickParticles(); } else if (gGamestate == CREDITS_SEQUENCE) { @@ -1563,8 +1564,8 @@ void func_8005A3C0(void) { } void func_8005A71C(void) { - //if (GetCourse() == GetBowsersCastle()) { - //func_80081210(); + // if (GetCourse() == GetBowsersCastle()) { + // func_80081210(); //} } @@ -2591,7 +2592,7 @@ void func_8005CB60(s32 playerId, s32 lapCount) { switch (*huhthedeuce) { /* switch 1; irregular */ case 0: /* switch 1 */ break; - case 1: /* switch 1 */ + case 1: /* switch 1 */ CM_ActivateSecondLapLakitu(playerId); // func_80079084(playerId); func_800C9060(playerId, SOUND_ARG_LOAD(0x19, 0x00, 0xF0, 0x15)); if ((GetCourse() == GetLuigiRaceway()) && (D_80165898 == 0) && @@ -2599,7 +2600,7 @@ void func_8005CB60(s32 playerId, s32 lapCount) { D_80165898 = 1; } break; - case 2: /* switch 1 */ + case 2: /* switch 1 */ CM_ActivateFinalLapLakitu(playerId); // func_800790B4(playerId); break; case 3: /* switch 1 */ @@ -5603,16 +5604,16 @@ void func_80068AA4(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 Vec3f sp64; Vec3s sp5C; - sp64[1] = player->pos[1]; - sp64[2] = player->pos[2]; - sp64[0] = player->pos[0]; + sp64[1] = player->pos[1]; + sp64[2] = player->pos[2]; + sp64[0] = player->pos[0]; if ((player->unk_258[20 + arg4].unk_01C == 1) && (player->animFrameSelector[arg3] < 0xD)) { -if (gTickVisuals) { - sp64[1] = player->pos[1] - 3.0f; - sp64[2] = player->pos[2] + ((-2.5 * player->unk_258[20 + arg4].unk_01E) * coss(player->unk_048[arg3])); - sp64[0] = player->pos[0] + ((-2.5 * player->unk_258[20 + arg4].unk_01E) * sins(player->unk_048[arg3])); -} + if (gTickVisuals) { + sp64[1] = player->pos[1] - 3.0f; + sp64[2] = player->pos[2] + ((-2.5 * player->unk_258[20 + arg4].unk_01E) * coss(player->unk_048[arg3])); + sp64[0] = player->pos[0] + ((-2.5 * player->unk_258[20 + arg4].unk_01E) * sins(player->unk_048[arg3])); + } sp5C[0] = 0; sp5C[1] = player->unk_048[arg3]; sp5C[2] = 0; @@ -6077,13 +6078,14 @@ void render_battle_balloon(Player* player, s8 arg1, s16 arg2, s8 arg3) { func_8004B614(primRed, primGreen, primBlue, envRed, envGreen, envBlue, 0x000000D8); gDPSetRenderMode(gDisplayListHead++, - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | - GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); - gDPLoadTextureBlock(gDisplayListHead++, gTextureBalloon1, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, - G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(gDisplayListHead++, gTextureBalloon1, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); gSPVertex(gDisplayListHead++, gBalloonVertexPlane1, 4, 0); gSPDisplayList(gDisplayListHead++, common_square_plain_render); gDPLoadTextureBlock(gDisplayListHead++, gTextureBalloon2, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, @@ -6199,13 +6201,14 @@ void render_balloon(Vec3f arg0, f32 arg1, s16 arg2, s16 arg3) { gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); func_8004B614(primRed, primGreen, primBlue, envRed, envGreen, envBlue, 0x000000D8); gDPSetRenderMode(gDisplayListHead++, - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | - GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); - gDPLoadTextureBlock(gDisplayListHead++, gTextureBalloon1, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, - G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(gDisplayListHead++, gTextureBalloon1, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); gSPVertex(gDisplayListHead++, gBalloonVertexPlane1, 4, 0); gSPDisplayList(gDisplayListHead++, common_square_plain_render); // D_8018D4C0 is correct. But interestingly, IDO seems to set "-0x40" to a different register so the texture still diff --git a/src/menu_items.c b/src/menu_items.c index 4ac0a30fe..b6d1f168f 100644 --- a/src/menu_items.c +++ b/src/menu_items.c @@ -863,11 +863,14 @@ MenuTexture* D_800E8234[] = { }; MenuTexture* D_800E8254[] = { - seg2_game_select_texture, seg2_menu_1p_column, seg2_menu_2p_column, seg2_menu_3p_column, - seg2_menu_4p_column, D_0200487C, D_020048A4, D_020048CC, -}; - -MenuTexture* D_800E8274[] = { + seg2_game_select_texture, + seg2_menu_1p_column, + seg2_menu_2p_column, + seg2_menu_3p_column, + seg2_menu_4p_column, + D_0200487C, + D_020048A4, + D_020048CC, // CC textures seg2_50_CC_texture, seg2_100_CC_texture, @@ -2694,194 +2697,31 @@ func_80095BD0_label2: } // Player select menu character border -Gfx* func_80095E10(Gfx* displayListHead, s8 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, - s32 arg9, u8* argA, u32 argB, u32 argC) { - u32 var_a1_2 = arg4; - u32 var_s3 = arg5; - s32 sp7C; - u32 var_s2; - u32 var_s4; - s32 var_t0 = 1; - s32 temp_lo; - s32 sp68 = 0; - s32 sp64 = 0; - s32 var_v0_2; - - while ((u32) var_t0 < argB) { - var_t0 *= 2; - } - - temp_lo = 0x400 / var_t0; - - while ((u32) (temp_lo / 2) > argC) { - temp_lo /= 2; - } - - var_v0_2 = var_t0; - while (var_v0_2 > 1) { - var_v0_2 /= 2; - sp68 += 1; - } - var_v0_2 = temp_lo; - - while (var_v0_2 > 1) { - var_v0_2 /= 2; - sp64 += 1; - } - - if (arg8 < 0) { - arg4 -= arg8; - arg8 = 0; - } else if (((arg6 - arg4) + arg8) > SCREEN_WIDTH) { - arg6 = (arg4 - arg8) + SCREEN_WIDTH; - } - - if (arg9 < 0) { - arg5 -= arg9; - arg9 = 0; - } else if (((arg7 - arg5) + arg9) > SCREEN_HEIGHT) { - arg7 = (arg5 - arg9) + SCREEN_HEIGHT; - } - - if (arg6 < arg4) { - return displayListHead; - } - if (arg7 < arg5) { - return displayListHead; - } - sp7C = arg8; - for (var_s3 = arg5; var_s3 < arg7; var_s3 += temp_lo) { - - if (arg7 < temp_lo + var_s3) { - var_s4 = arg7 - var_s3; - if (!var_s4) { - break; - } - } else { - var_s4 = temp_lo; - } - - for (var_a1_2 = arg4; var_a1_2 < (u32) arg6; var_a1_2 += var_t0) { - - if ((u32) arg6 < var_t0 + var_a1_2) { - var_s2 = arg6 - var_a1_2; - if (!var_s2) { - break; - } - } else { - var_s2 = var_t0; - } - gMKLoadTextureTile(displayListHead++, argA, arg1, G_IM_SIZ_16b, argB, 0, var_a1_2, var_s3, - var_a1_2 + var_s2, var_s3 + var_s4, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, sp68, sp64, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, arg8 * 4, arg9 * 4, (arg8 + var_s2) * 4, (arg9 + var_s4) * 4, 0, - (var_a1_2 * 32) & 0xFFFF, (var_s3 * 32) & 0xFFFF, arg2, arg3); - - arg8 += var_t0; - } - - arg8 = sp7C; - arg9 += temp_lo; - } +Gfx* func_80095E10(Gfx* displayListHead, s8 textureFormat, s32 texScaleS, s32 texScaleT, s32 srcX, s32 srcY, + s32 srcWidth, s32 srcHeight, s32 screenX, s32 screenY, u8* textureData, u32 texWidth, + u32 texHeight) { + s32 textureWidth = srcWidth; + s32 textureHeight = srcHeight; + gMKLoadTextureTile(displayListHead++, textureData, textureFormat, G_IM_SIZ_16b, texWidth, 0, srcX, srcY, + srcX + textureWidth, srcY + textureHeight, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 0, 0, G_TX_NOLOD, G_TX_NOLOD); + gSPWideTextureRectangle(displayListHead++, screenX << 2, screenY << 2, (screenX + textureWidth) << 2, + (screenY + textureHeight) << 2, G_TX_RENDERTILE, 0, 0, texScaleS, texScaleT); return displayListHead; } -Gfx* func_800963F0(Gfx* displayListHead, s8 arg1, s32 arg2, s32 arg3, f32 arg4, f32 arg5, s32 arg6, s32 arg7, s32 arg8, - s32 arg9, s32 argA, s32 argB, u8* argC, u32 argD, u32 argE) { - u32 var_a1_2 = arg6; - u32 var_s3 = arg7; - s32 sp7C; - u32 var_s2; - u32 var_s4; - u32 a; - u32 b; - s32 var_t0 = 1; - s32 temp_lo; - s32 sp68 = 0; - s32 sp64 = 0; - s32 var_v0_2; - - while ((u32) var_t0 < argD) { - var_t0 *= 2; - } - - temp_lo = 0x400 / var_t0; - - while ((u32) (temp_lo / 2) > argE) { - temp_lo /= 2; - } - - var_v0_2 = var_t0; - while (var_v0_2 > 1) { - var_v0_2 /= 2; - sp68 += 1; - } - var_v0_2 = temp_lo; - - while (var_v0_2 > 1) { - var_v0_2 /= 2; - sp64 += 1; - } - - if (argA < 0) { - arg6 -= argA; - argA = 0; - } else if ((argA + (arg8 - arg6) * arg4) > SCREEN_WIDTH) { - arg8 -= argA + (arg8 - arg6) * arg4 - SCREEN_WIDTH; - } - - if (argB < 0) { - arg7 -= argB; - argB = 0; - } else if ((argB + (arg9 - arg7) * arg5) > SCREEN_HEIGHT) { - arg9 -= argB + (arg9 - arg7) * arg5 - SCREEN_HEIGHT; - } - - if (arg8 < arg6) { - return displayListHead; - } - if (arg9 < arg7) { - return displayListHead; - } - arg2 /= arg4; - arg3 /= arg5; - - sp7C = argA; - for (var_s3 = arg7; var_s3 < (u32) arg9; var_s3 += temp_lo) { - - if ((u32) arg9 < temp_lo + var_s3) { - var_s4 = arg9 - var_s3; - if (!var_s4) { - break; - } - } else { - var_s4 = temp_lo; - } - b = var_s4 * arg5; - for (var_a1_2 = arg6; var_a1_2 < (u32) arg8; var_a1_2 += var_t0) { - - if ((u32) arg8 < var_t0 + var_a1_2) { - var_s2 = arg8 - var_a1_2; - if (!var_s2) { - break; - } - } else { - var_s2 = var_t0; - } - a = var_s2 * arg4; - - gMKLoadTextureTile(displayListHead++, argC, arg1, G_IM_SIZ_16b, argD, argE, var_a1_2, var_s3, - var_a1_2 + var_s2, var_s3 + var_s4, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, sp68, sp64, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, argA * 4, argB * 4, (argA + a) * 4, (argB + b) * 4, 0, - (var_a1_2 * 32) & 0xFFFF, (var_s3 * 32) & 0xFFFF, arg2, arg3); - - argA += var_t0 * arg4; - } - - argA = sp7C; - argB += temp_lo * arg5; - } +Gfx* func_800963F0(Gfx* displayListHead, s8 textureFormat, s32 texScaleS, s32 texScaleT, f32 scaleX, f32 scaleY, + s32 srcX, s32 srcY, s32 srcHeight, s32 srcWidth, s32 screenX, s32 screenY, u8* textureData, + u32 height, u32 width) { + gMKLoadTextureTile(displayListHead++, textureData, textureFormat, G_IM_SIZ_16b, height, width, srcX, srcY, + srcX + srcHeight, srcY + srcWidth, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, + G_TX_NOLOD, G_TX_NOLOD); + f32 percentScaleX = 1.0f / ((f32) texScaleS / 1024.0f); + f32 percentScaleY = 1.0f / ((f32) texScaleT / 1024.0f); + gSPWideTextureRectangle(displayListHead++, screenX << 2, screenY << 2, + (screenX + (s32) ((f32) height * scaleX)) << 2, + (screenY + (s32) ((f32) width * scaleY)) << 2, 0, 0, 0, + (1.0f / (scaleX * percentScaleX) * 1024.0f), (1.0f / (scaleY * percentScaleY) * 1024.0f)); return displayListHead; } @@ -3116,88 +2956,28 @@ Gfx* func_80097A14(Gfx* displayListHead, s8 arg1, s32 arg2, s32 arg3, s32 arg4, return displayListHead; } -Gfx* func_80097AE4(Gfx* displayListHead, s8 fmt, s32 arg2, s32 arg3, u8* arg4, s32 width) { - s32 i; - s32 temp; - s32 arg2Copy; - s32 dsdx; - - if (width >= 32) { - return displayListHead; - } - - arg2Copy = arg2; - - for (i = 0; i < 64; i += 32) { - temp = 0; - dsdx = 0x8000 / (32 - width); - gMKLoadTextureTile(displayListHead++, arg4, fmt, G_IM_SIZ_16b, 64, 64, temp, i, temp + 32, i + 32, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, (arg2 + width) << 2, arg3 << 2, (arg2 + 32) << 2, (arg3 + 32) << 2, 0, 0, - 0, dsdx, 1024); - - arg2 += 32; - - gMKLoadTextureTile(displayListHead++, arg4, fmt, G_IM_SIZ_16b, 64, 64, temp + 32, i, temp + 64, i + 32, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, arg2 << 2, arg3 << 2, ((arg2 - width) + 32) << 2, (arg3 + 32) << 2, 0, 0, - 0, dsdx, 1024); - - arg2 = arg2Copy; - arg3 += 32; - } +Gfx* func_80097AE4(Gfx* displayListHead, s8 textureFormat, s32 destX, s32 destY, u8* textureData, s32 sourceWidth) { + gMKLoadTextureTile(displayListHead++, textureData, textureFormat, G_IM_SIZ_16b, 64, 64, 0, 0, sourceWidth, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + gSPWideTextureRectangle(displayListHead++, destX << 2, destY << 2, (destX + sourceWidth) << 2, (destY + 64) << 2, 0, + 0, 0, 1024, 1024); return displayListHead; } // Render player characters at player select menu -Gfx* func_80097E58(Gfx* displayListHead, s8 fmt, u32 arg2, u32 arg3, u32 arg4, u32 arg5, s32 arg6, s32 arg7, - u8* someTexture, u32 arg9, u32 argA, s32 width) { - u32 ult; - u32 temp; - s32 arg6Copy; - s32 temp_v1; - s32 var_s2; - s32 lrs; - s32 spDC; - s32 temp2 = 32; - +Gfx* func_80097E58(Gfx* displayListHead, s8 textureFormat, u32 uls, u32 ult, u32 lrs, u32 lrt, s32 screenX, s32 screenY, + u8* textureData, u32 textureWidth, u32 textureHeight, s32 width) { if (width >= 32) { return displayListHead; } - - arg6Copy = arg6; - - lrs = arg9 / 2; - spDC = arg9 - lrs; - for (ult = arg3; ult < arg5; ult += 32) { - temp = 0; - if ((ult + temp2) > arg5) { - var_s2 = arg5 - ult; - if (!var_s2) { - break; - } - } else { - var_s2 = temp2; - } - temp_v1 = ((32 * lrs) << 10) / (lrs * (32 - width)); - - // Renders the left side - gMKLoadTextureTile(displayListHead++, someTexture, fmt, G_IM_SIZ_16b, arg9, argA, temp, ult, temp + lrs, - ult + var_s2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, - G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, (arg6 + lrs * (width) / 32) << 2, arg7 << 2, (((arg6) + lrs) << 2), - (((arg7) + var_s2) << 2), 0, 0, (ult << 5) & 0xFFFF, temp_v1, 1024); - arg6 += lrs; - temp_v1 = ((32 * spDC) << 10) / (spDC * (32 - width)); - // Renders the right side - gMKLoadTextureTile(displayListHead++, someTexture, fmt, G_IM_SIZ_16b, arg9, argA, temp + lrs, ult, temp + arg9, - ult + var_s2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, - G_TX_NOLOD); - gSPTextureRectangle(displayListHead++, arg6 << 2, arg7 << 2, ((arg6 + spDC * (32 - (width)) / 32) << 2), - (((arg7) + var_s2) << 2), 0, (1 + lrs << 5) & 0xFFFF, (ult << 5) & 0xFFFF, temp_v1, 1024); - arg6 = arg6Copy; - arg7 += temp2; - } + f32 percent = (f32) (32 - width) / 32.0f; + gMKLoadTextureTile(displayListHead++, textureData, textureFormat, G_IM_SIZ_16b, textureWidth, textureHeight, uls, + ult, lrs, lrt, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, + G_TX_NOLOD); + screenX += (s32) ((f32) (textureWidth / 2) * (1.0f - percent)); + gSPWideTextureRectangle(displayListHead++, (screenX) << 2, screenY << 2, + (screenX + (s32) ((f32) textureWidth * percent)) << 2, (screenY + textureHeight) << 2, 0, 0, + (ult << 5) & 0xFFFF, (s32) (1.0f / percent * 1024.0f), 1024); return displayListHead; } @@ -3261,12 +3041,12 @@ Gfx* func_800987D0(Gfx* displayListHead, u32 arg1, u32 arg2, u32 width, u32 heig /** * Draw a box filled with a solid color - * + * * Renders - * + * * Menus: Black box behind textures such as: "1P Game, 2P Game, Mario GP, 50CC, OK, etc." - * - * + * + * */ Gfx* draw_box_fill(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, s32 red, s32 green, s32 blue, s32 alpha) { red &= 0xFF; @@ -3309,13 +3089,13 @@ Gfx* draw_box_fill(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, s32 /** * Draw a box filled with a solid color - * + * * Renders - * + * * All game modes: * Cinematic borders - * - * + * + * */ Gfx* draw_box_fill_wide(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, s32 red, s32 green, s32 blue, s32 alpha) { @@ -3359,9 +3139,9 @@ Gfx* draw_box_fill_wide(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry /** * Draw a box with a solid outline - * + * * Menus best lap time at start menu - * + * */ Gfx* draw_box(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, u32 green, u32 blue, u32 alpha) { red &= 0xFF; @@ -3401,12 +3181,12 @@ Gfx* draw_box(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, /** * Renders - * + * * Menus: Menu transition swipes, course label highlight - * + * * All game modes: Background cover at pause screen - * - * + * + * */ Gfx* draw_box_wide(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, u32 green, u32 blue, u32 alpha) { red &= 0xFF; @@ -3446,7 +3226,8 @@ Gfx* draw_box_wide(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 } // Renders pause background -Gfx* draw_box_wide_pause_background(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, u32 green, u32 blue, u32 alpha) { +Gfx* draw_box_wide_pause_background(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, u32 green, + u32 blue, u32 alpha) { red &= 0xFF; green &= 0xFF; blue &= 0xFF; @@ -3479,8 +3260,7 @@ Gfx* draw_box_wide_pause_background(Gfx* displayListHead, s32 ulx, s32 uly, s32 // } gSPDisplayList(displayListHead++, D_02008008); gDPSetPrimColor(displayListHead++, 0, 0, red, green, blue, alpha); - gDPFillWideRectangle(displayListHead++, ulx, uly, - lrx, lry); + gDPFillWideRectangle(displayListHead++, ulx, uly, lrx, lry); gDPPipeSync(displayListHead++); return displayListHead; } @@ -4398,14 +4178,12 @@ Gfx* func_8009B9D0(Gfx* displayListHead, MenuTexture* textures) { } Gfx* render_menu_textures(Gfx* arg0, MenuTexture* arg1, s32 column, s32 row) { - MenuTexture* temp_v0; u8* temp_v0_3; s8 var_s4; - temp_v0 = segmented_to_virtual_dupe(arg1); - while (temp_v0->textureData != NULL) { + while (arg1->textureData != NULL) { var_s4 = 0; - switch (temp_v0->type) { + switch (arg1->type) { case 0: gSPDisplayList(arg0++, D_02007708); break; @@ -4426,18 +4204,17 @@ Gfx* render_menu_textures(Gfx* arg0, MenuTexture* arg1, s32 column, s32 row) { gSPDisplayList(arg0++, D_02007728); break; } - temp_v0_3 = (u8*) func_8009B8C4(temp_v0->textureData); + temp_v0_3 = (u8*) func_8009B8C4(arg1->textureData); if (temp_v0_3 != 0) { if (D_8018E7AC[4] != 4) { - arg0 = - func_80095E10(arg0, var_s4, 0x00000400, 0x00000400, 0, 0, temp_v0->width, temp_v0->height, - temp_v0->dX + column, temp_v0->dY + row, temp_v0_3, temp_v0->width, temp_v0->height); + arg0 = func_80095E10(arg0, var_s4, 0x00000400, 0x00000400, 0, 0, arg1->width, arg1->height, + arg1->dX + column, arg1->dY + row, temp_v0_3, arg1->width, arg1->height); } else { - arg0 = func_800987D0(arg0, 0U, 0U, temp_v0->width, temp_v0->height, temp_v0->dX + column, - temp_v0->dY + row, temp_v0_3, temp_v0->width, temp_v0->height); + arg0 = func_800987D0(arg0, 0U, 0U, arg1->width, arg1->height, arg1->dX + column, arg1->dY + row, + temp_v0_3, arg1->width, arg1->height); } } - temp_v0++; + arg1++; } return arg0; } @@ -5664,7 +5441,8 @@ void add_menu_item(s32 type, s32 column, s32 row, s8 priority) { case 0x17: case MAIN_MENU_TIME_TRIALS_BEGIN: case MAIN_MENU_TIME_TRIALS_DATA: - load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E8274[type - 0x12]), LOAD_MENU_IMG_TKMK00_ONCE); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E8254[type - MENU_ITEM_UI_GAME_SELECT]), + LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_UI_1P_GAME: case MENU_ITEM_UI_2P_GAME: @@ -7857,37 +7635,38 @@ void render_pause_menu_versus(MenuItem* arg0) { temp_t3 = temp_v0->screenWidth / 2; temp_t4 = temp_v0->screenHeight / 2; - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: leftEdge = OTRGetDimensionFromLeftEdge(0); rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); + gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); break; case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: leftEdge = OTRGetDimensionFromLeftEdge(0); rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, leftEdge + rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); + gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, + leftEdge + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); break; case SCREEN_MODE_3P_4P_SPLITSCREEN: // Left side players if ((temp_v0->player == gPlayerOne) || (temp_v0->player == gPlayerThree)) { leftEdge = OTRGetDimensionFromLeftEdge(0); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - temp_t3, temp_t0 - temp_t4, temp_v1 + temp_t3, - temp_t0 + temp_t4, 0, 0, 0, 140); + gDisplayListHead = + draw_box_wide_pause_background(gDisplayListHead, leftEdge - temp_t3, temp_t0 - temp_t4, + temp_v1 + temp_t3, temp_t0 + temp_t4, 0, 0, 0, 140); - // Right side players + // Right side players } else if ((temp_v0->player == gPlayerTwo) || (temp_v0->player == gPlayerFour)) { rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, temp_v1 + rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); - + gDisplayListHead = + draw_box_wide_pause_background(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, + temp_v1 + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); } break; default: gDisplayListHead = draw_box(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, temp_v1 + temp_t3, - temp_t0 + temp_t4, 0, 0, 0, 140); + temp_t0 + temp_t4, 0, 0, 0, 140); break; } @@ -7921,21 +7700,21 @@ void render_pause_grand_prix(MenuItem* arg0) { temp_t3 = temp_v0->screenWidth / 2; temp_t4 = temp_v0->screenHeight / 2; - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_1P: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: gDisplayListHead = draw_box_wide(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, temp_v1 + temp_t3, - temp_t0 + temp_t4, 0, 0, 0, 140); + temp_t0 + temp_t4, 0, 0, 0, 140); break; case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: s32 leftEdge = OTRGetDimensionFromLeftEdge(0); s32 rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, leftEdge + rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); - break; + gDisplayListHead = draw_box_wide(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, + leftEdge + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); + break; default: gDisplayListHead = draw_box(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, temp_v1 + temp_t3, - temp_t0 + temp_t4, 0, 0, 0, 140); + temp_t0 + temp_t4, 0, 0, 0, 140); break; } @@ -7972,37 +7751,38 @@ void render_pause_battle(MenuItem* arg0) { temp_t3 = temp_v0->screenWidth / 2; temp_t4 = temp_v0->screenHeight / 2; - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: leftEdge = OTRGetDimensionFromLeftEdge(0); rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); + gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); break; case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: leftEdge = OTRGetDimensionFromLeftEdge(0); rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); + gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - rightEdge, temp_t0 - temp_t4, + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); break; case SCREEN_MODE_3P_4P_SPLITSCREEN: // Left side players if ((temp_v0->player == gPlayerOne) || (temp_v0->player == gPlayerThree)) { leftEdge = OTRGetDimensionFromLeftEdge(0); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, leftEdge - temp_t3, temp_t0 - temp_t4, temp_v1 + temp_t3, - temp_t0 + temp_t4, 0, 0, 0, 140); + gDisplayListHead = + draw_box_wide_pause_background(gDisplayListHead, leftEdge - temp_t3, temp_t0 - temp_t4, + temp_v1 + temp_t3, temp_t0 + temp_t4, 0, 0, 0, 140); - // Right side players + // Right side players } else if ((temp_v0->player == gPlayerTwo) || (temp_v0->player == gPlayerFour)) { rightEdge = OTRGetDimensionFromRightEdge(SCREEN_WIDTH); - gDisplayListHead = draw_box_wide_pause_background(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, temp_v1 + rightEdge, - temp_t0 + temp_t4, 0, 0, 0, 140); - + gDisplayListHead = + draw_box_wide_pause_background(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, + temp_v1 + rightEdge, temp_t0 + temp_t4, 0, 0, 0, 140); } break; default: gDisplayListHead = draw_box(gDisplayListHead, temp_v1 - temp_t3, temp_t0 - temp_t4, temp_v1 + temp_t3, - temp_t0 + temp_t4, 0, 0, 0, 140); + temp_t0 + temp_t4, 0, 0, 0, 140); break; } diff --git a/src/networking/networking.h b/src/networking/networking.h index 2a7634d66..74c1a2301 100644 --- a/src/networking/networking.h +++ b/src/networking/networking.h @@ -67,7 +67,7 @@ void networking_disconnect(void); /* Start Game */ void spawn_network_players(f32*, f32*, f32); -s32 network_all_players_loaded(void); +void network_all_players_loaded(void); void set_course(const char* data); void networking_start_session(const char* data); diff --git a/src/networking/start_game.c b/src/networking/start_game.c index 4c0f3568b..6fb0321c9 100644 --- a/src/networking/start_game.c +++ b/src/networking/start_game.c @@ -53,7 +53,7 @@ void network_cup_vote(uint32_t course) { void set_course(const char* data) { if (data != NULL) { - //SetCup(data[0]); + // SetCup(data[0]); gCupSelection = data[0]; // gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE]; //! @todo SetCourse(); @@ -135,7 +135,7 @@ void networking_start_session(const char* data) { } // Wait for all players to load -s32 network_all_players_loaded() { +void network_all_players_loaded() { if (gNetwork.gameStarted) { return; } diff --git a/src/port/Engine.h b/src/port/Engine.h index 4840a437f..aab8cb8d0 100644 --- a/src/port/Engine.h +++ b/src/port/Engine.h @@ -83,4 +83,5 @@ uint32_t OTRCalculateCenterOfAreaFromRightEdge(int32_t center); uint32_t OTRCalculateCenterOfAreaFromLeftEdge(int32_t center); #ifdef __cplusplus } -#endif \ No newline at end of file +#endif + diff --git a/src/racing/memory.c b/src/racing/memory.c index ac16e7b51..d54915a3d 100644 --- a/src/racing/memory.c +++ b/src/racing/memory.c @@ -505,7 +505,7 @@ u8* dma_textures(const char* texture, size_t arg1, size_t arg2) { gNextFreeMemoryAddress += arg2; #else memcpy(temp_v0, tex, arg2); - //strcpy(temp_v0, texture); + // strcpy(temp_v0, texture); #endif return temp_v0; } @@ -823,7 +823,7 @@ void unpack_tile_sync(Gfx* gfx, u8* args, s8 opcode) { } uintptr_t get_texture(size_t offset) { - course_texture *textures = CourseManager_GetProps()->textures; + course_texture* textures = CourseManager_GetProps()->textures; size_t totalOffset = 0; while (textures->addr) { @@ -1456,7 +1456,7 @@ void decompress_textures(u32* arg0) { } void* decompress_segments(u8* start, u8* end) { - return; + return NULL; UNUSED u32 pad; u32 sp28; u32 size = ALIGN16(end - start); diff --git a/src/render_objects.c b/src/render_objects.c index d6d6b6a27..769d1b2f6 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -511,7 +511,7 @@ void func_800462A8(u8* texture, Vtx* arg1, s32 width, s32 arg3, s32 height) { void func_800463B0(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8* texture, Vtx* arg5, s32 arg6, s32 arg7, UNUSED s32 arg8, s32 arg9) { - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_1P: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: @@ -528,7 +528,7 @@ void func_800463B0(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8* texture, Vtx* arg void func_80046424(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8* texture, Vtx* arg5, s32 arg6, s32 arg7, UNUSED s32 arg8, s32 arg9) { - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_1P: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: @@ -1558,12 +1558,12 @@ void func_8004B72C(s32 primRed, s32 primGreen, s32 primBlue, s32 envRed, s32 env /** * Renders - * + * * Menus: Mario Kart 64 Logo, Debug text - * + * * 1P: Coloured square in third hud mode that players go around. - * - * + * + * */ void render_texture_rectangle(s32 x, s32 y, s32 width, s32 height, s32 s, s32 w, s32 mode) { @@ -1578,23 +1578,21 @@ void render_texture_rectangle(s32 x, s32 y, s32 width, s32 height, s32 s, s32 w, // If no cycle mode is set, render texture rectangle in copy mode if (mode == 0) { //! @todo Update to F3DEX. Uses OLD definition for gspTextureRectangle. - gSPTextureRectangle(gDisplayListHead++, xl, yl, xh, yh, G_TX_RENDERTILE, s << 5, (w << 5), 4 << 10, - 1 << 10); + gSPTextureRectangle(gDisplayListHead++, xl, yl, xh, yh, G_TX_RENDERTILE, s << 5, (w << 5), 4 << 10, 1 << 10); return; } // Render texture rectangle in default cycle mode (1 cycle or 2 cycle) - gSPTextureRectangle(gDisplayListHead++, xl, yl, xh2, yh2, G_TX_RENDERTILE, s << 5, (w << 5), 1 << 10, - 1 << 10); + gSPTextureRectangle(gDisplayListHead++, xl, yl, xh2, yh2, G_TX_RENDERTILE, s << 5, (w << 5), 1 << 10, 1 << 10); } /** * Renders - * + * * For all game modes - * + * * Minimap, CurrLap, Lap time - * - * + * + * */ void render_texture_rectangle_wide(s32 x, s32 y, s32 width, s32 height, s32 arg4, s32 arg5, s32 arg6) { @@ -1613,66 +1611,64 @@ void render_texture_rectangle_wide(s32 x, s32 y, s32 width, s32 height, s32 arg4 s32 coordX2 = 0; if (arg6 == 0) { - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_1P: case SCREEN_MODE_3P_4P_SPLITSCREEN: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: if ((xl - (width / 2)) < (SCREEN_WIDTH / 2)) { - coordX = (s32)OTRGetDimensionFromLeftEdge(xl) << 2; - coordX2 = (s32)(xh) << 2; + coordX = (s32) OTRGetDimensionFromLeftEdge(xl) << 2; + coordX2 = (s32) (xh) << 2; } else { - coordX = (s32)OTRGetDimensionFromRightEdge(xl) << 2; - coordX2 = (s32)OTRGetDimensionFromRightEdge(xh) << 2; + coordX = (s32) OTRGetDimensionFromRightEdge(xl) << 2; + coordX2 = (s32) OTRGetDimensionFromRightEdge(xh) << 2; } //! @todo Update to F3DEX. Uses OLD definition for gspTextureRectangle. - gSPWideTextureRectangle(gDisplayListHead++, coordX, yl, coordX2, yh, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 4 << 10, - 1 << 10); + gSPWideTextureRectangle(gDisplayListHead++, coordX, yl, coordX2, yh, G_TX_RENDERTILE, arg4 << 5, + (arg5 << 5), 4 << 10, 1 << 10); break; case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: - gSPTextureRectangle(gDisplayListHead++, xl << 2, yl, xh << 2, yh2, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 1 << 10, - 1 << 10); + gSPTextureRectangle(gDisplayListHead++, xl << 2, yl, xh << 2, yh2, G_TX_RENDERTILE, arg4 << 5, + (arg5 << 5), 1 << 10, 1 << 10); break; } -//OTRGetDimensionFromLeftEdge - //gSPTextureRectangle(gDisplayListHead++, xl, yl, xh, yh, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 4 << 10, - // 1 << 10); + // OTRGetDimensionFromLeftEdge + // gSPTextureRectangle(gDisplayListHead++, xl, yl, xh, yh, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 4 << 10, + // 1 << 10); } else { // minimap - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_3P_4P_SPLITSCREEN: if (gPlayerCount == 3) { // Center item in area of screen - s32 center = (s32)((OTRGetDimensionFromRightEdge(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); + s32 center = (s32) ((OTRGetDimensionFromRightEdge(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); + 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: if ((xl - (width / 2)) < (SCREEN_WIDTH / 2)) { - coordX = (s32)OTRGetDimensionFromLeftEdge(xl) << 2; - coordX2 = (s32)(xh2) << 2; + coordX = (s32) OTRGetDimensionFromLeftEdge(xl) << 2; + coordX2 = (s32) (xh2) << 2; } else { - coordX = (s32)OTRGetDimensionFromRightEdge(xl) << 2; - coordX2 = (s32)OTRGetDimensionFromRightEdge(xh2) << 2; + coordX = (s32) OTRGetDimensionFromRightEdge(xl) << 2; + coordX2 = (s32) OTRGetDimensionFromRightEdge(xh2) << 2; } - gSPWideTextureRectangle(gDisplayListHead++, coordX, yl, - coordX2, yh2, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 1 << 10, - 1 << 10); + 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); + // 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) { @@ -1813,7 +1809,7 @@ void func_8004BA98_wide(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 ar phi_a3 = arg3 + arg1; } - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_1P: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: render_texture_rectangle_wide(sp34, sp30, sp2C, phi_a3, phi_v0, phi_v1, arg6); @@ -1986,37 +1982,20 @@ void render_texture_tile_rgba32_block(s16 x, s16 y, u8* texture, u32 width, u32 gSPDisplayList(gDisplayListHead++, D_0D007EF8); gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - - size = width * height * 4; - numTiles = size / 4096; - if (size % 4096) { - numTiles++; - } - - tileHeight = height / numTiles; - - numTilesDup = numTiles; - for (size_t i = 0; i < numTilesDup; i++) { - load_texture_tile_rgba32_nomirror(texture, width, tileHeight); - render_texture_rectangle_wrap(currX, currY, width, tileHeight, 1); - - texture += (width * tileHeight * 4); - remainingSize = size - (width * tileHeight * 4); - if (remainingSize < 0) { - tileHeight = size / width; - } else { - size -= (width * tileHeight * 4); - } - // Weird fakematch that is a HUGE improvement - currX += currY * 0; - currY += tileHeight; - } + + gMKLoadTextureTile(gDisplayListHead++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, width, height, 0, 0, width - 1, + height - 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPWideTextureRectangle(gDisplayListHead++, currX * 4, currY * 4, ((x + width) << 2), ((y + height) << 2), + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); gSPDisplayList(gDisplayListHead++, D_0D007EB8); } void render_game_logo(s16 x, s16 y) { - render_texture_tile_rgba32_block(x, y, LOAD_ASSET(gTextureLogoMarioKart64), ResourceGetTexWidthByName(gTextureLogoMarioKart64), ResourceGetTexHeightByName(gTextureLogoMarioKart64)); + render_texture_tile_rgba32_block(x, y, LOAD_ASSET(gTextureLogoMarioKart64), + ResourceGetTexWidthByName(gTextureLogoMarioKart64), + ResourceGetTexHeightByName(gTextureLogoMarioKart64)); } UNUSED void func_8004C91C(s32 arg0, s32 arg1, u8* texture, s32 arg3, s32 arg4, s32 arg5) { @@ -2040,7 +2019,7 @@ void func_8004CA58(s32 arg0, s32 arg1, f32 arg2, u8* texture, s32 arg4, s32 arg5 } void draw_hud_2d_texture_8x8(s32 x, s32 y, u8* texture) { - switch(gScreenModeSelection) { + switch (gScreenModeSelection) { case SCREEN_MODE_1P: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: @@ -2558,8 +2537,7 @@ void draw_simplified_lap_count(s32 playerId) { draw_hud_2d_texture_32x8((s32) playerHUD[playerId].lapX, playerHUD[playerId].lapY + 3, (u8*) common_texture_hud_lap); draw_hud_2d_texture_32x16(playerHUD[playerId].lapX + 0x1C, (s32) playerHUD[playerId].lapY, - (u8*) gHudLapTextures[playerHUD[playerId].alsoLapCount]); - + (u8*) gHudLapTextures[playerHUD[playerId].alsoLapCount]); } void func_8004E800(s32 playerId) { @@ -2639,13 +2617,13 @@ void func_8004ED40(s32 arg0) { void func_8004EE54(s32 arg0) { if (gIsMirrorMode != 0) { - func_8004D4E8(D_8018D2C0[arg0], D_8018D2D8[arg0], (u8*) D_8018D240, (s32) D_8018D300, - (s32) D_8018D308, (s32) D_8018D310, 0x000000FF, (s32) gMinimapWidth, (s32) gMinimapHeight, - (s32) gMinimapWidth, (s32) gMinimapHeight); + func_8004D4E8(D_8018D2C0[arg0], D_8018D2D8[arg0], (u8*) D_8018D240, (s32) D_8018D300, (s32) D_8018D308, + (s32) D_8018D310, 0x000000FF, (s32) gMinimapWidth, (s32) gMinimapHeight, (s32) gMinimapWidth, + (s32) gMinimapHeight); } else { - func_8004D37C(D_8018D2C0[arg0], D_8018D2D8[arg0], (u8*) D_8018D240, (s32) D_8018D300, - (s32) D_8018D308, (s32) D_8018D310, 0x000000FF, (s32) gMinimapWidth, (s32) gMinimapHeight, - (s32) gMinimapWidth, (s32) gMinimapHeight); + func_8004D37C(D_8018D2C0[arg0], D_8018D2D8[arg0], (u8*) D_8018D240, (s32) D_8018D300, (s32) D_8018D308, + (s32) D_8018D310, 0x000000FF, (s32) gMinimapWidth, (s32) gMinimapHeight, (s32) gMinimapWidth, + (s32) gMinimapHeight); } } @@ -2655,8 +2633,8 @@ void func_8004EF9C(s32 arg0) { temp_v0 = CourseManager_GetProps()->MinimapDimensions.X; temp_t0 = CourseManager_GetProps()->MinimapDimensions.Z; - func_8004D37C(0x00000104, 0x0000003C, CourseManager_GetProps()->MinimapTexture, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, temp_v0, - temp_t0, temp_v0, temp_t0); + func_8004D37C(0x00000104, 0x0000003C, CourseManager_GetProps()->MinimapTexture, 0x000000FF, 0x000000FF, 0x000000FF, + 0x000000FF, temp_v0, temp_t0, temp_v0, temp_t0); } void set_minimap_finishline_position(s32 arg0) { @@ -2664,15 +2642,16 @@ void set_minimap_finishline_position(s32 arg0) { f32 var_f2; s32 center = 0; -//! @todo: Hardcode these x and y values. Because why not? + //! @todo: Hardcode these x and y values. Because why not? if (gPlayerCount == 3) { - center = ((OTRGetDimensionFromRightEdge(SCREEN_WIDTH) - SCREEN_WIDTH) / 2) + ((SCREEN_WIDTH / 4) + (SCREEN_WIDTH / 2)); + center = ((OTRGetDimensionFromRightEdge(SCREEN_WIDTH) - SCREEN_WIDTH) / 2) + + ((SCREEN_WIDTH / 4) + (SCREEN_WIDTH / 2)); } else { center = D_8018D2C0[arg0]; } -//minimap center pos - minimap left edge + offset + // minimap center pos - minimap left edge + offset var_f2 = (center - (gMinimapWidth / 2)) + D_8018D2E0; var_f0 = (D_8018D2D8[arg0] - (gMinimapHeight / 2)) + D_8018D2E8; if (GetCourse() == GetMarioRaceway()) { @@ -2706,11 +2685,12 @@ void func_8004F168(s32 arg0, s32 playerId, s32 characterId) { thing0 = player->pos[0] * D_8018D2A0; thing1 = player->pos[2] * D_8018D2A0; - if (gPlayerCount == 3) { - center = ((OTRGetDimensionFromRightEdge(SCREEN_WIDTH) - SCREEN_WIDTH) / 2) + ((SCREEN_WIDTH / 4) + (SCREEN_WIDTH / 2)); - } else { - center = D_8018D2C0[arg0]; - } + if (gPlayerCount == 3) { + center = ((OTRGetDimensionFromRightEdge(SCREEN_WIDTH) - SCREEN_WIDTH) / 2) + + ((SCREEN_WIDTH / 4) + (SCREEN_WIDTH / 2)); + } else { + center = D_8018D2C0[arg0]; + } temp_a0 = (center - (gMinimapWidth / 2)) + D_8018D2E0 + (s16) (thing0); temp_a1 = (D_8018D2D8[arg0] - (gMinimapHeight / 2)) + D_8018D2E8 + (s16) (thing1); @@ -3265,9 +3245,9 @@ void func_80050E34(s32 playerId, s32 arg1) { gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_hud_type_C_rank_tiny_font); rsp_load_texture(common_texture_hud_type_C_rank_tiny_font[arg1 + 1], 8, 8); if (spB8 != 0) { - func_80042330_unchanged(spD0 + 0x26, (spC4 + spCC) + 4, 0U, 1.0f, lapCount); + func_80042330_unchanged(spD0 + 0x26, (spC4 + spCC) + 4, 0U, 1.0f); } else { - func_80042330_unchanged(spD0 + 0x1B, (spC4 + spCC) + 4, 0U, 1.0f, lapCount); + func_80042330_unchanged(spD0 + 0x1B, (spC4 + spCC) + 4, 0U, 1.0f); } gSPDisplayList(gDisplayListHead++, D_0D006950); if ((player == gPlayerOne) && (gScreenModeSelection == SCREEN_MODE_1P)) { @@ -3630,7 +3610,8 @@ void func_800528EC(s32 playerId) { objectIndex = gObjectParticle2[var_s3]; if (objectIndex != NULL_OBJECT_ID) { object = &gObjectList[objectIndex]; - if ((object->state > 0) && (playerId == object->unk_084[7]) && (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) { + if ((object->state > 0) && (playerId == object->unk_084[7]) && + (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) { rsp_set_matrix_transformation(object->pos, D_80183E80, object->sizeScaling); gSPVertex(gDisplayListHead++, D_0D005BD0, 3, 0); gSPDisplayList(gDisplayListHead++, D_0D006930); @@ -3718,10 +3699,11 @@ void render_balloons_grand_prix(s32 arg0) { gDPLoadTLUT_pal256(gDisplayListHead++, gTLUTOnomatopoeia); func_8004B614(0, 0, 0, 0, 0, 0, 0); gDPSetAlphaCompare(gDisplayListHead++, G_AC_THRESHOLD); - gDPSetRenderMode(gDisplayListHead++, AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | - GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), - AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); + gDPSetRenderMode(gDisplayListHead++, + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); D_80183E80[0] = 0; D_80183E80[1] = 0x8000; rsp_load_texture(gTextureBalloon1, 64, 32); @@ -4275,9 +4257,9 @@ void func_80056FCC(s32 bombIndex) { D_80183E50[1] = temp_v0->yPos + 1.0; D_80183E50[2] = temp_v0->bombPos[2]; set_transform_matrix(mat, gBombKartCollision[bombIndex].orientationVector, D_80183E50, 0U, 0.5f); - //convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mat); - //gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), - // G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW); + // convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mat); + // gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), + // G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW); AddHudMatrix(mat, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW); gSPDisplayList(gDisplayListHead++, D_0D007B98); } @@ -4357,7 +4339,8 @@ UNUSED void func_800573DC(void) { } void func_800573E4(s32 x, s32 y, s8 str) { - render_texture_rectangle(x, y, 8, 8, (((str % 16) * 8) << 16) >> 16, (((unsigned short) (str / 16)) << 19) >> 16, 0); + render_texture_rectangle(x, y, 8, 8, (((str % 16) * 8) << 16) >> 16, (((unsigned short) (str / 16)) << 19) >> 16, + 0); } void debug_wrap_text(s32* x, s32* y) { diff --git a/src/render_objects.h b/src/render_objects.h index f27730b6e..a4de1b5e7 100644 --- a/src/render_objects.h +++ b/src/render_objects.h @@ -217,6 +217,7 @@ void func_8004C024(s16, s16, s16, u16, u16, u16, u16); void func_8004C148(s16, s16, s16, u16, u16, u16, u16); void func_8004C354(void); void func_8004C35C(void); +void draw_hud_2d_texture(s32, s32, u32, u32, u8*); void draw_hud_2d_texture_wide(s32, s32, u32, u32, u8*); void func_8004C450(s32, s32, u32, u32, u8*); void func_8004C53C(s32, s32, u32, u32, u8*);