summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2025-01-23 11:22:07 -0700
committerGitHub <noreply@github.com>2025-01-23 11:22:07 -0700
commit1f189dfa804a05177f99dda1044898eb63fdcb3f (patch)
tree598e0a6c26a5554afd1fcbcd801079fd1df090d3
parent24ecfc3db43bfa606f41c42ef8778f96b5047c6b (diff)
Game.cpp and World.cpp Cleanup (#159)
* Remove CProperties and delete dup Properties from World.h * Improvement * Fix compile * Cleanup * Document gRaceState * wip cleanup * compile * Impl PlayerBombKart * Rename CourseManager_ to CM_ * Finish renames m_ to CM_ * cleanup * Remove extra printf --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
-rw-r--r--CMakeLists.txt4
-rw-r--r--include/actor_types.h8
-rw-r--r--include/defines.h13
-rw-r--r--src/actors/blue_and_red_shells/update.inc.c8
-rw-r--r--src/actors/green_shell/update.inc.c6
-rw-r--r--src/actors/railroad_crossing/render.inc.c2
-rw-r--r--src/actors/railroad_crossing/update.inc.c2
-rw-r--r--src/camera.c2
-rw-r--r--src/camera.h1
-rw-r--r--src/code_800029B0.c6
-rw-r--r--src/code_80005FD0.c128
-rw-r--r--src/code_80005FD0.h1
-rw-r--r--src/code_8003DC40.c2
-rw-r--r--src/code_80057C60.c28
-rw-r--r--src/code_8006E9C0.c17
-rw-r--r--src/effects.c8
-rw-r--r--src/ending/code_80280000.c3
-rw-r--r--src/ending/code_80281780.c2
-rw-r--r--src/ending/code_80281C40.c4
-rw-r--r--src/engine/Actor.cpp1
-rw-r--r--src/engine/Actor.h2
-rw-r--r--src/engine/CoreMath.h19
-rw-r--r--src/engine/Engine.h59
-rw-r--r--src/engine/PlayerBombKart.cpp95
-rw-r--r--src/engine/PlayerBombKart.h23
-rw-r--r--src/engine/Smoke.cpp14
-rw-r--r--src/engine/TrainCrossing.cpp6
-rw-r--r--src/engine/World.cpp24
-rw-r--r--src/engine/World.h54
-rw-r--r--src/engine/courses/BansheeBoardwalk.cpp18
-rw-r--r--src/engine/courses/BansheeBoardwalk.h3
-rw-r--r--src/engine/courses/BigDonut.cpp18
-rw-r--r--src/engine/courses/BigDonut.h3
-rw-r--r--src/engine/courses/BlockFort.cpp18
-rw-r--r--src/engine/courses/BlockFort.h3
-rw-r--r--src/engine/courses/BowsersCastle.cpp18
-rw-r--r--src/engine/courses/BowsersCastle.h3
-rw-r--r--src/engine/courses/ChocoMountain.cpp18
-rw-r--r--src/engine/courses/ChocoMountain.h3
-rw-r--r--src/engine/courses/Course.cpp3
-rw-r--r--src/engine/courses/Course.h125
-rw-r--r--src/engine/courses/DKJungle.cpp41
-rw-r--r--src/engine/courses/DKJungle.h3
-rw-r--r--src/engine/courses/DoubleDeck.cpp18
-rw-r--r--src/engine/courses/DoubleDeck.h3
-rw-r--r--src/engine/courses/FrappeSnowland.cpp18
-rw-r--r--src/engine/courses/FrappeSnowland.h3
-rw-r--r--src/engine/courses/KalimariDesert.cpp81
-rw-r--r--src/engine/courses/KalimariDesert.h3
-rw-r--r--src/engine/courses/KoopaTroopaBeach.cpp18
-rw-r--r--src/engine/courses/KoopaTroopaBeach.h3
-rw-r--r--src/engine/courses/LuigiRaceway.cpp18
-rw-r--r--src/engine/courses/LuigiRaceway.h3
-rw-r--r--src/engine/courses/MarioRaceway.cpp24
-rw-r--r--src/engine/courses/MarioRaceway.h2
-rw-r--r--src/engine/courses/MooMooFarm.cpp18
-rw-r--r--src/engine/courses/MooMooFarm.h3
-rw-r--r--src/engine/courses/PodiumCeremony.cpp21
-rw-r--r--src/engine/courses/PodiumCeremony.h3
-rw-r--r--src/engine/courses/RainbowRoad.cpp18
-rw-r--r--src/engine/courses/RainbowRoad.h3
-rw-r--r--src/engine/courses/RoyalRaceway.cpp18
-rw-r--r--src/engine/courses/RoyalRaceway.h3
-rw-r--r--src/engine/courses/SherbetLand.cpp22
-rw-r--r--src/engine/courses/SherbetLand.h3
-rw-r--r--src/engine/courses/Skyscraper.cpp18
-rw-r--r--src/engine/courses/Skyscraper.h3
-rw-r--r--src/engine/courses/TestCourse.cpp7
-rw-r--r--src/engine/courses/TestCourse.h2
-rw-r--r--src/engine/courses/ToadsTurnpike.cpp95
-rw-r--r--src/engine/courses/ToadsTurnpike.h3
-rw-r--r--src/engine/courses/WarioStadium.cpp18
-rw-r--r--src/engine/courses/WarioStadium.h3
-rw-r--r--src/engine/courses/YoshiValley.cpp41
-rw-r--r--src/engine/courses/YoshiValley.h3
-rw-r--r--src/engine/items/Items.cpp0
-rw-r--r--src/engine/items/Items.h0
-rw-r--r--src/engine/objects/BombKart.cpp62
-rw-r--r--src/engine/objects/BombKart.h15
-rw-r--r--src/engine/objects/Boos.cpp4
-rw-r--r--src/engine/objects/Lakitu.cpp6
-rw-r--r--src/engine/objects/Object.cpp1
-rw-r--r--src/engine/objects/Object.h1
-rw-r--r--src/engine/vehicles/Boat.cpp18
-rw-r--r--src/engine/vehicles/Boat.h13
-rw-r--r--src/engine/vehicles/Bus.cpp22
-rw-r--r--src/engine/vehicles/Bus.h13
-rw-r--r--src/engine/vehicles/Car.cpp18
-rw-r--r--src/engine/vehicles/Car.h13
-rw-r--r--src/engine/vehicles/TankerTruck.cpp22
-rw-r--r--src/engine/vehicles/TankerTruck.h13
-rw-r--r--src/engine/vehicles/Train.cpp13
-rw-r--r--src/engine/vehicles/Train.h13
-rw-r--r--src/engine/vehicles/Truck.cpp39
-rw-r--r--src/engine/vehicles/Truck.h13
-rw-r--r--src/engine/vehicles/Vehicle.cpp19
-rw-r--r--src/engine/vehicles/Vehicle.h27
-rw-r--r--src/enhancements/freecam/freecam.cpp3
-rw-r--r--src/main.c8
-rw-r--r--src/main.h8
-rw-r--r--src/math_util_2.h2
-rw-r--r--src/menu_items.c51
-rw-r--r--src/menus.c6
-rw-r--r--src/player_controller.c8
-rw-r--r--src/port/Game.cpp211
-rw-r--r--src/port/Game.h114
-rw-r--r--src/racing/actors.c85
-rw-r--r--src/racing/actors_extended.c6
-rw-r--r--src/racing/memory.c2
-rw-r--r--src/racing/race_logic.c81
-rw-r--r--src/racing/render_courses.c12
-rw-r--r--src/racing/skybox_and_splitscreen.c9
-rw-r--r--src/render_objects.c25
-rw-r--r--src/staff_ghosts.c2
-rw-r--r--src/update_objects.c2
115 files changed, 996 insertions, 1302 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 488caefd9..e44571372 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -385,14 +385,14 @@ if(MSVC)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
- /w;
+ /Wall;
/Od;
/MTd
>
$<$<CONFIG:Release>:
/Oi;
/Gy;
- /W3;
+ /Wall;
/MT
>
/permissive-;
diff --git a/include/actor_types.h b/include/actor_types.h
index 2b600ec13..e4998ae4f 100644
--- a/include/actor_types.h
+++ b/include/actor_types.h
@@ -83,11 +83,11 @@ enum ActorType {
ACTOR_CAR,
ACTOR_KIWANO_FRUIT
};
-size_t m_GetActorSize(void);
-#define ACTOR_LIST_SIZE m_GetActorSize()
+size_t CM_GetActorSize(void);
+#define ACTOR_LIST_SIZE CM_GetActorSize()
-struct Actor* m_GetActor(size_t);
-#define GET_ACTOR(index) m_GetActor(index)
+struct Actor* CM_GetActor(size_t);
+#define GET_ACTOR(index) CM_GetActor(index)
// Actor flags
#define ACTOR_IS_NOT_EXPIRED 0xF // The actor possesses some kind of collision and can be removed
diff --git a/include/defines.h b/include/defines.h
index e088066cb..c982a7bdd 100644
--- a/include/defines.h
+++ b/include/defines.h
@@ -196,6 +196,19 @@ enum { COURSE_ONE, COURSE_TWO, COURSE_THREE, COURSE_FOUR };
#define CREDITS_SEQUENCE 9
/**
+ * @brief Options for gRaceState
+ */
+#define RACE_INIT 0
+#define RACE_SETUP 1
+#define RACE_STAGING 2
+#define RACE_IN_PROGRESS 3
+#define RACE_CALCULATE_RANKS 4
+#define RACE_FINISHED 5 // End of race and score screen
+#define RACE_UNK 6
+#define RACE_EXIT 7
+
+
+/**
* @brief Options for gScreenModeSelection and gActiveScreenMode
*/
#define SCREEN_MODE_1P 0
diff --git a/src/actors/blue_and_red_shells/update.inc.c b/src/actors/blue_and_red_shells/update.inc.c
index c09d30d64..277ec2075 100644
--- a/src/actors/blue_and_red_shells/update.inc.c
+++ b/src/actors/blue_and_red_shells/update.inc.c
@@ -294,9 +294,9 @@ void update_actor_red_blue_shell(struct ShellActor* shell) {
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
if (pad13 == ACTOR_RED_SHELL) {
- add_red_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_red_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
} else {
- add_blue_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_blue_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
}
}
@@ -308,9 +308,9 @@ void update_actor_red_blue_shell(struct ShellActor* shell) {
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
if (pad13 == ACTOR_RED_SHELL) {
- add_red_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_red_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
} else {
- add_blue_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_blue_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
}
}
diff --git a/src/actors/green_shell/update.inc.c b/src/actors/green_shell/update.inc.c
index 4e4c8f9e8..8499bddc4 100644
--- a/src/actors/green_shell/update.inc.c
+++ b/src/actors/green_shell/update.inc.c
@@ -75,7 +75,7 @@ void update_actor_green_shell(struct ShellActor* shell) {
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
- add_green_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_green_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
return;
} else {
shell->state = 1;
@@ -98,7 +98,7 @@ void update_actor_green_shell(struct ShellActor* shell) {
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
- add_green_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_green_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
}
} else {
shell->rotAngle += 0xE38;
@@ -108,7 +108,7 @@ void update_actor_green_shell(struct ShellActor* shell) {
func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
func_800C90F4(shell->playerId,
(player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
- add_green_shell_in_unexpired_actor_list(m_FindActorIndex(shell));
+ add_green_shell_in_unexpired_actor_list(CM_FindActorIndex(shell));
}
}
if (shell->state == 2) {
diff --git a/src/actors/railroad_crossing/render.inc.c b/src/actors/railroad_crossing/render.inc.c
index adbe7a7e5..10ca253f0 100644
--- a/src/actors/railroad_crossing/render.inc.c
+++ b/src/actors/railroad_crossing/render.inc.c
@@ -27,7 +27,7 @@ void render_actor_railroad_crossing(Camera* arg0, struct RailroadCrossing* rr_cr
gSPSetGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
- if (CourseManager_GetCrossingOnTriggered(rr_crossing->crossingTrigger)) {
+ if (CM_GetCrossingOnTriggered(rr_crossing->crossingTrigger)) {
if (rr_crossing->someTimer < 20) {
gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_crossing_right_active);
diff --git a/src/actors/railroad_crossing/update.inc.c b/src/actors/railroad_crossing/update.inc.c
index 5e1c54ca1..9c96a044a 100644
--- a/src/actors/railroad_crossing/update.inc.c
+++ b/src/actors/railroad_crossing/update.inc.c
@@ -9,7 +9,7 @@
*/
void update_actor_railroad_crossing(struct RailroadCrossing* crossing) {
// If train close?
- if (CourseManager_GetCrossingOnTriggered(crossing->crossingTrigger)) {
+ if (CM_GetCrossingOnTriggered(crossing->crossingTrigger)) {
// Timer++
crossing->someTimer++;
// Reset timer
diff --git a/src/camera.c b/src/camera.c
index ef298f55b..5410b33fc 100644
--- a/src/camera.c
+++ b/src/camera.c
@@ -58,6 +58,8 @@ void camera_init(f32 posX, f32 posY, f32 posZ, UNUSED s16 rot, u32 arg4, s32 cam
Player* player = gPlayerOne;
Camera* camera = &cameras[cameraId];
+ camera->cameraId = cameraId;
+
D_80152300[cameraId] = arg4;
switch (arg4) {
case 0:
diff --git a/src/camera.h b/src/camera.h
index 299954594..6abeb3aad 100644
--- a/src/camera.h
+++ b/src/camera.h
@@ -55,6 +55,7 @@ typedef struct {
/* 0xB0 */ s16 unk_B0;
/* 0xB2 */ s16 unk_B2;
/* 0xB4 */ f32 unk_B4;
+ size_t cameraId;
} Camera; /* size = 0xB8 */
void camera_init(f32, f32, f32, s16, u32, s32);
diff --git a/src/code_800029B0.c b/src/code_800029B0.c
index 32aa3137d..a75691622 100644
--- a/src/code_800029B0.c
+++ b/src/code_800029B0.c
@@ -212,7 +212,7 @@ void setup_race(void) {
func_80005310();
func_8003D080();
init_hud();
- D_800DC510 = 0;
+ gRaceState = RACE_INIT;
gNumSpawnedShells = 0;
D_800DC5B8 = 0;
D_80152308 = 0;
@@ -254,7 +254,7 @@ void setup_race(void) {
void func_80002DAC(void) {
- CourseManager_SomeSounds();
+ CM_SomeSounds();
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
@@ -324,7 +324,7 @@ void credits_spawn_actors(void) {
destroy_all_actors();
CM_CleanWorld();
- CourseManager_CreditsSpawnActors();
+ CM_CreditsSpawnActors();
gNumPermanentActors = gNumActors;
}
diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c
index d28138366..011117424 100644
--- a/src/code_80005FD0.c
+++ b/src/code_80005FD0.c
@@ -37,7 +37,6 @@
#include <assets/frappe_snowland_data.h>
#include <assets/dks_jungle_parkway_data.h>
-#include "engine/Engine.h"
#include "port/Game.h"
#include "engine/courses/Course.h"
@@ -1226,7 +1225,7 @@ s32 func_800088D8(s32 playerId, s16 arg1, s16 arg2) {
return true;
}
arg1_times_8 = arg1 * 8;
- temp_a3 = &CourseManager_GetProps()->SomePtr[arg1_times_8];
+ temp_a3 = &CM_GetProps()->SomePtr[arg1_times_8];
if (arg2 == 0) {
if (gDemoMode == 1) {
temp_a2 = D_80164450[playerId] - D_80164450[D_80164378[7]];
@@ -1539,8 +1538,8 @@ void update_vehicles(void) {
generate_player_smoke();
D_8016337C++;
- CourseManager_TickBombKarts();
- CourseManager_VehiclesTick();
+ //CM_TickBombKarts();
+ //CM_VehiclesTick();
}
void func_800098FC(s32 arg0, Player* player) {
@@ -1633,7 +1632,7 @@ void func_80009B60(s32 playerId) {
f32 athing = 1.5f;
player = &gPlayers[playerId];
- if (CourseManager_GetProps()->AIMaximumSeparation >= 0.0f) {
+ if (CM_GetProps()->AIMaximumSeparation >= 0.0f) {
D_80163100[playerId] += 1;
if (playerId == 0) {
D_80163378++;
@@ -1665,10 +1664,10 @@ void func_80009B60(s32 playerId) {
D_80163448 = gPathIndexByPlayerId[playerId];
func_80008DC0(D_80163448);
//if (GetCourse() == GetKalimariDesert()) {
- CourseManager_VehiclesCollision(playerId, player);
+ CM_VehicleCollision(playerId, player);
//func_80012DC0(playerId, player);
if (playerId == 0) {
- CourseManager_CrossingTrigger();
+ CM_CrossingTrigger();
//func_80013054();
}
//}
@@ -1729,7 +1728,7 @@ void func_80009B60(s32 playerId) {
}
D_801631F8[playerId] = D_801631E0[playerId];
- CourseManager_DrawVehicles(playerId);
+ // Old vehicle draw method was here
if ((GetCourse() == GetYoshiValley()) || (GetCourse() == GetPodiumCeremony())) {
D_801634F8[playerId].unk4 = 0.0f;
@@ -1752,14 +1751,14 @@ void func_80009B60(s32 playerId) {
(D_8016334C[playerId] < gGPCurrentRaceRankByPlayerId[playerId])) {
D_80163210[playerId] = 8.333333f;
} else if (D_80162FD0 == (s16) 1U) {
- D_80163210[playerId] = CourseManager_GetProps()->D_0D0096B8[gCCSelection];
+ D_80163210[playerId] = CM_GetProps()->D_0D0096B8[gCCSelection];
D_801634F8[playerId].unk4 = -0.5f;
} else if (D_801645E0[sSomeNearestWaypoint] > 0) {
- D_80163210[playerId] = CourseManager_GetProps()->D_0D009418[gCCSelection];
+ D_80163210[playerId] = CM_GetProps()->D_0D009418[gCCSelection];
} else {
- D_80163210[playerId] = CourseManager_GetProps()->D_0D009568[gCCSelection];
+ D_80163210[playerId] = CM_GetProps()->D_0D009568[gCCSelection];
}
- CourseManager_AICrossingBehaviour(playerId);
+ CM_AICrossingBehaviour(playerId);
//check_ai_crossing_distance(playerId);
func_8000D3B8(playerId);
func_8000D438(playerId, D_801630E0);
@@ -1911,7 +1910,7 @@ void func_80009B60(s32 playerId) {
var_a2 = temp_f6;
}
- var_v1 = CourseManager_GetProps()->AISteeringSensitivity;
+ var_v1 = CM_GetProps()->AISteeringSensitivity;
switch (D_801631D8[playerId]) { /* switch 4; irregular */
case 2: /* switch 4 */
@@ -1957,15 +1956,15 @@ void func_80009B60(s32 playerId) {
D_80163050[playerId] = var_a1;
if ((D_801630B8[playerId] == 1) || (D_801630E8[playerId] == 1) || (D_801630E8[playerId] == -1) ||
(player->effects & 0x1000000C)) {
- D_80163028[playerId] = CourseManager_GetProps()->D_0D009418[gCCSelection];
+ D_80163028[playerId] = CM_GetProps()->D_0D009418[gCCSelection];
} else {
- D_80163028[playerId] = CourseManager_GetProps()->D_0D009568[gCCSelection];
+ D_80163028[playerId] = CM_GetProps()->D_0D009568[gCCSelection];
}
if ((D_80163068[playerId] > 0.9f) || (D_80163068[playerId] < -0.9f)) {
- D_80163028[playerId] = CourseManager_GetProps()->D_0D009808[gCCSelection];
+ D_80163028[playerId] = CM_GetProps()->D_0D009808[gCCSelection];
}
if (D_80162FD0 == 1) {
- D_80163028[playerId] = CourseManager_GetProps()->D_0D0096B8[gCCSelection];
+ D_80163028[playerId] = CM_GetProps()->D_0D0096B8[gCCSelection];
}
if ((D_801630E8[playerId] == 2) || (D_801630E8[playerId] == -2) || (D_801630E8[playerId] == 3)) {
D_80163028[playerId] = 3.3333333f;
@@ -1973,7 +1972,7 @@ void func_80009B60(s32 playerId) {
D_8016320C = D_80163028[playerId];
player->effects &= ~0x00200000;
D_80163210[playerId] = D_8016320C;
- CourseManager_AICrossingBehaviour(playerId);
+ CM_AICrossingBehaviour(playerId);
//check_ai_crossing_distance(playerId);
func_80008424(playerId, D_8016320C, player);
}
@@ -2150,7 +2149,7 @@ f32 func_8000B874(f32 posX, f32 posZ, u16 waypointIndex, s32 pathIndex) {
void func_8000B95C(s32 playerId, u16 waypointIndex, s32 pathIndex) {
UNUSED Vec3f pad;
D_80163068[playerId] = 0.0f;
- if (CourseManager_GetProps()->AIMaximumSeparation >= 0.0f) {
+ if (CM_GetProps()->AIMaximumSeparation >= 0.0f) {
if ((gPlayers[playerId].type & 0x8000) != 0) {
D_80163068[playerId] =
func_8000B874(gPlayers[playerId].pos[0], gPlayers[playerId].pos[2], waypointIndex, pathIndex);
@@ -3240,7 +3239,7 @@ s32 add_actor_in_unexpired_actor_list(s32 actorIndex, s16 arg1) {
}
s32 add_red_shell_in_unexpired_actor_list(s32 actorIndex) {
- struct Actor* actor = m_GetActor(actorIndex);
+ struct Actor* actor = CM_GetActor(actorIndex);
if (actor->type != ACTOR_RED_SHELL) {
return -1;
}
@@ -3248,7 +3247,7 @@ s32 add_red_shell_in_unexpired_actor_list(s32 actorIndex) {
}
s32 add_green_shell_in_unexpired_actor_list(s32 actorIndex) {
- struct Actor* actor = m_GetActor(actorIndex);
+ struct Actor* actor = CM_GetActor(actorIndex);
if (actor->type != ACTOR_GREEN_SHELL) {
return -1;
}
@@ -3256,7 +3255,7 @@ s32 add_green_shell_in_unexpired_actor_list(s32 actorIndex) {
}
s32 add_blue_shell_in_unexpired_actor_list(s32 arg0) {
- struct Actor* actor = m_GetActor(arg0);
+ struct Actor* actor = CM_GetActor(arg0);
if (actor->type != ACTOR_BLUE_SPINY_SHELL) {
return -1;
}
@@ -3393,7 +3392,7 @@ void func_8000F2BC(TrackWaypoint* arg0, size_t size) {
// Appears to allocate memory for each course.
void func_8000F2DC(void) {
- _struct_gCoursePathSizes_0x10* ptr = &CourseManager_GetProps()->PathSizes;
+ _struct_gCoursePathSizes_0x10* ptr = &CM_GetProps()->PathSizes;
s32 temp;
s32 i;
@@ -3445,9 +3444,7 @@ void func_8000F2DC(void) {
D_80164430 = *gWaypointCountByPathIndex;
- CourseManager_ClearVehicles();
-
- CourseManager_SpawnVehicles();
+ CM_ClearVehicles();
//set_bomb_kart_spawn_positions();
func_8000EEDC();
@@ -3472,7 +3469,7 @@ void func_8000F628(void) {
func_8000B95C(i, 0, 0);
}
//! todo: @BUG this doesn't seem right. This variable is metadata.
- D_80163028[i] = CourseManager_GetProps()->D_0D009418[gCCSelection];
+ D_80163028[i] = CM_GetProps()->D_0D009418[gCCSelection];
D_801630E8[i] = 0;
D_80163100[i] = 0;
D_80163178[i] = 0.0f;
@@ -3504,7 +3501,7 @@ void func_8000F628(void) {
D_80163068[i] = 0.0f;
D_80163090[i] = 0.0f;
var_s5 = &D_801634F8[i];
- var_s5->unkC = CourseManager_GetProps()->AIMinimumSeparation * (f32) (((i + 1) % 3) - 1);
+ var_s5->unkC = CM_GetProps()->AIMinimumSeparation * (f32) (((i + 1) % 3) - 1);
var_s5->unk4 = var_s5->unkC;
var_s5->unk0 = 0.0f;
var_s5->unk8 = 0.015f;
@@ -3634,16 +3631,16 @@ void func_800100F0(s32 pathIndex) {
s16 bInvalidPath;
s32 i;
- if (CourseManager_GetProps()->AIMaximumSeparation >= 1.0f) {
+ if (CM_GetProps()->AIMaximumSeparation >= 1.0f) {
pathDest = D_80164550[pathIndex];
bInvalidPath = 1;
if (GetCourse() != GetPodiumCeremony()) {
- var_v0 = process_path_data(pathDest, CourseManager_GetProps()->PathTable2[pathIndex]);
+ var_v0 = process_path_data(pathDest, CM_GetProps()->PathTable2[pathIndex]);
gWaypointCountByPathIndex[pathIndex] = (u16) var_v0;
} else {
// Course path included in course_data which has already been loaded into memory.
// This is how we get the addr to our path data.
- path = CourseManager_GetProps()->PathTable[pathIndex];
+ path = CM_GetProps()->PathTable[pathIndex];
ptr = path;
for (i = 0; i < 3000; i++, ptr++) {
@@ -3685,8 +3682,8 @@ void func_80010218(s32 pathIndex) {
TrackWaypoint* var_s1;
TrackWaypoint* var_s2;
- if (CourseManager_GetProps()->AIMaximumSeparation >= 0.0f) {
- waypointWidth = CourseManager_GetProps()->AIMaximumSeparation;
+ if (CM_GetProps()->AIMaximumSeparation >= 0.0f) {
+ waypointWidth = CM_GetProps()->AIMaximumSeparation;
waypoint = &D_80164550[pathIndex][0];
var_s1 = &D_80164560[pathIndex][0];
var_s2 = &D_80164570[pathIndex][0];
@@ -3736,7 +3733,7 @@ f32 func_80010480(s32 pathIndex, u16 waypointIndex) {
f32 root2;
f32 root1;
- if (CourseManager_GetProps()->AIMaximumSeparation <= -1.0f) {
+ if (CM_GetProps()->AIMaximumSeparation <= -1.0f) {
return 0.0f;
}
waypointCount = gWaypointCountByPathIndex[pathIndex];
@@ -3778,7 +3775,7 @@ void func_800107C4(s32 pathIndex) {
s32 var_a3;
s16* wut;
- if (CourseManager_GetProps()->AIMaximumSeparation >= 0.0f) {
+ if (CM_GetProps()->AIMaximumSeparation >= 0.0f) {
var_a3 = gWaypointCountByPathIndex[pathIndex];
var_t4 = &D_80164580[pathIndex][0];
for (var_s0 = 0; var_s0 < var_a3; var_s0++, var_t4++) {
@@ -3846,7 +3843,7 @@ void func_80010DBC(s32 pathIndex) {
s32 waypointIndex;
u16* angle;
- if (CourseManager_GetProps()->AIMaximumSeparation >= 0.0f) {
+ if (CM_GetProps()->AIMaximumSeparation >= 0.0f) {
for (angle = (u16*) &D_80164590[pathIndex][0], waypointIndex = 0;
waypointIndex < gWaypointCountByPathIndex[pathIndex]; waypointIndex++, angle++) {
*angle = func_80010CB0(pathIndex, waypointIndex);
@@ -4125,7 +4122,7 @@ s32 generate_2d_path(Path2D* pathDest, TrackWaypoint* pathSrc, s32 numWaypoints)
void copy_courses_kart_ai_behaviour(void) {
s32 i;
for (i = 0; i < NUM_COURSES - 1; i++) {
- gCoursesKartAIBehaviour[i] = LOAD_ASSET(CourseManager_GetProps()->AIBehaviour);
+ gCoursesKartAIBehaviour[i] = LOAD_ASSET(CM_GetProps()->AIBehaviour);
}
}
@@ -4148,10 +4145,10 @@ void kart_ai_behaviour_start(s32 playerId, Player* player) {
s32 behaviourType;
UNUSED s32 test;
- KartAIBehaviour *beh = (KartAIBehaviour*)LOAD_ASSET(CourseManager_GetProps()->AIBehaviour);
+ KartAIBehaviour *beh = (KartAIBehaviour*)LOAD_ASSET(CM_GetProps()->AIBehaviour);
sCurrentKartAIBehaviour =
- &((KartAIBehaviour*)LOAD_ASSET(CourseManager_GetProps()->AIBehaviour))[gCurrentKartAIBehaviourId[playerId]];
+ &((KartAIBehaviour*)LOAD_ASSET(CM_GetProps()->AIBehaviour))[gCurrentKartAIBehaviourId[playerId]];
playerWaypoint = gNearestWaypointByPlayerId[playerId];
@@ -4160,7 +4157,7 @@ void kart_ai_behaviour_start(s32 playerId, Player* player) {
behaviourType = sCurrentKartAIBehaviour->type;
if ((waypointStart == -1) && (waypointEnd == -1)) {
- sCurrentKartAIBehaviour = &((KartAIBehaviour*) LOAD_ASSET(CourseManager_GetProps()->AIBehaviour))[0];
+ sCurrentKartAIBehaviour = &((KartAIBehaviour*) LOAD_ASSET(CM_GetProps()->AIBehaviour))[0];
reset_kart_ai_behaviour_none(playerId);
return;
}
@@ -4216,7 +4213,7 @@ void kart_ai_behaviour_end(s32 playerIndex, Player* player) {
s32 behaviourType;
sCurrentKartAIBehaviour = &(
- (KartAIBehaviour*) LOAD_ASSET(CourseManager_GetProps()->AIBehaviour))[gPreviousKartAIBehaviourId[playerIndex]];
+ (KartAIBehaviour*) LOAD_ASSET(CM_GetProps()->AIBehaviour))[gPreviousKartAIBehaviourId[playerIndex]];
nearestWaypoint = gNearestWaypointByPlayerId[playerIndex];
behaviourType = sCurrentKartAIBehaviour->type;
waypointEnd = sCurrentKartAIBehaviour->waypointEnd;
@@ -4350,55 +4347,6 @@ void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 w
velocity[2] = position[2] - origZPos;
}
-void spawn_course_vehicles(void) {
- s16 trainCarYRot;
- UNUSED Vec3f pad;
- TrainCarStuff* tempLocomotive;
- TrainCarStuff* tempTender;
- TrainCarStuff* tempPassengerCar;
- Vec3s trainCarRot;
- VehicleStuff* tempBoxTruck;
- VehicleStuff* tempSchoolBus;
- VehicleStuff* tempTankerTruck;
- VehicleStuff* tempCar;
- PaddleBoatStuff* tempPaddleWheelBoat;
- Vec3s paddleWheelBoatRot;
- s32 loopIndex;
- s32 loopIndex2;
- f32 origXPos;
- f32 origZPos;
-
- CourseManager_SpawnVehicles();
-
- // if (GetCourse() == GetToadsTurnpike()) {
- // for (loopIndex = 0; loopIndex < NUM_RACE_BOX_TRUCKS; loopIndex++) {
- // tempBoxTruck = &gBoxTruckList[loopIndex];
- // spawn_vehicle_on_road(tempBoxTruck);
- // tempBoxTruck->actorIndex = add_actor_to_empty_slot(tempBoxTruck->position, tempBoxTruck->rotation,
- // tempBoxTruck->velocity, ACTOR_BOX_TRUCK);
- // }
- // for (loopIndex = 0; loopIndex < NUM_RACE_SCHOOL_BUSES; loopIndex++) {
- // tempSchoolBus = &gSchoolBusList[loopIndex];
- // spawn_vehicle_on_road(tempSchoolBus);
- // tempSchoolBus->actorIndex = add_actor_to_empty_slot(tempSchoolBus->position, tempSchoolBus->rotation,
- // tempSchoolBus->velocity, ACTOR_SCHOOL_BUS);
- // }
- // for (loopIndex = 0; loopIndex < NUM_RACE_TANKER_TRUCKS; loopIndex++) {
- // tempTankerTruck = &gTankerTruckList[loopIndex];
- // spawn_vehicle_on_road(tempTankerTruck);
- // tempTankerTruck->actorIndex =
- // add_actor_to_empty_slot(tempTankerTruck->position, tempTankerTruck->rotation,
- // tempTankerTruck->velocity, ACTOR_TANKER_TRUCK);
- // }
- // for (loopIndex = 0; loopIndex < NUM_RACE_CARS; loopIndex++) {
- // tempCar = &gCarList[loopIndex];
- // spawn_vehicle_on_road(tempCar);
- // tempCar->actorIndex =
- // add_actor_to_empty_slot(tempCar->position, tempCar->rotation, tempCar->velocity, ACTOR_CAR);
- // }
- // }
-}
-
void set_vehicle_pos_waypoint(TrainCarStuff* trainCar, Path2D* posXZ, u16 waypoint) {
trainCar->position[0] = (f32) posXZ->x;
trainCar->position[1] = (f32) D_80162EB0;
diff --git a/src/code_80005FD0.h b/src/code_80005FD0.h
index f675556a8..402be420b 100644
--- a/src/code_80005FD0.h
+++ b/src/code_80005FD0.h
@@ -156,7 +156,6 @@ void generate_train_waypoints(void);
void generate_ferry_waypoints(void);
void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 waypointIndex,
s32 someMultiplierTheSequel, f32 speed);
-void spawn_course_vehicles(void);
void set_vehicle_pos_waypoint(TrainCarStuff*, Path2D*, u16);
void init_vehicles_trains(size_t, size_t, f32);
void sync_train_components(TrainCarStuff*, s16);
diff --git a/src/code_8003DC40.c b/src/code_8003DC40.c
index 845b2bda3..c710a7b5d 100644
--- a/src/code_8003DC40.c
+++ b/src/code_8003DC40.c
@@ -232,7 +232,7 @@ void func_8003F46C(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4
player->kartHopVelocity = 0.0f;
return;
} else {
- CourseManager_SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+ CM_SomeCollisionThing(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
// //func_8003E048(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
diff --git a/src/code_80057C60.c b/src/code_80057C60.c
index fcd46116a..d9807e954 100644
--- a/src/code_80057C60.c
+++ b/src/code_80057C60.c
@@ -557,8 +557,6 @@ void render_object_p1(void) {
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[0]),
G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
- CourseManager_DrawBombKarts(PLAYER_ONE); // render_bomb_karts_wrap(PLAYER_ONE);
-
// if (gGamestate == ENDING) {
// //func_80055F48(PLAYER_ONE);
// //func_80056160(PLAYER_ONE);
@@ -576,7 +574,6 @@ void render_object_p2(void) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[1]),
G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
- CourseManager_DrawBombKarts(PLAYER_TWO);
// render_bomb_karts_wrap(PLAYER_TWO);
render_object_for_player(PLAYER_TWO);
}
@@ -587,7 +584,6 @@ void render_object_p3(void) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[2]),
G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
- CourseManager_DrawBombKarts(PLAYER_THREE);
// render_bomb_karts_wrap(PLAYER_THREE);
render_object_for_player(PLAYER_THREE);
}
@@ -599,7 +595,6 @@ void render_object_p4(void) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[3]),
G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
- CourseManager_DrawBombKarts(PLAYER_FOUR);
// render_bomb_karts_wrap(PLAYER_FOUR);
if ((!gDemoMode) && (gPlayerCountSelection1 == 4)) {
// render_lakitu(PLAYER_FOUR);
@@ -689,9 +684,9 @@ void render_player_snow_effect_four(void) {
}
void render_object_for_player(s32 cameraId) {
- CourseManager_DrawObjects(cameraId);
+ CM_DrawObjects(cameraId);
CM_DrawParticles(cameraId);
- CourseManager_RenderCourseObjects(cameraId);
+ CM_RenderCourseObjects(cameraId);
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
@@ -785,8 +780,7 @@ void render_object_for_player(s32 cameraId) {
render_balloons_grand_prix(cameraId);
}
if (gModeSelection == BATTLE) {
- CourseManager_DrawBattleBombKarts(cameraId);
- // render_battle_bomb_karts(cameraId);
+ CM_DrawBattleBombKarts(cameraId);
}
}
@@ -800,7 +794,7 @@ void render_snowing_effect(s32 playerId) {
render_object_snowflakes_particles();
}
}
- if (CourseManager_GetProps()->LakituTowType == 1) {
+ if (CM_GetProps()->LakituTowType == 1) {
render_ice_block(playerId);
}
}
@@ -1241,7 +1235,7 @@ void func_8005995C(void) {
void func_80059A88(s32 playerId) {
func_80059820(playerId);
if (!gDemoMode) {
- // update_object_lakitu(playerId); // Moved to CourseManager_TickObjects60fps
+ // update_object_lakitu(playerId); // Moved to CM_TickObjects60fps
func_8007BB9C(playerId);
}
}
@@ -1283,7 +1277,7 @@ void func_80059AC8(void) {
break;
}
- CourseManager_TickObjects60fps();
+ CM_TickObjects60fps();
}
}
@@ -1400,7 +1394,7 @@ void func_80059D00(void) {
break;
}
update_object();
- CourseManager_TickObjects();
+ CM_TickObjects();
CM_TickParticles();
func_800744CC();
}
@@ -1418,12 +1412,12 @@ void func_8005A070(void) {
// func_80086D80();
// update_cheep_cheep(1);
// func_80077640();
- CourseManager_TickObjects();
+ CM_TickObjects();
CM_TickParticles();
} else if (gGamestate == CREDITS_SEQUENCE) {
func_80059820(PLAYER_ONE);
func_80078C70(0);
- CourseManager_TickObjects();
+ CM_TickObjects();
CM_TickParticles();
} else { // normal gameplay
func_80059D00();
@@ -1572,7 +1566,7 @@ void func_8005A71C(void) {
void update_object(void) {
- CourseManager_UpdateCourseObjects();
+ CM_UpdateCourseObjects();
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
@@ -2718,7 +2712,7 @@ void func_8005D18C(void) {
void func_8005D1F4(s32 cameraId) {
- CourseManager_BombKartsWaypoint(cameraId);
+ CM_BombKartsWaypoint(cameraId);
// s32 playerWaypoint;
// s32 bombWaypoint;
// s32 var_a2;
diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c
index dba0d21a7..e5cc43887 100644
--- a/src/code_8006E9C0.c
+++ b/src/code_8006E9C0.c
@@ -29,7 +29,6 @@
#include <assets/boo_frames.h>
#include "port/Game.h"
-#include "engine/Engine.h"
#include "engine/courses/Course.h"
void init_hud(void) {
@@ -164,11 +163,11 @@ void init_item_window(s32 objectIndex) {
}
void func_8006EEE8(s32 courseId) {
- D_8018D240 = (uintptr_t) CourseManager_GetProps()->MinimapTexture;
+ D_8018D240 = (uintptr_t) CM_GetProps()->MinimapTexture;
// This is incredibly dumb. MinimapDimensions ought to be something more like
// `u16 MinimapDimensions[][2]` but that doesn't match for some insane reason
- gMinimapWidth = CourseManager_GetProps()->MinimapDimensions.X; // MinimapDimensions[courseId * 2];
- gMinimapHeight = CourseManager_GetProps()->MinimapDimensions.Z; // MinimapDimensions[courseId * 2 + 1];
+ gMinimapWidth = CM_GetProps()->MinimapDimensions.X; // MinimapDimensions[courseId * 2];
+ gMinimapHeight = CM_GetProps()->MinimapDimensions.Z; // MinimapDimensions[courseId * 2 + 1];
}
void func_8006EF60(void) {
@@ -182,7 +181,7 @@ void func_8006EF60(void) {
// clang-format off
// God forgive me for my sins...
- // huh = 0x14; if (0) {} for (i = 0; i < huh; i++) {D_8018D248[i] = CourseManager_GetProps()->MinimapTexture; wut += ResourceGetTexSizeByName(CourseManager_GetProps()->MinimapTexture); }
+ // huh = 0x14; if (0) {} for (i = 0; i < huh; i++) {D_8018D248[i] = CM_GetProps()->MinimapTexture; wut += ResourceGetTexSizeByName(CM_GetProps()->MinimapTexture); }
// clang-format on
}
@@ -201,7 +200,7 @@ void func_8006F008(void) {
if (GetCourse() != GetPodiumCeremony()) {
func_8006EEE8((s32) gCurrentCourseId);
}
- CourseManager_MinimapSettings();
+ CM_MinimapSettings();
switch (gCurrentCourseId) {
case COURSE_MARIO_RACEWAY:
@@ -625,8 +624,6 @@ void init_object_list_index(void) {
find_unused_obj_index(&indexObjectList4[loopIndex]);
}
- CourseManager_SpawnBombKarts();
-
// for (loopIndex = 0; loopIndex < NUM_BOMB_KARTS_VERSUS; loopIndex++) {
// find_unused_obj_index(&gIndexObjectBombKart[loopIndex]);
// }
@@ -707,7 +704,7 @@ void func_8007055C(void) {
s32 var_s0;
s32 var_s4;
- CourseManager_InitClouds();
+ CM_InitClouds();
switch (gCurrentCourseId) {
case COURSE_MARIO_RACEWAY:
@@ -777,7 +774,7 @@ void init_course_object(void) {
s32 objectId;
s32 i;
- CourseManager_InitCourseObjects();
+ CM_InitCourseObjects();
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
diff --git a/src/effects.c b/src/effects.c
index bff1803ff..06e476117 100644
--- a/src/effects.c
+++ b/src/effects.c
@@ -1510,7 +1510,7 @@ void func_8008FC1C(Player* player) {
if ((player->type & PLAYER_UNKNOWN_0x40) != 0) {
playerIndex = get_player_index_for_player(player);
- player->type = 0x7000;
+ player->type = PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_KART_AI;
func_80056A94(playerIndex);
}
}
@@ -1522,7 +1522,6 @@ void func_8008FC64(Player* player, s8 arg1) {
player->soundEffects &= 0xFBFFFFFF;
player->soundEffects |= 0x08000000;
player->type |= PLAYER_UNKNOWN_0x40;
-
func_8008FDA8(player, arg1);
func_800569F4(arg1);
}
@@ -1534,7 +1533,6 @@ void func_8008FCDC(Player* player, s8 arg1) {
player->unk_0C6 = 0xFF;
player->soundEffects &= ~0x08000000;
}
-
func_80056A40(arg1, (u32) player->unk_0C6);
}
@@ -1588,12 +1586,12 @@ void func_8008FEDC(Player* player, UNUSED s8 arg1) {
player->kartHopAcceleration = 0.0f;
}
-void CourseManager_Waypoints(Player*, s8);
+void CM_Waypoints(Player*, s8);
void func_8008FF08(Player* player, s8 playerId) {
s16 waypoint;
- CourseManager_Waypoints(player, playerId);
+ CM_Waypoints(player, playerId);
// switch (gCurrentCourseId) {
// case COURSE_BOWSER_CASTLE:
diff --git a/src/ending/code_80280000.c b/src/ending/code_80280000.c
index 8075d2daf..b4d5ca103 100644
--- a/src/ending/code_80280000.c
+++ b/src/ending/code_80280000.c
@@ -25,7 +25,6 @@
#include "main.h"
#include "render_player.h"
-#include "engine/Engine.h"
#include "engine/courses/Course.h"
#include "engine/Matrix.h"
#include "port/Game.h"
@@ -57,7 +56,7 @@ void func_80280038(void) {
func_80057FC4(0);
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH);
- guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CourseManager_GetProps()->NearPersp, CourseManager_GetProps()->FarPersp, 1.0f);
+ guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f);
gSPPerspNormalize(gDisplayListHead++, perspNorm);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[0]),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
diff --git a/src/ending/code_80281780.c b/src/ending/code_80281780.c
index 1c2fbe324..e7c55de1a 100644
--- a/src/ending/code_80281780.c
+++ b/src/ending/code_80281780.c
@@ -164,7 +164,7 @@ void setup_podium_ceremony(void) {
balloons_and_fireworks_init();
init_camera_podium_ceremony();
func_80093E60();
- CourseManager_SpawnActors();
+ CM_BeginPlay();
D_801625F8 = (uintptr_t) gHeapEndPtr - gNextFreeMemoryAddress;
D_801625FC = ((f32) D_801625F8 / 1000.0f);
}
diff --git a/src/ending/code_80281C40.c b/src/ending/code_80281C40.c
index 1e4c63e79..18507f23b 100644
--- a/src/ending/code_80281C40.c
+++ b/src/ending/code_80281C40.c
@@ -15,8 +15,8 @@
#include "defines.h"
#include "memory.h"
-#include "engine/Engine.h"
#include "engine/courses/Course.h"
+#include "port/Game.h"
struct UnkStruct80287560 {
s16 unk0;
@@ -72,7 +72,7 @@ void func_80281D00(void) {
}
func_8028150C();
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH);
- guPerspective((Mtx*) &gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CourseManager_GetProps()->NearPersp, CourseManager_GetProps()->FarPersp,
+ guPerspective((Mtx*) &gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CM_GetProps()->NearPersp, CM_GetProps()->FarPersp,
1.0f);
gSPPerspNormalize(gDisplayListHead++, perspNorm);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[0]),
diff --git a/src/engine/Actor.cpp b/src/engine/Actor.cpp
index 8bd472b08..be86d2a5f 100644
--- a/src/engine/Actor.cpp
+++ b/src/engine/Actor.cpp
@@ -8,6 +8,7 @@ AActor::AActor() {}
void AActor::Tick() { }
void AActor::Draw(Camera *camera) { }
void AActor::Collision(Player* player, AActor* actor) {}
+void AActor::VehicleCollision(s32 playerId, Player* player){}
void AActor::Destroy() {
// Set uuid to zero.
memset(uuid, 0, sizeof(uuid));
diff --git a/src/engine/Actor.h b/src/engine/Actor.h
index 88f5b34a0..a74ed74e0 100644
--- a/src/engine/Actor.h
+++ b/src/engine/Actor.h
@@ -32,6 +32,8 @@ public:
virtual void Tick();
virtual void Draw(Camera*);
virtual void Collision(Player* player, AActor* actor);
+ virtual void VehicleCollision(s32 playerId, Player* player);
+
virtual void Destroy();
virtual bool IsMod();
};
diff --git a/src/engine/CoreMath.h b/src/engine/CoreMath.h
index c5f3211f4..ea74dd9a4 100644
--- a/src/engine/CoreMath.h
+++ b/src/engine/CoreMath.h
@@ -1,4 +1,5 @@
-#pragma once
+#ifndef CORE_MATH_H
+#define CORE_MATH_H
#include <libultraship.h>
@@ -13,6 +14,7 @@
struct FVector {
float x, y, z;
+#ifdef __cplusplus
FVector& operator=(const FVector& other) {
x = other.x;
y = other.y;
@@ -22,6 +24,7 @@ struct FVector {
FVector() : x(0), y(0), z(0) {}
FVector(float x, float y, float z) : x(x), y(y), z(z) {}
+#endif // __cplusplus
};
/**
@@ -33,6 +36,7 @@ struct FVector {
struct FVector2D {
float x, z;
+#ifdef __cplusplus
FVector2D& operator=(const FVector2D& other) {
x = other.x;
z = other.z;
@@ -41,12 +45,14 @@ struct FVector2D {
FVector2D() : x(0), z(0) {}
FVector2D(float x, float z) : x(x), z(z) {}
+#endif // __cplusplus
};
// Sets integer X Z coordinates
-struct IVector2D {
+typedef struct IVector2D {
int32_t X, Z;
+#ifdef __cplusplus
IVector2D() : X(0), Z(0) {} // Default constructor
IVector2D(int32_t x, int32_t z) : X(x), Z(z) {} // Constructor to initialize with values
@@ -57,11 +63,13 @@ struct IVector2D {
Z = other.Z;
return *this;
}
-};
+#endif // __cplusplus
+} IVector2D;
struct FRotation {
float pitch, yaw, roll;
+#ifdef __cplusplus
FRotation& operator=(const FRotation& other) {
pitch = other.pitch;
yaw = other.yaw;
@@ -71,6 +79,7 @@ struct FRotation {
FRotation() : pitch(0), yaw(0), roll(0) {}
FRotation(float p, float y, float r) : pitch(p), yaw(y), roll(r) {}
+#endif // __cplusplus
};
/**
@@ -80,6 +89,7 @@ struct FRotation {
struct IPathSpan {
int Start, End;
+#ifdef __cplusplus
// Default Constructor
IPathSpan() : Start(0), End(0) {}
@@ -105,4 +115,7 @@ struct IPathSpan {
bool operator!=(const IPathSpan& Other) const {
return !(*this == Other);
}
+#endif // __cplusplus
};
+
+#endif // CORE_MATH_H \ No newline at end of file
diff --git a/src/engine/Engine.h b/src/engine/Engine.h
deleted file mode 100644
index 98e9a99fc..000000000
--- a/src/engine/Engine.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __ENGINE_H__
-#define __ENGINE_H__
-
-#include "common_structs.h"
-#include "bomb_kart.h"
-#include "objects.h"
-#include "path_spawn_metadata.h"
-#include "waypoints.h"
-#include "sounds.h"
-#include "course_offsets.h"
-
-typedef struct {
- RGB8 TopRight;
- RGB8 BottomRight;
- RGB8 BottomLeft;
- RGB8 TopLeft;
- RGB8 FloorTopRight;
- RGB8 FloorBottomRight;
- RGB8 FloorBottomLeft;
- RGB8 FloorTopLeft;
-} SkyboxColours;
-
-typedef struct {
- int32_t X;
- int32_t Z;
-} IVector2D_C;
-
-typedef struct {
- const char* Id;
- const char* Name;
- const char* DebugName;
- const char* CourseLength;
- const char* AIBehaviour;
- const char* MinimapTexture;
- s32 LakituTowType;
- IVector2D_C MinimapDimensions;
- float AIMaximumSeparation;
- float AIMinimumSeparation;
- float NearPersp;
- float FarPersp;
- s16 *SomePtr;
- u32 AISteeringSensitivity;
- _struct_gCoursePathSizes_0x10 PathSizes;
- Vec4f D_0D009418;
- Vec4f D_0D009568;
- Vec4f D_0D0096B8;
- Vec4f D_0D009808;
- TrackWaypoint* PathTable[4];
- TrackWaypoint* PathTable2[4];
- CloudData *Clouds;
- CloudData *CloudList;
- s32 MinimapFinishlineX;
- s32 MinimapFinishlineY;
- SkyboxColours Skybox;
- const course_texture *textures;
- enum MusicSeq Sequence;
-} CProperties;
-
-#endif // __ENGINE_H__ \ No newline at end of file
diff --git a/src/engine/PlayerBombKart.cpp b/src/engine/PlayerBombKart.cpp
new file mode 100644
index 000000000..9ab3b74e1
--- /dev/null
+++ b/src/engine/PlayerBombKart.cpp
@@ -0,0 +1,95 @@
+#include "PlayerBombKart.h"
+#include "Matrix.h"
+
+extern "C" {
+#include "common_structs.h"
+#include "assets/common_data.h"
+#include "camera.h"
+#include "render_objects.h"
+#include "math_util_2.h"
+#include "code_80057C60.h"
+#include "menus.h"
+}
+
+void PlayerBombKart::Draw(size_t playerId, s32 cameraId) { // render_player_bomb_kart
+ Player* player = &gPlayerOne[playerId];
+ if (state != PlayerBombKartState::DISABLED) {
+ pos.x = player->pos[0];
+ pos.y = player->pos[1] - 2.0;
+ pos.z = player->pos[2];
+ surfaceHeight = player->unk_074;
+ PlayerBombKart::func_800563DC(cameraId, _primAlpha);
+ PlayerBombKart::func_8005669C(_primAlpha);
+ PlayerBombKart::func_800568A0(cameraId);
+ }
+}
+
+void PlayerBombKart::func_800563DC(s32 cameraId, s32 arg2) {
+ s32 temp_s0;
+ s32 temp_v0;
+ s32 residue;
+ Camera* camera = &camera1[cameraId];
+
+ residue = D_801655CC % 4U;
+ D_80183E40[0] = pos.x;
+ D_80183E40[1] = pos.y + 1.0;
+ D_80183E40[2] = pos.z;
+ D_80183E80[0] = 0;
+ D_80183E80[1] = func_800418AC(pos.x, pos.z, camera->pos);
+ D_80183E80[2] = 0x8000;
+ rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007E98);
+ func_8004B310(arg2);
+ draw_rectangle_texture_overlap((u8*) common_tlut_bomb, (u8*)common_texture_bomb[residue], (Vtx*)D_0D005AE0, 0x00000020,
+ 0x00000020, 0x00000020, 0x00000020);
+ temp_s0 = D_8018D400;
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B00);
+ func_8004B414(0, 0, 0, arg2);
+ D_80183E40[1] = D_80183E40[1] + 4.0;
+ D_80183E80[2] = 0;
+ func_800562E4(temp_s0 % 3, temp_s0 % 4, arg2);
+ temp_v0 = temp_s0 + 1;
+ D_80183E80[2] = 0x6000;
+ func_800562E4(temp_v0 % 3, temp_v0 % 4, arg2);
+ temp_v0 = temp_s0 + 2;
+ D_80183E80[2] = 0xA000;
+ func_800562E4(temp_v0 % 3, temp_v0 % 4, arg2);
+ gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
+}
+
+void PlayerBombKart::func_8005669C(s32 arg2) {
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0079E8);
+ func_8004B310(arg2);
+ load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010);
+ D_80183E40[1] = pos.y - 2.0;
+ D_80183E40[0] = pos.x + 2.0;
+ D_80183E40[2] = pos.z + 2.0;
+ func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
+ D_80183E40[0] = pos.x + 2.0;
+ D_80183E40[2] = pos.z - 2.0;
+ func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
+ D_80183E40[0] = pos.x - 2.0;
+ D_80183E40[2] = pos.z - 2.0;
+ func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
+ D_80183E40[0] = pos.x - 2.0;
+ D_80183E40[2] = pos.z + 2.0;
+ func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
+ gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
+}
+
+void PlayerBombKart::func_800568A0(s32 cameraId) {
+ Mat4 mtx;
+ Player* player;
+
+ player = &gPlayerOne[cameraId];
+ D_80183E50[0] = pos.x;
+ D_80183E50[1] = surfaceHeight + 0.8;
+ D_80183E50[2] = pos.z;
+ set_transform_matrix(mtx, player->collision.orientationVector, D_80183E50, 0U, 0.5f);
+ // convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mtx);
+ // gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]),
+ // G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ AddHudMatrix(mtx, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B98);
+} \ No newline at end of file
diff --git a/src/engine/PlayerBombKart.h b/src/engine/PlayerBombKart.h
new file mode 100644
index 000000000..c1e58d815
--- /dev/null
+++ b/src/engine/PlayerBombKart.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <libultraship.h>
+#include "CoreMath.h"
+
+class PlayerBombKart {
+public:
+
+ enum PlayerBombKartState {
+ DISABLED,
+ ACTIVE,
+ };
+
+ s16 state = PlayerBombKartState::DISABLED;
+ FVector pos = {0, 0, 0};
+ f32 surfaceHeight = 0;
+ s32 _primAlpha = 0;
+
+ void Draw(size_t playerId, s32 cameraId);
+ void func_800563DC(s32 cameraId, s32 arg2);
+ void func_8005669C(s32 arg2);
+ void func_800568A0(s32 cameraId);
+};
diff --git a/src/engine/Smoke.cpp b/src/engine/Smoke.cpp
index 9841bfffb..5fb0c0c39 100644
--- a/src/engine/Smoke.cpp
+++ b/src/engine/Smoke.cpp
@@ -3,7 +3,6 @@
#include "Smoke.h"
#include "World.h"
-#include "vehicles/Vehicle.h"
#include "vehicles/Train.h"
#include "vehicles/Boat.h"
@@ -23,8 +22,8 @@ void TrainSmokeTick() {
s32 temp_a0;
Object* object;
- for (auto& vehicle : gWorldInstance.Vehicles) {
- if (auto train = dynamic_cast<ATrain*>(vehicle)) {
+ for (auto& actor : gWorldInstance.Actors) {
+ if (auto train = dynamic_cast<ATrain*>(actor)) {
if (train->SmokeTimer != 0) {
train->SmokeTimer -= 1;
}
@@ -48,7 +47,7 @@ void TrainSmokeTick() {
train->SmokeTimer = 100;
}
}
- } else if (auto boat = dynamic_cast<ABoat*>(vehicle)) {
+ } else if (auto boat = dynamic_cast<ABoat*>(actor)) {
if (boat->SmokeTimer != 0) {
boat->SmokeTimer -= 1;
}
@@ -78,8 +77,9 @@ void TrainSmokeTick() {
void TrainSmokeDraw(s32 cameraId) {
Camera* camera = &camera1[cameraId];
- for (auto& vehicle : gWorldInstance.Vehicles) {
- if (auto train = dynamic_cast<ATrain*>(vehicle)) {
+
+ for (auto& actor : gWorldInstance.Actors) {
+ if (auto train = dynamic_cast<ATrain*>(actor)) {
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0);
load_texture_block_i8_nomirror((uint8_t*)D_0D029458, 32, 32);
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
@@ -92,7 +92,7 @@ void TrainSmokeDraw(s32 cameraId) {
render_object_train_smoke_particle(train->SmokeParticles[i], cameraId);
}
}
- } else if (auto boat = dynamic_cast<ABoat*>(vehicle)) {
+ } else if (auto boat = dynamic_cast<ABoat*>(actor)) {
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0);
load_texture_block_i8_nomirror((uint8_t*)D_0D029458, 32, 32);
diff --git a/src/engine/TrainCrossing.cpp b/src/engine/TrainCrossing.cpp
index 98c7c766b..2d4442a30 100644
--- a/src/engine/TrainCrossing.cpp
+++ b/src/engine/TrainCrossing.cpp
@@ -1,7 +1,7 @@
#include <libultraship.h>
#include "TrainCrossing.h"
#include "World.h"
-#include "vehicles/Vehicle.h"
+#include "engine/Actor.h"
#include "vehicles/Train.h"
#include <memory>
@@ -29,8 +29,8 @@ void TrainCrossing::CrossingTrigger() {
OnTriggered = 0;
- for (const auto& vehicle : gWorldInstance.Vehicles) {
- if (auto train = dynamic_cast<ATrain*>(vehicle)) {;
+ for (const auto& actor : gWorldInstance.Actors) {
+ if (auto train = dynamic_cast<ATrain*>(actor)) {;
f32 radius = DynamicRadius(train->Locomotive.position, train->Locomotive.velocity, Position);
if (Distance(train->Locomotive.position, Position) < radius) {
diff --git a/src/engine/World.cpp b/src/engine/World.cpp
index 5617efd39..d67a2577c 100644
--- a/src/engine/World.cpp
+++ b/src/engine/World.cpp
@@ -2,7 +2,6 @@
#include "World.h"
#include "Cup.h"
#include "courses/Course.h"
-#include "vehicles/Vehicle.h"
#include "objects/BombKart.h"
#include "TrainCrossing.h"
#include <memory>
@@ -12,7 +11,6 @@ extern "C" {
#include "camera.h"
#include "objects.h"
#include "main.h"
- #include "engine/Engine.h"
#include "defines.h"
#include "audio/external.h"
#include "menus.h"
@@ -35,26 +33,12 @@ void World::SetCourseFromCup() {
CurrentCourse = CurrentCup->GetCourse();
}
-
-AVehicle* World::AddVehicle(AVehicle* vehicle) {
- Vehicles.push_back(vehicle);
- return Vehicles.back();
-}
-
-void World::ClearVehicles(void) {
- Vehicles.clear();
-}
-
TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius) {
auto crossing = std::make_shared<TrainCrossing>(position, waypointMin, waypointMax, approachRadius, exitRadius);
Crossings.push_back(crossing);
return crossing.get();
}
-void World::AddBombKart(Vec3f pos, TrackWaypoint* waypoint, uint16_t waypointIndex, uint16_t state, f32 unk_3C) {
- BombKarts.push_back(new OBombKart(pos, waypoint, waypointIndex, state, unk_3C));
-}
-
u32 World::GetCupIndex() {
return this->CupIndex;
}
@@ -97,13 +81,6 @@ void World::SetCup(Cup* cup) {
}
}
-CProperties* World::GetCourseProps() {
- if (Courses[CourseIndex]) {
- return (CProperties*) &Courses[CourseIndex]->Props;
- }
- return nullptr;
-}
-
void World::SetCourse(const char* name) {
//! @todo Use content dictionary instead
for (size_t i = 0; i < Courses.size(); i++) {
@@ -168,6 +145,7 @@ AActor* World::GetActor(size_t index) {
}
void World::TickActors() {
+ // This only ticks modded actors
for (AActor* actor : Actors) {
if (actor->IsMod()) {
actor->Tick();
diff --git a/src/engine/World.h b/src/engine/World.h
index a8e9932f5..3ba6e0437 100644
--- a/src/engine/World.h
+++ b/src/engine/World.h
@@ -2,12 +2,13 @@
#include <libultraship.h>
#include "CoreMath.h"
+#include "engine/courses/Course.h"
#include "objects/Object.h"
#include "Cup.h"
-#include "vehicles/Vehicle.h"
#include "vehicles/Train.h"
#include "vehicles/Car.h"
#include "objects/BombKart.h"
+#include "PlayerBombKart.h"
#include "vehicles/Train.h"
#include "TrainCrossing.h"
#include "objects/Thwomp.h"
@@ -22,7 +23,6 @@
extern "C" {
#include "camera.h"
#include "objects.h"
-#include "engine/Engine.h"
};
class OObject;
@@ -34,47 +34,6 @@ class TrainCrossing;
class OLakitu;
class World {
-
- typedef struct {
- uint8_t r, g, b;
- } RGB8;
-
- typedef struct {
- RGB8 TopRight;
- RGB8 BottomRight;
- RGB8 BottomLeft;
- RGB8 TopLeft;
- RGB8 FloorTopRight;
- RGB8 FloorBottomRight;
- RGB8 FloorBottomLeft;
- RGB8 FloorTopLeft;
- } SkyboxColours;
-
-
- typedef struct {
- const char* Name;
- const char* DebugName;
- const char* CourseLength;
- const char* AIBehaviour;
- float AIMaximumSeparation;
- float AIMinimumSeparation;
- int16_t *SomePtr;
- uint32_t AISteeringSensitivity;
- _struct_gCoursePathSizes_0x10 PathSizes;
- Vec4f D_0D009418;
- Vec4f D_0D009568;
- Vec4f D_0D0096B8;
- Vec4f D_0D009808;
- const char* PathTable[4];
- const char* PathTable2[4];
- CloudData *Clouds;
- CloudData *CloudList;
- int32_t MinimapFinishlineX;
- int32_t MinimapFinishlineY;
- SkyboxColours Skybox;
- MusicSeq Sequence;
- } Properties;
-
typedef struct {
std::vector<Mtx> Hud;
std::vector<Mtx> Objects;
@@ -98,7 +57,6 @@ public:
OObject* AddObject(OObject* object);
- CProperties* GetCourseProps();
void TickObjects();
void TickObjects60fps();
void DrawObjects(s32 cameraId);
@@ -136,18 +94,12 @@ public:
std::vector<AActor*> Actors;
std::vector<OObject*> Objects;
- std::vector<AVehicle*> Vehicles;
- std::vector<OBombKart*> BombKarts;
std::vector<ParticleEmitter*> Emitters;
std::unordered_map<s32, OLakitu*> Lakitus;
- AVehicle* AddVehicle(AVehicle* vehicle);
-
- void ClearVehicles(void);
-
/** Objects **/
- void AddBombKart(Vec3f pos, TrackWaypoint* waypoint, uint16_t waypointIndex, uint16_t state, f32 unk_3C);
+ PlayerBombKart playerBombKart[4]; // Used in battle mode
TrainCrossing* AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius);
std::vector<std::shared_ptr<TrainCrossing>> Crossings;
diff --git a/src/engine/courses/BansheeBoardwalk.cpp b/src/engine/courses/BansheeBoardwalk.cpp
index 03b4a9bd2..4ff92d107 100644
--- a/src/engine/courses/BansheeBoardwalk.cpp
+++ b/src/engine/courses/BansheeBoardwalk.cpp
@@ -149,7 +149,7 @@ void BansheeBoardwalk::Load() {
void BansheeBoardwalk::LoadTextures() {
}
-void BansheeBoardwalk::SpawnActors() {
+void BansheeBoardwalk::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns));
@@ -175,19 +175,17 @@ void BansheeBoardwalk::SpawnActors() {
gWorldInstance.AddObject(new OBoos(5, IPathSpan(180, 190), IPathSpan(200, 210), IPathSpan(280, 290)));
gWorldInstance.AddObject(new OBoos(5, IPathSpan(490, 500), IPathSpan(510, 520), IPathSpan(620, 630)));
}
-}
-void BansheeBoardwalk::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][110], 110, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][475], 475, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][610], 610, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][110], 110, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][475], 475, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][610], 610, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/BansheeBoardwalk.h b/src/engine/courses/BansheeBoardwalk.h
index 612597578..f1b98538d 100644
--- a/src/engine/courses/BansheeBoardwalk.h
+++ b/src/engine/courses/BansheeBoardwalk.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/BigDonut.cpp b/src/engine/courses/BigDonut.cpp
index c0d4b1f7f..5bdf76a23 100644
--- a/src/engine/courses/BigDonut.cpp
+++ b/src/engine/courses/BigDonut.cpp
@@ -123,19 +123,19 @@ void BigDonut::Load() {
void BigDonut::LoadTextures() {
}
-void BigDonut::SpawnActors() {}
+void BigDonut::BeginPlay() {
+ spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns));
-void BigDonut::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f));
}
}
diff --git a/src/engine/courses/BigDonut.h b/src/engine/courses/BigDonut.h
index 732a9a568..bc076ecf2 100644
--- a/src/engine/courses/BigDonut.h
+++ b/src/engine/courses/BigDonut.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/BlockFort.cpp b/src/engine/courses/BlockFort.cpp
index 61eb3c0b1..136ffeef5 100644
--- a/src/engine/courses/BlockFort.cpp
+++ b/src/engine/courses/BlockFort.cpp
@@ -120,21 +120,19 @@ void BlockFort::Load() {
void BlockFort::LoadTextures() {
}
-void BlockFort::SpawnActors() {
+void BlockFort::BeginPlay() {
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns));
-}
-void BlockFort::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f));
}
}
diff --git a/src/engine/courses/BlockFort.h b/src/engine/courses/BlockFort.h
index b3d2fdc3c..c985b9546 100644
--- a/src/engine/courses/BlockFort.h
+++ b/src/engine/courses/BlockFort.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/BowsersCastle.cpp b/src/engine/courses/BowsersCastle.cpp
index 5174c5ea1..6f4ecccc5 100644
--- a/src/engine/courses/BowsersCastle.cpp
+++ b/src/engine/courses/BowsersCastle.cpp
@@ -148,7 +148,7 @@ void BowsersCastle::LoadTextures() {
dma_textures(gTextureShrub, 0x000003FFU, 0x00000800U);
}
-void BowsersCastle::SpawnActors() {
+void BowsersCastle::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_tree_spawn));
@@ -194,19 +194,17 @@ void BowsersCastle::SpawnActors() {
gWorldInstance.AddObject(new OThwomp(0x073a, 0xf9f2, 0x4000, 1.0f, 5, 1));
break;
}
-}
-void BowsersCastle::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][260], 260, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][260], 260, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/BowsersCastle.h b/src/engine/courses/BowsersCastle.h
index bbbd4c75e..767bbdb8c 100644
--- a/src/engine/courses/BowsersCastle.h
+++ b/src/engine/courses/BowsersCastle.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/ChocoMountain.cpp b/src/engine/courses/ChocoMountain.cpp
index 04065dff5..4406159e9 100644
--- a/src/engine/courses/ChocoMountain.cpp
+++ b/src/engine/courses/ChocoMountain.cpp
@@ -163,23 +163,21 @@ void ChocoMountain::Load() {
void ChocoMountain::LoadTextures() {
}
-void ChocoMountain::SpawnActors() {
+void ChocoMountain::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns));
spawn_falling_rocks((struct ActorSpawnData*)LOAD_ASSET_RAW((const char*)d_course_choco_mountain_falling_rock_spawns));
-}
-void ChocoMountain::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][165], 165, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][330], 330, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][550], 550, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][595], 595, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][165], 165, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][330], 330, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][550], 550, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][595], 595, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/ChocoMountain.h b/src/engine/courses/ChocoMountain.h
index 718b40202..45926ed61 100644
--- a/src/engine/courses/ChocoMountain.h
+++ b/src/engine/courses/ChocoMountain.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
diff --git a/src/engine/courses/Course.cpp b/src/engine/courses/Course.cpp
index 0dd1ba33a..3b2ac641d 100644
--- a/src/engine/courses/Course.cpp
+++ b/src/engine/courses/Course.cpp
@@ -16,7 +16,6 @@ extern "C" {
#include "render_objects.h"
#include "save.h"
#include "staff_ghosts.h"
-#include "Engine.h"
#include "code_800029B0.h"
#include "render_courses.h"
extern StaffGhost* d_mario_raceway_staff_ghost;
@@ -153,7 +152,7 @@ void Course::Init() {
void Course::LoadTextures() {
}
-void Course::SpawnActors() {
+void Course::BeginPlay() {
}
void Course::InitClouds() {
diff --git a/src/engine/courses/Course.h b/src/engine/courses/Course.h
index f7bca6809..d4f637073 100644
--- a/src/engine/courses/Course.h
+++ b/src/engine/courses/Course.h
@@ -1,85 +1,77 @@
-#ifndef COURSE_H
-#define COURSE_H
+#ifndef ENGINE_COURSE_H
+#define ENGINE_COURSE_H
#include <libultraship.h>
+#include "CoreMath.h"
-// C-compatible function declaration
#ifdef __cplusplus
-#include "CoreMath.h"
#include "engine/objects/Lakitu.h"
extern "C" {
#endif
- #include "camera.h"
- #include "course_offsets.h"
- #include "data/some_data.h"
- #include "defines.h"
- #include "bomb_kart.h"
- #include "path_spawn_metadata.h"
- #include "Engine.h"
- #include "waypoints.h"
-
-CProperties *CourseManager_GetProps();
+#include "camera.h"
+#include "course_offsets.h"
+#include "data/some_data.h"
+#include "defines.h"
+#include "bomb_kart.h"
+#include "path_spawn_metadata.h"
+#include "waypoints.h"
+#include "sounds.h"
+#include "common_structs.h"
#ifdef __cplusplus
}
#endif
+typedef struct SkyboxColours {
+ RGB8 TopRight;
+ RGB8 BottomRight;
+ RGB8 BottomLeft;
+ RGB8 TopLeft;
+ RGB8 FloorTopRight;
+ RGB8 FloorBottomRight;
+ RGB8 FloorBottomLeft;
+ RGB8 FloorTopLeft;
+} SkyboxColours;
+
+typedef struct Properties {
+ const char* Id;
+ const char* Name;
+ const char* DebugName;
+ const char* CourseLength;
+ const char* AIBehaviour;
+ const char* MinimapTexture;
+ s32 LakituTowType;
+ IVector2D MinimapDimensions;
+ float AIMaximumSeparation;
+ float AIMinimumSeparation;
+ float NearPersp;
+ float FarPersp;
+ int16_t *SomePtr;
+ uint32_t AISteeringSensitivity;
+ _struct_gCoursePathSizes_0x10 PathSizes;
+ Vec4f D_0D009418;
+ Vec4f D_0D009568;
+ Vec4f D_0D0096B8;
+ Vec4f D_0D009808;
+ TrackWaypoint* PathTable[4];
+ TrackWaypoint* PathTable2[4];
+ CloudData *Clouds;
+ CloudData *CloudList;
+ int32_t MinimapFinishlineX;
+ int32_t MinimapFinishlineY;
+ SkyboxColours Skybox;
+ const course_texture *textures;
+ enum MusicSeq Sequence;
+} Properties;
+
#ifdef __cplusplus
class World; // <-- Forward declare
-
class Course {
public:
- typedef struct {
- uint8_t r, g, b;
- } RGB8;
-
- typedef struct {
- RGB8 TopRight;
- RGB8 BottomRight;
- RGB8 BottomLeft;
- RGB8 TopLeft;
- RGB8 FloorTopRight;
- RGB8 FloorBottomRight;
- RGB8 FloorBottomLeft;
- RGB8 FloorTopLeft;
- } SkyboxColours;
-
-
- typedef struct {
- const char* Id;
- const char* Name;
- const char* DebugName;
- const char* CourseLength;
- const char* AIBehaviour;
- const char* MinimapTexture;
- s32 LakituTowType;
- IVector2D MinimapDimensions;
- float AIMaximumSeparation;
- float AIMinimumSeparation;
- float NearPersp;
- float FarPersp;
- int16_t *SomePtr;
- uint32_t AISteeringSensitivity;
- _struct_gCoursePathSizes_0x10 PathSizes;
- Vec4f D_0D009418;
- Vec4f D_0D009568;
- Vec4f D_0D0096B8;
- Vec4f D_0D009808;
- TrackWaypoint* PathTable[4];
- TrackWaypoint* PathTable2[4];
- CloudData *Clouds;
- CloudData *CloudList;
- int32_t MinimapFinishlineX;
- int32_t MinimapFinishlineY;
- SkyboxColours Skybox;
- const course_texture *textures;
- MusicSeq Sequence;
- } Properties;
-
Properties Props;
const char* vtx = nullptr;
@@ -94,7 +86,12 @@ public:
virtual void Load(); // Decompress and load stock courses. Must be overridden for custom courses
virtual void Load(Vtx* vtx, Gfx *gfx); // Load custom course
virtual void LoadTextures();
- virtual void SpawnActors();
+
+ /**
+ * @brief BeginPlay This function is called once at the start of gameplay.
+ * Actor spawning should go here.
+ */
+ virtual void BeginPlay();
virtual void InitClouds();
virtual void UpdateClouds(s32, Camera*);
virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7);
@@ -124,4 +121,4 @@ private:
#endif
-#endif // COURSE_H \ No newline at end of file
+#endif // ENGINE_COURSE_H
diff --git a/src/engine/courses/DKJungle.cpp b/src/engine/courses/DKJungle.cpp
index e3e7bf3f5..a49a029c3 100644
--- a/src/engine/courses/DKJungle.cpp
+++ b/src/engine/courses/DKJungle.cpp
@@ -150,12 +150,31 @@ void DKJungle::LoadTextures() {
dma_textures(gTextureDksJungleParkwayKiwanoFruit3, 0x00000364U, 0x00000400U);
}
-void DKJungle::SpawnActors() {
+void DKJungle::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_item_box_spawns));
init_kiwano_fruit();
func_80298D10();
+
+
+ generate_ferry_waypoints();
+
+ // The original game only ran vehicle logic every second frame.
+ // Thus the speed gets divided by two to set speed to match properly
+ gWorldInstance.AddActor(new ABoat((0.6666666f)/4, 0));
+
+ if (gModeSelection == VERSUS) {
+ Vec3f pos = {0, 0, 0};
+
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ }
}
// Likely sets minimap boundaries
@@ -273,26 +292,6 @@ void DKJungle::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f
func_8003F138(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
-void DKJungle::SpawnVehicles() {
- generate_ferry_waypoints();
-
- // The original game only ran vehicle logic every second frame.
- // Thus the speed gets divided by two to set speed to match properly
- gWorldInstance.AddVehicle(new ABoat((0.6666666f)/4, 0));
-
- if (gModeSelection == VERSUS) {
- Vec3f pos = {0, 0, 0};
-
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][190], 190, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- }
-}
-
void DKJungle::Waypoints(Player* player, int8_t playerId) {
s16 waypoint = gNearestWaypointByPlayerId[playerId];
if ((waypoint >= 0xB9) && (waypoint < 0x119)) {
diff --git a/src/engine/courses/DKJungle.h b/src/engine/courses/DKJungle.h
index 389213c1f..71cc1e582 100644
--- a/src/engine/courses/DKJungle.h
+++ b/src/engine/courses/DKJungle.h
@@ -26,7 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
@@ -38,7 +38,6 @@ public:
virtual void MinimapFinishlinePosition() override;
virtual void Render(struct UnkStruct_800DC5EC*) override;
virtual void RenderCredits() override;
- virtual void SpawnVehicles() override;
virtual void Collision() override;
virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override;
virtual void Waypoints(Player* player, int8_t playerId) override;
diff --git a/src/engine/courses/DoubleDeck.cpp b/src/engine/courses/DoubleDeck.cpp
index 1d5e16c60..fea83005d 100644
--- a/src/engine/courses/DoubleDeck.cpp
+++ b/src/engine/courses/DoubleDeck.cpp
@@ -117,21 +117,19 @@ void DoubleDeck::Load() {
void DoubleDeck::LoadTextures() {
}
-void DoubleDeck::SpawnActors() {
+void DoubleDeck::BeginPlay() {
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_double_deck_item_box_spawns));
-}
-void DoubleDeck::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f));
}
}
diff --git a/src/engine/courses/DoubleDeck.h b/src/engine/courses/DoubleDeck.h
index bb1a8f98c..d821187c8 100644
--- a/src/engine/courses/DoubleDeck.h
+++ b/src/engine/courses/DoubleDeck.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/FrappeSnowland.cpp b/src/engine/courses/FrappeSnowland.cpp
index 5c0b4df43..61527d685 100644
--- a/src/engine/courses/FrappeSnowland.cpp
+++ b/src/engine/courses/FrappeSnowland.cpp
@@ -127,7 +127,7 @@ void FrappeSnowland::LoadTextures() {
dma_textures(gTextureFrappeSnowlandTreeRight, 0x00000432U, 0x00000800U);
}
-void FrappeSnowland::SpawnActors() {
+void FrappeSnowland::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_tree_spawns));
@@ -154,19 +154,17 @@ void FrappeSnowland::SpawnActors() {
gWorldInstance.AddObject(new OSnowman(FVector(-701, 3, 853)));
gWorldInstance.AddObject(new OSnowman(FVector(-602, 0, 929)));
}
-}
-void FrappeSnowland::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][290], 290, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][350], 350, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][290], 290, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][350], 350, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/FrappeSnowland.h b/src/engine/courses/FrappeSnowland.h
index 5c53dafae..8ecbdbf46 100644
--- a/src/engine/courses/FrappeSnowland.h
+++ b/src/engine/courses/FrappeSnowland.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void InitClouds() override;
virtual void UpdateClouds(s32 sp1C, Camera* camera) override;
virtual void MinimapSettings() override;
diff --git a/src/engine/courses/KalimariDesert.cpp b/src/engine/courses/KalimariDesert.cpp
index ffd19a86e..e783d4e0f 100644
--- a/src/engine/courses/KalimariDesert.cpp
+++ b/src/engine/courses/KalimariDesert.cpp
@@ -11,7 +11,6 @@
#include "engine/vehicles/Utils.h"
#include "engine/vehicles/Train.h"
-#include "engine/vehicles/Vehicle.h"
extern "C" {
#include "main.h"
@@ -136,7 +135,7 @@ void KalimariDesert::LoadTextures() {
dma_textures(gTextureCactus3, 0x000003AFU, 0x00000800U);
}
-void KalimariDesert::SpawnActors() {
+void KalimariDesert::BeginPlay() {
struct RailroadCrossing* rrxing;
Vec3f position;
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
@@ -173,6 +172,45 @@ void KalimariDesert::SpawnActors() {
rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity,
ACTOR_RAILROAD_CROSSING));
rrxing->crossingTrigger = crossing1;
+
+
+
+ generate_train_waypoints();
+
+ s32 centerWaypoint = 160;
+
+ // Spawn two trains
+ for (size_t i = 0; i < _numTrains; ++i) {
+ uint32_t waypoint = CalculateWaypointDistribution(i, _numTrains, gVehicle2DWaypointLength, centerWaypoint);
+
+ if (CVarGetInteger("gMultiplayerNoFeatureCuts", 0) == false) {
+ // Multiplayer modes have no tender and no carriages
+ if (gActiveScreenMode != SCREEN_MODE_1P) {
+ _tender = ATrain::TenderStatus::NO_TENDER;
+ _numCarriages = 0;
+ }
+
+ // 2 player versus mode has a tender and a carriage
+ if ((gModeSelection == VERSUS) && (gPlayerCountSelection1 == 2)) {
+ _tender = ATrain::TenderStatus::HAS_TENDER;
+ _numCarriages = 1;
+ }
+ }
+
+ gWorldInstance.AddActor(new ATrain(_tender, _numCarriages, 2.5f, waypoint));
+ }
+
+ if (gModeSelection == VERSUS) {
+ Vec3f pos = {0, 0, 0};
+
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][138], 138, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][280], 280, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][404], 404, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][510], 510, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ }
}
// Likely sets minimap boundaries
@@ -214,45 +252,6 @@ void KalimariDesert::MinimapFinishlinePosition() {
draw_hud_2d_texture_8x8(this->Props.MinimapFinishlineX, this->Props.MinimapFinishlineY, (u8*) common_texture_minimap_finish_line);
}
-void KalimariDesert::SpawnVehicles() {
- generate_train_waypoints();
-
- s32 centerWaypoint = 160;
-
- // Spawn two trains
- for (size_t i = 0; i < _numTrains; ++i) {
- uint32_t waypoint = CalculateWaypointDistribution(i, _numTrains, gVehicle2DWaypointLength, centerWaypoint);
-
- if (CVarGetInteger("gMultiplayerNoFeatureCuts", 0) == false) {
- // Multiplayer modes have no tender and no carriages
- if (gActiveScreenMode != SCREEN_MODE_1P) {
- _tender = ATrain::TenderStatus::NO_TENDER;
- _numCarriages = 0;
- }
-
- // 2 player versus mode has a tender and a carriage
- if ((gModeSelection == VERSUS) && (gPlayerCountSelection1 == 2)) {
- _tender = ATrain::TenderStatus::HAS_TENDER;
- _numCarriages = 1;
- }
- }
-
- gWorldInstance.AddVehicle(new ATrain(_tender, _numCarriages, 2.5f, waypoint));
- }
-
- if (gModeSelection == VERSUS) {
- Vec3f pos = {0, 0, 0};
-
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][138], 138, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][280], 280, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][404], 404, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][510], 510, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- }
-}
-
void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) {
func_802B5D64(D_800DC610, D_802B87D4, 0, 1);
diff --git a/src/engine/courses/KalimariDesert.h b/src/engine/courses/KalimariDesert.h
index c4fed1d8f..0a07fcbb3 100644
--- a/src/engine/courses/KalimariDesert.h
+++ b/src/engine/courses/KalimariDesert.h
@@ -28,7 +28,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
@@ -37,7 +37,6 @@ public:
virtual void MinimapFinishlinePosition() override;
virtual void Render(struct UnkStruct_800DC5EC*) override;
virtual void RenderCredits() override;
- virtual void SpawnVehicles() override;
virtual void Collision() override;
virtual void Destroy() override;
diff --git a/src/engine/courses/KoopaTroopaBeach.cpp b/src/engine/courses/KoopaTroopaBeach.cpp
index 6beca16b6..4e017912e 100644
--- a/src/engine/courses/KoopaTroopaBeach.cpp
+++ b/src/engine/courses/KoopaTroopaBeach.cpp
@@ -139,7 +139,7 @@ void KoopaTroopaBeach::Load() {
void KoopaTroopaBeach::LoadTextures() {
}
-void KoopaTroopaBeach::SpawnActors() {
+void KoopaTroopaBeach::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
init_actor_hot_air_balloon_item_box(328.0f * gCourseDirection, 70.0f, 2541.0f);
@@ -178,19 +178,17 @@ void KoopaTroopaBeach::SpawnActors() {
gWorldInstance.AddObject(new OSeagull(pos2));
}
}
-}
-void KoopaTroopaBeach::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][280], 280, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][280], 280, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][435], 435, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/KoopaTroopaBeach.h b/src/engine/courses/KoopaTroopaBeach.h
index c10b5cede..490dfe8ab 100644
--- a/src/engine/courses/KoopaTroopaBeach.h
+++ b/src/engine/courses/KoopaTroopaBeach.h
@@ -29,8 +29,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void UpdateCourseObjects() override;
diff --git a/src/engine/courses/LuigiRaceway.cpp b/src/engine/courses/LuigiRaceway.cpp
index 78522df74..a821ec2d9 100644
--- a/src/engine/courses/LuigiRaceway.cpp
+++ b/src/engine/courses/LuigiRaceway.cpp
@@ -164,7 +164,7 @@ void LuigiRaceway::LoadTextures() {
dma_textures(gTextureTrees5Right, 0x000003E8U, 0x00000800U);
}
-void LuigiRaceway::SpawnActors() {
+void LuigiRaceway::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_luigi_raceway_tree_spawn));
spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_luigi_raceway_item_box_spawns));
@@ -174,19 +174,17 @@ void LuigiRaceway::SpawnActors() {
} else { // Normal gameplay
gWorldInstance.AddObject(new OHotAirBalloon(FVector(-176.0, 0.0f, -2323.0f)));
}
-}
-void LuigiRaceway::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = { 0, 0, 0 };
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][305], 305, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][440], 440, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][515], 515, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][305], 305, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][440], 440, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][515], 515, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/LuigiRaceway.h b/src/engine/courses/LuigiRaceway.h
index 7166278c3..c5e089d81 100644
--- a/src/engine/courses/LuigiRaceway.h
+++ b/src/engine/courses/LuigiRaceway.h
@@ -28,8 +28,7 @@ class LuigiRaceway : public Course {
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void UpdateCourseObjects() override;
diff --git a/src/engine/courses/MarioRaceway.cpp b/src/engine/courses/MarioRaceway.cpp
index d98065ed8..a2cc96525 100644
--- a/src/engine/courses/MarioRaceway.cpp
+++ b/src/engine/courses/MarioRaceway.cpp
@@ -6,6 +6,7 @@
#include "MarioRaceway.h"
#include "World.h"
#include "engine/actors/AFinishline.h"
+#include "engine/objects/Object.h"
#include "engine/objects/BombKart.h"
extern "C" {
@@ -173,7 +174,7 @@ void MarioRaceway::LoadTextures() {
dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U);
}
-void MarioRaceway::SpawnActors() {
+void MarioRaceway::BeginPlay() {
struct Actor* actor;
Vec3f position;
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
@@ -190,22 +191,23 @@ void MarioRaceway::SpawnActors() {
vec3f_set(position, 2520.0f, 0.0f, 1240.0f);
position[0] *= gCourseDirection;
add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN);
-}
-void MarioRaceway::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
-
- gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][265], 265, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][285], 285, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][420], 420, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][265], 265, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][285], 285, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][420], 420, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
+void MarioRaceway::SpawnVehicles() {
+
+}
+
// Likely sets minimap boundaries
void MarioRaceway::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust5, 0x443, 0x1000));
diff --git a/src/engine/courses/MarioRaceway.h b/src/engine/courses/MarioRaceway.h
index ef0fb904b..9714fd0f5 100644
--- a/src/engine/courses/MarioRaceway.h
+++ b/src/engine/courses/MarioRaceway.h
@@ -26,7 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
+ virtual void BeginPlay() override;
virtual void SpawnVehicles() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/MooMooFarm.cpp b/src/engine/courses/MooMooFarm.cpp
index 109857353..5adaeb2a6 100644
--- a/src/engine/courses/MooMooFarm.cpp
+++ b/src/engine/courses/MooMooFarm.cpp
@@ -159,26 +159,24 @@ void MooMooFarm::LoadTextures() {
dma_textures(gTextureCow05Right, 0x00000400U, 0x00000800U);
}
-void MooMooFarm::SpawnActors() {
+void MooMooFarm::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
if (gPlayerCountSelection1 != 4) {
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_tree_spawn));
}
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_item_box_spawns));
-}
-void MooMooFarm::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][225], 225, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][316], 316, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][434], 434, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][225], 225, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][316], 316, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][434], 434, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/MooMooFarm.h b/src/engine/courses/MooMooFarm.h
index 5815db8c7..0293b1b04 100644
--- a/src/engine/courses/MooMooFarm.h
+++ b/src/engine/courses/MooMooFarm.h
@@ -29,8 +29,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void UpdateCourseObjects() override;
diff --git a/src/engine/courses/PodiumCeremony.cpp b/src/engine/courses/PodiumCeremony.cpp
index 631a187dc..736a3ed9f 100644
--- a/src/engine/courses/PodiumCeremony.cpp
+++ b/src/engine/courses/PodiumCeremony.cpp
@@ -159,7 +159,7 @@ void PodiumCeremony::Load() {
void PodiumCeremony::LoadTextures() {
}
-void PodiumCeremony::SpawnActors() {
+void PodiumCeremony::BeginPlay() {
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn));
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns));
spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn));
@@ -187,18 +187,15 @@ void PodiumCeremony::SpawnActors() {
}
gWorldInstance.AddObject(new OTrophy(pos, type, OTrophy::Behaviour::PODIUM_CEREMONY));
-}
-
-void PodiumCeremony::SpawnVehicles() {
- Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[3][3], 3, 5, 1.25f);
- gWorldInstance.AddBombKart(pos, &D_80164550[3][40], 40, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[3][60], 60, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[3][80], 80, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[3][100], 100, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[3][120], 120, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[3][140], 140, 0, 1.0f);
+ Vec3f kart = {0, 0, 0};
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][3], 3, 5, 1.25f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][40], 40, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][60], 60, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][80], 80, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][100], 100, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][120], 120, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][140], 140, 0, 1.0f));
}
// Likely sets minimap boundaries
diff --git a/src/engine/courses/PodiumCeremony.h b/src/engine/courses/PodiumCeremony.h
index bb17e8f8d..140d95889 100644
--- a/src/engine/courses/PodiumCeremony.h
+++ b/src/engine/courses/PodiumCeremony.h
@@ -27,8 +27,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/RainbowRoad.cpp b/src/engine/courses/RainbowRoad.cpp
index 7dd4bcdf7..b878eebfb 100644
--- a/src/engine/courses/RainbowRoad.cpp
+++ b/src/engine/courses/RainbowRoad.cpp
@@ -133,7 +133,7 @@ void RainbowRoad::Load() {
void RainbowRoad::LoadTextures() {
}
-void RainbowRoad::SpawnActors() {
+void RainbowRoad::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns));
@@ -147,19 +147,17 @@ void RainbowRoad::SpawnActors() {
gWorldInstance.AddObject(new OChainChomp());
gWorldInstance.AddObject(new OChainChomp());
}
-}
-void RainbowRoad::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/RainbowRoad.h b/src/engine/courses/RainbowRoad.h
index 5f6b0e5e7..e5262f170 100644
--- a/src/engine/courses/RainbowRoad.h
+++ b/src/engine/courses/RainbowRoad.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void InitClouds() override;
virtual void UpdateClouds(s32, Camera*) override;
virtual void MinimapSettings() override;
diff --git a/src/engine/courses/RoyalRaceway.cpp b/src/engine/courses/RoyalRaceway.cpp
index 2ea0022ca..de1ab164b 100644
--- a/src/engine/courses/RoyalRaceway.cpp
+++ b/src/engine/courses/RoyalRaceway.cpp
@@ -170,25 +170,23 @@ void RoyalRaceway::LoadTextures() {
dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U);
}
-void RoyalRaceway::SpawnActors() {
+void RoyalRaceway::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn));
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns));
spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn));
-}
-void RoyalRaceway::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][296], 296, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][400], 400, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][746], 746, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][296], 296, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][400], 400, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][746], 746, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/RoyalRaceway.h b/src/engine/courses/RoyalRaceway.h
index 0a7cd3e6a..2a3095bc8 100644
--- a/src/engine/courses/RoyalRaceway.h
+++ b/src/engine/courses/RoyalRaceway.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
diff --git a/src/engine/courses/SherbetLand.cpp b/src/engine/courses/SherbetLand.cpp
index bfcacca4a..7e77ecdbb 100644
--- a/src/engine/courses/SherbetLand.cpp
+++ b/src/engine/courses/SherbetLand.cpp
@@ -129,7 +129,7 @@ void SherbetLand::Load() {
void SherbetLand::LoadTextures() {
}
-void SherbetLand::SpawnActors() {
+void SherbetLand::BeginPlay() {
gWorldInstance.AddActor(new AFinishline());
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_sherbet_land_item_box_spawns));
@@ -199,19 +199,15 @@ void SherbetLand::SpawnActors() {
auto penguin14 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos11, 0x9000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6)));
penguin14->MirrorModeAngleOffset = -0x4000;
-}
-
-void SherbetLand::SpawnVehicles() {
if (gModeSelection == VERSUS) {
- Vec3f pos = {0, 0, 0};
-
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ Vec3f kart = {0, 0, 0};
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][100], 100, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][150], 150, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][200], 200, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][250], 250, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/SherbetLand.h b/src/engine/courses/SherbetLand.h
index 177410ca7..13e41e592 100644
--- a/src/engine/courses/SherbetLand.h
+++ b/src/engine/courses/SherbetLand.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void UpdateCourseObjects() override;
diff --git a/src/engine/courses/Skyscraper.cpp b/src/engine/courses/Skyscraper.cpp
index f7c092bee..abf622ae2 100644
--- a/src/engine/courses/Skyscraper.cpp
+++ b/src/engine/courses/Skyscraper.cpp
@@ -142,21 +142,19 @@ void Skyscraper::Load() {
void Skyscraper::LoadTextures() {
}
-void Skyscraper::SpawnActors() {
+void Skyscraper::BeginPlay() {
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_skyscraper_item_box_spawns));
-}
-void Skyscraper::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][60], 60, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][80], 80, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][120], 120, 0, 1.0f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][140], 140, 0, 1.0f));
}
}
diff --git a/src/engine/courses/Skyscraper.h b/src/engine/courses/Skyscraper.h
index 6658b43e6..b9b998f73 100644
--- a/src/engine/courses/Skyscraper.h
+++ b/src/engine/courses/Skyscraper.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
//virtual void InitClouds() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
diff --git a/src/engine/courses/TestCourse.cpp b/src/engine/courses/TestCourse.cpp
index cf35a062b..30a925d80 100644
--- a/src/engine/courses/TestCourse.cpp
+++ b/src/engine/courses/TestCourse.cpp
@@ -151,7 +151,7 @@ void TestCourse::LoadTextures() {
dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U);
}
-void TestCourse::SpawnActors() {
+void TestCourse::BeginPlay() {
struct ActorSpawnData itemboxes[] = {
{ 200, 1500, 200 , 0},
{ 350, 2500, 300 , 1},
@@ -304,9 +304,8 @@ void TestCourse::SpawnVehicles() {
Vec3f pos = {0, 0, 0};
- gWorldInstance.AddBombKart(pos, &D_80164550[0][25], 25, 4, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][45], 45, 4, 0.8333333f);
-
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][25], 25, 4, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][45], 45, 4, 0.8333333f));
}
void TestCourse::UpdateVehicles() {
diff --git a/src/engine/courses/TestCourse.h b/src/engine/courses/TestCourse.h
index 8bcffb131..2ba8a9f49 100644
--- a/src/engine/courses/TestCourse.h
+++ b/src/engine/courses/TestCourse.h
@@ -26,7 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
diff --git a/src/engine/courses/ToadsTurnpike.cpp b/src/engine/courses/ToadsTurnpike.cpp
index 88371411f..f6aa3f738 100644
--- a/src/engine/courses/ToadsTurnpike.cpp
+++ b/src/engine/courses/ToadsTurnpike.cpp
@@ -148,7 +148,7 @@ void ToadsTurnpike::Load() {
void ToadsTurnpike::LoadTextures() {
}
-void ToadsTurnpike::SpawnActors() {
+void ToadsTurnpike::BeginPlay() {
Vec3f pos;
pos[0] = (gIsMirrorMode != 0) ? D_80164490->posX + 138.0f : D_80164490->posX - 138.0f;
pos[1] = (f32) (D_80164490->posY - 15);
@@ -157,6 +157,51 @@ void ToadsTurnpike::SpawnActors() {
gWorldInstance.AddActor(new AFinishline(pos));
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_toads_turnpike_item_box_spawns));
+
+ uint32_t waypoint;
+ f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333;
+ f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665;
+ a /= 2; // Normally vehicle logic is only ran every 2 frames. This slows the vehicles down to match.
+ b /= 2;
+
+ // Other game modes spawn seven of each vehicle
+ if (gModeSelection == TIME_TRIALS) {
+ _numTrucks = 8;
+ _numBuses = 8;
+ _numTankerTrucks = 8;
+ _numCars = 8;
+ }
+
+ for (size_t i = 0; i < _numTrucks; i++) {
+ waypoint = CalculateWaypointDistribution(i, _numTrucks, gWaypointCountByPathIndex[0], 0);
+ gWorldInstance.AddActor(new ATruck(a, b, &D_80164550[0][0], waypoint));
+ }
+
+ for (size_t i = 0; i < _numBuses; i++) {
+ waypoint = CalculateWaypointDistribution(i, _numBuses, gWaypointCountByPathIndex[0], 75);
+ gWorldInstance.AddActor(new ABus(a, b, &D_80164550[0][0], waypoint));
+ }
+
+ for (size_t i = 0; i < _numTankerTrucks; i++) {
+ waypoint = CalculateWaypointDistribution(i, _numTankerTrucks, gWaypointCountByPathIndex[0], 50);
+ gWorldInstance.AddActor(new ATankerTruck(a, b, &D_80164550[0][0], waypoint));
+ }
+
+ for (size_t i = 0; i < _numCars; i++) {
+ waypoint = CalculateWaypointDistribution(i, _numCars, gWaypointCountByPathIndex[0], 25);
+ gWorldInstance.AddActor(new ACar(a, b, &D_80164550[0][0], waypoint));
+ }
+
+ if (gModeSelection == VERSUS) {
+ Vec3f pos = {0, 0, 0};
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ }
}
void ToadsTurnpike::InitClouds() {
@@ -243,52 +288,4 @@ void ToadsTurnpike::RenderCredits() {
void ToadsTurnpike::Collision() {}
-void ToadsTurnpike::SpawnVehicles() {
- uint32_t waypoint;
- f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333;
- f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665;
- a /= 2; // Normally vehicle logic is only ran every 2 frames. This slows the vehicles down to match.
- b /= 2;
-
- // Other game modes spawn seven of each vehicle
- if (gModeSelection == TIME_TRIALS) {
- _numTrucks = 8;
- _numBuses = 8;
- _numTankerTrucks = 8;
- _numCars = 8;
- }
-
- for (size_t i = 0; i < _numTrucks; i++) {
- waypoint = CalculateWaypointDistribution(i, _numTrucks, gWaypointCountByPathIndex[0], 0);
- gWorldInstance.AddVehicle(new ATruck(a, b, &D_80164550[0][0], waypoint));
- }
-
- for (size_t i = 0; i < _numBuses; i++) {
- waypoint = CalculateWaypointDistribution(i, _numBuses, gWaypointCountByPathIndex[0], 75);
- gWorldInstance.AddVehicle(new ABus(a, b,&D_80164550[0][0], waypoint));
- }
-
- for (size_t i = 0; i < _numTankerTrucks; i++) {
- waypoint = CalculateWaypointDistribution(i, _numTankerTrucks, gWaypointCountByPathIndex[0], 50);
- gWorldInstance.AddVehicle(new ATankerTruck(a, b, &D_80164550[0][0], waypoint));
- }
-
- for (size_t i = 0; i < _numCars; i++) {
- waypoint = CalculateWaypointDistribution(i, _numCars, gWaypointCountByPathIndex[0], 25);
- gWorldInstance.AddVehicle(new ACar(a, b, &D_80164550[0][0], waypoint));
- }
-
- if (gModeSelection == VERSUS) {
- Vec3f pos = {0, 0, 0};
-
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- }
-}
-
void ToadsTurnpike::Destroy() { }
diff --git a/src/engine/courses/ToadsTurnpike.h b/src/engine/courses/ToadsTurnpike.h
index bbb2df9c3..a73e3829f 100644
--- a/src/engine/courses/ToadsTurnpike.h
+++ b/src/engine/courses/ToadsTurnpike.h
@@ -26,7 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
+ virtual void BeginPlay() override;
virtual void InitClouds() override;
virtual void UpdateClouds(s32, Camera*) override;
virtual void MinimapSettings() override;
@@ -37,7 +37,6 @@ public:
virtual void Render(struct UnkStruct_800DC5EC*) override;
virtual void RenderCredits() override;
virtual void Collision() override;
- virtual void SpawnVehicles() override;
virtual void Destroy() override;
private:
size_t _numTrucks = 7;
diff --git a/src/engine/courses/WarioStadium.cpp b/src/engine/courses/WarioStadium.cpp
index 522a6509d..44a8d5d1a 100644
--- a/src/engine/courses/WarioStadium.cpp
+++ b/src/engine/courses/WarioStadium.cpp
@@ -155,7 +155,7 @@ void WarioStadium::Load() {
void WarioStadium::LoadTextures() {
}
-void WarioStadium::SpawnActors() {
+void WarioStadium::BeginPlay() {
Vec3f finish;
finish[0] = (gIsMirrorMode != 0) ? D_80164490->posX + 12.0f : D_80164490->posX - 12.0f;
(gIsMirrorMode != 0) ? D_80164490->posX + 12.0f : D_80164490->posX - 12.0f;
@@ -177,19 +177,17 @@ void WarioStadium::SpawnActors() {
Vec3f pos3 = { -2622.0f, 79.0f, 739.0f };
pos3[0] *= gCourseDirection;
gWorldInstance.AddActor(new AWarioSign(pos3));
-}
-void WarioStadium::SpawnVehicles() {
if (gModeSelection == VERSUS) {
Vec3f pos = { 0, 0, 0 };
- gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
- gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
+ gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f));
}
}
diff --git a/src/engine/courses/WarioStadium.h b/src/engine/courses/WarioStadium.h
index 088e81b72..72f796cc7 100644
--- a/src/engine/courses/WarioStadium.h
+++ b/src/engine/courses/WarioStadium.h
@@ -28,8 +28,7 @@ class WarioStadium : public Course {
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void InitClouds() override;
virtual void UpdateClouds(s32, Camera*) override;
virtual void MinimapSettings() override;
diff --git a/src/engine/courses/YoshiValley.cpp b/src/engine/courses/YoshiValley.cpp
index f7f3d1871..9366f45ea 100644
--- a/src/engine/courses/YoshiValley.cpp
+++ b/src/engine/courses/YoshiValley.cpp
@@ -137,7 +137,7 @@ void YoshiValley::LoadTextures() {
dma_textures(gTextureTrees2, 0x000003E8U, 0x00000800U);
}
-void YoshiValley::SpawnActors() {
+void YoshiValley::BeginPlay() {
Vec3f position;
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
Vec3s rotation = { 0, 0, 0 };
@@ -173,43 +173,40 @@ void YoshiValley::SpawnActors() {
gWorldInstance.AddObject(new OHedgehog(FVector(-2493, 94, -454), FVector2D(-2505, -397), 28));
gWorldInstance.AddObject(new OHedgehog(FVector(-2477, 3, -57), FVector2D(-2539, -66), 28));
}
-}
-
-// Likely sets minimap boundaries
-void YoshiValley::MinimapSettings() {
- D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust0, 0x479, 0xC00));
- D_8018D2A0 = 0.018f;
- D_8018D2E0 = 61;
- D_8018D2E8 = 38;
-}
-
-void YoshiValley::InitCourseObjects() {
-}
-void YoshiValley::SpawnVehicles() {
if (gModeSelection == VERSUS) {
-
// Note that the waypoint values might be unused for Yoshi's Valley. Entered them because
// the original data has values here.
// Note that the Y height is calculated automatically to place the kart on the surface
Vec3f pos = {-1533, 0, -682};
- gWorldInstance.AddBombKart(pos, NULL, 0, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos, NULL, 0, 0, 0.8333333f));
Vec3f pos2 = {-1565, 0, -619};
- gWorldInstance.AddBombKart(pos2, NULL, 10, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos2, NULL, 10, 0, 0.8333333f));
Vec3f pos3 = {-1529, 0, -579};
- gWorldInstance.AddBombKart(pos3, NULL, 20, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos3, NULL, 20, 0, 0.8333333f));
Vec3f pos4 = {-1588, 0, -534};
- gWorldInstance.AddBombKart(pos4, NULL, 30, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos4, NULL, 30, 0, 0.8333333f));
Vec3f pos5 = {-1598, 0, -207};
- gWorldInstance.AddBombKart(pos5, NULL, 40, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos5, NULL, 40, 0, 0.8333333f));
Vec3f pos6 = {-1646, 0, -147};
- gWorldInstance.AddBombKart(pos6, NULL, 50, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos6, NULL, 50, 0, 0.8333333f));
Vec3f pos7 = {-2532, 0, -445};
- gWorldInstance.AddBombKart(pos7, NULL, 60, 0, 0.8333333f);
+ gWorldInstance.AddObject(new OBombKart(pos7, NULL, 60, 0, 0.8333333f));
}
}
+// Likely sets minimap boundaries
+void YoshiValley::MinimapSettings() {
+ D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust0, 0x479, 0xC00));
+ D_8018D2A0 = 0.018f;
+ D_8018D2E0 = 61;
+ D_8018D2E8 = 38;
+}
+
+void YoshiValley::InitCourseObjects() {
+}
+
void YoshiValley::UpdateCourseObjects() {
}
diff --git a/src/engine/courses/YoshiValley.h b/src/engine/courses/YoshiValley.h
index d0de64752..a986cd902 100644
--- a/src/engine/courses/YoshiValley.h
+++ b/src/engine/courses/YoshiValley.h
@@ -26,8 +26,7 @@ public:
// course_texture* textures, const char* displaylists, size_t dlSize);
virtual void Load() override;
virtual void LoadTextures() override;
- virtual void SpawnActors() override;
- virtual void SpawnVehicles() override;
+ virtual void BeginPlay() override;
virtual void MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void UpdateCourseObjects() override;
diff --git a/src/engine/items/Items.cpp b/src/engine/items/Items.cpp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/engine/items/Items.cpp
diff --git a/src/engine/items/Items.h b/src/engine/items/Items.h
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/engine/items/Items.h
diff --git a/src/engine/objects/BombKart.cpp b/src/engine/objects/BombKart.cpp
index c33b4b107..fc27103ed 100644
--- a/src/engine/objects/BombKart.cpp
+++ b/src/engine/objects/BombKart.cpp
@@ -1,4 +1,5 @@
#include <libultraship.h>
+#include "engine/objects/Object.h"
#include "BombKart.h"
#include <vector>
@@ -71,15 +72,9 @@ OBombKart::OBombKart(Vec3f pos, TrackWaypoint* waypoint, uint16_t waypointIndex,
WheelPos[3][2] = _pos[2];
check_bounding_collision(&_Collision, 2.0f, _pos[0], _pos[1], _pos[2]);
- _count++;
-}
-
-void OBombKart::Spawn() {
find_unused_obj_index(&ObjectIndex);
-}
-
-void OBombKart::BeginPlay() {
+ _count++;
}
void OBombKart::Tick() {
@@ -332,8 +327,21 @@ void OBombKart::Tick() {
}
void OBombKart::Draw(s32 cameraId) {
-
if (gModeSelection == BATTLE) {
+ for (size_t playerId = 0; playerId < NUM_BOMB_KARTS_BATTLE; playerId++) {
+ Object* object = &gObjectList[ObjectIndex];
+ if (object->state != 0) {
+ s32 primAlpha = object->primAlpha;
+ Player* player = &gPlayerOne[playerId];
+ object->pos[0] = player->pos[0];
+ object->pos[1] = player->pos[1] - 2.0;
+ object->pos[2] = player->pos[2];
+ object->surfaceHeight = player->unk_074;
+ func_800563DC(ObjectIndex, cameraId, primAlpha);
+ func_8005669C(ObjectIndex, cameraId, primAlpha);
+ func_800568A0(ObjectIndex, cameraId);
+ }
+ }
return;
}
@@ -345,15 +353,10 @@ void OBombKart::Draw(s32 cameraId) {
}
}
- Camera* camera;
- s32 temp_s4;
- s32 i;
- s32 state;
-
if (gGamestate == ENDING) {
cameraId = 0;
}
- camera = &camera1[cameraId];
+ Camera* camera = &camera1[cameraId];
if (cameraId == PLAYER_ONE) {
if (is_obj_flag_status_active(ObjectIndex, 0x00200000) != 0) {
Unk_4A = 0;
@@ -364,12 +367,12 @@ void OBombKart::Draw(s32 cameraId) {
}
// huh???
- state = State;
+ s32 state = State;
if (State != States::DISABLED) {
gObjectList[ObjectIndex].pos[0] = Pos[0];
gObjectList[ObjectIndex].pos[1] = Pos[1];
gObjectList[ObjectIndex].pos[2] = Pos[2];
- temp_s4 = func_8008A364(ObjectIndex, cameraId, 0x31C4U, 0x000001F4);
+ s32 temp_s4 = func_8008A364(ObjectIndex, cameraId, 0x31C4U, 0x000001F4);
if (is_obj_flag_status_active(ObjectIndex, VISIBLE) != 0) {
set_object_flag(ObjectIndex, 0x00200000);
D_80183E80[0] = 0;
@@ -385,28 +388,7 @@ void OBombKart::Draw(s32 cameraId) {
}
void OBombKart::DrawBattle(s32 cameraId) {
- if (gModeSelection != BATTLE) {
- return;
- }
- Player* temp_v0;
- s32 temp_s1;
- s32 playerId;
- Object* object;
-
- for (playerId = 0; playerId < gPlayerCount; playerId++) {
- object = &gObjectList[ObjectIndex];
- if (object->state != 0) {
- temp_s1 = object->primAlpha;
- temp_v0 = &gPlayerOne[playerId];
- object->pos[0] = temp_v0->pos[0];
- object->pos[1] = temp_v0->pos[1] - 2.0;
- object->pos[2] = temp_v0->pos[2];
- object->surfaceHeight = temp_v0->unk_074;
- func_800563DC(ObjectIndex, cameraId, temp_s1);
- func_8005669C(ObjectIndex, cameraId, temp_s1);
- func_800568A0(ObjectIndex, cameraId);
- }
- }
+
}
void OBombKart::SomeRender(Vec3f arg1) {
@@ -455,10 +437,6 @@ void OBombKart::Waypoint(s32 screenId) {
playerHUD[screenId].unk_74 = 1;
}
-void OBombKart::Collision(s32 playerId, Player* player) {
-
-}
-
Player* OBombKart::FindTarget() {
for (size_t i = 0; i < NUM_PLAYERS; i++) {
if (gPlayers[i].type & PLAYER_HUMAN) {
diff --git a/src/engine/objects/BombKart.h b/src/engine/objects/BombKart.h
index 7ceba7ecb..3663ee664 100644
--- a/src/engine/objects/BombKart.h
+++ b/src/engine/objects/BombKart.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "src/engine/vehicles/Vehicle.h"
+#include "engine/objects/Object.h"
#include <vector>
#include "engine/Matrix.h"
@@ -22,8 +22,8 @@ extern "C" {
* This differs from the other vehicle classes in that it does not get added to the standard actor list
* So this is sort of its own thing. Draw call in different place too.
*/
-class OBombKart {
-private:
+class OBombKart : public OObject {
+public:
enum States : uint16_t { // 0,1,3,5
DISABLED,
CCW,
@@ -34,8 +34,6 @@ private:
PODIUM_CEREMONY,
};
-public:
-
const char* Type;
Vec3f Pos;
@@ -63,12 +61,9 @@ public:
return _count;
}
- void Spawn();
- void BeginPlay();
- void Tick();
- void Draw(s32 cameraId);
+ virtual void Tick() override;
+ virtual void Draw(s32 cameraId) override;
void DrawBattle(s32 cameraId);
- void Collision(s32 playerId, Player* player);
void SomeRender(Vec3f arg1);
void LoadMtx();
void Waypoint(s32 screenId);
diff --git a/src/engine/objects/Boos.cpp b/src/engine/objects/Boos.cpp
index 0e64c673e..f06abc8f7 100644
--- a/src/engine/objects/Boos.cpp
+++ b/src/engine/objects/Boos.cpp
@@ -115,7 +115,6 @@ void OBoos::func_8007CA70(void) {
if (_isActive == false) {
_playerId = OBoos::func_8007C9F8();
point = &gNearestWaypointByPlayerId[_playerId];
- printf("point %d\n", *point);
if ((*point > _active.Start) && (*point < _active.End)) {
// First group entrance
OBoos::BooStart(0, _playerId);
@@ -123,7 +122,6 @@ void OBoos::func_8007CA70(void) {
}
if (_isActive == true) {
point = &gNearestWaypointByPlayerId[_playerId];
- printf("point %d\n", *point);
if ((*point > _leftBoundary.Start) && (*point < _leftBoundary.End)) {
// First group exit reverse direction
@@ -240,7 +238,6 @@ void OBoos::BooStart(s32 group, s32 playerId) {
s16 temp_s4;
s16 temp_s5;
SplineData* spline;
-printf("Boo Start\n");
for (size_t i = 0; i < _numBoos; i++) {
objectIndex = _indices[i]; // indexObjectList3[group + i];
init_object(objectIndex, 1);
@@ -262,7 +259,6 @@ printf("Boo Start\n");
void OBoos::BooExit(s32 group) {
s32 objectIndex;
-printf("Boo Exit\n");
for (size_t i = 0; i < _numBoos; i++) {
objectIndex = _indices[i]; //indexObjectList3[group + temp_a0];
gObjectList[objectIndex].unk_0DC += 1;
diff --git a/src/engine/objects/Lakitu.cpp b/src/engine/objects/Lakitu.cpp
index 1c8547bc8..93a87f5e1 100644
--- a/src/engine/objects/Lakitu.cpp
+++ b/src/engine/objects/Lakitu.cpp
@@ -160,12 +160,12 @@ void OLakitu::func_800791F0(s32 objectIndex, s32 playerId) {
if ((gObjectList[objectIndex].unk_0D8 != 3) && (gObjectList[objectIndex].unk_0D8 != 7)) {
func_800722CC(objectIndex, 1);
- if (CourseManager_GetProps()->LakituTowType == LakituTowType::ICE) {
+ if (CM_GetProps()->LakituTowType == LakituTowType::ICE) {
player->unk_0CA &= 0xFFEF;
}
}
- if (CourseManager_GetProps()->LakituTowType == LakituTowType::ICE) {
+ if (CM_GetProps()->LakituTowType == LakituTowType::ICE) {
func_800722CC(objectIndex, 0x00000010);
player->unk_0CA &= 0xFFDF;
}
@@ -362,7 +362,7 @@ void OLakitu::func_800797AC(s32 playerId) {
objectIndex = gIndexLakituList[playerId];
player = &gPlayerOne[playerId];
//if ((GetCourse() == GetSherbetLand()) && (player->unk_0CA & 1)) {
- if ((CourseManager_GetProps()->LakituTowType == LakituTowType::ICE) && (player->unk_0CA & 1)) {
+ if ((CM_GetProps()->LakituTowType == LakituTowType::ICE) && (player->unk_0CA & 1)) {
init_object(objectIndex, 7);
player->unk_0CA |= 0x10;
} else {
diff --git a/src/engine/objects/Object.cpp b/src/engine/objects/Object.cpp
index eab390aa1..eb23b853e 100644
--- a/src/engine/objects/Object.cpp
+++ b/src/engine/objects/Object.cpp
@@ -16,7 +16,6 @@ OObject::OObject() {}
void OObject::Tick() { }
void OObject::Tick60fps() {}
void OObject::Draw(s32 cameraId) { }
-void OObject::Collision() {}
void OObject::Expire() { }
void OObject::Destroy() {
PendingDestroy = true;
diff --git a/src/engine/objects/Object.h b/src/engine/objects/Object.h
index af2df81b5..c02deda23 100644
--- a/src/engine/objects/Object.h
+++ b/src/engine/objects/Object.h
@@ -20,7 +20,6 @@ public:
virtual void Tick();
virtual void Tick60fps();
virtual void Draw(s32 cameraId);
- virtual void Collision();
virtual void Expire();
virtual void Destroy(); // Mark object for deletion at the start of the next frame
};
diff --git a/src/engine/vehicles/Boat.cpp b/src/engine/vehicles/Boat.cpp
index 6a3c2beb1..460331f97 100644
--- a/src/engine/vehicles/Boat.cpp
+++ b/src/engine/vehicles/Boat.cpp
@@ -39,10 +39,6 @@ ABoat::ABoat(f32 speed, u32 waypoint) {
Velocity[1] = 0.0f;
Velocity[2] = 0.0f;
- _count++;
-}
-
-void ABoat::Spawn() {
Vec3s paddleWheelBoatRot;
if (IsActive == 1) {
f32 origXPos = Position[0];
@@ -56,10 +52,18 @@ void ABoat::Spawn() {
ActorIndex = add_actor_to_empty_slot(Position, paddleWheelBoatRot,
Velocity, ACTOR_PADDLE_BOAT);
}
+
+ _count++;
+}
+
+void ABoat::Draw(Camera* camera) {
+
+}
+
+bool ABoat::IsMod() {
+ return true;
}
-void ABoat::BeginPlay() {}
-void ABoat::Draw(s32 playerId) {}
void ABoat::Tick() {
Path2D* waypoint;
struct Actor* paddleBoatActor;
@@ -159,7 +163,7 @@ void ABoat::Tick() {
}
}
-void ABoat::Collision(s32 playerId, Player* player) {
+void ABoat::VehicleCollision(s32 playerId, Player* player) {
f32 x_diff;
f32 y_diff;
f32 z_diff;
diff --git a/src/engine/vehicles/Boat.h b/src/engine/vehicles/Boat.h
index 4a1e2d124..dcdd89977 100644
--- a/src/engine/vehicles/Boat.h
+++ b/src/engine/vehicles/Boat.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "Vehicle.h"
+#include "Actor.h"
#include <vector>
extern "C" {
@@ -9,9 +9,7 @@ extern "C" {
#include "vehicles.h"
}
-class AVehicle; // Forward declare
-
-class ABoat : public AVehicle {
+class ABoat : public AActor {
public:
const char* Type = "mk:boat";
@@ -40,12 +38,11 @@ class ABoat : public AVehicle {
return _count;
}
- virtual void Spawn() override;
- virtual void BeginPlay() override;
virtual void Tick() override;
- virtual void Draw(s32 playerId) override;
- virtual void Collision(s32 playerId, Player* player) override;
+ virtual void Draw(Camera* camera) override;
+ virtual void VehicleCollision(s32 playerId, Player* player) override;
virtual s32 AddSmoke(size_t, Vec3f, f32);
+ virtual bool IsMod() override;
private:
static size_t _count;
diff --git a/src/engine/vehicles/Bus.cpp b/src/engine/vehicles/Bus.cpp
index c8b81b4c5..43b6e7406 100644
--- a/src/engine/vehicles/Bus.cpp
+++ b/src/engine/vehicles/Bus.cpp
@@ -57,31 +57,29 @@ ABus::ABus(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) {
}
D_801631C8 = 10;
- _count++;
-}
+ spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
+ Speed);
+ ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_SCHOOL_BUS);
-void ABus::Spawn() {
- spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
- Speed);
- ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_SCHOOL_BUS);
+ _count++;
}
-void ABus::BeginPlay() {
-
+bool ABus::IsMod() {
+ return true;
}
-void ABus::Draw(s32 playerId) {
+void ABus::Draw(Camera* camera) {
s32 var_v0;
s32 var_s2;
s32 waypointCount;
u16 temp_a1;
waypointCount = gWaypointCountByPathIndex[0];
- if (!(gPlayers[playerId].unk_094 < 1.6666666666666667)) {
+ if (!(gPlayers[camera->playerId].unk_094 < 1.6666666666666667)) {
temp_a1 = WaypointIndex;
for (var_v0 = 0; var_v0 < 0x18; var_v0 += 3) {
if (((sSomeNearestWaypoint + var_v0) % waypointCount) == temp_a1) {
- D_801634F8[playerId].unk4 = func_800145A8(SomeType, D_80163068[playerId], temp_a1);
+ D_801634F8[camera->playerId].unk4 = func_800145A8(SomeType, D_80163068[camera->playerId], temp_a1);
return;
}
}
@@ -153,7 +151,7 @@ void ABus::Tick() {
vehicleActor->velocity[2] = Velocity[2];
}
-void ABus::Collision(s32 playerId, Player* player) {
+void ABus::VehicleCollision(s32 playerId, Player* player) {
f32 temp_f12;
f32 temp_f14;
f32 temp_f22;
diff --git a/src/engine/vehicles/Bus.h b/src/engine/vehicles/Bus.h
index a7ba3d3e5..c7f3f475e 100644
--- a/src/engine/vehicles/Bus.h
+++ b/src/engine/vehicles/Bus.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "Vehicle.h"
+#include "Actor.h"
#include <vector>
extern "C" {
@@ -11,9 +11,7 @@ extern "C" {
#include "sounds.h"
}
-class AVehicle; // Forward declare
-
-class ABus : public AVehicle {
+class ABus : public AActor {
public:
const char* Type;
@@ -43,11 +41,10 @@ class ABus : public AVehicle {
return _count;
}
- virtual void Spawn() override;
- virtual void BeginPlay() override;
virtual void Tick() override;
- virtual void Draw(s32 playerId) override;
- virtual void Collision(s32 playerId, Player* player) override;
+ virtual void Draw(Camera* camera) override;
+ virtual void VehicleCollision(s32 playerId, Player* player) override;
+ virtual bool IsMod() override;
private:
static size_t _count;
diff --git a/src/engine/vehicles/Car.cpp b/src/engine/vehicles/Car.cpp
index 8f8d24d1f..a5dd49007 100644
--- a/src/engine/vehicles/Car.cpp
+++ b/src/engine/vehicles/Car.cpp
@@ -57,17 +57,15 @@ ACar::ACar(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) {
}
D_801631C8 = 10;
- _count++;
-}
-
-void ACar::Spawn() {
spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
Speed);
ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_CAR);
-}
-void ACar::BeginPlay() {
+ _count++;
+}
+bool ACar::IsMod() {
+ return true;
}
void ACar::Tick() {
@@ -135,25 +133,25 @@ void ACar::Tick() {
vehicleActor->velocity[2] = Velocity[2];
}
-void ACar::Draw(s32 playerId) {
+void ACar::Draw(Camera* camera) {
s32 var_v0;
s32 var_s2;
s32 waypointCount;
u16 temp_a1;
waypointCount = gWaypointCountByPathIndex[0];
- if (!(gPlayers[playerId].unk_094 < 1.6666666666666667)) {
+ if (!(gPlayers[camera->playerId].unk_094 < 1.6666666666666667)) {
temp_a1 = WaypointIndex;
for (var_v0 = 0; var_v0 < 0x18; var_v0 += 3) {
if (((sSomeNearestWaypoint + var_v0) % waypointCount) == temp_a1) {
- D_801634F8[playerId].unk4 = func_800145A8(SomeType, D_80163068[playerId], temp_a1);
+ D_801634F8[camera->playerId].unk4 = func_800145A8(SomeType, D_80163068[camera->playerId], temp_a1);
return;
}
}
}
}
-void ACar::Collision(s32 playerId, Player* player) {
+void ACar::VehicleCollision(s32 playerId, Player* player) {
f32 temp_f12;
f32 temp_f14;
f32 temp_f22;
diff --git a/src/engine/vehicles/Car.h b/src/engine/vehicles/Car.h
index 6613e4c56..97bd47e2e 100644
--- a/src/engine/vehicles/Car.h
+++ b/src/engine/vehicles/Car.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "Vehicle.h"
+#include "Actor.h"
#include <vector>
extern "C" {
@@ -11,9 +11,7 @@ extern "C" {
#include "sounds.h"
}
-class AVehicle; // Forward declare
-
-class ACar : public AVehicle {
+class ACar : public AActor {
public:
explicit ACar(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint);
@@ -43,11 +41,10 @@ class ACar : public AVehicle {
f32 SomeArg4 = 8.5f;
u32 SoundBits = SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x05);
- virtual void Spawn() override;
- virtual void BeginPlay() override;
virtual void Tick() override;
- virtual void Draw(s32 playerId) override;
- virtual void Collision(s32 playerId, Player* player) override;
+ virtual void Draw(Camera*) override;
+ virtual void VehicleCollision(s32 playerId, Player* player) override;
+ virtual bool IsMod() override;
private:
static size_t _count;
}; \ No newline at end of file
diff --git a/src/engine/vehicles/TankerTruck.cpp b/src/engine/vehicles/TankerTruck.cpp
index 2c32d5bd6..a6b94429f 100644
--- a/src/engine/vehicles/TankerTruck.cpp
+++ b/src/engine/vehicles/TankerTruck.cpp
@@ -57,31 +57,29 @@ ATankerTruck::ATankerTruck(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t
}
D_801631C8 = 10;
- _count++;
-}
+ spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
+ Speed);
+ ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_TANKER_TRUCK);
-void ATankerTruck::Spawn() {
- spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
- Speed);
- ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_TANKER_TRUCK);
+ _count++;
}
-void ATankerTruck::BeginPlay() {
-
+bool ATankerTruck::IsMod() {
+ return true;
}
-void ATankerTruck::Draw(s32 playerId) {
+void ATankerTruck::Draw(Camera* camera) {
s32 var_v0;
s32 var_s2;
s32 waypointCount;
u16 temp_a1;
waypointCount = gWaypointCountByPathIndex[0];
- if (!(gPlayers[playerId].unk_094 < 1.6666666666666667)) {
+ if (!(gPlayers[camera->playerId].unk_094 < 1.6666666666666667)) {
temp_a1 = WaypointIndex;
for (var_v0 = 0; var_v0 < 0x18; var_v0 += 3) {
if (((sSomeNearestWaypoint + var_v0) % waypointCount) == temp_a1) {
- D_801634F8[playerId].unk4 = func_800145A8(SomeType, D_80163068[playerId], temp_a1);
+ D_801634F8[camera->playerId].unk4 = func_800145A8(SomeType, D_80163068[camera->playerId], temp_a1);
return;
}
}
@@ -153,7 +151,7 @@ void ATankerTruck::Tick() {
vehicleActor->velocity[2] = Velocity[2];
}
-void ATankerTruck::Collision(s32 playerId, Player* player) {
+void ATankerTruck::VehicleCollision(s32 playerId, Player* player) {
f32 temp_f12;
f32 temp_f14;
f32 temp_f22;
diff --git a/src/engine/vehicles/TankerTruck.h b/src/engine/vehicles/TankerTruck.h
index fdf838d99..e109115a9 100644
--- a/src/engine/vehicles/TankerTruck.h
+++ b/src/engine/vehicles/TankerTruck.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "Vehicle.h"
+#include "Actor.h"
#include <vector>
extern "C" {
@@ -11,9 +11,7 @@ extern "C" {
#include "sounds.h"
}
-class AVehicle; // Forward declare
-
-class ATankerTruck : public AVehicle {
+class ATankerTruck : public AActor {
public:
const char* Type;
@@ -43,11 +41,10 @@ class ATankerTruck : public AVehicle {
return _count;
}
- virtual void Spawn() override;
- virtual void BeginPlay() override;
virtual void Tick() override;
- virtual void Draw(s32 playerId) override;
- virtual void Collision(s32 playerId, Player* player) override;
+ virtual void Draw(Camera* camera) override;
+ virtual void VehicleCollision(s32 playerId, Player* player) override;
+ virtual bool IsMod() override;
private:
static size_t _count;
diff --git a/src/engine/vehicles/Train.cpp b/src/engine/vehicles/Train.cpp
index 0e9af21ed..14d9c9763 100644
--- a/src/engine/vehicles/Train.cpp
+++ b/src/engine/vehicles/Train.cpp
@@ -76,10 +76,6 @@ ATrain::ATrain(ATrain::TenderStatus tender, size_t numCarriages, f32 speed, uint
AnotherSmokeTimer = 0;
- _count++;
-}
-
-void ATrain::Spawn() {
TrainCarStuff* tempLocomotive;
TrainCarStuff* tempTender;
TrainCarStuff* tempPassengerCar;
@@ -128,9 +124,12 @@ void ATrain::Spawn() {
ACTOR_TRAIN_PASSENGER_CAR);
}
}
+
+ _count++;
}
-void ATrain::BeginPlay() {
+bool ATrain::IsMod() {
+ return true;
}
void ATrain::SyncComponents(TrainCarStuff* trainCar, s16 orientationY) {
@@ -223,7 +222,7 @@ void ATrain::Tick() {
}
}
-void ATrain::Collision(s32 playerId, Player* player) {
+void ATrain::VehicleCollision(s32 playerId, Player* player) {
TrainCarStuff* trainCar;
f32 playerPosX;
f32 playerPosZ;
@@ -274,7 +273,7 @@ void ATrain::Collision(s32 playerId, Player* player) {
}
-void ATrain::Draw(s32 playerId) {
+void ATrain::Draw(Camera* camera) {
}
s32 ATrain::AddSmoke(s32 trainIndex, Vec3f pos, f32 velocity) {
diff --git a/src/engine/vehicles/Train.h b/src/engine/vehicles/Train.h
index e2c1d89f4..b5100586e 100644
--- a/src/engine/vehicles/Train.h
+++ b/src/engine/vehicles/Train.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "Vehicle.h"
+#include "Actor.h"
#include <vector>
extern "C" {
@@ -9,13 +9,11 @@ extern "C" {
#include "vehicles.h"
}
-class AVehicle; // Forward declare
-
/**
* Note that you can only remove the tender if there are no carriages
* @arg waypoint initial waypoint to spawn at.
*/
-class ATrain : public AVehicle {
+class ATrain : public AActor {
public:
enum TenderStatus {
@@ -49,11 +47,10 @@ class ATrain : public AVehicle {
return _count;
}
- virtual void Spawn() override;
- virtual void BeginPlay() override;
virtual void Tick() override;
- virtual void Draw(s32 playerId) override;
- virtual void Collision(s32 playerId, Player* player) override;
+ virtual void Draw(Camera* camera) override;
+ virtual void VehicleCollision(s32 playerId, Player* player) override;
+ virtual bool IsMod() override;
s32 AddSmoke(s32 trainIndex, Vec3f pos, f32 velocity);
void SyncComponents(TrainCarStuff* trainCar, s16 orientationY);
diff --git a/src/engine/vehicles/Truck.cpp b/src/engine/vehicles/Truck.cpp
index c865fed70..68ef87353 100644
--- a/src/engine/vehicles/Truck.cpp
+++ b/src/engine/vehicles/Truck.cpp
@@ -57,48 +57,29 @@ ATruck::ATruck(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) {
}
D_801631C8 = 10;
- _count++;
-}
+ spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
+ Speed);
+ ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_BOX_TRUCK);
-void ATruck::Spawn() {
- spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
- Speed);
- ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_BOX_TRUCK);
- //if (Compare(Dict[Type], "mk:bus")) {
- // spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, Speed);
- // ActorIndex = add_actor_to_empty_slot(Position, Rotation,
- // Velocity, ACTOR_SCHOOL_BUS);
- //}
- // if (Compare(Dict[Type], "mk:tanker")) {
- // spawn_vehicle_on_road(tempTankerTruck);
- // tempTankerTruck->actorIndex =
- // add_actor_to_empty_slot(tempTankerTruck->position, tempTankerTruck->rotation,
- // tempTankerTruck->velocity, ACTOR_TANKER_TRUCK);
- // }
- // if (Compare(Dict[Type], "mk:car")) {
- // tempCar = &gCarList[loopIndex];
- // spawn_vehicle_on_road(tempCar);
- // tempCar->actorIndex =
- // add_actor_to_empty_slot(tempCar->position, tempCar->rotation, tempCar->velocity, ACTOR_CAR);
- // }
+ _count++;
}
-void ATruck::BeginPlay() {
-
+bool ATruck::IsMod() {
+ return true;
}
-void ATruck::Draw(s32 playerId) {
+void ATruck::Draw(Camera* camera) {
s32 var_v0;
s32 var_s2;
s32 waypointCount;
u16 temp_a1;
waypointCount = gWaypointCountByPathIndex[0];
- if (!(gPlayers[playerId].unk_094 < 1.6666666666666667)) {
+ if (!(gPlayers[camera->playerId].unk_094 < 1.6666666666666667)) {
temp_a1 = WaypointIndex;
for (var_v0 = 0; var_v0 < 0x18; var_v0 += 3) {
if (((sSomeNearestWaypoint + var_v0) % waypointCount) == temp_a1) {
- D_801634F8[playerId].unk4 = func_800145A8(SomeType, D_80163068[playerId], temp_a1);
+ D_801634F8[camera->playerId].unk4 = func_800145A8(SomeType, D_80163068[camera->playerId], temp_a1);
return;
}
}
@@ -170,7 +151,7 @@ void ATruck::Tick() {
vehicleActor->velocity[2] = Velocity[2];
}
-void ATruck::Collision(s32 playerId, Player* player) {
+void ATruck::VehicleCollision(s32 playerId, Player* player) {
f32 temp_f12;
f32 temp_f14;
f32 temp_f22;
diff --git a/src/engine/vehicles/Truck.h b/src/engine/vehicles/Truck.h
index f9f65b2fc..c18ce86a5 100644
--- a/src/engine/vehicles/Truck.h
+++ b/src/engine/vehicles/Truck.h
@@ -1,7 +1,7 @@
#pragma once
#include <libultraship.h>
-#include "Vehicle.h"
+#include "Actor.h"
#include <vector>
extern "C" {
@@ -11,9 +11,7 @@ extern "C" {
#include "sounds.h"
}
-class AVehicle; // Forward declare
-
-class ATruck : public AVehicle {
+class ATruck : public AActor {
public:
const char* Type;
@@ -43,11 +41,10 @@ class ATruck : public AVehicle {
return _count;
}
- virtual void Spawn() override;
- virtual void BeginPlay() override;
virtual void Tick() override;
- virtual void Draw(s32 playerId) override;
- virtual void Collision(s32 playerId, Player* player) override;
+ virtual void Draw(Camera* camera) override;
+ virtual void VehicleCollision(s32 playerId, Player* player) override;
+ virtual bool IsMod() override;
private:
static size_t _count;
diff --git a/src/engine/vehicles/Vehicle.cpp b/src/engine/vehicles/Vehicle.cpp
deleted file mode 100644
index 6c0890511..000000000
--- a/src/engine/vehicles/Vehicle.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "Vehicle.h"
-
-
-AVehicle::AVehicle() {}
-
-void AVehicle::Spawn() {
-}
-
-void AVehicle::BeginPlay() {
-}
-
-void AVehicle::Tick() {
-}
-
-void AVehicle::Draw(s32 playerId) {
-}
-
-void AVehicle::Collision(s32 playerId, Player* player) {
-}
diff --git a/src/engine/vehicles/Vehicle.h b/src/engine/vehicles/Vehicle.h
deleted file mode 100644
index 0b79d06aa..000000000
--- a/src/engine/vehicles/Vehicle.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef VEHICLE_H
-#define VEHICLE_H
-
-#include <libultraship.h>
-
-extern "C" {
-#include "common_structs.h"
-}
-
-// Base class
-class AVehicle {
-public:
- virtual ~AVehicle() = default; // Virtual destructor for proper cleanup in derived classes
-
- explicit AVehicle();
-
- const char* Type;
- uint8_t uuid[16];
-
- virtual void Spawn();
- virtual void BeginPlay();
- virtual void Tick();
- virtual void Draw(s32 playerId);
- virtual void Collision(s32 playerId, Player* player);
-};
-
-#endif // VEHICLE_H \ No newline at end of file
diff --git a/src/enhancements/freecam/freecam.cpp b/src/enhancements/freecam/freecam.cpp
index 709cc6f1d..00d8ee84a 100644
--- a/src/enhancements/freecam/freecam.cpp
+++ b/src/enhancements/freecam/freecam.cpp
@@ -23,7 +23,6 @@ extern "C" {
#include "freecam.h"
}
-#include "engine/Engine.h"
#include "engine/courses/Course.h"
typedef struct {
@@ -375,7 +374,7 @@ void freecam_render_setup(void) {
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK | G_CULL_BOTH | G_CULL_FRONT);
guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect,
- CourseManager_GetProps()->NearPersp, CourseManager_GetProps()->FarPersp, 1.0f);
+ CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f);
gSPPerspNormalize(gDisplayListHead++, perspNorm);
gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxPersp[0]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
guLookAt(&gGfxPool->mtxLookAt[0], camera1->pos[0], camera1->pos[1], camera1->pos[2], camera1->lookAt[0],
diff --git a/src/main.c b/src/main.c
index c3484a651..e4e49d155 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,5 +1,5 @@
#ifndef GCC
-#define D_800DC510_AS_U16
+#define gRaceState_AS_U16
#endif
#include <libultraship.h>
#include <libultra/vi.h>
@@ -177,8 +177,8 @@ OSMesg gPIMesgBuf[32];
OSMesgQueue gPIMesgQueue;
s32 gGamestate = 0xFFFF;
-// D_800DC510 is externed as an s32 in other files. D_800DC514 is only used in main.c, likely a developer mistake.
-u16 D_800DC510 = 0;
+// gRaceState is externed as an s32 in other files. D_800DC514 is only used in main.c, likely a developer mistake.
+u16 gRaceState = RACE_INIT;
u16 D_800DC514 = 0;
u16 creditsRenderMode = 0; // Renders the whole track. Displays red if used in normal race mode.
u16 gDemoMode = DEMO_MODE_INACTIVE;
@@ -775,7 +775,7 @@ void process_game_tick(void) {
func_8028F474();
func_80059AC8();
update_course_actors();
- CourseManager_TickActors();
+ CM_TickActors();
func_802966A0();
func_8028FCBC();
}
diff --git a/src/main.h b/src/main.h
index af9b2d6eb..80871e653 100644
--- a/src/main.h
+++ b/src/main.h
@@ -207,13 +207,13 @@ extern OSMesg gPIMesgBuf[];
extern OSMesgQueue gPIMesgQueue;
void race_logic_loop(void);
extern s32 gGamestate;
-#ifndef D_800DC510_AS_U16
+#ifndef gRaceState_AS_U16
// Prevent overlapping writes in gcc
-// Whether D_800DC510 was intended to be a separate variable in main.c from the rest of the game is unknown
+// Whether gRaceState was intended to be a separate variable in main.c from the rest of the game is unknown
#ifdef GCC
-extern u16 D_800DC510;
+extern u16 gRaceState;
#else
-extern s32 D_800DC510;
+extern s32 gRaceState;
#endif
#endif
diff --git a/src/math_util_2.h b/src/math_util_2.h
index a62c9697b..de82c003c 100644
--- a/src/math_util_2.h
+++ b/src/math_util_2.h
@@ -11,7 +11,7 @@
void operator_or(s32*, s32);
void operator_and_not(s32*, s32);
void operator_xor(s32*, s32);
-UNUSED bool func_80040E84(s32*, s32);
+bool func_80040E84(s32*, s32); // UNUSED
s32 func_80040EA4(s32*, s32);
s32 f32_step_up_towards_alternate(f32*, f32, f32*);
s32 f32_step_down_towards_alternate(f32*, f32, f32*);
diff --git a/src/menu_items.c b/src/menu_items.c
index 1cba05399..81638f217 100644
--- a/src/menu_items.c
+++ b/src/menu_items.c
@@ -44,7 +44,6 @@
#include "port/Engine.h"
#include "port/Game.h"
-#include "engine/Engine.h"
#include "engine/courses/Course.h"
#include "engine/Matrix.h"
@@ -2502,8 +2501,6 @@ void setup_menus(void) {
}
}
-CProperties* GetCoursePropsA(void);
-
void func_80095574(void) {
s32 var_v0;
@@ -2551,7 +2548,7 @@ void func_80095574(void) {
} else {
var_v0 = 8;
}
- debug_print_str2(var_v0 + 0xB9, 0x0000006E, GetCoursePropsA()->DebugName);
+ debug_print_str2(var_v0 + 0xB9, 0x0000006E, CM_GetProps()->DebugName);
debug_print_str2(80, 120, "cc_mode");
debug_print_str2(170, 120, gDebugCCModeNames[gCCSelection]);
@@ -4924,7 +4921,7 @@ void func_8009CE64(s32 arg0) {
switch (gNextDemoId) { /* switch 4 */
case 0: /* switch 4 */
SetCourseByClass(GetMarioRaceway());
- CourseManager_SetCup(GetFlowerCup());
+ CM_SetCup(GetFlowerCup());
SetCupCursorPosition(COURSE_FOUR);
gCurrentCourseId = 0;
gScreenModeSelection = 0;
@@ -4935,7 +4932,7 @@ void func_8009CE64(s32 arg0) {
break;
case 1: /* switch 4 */
SetCourseByClass(GetLuigiRaceway());
- CourseManager_SetCup(GetMushroomCup());
+ CM_SetCup(GetMushroomCup());
SetCupCursorPosition(COURSE_ONE);
gCurrentCourseId = (s16) 1;
gScreenModeSelection = (s32) 1;
@@ -4947,7 +4944,7 @@ void func_8009CE64(s32 arg0) {
break;
case 2: /* switch 4 */
SetCourseByClass(GetKalimariDesert());
- CourseManager_SetCup(GetMushroomCup());
+ CM_SetCup(GetMushroomCup());
SetCupCursorPosition(COURSE_FOUR);
gCurrentCourseId = COURSE_KALIMARI_DESERT;
gScreenModeSelection = 0;
@@ -4958,7 +4955,7 @@ void func_8009CE64(s32 arg0) {
break;
case 3: /* switch 4 */
SetCourseByClass(GetWarioStadium());
- CourseManager_SetCup(GetStarCup());
+ CM_SetCup(GetStarCup());
SetCupCursorPosition(COURSE_ONE);
gCurrentCourseId = 0x000E;
gScreenModeSelection = 3;
@@ -4971,7 +4968,7 @@ void func_8009CE64(s32 arg0) {
break;
case 4: /* switch 4 */
SetCourseByClass(GetBowsersCastle());
- CourseManager_SetCup(GetStarCup());
+ CM_SetCup(GetStarCup());
SetCupCursorPosition(COURSE_FOUR);
gCurrentCourseId = 2;
gScreenModeSelection = 0;
@@ -4982,7 +4979,7 @@ void func_8009CE64(s32 arg0) {
break;
case 5: /* switch 4 */
SetCourseByClass(GetSherbetLand());
- CourseManager_SetCup(GetFlowerCup());
+ CM_SetCup(GetFlowerCup());
SetCupCursorPosition(COURSE_TWO);
gCurrentCourseId = 0x000C;
gScreenModeSelection = 3;
@@ -6009,11 +6006,11 @@ void render_menus(MenuItem* arg0) {
}
break;
case MENU_ITEM_UI_START_RECORD_TIME:
- var_t0 = (s32) ((f32) (get_string_width(CourseManager_GetProps()->Name) + 5) * 0.9f) / 2;
+ var_t0 = (s32) ((f32) (get_string_width(CM_GetProps()->Name) + 5) * 0.9f) / 2;
gDisplayListHead = draw_box(gDisplayListHead, 0xA0 - var_t0, 0x0000007B, var_t0 + 0xA0, 0x000000A4, 0,
0, 0, 0x00000096);
set_text_color(TEXT_GREEN);
- print_text1_center_mode_1(0x0000009B, 0x0000008C, CourseManager_GetProps()->Name, 0, 0.9f, 0.9f);
+ print_text1_center_mode_1(0x0000009B, 0x0000008C, CM_GetProps()->Name, 0, 0.9f, 0.9f);
temp_v1 = func_800B4EB4(0, 7) & 0xFFFFF;
if (temp_v1 < 0x1EAA) {
set_text_color((s32) gGlobalTimer % 2);
@@ -6316,7 +6313,7 @@ void render_menus(MenuItem* arg0) {
break;
case MENU_ITEM_TYPE_097:
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_2);
- print_text_mode_1(arg0->column, arg0->row, CourseManager_GetProps()->Name, arg0->param1, arg0->paramf,
+ print_text_mode_1(arg0->column, arg0->row, CM_GetProps()->Name, arg0->param1, arg0->paramf,
1.0f);
break;
case MENU_ITEM_TYPE_098:
@@ -6827,12 +6824,12 @@ void render_menu_item_data_course_info(MenuItem* arg0) {
arg0->column = 0x14;
// name of the course
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1);
- print_text1_center_mode_1(0x69, arg0->row + 0x19, CourseManager_GetProps()->Name, 0, 0.75f, 0.75f);
+ print_text1_center_mode_1(0x69, arg0->row + 0x19, CM_GetProps()->Name, 0, 0.75f, 0.75f);
// distance
set_text_color(TEXT_RED);
print_text_mode_1(0x2D, arg0->row + 0x28, (char*) &gTextDistance, 0, 0.75f, 0.75f);
- print_text1_left(0xA5, arg0->row + 0x28, CourseManager_GetProps()->CourseLength, 1, 0.75f, 0.75f);
+ print_text1_left(0xA5, arg0->row + 0x28, CM_GetProps()->CourseLength, 1, 0.75f, 0.75f);
// Best lap record
set_text_color(TEXT_YELLOW);
@@ -7076,7 +7073,7 @@ void func_800A1FB0(MenuItem* arg0) {
print_text_mode_1(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E7A44, 0, 0.5f, 0.5f);
} else {
print_text_mode_1(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2),
- CourseManager_GetProps()->Name, 0, 0.5f, 0.5f);
+ CM_GetProps()->Name, 0, 0.5f, 0.5f);
}
}
}
@@ -7113,7 +7110,7 @@ void func_800A1FB0(MenuItem* arg0) {
print_text_mode_1(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E7A44, 0, 0.5f, 0.5f);
} else {
print_text_mode_1(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2),
- CourseManager_GetProps()->Name, 0, 0.5f, 0.5f);
+ CM_GetProps()->Name, 0, 0.5f, 0.5f);
}
}
}
@@ -7163,7 +7160,7 @@ void func_800A1FB0(MenuItem* arg0) {
print_text_mode_1(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E7A44, 0, 0.5f, 0.5f);
} else {
print_text_mode_1(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2),
- CourseManager_GetProps()->Name, 0, 0.5f, 0.5f);
+ CM_GetProps()->Name, 0, 0.5f, 0.5f);
}
}
}
@@ -7454,7 +7451,7 @@ void time_trials_finish_text_render(MenuItem* arg0) {
s32 rowOffset;
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1);
- print_text1_center_mode_1(arg0->column + 0x43, arg0->row + 0x19, CourseManager_GetProps()->Name, 0, 0.6f, 0.6f);
+ print_text1_center_mode_1(arg0->column + 0x43, arg0->row + 0x19, CM_GetProps()->Name, 0, 0.6f, 0.6f);
set_text_color(TEXT_YELLOW);
print_text1_center_mode_1(arg0->column + 0x46, arg0->row + 0x28, gLapTimeText, 0, 0.75f, 0.75f);
for (recordType = 0, rowOffset = 0; recordType < TIME_TRIAL_3LAP_RECORD_5; recordType += 1, rowOffset += 0xF) {
@@ -7493,7 +7490,7 @@ void func_800A3E60(MenuItem* arg0) {
}
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1);
- print_text1_center_mode_1(arg0->column + 0x55, 0x19 - arg0->row, CourseManager_GetProps()->Name, 0, 0.6f, 0.6f);
+ print_text1_center_mode_1(arg0->column + 0x55, 0x19 - arg0->row, CM_GetProps()->Name, 0, 0.6f, 0.6f);
set_text_color(TEXT_YELLOW);
print_text1_center_mode_1(arg0->column + 0x55, 0x28 - arg0->row, gLapTimeText, 0, 0.75f, 0.75f);
for (var_s1 = 0; var_s1 < 4; var_s1++) {
@@ -7559,7 +7556,7 @@ void func_800A3E60(MenuItem* arg0) {
if (D_8018EE10[var_s1].ghostDataSaved == 0) {
print_text_mode_1(0xBB - arg0->column, 0xAA + (0x1E * var_s1), D_800E7A44, 0, 0.45f, 0.45f);
} else {
- print_text_mode_1(0xBB - arg0->column, 0xAA + (0x1E * var_s1), CourseManager_GetProps()->Name, 0,
+ print_text_mode_1(0xBB - arg0->column, 0xAA + (0x1E * var_s1), CM_GetProps()->Name, 0,
0.45f, 0.45f);
}
}
@@ -7781,7 +7778,7 @@ void render_pause_menu_time_trials(MenuItem* arg0) {
gDisplayListHead = draw_box_wide(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, 0x0000008C);
set_text_color(TEXT_YELLOW);
- print_text1_center_mode_1(0x000000A0, 0x00000050, CourseManager_GetProps()->Name, 0, 1.0f, 1.0f);
+ print_text1_center_mode_1(0x000000A0, 0x00000050, CM_GetProps()->Name, 0, 1.0f, 1.0f);
set_text_color(TEXT_RED);
print_text1_center_mode_1(0x0000009D, 0x00000060, gBestTimeText[0], 0, 0.8f, 0.8f);
temp_a0 = func_800B4E24(TIME_TRIAL_3LAP_RECORD_1);
@@ -7923,7 +7920,7 @@ void render_pause_grand_prix(MenuItem* arg0) {
set_text_color(TEXT_YELLOW);
print_text1_center_mode_1(160 + temp_s0, temp_s3->row - 50, D_800E76CC[gCCSelection], 0, 1.0f, 1.0f);
set_text_color(TEXT_YELLOW);
- print_text1_center_mode_1(160, temp_s3->row - 30, CourseManager_GetProps()->Name, 0, 1.0f, 1.0f);
+ print_text1_center_mode_1(160, temp_s3->row - 30, CM_GetProps()->Name, 0, 1.0f, 1.0f);
for (var_s0 = 0; var_s0 < 2; var_s0++) {
text_rainbow_effect(arg0->state - 31, var_s0, TEXT_YELLOW);
print_text_mode_1(temp_s3->column, temp_s3->row + (var_s0 * 13), gTextPauseButton[var_s0 * 4], 0, 0.75f, 0.75f);
@@ -8068,7 +8065,7 @@ void render_menu_item_end_course_option(MenuItem* arg0) {
gDisplayListHead = draw_box_wide(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, var_s1);
gDPSetPrimColor(gDisplayListHead++, 0, 0, 0x00, 0x00, 0x00, var_s2);
set_text_color(TEXT_YELLOW);
- print_text1_center_mode_2(0x000000A0, 0x00000050, CourseManager_GetProps()->Name, 0, 1.0f, 1.0f);
+ print_text1_center_mode_2(0x000000A0, 0x00000050, CM_GetProps()->Name, 0, 1.0f, 1.0f);
switch (arg0->state) {
case 1:
case 11:
@@ -8132,7 +8129,7 @@ void render_menu_item_end_course_option(MenuItem* arg0) {
if (D_8018EE10[var_s1].ghostDataSaved == 0) {
print_text_mode_1(0x69 - arg0->column, (0x96 + (0x14 * var_s1)), D_800E7A44, 0, 0.75f, 0.75f);
} else {
- print_text_mode_1(0x69 - arg0->column, (0x96 + (0x14 * var_s1)), CourseManager_GetProps()->Name,
+ print_text_mode_1(0x69 - arg0->column, (0x96 + (0x14 * var_s1)), CM_GetProps()->Name,
0, 0.75f, 0.75f);
}
}
@@ -8202,7 +8199,7 @@ void func_800A6034(MenuItem* arg0) {
text = gCupNames[D_800DC540];
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_2);
print_text1_center_mode_2(arg0->column + 0x41, arg0->row + 0xA0, text, 0, 0.85f, 1.0f);
- text = CourseManager_GetProps()->Name;
+ text = CM_GetProps()->Name;
set_text_color((s32) gCurrentCourseId % 4);
print_text1_center_mode_2(arg0->column + 0x41, arg0->row + 0xC3, text, 0, 0.65f, 0.85f);
}
@@ -10823,7 +10820,7 @@ void func_800ABF68(MenuItem* arg0) {
case 0:
arg0->column = 0x140;
arg0->state = 1;
- arg0->param2 = 0xA0 - (get_string_width(CourseManager_GetProps()->Name) / 2);
+ arg0->param2 = 0xA0 - (get_string_width(CM_GetProps()->Name) / 2);
/* fallthrough */
case 1:
func_800A9208(arg0, arg0->param2);
diff --git a/src/menus.c b/src/menus.c
index 11fd21c97..746809480 100644
--- a/src/menus.c
+++ b/src/menus.c
@@ -1885,7 +1885,7 @@ void load_menu_states(s32 menuSelection) {
case START_MENU: {
gIsMirrorMode = 0;
gEnableDebugMode = CVarGetInteger("gEnableDebugMode", 0);
- CourseManager_SetCup(GetMushroomCup());
+ CM_SetCup(GetMushroomCup());
gCupSelection = MUSHROOM_CUP;
gCourseIndexInCup = 0;
gTimeTrialDataCourseIndex = 0;
@@ -1996,13 +1996,13 @@ void load_menu_states(s32 menuSelection) {
case 3:
case COURSE_SELECT_MENU: {
if (gModeSelection == BATTLE) {
- CourseManager_SetCup(GetBattleCup());
+ CM_SetCup(GetBattleCup());
// gCupSelection = BATTLE_CUP;
D_800DC540 = 4;
gSubMenuSelection = SUB_MENU_MAP_SELECT_BATTLE_COURSE;
} else {
if (GetCup() == GetBattleCup()) {
- CourseManager_SetCup(GetMushroomCup());
+ CM_SetCup(GetMushroomCup());
// gCupSelection = MUSHROOM_CUP;
}
gSubMenuSelection = SUB_MENU_MAP_SELECT_CUP;
diff --git a/src/player_controller.c b/src/player_controller.c
index 6c72935d1..fa0d53c13 100644
--- a/src/player_controller.c
+++ b/src/player_controller.c
@@ -249,7 +249,7 @@ void func_80027EDC(Player* player, s8 playerId) {
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) &&
((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
- CourseManager_WhatDoesThisDo(player, playerId);
+ CM_WhatDoesThisDo(player, playerId);
// switch (gCurrentCourseId) {
// // case COURSE_MARIO_RACEWAY:
@@ -383,7 +383,7 @@ void func_80027EDC(Player* player, s8 playerId) {
// }
} else {
- CourseManager_WhatDoesThisDoAI(player, playerId);
+ CM_WhatDoesThisDoAI(player, playerId);
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
@@ -585,7 +585,7 @@ void func_80028C44(Player* player, Camera* camera, s8 playerId, s8 screenId) {
}
void func_80028D3C(Player* player, Camera* camera, s8 playerId, s8 screenId) {
- if ((((player->type & PLAYER_START_SEQUENCE) == 0) && (D_800DC510 != 5)) || (player->unk_0CA & 2) != 0 ||
+ if ((((player->type & PLAYER_START_SEQUENCE) == 0) && (gRaceState != RACE_FINISHED)) || (player->unk_0CA & 2) != 0 ||
(player->unk_0CA & 8) != 0 || (player->effects & 0x4F010CC0) != 0) {
player->effects &= ~0x1000;
@@ -1974,7 +1974,7 @@ void apply_effect(Player* player, s8 arg1, s8 arg2) {
func_8008D8B4(player, arg1);
decelerate_ai_player(player, 10.0f);
}
- if (D_800DC510 != 5) {
+ if (gRaceState != RACE_FINISHED) {
if (player->soundEffects & 0x04000000) {
func_8008FC64(player, arg1);
}
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()) {
diff --git a/src/port/Game.h b/src/port/Game.h
index ba4e1d359..832cfc10d 100644
--- a/src/port/Game.h
+++ b/src/port/Game.h
@@ -2,14 +2,20 @@
#define _GAME_H
#include <libultraship.h>
-#include "engine/Engine.h"
+#include "engine/courses/Course.h"
#ifdef __cplusplus
+class Course;
extern "C" {
-#include "camera.h"
#endif
+#include "camera.h"
#include "actor_types.h"
+Properties* CM_GetProps();
+
+void CM_DisplayBattleBombKart(s32 playerId, s32 primAlpha);
+void CM_DrawBattleBombKarts(s32 cameraId);
+
u32 WorldNextCup(void);
u32 WorldPreviousCup(void);
@@ -20,8 +26,6 @@ const char* GetCupName(void);
void LoadCourse();
-CProperties* GetCoursePropsA();
-
size_t GetCourseIndex();
void SetCourse(const char* name);
@@ -29,19 +33,13 @@ void SetCourse(const char* name);
void NextCourse();
void PreviousCourse();
-void CourseManager_SetCup(void*);
-
-void CourseManager_SpawnVehicles();
-
-void CourseManager_UpdateVehicles();
-
-void CourseManager_LoadTextures();
+void CM_SetCup(void*);
-void CourseManager_RenderCourse(struct UnkStruct_800DC5EC* arg0);
+void CM_LoadTextures();
-void CourseManager_RenderCredits();
+void CM_RenderCourse(struct UnkStruct_800DC5EC* arg0);
-void CourseManager_SpawnActors();
+void CM_RenderCredits();
void CM_SpawnStarterLakitu();
void CM_ActivateFinishLakitu(s32 playerId);
@@ -49,83 +47,67 @@ void CM_ActivateSecondLapLakitu(s32 playerId);
void CM_ActivateFinalLapLakitu(s32 playerId);
void CM_ActivateReverseLakitu(s32 playerId);
-bool cm_DoesFinishlineExist();
+bool CM_DoesFinishlineExist();
-void CourseManager_InitClouds();
+void CM_InitClouds();
-void CourseManager_DrawActors(Camera* camera, struct Actor* actor);
+void CM_DrawActors(Camera* camera, struct Actor* actor);
-void CourseManager_TickObjects();
-void CourseManager_TickObjects60fps();
-void CourseManager_DrawObjects(s32 cameraId);
+void CM_TickObjects();
+void CM_TickObjects60fps();
+void CM_DrawObjects(s32 cameraId);
void CM_TickParticles(void);
void CM_DrawParticles(s32 cameraId);
-void CourseManager_UpdateClouds(s32 arg0, Camera* camera);
+void CM_UpdateClouds(s32 arg0, Camera* camera);
-void CourseManager_Waypoints(Player* player, int8_t playerId);
+void CM_Waypoints(Player* player, int8_t 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);
-void CourseManager_MinimapSettings();
-
-void CourseManager_InitCourseObjects();
-
-void CourseManager_UpdateCourseObjects();
-
-void CourseManager_RenderCourseObjects(s32 cameraId);
-
-void CourseManager_SomeSounds();
-
-void CourseManager_CreditsSpawnActors();
-
-void CourseManager_WhatDoesThisDo(Player* player, int8_t playerId);
-
-void CourseManager_WhatDoesThisDoAI(Player* player, int8_t playerId);
-
-void CourseManager_MinimapFinishlinePosition();
+void CM_MinimapSettings();
-void CourseManager_SetStaffGhost();
+void CM_InitCourseObjects();
-CProperties* CourseManager_GetProps();
+void CM_UpdateCourseObjects();
-void CourseManager_SpawnBombKarts();
+void CM_RenderCourseObjects(s32 cameraId);
-void CourseManager_BombKartsWaypoint(s32 cameraId);
+void CM_SomeSounds();
-void CourseManager_ScrollingTextures();
+void CM_CreditsSpawnActors();
-s32 CourseManager_GetCrossingOnTriggered(uintptr_t* crossing);
+void CM_WhatDoesThisDo(Player* player, int8_t playerId);
-void CourseManager_VehiclesSpawn();
+void CM_WhatDoesThisDoAI(Player* player, int8_t playerId);
-void CourseManager_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection);
+void CM_MinimapFinishlinePosition();
-void CourseManager_AICrossingBehaviour(s32 playerId);
+void CM_SetStaffGhost();
-void CourseManager_ClearVehicles(void);
+void CM_BombKartsWaypoint(s32 cameraId);
-void CourseManager_DrawVehicles(s32 playerId);
+void CM_ScrollingTextures();
-void CourseManager_CrossingTrigger();
+s32 CM_GetCrossingOnTriggered(uintptr_t* crossing);
-void CourseManager_VehiclesCollision(s32 playerId, Player* player);
+void CM_BeginPlay();
-void CourseManager_VehiclesTick();
+void CM_DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection);
-void CourseManager_TickBombKarts();
+void CM_AICrossingBehaviour(s32 playerId);
-void CourseManager_TickActors();
+void CM_ClearVehicles(void);
-void CourseManager_TrainSmokeTick(void);
+void CM_CrossingTrigger();
-void CourseManager_DrawBattleBombKarts(s32 cameraId);
+void CM_VehicleCollision(s32 playerId, Player* player);
-void CourseManager_DrawBombKarts(s32 cameraId);
+void CM_TickActors();
-void CourseManager_TrainSmokeDraw(s32 cameraId);
+void CM_DrawBombKarts(s32 cameraId);
size_t GetCupCursorPosition();
@@ -141,12 +123,12 @@ void SetCourseById(s32 course);
void SetCourseByClass(void* course);
-struct Actor* m_GetActor(size_t index);
-void m_DeleteActor(size_t index);
-struct Actor* m_AddBaseActor(void);
-size_t m_GetActorSize();
-size_t m_FindActorIndex(struct Actor* actor);
-void m_ActorCollision(Player* player, struct Actor* actor);
+struct Actor* CM_GetActor(size_t index);
+void CM_DeleteActor(size_t index);
+struct Actor* CM_AddBaseActor(void);
+size_t CM_GetActorSize();
+size_t CM_FindActorIndex(struct Actor* actor);
+void CM_ActorCollision(Player* player, struct Actor* actor);
void CM_CleanWorld(void);
void* GetMarioRaceway(void);
diff --git a/src/racing/actors.c b/src/racing/actors.c
index caf623554..4b586cf75 100644
--- a/src/racing/actors.c
+++ b/src/racing/actors.c
@@ -55,7 +55,7 @@ void cleanup_red_and_green_shells(struct ShellActor* shell) {
// try finding the dead green shell
for (actorIndex = gNumPermanentActors; actorIndex < ACTOR_LIST_SIZE; actorIndex++) {
- compare = (struct ShellActor*) m_GetActor(actorIndex);
+ compare = (struct ShellActor*) CM_GetActor(actorIndex);
if ((shell != compare) && !(compare->flags & ACTOR_IS_NOT_EXPIRED) && (compare->type == ACTOR_GREEN_SHELL)) {
if (compare->state == MOVING_SHELL) {
delete_actor_in_unexpired_actor_list(actorIndex);
@@ -68,7 +68,7 @@ void cleanup_red_and_green_shells(struct ShellActor* shell) {
// try finding the dead red shell
for (actorIndex = gNumPermanentActors; actorIndex < ACTOR_LIST_SIZE; actorIndex++) {
- compare = (struct ShellActor*) m_GetActor(actorIndex);
+ compare = (struct ShellActor*) CM_GetActor(actorIndex);
if ((shell != compare) && !(compare->flags & ACTOR_IS_NOT_EXPIRED) && (compare->type == ACTOR_RED_SHELL)) {
switch (compare->state) {
case MOVING_SHELL:
@@ -90,7 +90,7 @@ void cleanup_red_and_green_shells(struct ShellActor* shell) {
// try finding the green shell
for (actorIndex = gNumPermanentActors; actorIndex < ACTOR_LIST_SIZE; actorIndex++) {
- compare = (struct ShellActor*) m_GetActor(actorIndex);
+ compare = (struct ShellActor*) CM_GetActor(actorIndex);
if ((shell != compare) && (compare->type == ACTOR_GREEN_SHELL)) {
switch (compare->state) {
case MOVING_SHELL:
@@ -105,7 +105,7 @@ void cleanup_red_and_green_shells(struct ShellActor* shell) {
// try finding the red or blue shell
for (actorIndex = gNumPermanentActors; actorIndex < ACTOR_LIST_SIZE; actorIndex++) {
- compare = (struct ShellActor*) m_GetActor(actorIndex);
+ compare = (struct ShellActor*) CM_GetActor(actorIndex);
if ((shell != compare) && (compare->type == ACTOR_RED_SHELL)) {
switch (compare->state) {
case MOVING_SHELL:
@@ -838,7 +838,7 @@ void spawn_piranha_plants(struct ActorSpawnData* spawnData) {
startingPos[1] = temp_s0->pos[1];
startingPos[2] = temp_s0->pos[2];
temp = add_actor_to_empty_slot(startingPos, startingRot, startingVelocity, ACTOR_PIRANHA_PLANT);
- temp_v1 = (struct PiranhaPlant*) m_GetActor(temp);
+ temp_v1 = (struct PiranhaPlant*) CM_GetActor(temp);
temp_v1->visibilityStates[0] = 0;
temp_v1->visibilityStates[1] = 0;
temp_v1->visibilityStates[2] = 0;
@@ -867,7 +867,7 @@ void spawn_palm_trees(struct ActorSpawnData* spawnData) {
startingPos[1] = temp_s0->pos[1];
startingPos[2] = temp_s0->pos[2];
temp = add_actor_to_empty_slot(startingPos, startingRot, startingVelocity, ACTOR_PALM_TREE);
- temp_v1 = (struct PalmTree*) m_GetActor(temp);
+ temp_v1 = (struct PalmTree*) CM_GetActor(temp);
temp_v1->variant = temp_s0->someId;
check_bounding_collision((Collision*) &temp_v1->unk30, 5.0f, temp_v1->pos[0], temp_v1->pos[1], temp_v1->pos[2]);
@@ -934,7 +934,7 @@ void spawn_foliage(struct ActorSpawnData* actor) {
}
}
- temp_s0 = m_GetActor(add_actor_to_empty_slot(position, rotation, velocity, actorType));
+ temp_s0 = CM_GetActor(add_actor_to_empty_slot(position, rotation, velocity, actorType));
if (gGamestate == CREDITS_SEQUENCE) {
func_802976D8(temp_s0->rot);
} else {
@@ -977,13 +977,13 @@ void spawn_all_item_boxes(struct ActorSpawnData* spawnData) {
// It's either the ItemBox or the SEGMENT/OFFSET variables.
// itemBox = (struct ItemBox *) GET_ACTOR(temp_s1);
- m_GetActor(temp_s1)->unk_08 = temp_f0;
+ CM_GetActor(temp_s1)->unk_08 = temp_f0;
// itemBox->resetDistance = temp_f0;
- m_GetActor(temp_s1)->velocity[0] = startingPos[1];
+ CM_GetActor(temp_s1)->velocity[0] = startingPos[1];
// itemBox->origY = startingPos[1];
- m_GetActor(temp_s1)->pos[1] = temp_f0 - 20.0f;
+ CM_GetActor(temp_s1)->pos[1] = temp_f0 - 20.0f;
// itemBox->pos[1] = temp_f0 - 20.0f;
temp_s0++;
@@ -1011,7 +1011,7 @@ void init_kiwano_fruit(void) {
}
phi_s0 = add_actor_to_empty_slot(sp64, sp50, sp58, ACTOR_KIWANO_FRUIT);
- actor = m_GetActor(phi_s0);
+ actor = CM_GetActor(phi_s0);
actor->unk_04 = i;
}
}
@@ -1025,7 +1025,7 @@ void destroy_all_actors(void) {
s32 i;
gNumActors = 0;
for (i = 0; i < ACTOR_LIST_SIZE; i++) {
- struct Actor* actor = m_GetActor(i);
+ struct Actor* actor = CM_GetActor(i);
actor->flags = 0;
actor->type = 0;
actor->unk_04 = 0;
@@ -1044,12 +1044,11 @@ void spawn_course_actors(void) {
struct RailroadCrossing* rrxing;
gNumPermanentActors = 0;
- CourseManager_SpawnActors();
if (gModeSelection != BATTLE) {
- if (!cm_DoesFinishlineExist()) {
+ if (!CM_DoesFinishlineExist()) {
printf("\n[actors.c] COURSE MISSING THE FINISHLINE\n");
- printf(" In the course class SpawnActors() function make sure to include:\n");
+ printf(" In the Course class BeginPlay() function make sure to include:\n");
printf(" gWorldInstance.AddActor(new AFinishline());\n\n");
printf("\n Otherwise, course textures may glitch out or other strange issues may occur.\n");
}
@@ -1211,16 +1210,14 @@ void init_actors_and_load_textures(void) {
dma_textures(gTexture671A88, 0x00000400U, 0x00000800U);
dma_textures(gTexture6774D8, 0x00000400U, 0x00000800U);
- CourseManager_LoadTextures();
+ CM_LoadTextures();
init_red_shell_texture();
destroy_all_actors();
CM_CleanWorld();
- spawn_course_actors();
-
- CourseManager_VehiclesSpawn();
- // spawn_course_vehicles();
+ CM_BeginPlay();
+ spawn_course_actors();
}
void play_sound_before_despawn(struct Actor* actor) {
@@ -1265,7 +1262,7 @@ s16 try_remove_destructable_item(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actor
// try removing a red shell, green shell, banana, or a fake item box if the actor is expired
for (actorIndex = gNumPermanentActors; actorIndex < ACTOR_LIST_SIZE; actorIndex++) {
- compare = (struct ShellActor*) m_GetActor(actorIndex);
+ compare = (struct ShellActor*) CM_GetActor(actorIndex);
if (!(compare->flags & ACTOR_IS_NOT_EXPIRED)) {
switch (compare->type) {
case ACTOR_RED_SHELL:
@@ -1322,7 +1319,7 @@ s16 try_remove_destructable_item(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actor
// will remove the oldest destructable actor in the list
for (actorIndex = gNumPermanentActors; actorIndex < ACTOR_LIST_SIZE; actorIndex++) {
- compare = (struct ShellActor*) m_GetActor(actorIndex);
+ compare = (struct ShellActor*) CM_GetActor(actorIndex);
switch (compare->type) {
case ACTOR_RED_SHELL:
switch (compare->state) {
@@ -1382,22 +1379,22 @@ s16 try_remove_destructable_item(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actor
s16 add_actor_to_empty_slot(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actorType) {
size_t index;
- // if (gNumActors >= m_GetActorSize()) {
+ // if (gNumActors >= CM_GetActorSize()) {
// return try_remove_destructable_item(pos, rot, velocity, actorType);
// }
// Cleanup unused actors
- for (index = 0; index < m_GetActorSize(); index++) {
- // if (m_GetActor(index)->flags == 0) {
+ for (index = 0; index < CM_GetActorSize(); index++) {
+ // if (CM_GetActor(index)->flags == 0) {
//! @todo Commented out because deletes too soon.
- // m_DeleteActor(index);
+ // CM_DeleteActor(index);
// gNumActors--;
//}
}
gNumActors++;
- struct Actor* actor = m_AddBaseActor();
+ struct Actor* actor = CM_AddBaseActor();
actor_init(actor, pos, rot, velocity, actorType);
- return (s16) m_GetActorSize() - 1; // Return current index;
+ return (s16) CM_GetActorSize() - 1; // Return current index;
}
UNUSED s16 spawn_actor_at_pos(Vec3f pos, s16 actorType) {
@@ -1818,7 +1815,7 @@ void destroy_destructable_actor(struct Actor* actor) {
if (shell->state != GREEN_SHELL_HIT_A_RACER) {
switch (shell->state) {
case MOVING_SHELL:
- delete_actor_in_unexpired_actor_list(m_FindActorIndex(actor));
+ delete_actor_in_unexpired_actor_list(CM_FindActorIndex(actor));
/* fallthrough */
case HELD_SHELL:
case RELEASED_SHELL:
@@ -1847,7 +1844,7 @@ void destroy_destructable_actor(struct Actor* actor) {
case BLUE_SHELL_LOCK_ON:
case BLUE_SHELL_TARGET_ELIMINATED:
func_800C9EF4(shell->pos, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
- delete_actor_in_unexpired_actor_list(m_FindActorIndex(actor));
+ delete_actor_in_unexpired_actor_list(CM_FindActorIndex(actor));
/* fallthrough */
case HELD_SHELL:
case RELEASED_SHELL:
@@ -1872,7 +1869,7 @@ void destroy_destructable_actor(struct Actor* actor) {
case GREEN_SHELL_HIT_A_RACER:
case BLUE_SHELL_LOCK_ON:
case BLUE_SHELL_TARGET_ELIMINATED:
- delete_actor_in_unexpired_actor_list(m_FindActorIndex(actor));
+ delete_actor_in_unexpired_actor_list(CM_FindActorIndex(actor));
/* fallthrough */
case HELD_SHELL:
case RELEASED_SHELL:
@@ -2006,7 +2003,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
f32 temp_f0;
f32 temp_f2;
- m_ActorCollision(player, actor);
+ CM_ActorCollision(player, actor);
temp_lo = player - gPlayerOne;
switch (actor->type) {
@@ -2223,7 +2220,7 @@ void evaluate_collision_for_players_and_actors(void) {
if (((phi_s1->type & 0x8000) != 0) && ((phi_s1->effects & 0x4000000) == 0)) {
func_802977E4(phi_s1);
for (j = 0; j < ACTOR_LIST_SIZE; j++) {
- temp_a1 = m_GetActor(j);
+ temp_a1 = CM_GetActor(j);
if ((phi_s1->effects & 0x4000000) == 0) {
// temp_v0 = temp_a1->unk2;
@@ -2244,7 +2241,7 @@ void evaluate_collision_for_destructible_actors(void) {
UNUSED s32 pad;
for (i = gNumPermanentActors; i < (ACTOR_LIST_SIZE); i++) {
- actor1 = m_GetActor(i);
+ actor1 = CM_GetActor(i);
if ((actor1->flags & 0x8000) == 0) {
continue;
@@ -2261,7 +2258,7 @@ void evaluate_collision_for_destructible_actors(void) {
case ACTOR_FAKE_ITEM_BOX:
for (j = i + 1; j < ACTOR_LIST_SIZE; j++) {
- actor2 = m_GetActor(j);
+ actor2 = CM_GetActor(j);
if ((actor1->flags & 0x8000) == 0) {
continue;
@@ -2313,7 +2310,7 @@ void evaluate_collision_for_destructible_actors(void) {
}
void func_802A1064(struct FakeItemBox* fake_item_box) {
- if ((u32) (m_FindActorIndex(fake_item_box)) <= (u32) ACTOR_LIST_SIZE) {
+ if ((u32) (CM_FindActorIndex(fake_item_box)) <= (u32) ACTOR_LIST_SIZE) {
if (((fake_item_box->flags & 0x8000) != 0) && (fake_item_box->type == ACTOR_FAKE_ITEM_BOX)) {
fake_item_box->state = 1;
fake_item_box->targetY = func_802ABEAC(&fake_item_box->unk30, fake_item_box->pos) + 8.66f;
@@ -2340,7 +2337,7 @@ void init_actor_hot_air_balloon_item_box(f32 x, f32 y, f32 z) {
pos[1] = y;
pos[2] = z;
id = add_actor_to_empty_slot(pos, rot, velocity, ACTOR_HOT_AIR_BALLOON_ITEM_BOX);
- gActorHotAirBalloonItemBox = m_GetActor(id);
+ gActorHotAirBalloonItemBox = CM_GetActor(id);
}
#include "actors/item_box/update.inc.c"
@@ -2365,8 +2362,8 @@ void render_item_boxes(struct UnkStruct_800DC5EC* arg0) {
s32 i;
D_8015F8DC = 0;
- for (i = 0; i < m_GetActorSize(); i++) {
- actor = m_GetActor(i);
+ for (i = 0; i < CM_GetActorSize(); i++) {
+ actor = CM_GetActor(i);
if (actor->flags == 0) {
continue;
@@ -2420,15 +2417,15 @@ void render_course_actors(struct UnkStruct_800DC5EC* arg0) {
}
D_8015F8E0 = 0;
- for (i = 0; i < m_GetActorSize(); i++) {
- actor = m_GetActor(i);
+ for (i = 0; i < CM_GetActorSize(); i++) {
+ actor = CM_GetActor(i);
if (actor->flags == 0) {
continue;
}
switch (actor->type) {
default: // Draw custom actor
- CourseManager_DrawActors(D_800DC5EC->camera, actor);
+ CM_DrawActors(D_800DC5EC->camera, actor);
break;
case ACTOR_TREE_MARIO_RACEWAY:
render_actor_tree_mario_raceway(camera, sBillBoardMtx, actor);
@@ -2541,9 +2538,9 @@ void render_course_actors(struct UnkStruct_800DC5EC* arg0) {
void update_course_actors(void) {
struct Actor* actor;
s32 i;
- for (i = 0; i < m_GetActorSize(); i++) {
+ for (i = 0; i < CM_GetActorSize(); i++) {
- actor = m_GetActor(i);
+ actor = CM_GetActor(i);
if (actor->flags == 0) {
continue;
}
diff --git a/src/racing/actors_extended.c b/src/racing/actors_extended.c
index b25d5bf04..5493a4efa 100644
--- a/src/racing/actors_extended.c
+++ b/src/racing/actors_extended.c
@@ -592,9 +592,9 @@ s32 init_triple_shell(TripleShellParent* parent, Player* player, s16 shellType,
shell->rotVelocity = 0;
shell->rotAngle = -0x8000;
shell->playerId = player - gPlayerOne;
- shell->parentIndex = m_FindActorIndex(parent);
+ shell->parentIndex = CM_FindActorIndex(parent);
shell->shellId = shellId;
- parent->shellIndices[shellId] = (f32) m_FindActorIndex(shell);
+ parent->shellIndices[shellId] = (f32) CM_FindActorIndex(shell);
return 1;
}
@@ -721,7 +721,7 @@ void func_802B2914(struct BananaBunchParent* banana_bunch, Player* player, s16 b
func_802B4E30((struct Actor*) newBanana);
newBanana->flags = 0x9000;
newBanana->playerId = player - gPlayerOne;
- newBanana->parentIndex = (struct Actor*) m_FindActorIndex(banana_bunch);
+ newBanana->parentIndex = (struct Actor*) CM_FindActorIndex(banana_bunch);
newBanana->youngerIndex = -1;
newBanana->unk_04 = 0x0014;
newBanana->bananaId = bananaId;
diff --git a/src/racing/memory.c b/src/racing/memory.c
index d54915a3d..1b5f02510 100644
--- a/src/racing/memory.c
+++ b/src/racing/memory.c
@@ -823,7 +823,7 @@ void unpack_tile_sync(Gfx* gfx, u8* args, s8 opcode) {
}
uintptr_t get_texture(size_t offset) {
- course_texture* textures = CourseManager_GetProps()->textures;
+ course_texture* textures = CM_GetProps()->textures;
size_t totalOffset = 0;
while (textures->addr) {
diff --git a/src/racing/race_logic.c b/src/racing/race_logic.c
index a65ff4c85..4b9cf1af9 100644
--- a/src/racing/race_logic.c
+++ b/src/racing/race_logic.c
@@ -80,7 +80,7 @@ void func_8028E028(void) {
break;
}
func_800CA118((u8) gPlayerWinningIndex);
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
D_802BA038 = 10;
}
@@ -225,7 +225,7 @@ void func_8028E438(void) {
func_80019DF4();
} else {
func_80092564();
- D_800DC510 = 7;
+ gRaceState = RACE_EXIT;
}
}
break;
@@ -399,7 +399,7 @@ void func_8028E678(void) {
case 4:
gIsInQuitToMenuTransition = 1;
gQuitToMenuTransitionCounter = 5;
- D_800DC510 = 7;
+ gRaceState = RACE_EXIT;
set_next_course();
break;
}
@@ -407,7 +407,7 @@ void func_8028E678(void) {
void func_8028EC38(s32 arg0) {
gGotoMode = arg0;
- D_800DC510 = 6;
+ gRaceState = RACE_UNK;
func_800CA330(25);
func_800CA388(25);
D_800DC5B4 = 1;
@@ -418,13 +418,14 @@ void func_8028EC38(s32 arg0) {
void func_8028EC98(s32 arg0) {
- if (gScreenModeSelection == SCREEN_MODE_3P_4P_SPLITSCREEN) {
- return;
- }
+ // We want music in mutilplayer
+ //if (gScreenModeSelection == SCREEN_MODE_3P_4P_SPLITSCREEN) {
+ // return;
+ //}
func_800029B0();
- enum MusicSeq sequence = CourseManager_GetProps()->Sequence;
+ enum MusicSeq sequence = CM_GetProps()->Sequence;
if(sequence != MUSIC_SEQ_UNKNOWN){
play_sequence(sequence);
@@ -439,8 +440,8 @@ void start_race(void) {
func_8028EC98(gCurrentCourseId);
}
- if (D_800DC510 == 2) {
- D_800DC510 = 3;
+ if (gRaceState == RACE_STAGING) {
+ gRaceState = RACE_IN_PROGRESS;
}
for (i = 0; i < NUM_PLAYERS; i++) {
@@ -504,7 +505,7 @@ void func_8028EF28(void) {
D_802BA048 = 1;
}
if ((gPlayers[i].type & PLAYER_INVISIBLE_OR_BOMB) == 0) {
- D_800DC510 = 4;
+ gRaceState = RACE_CALCULATE_RANKS;
}
if (gModeSelection == TIME_TRIALS) {
func_80005AE8(player);
@@ -523,7 +524,7 @@ void func_8028EF28(void) {
if (*(gNmiUnknown1 + i) > 99) {
*(gNmiUnknown1 + i) = 99;
}
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
i = gPlayerPositionLUT[1];
gPlayers[i].soundEffects |= 0x200000;
gPlayers[i].type |= PLAYER_KART_AI;
@@ -537,7 +538,7 @@ void func_8028EF28(void) {
*(gNmiUnknown2 + i * 3 + currentPosition) = 99;
}
if (currentPosition == 1) {
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
i = gPlayerPositionLUT[2];
*(gNmiUnknown2 + i * 3 + 2) += 1;
if (*(gNmiUnknown2 + i * 3 + 2) > 99) {
@@ -556,7 +557,7 @@ void func_8028EF28(void) {
*(gNmiUnknown3 + i * 3 + currentPosition) = 99;
}
if (currentPosition == 2) {
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
i = gPlayerPositionLUT[3];
gPlayers[i].soundEffects |= 0x200000;
gPlayers[i].type |= PLAYER_KART_AI;
@@ -610,16 +611,16 @@ void update_race_position_data(void) {
void func_8028F474(void) {
s32 i;
- switch (D_800DC510) {
- case 3:
- case 4:
- case 5:
- case 7:
+ switch (gRaceState) {
+ case RACE_IN_PROGRESS:
+ case RACE_CALCULATE_RANKS:
+ case RACE_FINISHED:
+ case RACE_EXIT:
for (i = 0; i < NUM_PLAYERS; i++) {
func_80009B60(i);
}
- case 1:
- case 2:
+ case RACE_SETUP:
+ case RACE_STAGING:
update_vehicles();
break;
}
@@ -633,7 +634,7 @@ void func_8028F4E8(void) {
func_800CA330(0x19);
func_800CA388(0x19);
gGotoMode = START_MENU_FROM_QUIT;
- D_800DC510 = 6;
+ gRaceState = RACE_UNK;
D_800DC5B4 = 1;
D_800DC5B0 = 1;
D_800DC5B8 = 0;
@@ -816,7 +817,7 @@ void func_8028F970(void) {
void func_8028FBD4(void) {
gGotoMode = START_MENU_FROM_QUIT;
- D_800DC510 = 6;
+ gRaceState = RACE_UNK;
func_800CA330(25);
func_800CA388(25);
D_800DC5B4 = 1;
@@ -856,8 +857,8 @@ void func_8028FCBC(void) {
if (gDemoUseController) {
func_8028FC34();
}
- switch (D_800DC510) {
- case 0:
+ switch (gRaceState) {
+ case RACE_INIT:
if (!gDemoMode) {
if (gModeSelection == GRAND_PRIX) {
func_800C8EF8(11);
@@ -868,7 +869,7 @@ void func_8028FCBC(void) {
}
}
func_80002DAC();
- D_800DC510 = 1;
+ gRaceState = RACE_SETUP;
D_80150118 = 3.0f;
creditsRenderMode = 0;
D_802BA032 = 0;
@@ -890,8 +891,9 @@ void func_8028FCBC(void) {
ply++;
}
D_800DC5B8 = 1;
+
break;
- case 1:
+ case RACE_SETUP:
func_8028F914();
if (D_802BA034 == 1.0f) {
if (gActiveScreenMode != SCREEN_MODE_1P) {
@@ -901,7 +903,7 @@ void func_8028FCBC(void) {
func_802A7728();
}
}
- D_800DC510 = 2;
+ gRaceState = RACE_STAGING;
D_800DC5B0 = 0;
D_800DC5B8 = 1;
CM_SpawnStarterLakitu(); // func_80078F64();
@@ -921,7 +923,7 @@ void func_8028FCBC(void) {
}
func_8028F4E8();
break;
- case 2:
+ case RACE_STAGING:
if (gDemoMode) {
start_race();
}
@@ -930,7 +932,7 @@ void func_8028FCBC(void) {
}
func_8028F4E8();
break;
- case 3:
+ case RACE_IN_PROGRESS:
if (gModeSelection == BATTLE) {
update_player_battle_status();
} else {
@@ -940,8 +942,7 @@ void func_8028FCBC(void) {
func_8028F4E8();
func_8028F970();
break;
- case 4:
-
+ case RACE_CALCULATE_RANKS:
switch (gModeSelection) {
case GRAND_PRIX:
func_8028F4E8();
@@ -952,7 +953,7 @@ void func_8028FCBC(void) {
switch (gScreenModeSelection) {
case SCREEN_MODE_1P:
D_802BA038 = 690;
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
func_8028E298();
break;
case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL:
@@ -968,7 +969,7 @@ void func_8028FCBC(void) {
func_8028E298();
D_802BA038 = 600;
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
}
break;
}
@@ -982,14 +983,14 @@ void func_8028FCBC(void) {
case TIME_TRIALS:
D_802BA038 = 360;
if (D_8015F890 != 0) {
- D_800DC510 = 7;
+ gRaceState = RACE_EXIT;
} else {
- D_800DC510 = 5;
+ gRaceState = RACE_FINISHED;
}
break;
}
break;
- case 5:
+ case RACE_FINISHED:
if (D_802BA038 != 0) {
D_802BA038--;
} else {
@@ -999,7 +1000,7 @@ void func_8028FCBC(void) {
func_8028E678();
} else if (gScreenModeSelection == SCREEN_MODE_1P) {
func_80092564();
- D_800DC510 = 7;
+ gRaceState = RACE_EXIT;
} else {
func_8028E438();
}
@@ -1015,14 +1016,14 @@ void func_8028FCBC(void) {
}
func_8028F4E8();
break;
- case 6:
+ case RACE_UNK:
func_8028F8BC();
if (D_802BA034 <= 0) {
gIsInQuitToMenuTransition = 1;
gQuitToMenuTransitionCounter = 5;
}
break;
- case 7:
+ case RACE_EXIT:
break;
}
}
diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c
index 0671a0cd7..b2d654fb4 100644
--- a/src/racing/render_courses.c
+++ b/src/racing/render_courses.c
@@ -21,6 +21,7 @@
#include "courses/all_course_packed.h"
#include "courses/all_course_offsets.h"
#include "port/Game.h"
+#include "engine/courses/Course.h"
#include "enhancements/collision_viewer.h"
@@ -241,7 +242,7 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) {
}
mtxf_identity(matrix);
render_set_position(matrix, 0);
- CourseManager_DrawWater(arg0, pathCounter, cameraRot, playerDirection);
+ CM_DrawWater(arg0, pathCounter, cameraRot, playerDirection);
// switch (gCurrentCourseId) {
// case COURSE_BOWSER_CASTLE:
// if (gActiveScreenMode != SCREEN_MODE_1P) {
@@ -624,9 +625,7 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) {
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x07003240)));
// d_course_mario_raceway_packed_dl_14A0
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x070014A0)));
- // printf("LOADING SURFACE MAP\n");
render_course_segments(mario_raceway_dls, arg0);
- // printf("SURFACE MAP LOADED\n");
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
@@ -639,7 +638,6 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) {
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x070000E0)));
// d_course_mario_raceway_packed_dl_160
gSPDisplayList(gDisplayListHead++, ((uintptr_t) segmented_gfx_to_virtual(0x07000160)));
- // printf("RENDERED COURSE\n");
}
void render_choco_mountain(struct UnkStruct_800DC5EC* arg0) {
@@ -1324,7 +1322,7 @@ void render_big_donut(struct UnkStruct_800DC5EC* arg0) {
void func_8029569C(void) {
- CourseManager_RenderCredits();
+ CM_RenderCredits();
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
@@ -1404,7 +1402,7 @@ void render_course(struct UnkStruct_800DC5EC* arg0) {
return;
}
- CourseManager_RenderCourse(arg0);
+ CM_RenderCourse(arg0);
// switch (gCurrentCourseId) {
// case COURSE_MARIO_RACEWAY:
@@ -1716,7 +1714,7 @@ void course_init(void) {
void func_802966A0(void) {
- CourseManager_ScrollingTextures();
+ CM_ScrollingTextures();
// switch (gCurrentCourseId) {
// case COURSE_KOOPA_BEACH:
diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c
index 6c51fb266..916a97e23 100644
--- a/src/racing/skybox_and_splitscreen.c
+++ b/src/racing/skybox_and_splitscreen.c
@@ -19,7 +19,6 @@
#include "menus.h"
#include "port/Engine.h"
#include "engine/courses/Course.h"
-#include "engine/Engine.h"
#include "port/Game.h"
Vp D_802B8880[] = {
@@ -362,7 +361,7 @@ void func_802A450C(Vtx* skybox) {
return;
}
- SkyboxColours* prop = (SkyboxColours*) &CourseManager_GetProps()->Skybox;
+ SkyboxColours* prop = (SkyboxColours*) &CM_GetProps()->Skybox;
skybox[0].v.cn[0] = prop->TopRight.r;
skybox[0].v.cn[1] = prop->TopRight.g;
@@ -445,8 +444,8 @@ void func_802A4A0C(Vtx* vtx, struct UnkStruct_800DC5EC* arg1, UNUSED s32 arg2, U
sp5C[0] = 0.0f;
sp5C[1] = 0.0f;
sp5C[2] = 30000.0f;
- func_802B5564(matrix1, &sp128, camera->unk_B4, gScreenAspect, CourseManager_GetProps()->NearPersp,
- CourseManager_GetProps()->FarPersp, 1.0f);
+ func_802B5564(matrix1, &sp128, camera->unk_B4, gScreenAspect, CM_GetProps()->NearPersp,
+ CM_GetProps()->FarPersp, 1.0f);
func_802B5794(matrix2, camera->pos, camera->lookAt);
mtxf_multiplication(matrix3, matrix1, matrix2);
@@ -829,7 +828,7 @@ void render_screens(s32 mode, s32 cameraId, s32 playerId) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
guPerspective(&gGfxPool->mtxPersp[cameraId], &perspNorm, gCameraZoom[cameraId], gScreenAspect,
- CourseManager_GetProps()->NearPersp, CourseManager_GetProps()->FarPersp, 1.0f);
+ CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f);
gSPPerspNormalize(gDisplayListHead++, perspNorm);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[cameraId]),
diff --git a/src/render_objects.c b/src/render_objects.c
index f6baef9b5..83c16b56b 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -43,7 +43,6 @@
#include "port/Game.h"
#include "port/Engine.h"
-#include "engine/Engine.h"
#include "engine/courses/Course.h"
#include "engine/Matrix.h"
@@ -2621,9 +2620,9 @@ void func_8004EF9C(s32 arg0) {
s16 temp_t0;
s16 temp_v0;
- temp_v0 = CourseManager_GetProps()->MinimapDimensions.X;
- temp_t0 = CourseManager_GetProps()->MinimapDimensions.Z;
- func_8004D37C(0x00000104, 0x0000003C, CourseManager_GetProps()->MinimapTexture, 0x000000FF, 0x000000FF, 0x000000FF,
+ temp_v0 = CM_GetProps()->MinimapDimensions.X;
+ temp_t0 = CM_GetProps()->MinimapDimensions.Z;
+ func_8004D37C(0x00000104, 0x0000003C, CM_GetProps()->MinimapTexture, 0x000000FF, 0x000000FF, 0x000000FF,
0x000000FF, temp_v0, temp_t0, temp_v0, temp_t0);
}
@@ -2653,7 +2652,7 @@ void set_minimap_finishline_position(s32 arg0) {
}
//! @todo Get course minimap props from course.
- CourseManager_MinimapFinishlinePosition();
+ CM_MinimapFinishlinePosition();
draw_hud_2d_texture_8x8(var_f2, var_f0, (u8*) common_texture_minimap_finish_line);
}
@@ -4032,23 +4031,17 @@ void func_800568A0(s32 objectIndex, s32 playerId) {
}
void func_800569F4(s32 playerIndex) {
- s32 objectIndex;
-
- objectIndex = gIndexObjectBombKart[playerIndex];
- init_object(objectIndex, 0);
- gObjectList[objectIndex].primAlpha = 0;
+ CM_DisplayBattleBombKart(playerIndex, 0);
}
-void func_80056A40(s32 playerIndex, s32 arg1) {
- s32 objectIndex;
- objectIndex = gIndexObjectBombKart[playerIndex];
- init_object(objectIndex, 0);
- gObjectList[objectIndex].primAlpha = (s16) arg1;
+void func_80056A40(s32 playerIndex, s32 arg1) {
+ CM_DisplayBattleBombKart(playerIndex, arg1);
}
void func_80056A94(s32 playerIndex) {
- func_80072428(gIndexObjectBombKart[playerIndex]);
+ //func_80072428(gIndexObjectBombKart[playerIndex]);
+ CM_DisplayBattleBombKart(playerIndex, 0);
}
void render_battle_bomb_karts(s32 cameraId) {
diff --git a/src/staff_ghosts.c b/src/staff_ghosts.c
index f8e7a69bb..f2fca0490 100644
--- a/src/staff_ghosts.c
+++ b/src/staff_ghosts.c
@@ -111,7 +111,7 @@ void func_80004FF8(void) {
#endif
void set_staff_ghost(void) {
- CourseManager_SetStaffGhost();
+ CM_SetStaffGhost();
}
s32 func_800051C4(void) {
diff --git a/src/update_objects.c b/src/update_objects.c
index 94fb89ce4..3f25e136f 100644
--- a/src/update_objects.c
+++ b/src/update_objects.c
@@ -2675,7 +2675,7 @@ void func_80078C70(s32 arg0) {
D_8018D1E8 = 1.7578125 / D_8018D200;
D_8018D218 = 0xA0;
- CourseManager_UpdateClouds(sp1C, camera);
+ CM_UpdateClouds(sp1C, camera);
// switch (gCurrentCourseId) { /* switch 2 */
// case COURSE_MARIO_RACEWAY: /* switch 2 */