Rename surface map to collision mesh (#637)

This commit is contained in:
MegaMech 2024-06-15 13:30:14 -06:00 committed by GitHub
parent bbf45b44de
commit 8389b71004
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 430 additions and 427 deletions

View File

@ -430,7 +430,7 @@ diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c
index c2a84aa..338e2bd 100644
--- a/src/racing/render_courses.c
+++ b/src/racing/render_courses.c
@@ -180,6 +180,11 @@ void load_surface_map(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
@@ -180,6 +180,11 @@ void render_course_segments(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
arg1->pathCounter = temp_v1;
temp_v1 = ((temp_v1 - 1) * 4) + var_a3;

View File

@ -203,15 +203,17 @@ typedef struct {
//bit 4: 1 = out of bounds
//bit 3: 1 = player tumbles upon contact (may fall right through)
/* 0x02 */ u16 surfaceType;
/* 0x04 */ s16 vtx31;
s16 vtx32;
s16 vtx33; //X, Y, Z of poly's third vertex
s16 vtx21;
s16 vtx22;
/* 0x0A */ s16 vtx23; //X, Y, Z of poly's second vertex
/* 0x10 */ Vtx *vtxPoly1; //pointer to the 3 vertices of this poly
Vtx *vtxPoly2;
Vtx *vtxPoly3;
// For AABB bounding-box style collision. Box style collision is cheaper than checking each vtx.
/* 0x04 */ s16 minX; // Minimum x coordinate
s16 minY; // Minimum y coordinate
s16 minZ; // Minimum z coordinate
s16 maxX; // Maximum x coordinate
s16 maxY; // Maximum y coordinate
/* 0x0A */ s16 maxZ; // Maximum z coordinate
/* 0x10 */ Vtx *vtx1; //pointer to the 3 vertices of this poly
Vtx *vtx2;
Vtx *vtx3;
//unsure why this exists along with a copy of two of the vertices.
//both are involved in hit detection.
/* 0x1C */ f32 height;
@ -227,17 +229,17 @@ typedef struct {
/* 0x24 */ f32 rotation; //normally about -0.001. no idea what this actually is.
/* 0x28 */ f32 height2; //changes Y position of all vertices (but not graphics or
//Lakitu drop position). Normally set to (track_height * -1) + about 6.
} mk64_surface_map_ram; // size = 0x2C
} CollisionTriangle; // size = 0x2C
typedef struct {
/* 0x00 */ Vec3f cornerPos;
// Type of surface the corner is above
/* 0x0C */ u8 surfaceType;
// Close to being a copy of the top byte of the surface_map "flag" member
// Close to being a copy of the top byte of the CollisionTriangle "flags" member
/* 0x0D */ u8 surfaceFlags;
// Don't know if "tile" is right the right term
// gSurfaceMap is a pointer to an array of "tile" structs. This is an index to that array
/* 0x0E */ u16 surfaceMapIndex;
// gCollisionMesh is a pointer to an array of "tile" structs. This is an index to that array
/* 0x0E */ u16 collisionMeshIndex;
// cornerPos places the corner "in the air" as it were, this member indicates the Y position of the corner's "on the ground" sibling
// On flat ground this value should be cornerY - gKartBoundingBoxTable[characterId]
/* 0x10 */ f32 cornerGroundY;

View File

@ -70,9 +70,9 @@ s16 gCreditsCourseId = COURSE_LUIGI_RACEWAY;
s16 gPlaceItemBoxes = 1;
// Technically a pointer to an array, but declaring it so creates regalloc issues.
mk64_surface_map_ram *gSurfaceMap;
CollisionTriangle *gCollisionMesh;
u16 *D_8015F584;
u16 D_8015F588; // Number of entries in gSurfaceMap
u16 gCollisionMeshCount; // Number of entries in gCollisionMesh
u16 D_8015F58A;
u32 D_8015F58C;

View File

@ -67,9 +67,9 @@ extern s32 gIsMirrorMode; // D_800DC604
extern s16 gCreditsCourseId;
extern s16 gPlaceItemBoxes;
extern mk64_surface_map_ram *gSurfaceMap;
extern CollisionTriangle *gCollisionMesh;
extern u16 *D_8015F584;
extern u16 D_8015F588;
extern u16 gCollisionMeshCount;
extern u16 D_8015F58A;
extern u32 D_8015F58C;

View File

@ -151,10 +151,10 @@ void load_credits(void) {
D_8015F59C = 0;
D_8015F5A0 = 0;
D_8015F58C = 0;
D_8015F588 = 0;
gCollisionMeshCount = 0;
D_800DC5BC = 0;
D_800DC5C8 = 0;
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
gCollisionMesh = (CollisionTriangle *) gNextFreeMemoryAddress;
camera->pos[0] = 1400.0f;
camera->pos[1] = 300.0f;
camera->pos[2] = 1400.0f;

View File

@ -127,31 +127,31 @@ void load_ceremony_cutscene(void) {
D_8015F59C = 0;
D_8015F5A0 = 0;
D_8015F58C = 0;
D_8015F588 = (u16)0;
gCollisionMeshCount = (u16)0;
D_800DC5BC = (u16)0;
D_800DC5C8 = (u16)0;
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
gCollisionMesh = (CollisionTriangle *) gNextFreeMemoryAddress;
//! @bug these segmented addresses need to be symbols for mobility
// d_course_royal_raceway_packed_dl_67E8
set_vertex_data_with_default_section_id((Gfx *)0x070067E8, -1);
generate_collision_mesh_with_default_section_id((Gfx *)0x070067E8, -1);
// d_course_royal_raceway_packed_dl_AEF8
set_vertex_data_with_default_section_id((Gfx *)0x0700AEF8, -1);
generate_collision_mesh_with_default_section_id((Gfx *)0x0700AEF8, -1);
// d_course_royal_raceway_packed_dl_A970
set_vertex_data_with_default_section_id((Gfx *)0x0700A970, 8);
generate_collision_mesh_with_default_section_id((Gfx *)0x0700A970, 8);
// d_course_royal_raceway_packed_dl_AC30
set_vertex_data_with_default_section_id((Gfx *)0x0700AC30, 8);
generate_collision_mesh_with_default_section_id((Gfx *)0x0700AC30, 8);
// d_course_royal_raceway_packed_dl_CE0
set_vertex_data_with_default_section_id((Gfx *)0x07000CE0, 0x10);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000CE0, 0x10);
// d_course_royal_raceway_packed_dl_E88
set_vertex_data_with_default_section_id((Gfx *)0x07000E88, 0x10);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000E88, 0x10);
// d_course_royal_raceway_packed_dl_A618
set_vertex_data_with_default_section_id((Gfx *)0x0700A618, -1);
generate_collision_mesh_with_default_section_id((Gfx *)0x0700A618, -1);
// d_course_royal_raceway_packed_dl_A618
set_vertex_data_with_default_section_id((Gfx *)0x0700A618, -1);
generate_collision_mesh_with_default_section_id((Gfx *)0x0700A618, -1);
// d_course_royal_raceway_packed_dl_23F8
set_vertex_data_with_default_section_id((Gfx *)0x070023F8, 1);
generate_collision_mesh_with_default_section_id((Gfx *)0x070023F8, 1);
// d_course_royal_raceway_packed_dl_2478
set_vertex_data_with_default_section_id((Gfx *)0x07002478, 1);
generate_collision_mesh_with_default_section_id((Gfx *)0x07002478, 1);
func_80295C6C();
debug_switch_character_ceremony_cutscene();
func_802818BC();

File diff suppressed because it is too large Load Diff

View File

@ -31,9 +31,9 @@ void set_vtx_buffer(uintptr_t, u32, u32);
s32 is_line_intersecting_rectangle(s16, s16, s16, s16, s16, s16, s16, s16);
s32 is_triangle_intersecting_bounding_box(s16, s16, s16, s16, u16);
void func_802AF314(void);
void set_vertex_data_with_defaults(Gfx*);
void set_vertex_data_with_default_section_id(Gfx*, s8);
void find_and_set_vertex_data(Gfx*, s8, u16);
void generate_collision_mesh_with_defaults(Gfx*);
void generate_collision_mesh_with_default_section_id(Gfx*, s8);
void generate_collision_mesh(Gfx*, s8, u16);
void find_and_set_tile_size(uintptr_t, s32, s32);
void set_vertex_colours(u32, u32, s32, s8, u8, u8, u8);
void find_vtx_and_set_colours(uintptr_t, s8, u8, u8, u8);

View File

@ -64,14 +64,14 @@ void parse_course_displaylists(uintptr_t addr) {
} else {
D_8015F5A4 = 0;
}
find_and_set_vertex_data(section->addr, section->surfaceType, section->sectionId);
generate_collision_mesh(section->addr, section->surfaceType, section->sectionId);
section++;
}
}
extern u32 isFlycam;
void load_surface_map(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
void render_course_segments(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
Player *player = arg1->player;
Camera *camera = arg1->camera;
u32 segment = SEGMENT_NUMBER2(addr);
@ -79,7 +79,7 @@ void load_surface_map(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
//! @todo Should be Gfx*
s32 *gfx = (s32 *) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset);
s16 var_a3;
s16 temp_v1;
s16 index;
s16 sp1E;
s16 temp_v0_3;
u16 rot;
@ -118,70 +118,70 @@ void load_surface_map(uintptr_t addr, struct UnkStruct_800DC5EC *arg1) {
if (D_80152300[camera - camera1] == 1) {
sp1E = func_802ABD40(camera->unk_54.unk3A);
temp_v0_3 = func_802ABD40(player->unk_110.unk3A);
temp_v1 = sp1E - temp_v0_3;
if ((temp_v1 < 2) && (temp_v1 >= -1)) {
index = sp1E - temp_v0_3;
if ((index < 2) && (index >= -1)) {
if (sp1E == 255) {
if (temp_v0_3 == 255) {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
} else if (player->unk_110.unk3C[2] > 30.0f) {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
} else {
temp_v1 = temp_v0_3;
index = temp_v0_3;
}
} else if (camera->unk_54.unk3C[2] > 30.0f) {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
} else {
temp_v1 = sp1E;
index = sp1E;
}
} else {
switch(gCurrentCourseId) {
case COURSE_BOWSER_CASTLE:
if ((temp_v0_3 >= 0x11) && (temp_v0_3 < 0x18)) {
temp_v1 = temp_v0_3;
index = temp_v0_3;
} else if ((temp_v0_3 == 255) && (sp1E != 255)) {
temp_v1 = sp1E;
index = sp1E;
} else if ((temp_v0_3 != 255) && (sp1E == 255)) {
temp_v1 = temp_v0_3;
index = temp_v0_3;
} else {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
}
break;
case COURSE_CHOCO_MOUNTAIN:
if ((temp_v0_3 >= 0xE) && (temp_v0_3 < 0x16)) {
temp_v1 = temp_v0_3;
index = temp_v0_3;
} else if ((temp_v0_3 == 255) && (sp1E != 255)) {
temp_v1 = sp1E;
index = sp1E;
} else if ((temp_v0_3 != 255) && (sp1E == 255)) {
temp_v1 = temp_v0_3;
index = temp_v0_3;
} else {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
}
break;
default:
if (temp_v0_3 == 255) {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
} else if (player->unk_110.unk3C[2] > 30.0f) {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
} else {
temp_v1 = temp_v0_3;
index = temp_v0_3;
}
break;
}
}
} else {
temp_v1 = func_802ABD40(camera->unk_54.unk3A);
index = func_802ABD40(camera->unk_54.unk3A);
if (camera->unk_54.unk3C[2] > 30.0f) {
temp_v1 = arg1->pathCounter;
} else if (temp_v1 == 255) {
temp_v1 = arg1->pathCounter;
index = arg1->pathCounter;
} else if (index == 255) {
index = arg1->pathCounter;
}
}
arg1->pathCounter = temp_v1;
temp_v1 = ((temp_v1 - 1) * 4) + var_a3;
arg1->pathCounter = index;
index = ((index - 1) * 4) + var_a3;
gSPDisplayList(gDisplayListHead++, gfx[temp_v1]);
gSPDisplayList(gDisplayListHead++, gfx[index]);
}
void func_80291198(void) {
@ -287,7 +287,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
gDPSetBlendMask(gDisplayListHead++, 0xFF);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
load_surface_map((uintptr_t)d_course_koopa_troopa_beach_dl_list2, arg0);
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);
@ -305,7 +305,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
mtxf_identity(matrix);
render_set_position(matrix, 0);
load_surface_map((uintptr_t) sherbet_land_dls_2, arg0);
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])) {
@ -322,7 +322,7 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
mtxf_identity(matrix);
render_set_position(matrix, 0);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
load_surface_map((uintptr_t) &d_course_rainbow_road_dl_list, arg0);
render_course_segments((uintptr_t) &d_course_rainbow_road_dl_list, arg0);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
gDPPipeSync(gDisplayListHead++);
@ -608,7 +608,7 @@ void render_mario_raceway(struct UnkStruct_800DC5EC *arg0) {
// d_course_mario_raceway_packed_dl_14A0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070014A0));
load_surface_map((uintptr_t) mario_raceway_dls, arg0);
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);
@ -655,7 +655,7 @@ void render_choco_mountain(struct UnkStruct_800DC5EC *arg0) {
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005868));
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
load_surface_map((uintptr_t) choco_mountain_dls, arg0);
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);
@ -693,7 +693,7 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC *arg0) {
if (D_802B87BC > 255) {
D_802B87BC = 0;
}
load_surface_map((uintptr_t) bowsers_castle_dls, arg0);
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);
@ -732,7 +732,7 @@ void render_banshee_boardwalk(struct UnkStruct_800DC5EC *arg0) {
// d_course_banshee_boardwalk_packed_dl_69B0
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070069B0));
load_surface_map((uintptr_t) banshee_boardwalk_dls, arg0);
render_course_segments((uintptr_t) banshee_boardwalk_dls, arg0);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@ -766,7 +766,7 @@ void render_yoshi_valley(struct UnkStruct_800DC5EC *arg0) {
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);
render_course_segments((uintptr_t) d_course_yoshi_valley_dl_list, arg0);
gDPPipeSync(gDisplayListHead++);
}
@ -785,7 +785,7 @@ void render_frappe_snowland(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);
load_surface_map((uintptr_t) d_course_frappe_snowland_dl_list, arg0);
render_course_segments((uintptr_t) d_course_frappe_snowland_dl_list, arg0);
}
void render_koopa_troopa_beach(struct UnkStruct_800DC5EC *arg0) {
@ -805,7 +805,7 @@ void render_koopa_troopa_beach(struct UnkStruct_800DC5EC *arg0) {
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);
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);
@ -833,7 +833,7 @@ void render_royal_raceway(struct UnkStruct_800DC5EC *arg0) {
// d_course_royal_raceway_packed_dl_A648
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A648));
load_surface_map((uintptr_t) royal_raceway_dls, arg0);
render_course_segments((uintptr_t) royal_raceway_dls, arg0);
// d_course_royal_raceway_packed_dl_11A8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070011A8));
@ -865,7 +865,7 @@ void render_luigi_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);
load_surface_map((uintptr_t) luigi_raceway_dls, arg0);
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);
@ -936,7 +936,7 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC *arg0) {
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07005640));
gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4);
load_surface_map((uintptr_t) moo_moo_farm_dls, arg0);
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))
@ -1003,7 +1003,7 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC *arg0) {
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);
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);
@ -1034,7 +1034,7 @@ void render_kalimari_desert(struct UnkStruct_800DC5EC *arg0) {
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);
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
@ -1058,7 +1058,7 @@ void render_sherbet_land(struct UnkStruct_800DC5EC *arg0) {
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);
render_course_segments((uintptr_t) sherbet_land_dls, arg0);
}
void render_rainbow_road(UNUSED struct UnkStruct_800DC5EC *arg0) {
@ -1088,7 +1088,7 @@ void render_wario_stadium(struct UnkStruct_800DC5EC *arg0) {
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);
render_course_segments((uintptr_t) wario_stadium_dls, arg0);
// d_course_wario_stadium_packed_dl_A228
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x0700A228));
@ -1201,7 +1201,7 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC *arg0) {
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);
render_course_segments((uintptr_t) d_course_dks_jungle_parkway_unknown_dl_list, arg0);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
@ -1375,14 +1375,14 @@ void func_80295BF8(s32 playerIndex) {
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;
player->boundingBoxCorners[FRONT_RIGHT_TYRE].collisionMeshIndex = 0x1388;
player->boundingBoxCorners[FRONT_LEFT_TYRE].collisionMeshIndex = 0x1388;
player->boundingBoxCorners[BACK_RIGHT_TYRE].collisionMeshIndex = 0x1388;
player->boundingBoxCorners[BACK_LEFT_TYRE].collisionMeshIndex = 0x1388;
}
void func_80295C6C(void) {
gNextFreeMemoryAddress += ALIGN16(D_8015F588 * sizeof(mk64_surface_map_ram));
gNextFreeMemoryAddress += ALIGN16(gCollisionMeshCount * sizeof(CollisionTriangle));
gCourseMaxX += 20;
gCourseMaxZ += 20;
gCourseMinX += -20;
@ -1417,20 +1417,20 @@ void func_80295D88(void) {
D_8015F5A0 = 0;
func_80295D6C();
D_8015F58C = 0;
D_8015F588 = 0;
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
gCollisionMeshCount = 0;
gCollisionMesh = (CollisionTriangle *) 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((Gfx *)0x07001140);
generate_collision_mesh_with_defaults((Gfx *)0x07001140);
if (gScreenModeSelection == SCREEN_MODE_1P) {
// d_course_mario_raceway_packed_dl_8E8
set_vertex_data_with_defaults((Gfx *)0x070008E8);
generate_collision_mesh_with_defaults((Gfx *)0x070008E8);
} else {
// d_course_mario_raceway_packed_dl_2D68
set_vertex_data_with_defaults((Gfx *)0x07002D68);
generate_collision_mesh_with_defaults((Gfx *)0x07002D68);
}
parse_course_displaylists((uintptr_t) d_course_mario_raceway_addr);
func_80295C6C();
@ -1585,22 +1585,22 @@ void func_80295D88(void) {
break;
case COURSE_BLOCK_FORT:
// d_course_block_fort_packed_dl_15C0
set_vertex_data_with_default_section_id((Gfx *)0x070015C0, 1);
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
set_vertex_data_with_default_section_id((Gfx *)0x07001110, 1);
generate_collision_mesh_with_default_section_id((Gfx *)0x07001110, 1);
// d_course_skyscraper_packed_dl_258
set_vertex_data_with_default_section_id((Gfx *)0x07000258, 1);
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
set_vertex_data_with_default_section_id((Gfx *)0x07000738, 1);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000738, 1);
func_80295C6C();
D_8015F8E4 = gCourseMinY - 10.0f;
break;
@ -1613,15 +1613,15 @@ void func_80295D88(void) {
break;
case COURSE_BIG_DONUT:
// d_course_big_donut_packed_dl_1018
set_vertex_data_with_default_section_id((Gfx *)0x07001018, 6);
generate_collision_mesh_with_default_section_id((Gfx *)0x07001018, 6);
// d_course_big_donut_packed_dl_450
set_vertex_data_with_default_section_id((Gfx *)0x07000450, 6);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000450, 6);
// d_course_big_donut_packed_dl_AC0
set_vertex_data_with_default_section_id((Gfx *)0x07000AC0, 6);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000AC0, 6);
// d_course_big_donut_packed_dl_B58
set_vertex_data_with_default_section_id((Gfx *)0x07000B58, 6);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000B58, 6);
// d_course_big_donut_packed_dl_230
set_vertex_data_with_default_section_id((Gfx *)0x07000230, 6);
generate_collision_mesh_with_default_section_id((Gfx *)0x07000230, 6);
func_80295C6C();
D_8015F8E4 = 100.0f;
break;

