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.cpp211
1 files changed, 83 insertions, 128 deletions
diff --git a/src/port/Game.cpp b/src/port/Game.cpp
index 34cf84d52..d73f5ccdf 100644
--- a/src/port/Game.cpp
+++ b/src/port/Game.cpp
@@ -1,9 +1,9 @@
#include <libultraship.h>
#include "Game.h"
+#include "port/Engine.h"
#include <Fast3D/gfx_pc.h>
-#include "Engine.h"
#include "engine/World.h"
#include "engine/courses/Course.h"
#include "engine/courses/MarioRaceway.h"
@@ -49,6 +49,7 @@ extern "C" {
#include "networking/networking.h"
#include "render_courses.h"
#include "menus.h"
+#include "update_objects.h"
//#include "engine/wasm.h"
}
@@ -159,19 +160,21 @@ void CustomEngineInit() {
gWorldInstance.CurrentCup->CursorPosition = 3;
gWorldInstance.CupIndex = 0;
- ModelLoader::LoadModelList bowserStatueList = {
- .course = gBowsersCastle,
- .gfxBuffer = &gBowserStatueGfx[0],
- .gfxBufferSize = 162,
- .gfxStart = (0x2BB8 / 8), // 0x2BB8 / sizeof(OldGfx)
- .vtxBuffer = &gBowserStatueVtx[0],
- .vtxBufferSize = 717,
- .vtxStart = 1942,
- };
-
- gModelLoader.Add(bowserStatueList);
-
- gModelLoader.Load();
+ // ModelLoader::LoadModelList bowserStatueList = {
+ // .course = gBowsersCastle,
+ // .gfxBuffer = &gBowserStatueGfx[0],
+ // .gfxBufferSize = 162,
+ // .gfxStart = (0x2BB8 / 8), // 0x2BB8 / sizeof(OldGfx)
+ // .vtxBuffer = &gBowserStatueVtx[0],
+ // .vtxBufferSize = 717,
+ // .vtxStart = 1942,
+ // };
+
+ // Model loader systems allows cutting pieces out of courses and making them actors.
+ // Commented out due to alleged stability issues.
+ //gModelLoader.Add(bowserStatueList);
+
+ //gModelLoader.Load();
}
extern "C" {
@@ -188,7 +191,7 @@ extern "C" {
return gWorldInstance.PreviousCup();
}
- void CourseManager_SetCup(void* cup) {
+ void CM_SetCup(void* cup) {
gWorldInstance.SetCup((Cup*)cup);
}
@@ -210,9 +213,6 @@ extern "C" {
}
}
- CProperties* GetCoursePropsA() {
- return (CProperties*) gWorldInstance.GetCourseProps();
- }
size_t GetCourseIndex() {
return gWorldInstance.CourseIndex;
@@ -239,91 +239,50 @@ extern "C" {
gWorldInstance.CurrentCourse = gWorldInstance.Courses[gWorldInstance.CourseIndex];
}
- void CourseManager_SpawnVehicles() {
- if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->SpawnVehicles();
- }
- }
-
- void CourseManager_VehiclesSpawn() {
- for (auto& vehicle : gWorldInstance.Vehicles) {
- if (vehicle) {
- vehicle->Spawn();
+ void CM_VehicleCollision(s32 playerId, Player* player) {
+ for (auto& actor : gWorldInstance.Actors) {
+ if (actor) {
+ actor->VehicleCollision(playerId, player);
}
}
}
- void CourseManager_VehiclesTick() {
- for (auto& vehicle : gWorldInstance.Vehicles) {
- if (vehicle) {
- vehicle->Tick();
+ void CM_BombKartsWaypoint(s32 cameraId) {
+ for (auto& object : gWorldInstance.Objects) {
+ if (auto kart = dynamic_cast<OBombKart*>(object)) {;
+ if (kart) {
+ kart->Waypoint(cameraId);
+ }
}
}
}
- void CourseManager_VehiclesCollision(s32 playerId, Player* player) {
- for (auto& vehicle : gWorldInstance.Vehicles) {
- if (vehicle) {
- vehicle->Collision(playerId, player);
- }
- }
- }
+ void CM_DisplayBattleBombKart(s32 playerId, s32 primAlpha) {
- void CourseManager_SpawnBombKarts() {
- for (auto& kart : gWorldInstance.BombKarts) {
- if (kart) {
- kart->Spawn();
- }
- }
- }
-
- void CourseManager_TickBombKarts() {
- for (auto& kart : gWorldInstance.BombKarts) {
- if (kart) {
- kart->Tick();
- }
- }
- }
-
- void CourseManager_DrawBombKarts(s32 cameraId) {
- for (auto& kart : gWorldInstance.BombKarts) {
- if (kart) {
- kart->Draw(cameraId);
- }
+ if ((playerId < 0) || (playerId > 4)) {
+ return;
}
- }
- void CourseManager_DrawBattleBombKarts(s32 cameraId) {
- for (auto& kart : gWorldInstance.BombKarts) {
- if (kart) {
- kart->DrawBattle(cameraId);
- }
- }
- }
-
- void CourseManager_BombKartsWaypoint(s32 cameraId) {
- for (auto& kart : gWorldInstance.BombKarts) {
- if (kart) {
- kart->Waypoint(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 CourseManager_DrawVehicles(s32 playerId) {
- for (auto& vehicle : gWorldInstance.Vehicles) {
- if (vehicle) {
- vehicle->Draw(playerId);
- }
+ void CM_DrawBattleBombKarts(s32 cameraId) {
+ for (size_t i = 0; i < gPlayerCount; i++) {
+ gWorldInstance.playerBombKart[i].Draw(i, cameraId);
}
}
- void CourseManager_ClearVehicles(void) {
- gWorldInstance.ClearVehicles();
+ void CM_ClearVehicles(void) {
gWorldInstance.Crossings.clear();
- gWorldInstance.BombKarts.clear();
}
- void CourseManager_CrossingTrigger() {
+ void CM_CrossingTrigger() {
for (auto& crossing : gWorldInstance.Crossings) {
if (crossing) {
crossing->CrossingTrigger();
@@ -331,7 +290,7 @@ extern "C" {
}
}
- void CourseManager_AICrossingBehaviour(s32 playerId) {
+ void CM_AICrossingBehaviour(s32 playerId) {
for (auto& crossing : gWorldInstance.Crossings) {
if (crossing) {
crossing->AICrossingBehaviour(playerId);
@@ -339,28 +298,20 @@ extern "C" {
}
}
- s32 CourseManager_GetCrossingOnTriggered(uintptr_t* crossing) {
+ s32 CM_GetCrossingOnTriggered(uintptr_t* crossing) {
TrainCrossing* ptr = (TrainCrossing*) crossing;
if (ptr) {
return ptr->OnTriggered;
}
}
- void CourseManager_TrainSmokeTick(void) {
- TrainSmokeTick();
- }
-
- void CourseManager_TrainSmokeDraw(s32 cameraId) {
- TrainSmokeDraw(cameraId);
- }
-
- void CourseManager_LoadTextures() {
+ void CM_LoadTextures() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->LoadTextures();
}
}
- void CourseManager_RenderCourse(struct UnkStruct_800DC5EC* arg0) {
+ void CM_RenderCourse(struct UnkStruct_800DC5EC* arg0) {
if (gWorldInstance.CurrentCourse->IsMod() == false) {
if ((CVarGetInteger("gFreecam", 0) == true)) {
// Render credits courses
@@ -374,32 +325,32 @@ extern "C" {
}
}
- void CourseManager_RenderCredits() {
+ void CM_RenderCredits() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->RenderCredits();
}
}
- void CourseManager_TickActors() {
+ void CM_TickActors() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.TickActors();
}
}
- void CourseManager_DrawActors(Camera* camera, struct Actor* actor) {
+ void CM_DrawActors(Camera* camera, struct Actor* actor) {
AActor* a = gWorldInstance.ConvertActorToAActor(actor);
if (a->IsMod()) {
a->Draw(camera);
}
}
- void CourseManager_SpawnActors() {
+ void CM_BeginPlay() {
if (gWorldInstance.CurrentCourse) {
- gWorldInstance.CurrentCourse->SpawnActors();
+ gWorldInstance.CurrentCourse->BeginPlay();
}
}
- void CourseManager_TickObjects() {
+ void CM_TickObjects() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.TickObjects();
}
@@ -407,13 +358,13 @@ extern "C" {
// A couple objects such as lakitu are ticked inside of process_game_tick which support 60fps.
// This is a fallback to support that.
- void CourseManager_TickObjects60fps() {
+ void CM_TickObjects60fps() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.TickObjects60fps();
}
}
- void CourseManager_DrawObjects(s32 cameraId) {
+ void CM_DrawObjects(s32 cameraId) {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.DrawObjects(cameraId);
}
@@ -432,7 +383,7 @@ extern "C" {
}
// Helps prevents users from forgetting to add a finishline to their course
- bool cm_DoesFinishlineExist() {
+ bool CM_DoesFinishlineExist() {
for (AActor* actor : gWorldInstance.Actors) {
if (dynamic_cast<AFinishline*>(actor)) {
return true;
@@ -441,104 +392,108 @@ extern "C" {
return false;
}
- void CourseManager_InitClouds() {
+ void CM_InitClouds() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->InitClouds();
}
}
- void CourseManager_UpdateClouds(s32 arg0, Camera* camera) {
+ void CM_UpdateClouds(s32 arg0, Camera* camera) {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->UpdateClouds(arg0, camera);
}
}
- void CourseManager_Waypoints(Player* player, int8_t playerId) {
+ void CM_Waypoints(Player* player, int8_t playerId) {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->Waypoints(player, playerId);
}
}
- void CourseManager_SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5,
+ 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 CourseManager_MinimapSettings() {
+ void CM_MinimapSettings() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->MinimapSettings();
}
}
- void CourseManager_InitCourseObjects() {
+ void CM_InitCourseObjects() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->InitCourseObjects();
}
}
- void CourseManager_UpdateCourseObjects() {
+ void CM_UpdateCourseObjects() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->UpdateCourseObjects();
}
+ TrainSmokeTick();
}
- void CourseManager_RenderCourseObjects(s32 cameraId) {
+ void CM_RenderCourseObjects(s32 cameraId) {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->RenderCourseObjects(cameraId);
}
+
+ TrainSmokeDraw(cameraId);
}
- void CourseManager_SomeSounds() {
+ void CM_SomeSounds() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->SomeSounds();
}
}
- void CourseManager_CreditsSpawnActors() {
+ void CM_CreditsSpawnActors() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->CreditsSpawnActors();
}
}
- void CourseManager_WhatDoesThisDo(Player* player, int8_t playerId) {
+ void CM_WhatDoesThisDo(Player* player, int8_t playerId) {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->WhatDoesThisDo(player, playerId);
}
}
- void CourseManager_WhatDoesThisDoAI(Player* player, int8_t playerId) {
+ void CM_WhatDoesThisDoAI(Player* player, int8_t playerId) {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->WhatDoesThisDoAI(player, playerId);
}
}
- void CourseManager_MinimapFinishlinePosition() {
+ void CM_MinimapFinishlinePosition() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->MinimapFinishlinePosition();
}
}
- void CourseManager_SetStaffGhost() {
+ void CM_SetStaffGhost() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->SetStaffGhost();
}
}
- CProperties* CourseManager_GetProps() {
+ Properties* CM_GetProps() {
if (gWorldInstance.CurrentCourse) {
- return (CProperties*) &gWorldInstance.CurrentCourse->Props;
+ return &gWorldInstance.CurrentCourse->Props;
}
+ return NULL;
}
- void CourseManager_ScrollingTextures() {
+ void CM_ScrollingTextures() {
if (gWorldInstance.CurrentCourse) {
gWorldInstance.CurrentCourse->ScrollingTextures();
}
}
- void CourseManager_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) {
+ 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);
}
@@ -613,7 +568,7 @@ extern "C" {
gWorldInstance.CurrentCourse = (Course*) course;
}
- struct Actor* m_GetActor(size_t index) {
+ 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*));
@@ -623,7 +578,7 @@ extern "C" {
}
}
- size_t m_FindActorIndex(Actor* actor) {
+ 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*));
@@ -637,7 +592,7 @@ extern "C" {
return 0;
}
- void m_DeleteActor(size_t index) {
+ void CM_DeleteActor(size_t index) {
std::vector<AActor*> actors = gWorldInstance.Actors;
if (index < actors.size()) {
actors.erase(actors.begin() + index);
@@ -654,15 +609,15 @@ extern "C" {
gWorldInstance.Lakitus.clear();
}
- struct Actor* m_AddBaseActor(void) {
+ struct Actor* CM_AddBaseActor(void) {
return (struct Actor*) gWorldInstance.AddBaseActor();
}
- size_t m_GetActorSize() {
+ size_t CM_GetActorSize() {
return gWorldInstance.Actors.size();
}
- void m_ActorCollision(Player* player, Actor* actor) {
+ void CM_ActorCollision(Player* player, Actor* actor) {
AActor* a = gWorldInstance.ConvertActorToAActor(actor);
if (a->IsMod()) {