summaryrefslogtreecommitdiff
path: root/src/engine/courses
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2025-01-23 11:22:07 -0700
committerGitHub <noreply@github.com>2025-01-23 11:22:07 -0700
commit1f189dfa804a05177f99dda1044898eb63fdcb3f (patch)
tree598e0a6c26a5554afd1fcbcd801079fd1df090d3 /src/engine/courses
parent24ecfc3db43bfa606f41c42ef8778f96b5047c6b (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')
-rw-r--r--src/engine/courses/BansheeBoardwalk.cpp18
-rw-r--r--src/engine/courses/BansheeBoardwalk.h3
-rw-r--r--src/engine/courses/BigDonut.cpp18
-rw-r--r--src/engine/courses/BigDonut.h3
-rw-r--r--src/engine/courses/BlockFort.cpp18
-rw-r--r--src/engine/courses/BlockFort.h3
-rw-r--r--src/engine/courses/BowsersCastle.cpp18
-rw-r--r--src/engine/courses/BowsersCastle.h3
-rw-r--r--src/engine/courses/ChocoMountain.cpp18
-rw-r--r--src/engine/courses/ChocoMountain.h3
-rw-r--r--src/engine/courses/Course.cpp3
-rw-r--r--src/engine/courses/Course.h125
-rw-r--r--src/engine/courses/DKJungle.cpp41
-rw-r--r--src/engine/courses/DKJungle.h3
-rw-r--r--src/engine/courses/DoubleDeck.cpp18
-rw-r--r--src/engine/courses/DoubleDeck.h3
-rw-r--r--src/engine/courses/FrappeSnowland.cpp18
-rw-r--r--src/engine/courses/FrappeSnowland.h3
-rw-r--r--src/engine/courses/KalimariDesert.cpp81
-rw-r--r--src/engine/courses/KalimariDesert.h3
-rw-r--r--src/engine/courses/KoopaTroopaBeach.cpp18
-rw-r--r--src/engine/courses/KoopaTroopaBeach.h3
-rw-r--r--src/engine/courses/LuigiRaceway.cpp18
-rw-r--r--src/engine/courses/LuigiRaceway.h3
-rw-r--r--src/engine/courses/MarioRaceway.cpp24
-rw-r--r--src/engine/courses/MarioRaceway.h2
-rw-r--r--src/engine/courses/MooMooFarm.cpp18
-rw-r--r--src/engine/courses/MooMooFarm.h3
-rw-r--r--src/engine/courses/PodiumCeremony.cpp21
-rw-r--r--src/engine/courses/PodiumCeremony.h3
-rw-r--r--src/engine/courses/RainbowRoad.cpp18
-rw-r--r--src/engine/courses/RainbowRoad.h3
-rw-r--r--src/engine/courses/RoyalRaceway.cpp18
-rw-r--r--src/engine/courses/RoyalRaceway.h3
-rw-r--r--src/engine/courses/SherbetLand.cpp22
-rw-r--r--src/engine/courses/SherbetLand.h3
-rw-r--r--src/engine/courses/Skyscraper.cpp18
-rw-r--r--src/engine/courses/Skyscraper.h3
-rw-r--r--src/engine/courses/TestCourse.cpp7
-rw-r--r--src/engine/courses/TestCourse.h2
-rw-r--r--src/engine/courses/ToadsTurnpike.cpp95
-rw-r--r--src/engine/courses/ToadsTurnpike.h3
-rw-r--r--src/engine/courses/WarioStadium.cpp18
-rw-r--r--src/engine/courses/WarioStadium.h3
-rw-r--r--src/engine/courses/YoshiValley.cpp41
-rw-r--r--src/engine/courses/YoshiValley.h3
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;