Refactors (#114)

* Update Engine.cpp

* fix

* Add Actors

* Refactor

* Update Game.cpp

* Refactors as per review
This commit is contained in:
MegaMech
2024-10-15 20:29:26 -06:00
committed by GitHub
parent af81bad1f3
commit 4fbb031dd9
56 changed files with 129 additions and 175 deletions
+8 -2
View File
@@ -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];
+4 -3
View File
@@ -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.");
+2 -1
View File
@@ -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();
+17 -31
View File
@@ -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;
}
+5 -6
View File
@@ -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;
-2
View File
@@ -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);
-1
View File
@@ -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;
-2
View File
@@ -103,8 +103,6 @@ void BigDonut::LoadTextures() {
void BigDonut::SpawnActors() {}
void BigDonut::Init() { }
// Likely sets minimap boundaries
void BigDonut::MinimapSettings() {
D_8018D2A0 = 0.0257f;
-1
View File
@@ -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;
-2
View File
@@ -106,8 +106,6 @@ void BlockFort::LoadTextures() {
void BlockFort::SpawnActors() {}
void BlockFort::Init() { }
// Likely sets minimap boundaries
void BlockFort::MinimapSettings() {
D_8018D2A0 = 0.0335f;
-1
View File
@@ -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;
-2
View File
@@ -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;
-1
View File
@@ -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;
-2
View File
@@ -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;
-1
View File
@@ -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;
-2
View File
@@ -125,8 +125,6 @@ void Course::SpawnActors() {
}
void Course::Init() {
}
void Course::InitClouds() {
if (this->Props.Clouds) {
init_clouds(this->Props.Clouds);
-1
View File
@@ -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);
-2
View File
@@ -117,8 +117,6 @@ void DKJungle::SpawnActors() {
func_80298D10();
}
void DKJungle::Init() { }
// Likely sets minimap boundaries
void DKJungle::MinimapSettings() {
D_8018D2A0 = 0.0155f;
-1
View File
@@ -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;
-2
View File
@@ -106,8 +106,6 @@ void DoubleDeck::LoadTextures() {
void DoubleDeck::SpawnActors() {}
void DoubleDeck::Init() { }
// Likely sets minimap boundaries
void DoubleDeck::MinimapSettings() {
D_8018D2A0 = 0.0285f;
-1
View File
@@ -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;
-1
View File
@@ -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;
-1
View File
@@ -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;
-2
View File
@@ -148,8 +148,6 @@ void KalimariDesert::SpawnActors() {
rrxing->crossingTrigger = crossing1;
}
void KalimariDesert::Init() {}
// Likely sets minimap boundaries
void KalimariDesert::MinimapSettings() {
D_8018D2C0[0] = 263;
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -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);
}
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-2
View File
@@ -106,8 +106,6 @@ void Skyscraper::LoadTextures() {
void Skyscraper::SpawnActors() {}
void Skyscraper::Init() { }
// Likely sets minimap boundaries
void Skyscraper::MinimapSettings() {
D_8018D2A0 = 0.0445f;
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
-1
View File
@@ -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);
}
-1
View File
@@ -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;
-14
View File
@@ -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);
}
-1
View File
@@ -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;
-2
View File
@@ -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));
-1
View File
@@ -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;
+4 -7
View File
@@ -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;
+1 -1
View File
@@ -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();
+2 -1
View File
@@ -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());
}
}
+66 -40
View File
@@ -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;
}
}
+20 -4
View File
@@ -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
#endif
#endif // _GAME_H