diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2025-01-23 11:22:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-23 11:22:07 -0700 |
| commit | 1f189dfa804a05177f99dda1044898eb63fdcb3f (patch) | |
| tree | 598e0a6c26a5554afd1fcbcd801079fd1df090d3 /src/engine/courses | |
| parent | 24ecfc3db43bfa606f41c42ef8778f96b5047c6b (diff) | |
Game.cpp and World.cpp Cleanup (#159)
* Remove CProperties and delete dup Properties from World.h
* Improvement
* Fix compile
* Cleanup
* Document gRaceState
* wip cleanup
* compile
* Impl PlayerBombKart
* Rename CourseManager_ to CM_
* Finish renames m_ to CM_
* cleanup
* Remove extra printf
---------
Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/engine/courses')
46 files changed, 356 insertions, 420 deletions
diff --git a/src/engine/courses/BansheeBoardwalk.cpp b/src/engine/courses/BansheeBoardwalk.cpp index 03b4a9bd2..4ff92d107 100644 --- a/src/engine/courses/BansheeBoardwalk.cpp +++ b/src/engine/courses/BansheeBoardwalk.cpp @@ -149,7 +149,7 @@ void BansheeBoardwalk::Load() { void BansheeBoardwalk::LoadTextures() { } -void BansheeBoardwalk::SpawnActors() { +void BansheeBoardwalk::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns)); @@ -175,19 +175,17 @@ void BansheeBoardwalk::SpawnActors() { gWorldInstance.AddObject(new OBoos(5, IPathSpan(180, 190), IPathSpan(200, 210), IPathSpan(280, 290))); gWorldInstance.AddObject(new OBoos(5, IPathSpan(490, 500), IPathSpan(510, 520), IPathSpan(620, 630))); } -} -void BansheeBoardwalk::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][110], 110, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][475], 475, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][610], 610, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][110], 110, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][475], 475, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][610], 610, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/BansheeBoardwalk.h b/src/engine/courses/BansheeBoardwalk.h index 612597578..f1b98538d 100644 --- a/src/engine/courses/BansheeBoardwalk.h +++ b/src/engine/courses/BansheeBoardwalk.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/BigDonut.cpp b/src/engine/courses/BigDonut.cpp index c0d4b1f7f..5bdf76a23 100644 --- a/src/engine/courses/BigDonut.cpp +++ b/src/engine/courses/BigDonut.cpp @@ -123,19 +123,19 @@ void BigDonut::Load() { void BigDonut::LoadTextures() { } -void BigDonut::SpawnActors() {} +void BigDonut::BeginPlay() { + spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns)); -void BigDonut::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f)); } } diff --git a/src/engine/courses/BigDonut.h b/src/engine/courses/BigDonut.h index 732a9a568..bc076ecf2 100644 --- a/src/engine/courses/BigDonut.h +++ b/src/engine/courses/BigDonut.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/BlockFort.cpp b/src/engine/courses/BlockFort.cpp index 61eb3c0b1..136ffeef5 100644 --- a/src/engine/courses/BlockFort.cpp +++ b/src/engine/courses/BlockFort.cpp @@ -120,21 +120,19 @@ void BlockFort::Load() { void BlockFort::LoadTextures() { } -void BlockFort::SpawnActors() { +void BlockFort::BeginPlay() { spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns)); -} -void BlockFort::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f)); } } diff --git a/src/engine/courses/BlockFort.h b/src/engine/courses/BlockFort.h index b3d2fdc3c..c985b9546 100644 --- a/src/engine/courses/BlockFort.h +++ b/src/engine/courses/BlockFort.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/BowsersCastle.cpp b/src/engine/courses/BowsersCastle.cpp index 5174c5ea1..6f4ecccc5 100644 --- a/src/engine/courses/BowsersCastle.cpp +++ b/src/engine/courses/BowsersCastle.cpp @@ -148,7 +148,7 @@ void BowsersCastle::LoadTextures() { dma_textures(gTextureShrub, 0x000003FFU, 0x00000800U); } -void BowsersCastle::SpawnActors() { +void BowsersCastle::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_tree_spawn)); @@ -194,19 +194,17 @@ void BowsersCastle::SpawnActors() { gWorldInstance.AddObject(new OThwomp(0x073a, 0xf9f2, 0x4000, 1.0f, 5, 1)); break; } -} -void BowsersCastle::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][260], 260, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][260], 260, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/BowsersCastle.h b/src/engine/courses/BowsersCastle.h index bbbd4c75e..767bbdb8c 100644 --- a/src/engine/courses/BowsersCastle.h +++ b/src/engine/courses/BowsersCastle.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/ChocoMountain.cpp b/src/engine/courses/ChocoMountain.cpp index 04065dff5..4406159e9 100644 --- a/src/engine/courses/ChocoMountain.cpp +++ b/src/engine/courses/ChocoMountain.cpp @@ -163,23 +163,21 @@ void ChocoMountain::Load() { void ChocoMountain::LoadTextures() { } -void ChocoMountain::SpawnActors() { +void ChocoMountain::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns)); spawn_falling_rocks((struct ActorSpawnData*)LOAD_ASSET_RAW((const char*)d_course_choco_mountain_falling_rock_spawns)); -} -void ChocoMountain::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][165], 165, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][330], 330, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][550], 550, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][595], 595, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][165], 165, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][330], 330, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][550], 550, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][595], 595, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/ChocoMountain.h b/src/engine/courses/ChocoMountain.h index 718b40202..45926ed61 100644 --- a/src/engine/courses/ChocoMountain.h +++ b/src/engine/courses/ChocoMountain.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void SomeSounds() override; diff --git a/src/engine/courses/Course.cpp b/src/engine/courses/Course.cpp index 0dd1ba33a..3b2ac641d 100644 --- a/src/engine/courses/Course.cpp +++ b/src/engine/courses/Course.cpp @@ -16,7 +16,6 @@ extern "C" { #include "render_objects.h" #include "save.h" #include "staff_ghosts.h" -#include "Engine.h" #include "code_800029B0.h" #include "render_courses.h" extern StaffGhost* d_mario_raceway_staff_ghost; @@ -153,7 +152,7 @@ void Course::Init() { void Course::LoadTextures() { } -void Course::SpawnActors() { +void Course::BeginPlay() { } void Course::InitClouds() { diff --git a/src/engine/courses/Course.h b/src/engine/courses/Course.h index f7bca6809..d4f637073 100644 --- a/src/engine/courses/Course.h +++ b/src/engine/courses/Course.h @@ -1,85 +1,77 @@ -#ifndef COURSE_H -#define COURSE_H +#ifndef ENGINE_COURSE_H +#define ENGINE_COURSE_H #include <libultraship.h> +#include "CoreMath.h" -// C-compatible function declaration #ifdef __cplusplus -#include "CoreMath.h" #include "engine/objects/Lakitu.h" extern "C" { #endif - #include "camera.h" - #include "course_offsets.h" - #include "data/some_data.h" - #include "defines.h" - #include "bomb_kart.h" - #include "path_spawn_metadata.h" - #include "Engine.h" - #include "waypoints.h" - -CProperties *CourseManager_GetProps(); +#include "camera.h" +#include "course_offsets.h" +#include "data/some_data.h" +#include "defines.h" +#include "bomb_kart.h" +#include "path_spawn_metadata.h" +#include "waypoints.h" +#include "sounds.h" +#include "common_structs.h" #ifdef __cplusplus } #endif +typedef struct SkyboxColours { + RGB8 TopRight; + RGB8 BottomRight; + RGB8 BottomLeft; + RGB8 TopLeft; + RGB8 FloorTopRight; + RGB8 FloorBottomRight; + RGB8 FloorBottomLeft; + RGB8 FloorTopLeft; +} SkyboxColours; + +typedef struct Properties { + const char* Id; + const char* Name; + const char* DebugName; + const char* CourseLength; + const char* AIBehaviour; + const char* MinimapTexture; + s32 LakituTowType; + IVector2D MinimapDimensions; + float AIMaximumSeparation; + float AIMinimumSeparation; + float NearPersp; + float FarPersp; + int16_t *SomePtr; + uint32_t AISteeringSensitivity; + _struct_gCoursePathSizes_0x10 PathSizes; + Vec4f D_0D009418; + Vec4f D_0D009568; + Vec4f D_0D0096B8; + Vec4f D_0D009808; + TrackWaypoint* PathTable[4]; + TrackWaypoint* PathTable2[4]; + CloudData *Clouds; + CloudData *CloudList; + int32_t MinimapFinishlineX; + int32_t MinimapFinishlineY; + SkyboxColours Skybox; + const course_texture *textures; + enum MusicSeq Sequence; +} Properties; + #ifdef __cplusplus class World; // <-- Forward declare - class Course { public: - typedef struct { - uint8_t r, g, b; - } RGB8; - - typedef struct { - RGB8 TopRight; - RGB8 BottomRight; - RGB8 BottomLeft; - RGB8 TopLeft; - RGB8 FloorTopRight; - RGB8 FloorBottomRight; - RGB8 FloorBottomLeft; - RGB8 FloorTopLeft; - } SkyboxColours; - - - typedef struct { - const char* Id; - const char* Name; - const char* DebugName; - const char* CourseLength; - const char* AIBehaviour; - const char* MinimapTexture; - s32 LakituTowType; - IVector2D MinimapDimensions; - float AIMaximumSeparation; - float AIMinimumSeparation; - float NearPersp; - float FarPersp; - int16_t *SomePtr; - uint32_t AISteeringSensitivity; - _struct_gCoursePathSizes_0x10 PathSizes; - Vec4f D_0D009418; - Vec4f D_0D009568; - Vec4f D_0D0096B8; - Vec4f D_0D009808; - TrackWaypoint* PathTable[4]; - TrackWaypoint* PathTable2[4]; - CloudData *Clouds; - CloudData *CloudList; - int32_t MinimapFinishlineX; - int32_t MinimapFinishlineY; - SkyboxColours Skybox; - const course_texture *textures; - MusicSeq Sequence; - } Properties; - Properties Props; const char* vtx = nullptr; @@ -94,7 +86,12 @@ public: virtual void Load(); // Decompress and load stock courses. Must be overridden for custom courses virtual void Load(Vtx* vtx, Gfx *gfx); // Load custom course virtual void LoadTextures(); - virtual void SpawnActors(); + + /** + * @brief BeginPlay This function is called once at the start of gameplay. + * Actor spawning should go here. + */ + virtual void BeginPlay(); virtual void InitClouds(); virtual void UpdateClouds(s32, Camera*); virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7); @@ -124,4 +121,4 @@ private: #endif -#endif // COURSE_H
\ No newline at end of file +#endif // ENGINE_COURSE_H diff --git a/src/engine/courses/DKJungle.cpp b/src/engine/courses/DKJungle.cpp index e3e7bf3f5..a49a029c3 100644 --- a/src/engine/courses/DKJungle.cpp +++ b/src/engine/courses/DKJungle.cpp @@ -150,12 +150,31 @@ void DKJungle::LoadTextures() { dma_textures(gTextureDksJungleParkwayKiwanoFruit3, 0x00000364U, 0x00000400U); } -void DKJungle::SpawnActors() { +void DKJungle::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_item_box_spawns)); init_kiwano_fruit(); func_80298D10(); + + + generate_ferry_waypoints(); + + // The original game only ran vehicle logic every second frame. + // Thus the speed gets divided by two to set speed to match properly + gWorldInstance.AddActor(new ABoat((0.6666666f)/4, 0)); + + if (gModeSelection == VERSUS) { + Vec3f pos = {0, 0, 0}; + + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + } } // Likely sets minimap boundaries @@ -273,26 +292,6 @@ void DKJungle::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f func_8003F138(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -void DKJungle::SpawnVehicles() { - generate_ferry_waypoints(); - - // The original game only ran vehicle logic every second frame. - // Thus the speed gets divided by two to set speed to match properly - gWorldInstance.AddVehicle(new ABoat((0.6666666f)/4, 0)); - - if (gModeSelection == VERSUS) { - Vec3f pos = {0, 0, 0}; - - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - } -} - void DKJungle::Waypoints(Player* player, int8_t playerId) { s16 waypoint = gNearestWaypointByPlayerId[playerId]; if ((waypoint >= 0xB9) && (waypoint < 0x119)) { diff --git a/src/engine/courses/DKJungle.h b/src/engine/courses/DKJungle.h index 389213c1f..71cc1e582 100644 --- a/src/engine/courses/DKJungle.h +++ b/src/engine/courses/DKJungle.h @@ -26,7 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; @@ -38,7 +38,6 @@ public: virtual void MinimapFinishlinePosition() override; virtual void Render(struct UnkStruct_800DC5EC*) override; virtual void RenderCredits() override; - virtual void SpawnVehicles() override; virtual void Collision() override; virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; virtual void Waypoints(Player* player, int8_t playerId) override; diff --git a/src/engine/courses/DoubleDeck.cpp b/src/engine/courses/DoubleDeck.cpp index 1d5e16c60..fea83005d 100644 --- a/src/engine/courses/DoubleDeck.cpp +++ b/src/engine/courses/DoubleDeck.cpp @@ -117,21 +117,19 @@ void DoubleDeck::Load() { void DoubleDeck::LoadTextures() { } -void DoubleDeck::SpawnActors() { +void DoubleDeck::BeginPlay() { spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_double_deck_item_box_spawns)); -} -void DoubleDeck::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f)); } } diff --git a/src/engine/courses/DoubleDeck.h b/src/engine/courses/DoubleDeck.h index bb1a8f98c..d821187c8 100644 --- a/src/engine/courses/DoubleDeck.h +++ b/src/engine/courses/DoubleDeck.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/FrappeSnowland.cpp b/src/engine/courses/FrappeSnowland.cpp index 5c0b4df43..61527d685 100644 --- a/src/engine/courses/FrappeSnowland.cpp +++ b/src/engine/courses/FrappeSnowland.cpp @@ -127,7 +127,7 @@ void FrappeSnowland::LoadTextures() { dma_textures(gTextureFrappeSnowlandTreeRight, 0x00000432U, 0x00000800U); } -void FrappeSnowland::SpawnActors() { +void FrappeSnowland::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_tree_spawns)); @@ -154,19 +154,17 @@ void FrappeSnowland::SpawnActors() { gWorldInstance.AddObject(new OSnowman(FVector(-701, 3, 853))); gWorldInstance.AddObject(new OSnowman(FVector(-602, 0, 929))); } -} -void FrappeSnowland::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][290], 290, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][350], 350, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][290], 290, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][350], 350, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/FrappeSnowland.h b/src/engine/courses/FrappeSnowland.h index 5c53dafae..8ecbdbf46 100644 --- a/src/engine/courses/FrappeSnowland.h +++ b/src/engine/courses/FrappeSnowland.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void InitClouds() override; virtual void UpdateClouds(s32 sp1C, Camera* camera) override; virtual void MinimapSettings() override; diff --git a/src/engine/courses/KalimariDesert.cpp b/src/engine/courses/KalimariDesert.cpp index ffd19a86e..e783d4e0f 100644 --- a/src/engine/courses/KalimariDesert.cpp +++ b/src/engine/courses/KalimariDesert.cpp @@ -11,7 +11,6 @@ #include "engine/vehicles/Utils.h" #include "engine/vehicles/Train.h" -#include "engine/vehicles/Vehicle.h" extern "C" { #include "main.h" @@ -136,7 +135,7 @@ void KalimariDesert::LoadTextures() { dma_textures(gTextureCactus3, 0x000003AFU, 0x00000800U); } -void KalimariDesert::SpawnActors() { +void KalimariDesert::BeginPlay() { struct RailroadCrossing* rrxing; Vec3f position; Vec3f velocity = { 0.0f, 0.0f, 0.0f }; @@ -173,6 +172,45 @@ void KalimariDesert::SpawnActors() { rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; + + + + generate_train_waypoints(); + + s32 centerWaypoint = 160; + + // Spawn two trains + for (size_t i = 0; i < _numTrains; ++i) { + uint32_t waypoint = CalculateWaypointDistribution(i, _numTrains, gVehicle2DWaypointLength, centerWaypoint); + + if (CVarGetInteger("gMultiplayerNoFeatureCuts", 0) == false) { + // Multiplayer modes have no tender and no carriages + if (gActiveScreenMode != SCREEN_MODE_1P) { + _tender = ATrain::TenderStatus::NO_TENDER; + _numCarriages = 0; + } + + // 2 player versus mode has a tender and a carriage + if ((gModeSelection == VERSUS) && (gPlayerCountSelection1 == 2)) { + _tender = ATrain::TenderStatus::HAS_TENDER; + _numCarriages = 1; + } + } + + gWorldInstance.AddActor(new ATrain(_tender, _numCarriages, 2.5f, waypoint)); + } + + if (gModeSelection == VERSUS) { + Vec3f pos = {0, 0, 0}; + + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][138], 138, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][280], 280, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][404], 404, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][510], 510, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + } } // Likely sets minimap boundaries @@ -214,45 +252,6 @@ void KalimariDesert::MinimapFinishlinePosition() { draw_hud_2d_texture_8x8(this->Props.MinimapFinishlineX, this->Props.MinimapFinishlineY, (u8*) common_texture_minimap_finish_line); } -void KalimariDesert::SpawnVehicles() { - generate_train_waypoints(); - - s32 centerWaypoint = 160; - - // Spawn two trains - for (size_t i = 0; i < _numTrains; ++i) { - uint32_t waypoint = CalculateWaypointDistribution(i, _numTrains, gVehicle2DWaypointLength, centerWaypoint); - - if (CVarGetInteger("gMultiplayerNoFeatureCuts", 0) == false) { - // Multiplayer modes have no tender and no carriages - if (gActiveScreenMode != SCREEN_MODE_1P) { - _tender = ATrain::TenderStatus::NO_TENDER; - _numCarriages = 0; - } - - // 2 player versus mode has a tender and a carriage - if ((gModeSelection == VERSUS) && (gPlayerCountSelection1 == 2)) { - _tender = ATrain::TenderStatus::HAS_TENDER; - _numCarriages = 1; - } - } - - gWorldInstance.AddVehicle(new ATrain(_tender, _numCarriages, 2.5f, waypoint)); - } - - if (gModeSelection == VERSUS) { - Vec3f pos = {0, 0, 0}; - - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][138], 138, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][280], 280, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][404], 404, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][510], 510, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - } -} - void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) { func_802B5D64(D_800DC610, D_802B87D4, 0, 1); diff --git a/src/engine/courses/KalimariDesert.h b/src/engine/courses/KalimariDesert.h index c4fed1d8f..0a07fcbb3 100644 --- a/src/engine/courses/KalimariDesert.h +++ b/src/engine/courses/KalimariDesert.h @@ -28,7 +28,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void SomeSounds() override; @@ -37,7 +37,6 @@ public: virtual void MinimapFinishlinePosition() override; virtual void Render(struct UnkStruct_800DC5EC*) override; virtual void RenderCredits() override; - virtual void SpawnVehicles() override; virtual void Collision() override; virtual void Destroy() override; diff --git a/src/engine/courses/KoopaTroopaBeach.cpp b/src/engine/courses/KoopaTroopaBeach.cpp index 6beca16b6..4e017912e 100644 --- a/src/engine/courses/KoopaTroopaBeach.cpp +++ b/src/engine/courses/KoopaTroopaBeach.cpp @@ -139,7 +139,7 @@ void KoopaTroopaBeach::Load() { void KoopaTroopaBeach::LoadTextures() { } -void KoopaTroopaBeach::SpawnActors() { +void KoopaTroopaBeach::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); init_actor_hot_air_balloon_item_box(328.0f * gCourseDirection, 70.0f, 2541.0f); @@ -178,19 +178,17 @@ void KoopaTroopaBeach::SpawnActors() { gWorldInstance.AddObject(new OSeagull(pos2)); } } -} -void KoopaTroopaBeach::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][280], 280, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][280], 280, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/KoopaTroopaBeach.h b/src/engine/courses/KoopaTroopaBeach.h index c10b5cede..490dfe8ab 100644 --- a/src/engine/courses/KoopaTroopaBeach.h +++ b/src/engine/courses/KoopaTroopaBeach.h @@ -29,8 +29,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; diff --git a/src/engine/courses/LuigiRaceway.cpp b/src/engine/courses/LuigiRaceway.cpp index 78522df74..a821ec2d9 100644 --- a/src/engine/courses/LuigiRaceway.cpp +++ b/src/engine/courses/LuigiRaceway.cpp @@ -164,7 +164,7 @@ void LuigiRaceway::LoadTextures() { dma_textures(gTextureTrees5Right, 0x000003E8U, 0x00000800U); } -void LuigiRaceway::SpawnActors() { +void LuigiRaceway::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_luigi_raceway_tree_spawn)); spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_luigi_raceway_item_box_spawns)); @@ -174,19 +174,17 @@ void LuigiRaceway::SpawnActors() { } else { // Normal gameplay gWorldInstance.AddObject(new OHotAirBalloon(FVector(-176.0, 0.0f, -2323.0f))); } -} -void LuigiRaceway::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = { 0, 0, 0 }; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][305], 305, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][440], 440, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][515], 515, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][305], 305, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][440], 440, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][515], 515, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/LuigiRaceway.h b/src/engine/courses/LuigiRaceway.h index 7166278c3..c5e089d81 100644 --- a/src/engine/courses/LuigiRaceway.h +++ b/src/engine/courses/LuigiRaceway.h @@ -28,8 +28,7 @@ class LuigiRaceway : public Course { // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; diff --git a/src/engine/courses/MarioRaceway.cpp b/src/engine/courses/MarioRaceway.cpp index d98065ed8..a2cc96525 100644 --- a/src/engine/courses/MarioRaceway.cpp +++ b/src/engine/courses/MarioRaceway.cpp @@ -6,6 +6,7 @@ #include "MarioRaceway.h" #include "World.h" #include "engine/actors/AFinishline.h" +#include "engine/objects/Object.h" #include "engine/objects/BombKart.h" extern "C" { @@ -173,7 +174,7 @@ void MarioRaceway::LoadTextures() { dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U); } -void MarioRaceway::SpawnActors() { +void MarioRaceway::BeginPlay() { struct Actor* actor; Vec3f position; Vec3f velocity = { 0.0f, 0.0f, 0.0f }; @@ -190,22 +191,23 @@ void MarioRaceway::SpawnActors() { vec3f_set(position, 2520.0f, 0.0f, 1240.0f); position[0] *= gCourseDirection; 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); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][265], 265, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][285], 285, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][420], 420, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } +void MarioRaceway::SpawnVehicles() { + +} + // Likely sets minimap boundaries void MarioRaceway::MinimapSettings() { D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust5, 0x443, 0x1000)); diff --git a/src/engine/courses/MarioRaceway.h b/src/engine/courses/MarioRaceway.h index ef0fb904b..9714fd0f5 100644 --- a/src/engine/courses/MarioRaceway.h +++ b/src/engine/courses/MarioRaceway.h @@ -26,7 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; + virtual void BeginPlay() override; virtual void SpawnVehicles() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/MooMooFarm.cpp b/src/engine/courses/MooMooFarm.cpp index 109857353..5adaeb2a6 100644 --- a/src/engine/courses/MooMooFarm.cpp +++ b/src/engine/courses/MooMooFarm.cpp @@ -159,26 +159,24 @@ void MooMooFarm::LoadTextures() { dma_textures(gTextureCow05Right, 0x00000400U, 0x00000800U); } -void MooMooFarm::SpawnActors() { +void MooMooFarm::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); if (gPlayerCountSelection1 != 4) { spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_tree_spawn)); } spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_item_box_spawns)); -} -void MooMooFarm::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][225], 225, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][316], 316, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][434], 434, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][225], 225, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][316], 316, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][434], 434, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/MooMooFarm.h b/src/engine/courses/MooMooFarm.h index 5815db8c7..0293b1b04 100644 --- a/src/engine/courses/MooMooFarm.h +++ b/src/engine/courses/MooMooFarm.h @@ -29,8 +29,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; diff --git a/src/engine/courses/PodiumCeremony.cpp b/src/engine/courses/PodiumCeremony.cpp index 631a187dc..736a3ed9f 100644 --- a/src/engine/courses/PodiumCeremony.cpp +++ b/src/engine/courses/PodiumCeremony.cpp @@ -159,7 +159,7 @@ void PodiumCeremony::Load() { void PodiumCeremony::LoadTextures() { } -void PodiumCeremony::SpawnActors() { +void PodiumCeremony::BeginPlay() { spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn)); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns)); spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn)); @@ -187,18 +187,15 @@ void PodiumCeremony::SpawnActors() { } gWorldInstance.AddObject(new OTrophy(pos, type, OTrophy::Behaviour::PODIUM_CEREMONY)); -} - -void PodiumCeremony::SpawnVehicles() { - Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[3][3], 3, 5, 1.25f); - gWorldInstance.AddBombKart(pos, &D_80164550[3][40], 40, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[3][60], 60, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[3][80], 80, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[3][100], 100, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[3][120], 120, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[3][140], 140, 0, 1.0f); + Vec3f kart = {0, 0, 0}; + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][3], 3, 5, 1.25f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][40], 40, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][60], 60, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][80], 80, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][100], 100, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][120], 120, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][140], 140, 0, 1.0f)); } // Likely sets minimap boundaries diff --git a/src/engine/courses/PodiumCeremony.h b/src/engine/courses/PodiumCeremony.h index bb17e8f8d..140d95889 100644 --- a/src/engine/courses/PodiumCeremony.h +++ b/src/engine/courses/PodiumCeremony.h @@ -27,8 +27,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/RainbowRoad.cpp b/src/engine/courses/RainbowRoad.cpp index 7dd4bcdf7..b878eebfb 100644 --- a/src/engine/courses/RainbowRoad.cpp +++ b/src/engine/courses/RainbowRoad.cpp @@ -133,7 +133,7 @@ void RainbowRoad::Load() { void RainbowRoad::LoadTextures() { } -void RainbowRoad::SpawnActors() { +void RainbowRoad::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns)); @@ -147,19 +147,17 @@ void RainbowRoad::SpawnActors() { gWorldInstance.AddObject(new OChainChomp()); gWorldInstance.AddObject(new OChainChomp()); } -} -void RainbowRoad::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/RainbowRoad.h b/src/engine/courses/RainbowRoad.h index 5f6b0e5e7..e5262f170 100644 --- a/src/engine/courses/RainbowRoad.h +++ b/src/engine/courses/RainbowRoad.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void InitClouds() override; virtual void UpdateClouds(s32, Camera*) override; virtual void MinimapSettings() override; diff --git a/src/engine/courses/RoyalRaceway.cpp b/src/engine/courses/RoyalRaceway.cpp index 2ea0022ca..de1ab164b 100644 --- a/src/engine/courses/RoyalRaceway.cpp +++ b/src/engine/courses/RoyalRaceway.cpp @@ -170,25 +170,23 @@ void RoyalRaceway::LoadTextures() { dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U); } -void RoyalRaceway::SpawnActors() { +void RoyalRaceway::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn)); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns)); spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn)); -} -void RoyalRaceway::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][296], 296, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][400], 400, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][746], 746, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][296], 296, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][400], 400, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][746], 746, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/RoyalRaceway.h b/src/engine/courses/RoyalRaceway.h index 0a7cd3e6a..2a3095bc8 100644 --- a/src/engine/courses/RoyalRaceway.h +++ b/src/engine/courses/RoyalRaceway.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void SomeSounds() override; diff --git a/src/engine/courses/SherbetLand.cpp b/src/engine/courses/SherbetLand.cpp index bfcacca4a..7e77ecdbb 100644 --- a/src/engine/courses/SherbetLand.cpp +++ b/src/engine/courses/SherbetLand.cpp @@ -129,7 +129,7 @@ void SherbetLand::Load() { void SherbetLand::LoadTextures() { } -void SherbetLand::SpawnActors() { +void SherbetLand::BeginPlay() { gWorldInstance.AddActor(new AFinishline()); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_sherbet_land_item_box_spawns)); @@ -199,19 +199,15 @@ void SherbetLand::SpawnActors() { auto penguin14 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos11, 0x9000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); penguin14->MirrorModeAngleOffset = -0x4000; -} - -void SherbetLand::SpawnVehicles() { if (gModeSelection == VERSUS) { - Vec3f pos = {0, 0, 0}; - - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + Vec3f kart = {0, 0, 0}; + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][100], 100, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][150], 150, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][200], 200, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][250], 250, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/SherbetLand.h b/src/engine/courses/SherbetLand.h index 177410ca7..13e41e592 100644 --- a/src/engine/courses/SherbetLand.h +++ b/src/engine/courses/SherbetLand.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; diff --git a/src/engine/courses/Skyscraper.cpp b/src/engine/courses/Skyscraper.cpp index f7c092bee..abf622ae2 100644 --- a/src/engine/courses/Skyscraper.cpp +++ b/src/engine/courses/Skyscraper.cpp @@ -142,21 +142,19 @@ void Skyscraper::Load() { void Skyscraper::LoadTextures() { } -void Skyscraper::SpawnActors() { +void Skyscraper::BeginPlay() { spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_skyscraper_item_box_spawns)); -} -void Skyscraper::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f)); } } diff --git a/src/engine/courses/Skyscraper.h b/src/engine/courses/Skyscraper.h index 6658b43e6..b9b998f73 100644 --- a/src/engine/courses/Skyscraper.h +++ b/src/engine/courses/Skyscraper.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; //virtual void InitClouds() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; diff --git a/src/engine/courses/TestCourse.cpp b/src/engine/courses/TestCourse.cpp index cf35a062b..30a925d80 100644 --- a/src/engine/courses/TestCourse.cpp +++ b/src/engine/courses/TestCourse.cpp @@ -151,7 +151,7 @@ void TestCourse::LoadTextures() { dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U); } -void TestCourse::SpawnActors() { +void TestCourse::BeginPlay() { struct ActorSpawnData itemboxes[] = { { 200, 1500, 200 , 0}, { 350, 2500, 300 , 1}, @@ -304,9 +304,8 @@ void TestCourse::SpawnVehicles() { Vec3f pos = {0, 0, 0}; - gWorldInstance.AddBombKart(pos, &D_80164550[0][25], 25, 4, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][45], 45, 4, 0.8333333f); - + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][25], 25, 4, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][45], 45, 4, 0.8333333f)); } void TestCourse::UpdateVehicles() { diff --git a/src/engine/courses/TestCourse.h b/src/engine/courses/TestCourse.h index 8bcffb131..2ba8a9f49 100644 --- a/src/engine/courses/TestCourse.h +++ b/src/engine/courses/TestCourse.h @@ -26,7 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void SomeSounds() override; diff --git a/src/engine/courses/ToadsTurnpike.cpp b/src/engine/courses/ToadsTurnpike.cpp index 88371411f..f6aa3f738 100644 --- a/src/engine/courses/ToadsTurnpike.cpp +++ b/src/engine/courses/ToadsTurnpike.cpp @@ -148,7 +148,7 @@ void ToadsTurnpike::Load() { void ToadsTurnpike::LoadTextures() { } -void ToadsTurnpike::SpawnActors() { +void ToadsTurnpike::BeginPlay() { Vec3f pos; pos[0] = (gIsMirrorMode != 0) ? D_80164490->posX + 138.0f : D_80164490->posX - 138.0f; pos[1] = (f32) (D_80164490->posY - 15); @@ -157,6 +157,51 @@ void ToadsTurnpike::SpawnActors() { gWorldInstance.AddActor(new AFinishline(pos)); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_toads_turnpike_item_box_spawns)); + + uint32_t waypoint; + f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333; + f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665; + a /= 2; // Normally vehicle logic is only ran every 2 frames. This slows the vehicles down to match. + b /= 2; + + // Other game modes spawn seven of each vehicle + if (gModeSelection == TIME_TRIALS) { + _numTrucks = 8; + _numBuses = 8; + _numTankerTrucks = 8; + _numCars = 8; + } + + for (size_t i = 0; i < _numTrucks; i++) { + waypoint = CalculateWaypointDistribution(i, _numTrucks, gWaypointCountByPathIndex[0], 0); + gWorldInstance.AddActor(new ATruck(a, b, &D_80164550[0][0], waypoint)); + } + + for (size_t i = 0; i < _numBuses; i++) { + waypoint = CalculateWaypointDistribution(i, _numBuses, gWaypointCountByPathIndex[0], 75); + gWorldInstance.AddActor(new ABus(a, b, &D_80164550[0][0], waypoint)); + } + + for (size_t i = 0; i < _numTankerTrucks; i++) { + waypoint = CalculateWaypointDistribution(i, _numTankerTrucks, gWaypointCountByPathIndex[0], 50); + gWorldInstance.AddActor(new ATankerTruck(a, b, &D_80164550[0][0], waypoint)); + } + + for (size_t i = 0; i < _numCars; i++) { + waypoint = CalculateWaypointDistribution(i, _numCars, gWaypointCountByPathIndex[0], 25); + gWorldInstance.AddActor(new ACar(a, b, &D_80164550[0][0], waypoint)); + } + + if (gModeSelection == VERSUS) { + Vec3f pos = {0, 0, 0}; + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + } } void ToadsTurnpike::InitClouds() { @@ -243,52 +288,4 @@ void ToadsTurnpike::RenderCredits() { void ToadsTurnpike::Collision() {} -void ToadsTurnpike::SpawnVehicles() { - uint32_t waypoint; - f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333; - f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665; - a /= 2; // Normally vehicle logic is only ran every 2 frames. This slows the vehicles down to match. - b /= 2; - - // Other game modes spawn seven of each vehicle - if (gModeSelection == TIME_TRIALS) { - _numTrucks = 8; - _numBuses = 8; - _numTankerTrucks = 8; - _numCars = 8; - } - - for (size_t i = 0; i < _numTrucks; i++) { - waypoint = CalculateWaypointDistribution(i, _numTrucks, gWaypointCountByPathIndex[0], 0); - gWorldInstance.AddVehicle(new ATruck(a, b, &D_80164550[0][0], waypoint)); - } - - for (size_t i = 0; i < _numBuses; i++) { - waypoint = CalculateWaypointDistribution(i, _numBuses, gWaypointCountByPathIndex[0], 75); - gWorldInstance.AddVehicle(new ABus(a, b,&D_80164550[0][0], waypoint)); - } - - for (size_t i = 0; i < _numTankerTrucks; i++) { - waypoint = CalculateWaypointDistribution(i, _numTankerTrucks, gWaypointCountByPathIndex[0], 50); - gWorldInstance.AddVehicle(new ATankerTruck(a, b, &D_80164550[0][0], waypoint)); - } - - for (size_t i = 0; i < _numCars; i++) { - waypoint = CalculateWaypointDistribution(i, _numCars, gWaypointCountByPathIndex[0], 25); - gWorldInstance.AddVehicle(new ACar(a, b, &D_80164550[0][0], waypoint)); - } - - if (gModeSelection == VERSUS) { - Vec3f pos = {0, 0, 0}; - - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - } -} - void ToadsTurnpike::Destroy() { } diff --git a/src/engine/courses/ToadsTurnpike.h b/src/engine/courses/ToadsTurnpike.h index bbb2df9c3..a73e3829f 100644 --- a/src/engine/courses/ToadsTurnpike.h +++ b/src/engine/courses/ToadsTurnpike.h @@ -26,7 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; + virtual void BeginPlay() override; virtual void InitClouds() override; virtual void UpdateClouds(s32, Camera*) override; virtual void MinimapSettings() override; @@ -37,7 +37,6 @@ public: virtual void Render(struct UnkStruct_800DC5EC*) override; virtual void RenderCredits() override; virtual void Collision() override; - virtual void SpawnVehicles() override; virtual void Destroy() override; private: size_t _numTrucks = 7; diff --git a/src/engine/courses/WarioStadium.cpp b/src/engine/courses/WarioStadium.cpp index 522a6509d..44a8d5d1a 100644 --- a/src/engine/courses/WarioStadium.cpp +++ b/src/engine/courses/WarioStadium.cpp @@ -155,7 +155,7 @@ void WarioStadium::Load() { void WarioStadium::LoadTextures() { } -void WarioStadium::SpawnActors() { +void WarioStadium::BeginPlay() { Vec3f finish; finish[0] = (gIsMirrorMode != 0) ? D_80164490->posX + 12.0f : D_80164490->posX - 12.0f; (gIsMirrorMode != 0) ? D_80164490->posX + 12.0f : D_80164490->posX - 12.0f; @@ -177,19 +177,17 @@ void WarioStadium::SpawnActors() { Vec3f pos3 = { -2622.0f, 79.0f, 739.0f }; pos3[0] *= gCourseDirection; gWorldInstance.AddActor(new AWarioSign(pos3)); -} -void WarioStadium::SpawnVehicles() { if (gModeSelection == VERSUS) { Vec3f pos = { 0, 0, 0 }; - gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); - gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); + gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f)); } } diff --git a/src/engine/courses/WarioStadium.h b/src/engine/courses/WarioStadium.h index 088e81b72..72f796cc7 100644 --- a/src/engine/courses/WarioStadium.h +++ b/src/engine/courses/WarioStadium.h @@ -28,8 +28,7 @@ class WarioStadium : public Course { // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void InitClouds() override; virtual void UpdateClouds(s32, Camera*) override; virtual void MinimapSettings() override; diff --git a/src/engine/courses/YoshiValley.cpp b/src/engine/courses/YoshiValley.cpp index f7f3d1871..9366f45ea 100644 --- a/src/engine/courses/YoshiValley.cpp +++ b/src/engine/courses/YoshiValley.cpp @@ -137,7 +137,7 @@ void YoshiValley::LoadTextures() { dma_textures(gTextureTrees2, 0x000003E8U, 0x00000800U); } -void YoshiValley::SpawnActors() { +void YoshiValley::BeginPlay() { Vec3f position; Vec3f velocity = { 0.0f, 0.0f, 0.0f }; Vec3s rotation = { 0, 0, 0 }; @@ -173,43 +173,40 @@ void YoshiValley::SpawnActors() { gWorldInstance.AddObject(new OHedgehog(FVector(-2493, 94, -454), FVector2D(-2505, -397), 28)); gWorldInstance.AddObject(new OHedgehog(FVector(-2477, 3, -57), FVector2D(-2539, -66), 28)); } -} - -// Likely sets minimap boundaries -void YoshiValley::MinimapSettings() { - D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust0, 0x479, 0xC00)); - D_8018D2A0 = 0.018f; - D_8018D2E0 = 61; - D_8018D2E8 = 38; -} - -void YoshiValley::InitCourseObjects() { -} -void YoshiValley::SpawnVehicles() { if (gModeSelection == VERSUS) { - // Note that the waypoint values might be unused for Yoshi's Valley. Entered them because // the original data has values here. // Note that the Y height is calculated automatically to place the kart on the surface Vec3f pos = {-1533, 0, -682}; - gWorldInstance.AddBombKart(pos, NULL, 0, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos, NULL, 0, 0, 0.8333333f)); Vec3f pos2 = {-1565, 0, -619}; - gWorldInstance.AddBombKart(pos2, NULL, 10, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos2, NULL, 10, 0, 0.8333333f)); Vec3f pos3 = {-1529, 0, -579}; - gWorldInstance.AddBombKart(pos3, NULL, 20, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos3, NULL, 20, 0, 0.8333333f)); Vec3f pos4 = {-1588, 0, -534}; - gWorldInstance.AddBombKart(pos4, NULL, 30, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos4, NULL, 30, 0, 0.8333333f)); Vec3f pos5 = {-1598, 0, -207}; - gWorldInstance.AddBombKart(pos5, NULL, 40, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos5, NULL, 40, 0, 0.8333333f)); Vec3f pos6 = {-1646, 0, -147}; - gWorldInstance.AddBombKart(pos6, NULL, 50, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos6, NULL, 50, 0, 0.8333333f)); Vec3f pos7 = {-2532, 0, -445}; - gWorldInstance.AddBombKart(pos7, NULL, 60, 0, 0.8333333f); + gWorldInstance.AddObject(new OBombKart(pos7, NULL, 60, 0, 0.8333333f)); } } +// Likely sets minimap boundaries +void YoshiValley::MinimapSettings() { + D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust0, 0x479, 0xC00)); + D_8018D2A0 = 0.018f; + D_8018D2E0 = 61; + D_8018D2E8 = 38; +} + +void YoshiValley::InitCourseObjects() { +} + void YoshiValley::UpdateCourseObjects() { } diff --git a/src/engine/courses/YoshiValley.h b/src/engine/courses/YoshiValley.h index d0de64752..a986cd902 100644 --- a/src/engine/courses/YoshiValley.h +++ b/src/engine/courses/YoshiValley.h @@ -26,8 +26,7 @@ public: // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; - virtual void SpawnActors() override; - virtual void SpawnVehicles() override; + virtual void BeginPlay() override; virtual void MinimapSettings() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; |
