summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-10-15 20:29:26 -0600
committerGitHub <noreply@github.com>2024-10-15 20:29:26 -0600
commit4fbb031dd95f2a84e73fbca269f517e98808d293 (patch)
tree55ed05a34242658698107ac2e9461b4c4bd0999d /src
parentaf81bad1f34ee6af52a70ff8bf7ad4e1ee624a93 (diff)
Refactors (#114)
* Update Engine.cpp * fix * Add Actors * Refactor * Update Game.cpp * Refactors as per review
Diffstat (limited to 'src')
-rw-r--r--src/code_80091750.c10
-rw-r--r--src/engine/Cup.cpp7
-rw-r--r--src/engine/Cup.h3
-rw-r--r--src/engine/World.cpp48
-rw-r--r--src/engine/World.h11
-rw-r--r--src/engine/courses/BansheeBoardwalk.cpp2
-rw-r--r--src/engine/courses/BansheeBoardwalk.h1
-rw-r--r--src/engine/courses/BigDonut.cpp2
-rw-r--r--src/engine/courses/BigDonut.h1
-rw-r--r--src/engine/courses/BlockFort.cpp2
-rw-r--r--src/engine/courses/BlockFort.h1
-rw-r--r--src/engine/courses/BowsersCastle.cpp2
-rw-r--r--src/engine/courses/BowsersCastle.h1
-rw-r--r--src/engine/courses/ChocoMountain.cpp2
-rw-r--r--src/engine/courses/ChocoMountain.h1
-rw-r--r--src/engine/courses/Course.cpp2
-rw-r--r--src/engine/courses/Course.h1
-rw-r--r--src/engine/courses/DKJungle.cpp2
-rw-r--r--src/engine/courses/DKJungle.h1
-rw-r--r--src/engine/courses/DoubleDeck.cpp2
-rw-r--r--src/engine/courses/DoubleDeck.h1
-rw-r--r--src/engine/courses/FrappeSnowland.cpp1
-rw-r--r--src/engine/courses/FrappeSnowland.h1
-rw-r--r--src/engine/courses/KalimariDesert.cpp2
-rw-r--r--src/engine/courses/KalimariDesert.h1
-rw-r--r--src/engine/courses/KoopaTroopaBeach.cpp2
-rw-r--r--src/engine/courses/KoopaTroopaBeach.h1
-rw-r--r--src/engine/courses/LuigiRaceway.cpp2
-rw-r--r--src/engine/courses/LuigiRaceway.h1
-rw-r--r--src/engine/courses/MarioRaceway.cpp2
-rw-r--r--src/engine/courses/MarioRaceway.h1
-rw-r--r--src/engine/courses/MooMooFarm.cpp2
-rw-r--r--src/engine/courses/MooMooFarm.h1
-rw-r--r--src/engine/courses/PodiumCeremony.cpp2
-rw-r--r--src/engine/courses/PodiumCeremony.h1
-rw-r--r--src/engine/courses/RainbowRoad.cpp2
-rw-r--r--src/engine/courses/RainbowRoad.h1
-rw-r--r--src/engine/courses/RoyalRaceway.cpp2
-rw-r--r--src/engine/courses/RoyalRaceway.h1
-rw-r--r--src/engine/courses/SherbetLand.cpp2
-rw-r--r--src/engine/courses/SherbetLand.h1
-rw-r--r--src/engine/courses/Skyscraper.cpp2
-rw-r--r--src/engine/courses/Skyscraper.h1
-rw-r--r--src/engine/courses/TestCourse.cpp2
-rw-r--r--src/engine/courses/TestCourse.h1
-rw-r--r--src/engine/courses/ToadsTurnpike.cpp1
-rw-r--r--src/engine/courses/ToadsTurnpike.h1
-rw-r--r--src/engine/courses/WarioStadium.cpp14
-rw-r--r--src/engine/courses/WarioStadium.h1
-rw-r--r--src/engine/courses/YoshiValley.cpp2
-rw-r--r--src/engine/courses/YoshiValley.h1
-rw-r--r--src/menus.c11
-rw-r--r--src/networking/start_game.c2
-rw-r--r--src/port/Engine.cpp3
-rw-r--r--src/port/Game.cpp106
-rw-r--r--src/port/Game.h24
56 files changed, 129 insertions, 175 deletions
diff --git a/src/code_80091750.c b/src/code_80091750.c
index def1f448e..927572463 100644
--- a/src/code_80091750.c
+++ b/src/code_80091750.c
@@ -4944,6 +4944,7 @@ void func_8009CE64(s32 arg0) {
switch (gNextDemoId) { /* switch 4 */
case 0: /* switch 4 */
SetCourseByClass(GetMarioRaceway());
+ CourseManager_SetCup(GetFlowerCup());
gCurrentCourseId = 0;
gScreenModeSelection = 0;
gPlayerCountSelection1 = 1;
@@ -4953,6 +4954,7 @@ void func_8009CE64(s32 arg0) {
break;
case 1: /* switch 4 */
SetCourseByClass(GetLuigiRaceway());
+ CourseManager_SetCup(GetMushroomCup());
gCurrentCourseId = (s16) 1;
gScreenModeSelection = (s32) 1;
gPlayerCountSelection1 = 2;
@@ -4963,6 +4965,7 @@ void func_8009CE64(s32 arg0) {
break;
case 2: /* switch 4 */
SetCourseByClass(GetKalimariDesert());
+ CourseManager_SetCup(GetMushroomCup());
gCurrentCourseId = COURSE_KALAMARI_DESERT;
gScreenModeSelection = 0;
gPlayerCountSelection1 = (s32) 1;
@@ -4972,6 +4975,7 @@ void func_8009CE64(s32 arg0) {
break;
case 3: /* switch 4 */
SetCourseByClass(GetWarioStadium());
+ CourseManager_SetCup(GetStarCup());
gCurrentCourseId = 0x000E;
gScreenModeSelection = 3;
gPlayerCountSelection1 = 3;
@@ -4983,6 +4987,7 @@ void func_8009CE64(s32 arg0) {
break;
case 4: /* switch 4 */
SetCourseByClass(GetBowsersCastle());
+ CourseManager_SetCup(GetStarCup());
gCurrentCourseId = 2;
gScreenModeSelection = 0;
gPlayerCountSelection1 = (s32) 1;
@@ -4992,6 +4997,7 @@ void func_8009CE64(s32 arg0) {
break;
case 5: /* switch 4 */
SetCourseByClass(GetSherbetLand());
+ CourseManager_SetCup(GetFlowerCup());
gCurrentCourseId = 0x000C;
gScreenModeSelection = 3;
gPlayerCountSelection1 = 4;
@@ -5010,8 +5016,8 @@ void func_8009CE64(s32 arg0) {
gNextDemoId = 0;
}
printf("\nSELECTED!!!!!\n");
- // SetCupIndex(gCurrentCourseId); // World->GetCourse
- gCupSelection = GetCupIndex(); // gCupSelectionByCourseId[gCurrentCourseId];
+
+ //gCupSelection = GetCupIndex(); // gCupSelectionByCourseId[gCurrentCourseId];
D_800DC540 = (s32) GetCupIndex();
gCourseIndexInCup = GetCupCursorPosition();
// gCupCourseSelection = (s8) gPerCupIndexByCourseId[gCurrentCourseId];
diff --git a/src/engine/Cup.cpp b/src/engine/Cup.cpp
index edbc0ebbd..85d7fed44 100644
--- a/src/engine/Cup.cpp
+++ b/src/engine/Cup.cpp
@@ -1,9 +1,10 @@
#include "Cup.h"
#include "courses/Course.h"
-Cup::Cup(const char* name, std::vector<Course*> courses) {
- this->Name = name;
- this->Courses = courses;
+Cup::Cup(const char* id, const char* name, std::vector<Course*> courses) {
+ Id = id;
+ Name = name;
+ Courses = courses;
if (Courses.size() != 4) {
throw std::invalid_argument("A cup must contain exactly 4 courses.");
diff --git a/src/engine/Cup.h b/src/engine/Cup.h
index c029cecd5..4266c0126 100644
--- a/src/engine/Cup.h
+++ b/src/engine/Cup.h
@@ -9,12 +9,13 @@ class Course; // <-- Forward declare
class Cup {
public:
+ const char* Id;
const char* Name;
u8 *Thumbnail;
size_t CursorPosition = 0; // Course index in cup
std::vector<Course*> Courses;
- explicit Cup(const char* name, std::vector<Course*> courses);
+ explicit Cup(const char* id, const char* name, std::vector<Course*> courses);
virtual void ShuffleCourses();
diff --git a/src/engine/World.cpp b/src/engine/World.cpp
index 346446bf2..01c6f13bd 100644
--- a/src/engine/World.cpp
+++ b/src/engine/World.cpp
@@ -26,22 +26,12 @@ World::World() {}
Course* CurrentCourse;
Cup* CurrentCup;
-Cup* World::AddCup(const char* name, std::vector<Course*> courses) {
- // Create a new unique_ptr for Cup
- auto cup = std::make_shared<Cup>(name, courses);
-
- // Get raw pointer before moving the ownership
- Cup* tmp = cup.get();
-
- // Add the Cup to the container
- Cups.push_back(std::move(cup));
-
- // Return the raw pointer to the Cup
- return tmp;
+void World::AddCourse(Course* course) {
+ gWorldInstance.Courses.push_back(course);
}
-Cup* World::GetCup() {
- return Cups[CupIndex].get();
+void World::AddCup(Cup* cup) {
+ Cups.push_back(cup);
}
void World::SetCourseFromCup() {
@@ -96,15 +86,6 @@ TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointM
return crossing.get();
}
-//const char* World::GetCupName() {
-// //return this->Cups[CupIndex].Name;
-//}
-
-void World::SetCupIndex(int16_t courseId) {
-
- this->CupIndex = courseId;
-}
-
u32 World::GetCupIndex() {
return this->CupIndex;
}
@@ -117,9 +98,10 @@ u32 World::NextCup() {
hack = 2;
}
- if (this->CupIndex < Cups.size() - 2) {
+ if (CupIndex < Cups.size() - hack) {
CupIndex++;
- CurrentCup = Cups[CupIndex].get();
+ CurrentCup = Cups[CupIndex];
+ CurrentCup->CursorPosition = 0;
return CupIndex;
}
}
@@ -127,14 +109,17 @@ u32 World::NextCup() {
u32 World::PreviousCup() {
if (CupIndex > 0) {
CupIndex--;
- CurrentCup = Cups[CupIndex].get();
+ CurrentCup = Cups[CupIndex];
+ CurrentCup->CursorPosition = 0;
return CupIndex;
}
}
-void World::SetCup() {
- CurrentCup = Cups[CupIndex].get();
- CurrentCup->CursorPosition = 0;
+void World::SetCup(Cup* cup) {
+ if (cup) {
+ CurrentCup = cup;
+ CurrentCup->CursorPosition = 0;
+ }
}
CProperties* World::GetCourseProps() {
@@ -144,9 +129,10 @@ CProperties* World::GetCourseProps() {
return nullptr;
}
-void World::SetCourse(const char*name) {
+void World::SetCourse(const char* name) {
+ //! @todo Use content dictionary instead
for (size_t i = 0; i < Courses.size(); i++) {
- if (Courses[i]->Props.Name == name) {
+ if (strcmp(Courses[i]->Props.Name, name) == 0) {
CurrentCourse = Courses[i];
break;
}
diff --git a/src/engine/World.h b/src/engine/World.h
index 6345d9e6e..a2947499a 100644
--- a/src/engine/World.h
+++ b/src/engine/World.h
@@ -67,6 +67,8 @@ class World {
public:
explicit World();
+ void AddCourse(Course* course);
+
AActor* AddActor(std::unique_ptr<AActor> actor);
void TickActors();
void DrawActors(Camera* camera);
@@ -74,7 +76,6 @@ public:
Object* AddObject(std::unique_ptr<GameObject> object);
-
CProperties* GetCourseProps();
void TickObjects();
void DrawObjects(Camera *camera);
@@ -82,15 +83,13 @@ public:
void DestroyObjects();
Object *GetObjectByIndex(size_t);
- Cup* AddCup(const char* name, std::vector<Course*> courses);
- Cup* GetCup();
+ void AddCup(Cup*);
+ void SetCup(Cup* cup);
const char* GetCupName();
u32 GetCupIndex();
- void SetCupIndex(int16_t courseId);
u32 NextCup();
u32 PreviousCup();
void SetCourseFromCup();
- void SetCup();
World* GetWorld(void);
@@ -105,7 +104,7 @@ public:
Course* CurrentCourse;
Cup* CurrentCup;
- std::vector<std::shared_ptr<Cup>> Cups;
+ std::vector<Cup*> Cups;
size_t CupIndex = 1;
std::vector<std::unique_ptr<GameObject>> GameObjects;
diff --git a/src/engine/courses/BansheeBoardwalk.cpp b/src/engine/courses/BansheeBoardwalk.cpp
index 0e94885c7..09517031d 100644
--- a/src/engine/courses/BansheeBoardwalk.cpp
+++ b/src/engine/courses/BansheeBoardwalk.cpp
@@ -109,8 +109,6 @@ void BansheeBoardwalk::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns));
}
-void BansheeBoardwalk::Init() { }
-
// Likely sets minimap boundaries
void BansheeBoardwalk::MinimapSettings() {
D_80165880 = dma_textures((const char*)gTextureGhosts, 0x4CC2, 0xD980);
diff --git a/src/engine/courses/BansheeBoardwalk.h b/src/engine/courses/BansheeBoardwalk.h
index 7446c9af4..c8ef58a6b 100644
--- a/src/engine/courses/BansheeBoardwalk.h
+++ b/src/engine/courses/BansheeBoardwalk.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 daca979c0..18c8e65a4 100644
--- a/src/engine/courses/BigDonut.cpp
+++ b/src/engine/courses/BigDonut.cpp
@@ -103,8 +103,6 @@ void BigDonut::LoadTextures() {
void BigDonut::SpawnActors() {}
-void BigDonut::Init() { }
-
// Likely sets minimap boundaries
void BigDonut::MinimapSettings() {
D_8018D2A0 = 0.0257f;
diff --git a/src/engine/courses/BigDonut.h b/src/engine/courses/BigDonut.h
index 1c7865b47..41fd0457f 100644
--- a/src/engine/courses/BigDonut.h
+++ b/src/engine/courses/BigDonut.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 27ac81305..e81550a64 100644
--- a/src/engine/courses/BlockFort.cpp
+++ b/src/engine/courses/BlockFort.cpp
@@ -106,8 +106,6 @@ void BlockFort::LoadTextures() {
void BlockFort::SpawnActors() {}
-void BlockFort::Init() { }
-
// Likely sets minimap boundaries
void BlockFort::MinimapSettings() {
D_8018D2A0 = 0.0335f;
diff --git a/src/engine/courses/BlockFort.h b/src/engine/courses/BlockFort.h
index 60755878f..eba210234 100644
--- a/src/engine/courses/BlockFort.h
+++ b/src/engine/courses/BlockFort.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 5e1593b0c..58aab3456 100644
--- a/src/engine/courses/BowsersCastle.cpp
+++ b/src/engine/courses/BowsersCastle.cpp
@@ -111,8 +111,6 @@ void BowsersCastle::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_item_box_spawns));
}
-void BowsersCastle::Init() { }
-
// Likely sets minimap boundaries
void BowsersCastle::MinimapSettings() {
D_8018D2C0[0] = 265;
diff --git a/src/engine/courses/BowsersCastle.h b/src/engine/courses/BowsersCastle.h
index 2c00d6e80..e0ee8918d 100644
--- a/src/engine/courses/BowsersCastle.h
+++ b/src/engine/courses/BowsersCastle.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 fe7b32281..bfb1950c3 100644
--- a/src/engine/courses/ChocoMountain.cpp
+++ b/src/engine/courses/ChocoMountain.cpp
@@ -110,8 +110,6 @@ void ChocoMountain::SpawnActors() {
spawn_falling_rocks((struct ActorSpawnData*)LOAD_ASSET_RAW((const char*)d_course_choco_mountain_falling_rock_spawns));
}
-void ChocoMountain::Init() { }
-
// Likely sets minimap boundaries
void ChocoMountain::MinimapSettings() {
D_8018D2A0 = 0.022f;
diff --git a/src/engine/courses/ChocoMountain.h b/src/engine/courses/ChocoMountain.h
index 8bf07ffdf..c45d6ff1f 100644
--- a/src/engine/courses/ChocoMountain.h
+++ b/src/engine/courses/ChocoMountain.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/Course.cpp b/src/engine/courses/Course.cpp
index 8c6301dc1..f844adcdf 100644
--- a/src/engine/courses/Course.cpp
+++ b/src/engine/courses/Course.cpp
@@ -125,8 +125,6 @@ void Course::SpawnActors() {
}
-void Course::Init() {
-}
void Course::InitClouds() {
if (this->Props.Clouds) {
init_clouds(this->Props.Clouds);
diff --git a/src/engine/courses/Course.h b/src/engine/courses/Course.h
index 94f8fa3a7..00eb54f46 100644
--- a/src/engine/courses/Course.h
+++ b/src/engine/courses/Course.h
@@ -92,7 +92,6 @@ public:
virtual void Load(Vtx* vtx, Gfx *gfx); // Load custom course
virtual void LoadTextures();
virtual void SpawnActors();
- virtual void Init();
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);
diff --git a/src/engine/courses/DKJungle.cpp b/src/engine/courses/DKJungle.cpp
index f47252daa..bc8257548 100644
--- a/src/engine/courses/DKJungle.cpp
+++ b/src/engine/courses/DKJungle.cpp
@@ -117,8 +117,6 @@ void DKJungle::SpawnActors() {
func_80298D10();
}
-void DKJungle::Init() { }
-
// Likely sets minimap boundaries
void DKJungle::MinimapSettings() {
D_8018D2A0 = 0.0155f;
diff --git a/src/engine/courses/DKJungle.h b/src/engine/courses/DKJungle.h
index e9b4af9ed..bbe4e1cbf 100644
--- a/src/engine/courses/DKJungle.h
+++ b/src/engine/courses/DKJungle.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/DoubleDeck.cpp b/src/engine/courses/DoubleDeck.cpp
index 189dd3301..43b4b47c7 100644
--- a/src/engine/courses/DoubleDeck.cpp
+++ b/src/engine/courses/DoubleDeck.cpp
@@ -106,8 +106,6 @@ void DoubleDeck::LoadTextures() {
void DoubleDeck::SpawnActors() {}
-void DoubleDeck::Init() { }
-
// Likely sets minimap boundaries
void DoubleDeck::MinimapSettings() {
D_8018D2A0 = 0.0285f;
diff --git a/src/engine/courses/DoubleDeck.h b/src/engine/courses/DoubleDeck.h
index 989f6eec7..5d453742e 100644
--- a/src/engine/courses/DoubleDeck.h
+++ b/src/engine/courses/DoubleDeck.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 28a5ef15e..8236c345a 100644
--- a/src/engine/courses/FrappeSnowland.cpp
+++ b/src/engine/courses/FrappeSnowland.cpp
@@ -113,7 +113,6 @@ void FrappeSnowland::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_item_box_spawns));
}
-void FrappeSnowland::Init() { }
void FrappeSnowland::InitClouds() {
s32 var_s0;
s32 var_s4;
diff --git a/src/engine/courses/FrappeSnowland.h b/src/engine/courses/FrappeSnowland.h
index cc9af2f3e..f01943015 100644
--- a/src/engine/courses/FrappeSnowland.h
+++ b/src/engine/courses/FrappeSnowland.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 691e4c112..c88e52f9a 100644
--- a/src/engine/courses/KalimariDesert.cpp
+++ b/src/engine/courses/KalimariDesert.cpp
@@ -148,8 +148,6 @@ void KalimariDesert::SpawnActors() {
rrxing->crossingTrigger = crossing1;
}
-void KalimariDesert::Init() {}
-
// Likely sets minimap boundaries
void KalimariDesert::MinimapSettings() {
D_8018D2C0[0] = 263;
diff --git a/src/engine/courses/KalimariDesert.h b/src/engine/courses/KalimariDesert.h
index 345b807c1..337be914e 100644
--- a/src/engine/courses/KalimariDesert.h
+++ b/src/engine/courses/KalimariDesert.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
diff --git a/src/engine/courses/KoopaTroopaBeach.cpp b/src/engine/courses/KoopaTroopaBeach.cpp
index 35532b79c..fc0419984 100644
--- a/src/engine/courses/KoopaTroopaBeach.cpp
+++ b/src/engine/courses/KoopaTroopaBeach.cpp
@@ -112,8 +112,6 @@ void KoopaTroopaBeach::SpawnActors() {
spawn_palm_trees((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_tree_spawn));
}
-void KoopaTroopaBeach::Init() {}
-
// Likely sets minimap boundaries
void KoopaTroopaBeach::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust3, 0x3C8U, 0x1000));
diff --git a/src/engine/courses/KoopaTroopaBeach.h b/src/engine/courses/KoopaTroopaBeach.h
index 9a1ed3612..b930bbd95 100644
--- a/src/engine/courses/KoopaTroopaBeach.h
+++ b/src/engine/courses/KoopaTroopaBeach.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 c81ccb453..2f1ff2751 100644
--- a/src/engine/courses/LuigiRaceway.cpp
+++ b/src/engine/courses/LuigiRaceway.cpp
@@ -113,8 +113,6 @@ void LuigiRaceway::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_luigi_raceway_item_box_spawns));
}
-void LuigiRaceway::Init() {}
-
// Likely sets minimap boundaries
void LuigiRaceway::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust2, 0x4F4U, 0xC00));
diff --git a/src/engine/courses/LuigiRaceway.h b/src/engine/courses/LuigiRaceway.h
index ef4cb5783..0f48c40ab 100644
--- a/src/engine/courses/LuigiRaceway.h
+++ b/src/engine/courses/LuigiRaceway.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 4d4e2725f..2900ad36e 100644
--- a/src/engine/courses/MarioRaceway.cpp
+++ b/src/engine/courses/MarioRaceway.cpp
@@ -132,8 +132,6 @@ void MarioRaceway::SpawnActors() {
actor->flags |= 0x4000;
}
-void MarioRaceway::Init() {}
-
// 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 9c4f94b24..6857c19a2 100644
--- a/src/engine/courses/MarioRaceway.h
+++ b/src/engine/courses/MarioRaceway.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
diff --git a/src/engine/courses/MooMooFarm.cpp b/src/engine/courses/MooMooFarm.cpp
index bc9889e10..f755dde39 100644
--- a/src/engine/courses/MooMooFarm.cpp
+++ b/src/engine/courses/MooMooFarm.cpp
@@ -125,8 +125,6 @@ void MooMooFarm::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_item_box_spawns));
}
-void MooMooFarm::Init() {}
-
// Likely sets minimap boundaries
void MooMooFarm::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust0, 0x479, 0xC00));
diff --git a/src/engine/courses/MooMooFarm.h b/src/engine/courses/MooMooFarm.h
index 70c3f51b2..71eff8913 100644
--- a/src/engine/courses/MooMooFarm.h
+++ b/src/engine/courses/MooMooFarm.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 b42c2ec8a..08da45829 100644
--- a/src/engine/courses/PodiumCeremony.cpp
+++ b/src/engine/courses/PodiumCeremony.cpp
@@ -105,8 +105,6 @@ void PodiumCeremony::SpawnActors() {
spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn));
}
-void PodiumCeremony::Init() { }
-
// Likely sets minimap boundaries
void PodiumCeremony::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust4, 0x3F8, 0x1000));
diff --git a/src/engine/courses/PodiumCeremony.h b/src/engine/courses/PodiumCeremony.h
index c2abc3dc8..c8f8b7c06 100644
--- a/src/engine/courses/PodiumCeremony.h
+++ b/src/engine/courses/PodiumCeremony.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 6f4a0db50..038a40541 100644
--- a/src/engine/courses/RainbowRoad.cpp
+++ b/src/engine/courses/RainbowRoad.cpp
@@ -107,8 +107,6 @@ void RainbowRoad::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns));
}
-void RainbowRoad::Init() {}
-
void RainbowRoad::InitClouds() {
init_stars(this->Props.Clouds);
}
diff --git a/src/engine/courses/RainbowRoad.h b/src/engine/courses/RainbowRoad.h
index 3fd3a0333..6c32adb51 100644
--- a/src/engine/courses/RainbowRoad.h
+++ b/src/engine/courses/RainbowRoad.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 c83b2f196..e252d866f 100644
--- a/src/engine/courses/RoyalRaceway.cpp
+++ b/src/engine/courses/RoyalRaceway.cpp
@@ -120,8 +120,6 @@ void RoyalRaceway::SpawnActors() {
spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn));
}
-void RoyalRaceway::Init() {}
-
// Likely sets minimap boundaries
void RoyalRaceway::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust4, 0x3F8, 0x1000));
diff --git a/src/engine/courses/RoyalRaceway.h b/src/engine/courses/RoyalRaceway.h
index 219f7c2f5..07498c6eb 100644
--- a/src/engine/courses/RoyalRaceway.h
+++ b/src/engine/courses/RoyalRaceway.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 538b96c2a..38439eb95 100644
--- a/src/engine/courses/SherbetLand.cpp
+++ b/src/engine/courses/SherbetLand.cpp
@@ -107,8 +107,6 @@ void SherbetLand::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_sherbet_land_item_box_spawns));
}
-void SherbetLand::Init() {}
-
// Likely sets minimap boundaries
void SherbetLand::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust1, 0x485, 0xC00));
diff --git a/src/engine/courses/SherbetLand.h b/src/engine/courses/SherbetLand.h
index 769adef85..7ab4f9028 100644
--- a/src/engine/courses/SherbetLand.h
+++ b/src/engine/courses/SherbetLand.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 ac6dde347..82a16ad93 100644
--- a/src/engine/courses/Skyscraper.cpp
+++ b/src/engine/courses/Skyscraper.cpp
@@ -106,8 +106,6 @@ void Skyscraper::LoadTextures() {
void Skyscraper::SpawnActors() {}
-void Skyscraper::Init() { }
-
// Likely sets minimap boundaries
void Skyscraper::MinimapSettings() {
D_8018D2A0 = 0.0445f;
diff --git a/src/engine/courses/Skyscraper.h b/src/engine/courses/Skyscraper.h
index a7b49d4bc..a37c6e6ff 100644
--- a/src/engine/courses/Skyscraper.h
+++ b/src/engine/courses/Skyscraper.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 efc8f0834..dcc64ec79 100644
--- a/src/engine/courses/TestCourse.cpp
+++ b/src/engine/courses/TestCourse.cpp
@@ -165,8 +165,6 @@ struct ActorSpawnData rocks[] = {
rrxing->crossingTrigger = crossing1;
}
-void TestCourse::Init() {}
-
// Likely sets minimap boundaries
void TestCourse::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust5, 0x443, 0x1000));
diff --git a/src/engine/courses/TestCourse.h b/src/engine/courses/TestCourse.h
index 313b1ac58..9d988e4c6 100644
--- a/src/engine/courses/TestCourse.h
+++ b/src/engine/courses/TestCourse.h
@@ -27,7 +27,6 @@ public:
virtual void Load() override;
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 5bba22c10..d66faf571 100644
--- a/src/engine/courses/ToadsTurnpike.cpp
+++ b/src/engine/courses/ToadsTurnpike.cpp
@@ -112,7 +112,6 @@ void ToadsTurnpike::SpawnActors() {
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_toads_turnpike_item_box_spawns));
}
-void ToadsTurnpike::Init() {}
void ToadsTurnpike::InitClouds() {
init_stars(this->Props.Clouds);
}
diff --git a/src/engine/courses/ToadsTurnpike.h b/src/engine/courses/ToadsTurnpike.h
index fc6078721..8bba69de5 100644
--- a/src/engine/courses/ToadsTurnpike.h
+++ b/src/engine/courses/ToadsTurnpike.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() override;
virtual void InitClouds() override;
virtual void UpdateClouds(s32, Camera*) override;
virtual void MinimapSettings() override;
diff --git a/src/engine/courses/WarioStadium.cpp b/src/engine/courses/WarioStadium.cpp
index 7d299e703..bc90d15b6 100644
--- a/src/engine/courses/WarioStadium.cpp
+++ b/src/engine/courses/WarioStadium.cpp
@@ -107,20 +107,7 @@ void WarioStadium::LoadTextures() {
}
void WarioStadium::SpawnActors() {
- Vec3f position;
- Vec3f velocity = { 0.0f, 0.0f, 0.0f };
- Vec3s rotation = { 0, 0, 0 };
-
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_wario_stadium_item_box_spawns));
- // vec3f_set(position, -131.0f, 83.0f, 286.0f);
- // position[0] *= gCourseDirection;
- // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN);
- // vec3f_set(position, -2353.0f, 72.0f, -1608.0f);
- // position[0] *= gCourseDirection;
- // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN);
- // vec3f_set(position, -2622.0f, 79.0f, 739.0f);
- // position[0] *= gCourseDirection;
- // add_actor_to_empty_slot(position, rotation, velocity, ACTOR_WARIO_SIGN);
Vec3f pos = {-131.0f, 83.0f, 286.0f};
pos[0] *= gCourseDirection;
@@ -135,7 +122,6 @@ void WarioStadium::SpawnActors() {
gWorldInstance.AddActor(std::make_unique<AWarioSign>(pos3));
}
-void WarioStadium::Init() {}
void WarioStadium::InitClouds() {
init_stars(this->Props.Clouds);
}
diff --git a/src/engine/courses/WarioStadium.h b/src/engine/courses/WarioStadium.h
index c2f56564c..f41535be1 100644
--- a/src/engine/courses/WarioStadium.h
+++ b/src/engine/courses/WarioStadium.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() 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 796292985..fe7672d7e 100644
--- a/src/engine/courses/YoshiValley.cpp
+++ b/src/engine/courses/YoshiValley.cpp
@@ -117,8 +117,6 @@ void YoshiValley::SpawnActors() {
add_actor_to_empty_slot(position, rotation, velocity, ACTOR_YOSHI_EGG);
}
-void YoshiValley::Init() {}
-
// Likely sets minimap boundaries
void YoshiValley::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust0, 0x479, 0xC00));
diff --git a/src/engine/courses/YoshiValley.h b/src/engine/courses/YoshiValley.h
index a0976968d..8fe294019 100644
--- a/src/engine/courses/YoshiValley.h
+++ b/src/engine/courses/YoshiValley.h
@@ -26,7 +26,6 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void LoadTextures() override;
virtual void SpawnActors() override;
- virtual void Init() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void UpdateCourseObjects() override;
diff --git a/src/menus.c b/src/menus.c
index dd37671af..676169ae6 100644
--- a/src/menus.c
+++ b/src/menus.c
@@ -1684,7 +1684,6 @@ GLOBAL_ASM("asm/non_matchings/menus/player_select_menu_act.s")
u32 WorldNextCup(void);
u32 WorldPreviousCup(void);
u32 GetCupIndex(void);
-void SetCup(void);
// Handle navigating the course menu interface
void course_select_menu_act(struct Controller* arg0, u16 arg1) {
@@ -1713,8 +1712,6 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) {
}
D_800DC540 = GetCupIndex();
- //! @todo SetCourse();
- SetCup();
gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup];
SetCourseFromCup();
if ((buttonAndStickPress & B_BUTTON) != 0) {
@@ -1842,7 +1839,7 @@ void func_800B3F74(s32 menuSelection) {
case 10: {
gIsMirrorMode = 0;
gEnableDebugMode = CVarGetInteger("gEnableDebugMode", 0);
- SetCupIndex(MUSHROOM_CUP);
+ CourseManager_SetCup(GetMushroomCup());
gCupSelection = MUSHROOM_CUP;
gCourseIndexInCup = 0;
gTimeTrialDataCourseIndex = 0;
@@ -1953,13 +1950,13 @@ void func_800B3F74(s32 menuSelection) {
case 3:
case 13: {
if (gModeSelection == BATTLE) {
- SetCupIndex(BATTLE_CUP);
+ CourseManager_SetCup(GetBattleCup());
// gCupSelection = BATTLE_CUP;
D_800DC540 = 4;
D_8018EDEC = 4;
} else {
- if (GetCupIndex() == BATTLE_CUP) {
- SetCupIndex(MUSHROOM_CUP);
+ if (GetCup() == GetBattleCup()) {
+ CourseManager_SetCup(GetMushroomCup());
// gCupSelection = MUSHROOM_CUP;
}
D_8018EDEC = 1;
diff --git a/src/networking/start_game.c b/src/networking/start_game.c
index ac70aa771..ab2cc4e28 100644
--- a/src/networking/start_game.c
+++ b/src/networking/start_game.c
@@ -53,7 +53,7 @@ void network_cup_vote(uint32_t course) {
void set_course(const char* data) {
if (data != NULL) {
- SetCupIndex(data[0]);
+ //SetCup(data[0]);
gCupSelection = data[0];
// gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE];
//! @todo SetCourse();
diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp
index 163b573f4..22c14b38f 100644
--- a/src/port/Engine.cpp
+++ b/src/port/Engine.cpp
@@ -49,7 +49,8 @@ GameEngine::GameEngine() {
!patches_path.empty() && std::filesystem::exists(patches_path)) {
if (std::filesystem::is_directory(patches_path)) {
for (const auto& p : std::filesystem::recursive_directory_iterator(patches_path)) {
- if (StringHelper::IEquals(p.path().extension().string(), ".otr")) {
+ auto ext = p.path().extension().string();
+ if (StringHelper::IEquals(ext, ".otr") || StringHelper::IEquals(ext, ".o2r")) {
OTRFiles.push_back(p.path().generic_string());
}
}
diff --git a/src/port/Game.cpp b/src/port/Game.cpp
index 11d78c73e..9787f4562 100644
--- a/src/port/Game.cpp
+++ b/src/port/Game.cpp
@@ -1,8 +1,11 @@
#include <libultraship.h>
+#include "Game.h"
+
#include <Fast3D/gfx_pc.h>
#include "Engine.h"
#include "engine/World.h"
+#include "engine/courses/Course.h"
#include "engine/courses/MarioRaceway.h"
#include "engine/courses/ChocoMountain.h"
#include "engine/courses/BowsersCastle.h"
@@ -71,6 +74,12 @@ BigDonut* gBigDonut;
PodiumCeremony* gPodiumCeremony;
TestCourse* gTestCourse;
+Cup* gMushroomCup;
+Cup* gFlowerCup;
+Cup* gStarCup;
+Cup* gSpecialCup;
+Cup* gBattleCup;
+
void CustomEngineInit() {
gMarioRaceway = new MarioRaceway();
@@ -97,44 +106,45 @@ void CustomEngineInit() {
gTestCourse = new TestCourse();
/* Add all courses to the global course list */
- gWorldInstance.Courses.push_back(gMarioRaceway);
- gWorldInstance.Courses.push_back(gChocoMountain);
- gWorldInstance.Courses.push_back(gBowsersCastle);
- gWorldInstance.Courses.push_back(gBansheeBoardwalk);
- gWorldInstance.Courses.push_back(gYoshiValley);
- gWorldInstance.Courses.push_back(gFrappeSnowland);
- gWorldInstance.Courses.push_back(gKoopaTroopaBeach);
- gWorldInstance.Courses.push_back(gRoyalRaceway);
- gWorldInstance.Courses.push_back(gLuigiRaceway);
- gWorldInstance.Courses.push_back(gMooMooFarm);
- gWorldInstance.Courses.push_back(gToadsTurnpike);
- gWorldInstance.Courses.push_back(gKalimariDesert);
- gWorldInstance.Courses.push_back(gSherbetLand);
- gWorldInstance.Courses.push_back(gRainbowRoad);
- gWorldInstance.Courses.push_back(gWarioStadium);
- gWorldInstance.Courses.push_back(gBlockFort);
- gWorldInstance.Courses.push_back(gSkyscraper);
- gWorldInstance.Courses.push_back(gDoubleDeck);
- gWorldInstance.Courses.push_back(gDkJungle);
- gWorldInstance.Courses.push_back(gBigDonut);
- gWorldInstance.Courses.push_back(gTestCourse);
+ gWorldInstance.AddCourse(gMarioRaceway);
+ gWorldInstance.AddCourse(gChocoMountain);
+ gWorldInstance.AddCourse(gBowsersCastle);
+ gWorldInstance.AddCourse(gBansheeBoardwalk);
+ gWorldInstance.AddCourse(gYoshiValley);
+ gWorldInstance.AddCourse(gFrappeSnowland);
+ gWorldInstance.AddCourse(gKoopaTroopaBeach);
+ gWorldInstance.AddCourse(gRoyalRaceway);
+ gWorldInstance.AddCourse(gLuigiRaceway);
+ gWorldInstance.AddCourse(gMooMooFarm);
+ gWorldInstance.AddCourse(gToadsTurnpike);
+ gWorldInstance.AddCourse(gKalimariDesert);
+ gWorldInstance.AddCourse(gSherbetLand);
+ gWorldInstance.AddCourse(gRainbowRoad);
+ gWorldInstance.AddCourse(gWarioStadium);
+ gWorldInstance.AddCourse(gBlockFort);
+ gWorldInstance.AddCourse(gSkyscraper);
+ gWorldInstance.AddCourse(gDoubleDeck);
+ gWorldInstance.AddCourse(gDkJungle);
+ gWorldInstance.AddCourse(gBigDonut);
+ gWorldInstance.AddCourse(gTestCourse);
+
+ gMushroomCup = new Cup("mk:mushroom_cup", "mushroom cup", std::vector<Course*>{ gLuigiRaceway, gMooMooFarm, gKoopaTroopaBeach, gKalimariDesert });
+ gFlowerCup = new Cup("mk:flower_cup", "flower cup", std::vector<Course*>{ gToadsTurnpike, gFrappeSnowland, gChocoMountain, gMarioRaceway });
+ gStarCup = new Cup("mk:star_cup", "star cup", std::vector<Course*>{ gWarioStadium, gSherbetLand, gRoyalRaceway, gBowsersCastle });
+ gSpecialCup = new Cup("mk:special_cup", "special cup", std::vector<Course*>{ gDkJungle, gYoshiValley, gBansheeBoardwalk, gRainbowRoad });
+ gBattleCup = new Cup("mk:battle_cup", "battle", std::vector<Course*>{ gBigDonut, gBlockFort, gDoubleDeck, gSkyscraper });
/* Instantiate Cups */
- Cup* mushroom = gWorldInstance.AddCup(
- "mushroom cup", std::vector<Course*>{ gLuigiRaceway, gMooMooFarm, gKoopaTroopaBeach, gKalimariDesert });
- Cup* flower = gWorldInstance.AddCup(
- "flower cup", std::vector<Course*>{ gToadsTurnpike, gFrappeSnowland, gChocoMountain, gMarioRaceway });
- Cup* star = gWorldInstance.AddCup(
- "star cup", std::vector<Course*>{ gWarioStadium, gSherbetLand, gRoyalRaceway, gBowsersCastle });
- Cup* special = gWorldInstance.AddCup(
- "special cup", std::vector<Course*>{ gDkJungle, gYoshiValley, gBansheeBoardwalk, gRainbowRoad });
- Cup* battle =
- gWorldInstance.AddCup("battle", std::vector<Course*>{ gBigDonut, gBlockFort, gDoubleDeck, gSkyscraper });
+ gWorldInstance.AddCup(gMushroomCup);
+ gWorldInstance.AddCup(gFlowerCup);
+ gWorldInstance.AddCup(gStarCup);
+ gWorldInstance.AddCup(gSpecialCup);
+ gWorldInstance.AddCup(gBattleCup);
/* Set default course; mario raceway */
gWorldInstance.CurrentCourse = gMarioRaceway;
- gWorldInstance.CurrentCup = flower;
- gWorldInstance.CurrentCup->CursorPosition = 2;
+ gWorldInstance.CurrentCup = gFlowerCup;
+ gWorldInstance.CurrentCup->CursorPosition = 3;
}
extern "C" {
@@ -151,12 +161,12 @@ extern "C" {
return gWorldInstance.PreviousCup();
}
- void SetCupIndex(int16_t courseId) {
- gWorldInstance.SetCupIndex(courseId);
+ void CourseManager_SetCup(void* cup) {
+ gWorldInstance.SetCup((Cup*)cup);
}
- void SetCup() {
- gWorldInstance.SetCup();
+ void* GetCup() {
+ return gWorldInstance.CurrentCup;
}
u32 GetCupIndex(void) {
@@ -165,7 +175,7 @@ extern "C" {
}
const char* GetCupName(void) {
- return gWorldInstance.Cups[gWorldInstance.CupIndex]->Name;
+ return gWorldInstance.CurrentCup->Name;
}
void LoadCourse() {
@@ -521,8 +531,24 @@ extern "C" {
return gPodiumCeremony;
}
- void* GetTestCourse(void) {
- return gTestCourse;
+ void* GetMushroomCup(void) {
+ return gMushroomCup;
+ }
+
+ void* GetFlowerCup(void) {
+ return gFlowerCup;
+ }
+
+ void* GetStarCup(void) {
+ return gStarCup;
+ }
+
+ void* GetSpecialCup(void) {
+ return gSpecialCup;
+ }
+
+ void* GetBattleCup(void) {
+ return gBattleCup;
}
}
diff --git a/src/port/Game.h b/src/port/Game.h
index 1e923de6b..64fa0fb3a 100644
--- a/src/port/Game.h
+++ b/src/port/Game.h
@@ -1,15 +1,18 @@
+#ifndef _GAME_H
+#define _GAME_H
+
#include <libultraship.h>
#include "engine/Engine.h"
#ifdef __cplusplus
extern "C" {
+#include "camera.h"
#endif
+
u32 WorldNextCup(void);
u32 WorldPreviousCup(void);
-void SetCupIndex(int16_t courseId);
-void SetCup();
u32 GetCupIndex(void);
const char* GetCupName(void);
@@ -25,6 +28,8 @@ void SetCourse(const char* name);
void NextCourse();
void PreviousCourse();
+void CourseManager_SetCup(void*);
+
void CourseManager_SpawnVehicles();
void CourseManager_UpdateVehicles();
@@ -128,7 +133,18 @@ void* GetBigDonut(void);
void* GetPodiumCeremony(void);
-void* GetTestCourse(void);
+void* GetMushroomCup(void);
+
+void* GetFlowerCup(void);
+
+void* GetStarCup(void);
+
+void* GetSpecialCup(void);
+
+void* GetBattleCup(void);
+
#ifdef __cplusplus
}
-#endif \ No newline at end of file
+#endif
+
+#endif // _GAME_H \ No newline at end of file