summaryrefslogtreecommitdiff
path: root/src/port/Game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/port/Game.cpp')
-rw-r--r--src/port/Game.cpp837
1 files changed, 423 insertions, 414 deletions
diff --git a/src/port/Game.cpp b/src/port/Game.cpp
index d73f5ccdf..5ac56da94 100644
--- a/src/port/Game.cpp
+++ b/src/port/Game.cpp
@@ -50,7 +50,7 @@ extern "C" {
#include "render_courses.h"
#include "menus.h"
#include "update_objects.h"
-//#include "engine/wasm.h"
+// #include "engine/wasm.h"
}
extern "C" void Graphics_PushFrame(Gfx* data) {
@@ -141,11 +141,16 @@ void CustomEngineInit() {
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 });
+ 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 */
gWorldInstance.AddCup(gMushroomCup);
@@ -172,574 +177,577 @@ void CustomEngineInit() {
// Model loader systems allows cutting pieces out of courses and making them actors.
// Commented out due to alleged stability issues.
- //gModelLoader.Add(bowserStatueList);
+ // gModelLoader.Add(bowserStatueList);
- //gModelLoader.Load();
+ // gModelLoader.Load();
}
extern "C" {
- World* GetWorld(void) {
- return &gWorldInstance;
- }
+World* GetWorld(void) {
+ return &gWorldInstance;
+}
- u32 WorldNextCup(void) {
- return gWorldInstance.NextCup();
- }
+u32 WorldNextCup(void) {
+ return gWorldInstance.NextCup();
+}
- u32 WorldPreviousCup(void) {
- return gWorldInstance.PreviousCup();
- }
+u32 WorldPreviousCup(void) {
+ return gWorldInstance.PreviousCup();
+}
- void CM_SetCup(void* cup) {
- gWorldInstance.SetCup((Cup*)cup);
- }
+void CM_SetCup(void* cup) {
+ gWorldInstance.SetCup((Cup*) cup);
+}
- void* GetCup() {
- return gWorldInstance.CurrentCup;
- }
+void* GetCup() {
+ return gWorldInstance.CurrentCup;
+}
- u32 GetCupIndex(void) {
- return gWorldInstance.GetCupIndex();
- }
+u32 GetCupIndex(void) {
+ return gWorldInstance.GetCupIndex();
+}
- const char* GetCupName(void) {
- return gWorldInstance.CurrentCup->Name;
- }
+const char* GetCupName(void) {
+ return gWorldInstance.CurrentCup->Name;
+}
- void LoadCourse() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->Load();
- }
+void LoadCourse() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->Load();
}
+}
+size_t GetCourseIndex() {
+ return gWorldInstance.CourseIndex;
+}
- size_t GetCourseIndex() {
- return gWorldInstance.CourseIndex;
- }
-
- void SetCourse(const char* name) {
- gWorldInstance.SetCourse(name);
- }
+void SetCourse(const char* name) {
+ gWorldInstance.SetCourse(name);
+}
- void NextCourse() {
- gWorldInstance.NextCourse();
- }
+void NextCourse() {
+ gWorldInstance.NextCourse();
+}
+void PreviousCourse() {
+ gWorldInstance.PreviousCourse();
+}
- void PreviousCourse() {
- gWorldInstance.PreviousCourse();
- }
-
- void SetCourseById(s32 course) {
- if (course < 0 || course >= gWorldInstance.Courses.size()) {
- return;
- }
- gWorldInstance.CourseIndex = course;
- gWorldInstance.CurrentCourse = gWorldInstance.Courses[gWorldInstance.CourseIndex];
+void SetCourseById(s32 course) {
+ if (course < 0 || course >= gWorldInstance.Courses.size()) {
+ return;
}
+ gWorldInstance.CourseIndex = course;
+ gWorldInstance.CurrentCourse = gWorldInstance.Courses[gWorldInstance.CourseIndex];
+}
- void CM_VehicleCollision(s32 playerId, Player* player) {
- for (auto& actor : gWorldInstance.Actors) {
- if (actor) {
- actor->VehicleCollision(playerId, player);
- }
+void CM_VehicleCollision(s32 playerId, Player* player) {
+ for (auto& actor : gWorldInstance.Actors) {
+ if (actor) {
+ actor->VehicleCollision(playerId, player);
}
}
+}
- void CM_BombKartsWaypoint(s32 cameraId) {
- for (auto& object : gWorldInstance.Objects) {
- if (auto kart = dynamic_cast<OBombKart*>(object)) {;
- if (kart) {
- kart->Waypoint(cameraId);
- }
+void CM_BombKartsWaypoint(s32 cameraId) {
+ for (auto& object : gWorldInstance.Objects) {
+ if (auto kart = dynamic_cast<OBombKart*>(object)) {
+ if (kart) {
+ kart->Waypoint(cameraId);
}
}
}
+}
- void CM_DisplayBattleBombKart(s32 playerId, s32 primAlpha) {
+void CM_DisplayBattleBombKart(s32 playerId, s32 primAlpha) {
- if ((playerId < 0) || (playerId > 4)) {
- return;
- }
-
- if (primAlpha == 0) {
- gWorldInstance.playerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::DISABLED;
- gWorldInstance.playerBombKart[playerId]._primAlpha = primAlpha;
- } else {
- gWorldInstance.playerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::ACTIVE;
- gWorldInstance.playerBombKart[playerId]._primAlpha = primAlpha;
- }
+ if ((playerId < 0) || (playerId > 4)) {
+ return;
}
- void CM_DrawBattleBombKarts(s32 cameraId) {
- for (size_t i = 0; i < gPlayerCount; i++) {
- gWorldInstance.playerBombKart[i].Draw(i, cameraId);
- }
+ if (primAlpha == 0) {
+ gWorldInstance.playerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::DISABLED;
+ gWorldInstance.playerBombKart[playerId]._primAlpha = primAlpha;
+ } else {
+ gWorldInstance.playerBombKart[playerId].state = PlayerBombKart::PlayerBombKartState::ACTIVE;
+ gWorldInstance.playerBombKart[playerId]._primAlpha = primAlpha;
}
+}
- void CM_ClearVehicles(void) {
- gWorldInstance.Crossings.clear();
+void CM_DrawBattleBombKarts(s32 cameraId) {
+ for (size_t i = 0; i < gPlayerCount; i++) {
+ gWorldInstance.playerBombKart[i].Draw(i, cameraId);
}
+}
- void CM_CrossingTrigger() {
- for (auto& crossing : gWorldInstance.Crossings) {
- if (crossing) {
- crossing->CrossingTrigger();
- }
- }
- }
+void CM_ClearVehicles(void) {
+ gWorldInstance.Crossings.clear();
+}
- void CM_AICrossingBehaviour(s32 playerId) {
- for (auto& crossing : gWorldInstance.Crossings) {
- if (crossing) {
- crossing->AICrossingBehaviour(playerId);
- }
+void CM_CrossingTrigger() {
+ for (auto& crossing : gWorldInstance.Crossings) {
+ if (crossing) {
+ crossing->CrossingTrigger();
}
}
+}
- s32 CM_GetCrossingOnTriggered(uintptr_t* crossing) {
- TrainCrossing* ptr = (TrainCrossing*) crossing;
- if (ptr) {
- return ptr->OnTriggered;
+void CM_AICrossingBehaviour(s32 playerId) {
+ for (auto& crossing : gWorldInstance.Crossings) {
+ if (crossing) {
+ crossing->AICrossingBehaviour(playerId);
}
}
+}
- void CM_LoadTextures() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->LoadTextures();
- }
+s32 CM_GetCrossingOnTriggered(uintptr_t* crossing) {
+ TrainCrossing* ptr = (TrainCrossing*) crossing;
+ if (ptr) {
+ return ptr->OnTriggered;
}
+}
- void CM_RenderCourse(struct UnkStruct_800DC5EC* arg0) {
- if (gWorldInstance.CurrentCourse->IsMod() == false) {
- if ((CVarGetInteger("gFreecam", 0) == true)) {
- // Render credits courses
- func_8029569C();
- return;
- }
- }
-
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->Render(arg0);
- }
+void CM_LoadTextures() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->LoadTextures();
}
+}
- void CM_RenderCredits() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->RenderCredits();
+void CM_RenderCourse(struct UnkStruct_800DC5EC* arg0) {
+ if (gWorldInstance.CurrentCourse->IsMod() == false) {
+ if ((CVarGetInteger("gFreecam", 0) == true)) {
+ // Render credits courses
+ func_8029569C();
+ return;
}
}
- void CM_TickActors() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.TickActors();
- }
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->Render(arg0);
}
+}
- void CM_DrawActors(Camera* camera, struct Actor* actor) {
- AActor* a = gWorldInstance.ConvertActorToAActor(actor);
- if (a->IsMod()) {
- a->Draw(camera);
- }
+void CM_RenderCredits() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->RenderCredits();
}
+}
- void CM_BeginPlay() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->BeginPlay();
- }
+void CM_TickActors() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.TickActors();
}
+}
- void CM_TickObjects() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.TickObjects();
- }
+void CM_DrawActors(Camera* camera, struct Actor* actor) {
+ AActor* a = gWorldInstance.ConvertActorToAActor(actor);
+ if (a->IsMod()) {
+ a->Draw(camera);
}
+}
- // A couple objects such as lakitu are ticked inside of process_game_tick which support 60fps.
- // This is a fallback to support that.
- void CM_TickObjects60fps() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.TickObjects60fps();
- }
+void CM_BeginPlay() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->BeginPlay();
}
+}
- void CM_DrawObjects(s32 cameraId) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.DrawObjects(cameraId);
- }
+void CM_TickObjects() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.TickObjects();
}
+}
- void CM_TickParticles() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.TickParticles();
- }
+// A couple objects such as lakitu are ticked inside of process_game_tick which support 60fps.
+// This is a fallback to support that.
+void CM_TickObjects60fps() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.TickObjects60fps();
}
+}
- void CM_DrawParticles(s32 cameraId) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.DrawParticles(cameraId);
- }
+void CM_DrawObjects(s32 cameraId) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.DrawObjects(cameraId);
}
+}
- // Helps prevents users from forgetting to add a finishline to their course
- bool CM_DoesFinishlineExist() {
- for (AActor* actor : gWorldInstance.Actors) {
- if (dynamic_cast<AFinishline*>(actor)) {
- return true;
- }
- }
- return false;
+void CM_TickParticles() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.TickParticles();
}
+}
- void CM_InitClouds() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->InitClouds();
- }
+void CM_DrawParticles(s32 cameraId) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.DrawParticles(cameraId);
}
+}
- void CM_UpdateClouds(s32 arg0, Camera* camera) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->UpdateClouds(arg0, camera);
+// Helps prevents users from forgetting to add a finishline to their course
+bool CM_DoesFinishlineExist() {
+ for (AActor* actor : gWorldInstance.Actors) {
+ if (dynamic_cast<AFinishline*>(actor)) {
+ return true;
}
}
+ return false;
+}
- void CM_Waypoints(Player* player, int8_t playerId) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->Waypoints(player, playerId);
- }
+void CM_InitClouds() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->InitClouds();
}
+}
- void CM_SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5,
- f32* arg6, f32* arg7) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
- }
+void CM_UpdateClouds(s32 arg0, Camera* camera) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->UpdateClouds(arg0, camera);
}
+}
- void CM_MinimapSettings() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->MinimapSettings();
- }
+void CM_Waypoints(Player* player, int8_t playerId) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->Waypoints(player, playerId);
}
+}
- void CM_InitCourseObjects() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->InitCourseObjects();
- }
+void CM_SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6,
+ f32* arg7) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
+}
- void CM_UpdateCourseObjects() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->UpdateCourseObjects();
- }
- TrainSmokeTick();
+void CM_MinimapSettings() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->MinimapSettings();
}
+}
- void CM_RenderCourseObjects(s32 cameraId) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->RenderCourseObjects(cameraId);
- }
-
- TrainSmokeDraw(cameraId);
+void CM_InitCourseObjects() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->InitCourseObjects();
}
+}
- void CM_SomeSounds() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->SomeSounds();
- }
+void CM_UpdateCourseObjects() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->UpdateCourseObjects();
}
+ TrainSmokeTick();
+}
- void CM_CreditsSpawnActors() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->CreditsSpawnActors();
- }
+void CM_RenderCourseObjects(s32 cameraId) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->RenderCourseObjects(cameraId);
}
- void CM_WhatDoesThisDo(Player* player, int8_t playerId) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->WhatDoesThisDo(player, playerId);
- }
+ TrainSmokeDraw(cameraId);
+}
+
+void CM_SomeSounds() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->SomeSounds();
}
+}
- void CM_WhatDoesThisDoAI(Player* player, int8_t playerId) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->WhatDoesThisDoAI(player, playerId);
- }
+void CM_CreditsSpawnActors() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->CreditsSpawnActors();
}
+}
- void CM_MinimapFinishlinePosition() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->MinimapFinishlinePosition();
- }
+void CM_WhatDoesThisDo(Player* player, int8_t playerId) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->WhatDoesThisDo(player, playerId);
}
+}
- void CM_SetStaffGhost() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->SetStaffGhost();
- }
+void CM_WhatDoesThisDoAI(Player* player, int8_t playerId) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->WhatDoesThisDoAI(player, playerId);
}
+}
- Properties* CM_GetProps() {
- if (gWorldInstance.CurrentCourse) {
- return &gWorldInstance.CurrentCourse->Props;
- }
- return NULL;
+void CM_MinimapFinishlinePosition() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->MinimapFinishlinePosition();
}
+}
- void CM_ScrollingTextures() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->ScrollingTextures();
- }
+void CM_SetStaffGhost() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->SetStaffGhost();
}
+}
- void CM_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->DrawWater(screen, pathCounter, cameraRot, playerDirection);
- }
+Properties* CM_GetProps() {
+ if (gWorldInstance.CurrentCourse) {
+ return &gWorldInstance.CurrentCourse->Props;
}
+ return NULL;
+}
- /**
- * This should only be ran once per course, otherwise animation/timings might become sped up.
- */
- void CM_SpawnStarterLakitu() {
- if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
- return;
- }
+Properties* CM_GetPropsCourseId(s32 courseId) {
+ return &gWorldInstance.Courses[courseId]->Props;
+}
- for (size_t i = 0; i < gPlayerCountSelection1; i++) {
- OLakitu* lakitu = new OLakitu(i, OLakitu::LakituType::STARTER);
- gWorldInstance.Lakitus[i] = lakitu;
- gWorldInstance.AddObject(lakitu);
- }
+void CM_ScrollingTextures() {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->ScrollingTextures();
}
+}
- // Checkered flag lakitu
- void CM_ActivateFinishLakitu(s32 playerId) {
- if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
- return;
- }
- gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::FINISH);
+void CM_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
+ uint16_t playerDirection) {
+ if (gWorldInstance.CurrentCourse) {
+ gWorldInstance.CurrentCourse->DrawWater(screen, pathCounter, cameraRot, playerDirection);
}
+}
- void CM_ActivateSecondLapLakitu(s32 playerId) {
- if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
- return;
- }
- gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::SECOND_LAP);
+/**
+ * This should only be ran once per course, otherwise animation/timings might become sped up.
+ */
+void CM_SpawnStarterLakitu() {
+ if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
+ return;
}
- void CM_ActivateFinalLapLakitu(s32 playerId) {
- if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
- return;
- }
- gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::FINAL_LAP);
+ for (size_t i = 0; i < gPlayerCountSelection1; i++) {
+ OLakitu* lakitu = new OLakitu(i, OLakitu::LakituType::STARTER);
+ gWorldInstance.Lakitus[i] = lakitu;
+ gWorldInstance.AddObject(lakitu);
}
+}
- void CM_ActivateReverseLakitu(s32 playerId) {
- if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
- return;
- }
- gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::REVERSE);
+// Checkered flag lakitu
+void CM_ActivateFinishLakitu(s32 playerId) {
+ if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
+ return;
}
+ gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::FINISH);
+}
- size_t GetCupCursorPosition() {
- return gWorldInstance.CurrentCup->CursorPosition;
+void CM_ActivateSecondLapLakitu(s32 playerId) {
+ if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
+ return;
}
+ gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::SECOND_LAP);
+}
- void SetCupCursorPosition(size_t position) {
- gWorldInstance.CurrentCup->SetCourse(position);
- //gWorldInstance.CurrentCup->CursorPosition = position;
+void CM_ActivateFinalLapLakitu(s32 playerId) {
+ if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
+ return;
}
+ gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::FINAL_LAP);
+}
- size_t GetCupSize() {
- return gWorldInstance.CurrentCup->GetSize();
+void CM_ActivateReverseLakitu(s32 playerId) {
+ if ((gDemoMode) || (gGamestate == CREDITS_SEQUENCE)) {
+ return;
}
+ gWorldInstance.Lakitus[playerId]->Activate(OLakitu::LakituType::REVERSE);
+}
- void SetCourseFromCup() {
- gWorldInstance.CurrentCourse = gWorldInstance.CurrentCup->GetCourse();
- }
+size_t GetCupCursorPosition() {
+ return gWorldInstance.CurrentCup->CursorPosition;
+}
- void* GetCourse(void) {
- return gWorldInstance.CurrentCourse;
- }
+void SetCupCursorPosition(size_t position) {
+ gWorldInstance.CurrentCup->SetCourse(position);
+ // gWorldInstance.CurrentCup->CursorPosition = position;
+}
- void SetCourseByClass(void* course) {
- gWorldInstance.CurrentCourse = (Course*) course;
- }
+size_t GetCupSize() {
+ return gWorldInstance.CurrentCup->GetSize();
+}
- struct Actor* CM_GetActor(size_t index) {
- if (index < gWorldInstance.Actors.size()) {
- AActor* actor = gWorldInstance.Actors[index];
- return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(actor) + sizeof(void*));
- } else {
- //throw std::runtime_error("GetActor() index out of bounds");
- return NULL;
- }
- }
+void SetCourseFromCup() {
+ gWorldInstance.CurrentCourse = gWorldInstance.CurrentCup->GetCourse();
+}
- size_t CM_FindActorIndex(Actor* actor) {
- // Move the ptr back to look at the vtable.
- // This gets us the proper C++ class instead of just the variables used in C.
- AActor* a = reinterpret_cast<AActor*>((char*)actor - sizeof(void*));
- auto actors = gWorldInstance.Actors;
+void* GetCourse(void) {
+ return gWorldInstance.CurrentCourse;
+}
- auto it = std::find(actors.begin(), actors.end(), static_cast<AActor*>(a));
- if (it != actors.end()) {
- return std::distance(actors.begin(), it);
- }
- printf("FindActorIndex() actor not found\n");
- return 0;
- }
+void SetCourseByClass(void* course) {
+ gWorldInstance.CurrentCourse = (Course*) course;
+}
- void CM_DeleteActor(size_t index) {
- std::vector<AActor*> actors = gWorldInstance.Actors;
- if (index < actors.size()) {
- actors.erase(actors.begin() + index);
- }
- }
-
- /**
- * Clean up actors and other game objects.
- */
- void CM_CleanWorld(void) {
- gWorldInstance.Actors.clear();
- gWorldInstance.Objects.clear();
- gWorldInstance.Emitters.clear();
- gWorldInstance.Lakitus.clear();
+struct Actor* CM_GetActor(size_t index) {
+ if (index < gWorldInstance.Actors.size()) {
+ AActor* actor = gWorldInstance.Actors[index];
+ return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(actor) + sizeof(void*));
+ } else {
+ // throw std::runtime_error("GetActor() index out of bounds");
+ return NULL;
}
+}
+
+size_t CM_FindActorIndex(Actor* actor) {
+ // Move the ptr back to look at the vtable.
+ // This gets us the proper C++ class instead of just the variables used in C.
+ AActor* a = reinterpret_cast<AActor*>((char*) actor - sizeof(void*));
+ auto actors = gWorldInstance.Actors;
- struct Actor* CM_AddBaseActor(void) {
- return (struct Actor*) gWorldInstance.AddBaseActor();
+ auto it = std::find(actors.begin(), actors.end(), static_cast<AActor*>(a));
+ if (it != actors.end()) {
+ return std::distance(actors.begin(), it);
}
+ printf("FindActorIndex() actor not found\n");
+ return 0;
+}
- size_t CM_GetActorSize() {
- return gWorldInstance.Actors.size();
+void CM_DeleteActor(size_t index) {
+ std::vector<AActor*> actors = gWorldInstance.Actors;
+ if (index < actors.size()) {
+ actors.erase(actors.begin() + index);
}
+}
- void CM_ActorCollision(Player* player, Actor* actor) {
- AActor* a = gWorldInstance.ConvertActorToAActor(actor);
+/**
+ * Clean up actors and other game objects.
+ */
+void CM_CleanWorld(void) {
+ gWorldInstance.Actors.clear();
+ gWorldInstance.Objects.clear();
+ gWorldInstance.Emitters.clear();
+ gWorldInstance.Lakitus.clear();
+}
- if (a->IsMod()) {
- a->Collision(player, a);
- }
- }
+struct Actor* CM_AddBaseActor(void) {
+ return (struct Actor*) gWorldInstance.AddBaseActor();
+}
- void* GetMarioRaceway(void) {
- return gMarioRaceway;
- }
+size_t CM_GetActorSize() {
+ return gWorldInstance.Actors.size();
+}
- void* GetLuigiRaceway(void) {
- return gLuigiRaceway;
- }
+void CM_ActorCollision(Player* player, Actor* actor) {
+ AActor* a = gWorldInstance.ConvertActorToAActor(actor);
- void* GetChocoMountain(void) {
- return gChocoMountain;
+ if (a->IsMod()) {
+ a->Collision(player, a);
}
+}
- void* GetBowsersCastle(void) {
- return gBowsersCastle;
- }
+void* GetMarioRaceway(void) {
+ return gMarioRaceway;
+}
- void* GetBansheeBoardwalk(void) {
- return gBansheeBoardwalk;
- }
+void* GetLuigiRaceway(void) {
+ return gLuigiRaceway;
+}
- void* GetYoshiValley(void) {
- return gYoshiValley;
- }
+void* GetChocoMountain(void) {
+ return gChocoMountain;
+}
- void* GetFrappeSnowland(void) {
- return gFrappeSnowland;
- }
+void* GetBowsersCastle(void) {
+ return gBowsersCastle;
+}
- void* GetKoopaTroopaBeach(void) {
- return gKoopaTroopaBeach;
- }
+void* GetBansheeBoardwalk(void) {
+ return gBansheeBoardwalk;
+}
- void* GetRoyalRaceway(void) {
- return gRoyalRaceway;
- }
+void* GetYoshiValley(void) {
+ return gYoshiValley;
+}
- void* GetMooMooFarm(void) {
- return gMooMooFarm;
- }
+void* GetFrappeSnowland(void) {
+ return gFrappeSnowland;
+}
- void* GetToadsTurnpike(void) {
- return gToadsTurnpike;
- }
+void* GetKoopaTroopaBeach(void) {
+ return gKoopaTroopaBeach;
+}
- void* GetKalimariDesert(void) {
- return gKalimariDesert;
- }
+void* GetRoyalRaceway(void) {
+ return gRoyalRaceway;
+}
- void* GetSherbetLand(void) {
- return gSherbetLand;
- }
+void* GetMooMooFarm(void) {
+ return gMooMooFarm;
+}
- void* GetRainbowRoad(void) {
- return gRainbowRoad;
- }
+void* GetToadsTurnpike(void) {
+ return gToadsTurnpike;
+}
- void* GetWarioStadium(void) {
- return gWarioStadium;
- }
+void* GetKalimariDesert(void) {
+ return gKalimariDesert;
+}
- void* GetBlockFort(void) {
- return gBlockFort;
- }
+void* GetSherbetLand(void) {
+ return gSherbetLand;
+}
- void* GetSkyscraper(void) {
- return gSkyscraper;
- }
+void* GetRainbowRoad(void) {
+ return gRainbowRoad;
+}
- void* GetDoubleDeck(void) {
- return gDoubleDeck;
- }
+void* GetWarioStadium(void) {
+ return gWarioStadium;
+}
- void* GetDkJungle(void) {
- return gDkJungle;
- }
+void* GetBlockFort(void) {
+ return gBlockFort;
+}
- void* GetBigDonut(void) {
- return gBigDonut;
- }
+void* GetSkyscraper(void) {
+ return gSkyscraper;
+}
- void* GetPodiumCeremony(void) {
- return gPodiumCeremony;
- }
+void* GetDoubleDeck(void) {
+ return gDoubleDeck;
+}
- void* GetMushroomCup(void) {
- return gMushroomCup;
- }
+void* GetDkJungle(void) {
+ return gDkJungle;
+}
- void* GetFlowerCup(void) {
- return gFlowerCup;
- }
+void* GetBigDonut(void) {
+ return gBigDonut;
+}
- void* GetStarCup(void) {
- return gStarCup;
- }
+void* GetPodiumCeremony(void) {
+ return gPodiumCeremony;
+}
- void* GetSpecialCup(void) {
- return gSpecialCup;
- }
+void* GetMushroomCup(void) {
+ return gMushroomCup;
+}
- void* GetBattleCup(void) {
- return gBattleCup;
- }
+void* GetFlowerCup(void) {
+ return gFlowerCup;
+}
- // End of frame cleanup of actors, objects, etc.
- void CM_RunGarbageCollector(void) {
- RunGarbageCollector();
- }
+void* GetStarCup(void) {
+ return gStarCup;
+}
+
+void* GetSpecialCup(void) {
+ return gSpecialCup;
+}
+
+void* GetBattleCup(void) {
+ return gBattleCup;
+}
+
+// End of frame cleanup of actors, objects, etc.
+void CM_RunGarbageCollector(void) {
+ RunGarbageCollector();
+}
}
void push_frame() {
- GameEngine::StartAudioFrame();
- GameEngine::Instance->StartFrame();
- thread5_iteration();
- GameEngine::EndAudioFrame();
+ GameEngine::StartAudioFrame();
+ GameEngine::Instance->StartFrame();
+ thread5_iteration();
+ GameEngine::EndAudioFrame();
// thread5_game_loop();
// Graphics_ThreadUpdate();w
// Timer_Update();
@@ -751,9 +759,10 @@ int SDL_main(int argc, char** argv) {
#if defined(__cplusplus) && defined(PLATFORM_IOS)
extern "C"
#endif
-int main(int argc, char* argv[]) {
+ int
+ main(int argc, char* argv[]) {
#endif
- //load_wasm();
+ // load_wasm();
GameEngine::Create();
audio_init();
sound_init();