4#include <libultraship/libultraship.h>
10#include <nlohmann/json.hpp>
98 nlohmann::json to_json()
const {
134 j[
"MinimapPlayerX"] =
Minimap.PlayerX;
135 j[
"MinimapPlayerY"] =
Minimap.PlayerY;
136 j[
"MinimapPlayerScaleFactor"] =
Minimap.PlayerScaleFactor;
137 j[
"MinimapFinishlineX"] =
Minimap.FinishlineX;
138 j[
"MinimapFinishlineY"] =
Minimap.FinishlineY;
139 j[
"MinimapColour"] = {
static_cast<int>(
Minimap.Colour.r),
static_cast<int>(
Minimap.Colour.g),
static_cast<int>(
Minimap.Colour.b)};
142 #define TO_INT(value) static_cast<int>(value)
145 TO_INT(
Skybox.BottomRight.r), TO_INT(
Skybox.BottomRight.g), TO_INT(
Skybox.BottomRight.b),
146 TO_INT(
Skybox.BottomLeft.r), TO_INT(
Skybox.BottomLeft.g), TO_INT(
Skybox.BottomLeft.b),
148 TO_INT(
Skybox.FloorTopRight.r), TO_INT(
Skybox.FloorTopRight.g), TO_INT(
Skybox.FloorTopRight.b),
149 TO_INT(
Skybox.FloorBottomRight.r), TO_INT(
Skybox.FloorBottomRight.g), TO_INT(
Skybox.FloorBottomRight.b),
150 TO_INT(
Skybox.FloorBottomLeft.r), TO_INT(
Skybox.FloorBottomLeft.g), TO_INT(
Skybox.FloorBottomLeft.b),
151 TO_INT(
Skybox.FloorTopLeft.r), TO_INT(
Skybox.FloorTopLeft.g), TO_INT(
Skybox.FloorTopLeft.b)
153 j[
"Sequence"] =
static_cast<int>(
Sequence);
162 void from_json(
const nlohmann::json&
j) {
165 strncpy(
Name,
j.at(
"Name").get<std::string>().c_str(),
sizeof(
Name) - 1);
182 FarPersp =
j.at(
"FarPersp").get<
float>();
184 const auto temp =
j.at(
"AIDistance").get<std::vector<int16_t>>();
187 if (temp.size() == 32) {
189 std::copy(temp.begin(), temp.end(),
AIDistance);
191 printf(
"Course::from_json() AIDistance array not size of 32\n");
208 D_0D0096B8[0] =
j.at(
"D_0D0096B8")[0].get<
float>();
209 D_0D0096B8[1] =
j.at(
"D_0D0096B8")[1].get<
float>();
210 D_0D0096B8[2] =
j.at(
"D_0D0096B8")[2].get<
float>();
211 D_0D0096B8[3] =
j.at(
"D_0D0096B8")[3].get<
float>();
222 Minimap.Pos[0].X =
j.at(
"MinimapPosition")[0].get<int32_t>();
223 Minimap.Pos[0].Y =
j.at(
"MinimapPosition")[1].get<int32_t>();
224 Minimap.Pos[1].X =
j.at(
"MinimapPosition2P")[0].get<int32_t>();
225 Minimap.Pos[1].Y =
j.at(
"MinimapPosition2P")[1].get<int32_t>();
226 Minimap.PlayerX =
j.at(
"MinimapPlayerX").get<int32_t>();
227 Minimap.PlayerY =
j.at(
"MinimapPlayerY").get<int32_t>();
228 Minimap.PlayerScaleFactor =
j.at(
"MinimapPlayerScaleFactor").get<
float>();
229 Minimap.FinishlineX =
j.at(
"MinimapFinishlineX").get<
float>();
230 Minimap.FinishlineY =
j.at(
"MinimapFinishlineY").get<
float>();
231 Minimap.Colour.r =
j.at(
"MinimapColour")[0].get<uint8_t>();
232 Minimap.Colour.g =
j.at(
"MinimapColour")[1].get<uint8_t>();
233 Minimap.Colour.b =
j.at(
"MinimapColour")[2].get<uint8_t>();
236 Skybox.TopRight.r =
j.at(
"Skybox")[0].get<uint8_t>();
237 Skybox.TopRight.g =
j.at(
"Skybox")[1].get<uint8_t>();
238 Skybox.TopRight.b =
j.at(
"Skybox")[2].get<uint8_t>();
240 Skybox.BottomRight.r =
j.at(
"Skybox")[3].get<uint8_t>();
241 Skybox.BottomRight.g =
j.at(
"Skybox")[4].get<uint8_t>();
242 Skybox.BottomRight.b =
j.at(
"Skybox")[5].get<uint8_t>();
244 Skybox.BottomLeft.r =
j.at(
"Skybox")[6].get<uint8_t>();
245 Skybox.BottomLeft.g =
j.at(
"Skybox")[7].get<uint8_t>();
246 Skybox.BottomLeft.b =
j.at(
"Skybox")[8].get<uint8_t>();
248 Skybox.TopLeft.r =
j.at(
"Skybox")[9].get<uint8_t>();
249 Skybox.TopLeft.g =
j.at(
"Skybox")[10].get<uint8_t>();
250 Skybox.TopLeft.b =
j.at(
"Skybox")[11].get<uint8_t>();
252 Skybox.FloorTopRight.r =
j.at(
"Skybox")[12].get<uint8_t>();
253 Skybox.FloorTopRight.g =
j.at(
"Skybox")[13].get<uint8_t>();
254 Skybox.FloorTopRight.b =
j.at(
"Skybox")[14].get<uint8_t>();
256 Skybox.FloorBottomRight.r =
j.at(
"Skybox")[15].get<uint8_t>();
257 Skybox.FloorBottomRight.g =
j.at(
"Skybox")[16].get<uint8_t>();
258 Skybox.FloorBottomRight.b =
j.at(
"Skybox")[17].get<uint8_t>();
260 Skybox.FloorBottomLeft.r =
j.at(
"Skybox")[18].get<uint8_t>();
261 Skybox.FloorBottomLeft.g =
j.at(
"Skybox")[19].get<uint8_t>();
262 Skybox.FloorBottomLeft.b =
j.at(
"Skybox")[20].get<uint8_t>();
264 Skybox.FloorTopLeft.r =
j.at(
"Skybox")[21].get<uint8_t>();
265 Skybox.FloorTopLeft.g =
j.at(
"Skybox")[22].get<uint8_t>();
266 Skybox.FloorTopLeft.b =
j.at(
"Skybox")[23].get<uint8_t>();
271 void SetText(
char* name,
const char* title,
size_t bufferSize) {
273 std::strncpy(name, title, bufferSize - 1);
274 name[bufferSize - 1] =
'\0';
277 const char* GetName() {
303 std::vector<WaterVolume> WaterVolumes;
305 const char* vtx =
nullptr;
306 const char* gfx =
nullptr;
308 const course_texture* textures =
nullptr;
309 bool bSpawnFinishline =
true;
310 std::optional<FVector> FinishlineSpawnPoint;
313 std::shared_ptr<Ship::Archive> RootArchive;
314 std::string SceneFilePtr;
315 std::string TrackSectionsPtr;
318 std::vector<SpawnParams> SpawnList;
320 virtual ~Course() =
default;
324 virtual void LoadO2R(std::string trackPath);
326 virtual void Load(Vtx* vtx, Gfx *gfx);
327 virtual void LoadTextures();
328 virtual void ParseCourseSections(TrackSectionsO2R* sections,
size_t size);
334 virtual void BeginPlay();
336 virtual void TestPath();
337 virtual void InitClouds();
338 virtual void UpdateClouds(s32, Camera*);
339 virtual void SomeCollisionThing(Player *player,
Vec3f arg1,
Vec3f arg2,
Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7);
340 virtual void InitCourseObjects();
341 virtual void UpdateCourseObjects();
342 virtual void RenderCourseObjects(s32 cameraId);
343 virtual void SomeSounds();
344 virtual void CreditsSpawnActors();
345 virtual void WhatDoesThisDo(Player*, int8_t);
346 virtual void WhatDoesThisDoAI(Player*, int8_t);
347 virtual void SetStaffGhost();
348 virtual void Render(
struct UnkStruct_800DC5EC*);
349 virtual void RenderCredits();
350 virtual void Waypoints(Player* player, int8_t playerId);
351 virtual f32 GetWaterLevel(FVector pos, Collision* collision);
352 virtual void ScrollingTextures();
353 virtual void DrawWater(
struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
354 uint16_t playerDirection);
356 virtual bool IsMod();
struct Properties Properties
void ResizeMinimap(MinimapProps *minimap)
Definition Course.cpp:33
f32 Vec3f[3]
Definition common_structs.h:10
f32 Vec4f[4]
Definition common_structs.h:11
void SpawnActors(std::vector< std::pair< std::string, SpawnParams > > spawnList)
void Destroy()
Definition ImguiUI.cpp:97
@ f32
Definition GenericArray.h:59
struct StarData CloudData
MusicSeq
Definition sounds.h:118
Definition CoreMath.h:115
IVector2D Pos[2]
Definition Course.h:58
int16_t Width
Definition Course.h:56
RGB8 Colour
Definition Course.h:64
float FinishlineY
Definition Course.h:63
int32_t PlayerY
Definition Course.h:60
const char * Texture
Definition Course.h:55
float PlayerScaleFactor
Definition Course.h:61
float FinishlineX
Definition Course.h:62
int32_t PlayerX
Definition Course.h:59
int16_t Height
Definition Course.h:57
char Name[128]
Definition Course.h:70
uint8_t * CloudTexture
Definition Course.h:89
const course_texture * textures
Definition Course.h:93
_struct_gCoursePathSizes_0x10 PathSizes
Definition Course.h:82
TrackPathPoint * PathTable2[5]
Definition Course.h:88
CloudData * Clouds
Definition Course.h:90
Vec4f D_0D0096B8
Definition Course.h:85
Vec4f CurveTargetSpeed
Definition Course.h:83
float AIMaximumSeparation
Definition Course.h:76
float WaterLevel
Definition Course.h:95
int32_t LakituTowType
Definition Course.h:73
Vec4f OffTrackTargetSpeed
Definition Course.h:86
uint32_t AISteeringSensitivity
Definition Course.h:81
TrackPathPoint * PathTable[4]
Definition Course.h:87
const char * AIBehaviour
Definition Course.h:75
char CourseLength[128]
Definition Course.h:72
float NearPersp
Definition Course.h:78
SkyboxColours Skybox
Definition Course.h:92
float AIMinimumSeparation
Definition Course.h:77
enum MusicSeq Sequence
Definition Course.h:94
int16_t * AIDistance
Definition Course.h:80
char DebugName[128]
Definition Course.h:71
CloudData * CloudList
Definition Course.h:91
float FarPersp
Definition Course.h:79
MinimapProps Minimap
Definition Course.h:74
Vec4f NormalTargetSpeed
Definition Course.h:84
Definition common_structs.h:427
RGB8 BottomLeft
Definition Course.h:33
RGB8 FloorBottomRight
Definition Course.h:36
RGB8 BottomRight
Definition Course.h:32
RGB8 FloorBottomLeft
Definition Course.h:37
RGB8 TopRight
Definition Course.h:31
RGB8 TopLeft
Definition Course.h:34
RGB8 FloorTopRight
Definition Course.h:35
RGB8 FloorTopLeft
Definition Course.h:38
Definition waypoints.h:14
float Height
Definition Course.h:47
float MaxX
Definition Course.h:49
float MinZ
Definition Course.h:50
float MinX
Definition Course.h:48
float MaxZ
Definition Course.h:51
Definition path_spawn_metadata.h:9
Definition course_offsets.h:10