4#include <libultraship.h>
93 nlohmann::json to_json()
const {
129 j[
"MinimapPlayerX"] =
Minimap.PlayerX;
130 j[
"MinimapPlayerY"] =
Minimap.PlayerY;
131 j[
"MinimapPlayerScaleFactor"] =
Minimap.PlayerScaleFactor;
132 j[
"MinimapFinishlineX"] =
Minimap.FinishlineX;
133 j[
"MinimapFinishlineY"] =
Minimap.FinishlineY;
134 j[
"MinimapColour"] = {
static_cast<int>(
Minimap.Colour.r),
static_cast<int>(
Minimap.Colour.g),
static_cast<int>(
Minimap.Colour.b)};
137 #define TO_INT(value) static_cast<int>(value)
140 TO_INT(
Skybox.BottomRight.r), TO_INT(
Skybox.BottomRight.g), TO_INT(
Skybox.BottomRight.b),
141 TO_INT(
Skybox.BottomLeft.r), TO_INT(
Skybox.BottomLeft.g), TO_INT(
Skybox.BottomLeft.b),
143 TO_INT(
Skybox.FloorTopRight.r), TO_INT(
Skybox.FloorTopRight.g), TO_INT(
Skybox.FloorTopRight.b),
144 TO_INT(
Skybox.FloorBottomRight.r), TO_INT(
Skybox.FloorBottomRight.g), TO_INT(
Skybox.FloorBottomRight.b),
145 TO_INT(
Skybox.FloorBottomLeft.r), TO_INT(
Skybox.FloorBottomLeft.g), TO_INT(
Skybox.FloorBottomLeft.b),
146 TO_INT(
Skybox.FloorTopLeft.r), TO_INT(
Skybox.FloorTopLeft.g), TO_INT(
Skybox.FloorTopLeft.b)
148 j[
"Sequence"] =
static_cast<int>(
Sequence);
157 void from_json(
const nlohmann::json&
j) {
160 strncpy(
Name,
j.at(
"Name").get<std::string>().c_str(),
sizeof(
Name) - 1);
177 FarPersp =
j.at(
"FarPersp").get<
float>();
179 const auto temp =
j.at(
"AIDistance").get<std::vector<int16_t>>();
182 if (temp.size() == 32) {
184 std::copy(temp.begin(), temp.end(),
AIDistance);
186 printf(
"Course::from_json() AIDistance array not size of 32\n");
203 D_0D0096B8[0] =
j.at(
"D_0D0096B8")[0].get<
float>();
204 D_0D0096B8[1] =
j.at(
"D_0D0096B8")[1].get<
float>();
205 D_0D0096B8[2] =
j.at(
"D_0D0096B8")[2].get<
float>();
206 D_0D0096B8[3] =
j.at(
"D_0D0096B8")[3].get<
float>();
217 Minimap.Pos[0].X =
j.at(
"MinimapPosition")[0].get<int32_t>();
218 Minimap.Pos[0].Y =
j.at(
"MinimapPosition")[1].get<int32_t>();
219 Minimap.Pos[1].X =
j.at(
"MinimapPosition2P")[0].get<int32_t>();
220 Minimap.Pos[1].Y =
j.at(
"MinimapPosition2P")[1].get<int32_t>();
221 Minimap.PlayerX =
j.at(
"MinimapPlayerX").get<int32_t>();
222 Minimap.PlayerY =
j.at(
"MinimapPlayerY").get<int32_t>();
223 Minimap.PlayerScaleFactor =
j.at(
"MinimapPlayerScaleFactor").get<
float>();
224 Minimap.FinishlineX =
j.at(
"MinimapFinishlineX").get<
float>();
225 Minimap.FinishlineY =
j.at(
"MinimapFinishlineY").get<
float>();
226 Minimap.Colour.r =
j.at(
"MinimapColour")[0].get<uint8_t>();
227 Minimap.Colour.g =
j.at(
"MinimapColour")[1].get<uint8_t>();
228 Minimap.Colour.b =
j.at(
"MinimapColour")[2].get<uint8_t>();
231 Skybox.TopRight.r =
j.at(
"Skybox")[0].get<uint8_t>();
232 Skybox.TopRight.g =
j.at(
"Skybox")[1].get<uint8_t>();
233 Skybox.TopRight.b =
j.at(
"Skybox")[2].get<uint8_t>();
235 Skybox.BottomRight.r =
j.at(
"Skybox")[3].get<uint8_t>();
236 Skybox.BottomRight.g =
j.at(
"Skybox")[4].get<uint8_t>();
237 Skybox.BottomRight.b =
j.at(
"Skybox")[5].get<uint8_t>();
239 Skybox.BottomLeft.r =
j.at(
"Skybox")[6].get<uint8_t>();
240 Skybox.BottomLeft.g =
j.at(
"Skybox")[7].get<uint8_t>();
241 Skybox.BottomLeft.b =
j.at(
"Skybox")[8].get<uint8_t>();
243 Skybox.TopLeft.r =
j.at(
"Skybox")[9].get<uint8_t>();
244 Skybox.TopLeft.g =
j.at(
"Skybox")[10].get<uint8_t>();
245 Skybox.TopLeft.b =
j.at(
"Skybox")[11].get<uint8_t>();
247 Skybox.FloorTopRight.r =
j.at(
"Skybox")[12].get<uint8_t>();
248 Skybox.FloorTopRight.g =
j.at(
"Skybox")[13].get<uint8_t>();
249 Skybox.FloorTopRight.b =
j.at(
"Skybox")[14].get<uint8_t>();
251 Skybox.FloorBottomRight.r =
j.at(
"Skybox")[15].get<uint8_t>();
252 Skybox.FloorBottomRight.g =
j.at(
"Skybox")[16].get<uint8_t>();
253 Skybox.FloorBottomRight.b =
j.at(
"Skybox")[17].get<uint8_t>();
255 Skybox.FloorBottomLeft.r =
j.at(
"Skybox")[18].get<uint8_t>();
256 Skybox.FloorBottomLeft.g =
j.at(
"Skybox")[19].get<uint8_t>();
257 Skybox.FloorBottomLeft.b =
j.at(
"Skybox")[20].get<uint8_t>();
259 Skybox.FloorTopLeft.r =
j.at(
"Skybox")[21].get<uint8_t>();
260 Skybox.FloorTopLeft.g =
j.at(
"Skybox")[22].get<uint8_t>();
261 Skybox.FloorTopLeft.b =
j.at(
"Skybox")[23].get<uint8_t>();
266 void SetText(
char* name,
const char* title,
size_t bufferSize) {
268 std::strncpy(name, title, bufferSize - 1);
269 name[bufferSize - 1] =
'\0';
272 const char* GetName() {
297 std::vector<WaterVolume> WaterVolumes;
299 const char* vtx =
nullptr;
300 const char* gfx =
nullptr;
302 const course_texture* textures =
nullptr;
303 bool bSpawnFinishline =
true;
304 std::optional<FVector> FinishlineSpawnPoint;
305 std::string TrackSectionsPtr;
308 virtual ~Course() =
default;
312 virtual void LoadO2R(std::string trackPath);
314 virtual void Load(Vtx* vtx, Gfx *gfx);
315 virtual void LoadTextures();
316 virtual void ParseCourseSections(TrackSectionsO2R* sections,
size_t size);
322 virtual void BeginPlay();
323 virtual void TestPath();
324 virtual void InitClouds();
325 virtual void UpdateClouds(s32, Camera*);
326 virtual void SomeCollisionThing(Player *player,
Vec3f arg1,
Vec3f arg2,
Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7);
327 virtual void InitCourseObjects();
328 virtual void UpdateCourseObjects();
329 virtual void RenderCourseObjects(s32 cameraId);
330 virtual void SomeSounds();
331 virtual void CreditsSpawnActors();
332 virtual void WhatDoesThisDo(Player*, int8_t);
333 virtual void WhatDoesThisDoAI(Player*, int8_t);
334 virtual void SetStaffGhost();
335 virtual void Render(
struct UnkStruct_800DC5EC*);
336 virtual void RenderCredits();
337 virtual void Waypoints(Player* player, int8_t playerId);
338 virtual f32 GetWaterLevel(FVector pos, Collision* collision);
339 virtual void ScrollingTextures();
340 virtual void DrawWater(
struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
341 uint16_t playerDirection);
343 virtual bool IsMod();
struct Properties Properties
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:65
uint8_t * CloudTexture
Definition Course.h:84
const course_texture * textures
Definition Course.h:88
_struct_gCoursePathSizes_0x10 PathSizes
Definition Course.h:77
CloudData * Clouds
Definition Course.h:85
Vec4f D_0D0096B8
Definition Course.h:80
Vec4f CurveTargetSpeed
Definition Course.h:78
float AIMaximumSeparation
Definition Course.h:71
TrackPathPoint * PathTable2[4]
Definition Course.h:83
float WaterLevel
Definition Course.h:90
int32_t LakituTowType
Definition Course.h:68
Vec4f OffTrackTargetSpeed
Definition Course.h:81
uint32_t AISteeringSensitivity
Definition Course.h:76
TrackPathPoint * PathTable[4]
Definition Course.h:82
const char * AIBehaviour
Definition Course.h:70
char CourseLength[128]
Definition Course.h:67
float NearPersp
Definition Course.h:73
SkyboxColours Skybox
Definition Course.h:87
float AIMinimumSeparation
Definition Course.h:72
enum MusicSeq Sequence
Definition Course.h:89
int16_t * AIDistance
Definition Course.h:75
char DebugName[128]
Definition Course.h:66
CloudData * CloudList
Definition Course.h:86
float FarPersp
Definition Course.h:74
MinimapProps Minimap
Definition Course.h:69
Vec4f NormalTargetSpeed
Definition Course.h:79
Definition common_structs.h:411
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