From 371fe069d856fcdd7199bccbcdfcfa1d79dbcf5a Mon Sep 17 00:00:00 2001 From: coco875 <59367621+coco875@users.noreply.github.com> Date: Sun, 30 Jun 2024 03:16:50 +0200 Subject: [PATCH 1/6] avoid ub on course segment --- src/code_800029B0.c | 98 ++-- src/ending/code_80281780.c | 54 +- src/racing/render_courses.c | 1085 ++++++++++++++++++++++++----------- 3 files changed, 858 insertions(+), 379 deletions(-) diff --git a/src/code_800029B0.c b/src/code_800029B0.c index 5459b09f4a..0bdf4d8ecf 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -311,12 +311,20 @@ void func_80003040(void) { spawn_foliage(d_course_mario_raceway_tree_spawns); break; case COURSE_BOWSER_CASTLE: - // d_course_bowsers_castle_packed_dl_1350 - find_vtx_and_set_colours(0x07001350, 0x32, 0, 0, 0); + #ifdef AVOID_UB + find_vtx_and_set_colours(d_course_bowsers_castle_packed_dl_1350, 0x32, 0, 0, 0); + #else + // d_course_bowsers_castle_packed_dl_1350 + find_vtx_and_set_colours(0x07001350, 0x32, 0, 0, 0); + #endif break; case COURSE_BANSHEE_BOARDWALK: - // d_course_banshee_boardwalk_packed_dl_878 - find_vtx_and_set_colours(0x07000878, -0x80, 0, 0, 0); + #ifdef AVOID_UB + find_vtx_and_set_colours(d_course_banshee_boardwalk_packed_dl_878, -0x80, 0, 0, 0); + #else + // d_course_banshee_boardwalk_packed_dl_878 + find_vtx_and_set_colours(0x07000878, -0x80, 0, 0, 0); + #endif break; case COURSE_YOSHI_VALLEY: vec3f_set(position, -2300.0f, 0.0f, 634.0f); @@ -339,18 +347,29 @@ void func_80003040(void) { spawn_foliage(d_course_moo_moo_farm_tree_spawn); break; case COURSE_SHERBET_LAND: - // d_course_sherbet_land_packed_dl_1EB8 - find_vtx_and_set_colours(0x07001EB8, -0x4C, 0xFF, 0xFF, 0xFF); - // d_course_sherbet_land_packed_dl_2308 - find_vtx_and_set_colours(0x07002308, -0x6A, 0xFF, 0xFF, 0xFF); + #ifdef AVOID_UB + find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_1EB8, -0x4C, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_2308, -0x6A, 0xFF, 0xFF, 0xFF); + #else + // d_course_sherbet_land_packed_dl_1EB8 + find_vtx_and_set_colours(0x07001EB8, -0x4C, 0xFF, 0xFF, 0xFF); + // d_course_sherbet_land_packed_dl_2308 + find_vtx_and_set_colours(0x07002308, -0x6A, 0xFF, 0xFF, 0xFF); + #endif break; case COURSE_RAINBOW_ROAD: - // d_course_rainbow_road_packed_dl_2068 - find_vtx_and_set_colours(0x07002068, -0x6A, 0xFF, 0xFF, 0xFF); - // d_course_rainbow_road_packed_dl_1E18 - find_vtx_and_set_colours(0x07001E18, -0x6A, 0xFF, 0xFF, 0xFF); - // d_course_rainbow_road_packed_dl_1318 - find_vtx_and_set_colours(0x07001318, -1, 0xFF, 0xFF, 0); + #ifdef AVOID_UB + find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_2068, -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1E18, -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1318, -1, 0xFF, 0xFF, 0); + #else + // d_course_rainbow_road_packed_dl_2068 + find_vtx_and_set_colours(0x07002068, -0x6A, 0xFF, 0xFF, 0xFF); + // d_course_rainbow_road_packed_dl_1E18 + find_vtx_and_set_colours(0x07001E18, -0x6A, 0xFF, 0xFF, 0xFF); + // d_course_rainbow_road_packed_dl_1318 + find_vtx_and_set_colours(0x07001318, -1, 0xFF, 0xFF, 0); + #endif break; case COURSE_WARIO_STADIUM: vec3f_set(position, -131.0f, 83.0f, 286.0f); @@ -359,26 +378,41 @@ void func_80003040(void) { add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); vec3f_set(position, -2622.0f, 79.0f, 739.0f); add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); - // d_course_wario_stadium_packed_dl_C50 - find_vtx_and_set_colours(0x07000C50, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_BD8 - find_vtx_and_set_colours(0x07000BD8, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_B60 - find_vtx_and_set_colours(0x07000B60, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_AE8 - find_vtx_and_set_colours(0x07000AE8, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_CC8 - find_vtx_and_set_colours(0x07000CC8, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_D50 - find_vtx_and_set_colours(0x07000D50, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_DD0 - find_vtx_and_set_colours(0x07000DD0, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_E48 - find_vtx_and_set_colours(0x07000E48, 0x64, 0xFF, 0xFF, 0xFF); + #ifdef AVOID_UB + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_C50, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_BD8, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_B60, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_AE8, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_CC8, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_D50, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_DD0, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_E48, 0x64, 0xFF, 0xFF, 0xFF); + #else + // d_course_wario_stadium_packed_dl_C50 + find_vtx_and_set_colours(0x07000C50, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_BD8 + find_vtx_and_set_colours(0x07000BD8, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_B60 + find_vtx_and_set_colours(0x07000B60, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_AE8 + find_vtx_and_set_colours(0x07000AE8, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_CC8 + find_vtx_and_set_colours(0x07000CC8, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_D50 + find_vtx_and_set_colours(0x07000D50, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_DD0 + find_vtx_and_set_colours(0x07000DD0, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_E48 + find_vtx_and_set_colours(0x07000E48, 0x64, 0xFF, 0xFF, 0xFF); + #endif break; case COURSE_DK_JUNGLE: - // d_course_dks_jungle_parkway_packed_dl_3FA8 - find_vtx_and_set_colours(0x07003FA8, 0x78, 0xFF, 0xFF, 0xFF); + #ifdef AVOID_UB + find_vtx_and_set_colours(d_course_dks_jungle_parkway_packed_dl_3FA8, 0x78, 0xFF, 0xFF, 0xFF); + #else + // d_course_dks_jungle_parkway_packed_dl_3FA8 + find_vtx_and_set_colours(0x07003FA8, 0x78, 0xFF, 0xFF, 0xFF); + #endif break; default: break; diff --git a/src/ending/code_80281780.c b/src/ending/code_80281780.c index b5974fa92a..dad60f6343 100644 --- a/src/ending/code_80281780.c +++ b/src/ending/code_80281780.c @@ -20,6 +20,7 @@ #include "main.h" #include "menus.h" #include "render_courses.h" +#include "courses/royal_raceway/course_displaylists.inc.h" u8 defaultCharacterIds[] = { 1, 2, 3, 4, 5, 6, 7, 0 @@ -132,26 +133,39 @@ void load_ceremony_cutscene(void) { D_800DC5C8 = (u16)0; gCollisionMesh = (CollisionTriangle *) gNextFreeMemoryAddress; //! @bug these segmented addresses need to be symbols for mobility - // d_course_royal_raceway_packed_dl_67E8 - generate_collision_mesh_with_default_section_id((Gfx *)0x070067E8, -1); - // d_course_royal_raceway_packed_dl_AEF8 - generate_collision_mesh_with_default_section_id((Gfx *)0x0700AEF8, -1); - // d_course_royal_raceway_packed_dl_A970 - generate_collision_mesh_with_default_section_id((Gfx *)0x0700A970, 8); - // d_course_royal_raceway_packed_dl_AC30 - generate_collision_mesh_with_default_section_id((Gfx *)0x0700AC30, 8); - // d_course_royal_raceway_packed_dl_CE0 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000CE0, 0x10); - // d_course_royal_raceway_packed_dl_E88 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000E88, 0x10); - // d_course_royal_raceway_packed_dl_A618 - generate_collision_mesh_with_default_section_id((Gfx *)0x0700A618, -1); - // d_course_royal_raceway_packed_dl_A618 - generate_collision_mesh_with_default_section_id((Gfx *)0x0700A618, -1); - // d_course_royal_raceway_packed_dl_23F8 - generate_collision_mesh_with_default_section_id((Gfx *)0x070023F8, 1); - // d_course_royal_raceway_packed_dl_2478 - generate_collision_mesh_with_default_section_id((Gfx *)0x07002478, 1); + #ifdef AVOID_UB + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_67E8, -1); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_AEF8, -1); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A970, 8); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_AC30, 8); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_CE0, 0x10); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_E88, 0x10); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_23F8, 1); + generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_2478, 1); + #else + // d_course_royal_raceway_packed_dl_67E8 + generate_collision_mesh_with_default_section_id((Gfx *)0x070067E8, -1); + // d_course_royal_raceway_packed_dl_AEF8 + generate_collision_mesh_with_default_section_id((Gfx *)0x0700AEF8, -1); + // d_course_royal_raceway_packed_dl_A970 + generate_collision_mesh_with_default_section_id((Gfx *)0x0700A970, 8); + // d_course_royal_raceway_packed_dl_AC30 + generate_collision_mesh_with_default_section_id((Gfx *)0x0700AC30, 8); + // d_course_royal_raceway_packed_dl_CE0 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000CE0, 0x10); + // d_course_royal_raceway_packed_dl_E88 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000E88, 0x10); + // d_course_royal_raceway_packed_dl_A618 + generate_collision_mesh_with_default_section_id((Gfx *)0x0700A618, -1); + // d_course_royal_raceway_packed_dl_A618 + generate_collision_mesh_with_default_section_id((Gfx *)0x0700A618, -1); + // d_course_royal_raceway_packed_dl_23F8 + generate_collision_mesh_with_default_section_id((Gfx *)0x070023F8, 1); + // d_course_royal_raceway_packed_dl_2478 + generate_collision_mesh_with_default_section_id((Gfx *)0x07002478, 1); + #endif func_80295C6C(); debug_switch_character_ceremony_cutscene(); func_802818BC(); diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index b2722a801f..cf1d7acb23 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -185,17 +185,29 @@ void render_course_segments(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) { } void func_80291198(void) { - // d_course_mario_raceway_packed_dl_1140 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001140)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_1140)); + #else + // d_course_mario_raceway_packed_dl_1140 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001140)); + #endif } void func_802911C4(void) { if (gScreenModeSelection == SCREEN_MODE_1P) { - // d_course_mario_raceway_packed_dl_8E8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008E8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_8E8)); + #else + // d_course_mario_raceway_packed_dl_8E8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008E8)); + #endif } else { - // d_course_mario_raceway_packed_dl_2D68 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07002D68)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_2D68)); + #else + // d_course_mario_raceway_packed_dl_2D68 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07002D68)); + #endif } } @@ -250,8 +262,12 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); gDPSetBlendMask(gDisplayListHead++, 0xFF); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); - // d_course_banshee_boardwalk_packed_dl_878 - gSPDisplayList(gDisplayListHead++, 0x07000878); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_878)); + #else + // d_course_banshee_boardwalk_packed_dl_878 + gSPDisplayList(gDisplayListHead++, 0x07000878); + #endif gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); gDPPipeSync(gDisplayListHead++); break; @@ -272,8 +288,12 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) { case 31: case 37: gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_koopa_troopa_beach_packed_dl_9E70 - gSPDisplayList(gDisplayListHead++, 0x07009E70); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_koopa_troopa_beach_packed_dl_9E70)); + #else + // d_course_koopa_troopa_beach_packed_dl_9E70 + gSPDisplayList(gDisplayListHead++, 0x07009E70); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); break; } @@ -312,8 +332,12 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) { gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER); gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_sherbet_land_packed_dl_2B48 - gSPDisplayList(gDisplayListHead++, 0x07002B48); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_sherbet_land_packed_dl_2B48)); + #else + // d_course_sherbet_land_packed_dl_2B48 + gSPDisplayList(gDisplayListHead++, 0x07002B48); + #endif } gDPPipeSync(gDisplayListHead++); break; @@ -344,8 +368,12 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2); gDPSetPrimColor(gDisplayListHead++, 0, 0, 0xFF, 0xFF, 0x00, 0xFF); - // d_course_wario_stadium_packed_dl_EC0 - gSPDisplayList(gDisplayListHead++, 0x07000EC0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_wario_stadium_packed_dl_EC0)); + #else + // d_course_wario_stadium_packed_dl_EC0 + gSPDisplayList(gDisplayListHead++, 0x07000EC0); + #endif gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); @@ -367,136 +395,230 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) { if (pathCounter < 17) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif if ((pathCounter >= 6) && (pathCounter < 13)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); - // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, 0x07003DD0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3DD0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + #endif } } else if ((pathCounter == 21) || (pathCounter == 22)) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); - // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, 0x070036A8); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8)); + #else + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + #endif } if ((playerDirection == 1) || (playerDirection == 0)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); - // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, 0x070036A8); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8)); + #else + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + #endif } else { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); - // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, 0x07003F30); - // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, 0x070036A8); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8)); + #else + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + #endif } } else if (pathCounter == 24) { if ((playerDirection == 0) || (playerDirection == 3)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); - // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, 0x070036A8); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8)); + #else + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + #endif } } else if (pathCounter == 23) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); - // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, 0x070036A8); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8)); + #else + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + #endif } else if (playerDirection == 0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); - // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, 0x070036A8); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8)); + #else + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + #endif } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); switch (pathCounter) { case 5: if (playerDirection != 3) { - // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, 0x07003DD0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3DD0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + #endif } break; case 17: switch (playerDirection) { case 0: - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif break; case 1: - // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, 0x07003DD0); - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3DD0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif break; case 2: - // d_course_dks_jungle_parkway_packed_dl_ - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); - // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, 0x07003F30); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30)); + #else + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + #endif break; case 3: - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); - // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, 0x07003F30); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30)); + #else + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + #endif break; } break; case 18: switch (playerDirection) { case 0: - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif break; case 1: - // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, 0x07003DD0); - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3DD0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif break; case 2: - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif break; } break; case 21: if ((playerDirection == 0) || (playerDirection == 1)) { - // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, 0x07003E40); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); - // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, 0x07003F30); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30)); + #else + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + #endif } else { - // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0)); + #else + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + #endif } break; case 22: if (playerDirection == 0) { - // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, 0x07003F30); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30)); + #else + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + #endif } break; case 23: if (playerDirection != 1) { - // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, 0x07003F30); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30)); + #else + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + #endif } break; } @@ -517,8 +639,12 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_mario_raceway_packed_dl_3050 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003050)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_3050)); + #else + // d_course_mario_raceway_packed_dl_3050 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003050)); + #endif } gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -601,26 +727,42 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) { } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_mario_raceway_packed_dl_3508 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003508)); - // d_course_mario_raceway_packed_dl_3240 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003240)); - // d_course_mario_raceway_packed_dl_14A0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070014A0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_3508)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_3240)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_14A0)); + #else + // d_course_mario_raceway_packed_dl_3508 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003508)); + // d_course_mario_raceway_packed_dl_3240 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07003240)); + // d_course_mario_raceway_packed_dl_14A0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070014A0)); + #endif render_course_segments((uintptr_t) mario_raceway_dls, arg0); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_mario_raceway_packed_dl_450 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450)); - // d_course_mario_raceway_packed_dl_240 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000240)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_450)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_240)); + #else + // d_course_mario_raceway_packed_dl_450 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450)); + // d_course_mario_raceway_packed_dl_240 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000240)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_mario_raceway_packed_dl_E0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0)); - // d_course_mario_raceway_packed_dl_160 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000160)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_E0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_mario_raceway_packed_dl_160)); + #else + // d_course_mario_raceway_packed_dl_E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0)); + // d_course_mario_raceway_packed_dl_160 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000160)); + #endif } void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) { @@ -632,8 +774,12 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_choco_mountain_packed_dl_4608 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004608)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_4608)); + #else + // d_course_choco_mountain_packed_dl_4608 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004608)); + #endif } gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE); gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); @@ -645,14 +791,21 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); - // d_course_choco_mountain_packed_dl_5A70 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005A70)); - // d_course_choco_mountain_packed_dl_828 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000828)); - // d_course_choco_mountain_packed_dl_8E0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008E0)); - // d_course_choco_mountain_packed_dl_5868 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005868)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_5A70)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_828)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_8E0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_5868)); + #else + // d_course_choco_mountain_packed_dl_5A70 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005A70)); + // d_course_choco_mountain_packed_dl_828 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000828)); + // d_course_choco_mountain_packed_dl_8E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008E0)); + // d_course_choco_mountain_packed_dl_5868 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005868)); + #endif gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); render_course_segments((uintptr_t) choco_mountain_dls, arg0); @@ -660,13 +813,22 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); - // d_course_choco_mountain_packed_dl_448 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000448)); - // d_course_choco_mountain_packed_dl_5D8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070005D8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_448)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_5D8)); + #else + // d_course_choco_mountain_packed_dl_448 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000448)); + // d_course_choco_mountain_packed_dl_5D8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070005D8)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_choco_mountain_packed_dl_718 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000718)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_choco_mountain_packed_dl_718)); + #else + // d_course_choco_mountain_packed_dl_718 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000718)); + #endif gSPClearGeometryMode(gDisplayListHead++, G_FOG); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); gDPPipeSync(gDisplayListHead++); @@ -682,8 +844,12 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_bowsers_castle_packed_dl_6A80 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07006A80)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_bowsers_castle_packed_dl_6A80)); + #else + // d_course_bowsers_castle_packed_dl_6A80 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07006A80)); + #endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -697,8 +863,12 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC *arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); - // d_course_bowsers_castle_packed_dl_248 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000248)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_bowsers_castle_packed_dl_248)); + #else + // d_course_bowsers_castle_packed_dl_248 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000248)); + #endif } void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) { @@ -710,9 +880,12 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); - // d_course_banshee_boardwalk_packed_dl_7228 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07007228)); - + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_7228)); + #else + // d_course_banshee_boardwalk_packed_dl_7228 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07007228)); + #endif gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); gDPPipeSync(gDisplayListHead++); @@ -725,12 +898,18 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - // d_course_banshee_boardwalk_packed_dl_5CD0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005CD0)); - // d_course_banshee_boardwalk_packed_dl_4E60 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004E60)); - // d_course_banshee_boardwalk_packed_dl_69B0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070069B0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_5CD0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_4E60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_69B0)); + #else + // d_course_banshee_boardwalk_packed_dl_5CD0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005CD0)); + // d_course_banshee_boardwalk_packed_dl_4E60 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004E60)); + // d_course_banshee_boardwalk_packed_dl_69B0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070069B0)); + #endif render_course_segments((uintptr_t) banshee_boardwalk_dls, arg0); @@ -739,16 +918,26 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH); - // d_course_banshee_boardwalk_packed_dl_580 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000580)); - // d_course_banshee_boardwalk_packed_dl_60 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000060)); - // d_course_banshee_boardwalk_packed_dl_540 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000540)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_580)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_540)); + #else + // d_course_banshee_boardwalk_packed_dl_580 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000580)); + // d_course_banshee_boardwalk_packed_dl_60 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000060)); + // d_course_banshee_boardwalk_packed_dl_540 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000540)); + #endif if (camera->pos[1] < -20.0f) { - // d_course_banshee_boardwalk_packed_dl_6310 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07006310)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_banshee_boardwalk_packed_dl_6310)); + #else + // d_course_banshee_boardwalk_packed_dl_6310 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07006310)); + #endif } spA8[0] = camera->pos[0]; spA8[1] = -82.0f; @@ -779,8 +968,12 @@ void render_frappe_snowland(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_frappe_snowland_packed_dl_65E0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070065E0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_frappe_snowland_packed_dl_65E0)); + #else + // d_course_frappe_snowland_packed_dl_65E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070065E0)); + #endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -798,19 +991,31 @@ void render_koopa_troopa_beach(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_koopa_troopa_beach_packed_dl_9CC0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009CC0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_koopa_troopa_beach_packed_dl_9CC0)); + #else + // d_course_koopa_troopa_beach_packed_dl_9CC0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009CC0)); + #endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_koopa_troopa_beach_packed_dl_9688 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009688)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_koopa_troopa_beach_packed_dl_9688)); + #else + // d_course_koopa_troopa_beach_packed_dl_9688 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009688)); + #endif render_course_segments((uintptr_t) d_course_koopa_troopa_beach_dl_list1, arg0); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); - // d_course_koopa_troopa_beach_packed_dl_2C0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070002C0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_koopa_troopa_beach_packed_dl_2C0)); + #else + // d_course_koopa_troopa_beach_packed_dl_2C0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070002C0)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPPipeSync(gDisplayListHead++); } @@ -824,24 +1029,39 @@ void render_royal_raceway(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_royal_raceway_packed_dl_B030 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700B030)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_royal_raceway_packed_dl_B030)); + #else + // d_course_royal_raceway_packed_dl_B030 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700B030)); + #endif } gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_royal_raceway_packed_dl_A648 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A648)); - + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_royal_raceway_packed_dl_A648)); + #else + // d_course_royal_raceway_packed_dl_A648 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A648)); + #endif render_course_segments((uintptr_t) royal_raceway_dls, arg0); - // d_course_royal_raceway_packed_dl_11A8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070011A8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_royal_raceway_packed_dl_11A8)); + #else + // d_course_royal_raceway_packed_dl_11A8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070011A8)); + #endif gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_royal_raceway_packed_dl_8A0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008A0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_royal_raceway_packed_dl_8A0)); + #else + // d_course_royal_raceway_packed_dl_8A0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070008A0)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -858,8 +1078,12 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_luigi_raceway_packed_dl_9EC0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009EC0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_luigi_raceway_packed_dl_9EC0)); + #else + // d_course_luigi_raceway_packed_dl_9EC0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07009EC0)); + #endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -869,10 +1093,16 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC *arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); - // d_course_luigi_raceway_packed_dl_E0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0)); - // d_course_luigi_raceway_packed_dl_68 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068)); + + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_luigi_raceway_packed_dl_E0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_luigi_raceway_packed_dl_68)); + #else + // d_course_luigi_raceway_packed_dl_E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000E0)); + // d_course_luigi_raceway_packed_dl_68 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068)); + #endif D_800DC5DC = 88; D_800DC5E0 = 72; @@ -930,10 +1160,15 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_moo_moo_farm_packed_dl_4DF8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004DF8)); - // d_course_moo_moo_farm_packed_dl_5640 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005640)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_moo_moo_farm_packed_dl_4DF8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_moo_moo_farm_packed_dl_5640)); + #else + // d_course_moo_moo_farm_packed_dl_4DF8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07004DF8)); + // d_course_moo_moo_farm_packed_dl_5640 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005640)); + #endif gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); render_course_segments((uintptr_t) moo_moo_farm_dls, arg0); @@ -958,14 +1193,24 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); if ((temp_s0 >= 16) && (temp_s0 < 24)) { - if ((temp_s1 == 2) || (temp_s1 == 3)) - // d_course_moo_moo_farm_packed_dl_5410 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005410)); + #ifdef AVOID_UB + if ((temp_s1 == 2) || (temp_s1 == 3)) + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_moo_moo_farm_packed_dl_5410)); + #else + if ((temp_s1 == 2) || (temp_s1 == 3)) + // d_course_moo_moo_farm_packed_dl_5410 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005410)); + #endif } else if (temp_s0 < 9) { - if (temp_s1 == 2) - // d_course_moo_moo_farm_packed_dl_5410 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005410)); + #ifdef AVOID_UB + if (temp_s1 == 2) + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_moo_moo_farm_packed_dl_5410)); + #else + if (temp_s1 == 2) + // d_course_moo_moo_farm_packed_dl_5410 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005410)); + #endif } if (temp_s0 < 4) { @@ -985,8 +1230,12 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) { } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); - // d_course_moo_moo_farm_packed_dl_10C0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C0)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_moo_moo_farm_packed_dl_10C0)); + #else + // d_course_moo_moo_farm_packed_dl_10C0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C0)); + #endif } void render_toads_turnpike(struct UnkStruct_800DC5EC *arg0) { @@ -1007,12 +1256,18 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC *arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); - // d_course_toads_turnpike_packed_dl_0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000000)); - // d_course_toads_turnpike_packed_dl_68 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068)); - // d_course_toads_turnpike_packed_dl_D8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000D8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_toads_turnpike_packed_dl_0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_toads_turnpike_packed_dl_68)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_toads_turnpike_packed_dl_D8)); + #else + // d_course_toads_turnpike_packed_dl_0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000000)); + // d_course_toads_turnpike_packed_dl_68 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000068)); + // d_course_toads_turnpike_packed_dl_D8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070000D8)); + #endif gSPClearGeometryMode(gDisplayListHead++, G_FOG); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); } @@ -1028,26 +1283,41 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_kalimari_desert_packed_dl_71C8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070071C8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_kalimari_desert_packed_dl_71C8)); + #else + // d_course_kalimari_desert_packed_dl_71C8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070071C8)); + #endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); render_course_segments((uintptr_t) kalimari_desert_dls, arg0); - // d_course_kalimari_desert_packed_dl_1ED8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001ED8)); - // d_course_kalimari_desert_packed_dl_1B18 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001B18)); - // d_course_kalimari_desert_packed_dl_8330 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07008330)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_kalimari_desert_packed_dl_1ED8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_kalimari_desert_packed_dl_1B18)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_kalimari_desert_packed_dl_8330)); + #else + // d_course_kalimari_desert_packed_dl_1ED8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001ED8)); + // d_course_kalimari_desert_packed_dl_1B18 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07001B18)); + // d_course_kalimari_desert_packed_dl_8330 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07008330)); + #endif gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); - // d_course_kalimari_desert_packed_dl_998 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000998)); - // d_course_kalimari_desert_packed_dl_270 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000270)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_kalimari_desert_packed_dl_998)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_kalimari_desert_packed_dl_270)); + #else + // d_course_kalimari_desert_packed_dl_998 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000998)); + // d_course_kalimari_desert_packed_dl_270 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000270)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -1081,22 +1351,33 @@ void render_wario_stadium(struct UnkStruct_800DC5EC *arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_wario_stadium_packed_dl_A0C8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A0C8)); - + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_wario_stadium_packed_dl_A0C8)); + #else + // d_course_wario_stadium_packed_dl_A0C8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A0C8)); + #endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGBA, G_CC_MODULATERGBA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); render_course_segments((uintptr_t) wario_stadium_dls, arg0); - // d_course_wario_stadium_packed_dl_A228 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A228)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_wario_stadium_packed_dl_A228)); + #else + // d_course_wario_stadium_packed_dl_A228 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A228)); + #endif gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_wario_stadium_packed_dl_A88 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000A88)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_wario_stadium_packed_dl_A88)); + #else + // d_course_wario_stadium_packed_dl_A88 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000A88)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); D_800DC5DC = 88; @@ -1141,9 +1422,12 @@ void render_block_fort(UNUSED struct UnkStruct_800DC5EC *arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - // d_course_block_fort_packed_dl_15C0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070015C0)); - + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_block_fort_packed_dl_15C0)); + #else + // d_course_block_fort_packed_dl_15C0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070015C0)); + #endif } void render_skyscraper(UNUSED struct UnkStruct_800DC5EC *arg0) { @@ -1151,23 +1435,38 @@ void render_skyscraper(UNUSED struct UnkStruct_800DC5EC *arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - // d_course_skyscraper_packed_dl_FE8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000FE8)); - // d_course_skyscraper_packed_dl_C60 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000C60)); - // d_course_skyscraper_packed_dl_B70 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000B70)); - // d_course_skyscraper_packed_dl_6B8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070006B8)); - // d_course_skyscraper_packed_dl_570 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000570)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_FE8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_C60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_B70)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_6B8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_570)); + #else + // d_course_skyscraper_packed_dl_FE8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000FE8)); + // d_course_skyscraper_packed_dl_C60 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000C60)); + // d_course_skyscraper_packed_dl_B70 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000B70)); + // d_course_skyscraper_packed_dl_6B8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070006B8)); + // d_course_skyscraper_packed_dl_570 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000570)); + #endif gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_skyscraper_packed_dl_10C8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_10C8)); + #else + // d_course_skyscraper_packed_dl_10C8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C8)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_skyscraper_packed_dl_258 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000258)); - + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_skyscraper_packed_dl_258)); + #else + // d_course_skyscraper_packed_dl_258 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000258)); + #endif } void render_double_deck(UNUSED struct UnkStruct_800DC5EC *arg0) { @@ -1177,8 +1476,12 @@ void render_double_deck(UNUSED struct UnkStruct_800DC5EC *arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - // d_course_double_deck_packed_dl_738 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000738)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_double_deck_packed_dl_738)); + #else + // d_course_double_deck_packed_dl_738 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000738)); + #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -1194,8 +1497,12 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC *arg0) { gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_dks_jungle_parkway_packed_dl_92D8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070092D8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_dks_jungle_parkway_packed_dl_92D8)); + #else + // d_course_dks_jungle_parkway_packed_dl_92D8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070092D8)); + #endif } gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -1217,17 +1524,28 @@ void render_big_donut(struct UnkStruct_800DC5EC *arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - // d_course_big_donut_packed_dl_DE8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000DE8)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_big_donut_packed_dl_DE8)); + #else + // d_course_big_donut_packed_dl_DE8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000DE8)); + #endif } - // d_course_big_donut_packed_dl_450 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450)); - // d_course_big_donut_packed_dl_AC0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000AC0)); - // d_course_big_donut_packed_dl_D20 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000D20)); - // d_course_big_donut_packed_dl_230 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000230)); + #ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_big_donut_packed_dl_450)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_big_donut_packed_dl_AC0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_big_donut_packed_dl_D20)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)d_course_big_donut_packed_dl_230)); + #else + // d_course_big_donut_packed_dl_450 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450)); + // d_course_big_donut_packed_dl_AC0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000AC0)); + // d_course_big_donut_packed_dl_D20 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000D20)); + // d_course_big_donut_packed_dl_230 + gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000230)); + #endif } void func_8029569C(void) { @@ -1423,14 +1741,26 @@ void func_80295D88(void) { D_800DC5C8 = 0; switch (gCurrentCourseId) { case COURSE_MARIO_RACEWAY: - // d_course_mario_raceway_packed_dl_1140 - generate_collision_mesh_with_defaults((Gfx *)0x07001140); + #ifdef AVOID_UB + generate_collision_mesh_with_defaults(d_course_mario_raceway_packed_dl_1140); + #else + // d_course_mario_raceway_packed_dl_1140 + generate_collision_mesh_with_defaults((Gfx *)0x07001140); + #endif if (gScreenModeSelection == SCREEN_MODE_1P) { - // d_course_mario_raceway_packed_dl_8E8 - generate_collision_mesh_with_defaults((Gfx *)0x070008E8); + #ifdef AVOID_UB + generate_collision_mesh_with_defaults(d_course_mario_raceway_packed_dl_8E8); + #else + // d_course_mario_raceway_packed_dl_8E8 + generate_collision_mesh_with_defaults((Gfx *)0x070008E8); + #endif } else { - // d_course_mario_raceway_packed_dl_2D68 - generate_collision_mesh_with_defaults((Gfx *)0x07002D68); + #ifdef AVOID_UB + generate_collision_mesh_with_defaults(d_course_mario_raceway_packed_dl_2D68); + #else + // d_course_mario_raceway_packed_dl_2D68 + generate_collision_mesh_with_defaults((Gfx *)0x07002D68); + #endif } parse_course_displaylists((uintptr_t) d_course_mario_raceway_addr); func_80295C6C(); @@ -1448,18 +1778,27 @@ void func_80295D88(void) { // Spawn guardrail only for CC_50 and time trials. if ((gCCSelection != CC_50) && (gModeSelection != TIME_TRIALS)) { - // d_course_choco_mountain_packed_dl_0 - nullify_displaylist((uintptr_t)0x07000000); - // d_course_choco_mountain_packed_dl_98 - nullify_displaylist((uintptr_t)0x07000098); - // d_course_choco_mountain_packed_dl_178 - nullify_displaylist((uintptr_t)0x07000178); - // d_course_choco_mountain_packed_dl_280 - nullify_displaylist((uintptr_t)0x07000280); - // d_course_choco_mountain_packed_dl_340 - nullify_displaylist((uintptr_t)0x07000340); - // d_course_choco_mountain_packed_dl_3C8 - nullify_displaylist((uintptr_t)0x070003C8); + #ifdef AVOID_UB + nullify_displaylist((uintptr_t)d_course_choco_mountain_packed_dl_0); + nullify_displaylist((uintptr_t)d_course_choco_mountain_packed_dl_98); + nullify_displaylist((uintptr_t)d_course_choco_mountain_packed_dl_178); + nullify_displaylist((uintptr_t)d_course_choco_mountain_packed_dl_280); + nullify_displaylist((uintptr_t)d_course_choco_mountain_packed_dl_340); + nullify_displaylist((uintptr_t)d_course_choco_mountain_packed_dl_3C8); + #else + // d_course_choco_mountain_packed_dl_0 + nullify_displaylist((uintptr_t)0x07000000); + // d_course_choco_mountain_packed_dl_98 + nullify_displaylist((uintptr_t)0x07000098); + // d_course_choco_mountain_packed_dl_178 + nullify_displaylist((uintptr_t)0x07000178); + // d_course_choco_mountain_packed_dl_280 + nullify_displaylist((uintptr_t)0x07000280); + // d_course_choco_mountain_packed_dl_340 + nullify_displaylist((uintptr_t)0x07000340); + // d_course_choco_mountain_packed_dl_3C8 + nullify_displaylist((uintptr_t)0x070003C8); + #endif } parse_course_displaylists((uintptr_t) &d_course_choco_mountain_addr); func_802B5CAC(0x238E, 0x31C7, D_8015F590); @@ -1469,8 +1808,12 @@ void func_80295D88(void) { case COURSE_BOWSER_CASTLE: parse_course_displaylists((uintptr_t) d_course_bowsers_castle_addr); func_80295C6C(); - // d_course_bowsers_castle_packed_dl_1350 - find_vtx_and_set_colours((uintptr_t)0x07001350, 0x32, 0, 0, 0); + #ifdef AVOID_UB + generate_collision_mesh_with_defaults(d_course_bowsers_castle_packed_dl_1350); + #else + // d_course_bowsers_castle_packed_dl_1350 + find_vtx_and_set_colours((uintptr_t)0x07001350, 0x32, 0, 0, 0); + #endif D_8015F8E4 = -50.0f; break; case COURSE_BANSHEE_BOARDWALK: @@ -1480,8 +1823,12 @@ void func_80295D88(void) { D_801625F0 = 0; parse_course_displaylists((uintptr_t) d_course_banshee_boardwalk_track_sections); func_80295C6C(); - // d_course_banshee_boardwalk_packed_dl_878 - find_vtx_and_set_colours((uintptr_t)0x07000878, 128, 0, 0, 0); + #ifdef AVOID_UB + generate_collision_mesh_with_defaults(d_course_banshee_boardwalk_packed_dl_878); + #else + // d_course_banshee_boardwalk_packed_dl_878 + find_vtx_and_set_colours((uintptr_t)0x07000878, 128, 0, 0, 0); + #endif D_8015F8E4 = -80.0f; break; case COURSE_YOSHI_VALLEY: @@ -1498,14 +1845,21 @@ void func_80295D88(void) { case COURSE_KOOPA_BEACH: parse_course_displaylists((uintptr_t) d_course_koopa_troopa_beach_addr); func_80295C6C(); - // d_course_koopa_troopa_beach_packed_dl_ADE0 - find_vtx_and_set_colours((uintptr_t)0x0700ADE0, -0x6A, 255, 255, 255); - // d_course_koopa_troopa_beach_packed_dl_A540 - find_vtx_and_set_colours((uintptr_t)0x0700A540, -0x6A, 255, 255, 255); - // d_course_koopa_troopa_beach_packed_dl_9E70 - find_vtx_and_set_colours((uintptr_t)0x07009E70, -0x6A, 255, 255, 255); - // d_course_koopa_troopa_beach_packed_dl_358 - find_vtx_and_set_colours((uintptr_t)0x07000358, -0x6A, 255, 255, 255); + #ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t)d_course_koopa_troopa_beach_packed_dl_ADE0, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_koopa_troopa_beach_packed_dl_A540, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_koopa_troopa_beach_packed_dl_9E70, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_koopa_troopa_beach_packed_dl_358, -0x6A, 255, 255, 255); + #else + // d_course_koopa_troopa_beach_packed_dl_ADE0 + find_vtx_and_set_colours((uintptr_t)0x0700ADE0, -0x6A, 255, 255, 255); + // d_course_koopa_troopa_beach_packed_dl_A540 + find_vtx_and_set_colours((uintptr_t)0x0700A540, -0x6A, 255, 255, 255); + // d_course_koopa_troopa_beach_packed_dl_9E70 + find_vtx_and_set_colours((uintptr_t)0x07009E70, -0x6A, 255, 255, 255); + // d_course_koopa_troopa_beach_packed_dl_358 + find_vtx_and_set_colours((uintptr_t)0x07000358, -0x6A, 255, 255, 255); + #endif break; case COURSE_ROYAL_RACEWAY: parse_course_displaylists((uintptr_t) d_course_royal_raceway_addr); @@ -1541,66 +1895,105 @@ void func_80295D88(void) { parse_course_displaylists((uintptr_t) d_course_sherbet_land_addr); func_80295C6C(); D_8015F8E4 = -18.0f; - // d_course_sherbet_land_packed_dl_1EB8 - find_vtx_and_set_colours((uintptr_t)0x07001EB8, -0x4C, 255, 255, 255); - // d_course_sherbet_land_packed_dl_2308 - find_vtx_and_set_colours((uintptr_t)0x07002308, -0x6A, 255, 255, 255); + #ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t)d_course_sherbet_land_packed_dl_1EB8, -0x4C, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_sherbet_land_packed_dl_2308, -0x6A, 255, 255, 255); + #else + // d_course_sherbet_land_packed_dl_1EB8 + find_vtx_and_set_colours((uintptr_t)0x07001EB8, -0x4C, 255, 255, 255); + // d_course_sherbet_land_packed_dl_2308 + find_vtx_and_set_colours((uintptr_t)0x07002308, -0x6A, 255, 255, 255); + #endif break; case COURSE_RAINBOW_ROAD: D_800DC5C8 = 1; parse_course_displaylists((uintptr_t) d_course_rainbow_road_addr); func_80295C6C(); D_8015F8E4 = 0.0f; - // d_course_rainbow_road_packed_dl_2068 - find_vtx_and_set_colours((uintptr_t)0x07002068, -0x6A, 255, 255, 255); - // d_course_rainbow_road_packed_dl_1E18 - find_vtx_and_set_colours((uintptr_t)0x07001E18, -0x6A, 255, 255, 255); - // d_course_rainbow_road_packed_dl_1318 - find_vtx_and_set_colours((uintptr_t)0x07001318, 255, 255, 255, 0); + #ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t)d_course_rainbow_road_packed_dl_2068, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_rainbow_road_packed_dl_1E18, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_rainbow_road_packed_dl_1318, 255, 255, 255, 0); + #else + // d_course_rainbow_road_packed_dl_2068 + find_vtx_and_set_colours((uintptr_t)0x07002068, -0x6A, 255, 255, 255); + // d_course_rainbow_road_packed_dl_1E18 + find_vtx_and_set_colours((uintptr_t)0x07001E18, -0x6A, 255, 255, 255); + // d_course_rainbow_road_packed_dl_1318 + find_vtx_and_set_colours((uintptr_t)0x07001318, 255, 255, 255, 0); + #endif if (gGamestate != CREDITS_SEQUENCE) { - // d_course_rainbow_road_packed_dl_1FB8 - find_vtx_and_set_colours((uintptr_t)0x07001FB8, -0x6A, 255, 255, 255); + #ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t)d_course_rainbow_road_packed_dl_1FB8, -0x6A, 255, 255, 255); + #else + // d_course_rainbow_road_packed_dl_1FB8 + find_vtx_and_set_colours((uintptr_t)0x07001FB8, -0x6A, 255, 255, 255); + #endif } break; case COURSE_WARIO_STADIUM: parse_course_displaylists((uintptr_t) d_course_wario_stadium_addr); func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; - // d_course_wario_stadium_packed_dl_C50 - find_vtx_and_set_colours((uintptr_t)0x07000C50, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_BD8 - find_vtx_and_set_colours((uintptr_t)0x07000BD8, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_B60 - find_vtx_and_set_colours((uintptr_t)0x07000B60, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_AE8 - find_vtx_and_set_colours((uintptr_t)0x07000AE8, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_CC8 - find_vtx_and_set_colours((uintptr_t)0x07000CC8, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_D50 - find_vtx_and_set_colours((uintptr_t)0x07000D50, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_DD0 - find_vtx_and_set_colours((uintptr_t)0x07000DD0, 100, 255, 255, 255); - // d_course_wario_stadium_packed_dl_E48 - find_vtx_and_set_colours((uintptr_t)0x07000E48, 100, 255, 255, 255); + #ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_C50, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_BD8, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_B60, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_AE8, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_CC8, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_D50, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_DD0, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t)d_course_wario_stadium_packed_dl_E48, 100, 255, 255, 255); + #else + // d_course_wario_stadium_packed_dl_C50 + find_vtx_and_set_colours((uintptr_t)0x07000C50, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_BD8 + find_vtx_and_set_colours((uintptr_t)0x07000BD8, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_B60 + find_vtx_and_set_colours((uintptr_t)0x07000B60, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_AE8 + find_vtx_and_set_colours((uintptr_t)0x07000AE8, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_CC8 + find_vtx_and_set_colours((uintptr_t)0x07000CC8, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_D50 + find_vtx_and_set_colours((uintptr_t)0x07000D50, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_DD0 + find_vtx_and_set_colours((uintptr_t)0x07000DD0, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_E48 + find_vtx_and_set_colours((uintptr_t)0x07000E48, 100, 255, 255, 255); + #endif break; case COURSE_BLOCK_FORT: - // d_course_block_fort_packed_dl_15C0 - generate_collision_mesh_with_default_section_id((Gfx *)0x070015C0, 1); + #ifdef AVOID_UB + generate_collision_mesh_with_default_section_id(d_course_block_fort_packed_dl_15C0, 1); + #else + // d_course_block_fort_packed_dl_15C0 + generate_collision_mesh_with_default_section_id((Gfx *)0x070015C0, 1); + #endif func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; break; case COURSE_SKYSCRAPER: - // d_course_skyscraper_packed_dl_1110 - generate_collision_mesh_with_default_section_id((Gfx *)0x07001110, 1); - // d_course_skyscraper_packed_dl_258 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000258, 1); + #ifdef AVOID_UB + generate_collision_mesh_with_default_section_id(d_course_skyscraper_packed_dl_1110, 1); + generate_collision_mesh_with_default_section_id(d_course_skyscraper_packed_dl_258, 1); + #else + // d_course_skyscraper_packed_dl_1110 + generate_collision_mesh_with_default_section_id((Gfx *)0x07001110, 1); + // d_course_skyscraper_packed_dl_258 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000258, 1); + #endif func_80295C6C(); D_8015F8E4 = -480.0f; break; case COURSE_DOUBLE_DECK: - // d_course_double_deck_packed_dl_738 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000738, 1); + #ifdef AVOID_UB + generate_collision_mesh_with_default_section_id(d_course_double_deck_packed_dl_738, 1); + #else + // d_course_double_deck_packed_dl_738 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000738, 1); + #endif func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; break; @@ -1608,20 +2001,32 @@ void func_80295D88(void) { parse_course_displaylists((uintptr_t) d_course_dks_jungle_parkway_addr); func_80295C6C(); D_8015F8E4 = -475.0f; - // d_course_dks_jungle_parkway_packed_dl_3FA8 - find_vtx_and_set_colours((uintptr_t)0x07003FA8, 120, 255, 255, 255); + #ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3FA8, 120, 255, 255, 255); + #else + // d_course_dks_jungle_parkway_packed_dl_3FA8 + find_vtx_and_set_colours((uintptr_t)0x07003FA8, 120, 255, 255, 255); + #endif break; case COURSE_BIG_DONUT: - // d_course_big_donut_packed_dl_1018 - generate_collision_mesh_with_default_section_id((Gfx *)0x07001018, 6); - // d_course_big_donut_packed_dl_450 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000450, 6); - // d_course_big_donut_packed_dl_AC0 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000AC0, 6); - // d_course_big_donut_packed_dl_B58 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000B58, 6); - // d_course_big_donut_packed_dl_230 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000230, 6); + #ifdef AVOID_UB + generate_collision_mesh_with_default_section_id(d_course_big_donut_packed_dl_1018, 6); + generate_collision_mesh_with_default_section_id(d_course_big_donut_packed_dl_450, 6); + generate_collision_mesh_with_default_section_id(d_course_big_donut_packed_dl_AC0, 6); + generate_collision_mesh_with_default_section_id(d_course_big_donut_packed_dl_B58, 6); + generate_collision_mesh_with_default_section_id(d_course_big_donut_packed_dl_230, 6); + #else + // d_course_big_donut_packed_dl_1018 + generate_collision_mesh_with_default_section_id((Gfx *)0x07001018, 6); + // d_course_big_donut_packed_dl_450 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000450, 6); + // d_course_big_donut_packed_dl_AC0 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000AC0, 6); + // d_course_big_donut_packed_dl_B58 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000B58, 6); + // d_course_big_donut_packed_dl_230 + generate_collision_mesh_with_default_section_id((Gfx *)0x07000230, 6); + #endif func_80295C6C(); D_8015F8E4 = 100.0f; break; @@ -1648,10 +2053,15 @@ void func_802966A0(void) { D_802B87C4 = 0; } // waterfall animation - // d_course_koopa_troopa_beach_packed_dl_9D58 - find_and_set_tile_size((uintptr_t)0x07009D58, 0, D_802B87BC); - // d_course_koopa_troopa_beach_packed_dl_9CD0 - find_and_set_tile_size((uintptr_t)0x07009CD0, 0, D_802B87C4); + #ifdef AVOID_UB + find_and_set_tile_size((uintptr_t)d_course_koopa_troopa_beach_packed_dl_9D58, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t)d_course_koopa_troopa_beach_packed_dl_9CD0, 0, D_802B87C4); + #else + // d_course_koopa_troopa_beach_packed_dl_9D58 + find_and_set_tile_size((uintptr_t)0x07009D58, 0, D_802B87BC); + // d_course_koopa_troopa_beach_packed_dl_9CD0 + find_and_set_tile_size((uintptr_t)0x07009CD0, 0, D_802B87C4); + #endif D_802B87CC = random_int(300) / 40; if (D_802B87C8 < 0) { D_802B87C8 = random_int(300) / 40; @@ -1659,8 +2069,12 @@ void func_802966A0(void) { D_802B87C8 = -(random_int(300) / 40); } // Waterfall bubbling effect? (unused) - // d_course_koopa_troopa_beach_packed_dl_2E8 - find_and_set_tile_size((uintptr_t)0x070002E8, D_802B87C8, D_802B87CC); + #ifdef AVOID_UB + find_and_set_tile_size((uintptr_t)d_course_koopa_troopa_beach_packed_dl_2E8, D_802B87C8, D_802B87CC); + #else + // d_course_koopa_troopa_beach_packed_dl_2E8 + find_and_set_tile_size((uintptr_t)0x070002E8, D_802B87C8, D_802B87CC); + #endif break; case COURSE_BANSHEE_BOARDWALK: D_802B87BC++; @@ -1675,32 +2089,49 @@ void func_802966A0(void) { if (D_802B87BC < 0) { D_802B87BC = 0xFF; } - // d_course_royal_raceway_packed_dl_A6A8 - find_and_set_tile_size((uintptr_t)0x0700A6A8, 0, D_802B87BC); - // d_course_royal_raceway_packed_dl_A648 - find_and_set_tile_size((uintptr_t)0x0700A648, 0, D_802B87BC); + #ifdef AVOID_UB + find_and_set_tile_size((uintptr_t)d_course_royal_raceway_packed_dl_A6A8, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t)d_course_royal_raceway_packed_dl_A648, 0, D_802B87BC); + #else + // d_course_royal_raceway_packed_dl_A6A8 + find_and_set_tile_size((uintptr_t)0x0700A6A8, 0, D_802B87BC); + // d_course_royal_raceway_packed_dl_A648 + find_and_set_tile_size((uintptr_t)0x0700A648, 0, D_802B87BC); + #endif break; case COURSE_DK_JUNGLE: D_802B87BC += 2; if (D_802B87BC > 255) { D_802B87BC = 0; } - // d_course_dks_jungle_parkway_packed_dl_3DD0 - find_and_set_tile_size((uintptr_t)0x07003DD0, 0, D_802B87BC); - // d_course_dks_jungle_parkway_packed_dl_3E40 - find_and_set_tile_size((uintptr_t)0x07003E40, 0, D_802B87BC); - // d_course_dks_jungle_parkway_packed_dl_3EB0 - find_and_set_tile_size((uintptr_t)0x07003EB0, 0, D_802B87BC); - // d_course_dks_jungle_parkway_packed_dl_3F30 - find_and_set_tile_size((uintptr_t)0x07003F30, 0, D_802B87BC); - // d_course_dks_jungle_parkway_packed_dl_36A8 - find_and_set_tile_size((uintptr_t)0x070036A8, 0, D_802B87BC); + #ifdef AVOID_UB + find_and_set_tile_size((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3DD0, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3E40, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3EB0, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t)d_course_dks_jungle_parkway_packed_dl_3F30, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t)d_course_dks_jungle_parkway_packed_dl_36A8, 0, D_802B87BC); + #else + // d_course_dks_jungle_parkway_packed_dl_3DD0 + find_and_set_tile_size((uintptr_t)0x07003DD0, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_3E40 + find_and_set_tile_size((uintptr_t)0x07003E40, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + find_and_set_tile_size((uintptr_t)0x07003EB0, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_3F30 + find_and_set_tile_size((uintptr_t)0x07003F30, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_36A8 + find_and_set_tile_size((uintptr_t)0x070036A8, 0, D_802B87BC); + #endif D_802B87C4 -= 20; if (D_802B87C4 < 0) { D_802B87C4 = 0xFF; } - // d_course_dks_jungle_parkway_packed_dl_9880 - find_and_set_tile_size((uintptr_t)0x07009880, 0, D_802B87C4); + #ifdef AVOID_UB + find_and_set_tile_size((uintptr_t)d_course_dks_jungle_parkway_packed_dl_9880, 0, D_802B87C4); + #else + // d_course_dks_jungle_parkway_packed_dl_9880 + find_and_set_tile_size((uintptr_t)0x07009880, 0, D_802B87C4); + #endif evaluate_collision_players_palm_trees(); break; } From 2a6ca04c4883907dd42b97c144c5e3f5466c1a02 Mon Sep 17 00:00:00 2001 From: coco875 Date: Fri, 30 Aug 2024 17:50:14 +0200 Subject: [PATCH 2/6] Update render_courses.c --- src/racing/render_courses.c | 1874 ++++++++++++++++++++++++++++++++--- 1 file changed, 1726 insertions(+), 148 deletions(-) diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index 72b7810edc..62bbdb71e5 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -1,174 +1,1752 @@ #include #include -#include -#include #include +#include +#include +#include -#include "code_80281780.h" -#include "memory.h" -#include "camera.h" -#include "camera_junk.h" -#include "spawn_players.h" -#include "skybox_and_splitscreen.h" -#include "code_8006E9C0.h" -#include "podium_ceremony_actors.h" -#include "code_80005FD0.h" -#include "collision.h" -#include "code_80281C40.h" +#include "render_courses.h" #include "code_800029B0.h" -#include "code_80091750.h" #include "main.h" -#include "menus.h" -#include "render_courses.h" -#include "courses/royal_raceway/course_displaylists.inc.h" - -u8 defaultCharacterIds[] = { 1, 2, 3, 4, 5, 6, 7, 0 }; - -void debug_switch_character_ceremony_cutscene(void) { - if (gEnableDebugMode) { - if (gControllerOne->button & HOLD_ALL_DPAD_AND_C_BUTTONS) { - // Allows to switch character in debug mode? - if (gControllerOne->button & U_CBUTTONS) { - gCharacterSelections[0] = LUIGI; - } else if (gControllerOne->button & L_CBUTTONS) { - gCharacterSelections[0] = YOSHI; - } else if (gControllerOne->button & R_CBUTTONS) { - gCharacterSelections[0] = TOAD; - } else if (gControllerOne->button & D_CBUTTONS) { - gCharacterSelections[0] = DK; - } else if (gControllerOne->button & U_JPAD) { - gCharacterSelections[0] = WARIO; - } else if (gControllerOne->button & L_JPAD) { - gCharacterSelections[0] = PEACH; - } else if (gControllerOne->button & R_JPAD) { - gCharacterSelections[0] = BOWSER; +#include "actors.h" +#include "math_util.h" +#include "memory.h" +#include "code_80281780.h" +#include "collision.h" +#include "skybox_and_splitscreen.h" +#include "courses/all_course_data.h" +#include "courses/all_course_packed.h" +#include "courses/all_course_offsets.h" + +s16 D_802B87B0 = 995; +s16 D_802B87B4 = 1000; +UNUSED s32 D_802B87B8 = 0; +s32 D_802B87BC = 0; +UNUSED s32 D_802B87C0 = 0; +s32 D_802B87C4 = 0; +s32 D_802B87C8 = 0; +s32 D_802B87CC = 0; +s16 D_802B87D0 = 0; +s16 D_802B87D4 = 0; +s16 currentScreenSection = 0; + +s32 func_80290C20(Camera* camera) { + if (camera->collision.unk34 == 0) { + return 1; + } + if ((camera->collision.unk30 == 1) && (camera->collision.surfaceDistance[0] < 3.0f)) { + return 1; + } + if ((camera->collision.unk32 == 1) && (camera->collision.surfaceDistance[1] < 3.0f)) { + return 1; + } + return 0; +} + +void parse_course_displaylists(uintptr_t addr) { + s32 segment = SEGMENT_NUMBER2(addr); + s32 offset = SEGMENT_OFFSET(addr); + TrackSections* section = (TrackSections*) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset); + + while (section->addr != 0) { + if (section->flags & 0x8000) { + D_8015F59C = 1; + } else { + D_8015F59C = 0; + } + if (section->flags & 0x2000) { + D_8015F5A0 = 1; + } else { + D_8015F5A0 = 0; + } + if (section->flags & 0x4000) { + D_8015F5A4 = 1; + } else { + D_8015F5A4 = 0; + } + generate_collision_mesh(section->addr, section->surfaceType, section->sectionId); + section++; + } +} + +extern u32 isFlycam; + +void render_course_segments(uintptr_t addr, struct UnkStruct_800DC5EC* arg1) { + Player* player = arg1->player; + Camera* camera = arg1->camera; + u32 segment = SEGMENT_NUMBER2(addr); + u32 offset = SEGMENT_OFFSET(addr); + //! @todo Should be Gfx* + s32* gfx = (s32*) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset); + s16 var_a3; + s16 index; + s16 sp1E; + s16 temp_v0_3; + u16 rot; + if (gIsMirrorMode) { + rot = (u16) camera->rot[1]; + if (rot < 0x2000) { + var_a3 = 2; + } else if (rot < 0x6000) { + var_a3 = 3; + } else if (rot < 0xA000) { + var_a3 = 0; + } else if (rot < 0xE000) { + var_a3 = 1; + } else { + var_a3 = 2; + } + } else { + rot = (u16) camera->rot[1]; + if (rot < 0x2000) { + var_a3 = 2; + } else if (rot < 0x6000) { + var_a3 = 1; + } else if (rot < 0xA000) { + var_a3 = 0; + } else if (rot < 0xE000) { + var_a3 = 3; + } else { + var_a3 = 2; + } + } + arg1->playerDirection = var_a3; + + if (D_80152300[camera - camera1] == 1) { + sp1E = get_track_section_id(camera->collision.meshIndexZX); + temp_v0_3 = get_track_section_id(player->collision.meshIndexZX); + index = sp1E - temp_v0_3; + if ((index < 2) && (index >= -1)) { + if (sp1E == 255) { + if (temp_v0_3 == 255) { + index = arg1->pathCounter; + } else if (player->collision.surfaceDistance[2] > 30.0f) { + index = arg1->pathCounter; + } else { + index = temp_v0_3; + } + } else if (camera->collision.surfaceDistance[2] > 30.0f) { + index = arg1->pathCounter; } else { - gCharacterSelections[0] = MARIO; + index = sp1E; + } + } else { + + switch (gCurrentCourseId) { + case COURSE_BOWSER_CASTLE: + if ((temp_v0_3 >= 0x11) && (temp_v0_3 < 0x18)) { + index = temp_v0_3; + } else if ((temp_v0_3 == 255) && (sp1E != 255)) { + index = sp1E; + } else if ((temp_v0_3 != 255) && (sp1E == 255)) { + index = temp_v0_3; + } else { + index = arg1->pathCounter; + } + break; + case COURSE_CHOCO_MOUNTAIN: + if ((temp_v0_3 >= 0xE) && (temp_v0_3 < 0x16)) { + index = temp_v0_3; + } else if ((temp_v0_3 == 255) && (sp1E != 255)) { + index = sp1E; + } else if ((temp_v0_3 != 255) && (sp1E == 255)) { + index = temp_v0_3; + } else { + index = arg1->pathCounter; + } + break; + default: + if (temp_v0_3 == 255) { + index = arg1->pathCounter; + } else if (player->collision.surfaceDistance[2] > 30.0f) { + index = arg1->pathCounter; + } else { + index = temp_v0_3; + } + break; } - //! @todo confirm this. - // Resets gCharacterIdByGPOverallRank to default? - bcopy(&defaultCharacterIds, &gCharacterIdByGPOverallRank, 8); } + } else { + index = get_track_section_id(camera->collision.meshIndexZX); + if (camera->collision.surfaceDistance[2] > 30.0f) { + index = arg1->pathCounter; + } else if (index == 255) { + index = arg1->pathCounter; + } + } + + arg1->pathCounter = index; + index = ((index - 1) * 4) + var_a3; + gSPDisplayList(gDisplayListHead++, gfx[index]); +} + +void func_80291198(void) { + // d_course_mario_raceway_packed_dl_1140 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001140)); +} + +void func_802911C4(void) { + if (gScreenModeSelection == SCREEN_MODE_1P) { + // d_course_mario_raceway_packed_dl_8E8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008E8)); + } else { + // d_course_mario_raceway_packed_dl_2D68 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07002D68)); + } +} + +void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { + UNUSED s32 pad; + Player* player = arg0->player; + Mat4 matrix; + Vec3f vector; + u16 pathCounter; + u16 cameraRot; + s16 playerDirection; + + init_rdp(); + pathCounter = (u16) arg0->pathCounter; + cameraRot = (u16) arg0->camera->rot[1]; + playerDirection = arg0->playerDirection; + switch (playerId) { + case PLAYER_ONE: + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[PLAYER_ONE]), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[PLAYER_ONE]), + G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + break; + case PLAYER_TWO: + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[PLAYER_TWO]), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[PLAYER_TWO]), + G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + break; + case PLAYER_THREE: + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[PLAYER_THREE]), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[PLAYER_THREE]), + G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + break; + case PLAYER_FOUR: + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[PLAYER_FOUR]), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[PLAYER_FOUR]), + G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + break; + } + mtxf_identity(matrix); + render_set_position(matrix, 0); + switch (gCurrentCourseId) { + case COURSE_BOWSER_CASTLE: + if (gActiveScreenMode != SCREEN_MODE_1P) { + return; + } + if (pathCounter < 6) { + return; + } + if (pathCounter > 9) { + return; + } + if (pathCounter == 9) { + if (cameraRot < 0xA000) { + return; + } + if (cameraRot > 0xE000) { + return; + } + } + gSPDisplayList(gDisplayListHead++, d_course_bowsers_castle_dl_9228); + break; + case COURSE_BANSHEE_BOARDWALK: + gDPPipeSync(gDisplayListHead++); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // d_course_banshee_boardwalk_packed_dl_878 + gSPDisplayList(gDisplayListHead++, 0x07000878); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + gDPPipeSync(gDisplayListHead++); + break; + case COURSE_KOOPA_BEACH: + + gDPPipeSync(gDisplayListHead++); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + + switch (pathCounter) { + case 22: + case 23: + case 29: + case 30: + case 31: + case 37: + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_koopa_troopa_beach_packed_dl_9E70 + gSPDisplayList(gDisplayListHead++, 0x07009E70); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + break; + } + vector[0] = 0.0f; + vector[1] = D_8015F8E4; + vector[2] = 0.0f; + mtxf_translate(matrix, vector); + render_set_position(matrix, 0); + + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + render_course_segments((uintptr_t) d_course_koopa_troopa_beach_dl_list2, arg0); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + gDPPipeSync(gDisplayListHead++); + break; + case COURSE_SHERBET_LAND: + + gDPPipeSync(gDisplayListHead++); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP); + gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP); + + mtxf_identity(matrix); + render_set_position(matrix, 0); + render_course_segments((uintptr_t) sherbet_land_dls_2, arg0); + + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + if ((func_80290C20(arg0->camera) == 1) && (func_802AAB4C(player) < player->pos[1])) { + gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER); + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_sherbet_land_packed_dl_2B48 + gSPDisplayList(gDisplayListHead++, 0x07002B48); + } + gDPPipeSync(gDisplayListHead++); + break; + case COURSE_RAINBOW_ROAD: + gDPPipeSync(gDisplayListHead++); + mtxf_identity(matrix); + render_set_position(matrix, 0); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + render_course_segments((uintptr_t) &d_course_rainbow_road_dl_list, arg0); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + gDPPipeSync(gDisplayListHead++); + break; + case COURSE_WARIO_STADIUM: + gDPPipeSync(gDisplayListHead++); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP); + gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP); + + mtxf_identity(matrix); + render_set_position(matrix, 0); + + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2); + gDPSetPrimColor(gDisplayListHead++, 0, 0, 0xFF, 0xFF, 0x00, 0xFF); + // d_course_wario_stadium_packed_dl_EC0 + gSPDisplayList(gDisplayListHead++, 0x07000EC0); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + gDPPipeSync(gDisplayListHead++); + break; + case COURSE_DK_JUNGLE: + gDPPipeSync(gDisplayListHead++); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP); + gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP); + + mtxf_identity(matrix); + render_set_position(matrix, 0); + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + + if (pathCounter < 17) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + if ((pathCounter >= 6) && (pathCounter < 13)) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + } + } else if ((pathCounter == 21) || (pathCounter == 22)) { + if (playerDirection == 3) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + } + if ((playerDirection == 1) || (playerDirection == 0)) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + } else { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + } + } else if (pathCounter == 24) { + if ((playerDirection == 0) || (playerDirection == 3)) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + } + } else if (pathCounter == 23) { + if (playerDirection == 3) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + } else if (playerDirection == 0) { + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + // d_course_dks_jungle_parkway_packed_dl_36A8 + gSPDisplayList(gDisplayListHead++, 0x070036A8); + } + } + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + switch (pathCounter) { + case 5: + if (playerDirection != 3) { + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + } + break; + case 17: + switch (playerDirection) { + case 0: + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + break; + case 1: + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + break; + case 2: + // d_course_dks_jungle_parkway_packed_dl_ + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + break; + case 3: + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + break; + } + break; + case 18: + switch (playerDirection) { + case 0: + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + break; + case 1: + // d_course_dks_jungle_parkway_packed_dl_3DD0 + gSPDisplayList(gDisplayListHead++, 0x07003DD0); + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + break; + case 2: + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + break; + } + break; + case 21: + if ((playerDirection == 0) || (playerDirection == 1)) { + // d_course_dks_jungle_parkway_packed_dl_3E40 + gSPDisplayList(gDisplayListHead++, 0x07003E40); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + } else { + // d_course_dks_jungle_parkway_packed_dl_3EB0 + gSPDisplayList(gDisplayListHead++, 0x07003EB0); + } + break; + case 22: + if (playerDirection == 0) { + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + } + break; + case 23: + if (playerDirection != 1) { + // d_course_dks_jungle_parkway_packed_dl_3F30 + gSPDisplayList(gDisplayListHead++, 0x07003F30); + } + break; + } + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + gDPPipeSync(gDisplayListHead++); + break; } } -s32 func_80281880(s32 arg0) { - s32 i; - for (i = 0; i < NUM_PLAYERS; i++) { - if (gCharacterIdByGPOverallRank[i] == gCharacterSelections[arg0]) +void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { + UNUSED s32 pad; + u16 sp22 = arg0->pathCounter; + u16 temp_t0 = arg0->playerDirection; + + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_mario_raceway_packed_dl_3050 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003050)); + } + + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + gDPPipeSync(gDisplayListHead++); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + + switch (sp22) { + case 1: + case 2: + case 17: + if ((temp_t0 == 2) || (temp_t0 == 1)) { + func_802911C4(); + } + break; + case 3: + if (temp_t0 != 0) { + func_802911C4(); + } break; + case 4: + if (temp_t0 == 0) { + func_80291198(); + } else { + if (temp_t0 == 1) { + func_80291198(); + } + func_802911C4(); + } + break; + case 5: + case 6: + if ((temp_t0 == 2) || (temp_t0 == 3)) { + func_802911C4(); + } else { + func_80291198(); + } + break; + case 7: + func_80291198(); + if ((temp_t0 == 2) || (temp_t0 == 3)) { + func_802911C4(); + } + break; + case 8: + case 9: + if (temp_t0 != 1) { + func_802911C4(); + } + /* fallthrough */ + case 10: + if (temp_t0 != 2) { + func_80291198(); + } + break; + case 11: + if (temp_t0 == 0) { + func_802911C4(); + func_80291198(); + } else if (temp_t0 == 3) { + func_802911C4(); + } + break; + case 12: + if ((temp_t0 == 0) || (temp_t0 == 3)) { + func_802911C4(); + } + break; + case 13: + case 14: + if (temp_t0 != 1) { + case 15: + case 16: + func_802911C4(); + } + break; + } + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_mario_raceway_packed_dl_3508 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003508)); + // d_course_mario_raceway_packed_dl_3240 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003240)); + // d_course_mario_raceway_packed_dl_14A0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070014A0)); + + render_course_segments((uintptr_t) mario_raceway_dls, arg0); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_mario_raceway_packed_dl_450 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000450)); + // d_course_mario_raceway_packed_dl_240 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000240)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_mario_raceway_packed_dl_E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000E0)); + // d_course_mario_raceway_packed_dl_160 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000160)); +} + +void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { + UNUSED s32 pad[13]; + + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_choco_mountain_packed_dl_4608 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004608)); + } + gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE); + gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); + gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); + + gDPPipeSync(gDisplayListHead++); + gSPSetGeometryMode(gDisplayListHead++, G_FOG); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGB, G_CC_PASS2); + + gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + // d_course_choco_mountain_packed_dl_5A70 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005A70)); + // d_course_choco_mountain_packed_dl_828 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000828)); + // d_course_choco_mountain_packed_dl_8E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008E0)); + // d_course_choco_mountain_packed_dl_5868 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005868)); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + render_course_segments((uintptr_t) choco_mountain_dls, arg0); + + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); + gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); + // d_course_choco_mountain_packed_dl_448 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000448)); + // d_course_choco_mountain_packed_dl_5D8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070005D8)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_choco_mountain_packed_dl_718 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000718)); + gSPClearGeometryMode(gDisplayListHead++, G_FOG); + gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); + gDPPipeSync(gDisplayListHead++); +} + +void render_bowsers_castle(struct UnkStruct_800DC5EC* arg0) { + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_bowsers_castle_packed_dl_6A80 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07006A80)); + } + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + + D_802B87BC++; + if (D_802B87BC > 255) { + D_802B87BC = 0; + } + render_course_segments((uintptr_t) bowsers_castle_dls, arg0); + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + // d_course_bowsers_castle_packed_dl_248 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000248)); +} + +void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { + Camera* camera = arg0->camera; + Mat4 spCC; + UNUSED s32 pad[6]; + Vec3f spA8; + UNUSED s32 pad2[6]; + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); + // d_course_banshee_boardwalk_packed_dl_7228 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07007228)); + + gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); + + gDPPipeSync(gDisplayListHead++); + + gSPClearGeometryMode(gDisplayListHead++, + G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + // d_course_banshee_boardwalk_packed_dl_5CD0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005CD0)); + // d_course_banshee_boardwalk_packed_dl_4E60 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004E60)); + // d_course_banshee_boardwalk_packed_dl_69B0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070069B0)); + + render_course_segments((uintptr_t) banshee_boardwalk_dls, arg0); + + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH); + // d_course_banshee_boardwalk_packed_dl_580 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000580)); + // d_course_banshee_boardwalk_packed_dl_60 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000060)); + // d_course_banshee_boardwalk_packed_dl_540 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000540)); + + if (camera->pos[1] < -20.0f) { + // d_course_banshee_boardwalk_packed_dl_6310 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07006310)); + } + spA8[0] = camera->pos[0]; + spA8[1] = -82.0f; + spA8[2] = camera->pos[2]; + mtxf_translate(spCC, spA8); + render_set_position(spCC, 0); + + gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_dl_B278); + gDPPipeSync(gDisplayListHead++); +} + +void render_yoshi_valley(struct UnkStruct_800DC5EC* arg0) { + + gDPPipeSync(gDisplayListHead++); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + render_course_segments((uintptr_t) d_course_yoshi_valley_dl_list, arg0); + gDPPipeSync(gDisplayListHead++); +} + +void render_frappe_snowland(struct UnkStruct_800DC5EC* arg0) { + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_frappe_snowland_packed_dl_65E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070065E0)); + } + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + render_course_segments((uintptr_t) d_course_frappe_snowland_dl_list, arg0); +} + +void render_koopa_troopa_beach(struct UnkStruct_800DC5EC* arg0) { + + gDPPipeSync(gDisplayListHead++); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_koopa_troopa_beach_packed_dl_9CC0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07009CC0)); + } + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_koopa_troopa_beach_packed_dl_9688 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07009688)); + render_course_segments((uintptr_t) d_course_koopa_troopa_beach_dl_list1, arg0); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + // d_course_koopa_troopa_beach_packed_dl_2C0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070002C0)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPPipeSync(gDisplayListHead++); +} + +void render_royal_raceway(struct UnkStruct_800DC5EC* arg0) { + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_royal_raceway_packed_dl_B030 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700B030)); } - return i; + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_royal_raceway_packed_dl_A648 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700A648)); + + render_course_segments((uintptr_t) royal_raceway_dls, arg0); + + // d_course_royal_raceway_packed_dl_11A8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070011A8)); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_royal_raceway_packed_dl_8A0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008A0)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void func_802818BC(void) { - s32 temp_v0; +void render_luigi_raceway(struct UnkStruct_800DC5EC* arg0) { + UNUSED s32 pad; - s32 sp1C; - s32 temp_v0_2; + u16 sp22 = (u16) arg0->pathCounter; + s16 prevFrame; + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_luigi_raceway_packed_dl_9EC0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07009EC0)); + } + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + + render_course_segments((uintptr_t) luigi_raceway_dls, arg0); + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + // d_course_luigi_raceway_packed_dl_E0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000E0)); + // d_course_luigi_raceway_packed_dl_68 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000068)); + + D_800DC5DC = 88; + D_800DC5E0 = 72; + + // Render only the first player camera onto the television billboard. Screen agnostic screens of other players). + if ((gActiveScreenMode == SCREEN_MODE_1P) && (sp22 >= 10) && (sp22 < 17)) { + + prevFrame = (s16) sRenderedFramebuffer - 1; + + if (prevFrame < 0) { + prevFrame = 2; + } else if (prevFrame >= 3) { + prevFrame = 0; + } + currentScreenSection++; + if (currentScreenSection >= 6) { + currentScreenSection = 0; + } + /** + * The jumbo television screen is split into six sections each section is copied one at a time. + * This is done to fit within the n64's texture size requirements; 64x32 + */ + switch (currentScreenSection) { + case 0: + copy_framebuffer(D_800DC5DC, D_800DC5E0, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0xF800)); + break; + case 1: + copy_framebuffer(D_800DC5DC + 64, D_800DC5E0, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x10800)); + break; + case 2: + copy_framebuffer(D_800DC5DC, D_800DC5E0 + 32, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x11800)); + break; + case 3: + copy_framebuffer(D_800DC5DC + 64, D_800DC5E0 + 32, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x12800)); + break; + case 4: + copy_framebuffer(D_800DC5DC, D_800DC5E0 + 64, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x13800)); + break; + case 5: + copy_framebuffer(D_800DC5DC + 64, D_800DC5E0 + 64, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x14800)); + break; + } + } +} + +// Missing {} around if statements necessary for matching. +void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) { + UNUSED s32 pad[13]; + s16 temp_s0 = arg0->pathCounter; + s16 temp_s1 = arg0->playerDirection; + + func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_moo_moo_farm_packed_dl_4DF8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004DF8)); + // d_course_moo_moo_farm_packed_dl_5640 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005640)); + gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); + + render_course_segments((uintptr_t) moo_moo_farm_dls, arg0); + + if ((temp_s0 < 14) && (temp_s0 > 10)) { + if ((temp_s1 == 2) || (temp_s1 == 3) || (temp_s1 == 1)) + // + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); - if (gPlayerCount != TWO_PLAYERS_SELECTED) { - D_802874D8.unk1D = func_80281880(0); - D_802874D8.unk1E = gCharacterSelections[0]; + } else if (temp_s0 < 16) { + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); + } else if (temp_s0 < 19) { + if (temp_s1 != 2) + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); + + } else if (temp_s0 < 20) { + if (temp_s1 == 0) + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); + } + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + + if ((temp_s0 >= 16) && (temp_s0 < 24)) { + if ((temp_s1 == 2) || (temp_s1 == 3)) + // d_course_moo_moo_farm_packed_dl_5410 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005410)); + + } else if (temp_s0 < 9) { + if (temp_s1 == 2) + // d_course_moo_moo_farm_packed_dl_5410 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005410)); + } + if (temp_s0 < 4) { + if (temp_s1 != 0) + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); + + } else if (temp_s0 < 8) { + if (temp_s1 == 2) + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); + + } else if (temp_s0 >= 22) { + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); + } else if (temp_s0 >= 18) { + if ((temp_s1 == 0) || (temp_s1 == 3)) + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); + } + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + // d_course_moo_moo_farm_packed_dl_10C0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070010C0)); +} + +void render_toads_turnpike(struct UnkStruct_800DC5EC* arg0) { + UNUSED s32 pad[13]; + + func_802B5D64((uintptr_t) &D_800DC610, D_802B87D4, 0, 1); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); + gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE); + gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); + gSPSetGeometryMode(gDisplayListHead++, G_FOG); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_PASS2); + gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + + render_course_segments((uintptr_t) d_course_toads_turnpike_dl_list, arg0); + + gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); + gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); + // d_course_toads_turnpike_packed_dl_0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000000)); + // d_course_toads_turnpike_packed_dl_68 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000068)); + // d_course_toads_turnpike_packed_dl_D8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000D8)); + gSPClearGeometryMode(gDisplayListHead++, G_FOG); + gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); +} + +void render_kalimari_desert(struct UnkStruct_800DC5EC* arg0) { + + func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_kalimari_desert_packed_dl_71C8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070071C8)); + } + + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + render_course_segments((uintptr_t) kalimari_desert_dls, arg0); + // d_course_kalimari_desert_packed_dl_1ED8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001ED8)); + // d_course_kalimari_desert_packed_dl_1B18 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001B18)); + // d_course_kalimari_desert_packed_dl_8330 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07008330)); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + // d_course_kalimari_desert_packed_dl_998 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000998)); + // d_course_kalimari_desert_packed_dl_270 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000270)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); +} + +void render_sherbet_land(struct UnkStruct_800DC5EC* arg0) { + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + render_course_segments((uintptr_t) sherbet_land_dls, arg0); +} + +void render_rainbow_road(UNUSED struct UnkStruct_800DC5EC* arg0) { + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +} + +void render_wario_stadium(struct UnkStruct_800DC5EC* arg0) { + s16 prevFrame; + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_wario_stadium_packed_dl_A0C8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700A0C8)); + } + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGBA, G_CC_MODULATERGBA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + + render_course_segments((uintptr_t) wario_stadium_dls, arg0); + + // d_course_wario_stadium_packed_dl_A228 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700A228)); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_wario_stadium_packed_dl_A88 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000A88)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + + D_800DC5DC = 88; + D_800DC5E0 = 72; + if (gActiveScreenMode == SCREEN_MODE_1P) { + prevFrame = (s16) sRenderedFramebuffer - 1; + if (prevFrame < 0) { + prevFrame = 2; + } else if (prevFrame >= 3) { + prevFrame = 0; + } + currentScreenSection++; + if (currentScreenSection > 5) { + currentScreenSection = 0; + } + switch (currentScreenSection) { + case 0: + copy_framebuffer(D_800DC5DC, D_800DC5E0, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x8800)); + break; + case 1: + copy_framebuffer(D_800DC5DC + 64, D_800DC5E0, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0x9800)); + break; + case 2: + copy_framebuffer(D_800DC5DC, D_800DC5E0 + 32, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0xA800)); + break; + case 3: + copy_framebuffer(D_800DC5DC + 64, D_800DC5E0 + 32, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0xB800)); + break; + case 4: + copy_framebuffer(D_800DC5DC, D_800DC5E0 + 64, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0xC800)); + break; + case 5: + copy_framebuffer(D_800DC5DC + 64, D_800DC5E0 + 64, 64, 32, + (u16*) PHYSICAL_TO_VIRTUAL(gPhysicalFramebuffers[prevFrame]), + (u16*) PHYSICAL_TO_VIRTUAL(gSegmentTable[5] + 0xD800)); + break; + } + } +} + +void render_block_fort(UNUSED struct UnkStruct_800DC5EC* arg0) { + + func_802B5D64((uintptr_t) &D_800DC610, D_802B87D4, 0, 1); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + // d_course_block_fort_packed_dl_15C0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070015C0)); +} + +void render_skyscraper(UNUSED struct UnkStruct_800DC5EC* arg0) { + func_802B5D64((uintptr_t) &D_800DC610, D_802B87D4, 0, 1); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + // d_course_skyscraper_packed_dl_FE8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000FE8)); + // d_course_skyscraper_packed_dl_C60 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000C60)); + // d_course_skyscraper_packed_dl_B70 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000B70)); + // d_course_skyscraper_packed_dl_6B8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070006B8)); + // d_course_skyscraper_packed_dl_570 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000570)); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_skyscraper_packed_dl_10C8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070010C8)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_skyscraper_packed_dl_258 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000258)); +} + +void render_double_deck(UNUSED struct UnkStruct_800DC5EC* arg0) { + + func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_double_deck_packed_dl_738 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000738)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); +} + +void render_dks_jungle_parkway(struct UnkStruct_800DC5EC* arg0) { + + func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); + func_802B5D64((uintptr_t) &D_800DC610[1], D_802B87D4, D_802B87D0, 1); + + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK | G_LIGHTING); + + if (func_80290C20(arg0->camera) == 1) { + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_dks_jungle_parkway_packed_dl_92D8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070092D8)); + } + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); + render_course_segments((uintptr_t) d_course_dks_jungle_parkway_unknown_dl_list, arg0); + + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); +} + +void render_big_donut(struct UnkStruct_800DC5EC* arg0) { + + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + + if (func_80290C20(arg0->camera) == 1) { + gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); + // d_course_big_donut_packed_dl_DE8 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000DE8)); + } + // d_course_big_donut_packed_dl_450 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000450)); + // d_course_big_donut_packed_dl_AC0 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000AC0)); + // d_course_big_donut_packed_dl_D20 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000D20)); + // d_course_big_donut_packed_dl_230 + gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000230)); +} + +void func_8029569C(void) { + switch (gCurrentCourseId) { + case COURSE_MARIO_RACEWAY: + gSPDisplayList(gDisplayListHead++, d_course_mario_raceway_dl_9348); + break; + case COURSE_CHOCO_MOUNTAIN: + gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_dl_71B8); + break; + case COURSE_BOWSER_CASTLE: + gSPDisplayList(gDisplayListHead++, d_course_bowsers_castle_dl_9148); + break; + case COURSE_BANSHEE_BOARDWALK: + gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_dl_B308); + break; + case COURSE_YOSHI_VALLEY: + gSPDisplayList(gDisplayListHead++, d_course_yoshi_valley_dl_18020); + break; + case COURSE_FRAPPE_SNOWLAND: + gSPDisplayList(gDisplayListHead++, d_course_frappe_snowland_dl_76A0); + break; + case COURSE_KOOPA_BEACH: + gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_dl_18D68); + break; + case COURSE_ROYAL_RACEWAY: + gSPDisplayList(gDisplayListHead++, d_course_royal_raceway_dl_D8E8); + break; + case COURSE_LUIGI_RACEWAY: + gSPDisplayList(gDisplayListHead++, d_course_luigi_raceway_dl_FD40); + break; + case COURSE_MOO_MOO_FARM: + gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14088); + break; + case COURSE_TOADS_TURNPIKE: + gSPDisplayList(gDisplayListHead++, d_course_toads_turnpike_dl_23930); + break; + case COURSE_KALAMARI_DESERT: + gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22E00); + break; + case COURSE_SHERBET_LAND: + gSPDisplayList(gDisplayListHead++, d_course_sherbet_land_dl_9AE8); + break; + case COURSE_RAINBOW_ROAD: + gSPDisplayList(gDisplayListHead++, d_course_rainbow_road_dl_16220); + break; + case COURSE_WARIO_STADIUM: + gSPDisplayList(gDisplayListHead++, d_course_wario_stadium_dl_CA78); + break; + case COURSE_BLOCK_FORT: + gSPDisplayList(gDisplayListHead++, d_course_sherbet_land_dl_0); + break; + case COURSE_SKYSCRAPER: + gSPDisplayList(gDisplayListHead++, d_course_sherbet_land_dl_0); + break; + case COURSE_DOUBLE_DECK: + gSPDisplayList(gDisplayListHead++, d_course_sherbet_land_dl_0); + break; + case COURSE_DK_JUNGLE: + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_dl_13C30); + break; + case COURSE_BIG_DONUT: + gSPDisplayList(gDisplayListHead++, d_course_sherbet_land_dl_0); + break; + } +} + +void render_course(struct UnkStruct_800DC5EC* arg0) { + + func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); + if (creditsRenderMode) { + func_8029569C(); return; } - // weird pattern but if it matches it matches - temp_v0 = sp1C = func_80281880(0); - temp_v0_2 = func_80281880(1); - if (sp1C < temp_v0_2) { - D_802874D8.unk1E = gCharacterSelections[0]; - D_802874D8.unk1D = temp_v0; - } else { - D_802874D8.unk1E = gCharacterSelections[1]; - D_802874D8.unk1D = temp_v0_2; - } -} - -void load_ceremony_cutscene(void) { - Camera* camera = &cameras[0]; - - gCurrentCourseId = COURSE_ROYAL_RACEWAY; - D_800DC5B4 = (u16) 1; - gIsMirrorMode = 0; - gGotoMenu = 0xFFFF; - D_80287554 = 0; - func_802A4D18(); - func_802A74BC(); - camera->unk_B4 = 60.0f; - gCameraZoom[0] = 60.0f; - D_800DC5EC->screenWidth = SCREEN_WIDTH; - D_800DC5EC->screenHeight = SCREEN_HEIGHT; - D_800DC5EC->screenStartX = 160; - D_800DC5EC->screenStartY = 120; - gScreenModeSelection = SCREEN_MODE_1P; - gNextFreeMemoryAddress = (s32) gFreeMemoryResetAnchor; - gActiveScreenMode = SCREEN_MODE_1P; - gModeSelection = GRAND_PRIX; - load_course(gCurrentCourseId); - D_8015F730 = (s32) gNextFreeMemoryAddress; - set_segment_base_addr(0xB, (void*) decompress_segments((u8*) CEREMONY_DATA_ROM_START, (u8*) CEREMONY_DATA_ROM_END)); - set_segment_base_addr(6, (void*) decompress_segments((u8*) &_course_banshee_boardwalk_dl_mio0SegmentRomStart, - (u8*) &_course_yoshi_valley_dl_mio0SegmentRomStart)); - D_8015F8E4 = -2000.0f; - - gCourseMinX = -0x15A1; - gCourseMinY = -0x15A1; - gCourseMinZ = -0x15A1; - - gCourseMaxX = 0x15A1; - gCourseMaxY = 0x15A1; - gCourseMaxZ = 0x15A1; + + switch (gCurrentCourseId) { + case COURSE_MARIO_RACEWAY: + render_mario_raceway(arg0); + break; + case COURSE_CHOCO_MOUNTAIN: + render_choco_mountain(arg0); + break; + case COURSE_BOWSER_CASTLE: + render_bowsers_castle(arg0); + break; + case COURSE_BANSHEE_BOARDWALK: + render_banshee_boardwalk(arg0); + break; + case COURSE_YOSHI_VALLEY: + render_yoshi_valley(arg0); + break; + case COURSE_FRAPPE_SNOWLAND: + render_frappe_snowland(arg0); + break; + case COURSE_KOOPA_BEACH: + render_koopa_troopa_beach(arg0); + break; + case COURSE_ROYAL_RACEWAY: + render_royal_raceway(arg0); + break; + case COURSE_LUIGI_RACEWAY: + render_luigi_raceway(arg0); + break; + case COURSE_MOO_MOO_FARM: + render_moo_moo_farm(arg0); + break; + case COURSE_TOADS_TURNPIKE: + render_toads_turnpike(arg0); + break; + case COURSE_KALAMARI_DESERT: + render_kalimari_desert(arg0); + break; + case COURSE_SHERBET_LAND: + render_sherbet_land(arg0); + break; + case COURSE_RAINBOW_ROAD: + render_rainbow_road(arg0); + break; + case COURSE_WARIO_STADIUM: + render_wario_stadium(arg0); + break; + case COURSE_BLOCK_FORT: + render_block_fort(arg0); + break; + case COURSE_SKYSCRAPER: + render_skyscraper(arg0); + break; + case COURSE_DOUBLE_DECK: + render_double_deck(arg0); + break; + case COURSE_DK_JUNGLE: + render_dks_jungle_parkway(arg0); + break; + case COURSE_BIG_DONUT: + render_big_donut(arg0); + break; + } +} + +void func_80295BF8(s32 playerIndex) { + Player* player = &gPlayers[playerIndex]; + func_802AAAAC(&player->collision); + player->tyres[FRONT_RIGHT].surfaceFlags = 0; + player->tyres[FRONT_LEFT].surfaceFlags = 0; + player->tyres[BACK_RIGHT].surfaceFlags = 0; + player->tyres[BACK_LEFT].surfaceFlags = 0; + + player->tyres[FRONT_RIGHT].collisionMeshIndex = 0x1388; + player->tyres[FRONT_LEFT].collisionMeshIndex = 0x1388; + player->tyres[BACK_RIGHT].collisionMeshIndex = 0x1388; + player->tyres[BACK_LEFT].collisionMeshIndex = 0x1388; +} + +void func_80295C6C(void) { + gNextFreeMemoryAddress += ALIGN16(gCollisionMeshCount * sizeof(CollisionTriangle)); + gCourseMaxX += 20; + gCourseMaxZ += 20; + gCourseMinX += -20; + gCourseMinZ += -20; + gCourseMinY += -20; + generate_collision_grid(); + gNextFreeMemoryAddress += ALIGN16(gNumCollisionTriangles * sizeof(u16)); +} + +UNUSED void func_80295D50(s16 arg0, s16 arg1) { + D_8015F6F4 = arg1; + D_8015F6F6 = arg0; +} + +void func_80295D6C(void) { + D_8015F6F4 = 3000; + D_8015F6F6 = -3000; +} + +void func_80295D88(void) { + gNumActors = 0; + + gCourseMinX = 0; + gCourseMinY = 0; + gCourseMinZ = 0; + + gCourseMaxX = 0; + gCourseMaxY = 0; + gCourseMaxZ = 0; D_8015F59C = 0; D_8015F5A0 = 0; + func_80295D6C(); D_8015F58C = 0; - gCollisionMeshCount = (u16) 0; - D_800DC5BC = (u16) 0; - D_800DC5C8 = (u16) 0; + gCollisionMeshCount = 0; gCollisionMesh = (CollisionTriangle*) gNextFreeMemoryAddress; -//! @bug these segmented addresses need to be symbols for mobility -#ifdef AVOID_UB - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_67E8, -1); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_AEF8, -1); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A970, 8); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_AC30, 8); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_CE0, 0x10); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_E88, 0x10); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_A618, -1); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_23F8, 1); - generate_collision_mesh_with_default_section_id(d_course_royal_raceway_packed_dl_2478, 1); -#else - // d_course_royal_raceway_packed_dl_67E8 - generate_collision_mesh_with_default_section_id((Gfx*) 0x070067E8, -1); - // d_course_royal_raceway_packed_dl_AEF8 - generate_collision_mesh_with_default_section_id((Gfx*) 0x0700AEF8, -1); - // d_course_royal_raceway_packed_dl_A970 - generate_collision_mesh_with_default_section_id((Gfx*) 0x0700A970, 8); - // d_course_royal_raceway_packed_dl_AC30 - generate_collision_mesh_with_default_section_id((Gfx*) 0x0700AC30, 8); - // d_course_royal_raceway_packed_dl_CE0 - generate_collision_mesh_with_default_section_id((Gfx*) 0x07000CE0, 0x10); - // d_course_royal_raceway_packed_dl_E88 - generate_collision_mesh_with_default_section_id((Gfx*) 0x07000E88, 0x10); - // d_course_royal_raceway_packed_dl_A618 - generate_collision_mesh_with_default_section_id((Gfx*) 0x0700A618, -1); - // d_course_royal_raceway_packed_dl_A618 - generate_collision_mesh_with_default_section_id((Gfx*) 0x0700A618, -1); - // d_course_royal_raceway_packed_dl_23F8 - generate_collision_mesh_with_default_section_id((Gfx*) 0x070023F8, 1); - // d_course_royal_raceway_packed_dl_2478 - generate_collision_mesh_with_default_section_id((Gfx*) 0x07002478, 1); -#endif - func_80295C6C(); - debug_switch_character_ceremony_cutscene(); - func_802818BC(); - func_8003D080(); - init_hud(); - func_8001C05C(); - balloons_and_fireworks_init(); - func_802816B8(); - func_80093E60(); - D_801625F8 = (s32) gHeapEndPtr - gNextFreeMemoryAddress; - D_801625FC = ((f32) D_801625F8 / 1000.0f); + D_800DC5BC = 0; + D_800DC5C8 = 0; + switch (gCurrentCourseId) { + case COURSE_MARIO_RACEWAY: + // d_course_mario_raceway_packed_dl_1140 + generate_collision_mesh_with_defaults((Gfx*) 0x07001140); + if (gScreenModeSelection == SCREEN_MODE_1P) { + // d_course_mario_raceway_packed_dl_8E8 + generate_collision_mesh_with_defaults((Gfx*) 0x070008E8); + } else { + // d_course_mario_raceway_packed_dl_2D68 + generate_collision_mesh_with_defaults((Gfx*) 0x07002D68); + } + parse_course_displaylists((uintptr_t) d_course_mario_raceway_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_CHOCO_MOUNTAIN: + D_800DC5BC = 1; + D_801625EC = 255; + D_801625F4 = 255; + D_801625F0 = 255; + D_802B87B0 = 0x3E3; + D_802B87B4 = 0x3E8; + D_802B87D4 = 0x71C; + D_802B87D0 = 0xE38; + + // Spawn guardrail only for CC_50 and time trials. + if ((gCCSelection != CC_50) && (gModeSelection != TIME_TRIALS)) { + // d_course_choco_mountain_packed_dl_0 + nullify_displaylist((uintptr_t) 0x07000000); + // d_course_choco_mountain_packed_dl_98 + nullify_displaylist((uintptr_t) 0x07000098); + // d_course_choco_mountain_packed_dl_178 + nullify_displaylist((uintptr_t) 0x07000178); + // d_course_choco_mountain_packed_dl_280 + nullify_displaylist((uintptr_t) 0x07000280); + // d_course_choco_mountain_packed_dl_340 + nullify_displaylist((uintptr_t) 0x07000340); + // d_course_choco_mountain_packed_dl_3C8 + nullify_displaylist((uintptr_t) 0x070003C8); + } + parse_course_displaylists((uintptr_t) &d_course_choco_mountain_addr); + func_802B5CAC(0x238E, 0x31C7, D_8015F590); + func_80295C6C(); + D_8015F8E4 = -80.0f; + break; + case COURSE_BOWSER_CASTLE: + parse_course_displaylists((uintptr_t) d_course_bowsers_castle_addr); + func_80295C6C(); + // d_course_bowsers_castle_packed_dl_1350 + find_vtx_and_set_colours((uintptr_t) 0x07001350, 0x32, 0, 0, 0); + D_8015F8E4 = -50.0f; + break; + case COURSE_BANSHEE_BOARDWALK: + D_800DC5BC = 1; + D_801625EC = 0; + D_801625F4 = 0; + D_801625F0 = 0; + parse_course_displaylists((uintptr_t) d_course_banshee_boardwalk_track_sections); + func_80295C6C(); + // d_course_banshee_boardwalk_packed_dl_878 + find_vtx_and_set_colours((uintptr_t) 0x07000878, 128, 0, 0, 0); + D_8015F8E4 = -80.0f; + break; + case COURSE_YOSHI_VALLEY: + func_802B5D64((uintptr_t) &d_course_yoshi_valley_lights4, -0x38F0, 0x1C70, 1); + parse_course_displaylists((uintptr_t) d_course_yoshi_valley_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_FRAPPE_SNOWLAND: + parse_course_displaylists((uintptr_t) d_course_frappe_snowland_addr); + func_80295C6C(); + D_8015F8E4 = -50.0f; + break; + case COURSE_KOOPA_BEACH: + parse_course_displaylists((uintptr_t) d_course_koopa_troopa_beach_addr); + func_80295C6C(); + // d_course_koopa_troopa_beach_packed_dl_ADE0 + find_vtx_and_set_colours((uintptr_t) 0x0700ADE0, -0x6A, 255, 255, 255); + // d_course_koopa_troopa_beach_packed_dl_A540 + find_vtx_and_set_colours((uintptr_t) 0x0700A540, -0x6A, 255, 255, 255); + // d_course_koopa_troopa_beach_packed_dl_9E70 + find_vtx_and_set_colours((uintptr_t) 0x07009E70, -0x6A, 255, 255, 255); + // d_course_koopa_troopa_beach_packed_dl_358 + find_vtx_and_set_colours((uintptr_t) 0x07000358, -0x6A, 255, 255, 255); + break; + case COURSE_ROYAL_RACEWAY: + parse_course_displaylists((uintptr_t) d_course_royal_raceway_addr); + func_80295C6C(); + D_8015F8E4 = -60.0f; + break; + case COURSE_LUIGI_RACEWAY: + parse_course_displaylists((uintptr_t) d_course_luigi_raceway_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_MOO_MOO_FARM: + parse_course_displaylists((uintptr_t) d_course_moo_moo_farm_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_TOADS_TURNPIKE: + D_801625EC = 43; + D_801625F4 = 13; + D_801625F0 = 4; + D_802B87B0 = 993; + D_802B87B4 = 1000; + parse_course_displaylists((uintptr_t) d_course_toads_turnpike_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_KALAMARI_DESERT: + parse_course_displaylists((uintptr_t) d_course_kalimari_desert_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_SHERBET_LAND: + parse_course_displaylists((uintptr_t) d_course_sherbet_land_addr); + func_80295C6C(); + D_8015F8E4 = -18.0f; + // d_course_sherbet_land_packed_dl_1EB8 + find_vtx_and_set_colours((uintptr_t) 0x07001EB8, -0x4C, 255, 255, 255); + // d_course_sherbet_land_packed_dl_2308 + find_vtx_and_set_colours((uintptr_t) 0x07002308, -0x6A, 255, 255, 255); + break; + case COURSE_RAINBOW_ROAD: + D_800DC5C8 = 1; + parse_course_displaylists((uintptr_t) d_course_rainbow_road_addr); + func_80295C6C(); + D_8015F8E4 = 0.0f; + // d_course_rainbow_road_packed_dl_2068 + find_vtx_and_set_colours((uintptr_t) 0x07002068, -0x6A, 255, 255, 255); + // d_course_rainbow_road_packed_dl_1E18 + find_vtx_and_set_colours((uintptr_t) 0x07001E18, -0x6A, 255, 255, 255); + // d_course_rainbow_road_packed_dl_1318 + find_vtx_and_set_colours((uintptr_t) 0x07001318, 255, 255, 255, 0); + if (gGamestate != CREDITS_SEQUENCE) { + // d_course_rainbow_road_packed_dl_1FB8 + find_vtx_and_set_colours((uintptr_t) 0x07001FB8, -0x6A, 255, 255, 255); + } + break; + case COURSE_WARIO_STADIUM: + parse_course_displaylists((uintptr_t) d_course_wario_stadium_addr); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + // d_course_wario_stadium_packed_dl_C50 + find_vtx_and_set_colours((uintptr_t) 0x07000C50, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_BD8 + find_vtx_and_set_colours((uintptr_t) 0x07000BD8, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_B60 + find_vtx_and_set_colours((uintptr_t) 0x07000B60, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_AE8 + find_vtx_and_set_colours((uintptr_t) 0x07000AE8, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_CC8 + find_vtx_and_set_colours((uintptr_t) 0x07000CC8, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_D50 + find_vtx_and_set_colours((uintptr_t) 0x07000D50, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_DD0 + find_vtx_and_set_colours((uintptr_t) 0x07000DD0, 100, 255, 255, 255); + // d_course_wario_stadium_packed_dl_E48 + find_vtx_and_set_colours((uintptr_t) 0x07000E48, 100, 255, 255, 255); + break; + case COURSE_BLOCK_FORT: + // d_course_block_fort_packed_dl_15C0 + generate_collision_mesh_with_default_section_id((Gfx*) 0x070015C0, 1); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_SKYSCRAPER: + // d_course_skyscraper_packed_dl_1110 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07001110, 1); + // d_course_skyscraper_packed_dl_258 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07000258, 1); + func_80295C6C(); + + D_8015F8E4 = -480.0f; + break; + case COURSE_DOUBLE_DECK: + // d_course_double_deck_packed_dl_738 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07000738, 1); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; + break; + case COURSE_DK_JUNGLE: + parse_course_displaylists((uintptr_t) d_course_dks_jungle_parkway_addr); + func_80295C6C(); + D_8015F8E4 = -475.0f; + // d_course_dks_jungle_parkway_packed_dl_3FA8 + find_vtx_and_set_colours((uintptr_t) 0x07003FA8, 120, 255, 255, 255); + break; + case COURSE_BIG_DONUT: + // d_course_big_donut_packed_dl_1018 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07001018, 6); + // d_course_big_donut_packed_dl_450 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07000450, 6); + // d_course_big_donut_packed_dl_AC0 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07000AC0, 6); + // d_course_big_donut_packed_dl_B58 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07000B58, 6); + // d_course_big_donut_packed_dl_230 + generate_collision_mesh_with_default_section_id((Gfx*) 0x07000230, 6); + func_80295C6C(); + D_8015F8E4 = 100.0f; + break; + } +} + +void func_802966A0(void) { + + switch (gCurrentCourseId) { + case COURSE_KOOPA_BEACH: + // clang-format off + if (D_8015F8E8 < 0.0f) { + if (D_8015F8E4 < -20.0f) { D_8015F8E8 *= -1.0f; } + } else { + if (D_8015F8E4 > 0.0f) { D_8015F8E8 *= -1.0f; } + } + // clang-format on + D_8015F8E4 += D_8015F8E8; + + D_802B87BC += 9; + if (D_802B87BC > 255) { + D_802B87BC = 0; + } + D_802B87C4 += 3; + if (D_802B87C4 > 255) { + D_802B87C4 = 0; + } + // waterfall animation + // d_course_koopa_troopa_beach_packed_dl_9D58 + find_and_set_tile_size((uintptr_t) 0x07009D58, 0, D_802B87BC); + // d_course_koopa_troopa_beach_packed_dl_9CD0 + find_and_set_tile_size((uintptr_t) 0x07009CD0, 0, D_802B87C4); + D_802B87CC = random_int(300) / 40; + if (D_802B87C8 < 0) { + D_802B87C8 = random_int(300) / 40; + } else { + D_802B87C8 = -(random_int(300) / 40); + } + // Waterfall bubbling effect? (unused) + // d_course_koopa_troopa_beach_packed_dl_2E8 + find_and_set_tile_size((uintptr_t) 0x070002E8, D_802B87C8, D_802B87CC); + break; + case COURSE_BANSHEE_BOARDWALK: + D_802B87BC++; + + if (D_802B87BC >= 0x100) { + D_802B87BC = 0; + } + find_and_set_tile_size((uintptr_t) d_course_banshee_boardwalk_dl_B278, 0, D_802B87BC); + break; + case COURSE_ROYAL_RACEWAY: + D_802B87BC -= 20; + if (D_802B87BC < 0) { + D_802B87BC = 0xFF; + } + // d_course_royal_raceway_packed_dl_A6A8 + find_and_set_tile_size((uintptr_t) 0x0700A6A8, 0, D_802B87BC); + // d_course_royal_raceway_packed_dl_A648 + find_and_set_tile_size((uintptr_t) 0x0700A648, 0, D_802B87BC); + break; + case COURSE_DK_JUNGLE: + D_802B87BC += 2; + if (D_802B87BC > 255) { + D_802B87BC = 0; + } + // d_course_dks_jungle_parkway_packed_dl_3DD0 + find_and_set_tile_size((uintptr_t) 0x07003DD0, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_3E40 + find_and_set_tile_size((uintptr_t) 0x07003E40, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_3EB0 + find_and_set_tile_size((uintptr_t) 0x07003EB0, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_3F30 + find_and_set_tile_size((uintptr_t) 0x07003F30, 0, D_802B87BC); + // d_course_dks_jungle_parkway_packed_dl_36A8 + find_and_set_tile_size((uintptr_t) 0x070036A8, 0, D_802B87BC); + D_802B87C4 -= 20; + if (D_802B87C4 < 0) { + D_802B87C4 = 0xFF; + } + // d_course_dks_jungle_parkway_packed_dl_9880 + find_and_set_tile_size((uintptr_t) 0x07009880, 0, D_802B87C4); + evaluate_collision_players_palm_trees(); + break; + } +} + +void func_802969F8(void) { + + switch (gCurrentCourseId) { + case COURSE_MOO_MOO_FARM: + D_8015F702 = 0; + D_8015F700 = 200; + break; + case COURSE_KOOPA_BEACH: + D_8015F8E8 = -0.1f; + D_8015F8E4 = 0.0f; + break; + } } \ No newline at end of file From 8b7f8a7019d72d4459fe55a92ec72f57a073f33e Mon Sep 17 00:00:00 2001 From: coco875 Date: Fri, 30 Aug 2024 17:50:30 +0200 Subject: [PATCH 3/6] Update render_courses.c --- src/racing/render_courses.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index 62bbdb71e5..b0a30c32f6 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -1749,4 +1749,4 @@ void func_802969F8(void) { D_8015F8E4 = 0.0f; break; } -} \ No newline at end of file +} From f0029f9d1e82e7e4e98ccb80fa80260e36a36279 Mon Sep 17 00:00:00 2001 From: coco875 Date: Fri, 30 Aug 2024 17:51:22 +0200 Subject: [PATCH 4/6] Update code_800029B0.c --- src/code_800029B0.c | 132 ++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/src/code_800029B0.c b/src/code_800029B0.c index f8ec170084..5df8939b18 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -308,20 +308,20 @@ void func_80003040(void) { spawn_foliage(d_course_mario_raceway_tree_spawns); break; case COURSE_BOWSER_CASTLE: - #ifdef AVOID_UB - find_vtx_and_set_colours(d_course_bowsers_castle_packed_dl_1350, 0x32, 0, 0, 0); - #else - // d_course_bowsers_castle_packed_dl_1350 - find_vtx_and_set_colours(0x07001350, 0x32, 0, 0, 0); - #endif +#ifdef AVOID_UB + find_vtx_and_set_colours(d_course_bowsers_castle_packed_dl_1350, 0x32, 0, 0, 0); +#else + // d_course_bowsers_castle_packed_dl_1350 + find_vtx_and_set_colours(0x07001350, 0x32, 0, 0, 0); +#endif break; case COURSE_BANSHEE_BOARDWALK: - #ifdef AVOID_UB - find_vtx_and_set_colours(d_course_banshee_boardwalk_packed_dl_878, -0x80, 0, 0, 0); - #else - // d_course_banshee_boardwalk_packed_dl_878 - find_vtx_and_set_colours(0x07000878, -0x80, 0, 0, 0); - #endif +#ifdef AVOID_UB + find_vtx_and_set_colours(d_course_banshee_boardwalk_packed_dl_878, -0x80, 0, 0, 0); +#else + // d_course_banshee_boardwalk_packed_dl_878 + find_vtx_and_set_colours(0x07000878, -0x80, 0, 0, 0); +#endif break; case COURSE_YOSHI_VALLEY: vec3f_set(position, -2300.0f, 0.0f, 634.0f); @@ -344,29 +344,29 @@ void func_80003040(void) { spawn_foliage(d_course_moo_moo_farm_tree_spawn); break; case COURSE_SHERBET_LAND: - #ifdef AVOID_UB - find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_1EB8, -0x4C, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_2308, -0x6A, 0xFF, 0xFF, 0xFF); - #else - // d_course_sherbet_land_packed_dl_1EB8 - find_vtx_and_set_colours(0x07001EB8, -0x4C, 0xFF, 0xFF, 0xFF); - // d_course_sherbet_land_packed_dl_2308 - find_vtx_and_set_colours(0x07002308, -0x6A, 0xFF, 0xFF, 0xFF); - #endif +#ifdef AVOID_UB + find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_1EB8, -0x4C, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_sherbet_land_packed_dl_2308, -0x6A, 0xFF, 0xFF, 0xFF); +#else + // d_course_sherbet_land_packed_dl_1EB8 + find_vtx_and_set_colours(0x07001EB8, -0x4C, 0xFF, 0xFF, 0xFF); + // d_course_sherbet_land_packed_dl_2308 + find_vtx_and_set_colours(0x07002308, -0x6A, 0xFF, 0xFF, 0xFF); +#endif break; case COURSE_RAINBOW_ROAD: - #ifdef AVOID_UB - find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_2068, -0x6A, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1E18, -0x6A, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1318, -1, 0xFF, 0xFF, 0); - #else - // d_course_rainbow_road_packed_dl_2068 - find_vtx_and_set_colours(0x07002068, -0x6A, 0xFF, 0xFF, 0xFF); - // d_course_rainbow_road_packed_dl_1E18 - find_vtx_and_set_colours(0x07001E18, -0x6A, 0xFF, 0xFF, 0xFF); - // d_course_rainbow_road_packed_dl_1318 - find_vtx_and_set_colours(0x07001318, -1, 0xFF, 0xFF, 0); - #endif +#ifdef AVOID_UB + find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_2068, -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1E18, -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_rainbow_road_packed_dl_1318, -1, 0xFF, 0xFF, 0); +#else + // d_course_rainbow_road_packed_dl_2068 + find_vtx_and_set_colours(0x07002068, -0x6A, 0xFF, 0xFF, 0xFF); + // d_course_rainbow_road_packed_dl_1E18 + find_vtx_and_set_colours(0x07001E18, -0x6A, 0xFF, 0xFF, 0xFF); + // d_course_rainbow_road_packed_dl_1318 + find_vtx_and_set_colours(0x07001318, -1, 0xFF, 0xFF, 0); +#endif break; case COURSE_WARIO_STADIUM: vec3f_set(position, -131.0f, 83.0f, 286.0f); @@ -375,41 +375,41 @@ void func_80003040(void) { add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); vec3f_set(position, -2622.0f, 79.0f, 739.0f); add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN); - #ifdef AVOID_UB - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_C50, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_BD8, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_B60, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_AE8, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_CC8, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_D50, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_DD0, 0x64, 0xFF, 0xFF, 0xFF); - find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_E48, 0x64, 0xFF, 0xFF, 0xFF); - #else - // d_course_wario_stadium_packed_dl_C50 - find_vtx_and_set_colours(0x07000C50, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_BD8 - find_vtx_and_set_colours(0x07000BD8, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_B60 - find_vtx_and_set_colours(0x07000B60, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_AE8 - find_vtx_and_set_colours(0x07000AE8, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_CC8 - find_vtx_and_set_colours(0x07000CC8, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_D50 - find_vtx_and_set_colours(0x07000D50, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_DD0 - find_vtx_and_set_colours(0x07000DD0, 0x64, 0xFF, 0xFF, 0xFF); - // d_course_wario_stadium_packed_dl_E48 - find_vtx_and_set_colours(0x07000E48, 0x64, 0xFF, 0xFF, 0xFF); - #endif +#ifdef AVOID_UB + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_C50, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_BD8, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_B60, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_AE8, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_CC8, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_D50, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_DD0, 0x64, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(d_course_wario_stadium_packed_dl_E48, 0x64, 0xFF, 0xFF, 0xFF); +#else + // d_course_wario_stadium_packed_dl_C50 + find_vtx_and_set_colours(0x07000C50, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_BD8 + find_vtx_and_set_colours(0x07000BD8, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_B60 + find_vtx_and_set_colours(0x07000B60, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_AE8 + find_vtx_and_set_colours(0x07000AE8, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_CC8 + find_vtx_and_set_colours(0x07000CC8, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_D50 + find_vtx_and_set_colours(0x07000D50, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_DD0 + find_vtx_and_set_colours(0x07000DD0, 0x64, 0xFF, 0xFF, 0xFF); + // d_course_wario_stadium_packed_dl_E48 + find_vtx_and_set_colours(0x07000E48, 0x64, 0xFF, 0xFF, 0xFF); +#endif break; case COURSE_DK_JUNGLE: - #ifdef AVOID_UB - find_vtx_and_set_colours(d_course_dks_jungle_parkway_packed_dl_3FA8, 0x78, 0xFF, 0xFF, 0xFF); - #else - // d_course_dks_jungle_parkway_packed_dl_3FA8 - find_vtx_and_set_colours(0x07003FA8, 0x78, 0xFF, 0xFF, 0xFF); - #endif +#ifdef AVOID_UB + find_vtx_and_set_colours(d_course_dks_jungle_parkway_packed_dl_3FA8, 0x78, 0xFF, 0xFF, 0xFF); +#else + // d_course_dks_jungle_parkway_packed_dl_3FA8 + find_vtx_and_set_colours(0x07003FA8, 0x78, 0xFF, 0xFF, 0xFF); +#endif break; default: break; From 7f1c4eb49c92054cf7ae1ecc885b5467b93030b9 Mon Sep 17 00:00:00 2001 From: coco875 Date: Fri, 30 Aug 2024 18:20:07 +0200 Subject: [PATCH 5/6] redo avoid ub on render courses.c --- src/racing/render_courses.c | 644 +++++++++++++++++++++++++++++++++++- 1 file changed, 642 insertions(+), 2 deletions(-) diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index b0a30c32f6..a813581a3b 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -181,17 +181,29 @@ void render_course_segments(uintptr_t addr, struct UnkStruct_800DC5EC* arg1) { } void func_80291198(void) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_1140)); +#else // d_course_mario_raceway_packed_dl_1140 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001140)); +#endif } void func_802911C4(void) { if (gScreenModeSelection == SCREEN_MODE_1P) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_8E8)); +#else // d_course_mario_raceway_packed_dl_8E8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008E8)); +#endif } else { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_2D68)); +#else // d_course_mario_raceway_packed_dl_2D68 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07002D68)); +#endif } } @@ -264,8 +276,12 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); gDPSetBlendMask(gDisplayListHead++, 0xFF); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_banshee_boardwalk_packed_dl_878); +#else // d_course_banshee_boardwalk_packed_dl_878 gSPDisplayList(gDisplayListHead++, 0x07000878); +#endif gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); gDPPipeSync(gDisplayListHead++); break; @@ -286,8 +302,12 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 31: case 37: gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_koopa_troopa_beach_packed_dl_9E70); +#else // d_course_koopa_troopa_beach_packed_dl_9E70 gSPDisplayList(gDisplayListHead++, 0x07009E70); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); break; } @@ -326,8 +346,12 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER); gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_sherbet_land_packed_dl_2B48); +#else // d_course_sherbet_land_packed_dl_2B48 gSPDisplayList(gDisplayListHead++, 0x07002B48); +#endif } gDPPipeSync(gDisplayListHead++); break; @@ -358,8 +382,12 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2); gDPSetPrimColor(gDisplayListHead++, 0, 0, 0xFF, 0xFF, 0x00, 0xFF); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_wario_stadium_packed_dl_EC0); +#else // d_course_wario_stadium_packed_dl_EC0 gSPDisplayList(gDisplayListHead++, 0x07000EC0); +#endif gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); @@ -381,136 +409,272 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { if (pathCounter < 17) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif if ((pathCounter >= 6) && (pathCounter < 13)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3DD0); +#else // d_course_dks_jungle_parkway_packed_dl_3DD0 gSPDisplayList(gDisplayListHead++, 0x07003DD0); +#endif } } else if ((pathCounter == 21) || (pathCounter == 22)) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); +#endif } if ((playerDirection == 1) || (playerDirection == 0)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); +#endif } else { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); +#endif } } else if (pathCounter == 24) { if ((playerDirection == 0) || (playerDirection == 3)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); +#endif } } else if (pathCounter == 23) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); +#endif } else if (playerDirection == 0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); +#endif } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); switch (pathCounter) { case 5: if (playerDirection != 3) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3DD0); +#else // d_course_dks_jungle_parkway_packed_dl_3DD0 gSPDisplayList(gDisplayListHead++, 0x07003DD0); +#endif } break; case 17: switch (playerDirection) { case 0: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif break; case 1: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3DD0); +#else // d_course_dks_jungle_parkway_packed_dl_3DD0 gSPDisplayList(gDisplayListHead++, 0x07003DD0); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif break; case 2: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_); +#else // d_course_dks_jungle_parkway_packed_dl_ gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); +#endif break; case 3: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); +#endif break; } break; case 18: switch (playerDirection) { case 0: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif break; case 1: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3DD0); +#else // d_course_dks_jungle_parkway_packed_dl_3DD0 gSPDisplayList(gDisplayListHead++, 0x07003DD0); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif break; case 2: +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif break; } break; case 21: if ((playerDirection == 0) || (playerDirection == 1)) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); +#endif } else { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); +#endif } break; case 22: if (playerDirection == 0) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); +#endif } break; case 23: if (playerDirection != 1) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); +#endif } break; } @@ -531,8 +695,12 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_3050)); +#else // d_course_mario_raceway_packed_dl_3050 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003050)); +#endif } gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -613,26 +781,54 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_3508)); +#else // d_course_mario_raceway_packed_dl_3508 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003508)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_3240)); +#else // d_course_mario_raceway_packed_dl_3240 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003240)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_14A0)); +#else // d_course_mario_raceway_packed_dl_14A0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070014A0)); +#endif render_course_segments((uintptr_t) mario_raceway_dls, arg0); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_450)); +#else // d_course_mario_raceway_packed_dl_450 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000450)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_240)); +#else // d_course_mario_raceway_packed_dl_240 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000240)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_E0)); +#else // d_course_mario_raceway_packed_dl_E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000E0)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_160)); +#else // d_course_mario_raceway_packed_dl_160 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000160)); +#endif } void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { @@ -644,8 +840,12 @@ void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_4608)); +#else // d_course_choco_mountain_packed_dl_4608 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004608)); +#endif } gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE); gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); @@ -657,14 +857,30 @@ void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5A70)); +#else // d_course_choco_mountain_packed_dl_5A70 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005A70)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_828)); +#else // d_course_choco_mountain_packed_dl_828 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000828)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_8E0)); +#else // d_course_choco_mountain_packed_dl_8E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008E0)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5868)); +#else // d_course_choco_mountain_packed_dl_5868 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005868)); +#endif gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); render_course_segments((uintptr_t) choco_mountain_dls, arg0); @@ -672,13 +888,25 @@ void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_448)); +#else // d_course_choco_mountain_packed_dl_448 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000448)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5D8)); +#else // d_course_choco_mountain_packed_dl_5D8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070005D8)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_718)); +#else // d_course_choco_mountain_packed_dl_718 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000718)); +#endif gSPClearGeometryMode(gDisplayListHead++, G_FOG); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); gDPPipeSync(gDisplayListHead++); @@ -693,8 +921,12 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_bowsers_castle_packed_dl_6A80)); +#else // d_course_bowsers_castle_packed_dl_6A80 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07006A80)); +#endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -708,8 +940,12 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_bowsers_castle_packed_dl_248)); +#else // d_course_bowsers_castle_packed_dl_248 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000248)); +#endif } void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { @@ -721,8 +957,12 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_7228)); +#else // d_course_banshee_boardwalk_packed_dl_7228 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07007228)); +#endif gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); @@ -736,12 +976,24 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_5CD0)); +#else // d_course_banshee_boardwalk_packed_dl_5CD0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005CD0)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_4E60)); +#else // d_course_banshee_boardwalk_packed_dl_4E60 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004E60)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_69B0)); +#else // d_course_banshee_boardwalk_packed_dl_69B0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070069B0)); +#endif render_course_segments((uintptr_t) banshee_boardwalk_dls, arg0); @@ -750,16 +1002,32 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_580)); +#else // d_course_banshee_boardwalk_packed_dl_580 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000580)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_60)); +#else // d_course_banshee_boardwalk_packed_dl_60 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000060)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_540)); +#else // d_course_banshee_boardwalk_packed_dl_540 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000540)); +#endif if (camera->pos[1] < -20.0f) { +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_6310)); +#else // d_course_banshee_boardwalk_packed_dl_6310 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07006310)); +#endif } spA8[0] = camera->pos[0]; spA8[1] = -82.0f; @@ -790,8 +1058,12 @@ void render_frappe_snowland(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_frappe_snowland_packed_dl_65E0)); +#else // d_course_frappe_snowland_packed_dl_65E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070065E0)); +#endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -809,19 +1081,31 @@ void render_koopa_troopa_beach(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9CC0)); +#else // d_course_koopa_troopa_beach_packed_dl_9CC0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07009CC0)); +#endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9688)); +#else // d_course_koopa_troopa_beach_packed_dl_9688 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07009688)); +#endif render_course_segments((uintptr_t) d_course_koopa_troopa_beach_dl_list1, arg0); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_koopa_troopa_beach_packed_dl_2C0)); +#else // d_course_koopa_troopa_beach_packed_dl_2C0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070002C0)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPPipeSync(gDisplayListHead++); } @@ -835,24 +1119,40 @@ void render_royal_raceway(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_royal_raceway_packed_dl_B030)); +#else // d_course_royal_raceway_packed_dl_B030 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700B030)); +#endif } gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_royal_raceway_packed_dl_A648)); +#else // d_course_royal_raceway_packed_dl_A648 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700A648)); +#endif render_course_segments((uintptr_t) royal_raceway_dls, arg0); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_royal_raceway_packed_dl_11A8)); +#else // d_course_royal_raceway_packed_dl_11A8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070011A8)); +#endif gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_royal_raceway_packed_dl_8A0)); +#else // d_course_royal_raceway_packed_dl_8A0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008A0)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -869,8 +1169,12 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_luigi_raceway_packed_dl_9EC0)); +#else // d_course_luigi_raceway_packed_dl_9EC0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07009EC0)); +#endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -880,10 +1184,18 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_luigi_raceway_packed_dl_E0)); +#else // d_course_luigi_raceway_packed_dl_E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000E0)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_luigi_raceway_packed_dl_68)); +#else // d_course_luigi_raceway_packed_dl_68 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000068)); +#endif D_800DC5DC = 88; D_800DC5E0 = 72; @@ -953,10 +1265,18 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_4DF8)); +#else // d_course_moo_moo_farm_packed_dl_4DF8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004DF8)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_5640)); +#else // d_course_moo_moo_farm_packed_dl_5640 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005640)); +#endif gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); render_course_segments((uintptr_t) moo_moo_farm_dls, arg0); @@ -981,13 +1301,21 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) { if ((temp_s0 >= 16) && (temp_s0 < 24)) { if ((temp_s1 == 2) || (temp_s1 == 3)) +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_5410)); +#else // d_course_moo_moo_farm_packed_dl_5410 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005410)); +#endif } else if (temp_s0 < 9) { if (temp_s1 == 2) +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_5410)); +#else // d_course_moo_moo_farm_packed_dl_5410 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005410)); +#endif } if (temp_s0 < 4) { if (temp_s1 != 0) @@ -1005,8 +1333,12 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) { } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_10C0)); +#else // d_course_moo_moo_farm_packed_dl_10C0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070010C0)); +#endif } void render_toads_turnpike(struct UnkStruct_800DC5EC* arg0) { @@ -1027,12 +1359,24 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_0)); +#else // d_course_toads_turnpike_packed_dl_0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000000)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_68)); +#else // d_course_toads_turnpike_packed_dl_68 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000068)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_D8)); +#else // d_course_toads_turnpike_packed_dl_D8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000D8)); +#endif gSPClearGeometryMode(gDisplayListHead++, G_FOG); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); } @@ -1048,26 +1392,50 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_71C8)); +#else // d_course_kalimari_desert_packed_dl_71C8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070071C8)); +#endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); render_course_segments((uintptr_t) kalimari_desert_dls, arg0); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_1ED8)); +#else // d_course_kalimari_desert_packed_dl_1ED8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001ED8)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_1B18)); +#else // d_course_kalimari_desert_packed_dl_1B18 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001B18)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_8330)); +#else // d_course_kalimari_desert_packed_dl_8330 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07008330)); +#endif gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_998)); +#else // d_course_kalimari_desert_packed_dl_998 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000998)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_270)); +#else // d_course_kalimari_desert_packed_dl_270 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000270)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -1101,21 +1469,33 @@ void render_wario_stadium(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_wario_stadium_packed_dl_A0C8)); +#else // d_course_wario_stadium_packed_dl_A0C8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700A0C8)); +#endif } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATERGBA, G_CC_MODULATERGBA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); render_course_segments((uintptr_t) wario_stadium_dls, arg0); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_wario_stadium_packed_dl_A228)); +#else // d_course_wario_stadium_packed_dl_A228 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x0700A228)); +#endif gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_wario_stadium_packed_dl_A88)); +#else // d_course_wario_stadium_packed_dl_A88 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000A88)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); D_800DC5DC = 88; @@ -1172,8 +1552,12 @@ void render_block_fort(UNUSED struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_block_fort_packed_dl_15C0)); +#else // d_course_block_fort_packed_dl_15C0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070015C0)); +#endif } void render_skyscraper(UNUSED struct UnkStruct_800DC5EC* arg0) { @@ -1181,22 +1565,50 @@ void render_skyscraper(UNUSED struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_FE8)); +#else // d_course_skyscraper_packed_dl_FE8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000FE8)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_C60)); +#else // d_course_skyscraper_packed_dl_C60 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000C60)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_B70)); +#else // d_course_skyscraper_packed_dl_B70 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000B70)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_6B8)); +#else // d_course_skyscraper_packed_dl_6B8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070006B8)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_570)); +#else // d_course_skyscraper_packed_dl_570 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000570)); +#endif gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_10C8)); +#else // d_course_skyscraper_packed_dl_10C8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070010C8)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_258)); +#else // d_course_skyscraper_packed_dl_258 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000258)); +#endif } void render_double_deck(UNUSED struct UnkStruct_800DC5EC* arg0) { @@ -1206,8 +1618,12 @@ void render_double_deck(UNUSED struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_double_deck_packed_dl_738)); +#else // d_course_double_deck_packed_dl_738 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000738)); +#endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -1223,8 +1639,12 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_dks_jungle_parkway_packed_dl_92D8)); +#else // d_course_dks_jungle_parkway_packed_dl_92D8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070092D8)); +#endif } gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -1246,17 +1666,37 @@ void render_big_donut(struct UnkStruct_800DC5EC* arg0) { if (func_80290C20(arg0->camera) == 1) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_DE8)); +#else // d_course_big_donut_packed_dl_DE8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000DE8)); +#endif } +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_450)); +#else // d_course_big_donut_packed_dl_450 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000450)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_AC0)); +#else // d_course_big_donut_packed_dl_AC0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000AC0)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_D20)); +#else // d_course_big_donut_packed_dl_D20 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000D20)); +#endif +#ifdef AVOID_UB + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_230)); +#else // d_course_big_donut_packed_dl_230 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000230)); +#endif } void func_8029569C(void) { @@ -1452,14 +1892,26 @@ void func_80295D88(void) { D_800DC5C8 = 0; switch (gCurrentCourseId) { case COURSE_MARIO_RACEWAY: +#ifdef AVOID_UB + generate_collision_mesh_with_defaults((Gfx*) d_course_mario_raceway_packed_dl_1140); +#else // d_course_mario_raceway_packed_dl_1140 generate_collision_mesh_with_defaults((Gfx*) 0x07001140); +#endif if (gScreenModeSelection == SCREEN_MODE_1P) { +#ifdef AVOID_UB + generate_collision_mesh_with_defaults((Gfx*) d_course_mario_raceway_packed_dl_8E8); +#else // d_course_mario_raceway_packed_dl_8E8 generate_collision_mesh_with_defaults((Gfx*) 0x070008E8); +#endif } else { +#ifdef AVOID_UB + generate_collision_mesh_with_defaults((Gfx*) d_course_mario_raceway_packed_dl_2D68); +#else // d_course_mario_raceway_packed_dl_2D68 generate_collision_mesh_with_defaults((Gfx*) 0x07002D68); +#endif } parse_course_displaylists((uintptr_t) d_course_mario_raceway_addr); func_80295C6C(); @@ -1477,18 +1929,42 @@ void func_80295D88(void) { // Spawn guardrail only for CC_50 and time trials. if ((gCCSelection != CC_50) && (gModeSelection != TIME_TRIALS)) { +#ifdef AVOID_UB + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_0); +#else // d_course_choco_mountain_packed_dl_0 nullify_displaylist((uintptr_t) 0x07000000); +#endif +#ifdef AVOID_UB + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_98); +#else // d_course_choco_mountain_packed_dl_98 nullify_displaylist((uintptr_t) 0x07000098); +#endif +#ifdef AVOID_UB + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_178); +#else // d_course_choco_mountain_packed_dl_178 nullify_displaylist((uintptr_t) 0x07000178); +#endif +#ifdef AVOID_UB + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_280); +#else // d_course_choco_mountain_packed_dl_280 nullify_displaylist((uintptr_t) 0x07000280); +#endif +#ifdef AVOID_UB + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_340); +#else // d_course_choco_mountain_packed_dl_340 nullify_displaylist((uintptr_t) 0x07000340); +#endif +#ifdef AVOID_UB + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_3C8); +#else // d_course_choco_mountain_packed_dl_3C8 nullify_displaylist((uintptr_t) 0x070003C8); +#endif } parse_course_displaylists((uintptr_t) &d_course_choco_mountain_addr); func_802B5CAC(0x238E, 0x31C7, D_8015F590); @@ -1498,8 +1974,12 @@ void func_80295D88(void) { case COURSE_BOWSER_CASTLE: parse_course_displaylists((uintptr_t) d_course_bowsers_castle_addr); func_80295C6C(); +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_bowsers_castle_packed_dl_1350, 0x32, 0, 0, 0); +#else // d_course_bowsers_castle_packed_dl_1350 find_vtx_and_set_colours((uintptr_t) 0x07001350, 0x32, 0, 0, 0); +#endif D_8015F8E4 = -50.0f; break; case COURSE_BANSHEE_BOARDWALK: @@ -1509,8 +1989,12 @@ void func_80295D88(void) { D_801625F0 = 0; parse_course_displaylists((uintptr_t) d_course_banshee_boardwalk_track_sections); func_80295C6C(); +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_banshee_boardwalk_packed_dl_878, 128, 0, 0, 0); +#else // d_course_banshee_boardwalk_packed_dl_878 find_vtx_and_set_colours((uintptr_t) 0x07000878, 128, 0, 0, 0); +#endif D_8015F8E4 = -80.0f; break; case COURSE_YOSHI_VALLEY: @@ -1527,14 +2011,30 @@ void func_80295D88(void) { case COURSE_KOOPA_BEACH: parse_course_displaylists((uintptr_t) d_course_koopa_troopa_beach_addr); func_80295C6C(); +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_ADE0, -0x6A, 255, 255, 255); +#else // d_course_koopa_troopa_beach_packed_dl_ADE0 find_vtx_and_set_colours((uintptr_t) 0x0700ADE0, -0x6A, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_A540, -0x6A, 255, 255, 255); +#else // d_course_koopa_troopa_beach_packed_dl_A540 find_vtx_and_set_colours((uintptr_t) 0x0700A540, -0x6A, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9E70, -0x6A, 255, 255, 255); +#else // d_course_koopa_troopa_beach_packed_dl_9E70 find_vtx_and_set_colours((uintptr_t) 0x07009E70, -0x6A, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_358, -0x6A, 255, 255, 255); +#else // d_course_koopa_troopa_beach_packed_dl_358 find_vtx_and_set_colours((uintptr_t) 0x07000358, -0x6A, 255, 255, 255); +#endif break; case COURSE_ROYAL_RACEWAY: parse_course_displaylists((uintptr_t) d_course_royal_raceway_addr); @@ -1570,66 +2070,138 @@ void func_80295D88(void) { parse_course_displaylists((uintptr_t) d_course_sherbet_land_addr); func_80295C6C(); D_8015F8E4 = -18.0f; +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_sherbet_land_packed_dl_1EB8, -0x4C, 255, 255, 255); +#else // d_course_sherbet_land_packed_dl_1EB8 find_vtx_and_set_colours((uintptr_t) 0x07001EB8, -0x4C, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_sherbet_land_packed_dl_2308, -0x6A, 255, 255, 255); +#else // d_course_sherbet_land_packed_dl_2308 find_vtx_and_set_colours((uintptr_t) 0x07002308, -0x6A, 255, 255, 255); +#endif break; case COURSE_RAINBOW_ROAD: D_800DC5C8 = 1; parse_course_displaylists((uintptr_t) d_course_rainbow_road_addr); func_80295C6C(); D_8015F8E4 = 0.0f; +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_2068, -0x6A, 255, 255, 255); +#else // d_course_rainbow_road_packed_dl_2068 find_vtx_and_set_colours((uintptr_t) 0x07002068, -0x6A, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1E18, -0x6A, 255, 255, 255); +#else // d_course_rainbow_road_packed_dl_1E18 find_vtx_and_set_colours((uintptr_t) 0x07001E18, -0x6A, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1318, 255, 255, 255, 0); +#else // d_course_rainbow_road_packed_dl_1318 find_vtx_and_set_colours((uintptr_t) 0x07001318, 255, 255, 255, 0); +#endif if (gGamestate != CREDITS_SEQUENCE) { +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1FB8, -0x6A, 255, 255, 255); +#else // d_course_rainbow_road_packed_dl_1FB8 find_vtx_and_set_colours((uintptr_t) 0x07001FB8, -0x6A, 255, 255, 255); +#endif } break; case COURSE_WARIO_STADIUM: parse_course_displaylists((uintptr_t) d_course_wario_stadium_addr); func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_C50, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_C50 find_vtx_and_set_colours((uintptr_t) 0x07000C50, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_BD8, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_BD8 find_vtx_and_set_colours((uintptr_t) 0x07000BD8, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_B60, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_B60 find_vtx_and_set_colours((uintptr_t) 0x07000B60, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_AE8, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_AE8 find_vtx_and_set_colours((uintptr_t) 0x07000AE8, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_CC8, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_CC8 find_vtx_and_set_colours((uintptr_t) 0x07000CC8, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_D50, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_D50 find_vtx_and_set_colours((uintptr_t) 0x07000D50, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_DD0, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_DD0 find_vtx_and_set_colours((uintptr_t) 0x07000DD0, 100, 255, 255, 255); +#endif +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_E48, 100, 255, 255, 255); +#else // d_course_wario_stadium_packed_dl_E48 find_vtx_and_set_colours((uintptr_t) 0x07000E48, 100, 255, 255, 255); +#endif break; case COURSE_BLOCK_FORT: +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_block_fort_packed_dl_15C0, 1); +#else // d_course_block_fort_packed_dl_15C0 generate_collision_mesh_with_default_section_id((Gfx*) 0x070015C0, 1); +#endif func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; break; case COURSE_SKYSCRAPER: +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_skyscraper_packed_dl_1110, 1); +#else // d_course_skyscraper_packed_dl_1110 generate_collision_mesh_with_default_section_id((Gfx*) 0x07001110, 1); +#endif +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_skyscraper_packed_dl_258, 1); +#else // d_course_skyscraper_packed_dl_258 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000258, 1); +#endif func_80295C6C(); D_8015F8E4 = -480.0f; break; case COURSE_DOUBLE_DECK: +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_double_deck_packed_dl_738, 1); +#else // d_course_double_deck_packed_dl_738 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000738, 1); +#endif func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; break; @@ -1637,20 +2209,44 @@ void func_80295D88(void) { parse_course_displaylists((uintptr_t) d_course_dks_jungle_parkway_addr); func_80295C6C(); D_8015F8E4 = -475.0f; +#ifdef AVOID_UB + find_vtx_and_set_colours((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3FA8, 120, 255, 255, 255); +#else // d_course_dks_jungle_parkway_packed_dl_3FA8 find_vtx_and_set_colours((uintptr_t) 0x07003FA8, 120, 255, 255, 255); +#endif break; case COURSE_BIG_DONUT: +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_1018, 6); +#else // d_course_big_donut_packed_dl_1018 generate_collision_mesh_with_default_section_id((Gfx*) 0x07001018, 6); +#endif +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_450, 6); +#else // d_course_big_donut_packed_dl_450 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000450, 6); +#endif +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_AC0, 6); +#else // d_course_big_donut_packed_dl_AC0 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000AC0, 6); +#endif +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_B58, 6); +#else // d_course_big_donut_packed_dl_B58 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000B58, 6); +#endif +#ifdef AVOID_UB + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_230, 6); +#else // d_course_big_donut_packed_dl_230 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000230, 6); +#endif func_80295C6C(); D_8015F8E4 = 100.0f; break; @@ -1678,20 +2274,32 @@ void func_802966A0(void) { if (D_802B87C4 > 255) { D_802B87C4 = 0; } - // waterfall animation +// waterfall animation +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9D58, 0, D_802B87BC); +#else // d_course_koopa_troopa_beach_packed_dl_9D58 find_and_set_tile_size((uintptr_t) 0x07009D58, 0, D_802B87BC); +#endif +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9CD0, 0, D_802B87C4); +#else // d_course_koopa_troopa_beach_packed_dl_9CD0 find_and_set_tile_size((uintptr_t) 0x07009CD0, 0, D_802B87C4); +#endif D_802B87CC = random_int(300) / 40; if (D_802B87C8 < 0) { D_802B87C8 = random_int(300) / 40; } else { D_802B87C8 = -(random_int(300) / 40); } - // Waterfall bubbling effect? (unused) +// Waterfall bubbling effect? (unused) +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_koopa_troopa_beach_packed_dl_2E8, D_802B87C8, D_802B87CC); +#else // d_course_koopa_troopa_beach_packed_dl_2E8 find_and_set_tile_size((uintptr_t) 0x070002E8, D_802B87C8, D_802B87CC); +#endif break; case COURSE_BANSHEE_BOARDWALK: D_802B87BC++; @@ -1706,32 +2314,64 @@ void func_802966A0(void) { if (D_802B87BC < 0) { D_802B87BC = 0xFF; } +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_royal_raceway_packed_dl_A6A8, 0, D_802B87BC); +#else // d_course_royal_raceway_packed_dl_A6A8 find_and_set_tile_size((uintptr_t) 0x0700A6A8, 0, D_802B87BC); +#endif +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_royal_raceway_packed_dl_A648, 0, D_802B87BC); +#else // d_course_royal_raceway_packed_dl_A648 find_and_set_tile_size((uintptr_t) 0x0700A648, 0, D_802B87BC); +#endif break; case COURSE_DK_JUNGLE: D_802B87BC += 2; if (D_802B87BC > 255) { D_802B87BC = 0; } +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3DD0, 0, D_802B87BC); +#else // d_course_dks_jungle_parkway_packed_dl_3DD0 find_and_set_tile_size((uintptr_t) 0x07003DD0, 0, D_802B87BC); +#endif +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3E40, 0, D_802B87BC); +#else // d_course_dks_jungle_parkway_packed_dl_3E40 find_and_set_tile_size((uintptr_t) 0x07003E40, 0, D_802B87BC); +#endif +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3EB0, 0, D_802B87BC); +#else // d_course_dks_jungle_parkway_packed_dl_3EB0 find_and_set_tile_size((uintptr_t) 0x07003EB0, 0, D_802B87BC); +#endif +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3F30, 0, D_802B87BC); +#else // d_course_dks_jungle_parkway_packed_dl_3F30 find_and_set_tile_size((uintptr_t) 0x07003F30, 0, D_802B87BC); +#endif +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_36A8, 0, D_802B87BC); +#else // d_course_dks_jungle_parkway_packed_dl_36A8 find_and_set_tile_size((uintptr_t) 0x070036A8, 0, D_802B87BC); +#endif D_802B87C4 -= 20; if (D_802B87C4 < 0) { D_802B87C4 = 0xFF; } +#ifdef AVOID_UB + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_9880, 0, D_802B87C4); +#else // d_course_dks_jungle_parkway_packed_dl_9880 find_and_set_tile_size((uintptr_t) 0x07009880, 0, D_802B87C4); +#endif evaluate_collision_players_palm_trees(); break; } From a83cb580faa6110edc7d9b118b70efdd1d8f91de Mon Sep 17 00:00:00 2001 From: coco875 Date: Fri, 30 Aug 2024 23:46:48 +0200 Subject: [PATCH 6/6] Update render_courses.c --- src/racing/render_courses.c | 345 ++++++++---------------------------- 1 file changed, 69 insertions(+), 276 deletions(-) diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index a813581a3b..4eee9693e0 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -411,13 +411,10 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); #else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); #endif @@ -452,13 +449,10 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); #else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_36A8); -#else // d_course_dks_jungle_parkway_packed_dl_36A8 gSPDisplayList(gDisplayListHead++, 0x070036A8); #endif @@ -509,13 +503,10 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 0: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); #else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); #endif @@ -523,19 +514,13 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 1: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3DD0); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); #else // d_course_dks_jungle_parkway_packed_dl_3DD0 gSPDisplayList(gDisplayListHead++, 0x07003DD0); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); -#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); #endif @@ -543,19 +528,13 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 2: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); #else // d_course_dks_jungle_parkway_packed_dl_ gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); -#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); #endif @@ -563,13 +542,10 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 3: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); #else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); -#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); #endif @@ -581,13 +557,10 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 0: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); #else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); #endif @@ -595,19 +568,13 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 1: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3DD0); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); #else // d_course_dks_jungle_parkway_packed_dl_3DD0 gSPDisplayList(gDisplayListHead++, 0x07003DD0); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); -#else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); #endif @@ -615,13 +582,10 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { case 2: #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); #else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); #endif @@ -632,19 +596,13 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) { if ((playerDirection == 0) || (playerDirection == 1)) { #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3E40); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); + gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); #else // d_course_dks_jungle_parkway_packed_dl_3E40 gSPDisplayList(gDisplayListHead++, 0x07003E40); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3EB0); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 gSPDisplayList(gDisplayListHead++, 0x07003EB0); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, d_course_dks_jungle_parkway_packed_dl_3F30); -#else // d_course_dks_jungle_parkway_packed_dl_3F30 gSPDisplayList(gDisplayListHead++, 0x07003F30); #endif @@ -783,19 +741,13 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_3508)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_3240)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_14A0)); #else // d_course_mario_raceway_packed_dl_3508 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003508)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_3240)); -#else // d_course_mario_raceway_packed_dl_3240 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07003240)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_14A0)); -#else // d_course_mario_raceway_packed_dl_14A0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070014A0)); #endif @@ -806,26 +758,20 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_450)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_240)); #else // d_course_mario_raceway_packed_dl_450 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000450)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_240)); -#else // d_course_mario_raceway_packed_dl_240 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000240)); #endif gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_E0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_160)); #else // d_course_mario_raceway_packed_dl_E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000E0)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_mario_raceway_packed_dl_160)); -#else // d_course_mario_raceway_packed_dl_160 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000160)); #endif @@ -859,25 +805,16 @@ void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5A70)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_828)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_8E0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5868)); #else // d_course_choco_mountain_packed_dl_5A70 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005A70)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_828)); -#else // d_course_choco_mountain_packed_dl_828 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000828)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_8E0)); -#else // d_course_choco_mountain_packed_dl_8E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070008E0)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5868)); -#else // d_course_choco_mountain_packed_dl_5868 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005868)); #endif @@ -890,13 +827,10 @@ void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_448)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5D8)); #else // d_course_choco_mountain_packed_dl_448 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000448)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_choco_mountain_packed_dl_5D8)); -#else // d_course_choco_mountain_packed_dl_5D8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070005D8)); #endif @@ -978,19 +912,13 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_5CD0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_4E60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_69B0)); #else // d_course_banshee_boardwalk_packed_dl_5CD0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005CD0)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_4E60)); -#else // d_course_banshee_boardwalk_packed_dl_4E60 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004E60)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_69B0)); -#else // d_course_banshee_boardwalk_packed_dl_69B0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070069B0)); #endif @@ -1004,19 +932,13 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_580)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_540)); #else // d_course_banshee_boardwalk_packed_dl_580 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000580)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_60)); -#else // d_course_banshee_boardwalk_packed_dl_60 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000060)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_banshee_boardwalk_packed_dl_540)); -#else // d_course_banshee_boardwalk_packed_dl_540 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000540)); #endif @@ -1186,13 +1108,10 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_luigi_raceway_packed_dl_E0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_luigi_raceway_packed_dl_68)); #else // d_course_luigi_raceway_packed_dl_E0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000E0)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_luigi_raceway_packed_dl_68)); -#else // d_course_luigi_raceway_packed_dl_68 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000068)); #endif @@ -1267,13 +1186,10 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_4DF8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_5640)); #else // d_course_moo_moo_farm_packed_dl_4DF8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07004DF8)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_moo_moo_farm_packed_dl_5640)); -#else // d_course_moo_moo_farm_packed_dl_5640 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07005640)); #endif @@ -1361,19 +1277,13 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_68)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_D8)); #else // d_course_toads_turnpike_packed_dl_0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000000)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_68)); -#else // d_course_toads_turnpike_packed_dl_68 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000068)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_toads_turnpike_packed_dl_D8)); -#else // d_course_toads_turnpike_packed_dl_D8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070000D8)); #endif @@ -1405,19 +1315,13 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC* arg0) { render_course_segments((uintptr_t) kalimari_desert_dls, arg0); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_1ED8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_1B18)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_8330)); #else // d_course_kalimari_desert_packed_dl_1ED8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001ED8)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_1B18)); -#else // d_course_kalimari_desert_packed_dl_1B18 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07001B18)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_8330)); -#else // d_course_kalimari_desert_packed_dl_8330 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07008330)); #endif @@ -1426,13 +1330,10 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_998)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_270)); #else // d_course_kalimari_desert_packed_dl_998 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000998)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_kalimari_desert_packed_dl_270)); -#else // d_course_kalimari_desert_packed_dl_270 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000270)); #endif @@ -1567,31 +1468,19 @@ void render_skyscraper(UNUSED struct UnkStruct_800DC5EC* arg0) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_FE8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_C60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_B70)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_6B8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_570)); #else // d_course_skyscraper_packed_dl_FE8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000FE8)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_C60)); -#else // d_course_skyscraper_packed_dl_C60 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000C60)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_B70)); -#else // d_course_skyscraper_packed_dl_B70 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000B70)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_6B8)); -#else // d_course_skyscraper_packed_dl_6B8 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x070006B8)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_skyscraper_packed_dl_570)); -#else // d_course_skyscraper_packed_dl_570 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000570)); #endif @@ -1675,25 +1564,16 @@ void render_big_donut(struct UnkStruct_800DC5EC* arg0) { } #ifdef AVOID_UB gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_450)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_AC0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_D20)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_230)); #else // d_course_big_donut_packed_dl_450 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000450)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_AC0)); -#else // d_course_big_donut_packed_dl_AC0 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000AC0)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_D20)); -#else // d_course_big_donut_packed_dl_D20 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000D20)); -#endif -#ifdef AVOID_UB - gSPDisplayList(gDisplayListHead++, ((uintptr_t) d_course_big_donut_packed_dl_230)); -#else // d_course_big_donut_packed_dl_230 gSPDisplayList(gDisplayListHead++, ((uintptr_t) 0x07000230)); #endif @@ -1931,37 +1811,22 @@ void func_80295D88(void) { if ((gCCSelection != CC_50) && (gModeSelection != TIME_TRIALS)) { #ifdef AVOID_UB nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_0); + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_98); + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_178); + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_280); + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_340); + nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_3C8); #else // d_course_choco_mountain_packed_dl_0 nullify_displaylist((uintptr_t) 0x07000000); -#endif -#ifdef AVOID_UB - nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_98); -#else // d_course_choco_mountain_packed_dl_98 nullify_displaylist((uintptr_t) 0x07000098); -#endif -#ifdef AVOID_UB - nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_178); -#else // d_course_choco_mountain_packed_dl_178 nullify_displaylist((uintptr_t) 0x07000178); -#endif -#ifdef AVOID_UB - nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_280); -#else // d_course_choco_mountain_packed_dl_280 nullify_displaylist((uintptr_t) 0x07000280); -#endif -#ifdef AVOID_UB - nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_340); -#else // d_course_choco_mountain_packed_dl_340 nullify_displaylist((uintptr_t) 0x07000340); -#endif -#ifdef AVOID_UB - nullify_displaylist((uintptr_t) d_course_choco_mountain_packed_dl_3C8); -#else // d_course_choco_mountain_packed_dl_3C8 nullify_displaylist((uintptr_t) 0x070003C8); #endif @@ -2013,25 +1878,16 @@ void func_80295D88(void) { func_80295C6C(); #ifdef AVOID_UB find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_ADE0, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_A540, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9E70, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_358, -0x6A, 255, 255, 255); #else // d_course_koopa_troopa_beach_packed_dl_ADE0 find_vtx_and_set_colours((uintptr_t) 0x0700ADE0, -0x6A, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_A540, -0x6A, 255, 255, 255); -#else // d_course_koopa_troopa_beach_packed_dl_A540 find_vtx_and_set_colours((uintptr_t) 0x0700A540, -0x6A, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9E70, -0x6A, 255, 255, 255); -#else // d_course_koopa_troopa_beach_packed_dl_9E70 find_vtx_and_set_colours((uintptr_t) 0x07009E70, -0x6A, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_koopa_troopa_beach_packed_dl_358, -0x6A, 255, 255, 255); -#else // d_course_koopa_troopa_beach_packed_dl_358 find_vtx_and_set_colours((uintptr_t) 0x07000358, -0x6A, 255, 255, 255); #endif @@ -2072,13 +1928,10 @@ void func_80295D88(void) { D_8015F8E4 = -18.0f; #ifdef AVOID_UB find_vtx_and_set_colours((uintptr_t) d_course_sherbet_land_packed_dl_1EB8, -0x4C, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_sherbet_land_packed_dl_2308, -0x6A, 255, 255, 255); #else // d_course_sherbet_land_packed_dl_1EB8 find_vtx_and_set_colours((uintptr_t) 0x07001EB8, -0x4C, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_sherbet_land_packed_dl_2308, -0x6A, 255, 255, 255); -#else // d_course_sherbet_land_packed_dl_2308 find_vtx_and_set_colours((uintptr_t) 0x07002308, -0x6A, 255, 255, 255); #endif @@ -2090,19 +1943,13 @@ void func_80295D88(void) { D_8015F8E4 = 0.0f; #ifdef AVOID_UB find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_2068, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1E18, -0x6A, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1318, 255, 255, 255, 0); #else // d_course_rainbow_road_packed_dl_2068 find_vtx_and_set_colours((uintptr_t) 0x07002068, -0x6A, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1E18, -0x6A, 255, 255, 255); -#else // d_course_rainbow_road_packed_dl_1E18 find_vtx_and_set_colours((uintptr_t) 0x07001E18, -0x6A, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_rainbow_road_packed_dl_1318, 255, 255, 255, 0); -#else // d_course_rainbow_road_packed_dl_1318 find_vtx_and_set_colours((uintptr_t) 0x07001318, 255, 255, 255, 0); #endif @@ -2121,49 +1968,28 @@ void func_80295D88(void) { D_8015F8E4 = gCourseMinY - 10.0f; #ifdef AVOID_UB find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_C50, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_BD8, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_B60, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_AE8, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_CC8, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_D50, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_DD0, 100, 255, 255, 255); + find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_E48, 100, 255, 255, 255); #else // d_course_wario_stadium_packed_dl_C50 find_vtx_and_set_colours((uintptr_t) 0x07000C50, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_BD8, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_BD8 find_vtx_and_set_colours((uintptr_t) 0x07000BD8, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_B60, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_B60 find_vtx_and_set_colours((uintptr_t) 0x07000B60, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_AE8, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_AE8 find_vtx_and_set_colours((uintptr_t) 0x07000AE8, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_CC8, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_CC8 find_vtx_and_set_colours((uintptr_t) 0x07000CC8, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_D50, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_D50 find_vtx_and_set_colours((uintptr_t) 0x07000D50, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_DD0, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_DD0 find_vtx_and_set_colours((uintptr_t) 0x07000DD0, 100, 255, 255, 255); -#endif -#ifdef AVOID_UB - find_vtx_and_set_colours((uintptr_t) d_course_wario_stadium_packed_dl_E48, 100, 255, 255, 255); -#else // d_course_wario_stadium_packed_dl_E48 find_vtx_and_set_colours((uintptr_t) 0x07000E48, 100, 255, 255, 255); #endif @@ -2181,13 +2007,10 @@ void func_80295D88(void) { case COURSE_SKYSCRAPER: #ifdef AVOID_UB generate_collision_mesh_with_default_section_id((Gfx*) d_course_skyscraper_packed_dl_1110, 1); + generate_collision_mesh_with_default_section_id((Gfx*) d_course_skyscraper_packed_dl_258, 1); #else // d_course_skyscraper_packed_dl_1110 generate_collision_mesh_with_default_section_id((Gfx*) 0x07001110, 1); -#endif -#ifdef AVOID_UB - generate_collision_mesh_with_default_section_id((Gfx*) d_course_skyscraper_packed_dl_258, 1); -#else // d_course_skyscraper_packed_dl_258 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000258, 1); #endif @@ -2219,31 +2042,19 @@ void func_80295D88(void) { case COURSE_BIG_DONUT: #ifdef AVOID_UB generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_1018, 6); + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_450, 6); + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_AC0, 6); + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_B58, 6); + generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_230, 6); #else // d_course_big_donut_packed_dl_1018 generate_collision_mesh_with_default_section_id((Gfx*) 0x07001018, 6); -#endif -#ifdef AVOID_UB - generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_450, 6); -#else // d_course_big_donut_packed_dl_450 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000450, 6); -#endif -#ifdef AVOID_UB - generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_AC0, 6); -#else // d_course_big_donut_packed_dl_AC0 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000AC0, 6); -#endif -#ifdef AVOID_UB - generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_B58, 6); -#else // d_course_big_donut_packed_dl_B58 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000B58, 6); -#endif -#ifdef AVOID_UB - generate_collision_mesh_with_default_section_id((Gfx*) d_course_big_donut_packed_dl_230, 6); -#else // d_course_big_donut_packed_dl_230 generate_collision_mesh_with_default_section_id((Gfx*) 0x07000230, 6); #endif @@ -2277,13 +2088,10 @@ void func_802966A0(void) { // waterfall animation #ifdef AVOID_UB find_and_set_tile_size((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9D58, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9CD0, 0, D_802B87C4); #else // d_course_koopa_troopa_beach_packed_dl_9D58 find_and_set_tile_size((uintptr_t) 0x07009D58, 0, D_802B87BC); -#endif -#ifdef AVOID_UB - find_and_set_tile_size((uintptr_t) d_course_koopa_troopa_beach_packed_dl_9CD0, 0, D_802B87C4); -#else // d_course_koopa_troopa_beach_packed_dl_9CD0 find_and_set_tile_size((uintptr_t) 0x07009CD0, 0, D_802B87C4); #endif @@ -2316,13 +2124,10 @@ void func_802966A0(void) { } #ifdef AVOID_UB find_and_set_tile_size((uintptr_t) d_course_royal_raceway_packed_dl_A6A8, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) d_course_royal_raceway_packed_dl_A648, 0, D_802B87BC); #else // d_course_royal_raceway_packed_dl_A6A8 find_and_set_tile_size((uintptr_t) 0x0700A6A8, 0, D_802B87BC); -#endif -#ifdef AVOID_UB - find_and_set_tile_size((uintptr_t) d_course_royal_raceway_packed_dl_A648, 0, D_802B87BC); -#else // d_course_royal_raceway_packed_dl_A648 find_and_set_tile_size((uintptr_t) 0x0700A648, 0, D_802B87BC); #endif @@ -2334,31 +2139,19 @@ void func_802966A0(void) { } #ifdef AVOID_UB find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3DD0, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3E40, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3EB0, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3F30, 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_36A8, 0, D_802B87BC); #else // d_course_dks_jungle_parkway_packed_dl_3DD0 find_and_set_tile_size((uintptr_t) 0x07003DD0, 0, D_802B87BC); -#endif -#ifdef AVOID_UB - find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3E40, 0, D_802B87BC); -#else // d_course_dks_jungle_parkway_packed_dl_3E40 find_and_set_tile_size((uintptr_t) 0x07003E40, 0, D_802B87BC); -#endif -#ifdef AVOID_UB - find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3EB0, 0, D_802B87BC); -#else // d_course_dks_jungle_parkway_packed_dl_3EB0 find_and_set_tile_size((uintptr_t) 0x07003EB0, 0, D_802B87BC); -#endif -#ifdef AVOID_UB - find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_3F30, 0, D_802B87BC); -#else // d_course_dks_jungle_parkway_packed_dl_3F30 find_and_set_tile_size((uintptr_t) 0x07003F30, 0, D_802B87BC); -#endif -#ifdef AVOID_UB - find_and_set_tile_size((uintptr_t) d_course_dks_jungle_parkway_packed_dl_36A8, 0, D_802B87BC); -#else // d_course_dks_jungle_parkway_packed_dl_36A8 find_and_set_tile_size((uintptr_t) 0x070036A8, 0, D_802B87BC); #endif