4#include <libultraship/libultraship.h>
10#include <nlohmann/json.hpp>
116 nlohmann::json to_json()
const {
151 j[
"MinimapPlayerX"] =
Minimap.PlayerX;
152 j[
"MinimapPlayerY"] =
Minimap.PlayerY;
153 j[
"MinimapPlayerScaleFactor"] =
Minimap.PlayerScaleFactor;
154 j[
"MinimapFinishlineX"] =
Minimap.FinishlineX;
155 j[
"MinimapFinishlineY"] =
Minimap.FinishlineY;
156 j[
"MinimapColour"] = {
static_cast<int>(
Minimap.Colour.r),
static_cast<int>(
Minimap.Colour.g),
static_cast<int>(
Minimap.Colour.b)};
159 #define TO_INT(value) static_cast<int>(value)
162 TO_INT(
Skybox.BottomRight.r), TO_INT(
Skybox.BottomRight.g), TO_INT(
Skybox.BottomRight.b),
163 TO_INT(
Skybox.BottomLeft.r), TO_INT(
Skybox.BottomLeft.g), TO_INT(
Skybox.BottomLeft.b),
165 TO_INT(
Skybox.FloorTopRight.r), TO_INT(
Skybox.FloorTopRight.g), TO_INT(
Skybox.FloorTopRight.b),
166 TO_INT(
Skybox.FloorBottomRight.r), TO_INT(
Skybox.FloorBottomRight.g), TO_INT(
Skybox.FloorBottomRight.b),
167 TO_INT(
Skybox.FloorBottomLeft.r), TO_INT(
Skybox.FloorBottomLeft.g), TO_INT(
Skybox.FloorBottomLeft.b),
168 TO_INT(
Skybox.FloorTopLeft.r), TO_INT(
Skybox.FloorTopLeft.g), TO_INT(
Skybox.FloorTopLeft.b)
170 j[
"Sequence"] =
static_cast<int>(
Sequence);
179 void from_json(
const nlohmann::json&
j) {
180 strncpy(
Name,
j.at(
"Name").get<std::string>().c_str(),
sizeof(
Name) - 1);
195 FarPersp =
j.at(
"FarPersp").get<
float>();
197 const auto temp =
j.at(
"AIDistance").get<std::vector<int16_t>>();
200 if (temp.size() == 32) {
202 std::copy(temp.begin(), temp.end(),
AIDistance);
204 printf(
"[Track.h] [from_json()] AIDistance array not size of 32\n");
221 D_0D0096B8[0] =
j.at(
"D_0D0096B8")[0].get<
float>();
222 D_0D0096B8[1] =
j.at(
"D_0D0096B8")[1].get<
float>();
223 D_0D0096B8[2] =
j.at(
"D_0D0096B8")[2].get<
float>();
224 D_0D0096B8[3] =
j.at(
"D_0D0096B8")[3].get<
float>();
235 Minimap.Pos[0].X =
j.at(
"MinimapPosition")[0].get<int32_t>();
236 Minimap.Pos[0].Y =
j.at(
"MinimapPosition")[1].get<int32_t>();
237 Minimap.Pos[1].X =
j.at(
"MinimapPosition2P")[0].get<int32_t>();
238 Minimap.Pos[1].Y =
j.at(
"MinimapPosition2P")[1].get<int32_t>();
239 Minimap.PlayerX =
j.at(
"MinimapPlayerX").get<int32_t>();
240 Minimap.PlayerY =
j.at(
"MinimapPlayerY").get<int32_t>();
241 Minimap.PlayerScaleFactor =
j.at(
"MinimapPlayerScaleFactor").get<
float>();
242 Minimap.FinishlineX =
j.at(
"MinimapFinishlineX").get<
float>();
243 Minimap.FinishlineY =
j.at(
"MinimapFinishlineY").get<
float>();
244 Minimap.Colour.r =
j.at(
"MinimapColour")[0].get<uint8_t>();
245 Minimap.Colour.g =
j.at(
"MinimapColour")[1].get<uint8_t>();
246 Minimap.Colour.b =
j.at(
"MinimapColour")[2].get<uint8_t>();
249 Skybox.TopRight.r =
j.at(
"Skybox")[0].get<uint8_t>();
250 Skybox.TopRight.g =
j.at(
"Skybox")[1].get<uint8_t>();
251 Skybox.TopRight.b =
j.at(
"Skybox")[2].get<uint8_t>();
253 Skybox.BottomRight.r =
j.at(
"Skybox")[3].get<uint8_t>();
254 Skybox.BottomRight.g =
j.at(
"Skybox")[4].get<uint8_t>();
255 Skybox.BottomRight.b =
j.at(
"Skybox")[5].get<uint8_t>();
257 Skybox.BottomLeft.r =
j.at(
"Skybox")[6].get<uint8_t>();
258 Skybox.BottomLeft.g =
j.at(
"Skybox")[7].get<uint8_t>();
259 Skybox.BottomLeft.b =
j.at(
"Skybox")[8].get<uint8_t>();
261 Skybox.TopLeft.r =
j.at(
"Skybox")[9].get<uint8_t>();
262 Skybox.TopLeft.g =
j.at(
"Skybox")[10].get<uint8_t>();
263 Skybox.TopLeft.b =
j.at(
"Skybox")[11].get<uint8_t>();
265 Skybox.FloorTopRight.r =
j.at(
"Skybox")[12].get<uint8_t>();
266 Skybox.FloorTopRight.g =
j.at(
"Skybox")[13].get<uint8_t>();
267 Skybox.FloorTopRight.b =
j.at(
"Skybox")[14].get<uint8_t>();
269 Skybox.FloorBottomRight.r =
j.at(
"Skybox")[15].get<uint8_t>();
270 Skybox.FloorBottomRight.g =
j.at(
"Skybox")[16].get<uint8_t>();
271 Skybox.FloorBottomRight.b =
j.at(
"Skybox")[17].get<uint8_t>();
273 Skybox.FloorBottomLeft.r =
j.at(
"Skybox")[18].get<uint8_t>();
274 Skybox.FloorBottomLeft.g =
j.at(
"Skybox")[19].get<uint8_t>();
275 Skybox.FloorBottomLeft.b =
j.at(
"Skybox")[20].get<uint8_t>();
277 Skybox.FloorTopLeft.r =
j.at(
"Skybox")[21].get<uint8_t>();
278 Skybox.FloorTopLeft.g =
j.at(
"Skybox")[22].get<uint8_t>();
279 Skybox.FloorTopLeft.b =
j.at(
"Skybox")[23].get<uint8_t>();
284 void SetText(
char* name,
const char* title,
size_t bufferSize) {
286 std::strncpy(name, title, bufferSize - 1);
287 name[bufferSize - 1] =
'\0';
290 const char* GetName() {
312 std::shared_ptr<Ship::Archive> Archive;
313 std::string ResourceName;
318 std::vector<WaterVolume> WaterVolumes;
320 bool bSpawnFinishline =
true;
321 std::optional<FVector> FinishlineSpawnPoint;
325 std::vector<SpawnParams> SpawnList;
327 bool bTourEnabled =
false;
328 std::vector<TourCamera::CameraShot> TourShots;
337 virtual void Load(Vtx* vtx, Gfx *gfx);
338 virtual void ParseTrackSections(TrackSections* sections,
size_t size);
344 virtual void BeginPlay();
346 virtual void TestPath();
347 virtual void InitClouds();
348 virtual void TickClouds(s32, Camera*);
349 virtual void SomeCollisionThing(Player *player,
Vec3f arg1,
Vec3f arg2,
Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7);
350 virtual void InitTrackObjects();
351 virtual void TickTrackObjects();
352 virtual void DrawTrackObjects(s32 cameraId);
353 virtual void SomeSounds();
354 virtual void CreditsSpawnActors();
355 virtual void WhatDoesThisDo(Player*, int8_t);
356 virtual void WhatDoesThisDoAI(Player*, int8_t);
357 virtual void SetStaffGhost();
358 virtual void Draw(ScreenContext*);
359 virtual void DrawCredits();
360 virtual void Waypoints(Player* player, int8_t playerId);
361 virtual f32 GetWaterLevel(FVector pos, Collision* collision);
362 virtual void ScrollingTextures();
364 virtual void DrawWater(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot,
365 uint16_t playerDirection);
367 virtual bool IsMod();
void RestoreTriangleWinding()
Definition Track.cpp:300
void InvertTriangleWindingByName(const char *name)
Definition Track.cpp:283
void ReverseGfx(Gfx *gfx)
void RestoreTriangleWinding()
Definition Track.cpp:300
struct Properties Properties
void ResizeMinimap(MinimapProps *minimap)
Definition Track.cpp:36
void InvertTriangleWinding(Gfx *gfx)
Definition Track.cpp:279
bool IsTriangleWindingInverted()
Definition Track.cpp:349
f32 Vec3f[3]
Definition common_structs.h:10
f32 Vec4f[4]
Definition common_structs.h:11
void Destroy()
Definition ImguiUI.cpp:90
@ f32
Definition GenericArray.h:59
void SpawnActors(std::vector< std::pair< std::string, SpawnParams > > spawnList)
struct StarData CloudData
MusicSeq
Definition sounds.h:118
Definition CoreMath.h:115
IVector2D Pos[2]
Definition Track.h:58
int16_t Width
Definition Track.h:56
RGB8 Colour
Definition Track.h:64
float FinishlineY
Definition Track.h:63
int32_t PlayerY
Definition Track.h:60
const char * Texture
Definition Track.h:55
float PlayerScaleFactor
Definition Track.h:61
float FinishlineX
Definition Track.h:62
int32_t PlayerX
Definition Track.h:59
int16_t Height
Definition Track.h:57
char Name[128]
Definition Track.h:89
uint8_t * CloudTexture
Definition Track.h:108
TrackPathPoint * PathTable2[5]
Definition Track.h:107
CloudData * Clouds
Definition Track.h:109
Vec4f D_0D0096B8
Definition Track.h:104
Vec4f CurveTargetSpeed
Definition Track.h:102
float AIMaximumSeparation
Definition Track.h:95
float WaterLevel
Definition Track.h:113
int32_t LakituTowType
Definition Track.h:92
Vec4f OffTrackTargetSpeed
Definition Track.h:105
uint32_t AISteeringSensitivity
Definition Track.h:100
TrackPathPoint * PathTable[4]
Definition Track.h:106
const char * AIBehaviour
Definition Track.h:94
TrackPathSizes PathSizes
Definition Track.h:101
float NearPersp
Definition Track.h:97
SkyboxColours Skybox
Definition Track.h:111
float AIMinimumSeparation
Definition Track.h:96
char TrackLength[128]
Definition Track.h:91
enum MusicSeq Sequence
Definition Track.h:112
int16_t * AIDistance
Definition Track.h:99
char DebugName[128]
Definition Track.h:90
CloudData * CloudList
Definition Track.h:110
float FarPersp
Definition Track.h:98
MinimapProps Minimap
Definition Track.h:93
Vec4f NormalTargetSpeed
Definition Track.h:103
Definition common_structs.h:427
RGB8 BottomLeft
Definition Track.h:33
RGB8 FloorBottomRight
Definition Track.h:36
RGB8 BottomRight
Definition Track.h:32
RGB8 FloorBottomLeft
Definition Track.h:37
RGB8 TopRight
Definition Track.h:31
RGB8 TopLeft
Definition Track.h:34
RGB8 FloorTopRight
Definition Track.h:35
RGB8 FloorTopLeft
Definition Track.h:38
Definition waypoints.h:14
Definition path_spawn_metadata.h:9
uint64_t crc
Definition Track.h:82
u8 sectionId
Definition Track.h:84
u8 surfaceType
Definition Track.h:83
u16 flags
Definition Track.h:85
float Height
Definition Track.h:47
float MaxX
Definition Track.h:49
float MinZ
Definition Track.h:50
float MinX
Definition Track.h:48
float MaxZ
Definition Track.h:51