4#include <libultraship.h>
95 nlohmann::json to_json()
const {
131 j[
"MinimapPlayerX"] =
Minimap.PlayerX;
132 j[
"MinimapPlayerY"] =
Minimap.PlayerY;
133 j[
"MinimapPlayerScaleFactor"] =
Minimap.PlayerScaleFactor;
134 j[
"MinimapFinishlineX"] =
Minimap.FinishlineX;
135 j[
"MinimapFinishlineY"] =
Minimap.FinishlineY;
136 j[
"MinimapColour"] = {
static_cast<int>(
Minimap.Colour.r),
static_cast<int>(
Minimap.Colour.g),
static_cast<int>(
Minimap.Colour.b)};
139 #define TO_INT(value) static_cast<int>(value)
142 TO_INT(
Skybox.BottomRight.r), TO_INT(
Skybox.BottomRight.g), TO_INT(
Skybox.BottomRight.b),
143 TO_INT(
Skybox.BottomLeft.r), TO_INT(
Skybox.BottomLeft.g), TO_INT(
Skybox.BottomLeft.b),
145 TO_INT(
Skybox.FloorTopRight.r), TO_INT(
Skybox.FloorTopRight.g), TO_INT(
Skybox.FloorTopRight.b),
146 TO_INT(
Skybox.FloorBottomRight.r), TO_INT(
Skybox.FloorBottomRight.g), TO_INT(
Skybox.FloorBottomRight.b),
147 TO_INT(
Skybox.FloorBottomLeft.r), TO_INT(
Skybox.FloorBottomLeft.g), TO_INT(
Skybox.FloorBottomLeft.b),
148 TO_INT(
Skybox.FloorTopLeft.r), TO_INT(
Skybox.FloorTopLeft.g), TO_INT(
Skybox.FloorTopLeft.b)
150 j[
"Sequence"] =
static_cast<int>(
Sequence);
159 void from_json(
const nlohmann::json&
j) {
162 strncpy(
Name,
j.at(
"Name").get<std::string>().c_str(),
sizeof(
Name) - 1);
179 FarPersp =
j.at(
"FarPersp").get<
float>();
181 const auto temp =
j.at(
"AIDistance").get<std::vector<int16_t>>();
184 if (temp.size() == 32) {
186 std::copy(temp.begin(), temp.end(),
AIDistance);
188 printf(
"Course::from_json() AIDistance array not size of 32\n");
205 D_0D0096B8[0] =
j.at(
"D_0D0096B8")[0].get<
float>();
206 D_0D0096B8[1] =
j.at(
"D_0D0096B8")[1].get<
float>();
207 D_0D0096B8[2] =
j.at(
"D_0D0096B8")[2].get<
float>();
208 D_0D0096B8[3] =
j.at(
"D_0D0096B8")[3].get<
float>();
219 Minimap.Pos[0].X =
j.at(
"MinimapPosition")[0].get<int32_t>();
220 Minimap.Pos[0].Y =
j.at(
"MinimapPosition")[1].get<int32_t>();
221 Minimap.Pos[1].X =
j.at(
"MinimapPosition2P")[0].get<int32_t>();
222 Minimap.Pos[1].Y =
j.at(
"MinimapPosition2P")[1].get<int32_t>();
223 Minimap.PlayerX =
j.at(
"MinimapPlayerX").get<int32_t>();
224 Minimap.PlayerY =
j.at(
"MinimapPlayerY").get<int32_t>();
225 Minimap.PlayerScaleFactor =
j.at(
"MinimapPlayerScaleFactor").get<
float>();
226 Minimap.FinishlineX =
j.at(
"MinimapFinishlineX").get<
float>();
227 Minimap.FinishlineY =
j.at(
"MinimapFinishlineY").get<
float>();
228 Minimap.Colour.r =
j.at(
"MinimapColour")[0].get<uint8_t>();
229 Minimap.Colour.g =
j.at(
"MinimapColour")[1].get<uint8_t>();
230 Minimap.Colour.b =
j.at(
"MinimapColour")[2].get<uint8_t>();
233 Skybox.TopRight.r =
j.at(
"Skybox")[0].get<uint8_t>();
234 Skybox.TopRight.g =
j.at(
"Skybox")[1].get<uint8_t>();
235 Skybox.TopRight.b =
j.at(
"Skybox")[2].get<uint8_t>();
237 Skybox.BottomRight.r =
j.at(
"Skybox")[3].get<uint8_t>();
238 Skybox.BottomRight.g =
j.at(
"Skybox")[4].get<uint8_t>();
239 Skybox.BottomRight.b =
j.at(
"Skybox")[5].get<uint8_t>();
241 Skybox.BottomLeft.r =
j.at(
"Skybox")[6].get<uint8_t>();
242 Skybox.BottomLeft.g =
j.at(
"Skybox")[7].get<uint8_t>();
243 Skybox.BottomLeft.b =
j.at(
"Skybox")[8].get<uint8_t>();
245 Skybox.TopLeft.r =
j.at(
"Skybox")[9].get<uint8_t>();
246 Skybox.TopLeft.g =
j.at(
"Skybox")[10].get<uint8_t>();
247 Skybox.TopLeft.b =
j.at(
"Skybox")[11].get<uint8_t>();
249 Skybox.FloorTopRight.r =
j.at(
"Skybox")[12].get<uint8_t>();
250 Skybox.FloorTopRight.g =
j.at(
"Skybox")[13].get<uint8_t>();
251 Skybox.FloorTopRight.b =
j.at(
"Skybox")[14].get<uint8_t>();
253 Skybox.FloorBottomRight.r =
j.at(
"Skybox")[15].get<uint8_t>();
254 Skybox.FloorBottomRight.g =
j.at(
"Skybox")[16].get<uint8_t>();
255 Skybox.FloorBottomRight.b =
j.at(
"Skybox")[17].get<uint8_t>();
257 Skybox.FloorBottomLeft.r =
j.at(
"Skybox")[18].get<uint8_t>();
258 Skybox.FloorBottomLeft.g =
j.at(
"Skybox")[19].get<uint8_t>();
259 Skybox.FloorBottomLeft.b =
j.at(
"Skybox")[20].get<uint8_t>();
261 Skybox.FloorTopLeft.r =
j.at(
"Skybox")[21].get<uint8_t>();
262 Skybox.FloorTopLeft.g =
j.at(
"Skybox")[22].get<uint8_t>();
263 Skybox.FloorTopLeft.b =
j.at(
"Skybox")[23].get<uint8_t>();
268 void SetText(
char* name,
const char* title,
size_t bufferSize) {
270 std::strncpy(name, title, bufferSize - 1);
271 name[bufferSize - 1] =
'\0';
274 const char* GetName() {
299 std::vector<WaterVolume> WaterVolumes;
301 const char* vtx =
nullptr;
302 const char* gfx =
nullptr;
304 const course_texture* textures =
nullptr;
305 bool bSpawnFinishline =
true;
306 std::optional<FVector> FinishlineSpawnPoint;
307 std::string TrackSectionsPtr;
310 virtual ~Course() =
default;
314 virtual void LoadO2R(std::string trackPath);
316 virtual void Load(Vtx* vtx, Gfx *gfx);
317 virtual void LoadTextures();
318 virtual void ParseCourseSections(TrackSectionsO2R* sections,
size_t size);
324 virtual void BeginPlay();
325 virtual void TestPath();
326 virtual void InitClouds();
327 virtual void UpdateClouds(s32, Camera*);
328 virtual void SomeCollisionThing(Player *player,
Vec3f arg1,
Vec3f arg2,
Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7);
329 virtual void InitCourseObjects();
330 virtual void UpdateCourseObjects();
331 virtual void RenderCourseObjects(s32 cameraId);
332 virtual void SomeSounds();
333 virtual void CreditsSpawnActors();
334 virtual void WhatDoesThisDo(Player*, int8_t);
335 virtual void WhatDoesThisDoAI(Player*, int8_t);
336 virtual void SetStaffGhost();
337 virtual void Render(
struct UnkStruct_800DC5EC*);
338 virtual void RenderCredits();
339 virtual void Waypoints(Player* player, int8_t playerId);
340 virtual f32 GetWaterLevel(FVector pos, Collision* collision);
341 virtual void ScrollingTextures();
342 virtual void DrawWater(
struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
343 uint16_t playerDirection);
345 virtual bool IsMod();
struct Properties Properties
void ResizeMinimap(MinimapProps *minimap)
Definition Course.cpp:30
f32 Vec3f[3]
Definition common_structs.h:10
f32 Vec4f[4]
Definition common_structs.h:11
void Destroy()
Definition ImguiUI.cpp:97
@ f32
Definition GenericArray.h:59
struct StarData CloudData
MusicSeq
Definition sounds.h:118
Definition CoreMath.h:101
IVector2D Pos[2]
Definition Course.h:55
int16_t Width
Definition Course.h:53
RGB8 Colour
Definition Course.h:61
float FinishlineY
Definition Course.h:60
int32_t PlayerY
Definition Course.h:57
const char * Texture
Definition Course.h:52
float PlayerScaleFactor
Definition Course.h:58
float FinishlineX
Definition Course.h:59
int32_t PlayerX
Definition Course.h:56
int16_t Height
Definition Course.h:54
char Name[128]
Definition Course.h:67
uint8_t * CloudTexture
Definition Course.h:86
const course_texture * textures
Definition Course.h:90
_struct_gCoursePathSizes_0x10 PathSizes
Definition Course.h:79
CloudData * Clouds
Definition Course.h:87
Vec4f D_0D0096B8
Definition Course.h:82
Vec4f CurveTargetSpeed
Definition Course.h:80
float AIMaximumSeparation
Definition Course.h:73
TrackPathPoint * PathTable2[4]
Definition Course.h:85
float WaterLevel
Definition Course.h:92
int32_t LakituTowType
Definition Course.h:70
Vec4f OffTrackTargetSpeed
Definition Course.h:83
uint32_t AISteeringSensitivity
Definition Course.h:78
TrackPathPoint * PathTable[4]
Definition Course.h:84
const char * AIBehaviour
Definition Course.h:72
char CourseLength[128]
Definition Course.h:69
float NearPersp
Definition Course.h:75
SkyboxColours Skybox
Definition Course.h:89
float AIMinimumSeparation
Definition Course.h:74
enum MusicSeq Sequence
Definition Course.h:91
int16_t * AIDistance
Definition Course.h:77
char DebugName[128]
Definition Course.h:68
CloudData * CloudList
Definition Course.h:88
float FarPersp
Definition Course.h:76
MinimapProps Minimap
Definition Course.h:71
Vec4f NormalTargetSpeed
Definition Course.h:81
Definition common_structs.h:427
RGB8 BottomLeft
Definition Course.h:30
RGB8 FloorBottomRight
Definition Course.h:33
RGB8 BottomRight
Definition Course.h:29
RGB8 FloorBottomLeft
Definition Course.h:34
RGB8 TopRight
Definition Course.h:28
RGB8 TopLeft
Definition Course.h:31
RGB8 FloorTopRight
Definition Course.h:32
RGB8 FloorTopLeft
Definition Course.h:35
Definition waypoints.h:14
float Height
Definition Course.h:44
float MaxX
Definition Course.h:46
float MinZ
Definition Course.h:47
float MinX
Definition Course.h:45
float MaxZ
Definition Course.h:48
Definition path_spawn_metadata.h:9
Definition course_offsets.h:10