#include #include #include #include #include #include #include #include "main.h" #include "actors.h" #include "math_util.h" #include "memory.h" #include "code_80281780.h" #include "collision.h" #include "render_courses.h" #include "skybox_and_splitscreen.h" #include "courses/all_course_data.h" #include "courses/all_course_packed.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->unk_54.unk34 == 0) { return 1; } if ((camera->unk_54.unk30 == 1) && (camera->unk_54.unk3C[0] < 3.0f)) { return 1; } if ((camera->unk_54.unk32 == 1) && (camera->unk_54.unk3C[1] < 3.0f)) { return 1; } return 0; } void parse_course_displaylists(uintptr_t arg0) { s32 segment = SEGMENT_NUMBER2(arg0); s32 offset = SEGMENT_OFFSET(arg0); TrackSections *data = (TrackSections *) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset); while(data->addr != 0) { if (data->flags & 0x8000) { D_8015F59C = 1; } else { D_8015F59C = 0; } if (data->flags & 0x2000) { D_8015F5A0 = 1; } else { D_8015F5A0 = 0; } if (data->flags & 0x4000) { D_8015F5A4 = 1; } else { D_8015F5A4 = 0; } find_and_set_vertex_data(data->addr, data->surfaceType, data->sectionId); data++; } } extern u16 D_80152300[]; void load_surface_map(uintptr_t arg0, struct UnkStruct_800DC5EC *arg1) { Player *temp_t1 = arg1->player; Camera *temp_a2 = arg1->camera; u32 segment = SEGMENT_NUMBER2(arg0); u32 offset = SEGMENT_OFFSET(arg0); // todo: Should be Gfx* s32 *addr = (s32 *) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset); s16 var_a3; s16 temp_v1; s16 sp1E; s16 temp_v0_3; u16 temp_v0; if (gIsMirrorMode) { temp_v0 = (u16) temp_a2->rot[1]; if (temp_v0 < 0x2000) { var_a3 = 2; } else if (temp_v0 < 0x6000) { var_a3 = 3; } else if (temp_v0 < 0xA000) { var_a3 = 0; } else if (temp_v0 < 0xE000) { var_a3 = 1; } else { var_a3 = 2; } } else { temp_v0 = (u16) temp_a2->rot[1]; if (temp_v0 < 0x2000) { var_a3 = 2; } else if (temp_v0 < 0x6000) { var_a3 = 1; } else if (temp_v0 < 0xA000) { var_a3 = 0; } else if (temp_v0 < 0xE000) { var_a3 = 3; } else { var_a3 = 2; } } arg1->playerDirection = var_a3; if (D_80152300[temp_a2 - camera1] == 1) { sp1E = func_802ABD40(temp_a2->unk_54.unk3A); temp_v0_3 = func_802ABD40(temp_t1->unk_110.unk3A); temp_v1 = sp1E - temp_v0_3; if ((temp_v1 < 2) && (temp_v1 >= -1)) { if (sp1E == 255) { if (temp_v0_3 == 255) { temp_v1 = arg1->pathCounter; } else if (temp_t1->unk_110.unk3C[2] > 30.0f) { temp_v1 = arg1->pathCounter; } else { temp_v1 = temp_v0_3; } } else if (temp_a2->unk_54.unk3C[2] > 30.0f) { temp_v1 = arg1->pathCounter; } else { temp_v1 = sp1E; } } else { switch(gCurrentCourseId) { case 2: if ((temp_v0_3 >= 0x11) && (temp_v0_3 < 0x18)) { temp_v1 = temp_v0_3; } else if ((temp_v0_3 == 255) && (sp1E != 255)) { temp_v1 = sp1E; } else if ((temp_v0_3 != 255) && (sp1E == 255)) { temp_v1 = temp_v0_3; } else { temp_v1 = arg1->pathCounter; } break; case 1: if ((temp_v0_3 >= 0xE) && (temp_v0_3 < 0x16)) { temp_v1 = temp_v0_3; } else if ((temp_v0_3 == 255) && (sp1E != 255)) { temp_v1 = sp1E; } else if ((temp_v0_3 != 255) && (sp1E == 255)) { temp_v1 = temp_v0_3; } else { temp_v1 = arg1->pathCounter; } break; default: if (temp_v0_3 == 255) { temp_v1 = arg1->pathCounter; } else if (temp_t1->unk_110.unk3C[2] > 30.0f) { temp_v1 = arg1->pathCounter; } else { temp_v1 = temp_v0_3; } break; } } } else { temp_v1 = func_802ABD40(temp_a2->unk_54.unk3A); if (temp_a2->unk_54.unk3C[2] > 30.0f) { temp_v1 = arg1->pathCounter; } else if (temp_v1 == 255) { temp_v1 = arg1->pathCounter; } } arg1->pathCounter = temp_v1; temp_v1 = ((temp_v1 - 1) * 4) + var_a3; gSPDisplayList(gDisplayListHead++, addr[temp_v1]); } 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 arg1) { 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 (arg1) { case 0: gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[1]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[7]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); break; case 1: gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[2]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[8]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); break; case 2: gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[3]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[9]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); break; case 3: gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[4]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPool[10]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); break; } mtxf_identity(matrix); func_802B4FF8(matrix, 0); switch (gCurrentCourseId) { case COURSE_BOWSER_CASTLE: if (gActiveScreenMode != 0) { 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); 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); func_802B4FF8(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); load_surface_map(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); func_802B4FF8(matrix, 0); load_surface_map((uintptr_t) &D_090001D0, 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); gSPDisplayList(gDisplayListHead++, 0x07002B48); } gDPPipeSync(gDisplayListHead++); break; case COURSE_RAINBOW_ROAD: gDPPipeSync(gDisplayListHead++); mtxf_identity(matrix); func_802B4FF8(matrix, 0); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); load_surface_map((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); func_802B4FF8(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); 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); func_802B4FF8(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); gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); if ((pathCounter >= 6) && (pathCounter < 13)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gSPDisplayList(gDisplayListHead++, 0x07003DD0); } } else if ((pathCounter == 21) || (pathCounter == 22)) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gSPDisplayList(gDisplayListHead++, 0x070036A8); } if ((playerDirection == 1) || (playerDirection == 0)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gSPDisplayList(gDisplayListHead++, 0x070036A8); } else { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gSPDisplayList(gDisplayListHead++, 0x07003F30); gSPDisplayList(gDisplayListHead++, 0x070036A8); } } else if (pathCounter == 24) { if ((playerDirection == 0) || (playerDirection == 3)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gSPDisplayList(gDisplayListHead++, 0x070036A8); } } else if (pathCounter == 23) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gSPDisplayList(gDisplayListHead++, 0x070036A8); } else if (playerDirection == 0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gSPDisplayList(gDisplayListHead++, 0x070036A8); } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); switch (pathCounter) { case 5: if (playerDirection != 3) { gSPDisplayList(gDisplayListHead++, 0x07003DD0); } break; case 17: switch (playerDirection) { case 0: gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); break; case 1: gSPDisplayList(gDisplayListHead++, 0x07003DD0); gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); break; case 2: gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); gSPDisplayList(gDisplayListHead++, 0x07003F30); break; case 3: gSPDisplayList(gDisplayListHead++, 0x07003EB0); gSPDisplayList(gDisplayListHead++, 0x07003F30); break; } break; case 18: switch (playerDirection) { case 0: gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); break; case 1: gSPDisplayList(gDisplayListHead++, 0x07003DD0); gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); break; case 2: gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); break; } break; case 21: if ((playerDirection == 0) || (playerDirection == 1)) { gSPDisplayList(gDisplayListHead++, 0x07003E40); gSPDisplayList(gDisplayListHead++, 0x07003EB0); gSPDisplayList(gDisplayListHead++, 0x07003F30); } else { gSPDisplayList(gDisplayListHead++, 0x07003EB0); } break; case 22: if (playerDirection == 0) { gSPDisplayList(gDisplayListHead++, 0x07003F30); } break; case 23: if (playerDirection != 1) { gSPDisplayList(gDisplayListHead++, 0x07003F30); } break; } gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); gDPPipeSync(gDisplayListHead++); break; } } 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)); load_surface_map((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); load_surface_map((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; } load_surface_map((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)); load_surface_map((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); func_802B4FF8(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); load_surface_map((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); load_surface_map((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)); load_surface_map((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)); } 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)); load_surface_map((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 render_luigi_raceway(struct UnkStruct_800DC5EC *arg0) { UNUSED s32 pad; 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); load_surface_map((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); load_surface_map((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); } 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); load_surface_map((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); load_surface_map((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); load_surface_map((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); load_surface_map((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); load_surface_map((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 func_80295A38(struct UnkStruct_800DC5EC *arg0) { func_802B5D64((uintptr_t) D_800DC610, D_802B87D4, 0, 1); if (D_800DC518 != 0) { func_8029569C(); return; } 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->unk_110); player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceFlags = 0; player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceFlags = 0; player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceFlags = 0; player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceFlags = 0; player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceMapIndex = 0x1388; player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceMapIndex = 0x1388; player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceMapIndex = 0x1388; player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceMapIndex = 0x1388; } void func_80295C6C(void) { gNextFreeMemoryAddress += ALIGN16(D_8015F588 * sizeof(mk64_surface_map_ram)); D_8015F6E8 += 20; D_8015F6F0 += 20; D_8015F6EA += -20; D_8015F6F2 += -20; D_8015F6EE += -20; func_802AF314(); gNextFreeMemoryAddress += ALIGN16(D_8015F58A * 2); } 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; D_8015F6EA = 0; D_8015F6EE = 0; D_8015F6F2 = 0; D_8015F6E8 = 0; D_8015F6EC = 0; D_8015F6F0 = 0; D_8015F59C = 0; D_8015F5A0 = 0; func_80295D6C(); D_8015F58C = 0; D_8015F588 = 0; gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress; D_800DC5BC = 0; D_800DC5C8 = 0; switch (gCurrentCourseId) { case COURSE_MARIO_RACEWAY: // d_course_mario_raceway_packed_dl_1140 set_vertex_data_with_defaults((uintptr_t)0x07001140); if (gScreenModeSelection == SCREEN_MODE_1P) { // d_course_mario_raceway_packed_dl_8E8 set_vertex_data_with_defaults((uintptr_t)0x070008E8); } else { // d_course_mario_raceway_packed_dl_2D68 set_vertex_data_with_defaults((uintptr_t)0x07002D68); } parse_course_displaylists((uintptr_t) d_course_mario_raceway_addr); func_80295C6C(); D_8015F8E4 = D_8015F6EE - 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(&d_course_yoshi_valley_lights4, -0x38F0, 0x1C70, 1); parse_course_displaylists((uintptr_t) d_course_yoshi_valley_addr); func_80295C6C(); D_8015F8E4 = D_8015F6EE - 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 = D_8015F6EE - 10.0f; break; case COURSE_MOO_MOO_FARM: parse_course_displaylists((uintptr_t) d_course_moo_moo_farm_addr); func_80295C6C(); D_8015F8E4 = D_8015F6EE - 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 = D_8015F6EE - 10.0f; break; case COURSE_KALAMARI_DESERT: parse_course_displaylists((uintptr_t) d_course_kalimari_desert_addr); func_80295C6C(); D_8015F8E4 = D_8015F6EE - 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 = D_8015F6EE - 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 set_vertex_data_with_default_section_id((uintptr_t)0x070015C0, 1); func_80295C6C(); D_8015F8E4 = D_8015F6EE - 10.0f; break; case COURSE_SKYSCRAPER: // d_course_skyscraper_packed_dl_1110 set_vertex_data_with_default_section_id((uintptr_t)0x07001110, 1); // d_course_skyscraper_packed_dl_258 set_vertex_data_with_default_section_id((uintptr_t)0x07000258, 1); func_80295C6C(); D_8015F8E4 = -480.0f; break; case COURSE_DOUBLE_DECK: // d_course_double_deck_packed_dl_738 set_vertex_data_with_default_section_id((uintptr_t)0x07000738, 1); func_80295C6C(); D_8015F8E4 = D_8015F6EE - 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 set_vertex_data_with_default_section_id((uintptr_t)0x07001018, 6); // d_course_big_donut_packed_dl_450 set_vertex_data_with_default_section_id((uintptr_t)0x07000450, 6); // d_course_big_donut_packed_dl_AC0 set_vertex_data_with_default_section_id((uintptr_t)0x07000AC0, 6); // d_course_big_donut_packed_dl_B58 set_vertex_data_with_default_section_id((uintptr_t)0x07000B58, 6); // d_course_big_donut_packed_dl_230 set_vertex_data_with_default_section_id((uintptr_t)0x07000230, 6); func_80295C6C(); D_8015F8E4 = 100.0f; break; } } void func_802966A0(void) { switch(gCurrentCourseId) { case COURSE_KOOPA_BEACH: if (D_8015F8E8 < 0.0f) { if (D_8015F8E4 < -20.0f) { D_8015F8E8 *= -1.0f; } } else { if (D_8015F8E4 > 0.0f) { D_8015F8E8 *= -1.0f; } } 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(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); func_80298C94(); 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; } }