diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2024-11-14 23:32:55 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-14 23:32:55 -0700 |
| commit | 475f167bb2803999c5116bc285601d1f9a05d7de (patch) | |
| tree | 859fec292c5c9807cc9690ebf4f0600f558b6063 /src/engine/courses/MarioRaceway.cpp | |
| parent | 4fbb031dd95f2a84e73fbca269f517e98808d293 (diff) | |
[modding] Big Update PR (#118)
* Implement kart vehicle
* Fix menu CC
* Actors
* variable framerate
* Implement Actors vector
* Fix water & scrolling textures
* Finish ACoin
* Refactor finishline
* Refactor mtx to vector
* Fix refactored screen code bugs
* Fix playlist bug
* Switching courses working now
* Fix podium ceremony
* Mostly Fix Demo and Credits
* Credits Load Actors and Textures
* Fix credits
* Formatting
* Update lus and torch
* Fix water features
* Fix crabs
* Combine function
* Fix wheels
* Add Moon Jump Cheat
* Wheel Change
* Fix smoke due to wheel change
* Fix screens for wheels
* Fix transparency
* Fix staff ghost
* Fix lakitu transition widescreen
* Rename and export credits text
* Fixes
---------
Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/engine/courses/MarioRaceway.cpp')
| -rw-r--r-- | src/engine/courses/MarioRaceway.cpp | 68 |
1 files changed, 41 insertions, 27 deletions
diff --git a/src/engine/courses/MarioRaceway.cpp b/src/engine/courses/MarioRaceway.cpp index 2900ad36e..f93b76762 100644 --- a/src/engine/courses/MarioRaceway.cpp +++ b/src/engine/courses/MarioRaceway.cpp @@ -6,7 +6,8 @@ #include "MarioRaceway.h" #include "GameObject.h" #include "World.h" -#include "BombKart.h" +#include "engine/actors/AFinishline.h" +#include "engine/vehicles/OBombKart.h" extern "C" { #include "main.h" @@ -29,6 +30,7 @@ extern "C" { #include "mario_raceway_data.h" #include "collision.h" #include "memory.h" + #include "courses/staff_ghost_data.h" extern const char *mario_raceway_dls[]; } @@ -102,6 +104,23 @@ MarioRaceway::MarioRaceway() { Props.Skybox.FloorTopLeft = {0, 0, 0}; } +void MarioRaceway::Load() { + Course::Load(); + + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07001140))); + if (gScreenModeSelection == SCREEN_MODE_1P) { + // d_course_mario_raceway_packed_dl_8E8 + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x070008E8))); + } else { + // d_course_mario_raceway_packed_dl_2D68 + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07002D68))); + } + + parse_course_displaylists((TrackSectionsI*)LOAD_ASSET_RAW(d_course_mario_raceway_addr)); + func_80295C6C(); + D_8015F8E4 = gCourseMinY - 10.0f; +} + void MarioRaceway::LoadTextures() { dma_textures(gTextureTrees1, 0x0000035BU, 0x00000800U); D_802BA058 = dma_textures(gTexturePiranhaPlant1, 0x000003E8U, 0x00000800U); @@ -120,6 +139,9 @@ void MarioRaceway::SpawnActors() { Vec3f position; Vec3f velocity = { 0.0f, 0.0f, 0.0f }; Vec3s rotation = { 0, 0, 0 }; + + gWorldInstance.AddActor(new AFinishline()); + spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_tree_spawns)); spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_piranha_plant_spawns)); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_item_box_spawns)); @@ -128,8 +150,21 @@ void MarioRaceway::SpawnActors() { add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN); vec3f_set(position, 2520.0f, 0.0f, 1240.0f); position[0] *= gCourseDirection; - actor = &gActorList[add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN)]; - actor->flags |= 0x4000; + add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN); +} + +void MarioRaceway::SpawnVehicles() { + if (gModeSelection == VERSUS) { + Vec3f pos = {0, 0, 0}; + + gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 3, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][265], 265, 3, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][285], 285, 1, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][420], 420, 1, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + } } // Likely sets minimap boundaries @@ -192,16 +227,6 @@ void MarioRaceway::WhatDoesThisDoAI(Player* player, int8_t playerId) { } } -void MarioRaceway::SpawnBombKarts() { - gWorldInstance.AddObject(std::make_unique<OBombKart>(40, 3, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(100, 3, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(265, 3, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(285, 1, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(420, 1, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(0, 0, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(0, 0, 0.8333333, 0, 0, 0, 0)); -} - // Positions the finishline on the minimap void MarioRaceway::MinimapFinishlinePosition() { //! todo: Place hard-coded values here. @@ -221,7 +246,6 @@ void MarioRaceway::SetStaffGhost() { D_80162DE4 = 0; } -void MarioRaceway::BeginPlay() { } void MarioRaceway::Render(struct UnkStruct_800DC5EC* arg0) { u16 sp22 = arg0->pathCounter; u16 temp_t0 = arg0->playerDirection; @@ -333,19 +357,9 @@ void MarioRaceway::RenderCredits() { void MarioRaceway::Collision() {} -void MarioRaceway::GenerateCollision() { - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07001140))); - if (gScreenModeSelection == SCREEN_MODE_1P) { - // d_course_mario_raceway_packed_dl_8E8 - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x070008E8))); - } else { - // d_course_mario_raceway_packed_dl_2D68 - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07002D68))); - } - - parse_course_displaylists((TrackSectionsI*)LOAD_ASSET_RAW(d_course_mario_raceway_addr)); - func_80295C6C(); - D_8015F8E4 = gCourseMinY - 10.0f; +void MarioRaceway::CreditsSpawnActors() { + dma_textures(gTextureTrees1, 0x35B, 0x800); + spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_tree_spawns)); } void MarioRaceway::Destroy() { } |