View File

@ -6,7 +6,7 @@
void func_8029122C(struct UnkStruct_800DC5EC*, s32);
s32 func_80290C20(Camera*);
void parse_course_displaylists(uintptr_t);
void load_surface_map(uintptr_t, struct UnkStruct_800DC5EC*);
void render_course_segments(uintptr_t, struct UnkStruct_800DC5EC*);
void func_80291198(void);
void func_802911C4(void);
void render_mario_raceway(struct UnkStruct_800DC5EC*);

View File

@ -301,10 +301,10 @@ void spawn_player(Player *player, s8 playerIndex, f32 startingRow, f32 startingC
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceFlags = 0;
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceFlags = 0;
player->boundingBoxCorners[FRONT_LEFT_TYRE].surfaceMapIndex = 0;
player->boundingBoxCorners[FRONT_RIGHT_TYRE].surfaceMapIndex = 0;
player->boundingBoxCorners[BACK_LEFT_TYRE].surfaceMapIndex = 0;
player->boundingBoxCorners[BACK_RIGHT_TYRE].surfaceMapIndex = 0;
player->boundingBoxCorners[FRONT_LEFT_TYRE].collisionMeshIndex = 0;
player->boundingBoxCorners[FRONT_RIGHT_TYRE].collisionMeshIndex = 0;
player->boundingBoxCorners[BACK_LEFT_TYRE].collisionMeshIndex = 0;
player->boundingBoxCorners[BACK_RIGHT_TYRE].collisionMeshIndex = 0;
player->boundingBoxCorners[FRONT_RIGHT_TYRE].unk_14 = 0;
player->boundingBoxCorners[FRONT_LEFT_TYRE].unk_14 = 0;