From 3476fe0dbb7afb73a831f511d80d9437f6d58f63 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Sun, 11 Aug 2024 23:36:56 -0600 Subject: [PATCH] Battle (#45) * Battle courses --- src/racing/memory.c | 72 +++++++++++++++++++++++++++ src/racing/render_courses.c | 48 +++++++++--------- yamls/us/big_donut_data.yml | 22 ++++++++ yamls/us/big_donut_displaylists.yml | 17 +++++++ yamls/us/big_donut_vertices.yml | 15 ++++++ yamls/us/block_fort_data.yml | 22 ++++++++ yamls/us/block_fort_displaylists.yml | 17 +++++++ yamls/us/block_fort_vertices.yml | 15 ++++++ yamls/us/double_deck_data.yml | 22 ++++++++ yamls/us/double_deck_displaylists.yml | 17 +++++++ yamls/us/double_deck_vertices.yml | 15 ++++++ yamls/us/skyscraper_data.yml | 22 ++++++++ yamls/us/skyscraper_displaylists.yml | 17 +++++++ yamls/us/skyscraper_vertices.yml | 15 ++++++ 14 files changed, 312 insertions(+), 24 deletions(-) create mode 100644 yamls/us/big_donut_data.yml create mode 100644 yamls/us/big_donut_displaylists.yml create mode 100644 yamls/us/big_donut_vertices.yml create mode 100644 yamls/us/block_fort_data.yml create mode 100644 yamls/us/block_fort_displaylists.yml create mode 100644 yamls/us/block_fort_vertices.yml create mode 100644 yamls/us/double_deck_data.yml create mode 100644 yamls/us/double_deck_displaylists.yml create mode 100644 yamls/us/double_deck_vertices.yml create mode 100644 yamls/us/skyscraper_data.yml create mode 100644 yamls/us/skyscraper_displaylists.yml create mode 100644 yamls/us/skyscraper_vertices.yml diff --git a/src/racing/memory.c b/src/racing/memory.c index 837e6761c..6821251e5 100644 --- a/src/racing/memory.c +++ b/src/racing/memory.c @@ -30,6 +30,22 @@ #include #include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + #include #include @@ -1531,6 +1547,62 @@ NewCourseTable gNewCourseTable[] = { .textures = kalimari_desert_textures, .displaylists = d_course_kalimari_desert_packed_dls, .dlSize = 5328 + }, { // sherbet + .data = NULL, + .vtx = NULL, + .vtxSize = 0, + .textures = NULL, + .displaylists = NULL, + .dlSize = 0 + }, { // rainbow + .data = NULL, + .vtx = NULL, + .vtxSize = 0, + .textures = NULL, + .displaylists = NULL, + .dlSize = 0 + }, { // wario + .data = NULL, + .vtx = NULL, + .vtxSize = 0, + .textures = NULL, + .displaylists = NULL, + .dlSize = 0 + }, { // block fort + .data = d_course_block_fort_dl, + .vtx = d_course_block_fort_vertex, + .vtxSize = 1088, + .textures = block_fort_textures, + .displaylists = d_course_block_fort_packed_dls, + .dlSize = 699 + }, { // skyscraper + .data = d_course_skyscraper_dl, + .vtx = d_course_skyscraper_vertex, + .vtxSize = 1086, + .textures = skyscraper_textures, + .displaylists = d_course_skyscraper_packed_dls, + .dlSize = 548 + }, { // double decker + .data = d_course_double_deck_dl, + .vtx = d_course_double_deck_vertex, + .vtxSize = 555, + .textures = double_deck_textures, + .displaylists = d_course_double_deck_packed_dls, + .dlSize = 234 + }, { // dk jungle + .data = NULL, + .vtx = NULL, + .vtxSize = 0, + .textures = NULL, + .displaylists = NULL, + .dlSize = 0 + }, { // big donut + .data = d_course_big_donut_dl, + .vtx = d_course_big_donut_vertex, + .vtxSize = 1165, + .textures = big_donut_textures, + .displaylists = d_course_big_donut_packed_dls, + .dlSize = 528 } }; diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index 4149085e8..453660ea9 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -1173,7 +1173,7 @@ void render_block_fort(UNUSED struct UnkStruct_800DC5EC *arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); // d_course_block_fort_packed_dl_15C0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070015C0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x070015C0))); } @@ -1183,21 +1183,21 @@ void render_skyscraper(UNUSED struct UnkStruct_800DC5EC *arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); // d_course_skyscraper_packed_dl_FE8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000FE8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000FE8))); // d_course_skyscraper_packed_dl_C60 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000C60)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000C60))); // d_course_skyscraper_packed_dl_B70 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000B70)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000B70))); // d_course_skyscraper_packed_dl_6B8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070006B8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x070006B8))); // d_course_skyscraper_packed_dl_570 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000570)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000570))); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_skyscraper_packed_dl_10C8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070010C8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x070010C8))); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_skyscraper_packed_dl_258 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000258)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000258))); } @@ -1209,7 +1209,7 @@ void render_double_deck(UNUSED struct UnkStruct_800DC5EC *arg0) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_double_deck_packed_dl_738 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000738)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000738))); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } @@ -1249,16 +1249,16 @@ void render_big_donut(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_big_donut_packed_dl_DE8 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000DE8)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000DE8))); } // d_course_big_donut_packed_dl_450 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000450)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000450))); // d_course_big_donut_packed_dl_AC0 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000AC0)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000AC0))); // d_course_big_donut_packed_dl_D20 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000D20)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000D20))); // d_course_big_donut_packed_dl_230 - gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x07000230)); + gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x07000230))); } void func_8029569C(void) { @@ -1616,22 +1616,22 @@ void func_80295D88(void) { break; case COURSE_BLOCK_FORT: // d_course_block_fort_packed_dl_15C0 - generate_collision_mesh_with_default_section_id((Gfx *)0x070015C0, 1); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(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); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(0x07001110), 1); // d_course_skyscraper_packed_dl_258 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000258, 1); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(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); + generate_collision_mesh_with_default_section_id((Gfx *) segmented_gfx_to_virtual(0x07000738), 1); func_80295C6C(); D_8015F8E4 = gCourseMinY - 10.0f; break; @@ -1640,19 +1640,19 @@ void func_80295D88(void) { 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); + find_vtx_and_set_colours((uintptr_t)segmented_gfx_to_virtual(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); + generate_collision_mesh_with_default_section_id((Gfx *) segmented_gfx_to_virtual(0x07001018), 6); // d_course_big_donut_packed_dl_450 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000450, 6); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(0x07000450), 6); // d_course_big_donut_packed_dl_AC0 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000AC0, 6); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(0x07000AC0), 6); // d_course_big_donut_packed_dl_B58 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000B58, 6); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(0x07000B58), 6); // d_course_big_donut_packed_dl_230 - generate_collision_mesh_with_default_section_id((Gfx *)0x07000230, 6); + generate_collision_mesh_with_default_section_id((Gfx *)segmented_gfx_to_virtual(0x07000230), 6); func_80295C6C(); D_8015F8E4 = 100.0f; break; diff --git a/yamls/us/big_donut_data.yml b/yamls/us/big_donut_data.yml new file mode 100644 index 000000000..56dd752fd --- /dev/null +++ b/yamls/us/big_donut_data.yml @@ -0,0 +1,22 @@ +:config: + segments: + - [0x06, 0x88CC50] + - [0x07, 0x800000] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' + references_packed_displaylists: true +d_course_big_donut_dl: + symbol: d_course_big_donut_dl + type: gfx + offset: 0x0 + otr_mode: index +d_course_big_donut_item_box_spawns: + symbol: d_course_big_donut_item_box_spawns + type: mk64:spawn_data + count: 25 + offset: 0x58 diff --git a/yamls/us/big_donut_displaylists.yml b/yamls/us/big_donut_displaylists.yml new file mode 100644 index 000000000..eb57177ca --- /dev/null +++ b/yamls/us/big_donut_displaylists.yml @@ -0,0 +1,17 @@ +:config: + vram: + addr: 0x800E8700 # not used for anything + offset: 0x965A74 + no_compression: true + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_big_donut_packed_dls: + symbol: d_course_big_donut_packed_dls + type: blob + offset: 0x965A74 + size: 0x7EC diff --git a/yamls/us/big_donut_vertices.yml b/yamls/us/big_donut_vertices.yml new file mode 100644 index 000000000..78649de8f --- /dev/null +++ b/yamls/us/big_donut_vertices.yml @@ -0,0 +1,15 @@ +:config: + segments: + - [0x0F, 0x963EF0] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_big_donut_vertex: + symbol: d_course_big_donut_vertex + type: mk64:course_vtx + count: 1165 + offset: 0x0 diff --git a/yamls/us/block_fort_data.yml b/yamls/us/block_fort_data.yml new file mode 100644 index 000000000..57a762ed8 --- /dev/null +++ b/yamls/us/block_fort_data.yml @@ -0,0 +1,22 @@ +:config: + segments: + - [0x06, 0x885630] + - [0x07, 0x800000] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' + references_packed_displaylists: true +d_course_block_fort_dl: + symbol: d_course_block_fort_dl + type: gfx + offset: 0x0 + otr_mode: index +d_course_block_fort_item_box_spawns: + symbol: d_course_block_fort_item_box_spawns + type: mk64:spawn_data + count: 37 + offset: 0x38 diff --git a/yamls/us/block_fort_displaylists.yml b/yamls/us/block_fort_displaylists.yml new file mode 100644 index 000000000..6f57ba9a7 --- /dev/null +++ b/yamls/us/block_fort_displaylists.yml @@ -0,0 +1,17 @@ +:config: + vram: + addr: 0x800E8700 # not used for anything + offset: 0x953058 + no_compression: true + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_block_fort_packed_dls: + symbol: d_course_block_fort_packed_dls + type: blob + offset: 0x953058 + size: 0x829 diff --git a/yamls/us/block_fort_vertices.yml b/yamls/us/block_fort_vertices.yml new file mode 100644 index 000000000..b9e4a694c --- /dev/null +++ b/yamls/us/block_fort_vertices.yml @@ -0,0 +1,15 @@ +:config: + segments: + - [0x0F, 0x951780] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_block_fort_vertex: + symbol: d_course_block_fort_vertex + type: mk64:course_vtx + count: 1088 + offset: 0x0 diff --git a/yamls/us/double_deck_data.yml b/yamls/us/double_deck_data.yml new file mode 100644 index 000000000..d22b1d7b2 --- /dev/null +++ b/yamls/us/double_deck_data.yml @@ -0,0 +1,22 @@ +:config: + segments: + - [0x06, 0x8858A0] + - [0x07, 0x800000] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' + references_packed_displaylists: true +d_course_double_deck_dl: + symbol: d_course_double_deck_dl + type: gfx + offset: 0x0 + otr_mode: index +d_course_double_deck_item_box_spawns: + symbol: d_course_double_deck_item_box_spawns + type: mk64:spawn_data + count: 43 + offset: 0x28 diff --git a/yamls/us/double_deck_displaylists.yml b/yamls/us/double_deck_displaylists.yml new file mode 100644 index 000000000..27328ee47 --- /dev/null +++ b/yamls/us/double_deck_displaylists.yml @@ -0,0 +1,17 @@ +:config: + vram: + addr: 0x800E8700 # not used for anything + offset: 0x9562F4 + no_compression: true + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_double_deck_packed_dls: + symbol: d_course_double_deck_packed_dls + type: blob + offset: 0x9562F4 + size: 0x373 diff --git a/yamls/us/double_deck_vertices.yml b/yamls/us/double_deck_vertices.yml new file mode 100644 index 000000000..9f62e7610 --- /dev/null +++ b/yamls/us/double_deck_vertices.yml @@ -0,0 +1,15 @@ +:config: + segments: + - [0x0F, 0x955620] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_double_deck_vertex: + symbol: d_course_double_deck_vertex + type: mk64:course_vtx + count: 555 + offset: 0x0 diff --git a/yamls/us/skyscraper_data.yml b/yamls/us/skyscraper_data.yml new file mode 100644 index 000000000..81df6758c --- /dev/null +++ b/yamls/us/skyscraper_data.yml @@ -0,0 +1,22 @@ +:config: + segments: + - [0x06, 0x885780] + - [0x07, 0x800000] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' + references_packed_displaylists: true +d_course_skyscraper_dl: + symbol: d_course_skyscraper_dl + type: gfx + offset: 0x0 + otr_mode: index +d_course_skyscraper_item_box_spawns: + symbol: d_course_skyscraper_item_box_spawns + type: mk64:spawn_data + count: 25 + offset: 0x80 diff --git a/yamls/us/skyscraper_displaylists.yml b/yamls/us/skyscraper_displaylists.yml new file mode 100644 index 000000000..c4f3a04c5 --- /dev/null +++ b/yamls/us/skyscraper_displaylists.yml @@ -0,0 +1,17 @@ +:config: + vram: + addr: 0x800E8700 # not used for anything + offset: 0x954F08 + no_compression: true + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_skyscraper_packed_dls: + symbol: d_course_skyscraper_packed_dls + type: blob + offset: 0x954F08 + size: 0x711 diff --git a/yamls/us/skyscraper_vertices.yml b/yamls/us/skyscraper_vertices.yml new file mode 100644 index 000000000..3682335e5 --- /dev/null +++ b/yamls/us/skyscraper_vertices.yml @@ -0,0 +1,15 @@ +:config: + segments: + - [0x0F, 0x953890] + header: + code: + - '#include ' + header: + - '#include ' + - '#include ' + - '#include ' +d_course_skyscraper_vertex: + symbol: d_course_skyscraper_vertex + type: mk64:course_vtx + count: 1086 + offset: 0x0