mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-07-08 22:45:12 -04:00
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>
This commit is contained in:
+2
-2
@@ -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-;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -195,6 +195,19 @@ enum { COURSE_ONE, COURSE_TWO, COURSE_THREE, COURSE_FOUR };
|
||||
#define ENDING 5
|
||||
#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
|
||||
*/
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
+3
-3
@@ -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;
|
||||
}
|
||||
|
||||
+38
-90
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+11
-17
@@ -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;
|
||||
|
||||
+7
-10
@@ -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:
|
||||
|
||||
+3
-5
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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]),
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
+16
-3
@@ -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
|
||||
@@ -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__
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
+1
-23
@@ -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();
|
||||
|
||||
+3
-51
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
+62
-65
@@ -1,85 +1,77 @@
|
||||
#ifndef COURSE_H
|
||||
#define COURSE_H
|
||||
#ifndef ENGINE_COURSE_H
|
||||
#define ENGINE_COURSE_H
|
||||
|
||||
#include <libultraship.h>
|
||||
|
||||
// C-compatible function declaration
|
||||
#ifdef __cplusplus
|
||||
#include "CoreMath.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#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
|
||||
#endif // ENGINE_COURSE_H
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,20 +191,21 @@ 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);
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
Vec3f pos = {0, 0, 0};
|
||||
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() {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
// Likely sets minimap boundaries
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() { }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,6 +173,27 @@ 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));
|
||||
}
|
||||
|
||||
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.AddObject(new OBombKart(pos, NULL, 0, 0, 0.8333333f));
|
||||
Vec3f pos2 = {-1565, 0, -619};
|
||||
gWorldInstance.AddObject(new OBombKart(pos2, NULL, 10, 0, 0.8333333f));
|
||||
Vec3f pos3 = {-1529, 0, -579};
|
||||
gWorldInstance.AddObject(new OBombKart(pos3, NULL, 20, 0, 0.8333333f));
|
||||
Vec3f pos4 = {-1588, 0, -534};
|
||||
gWorldInstance.AddObject(new OBombKart(pos4, NULL, 30, 0, 0.8333333f));
|
||||
Vec3f pos5 = {-1598, 0, -207};
|
||||
gWorldInstance.AddObject(new OBombKart(pos5, NULL, 40, 0, 0.8333333f));
|
||||
Vec3f pos6 = {-1646, 0, -147};
|
||||
gWorldInstance.AddObject(new OBombKart(pos6, NULL, 50, 0, 0.8333333f));
|
||||
Vec3f pos7 = {-2532, 0, -445};
|
||||
gWorldInstance.AddObject(new OBombKart(pos7, NULL, 60, 0, 0.8333333f));
|
||||
}
|
||||
}
|
||||
|
||||
// Likely sets minimap boundaries
|
||||
@@ -186,30 +207,6 @@ void YoshiValley::MinimapSettings() {
|
||||
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);
|
||||
Vec3f pos2 = {-1565, 0, -619};
|
||||
gWorldInstance.AddBombKart(pos2, NULL, 10, 0, 0.8333333f);
|
||||
Vec3f pos3 = {-1529, 0, -579};
|
||||
gWorldInstance.AddBombKart(pos3, NULL, 20, 0, 0.8333333f);
|
||||
Vec3f pos4 = {-1588, 0, -534};
|
||||
gWorldInstance.AddBombKart(pos4, NULL, 30, 0, 0.8333333f);
|
||||
Vec3f pos5 = {-1598, 0, -207};
|
||||
gWorldInstance.AddBombKart(pos5, NULL, 40, 0, 0.8333333f);
|
||||
Vec3f pos6 = {-1646, 0, -147};
|
||||
gWorldInstance.AddBombKart(pos6, NULL, 50, 0, 0.8333333f);
|
||||
Vec3f pos7 = {-2532, 0, -445};
|
||||
gWorldInstance.AddBombKart(pos7, NULL, 60, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
void YoshiValley::UpdateCourseObjects() {
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
+10
-12
@@ -57,31 +57,29 @@ ABus::ABus(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) {
|
||||
}
|
||||
D_801631C8 = 10;
|
||||
|
||||
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::Spawn() {
|
||||
spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
|
||||
Speed);
|
||||
ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_SCHOOL_BUS);
|
||||
bool ABus::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void ABus::BeginPlay() {
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
_count++;
|
||||
}
|
||||
|
||||
void ACar::BeginPlay() {
|
||||
|
||||
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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
@@ -57,31 +57,29 @@ ATankerTruck::ATankerTruck(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t
|
||||
}
|
||||
D_801631C8 = 10;
|
||||
|
||||
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::Spawn() {
|
||||
spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
|
||||
Speed);
|
||||
ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_TANKER_TRUCK);
|
||||
bool ATankerTruck::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void ATankerTruck::BeginPlay() {
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -57,48 +57,29 @@ ATruck::ATruck(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) {
|
||||
}
|
||||
D_801631C8 = 10;
|
||||
|
||||
spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel,
|
||||
Speed);
|
||||
ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_BOX_TRUCK);
|
||||
|
||||
_count++;
|
||||
}
|
||||
|
||||
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);
|
||||
// }
|
||||
bool ATruck::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void ATruck::BeginPlay() {
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
@@ -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
|
||||
@@ -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],
|
||||
|
||||
+4
-4
@@ -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();
|
||||
}
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user