4#include <libultraship/libultraship.h>
10#include <nlohmann/json.hpp>
118 nlohmann::json to_json()
const {
153 j[
"MinimapPlayerX"] =
Minimap.PlayerX;
154 j[
"MinimapPlayerY"] =
Minimap.PlayerY;
155 j[
"MinimapPlayerScaleFactor"] =
Minimap.PlayerScaleFactor;
156 j[
"MinimapFinishlineX"] =
Minimap.FinishlineX;
157 j[
"MinimapFinishlineY"] =
Minimap.FinishlineY;
158 j[
"MinimapColour"] = {
static_cast<int>(
Minimap.Colour.r),
static_cast<int>(
Minimap.Colour.g),
static_cast<int>(
Minimap.Colour.b)};
161 #define TO_INT(value) static_cast<int>(value)
164 TO_INT(
Skybox.BottomRight.r), TO_INT(
Skybox.BottomRight.g), TO_INT(
Skybox.BottomRight.b),
165 TO_INT(
Skybox.BottomLeft.r), TO_INT(
Skybox.BottomLeft.g), TO_INT(
Skybox.BottomLeft.b),
167 TO_INT(
Skybox.FloorTopRight.r), TO_INT(
Skybox.FloorTopRight.g), TO_INT(
Skybox.FloorTopRight.b),
168 TO_INT(
Skybox.FloorBottomRight.r), TO_INT(
Skybox.FloorBottomRight.g), TO_INT(
Skybox.FloorBottomRight.b),
169 TO_INT(
Skybox.FloorBottomLeft.r), TO_INT(
Skybox.FloorBottomLeft.g), TO_INT(
Skybox.FloorBottomLeft.b),
170 TO_INT(
Skybox.FloorTopLeft.r), TO_INT(
Skybox.FloorTopLeft.g), TO_INT(
Skybox.FloorTopLeft.b)
172 j[
"Sequence"] =
static_cast<int>(
Sequence);
181 void from_json(
const nlohmann::json&
j) {
182 strncpy(
Name,
j.at(
"Name").get<std::string>().c_str(),
sizeof(
Name) - 1);
197 FarPersp =
j.at(
"FarPersp").get<
float>();
199 const auto temp =
j.at(
"AIDistance").get<std::vector<int16_t>>();
202 if (temp.size() == 32) {
204 std::copy(temp.begin(), temp.end(),
AIDistance);
206 printf(
"[Track.h] [from_json()] AIDistance array not size of 32\n");
223 D_0D0096B8[0] =
j.at(
"D_0D0096B8")[0].get<
float>();
224 D_0D0096B8[1] =
j.at(
"D_0D0096B8")[1].get<
float>();
225 D_0D0096B8[2] =
j.at(
"D_0D0096B8")[2].get<
float>();
226 D_0D0096B8[3] =
j.at(
"D_0D0096B8")[3].get<
float>();
237 Minimap.Pos[0].X =
j.at(
"MinimapPosition")[0].get<int32_t>();
238 Minimap.Pos[0].Y =
j.at(
"MinimapPosition")[1].get<int32_t>();
239 Minimap.Pos[1].X =
j.at(
"MinimapPosition2P")[0].get<int32_t>();
240 Minimap.Pos[1].Y =
j.at(
"MinimapPosition2P")[1].get<int32_t>();
241 Minimap.PlayerX =
j.at(
"MinimapPlayerX").get<int32_t>();
242 Minimap.PlayerY =
j.at(
"MinimapPlayerY").get<int32_t>();
243 Minimap.PlayerScaleFactor =
j.at(
"MinimapPlayerScaleFactor").get<
float>();
244 Minimap.FinishlineX =
j.at(
"MinimapFinishlineX").get<
float>();
245 Minimap.FinishlineY =
j.at(
"MinimapFinishlineY").get<
float>();
246 Minimap.Colour.r =
j.at(
"MinimapColour")[0].get<uint8_t>();
247 Minimap.Colour.g =
j.at(
"MinimapColour")[1].get<uint8_t>();
248 Minimap.Colour.b =
j.at(
"MinimapColour")[2].get<uint8_t>();
251 Skybox.TopRight.r =
j.at(
"Skybox")[0].get<uint8_t>();
252 Skybox.TopRight.g =
j.at(
"Skybox")[1].get<uint8_t>();
253 Skybox.TopRight.b =
j.at(
"Skybox")[2].get<uint8_t>();
255 Skybox.BottomRight.r =
j.at(
"Skybox")[3].get<uint8_t>();
256 Skybox.BottomRight.g =
j.at(
"Skybox")[4].get<uint8_t>();
257 Skybox.BottomRight.b =
j.at(
"Skybox")[5].get<uint8_t>();
259 Skybox.BottomLeft.r =
j.at(
"Skybox")[6].get<uint8_t>();
260 Skybox.BottomLeft.g =
j.at(
"Skybox")[7].get<uint8_t>();
261 Skybox.BottomLeft.b =
j.at(
"Skybox")[8].get<uint8_t>();
263 Skybox.TopLeft.r =
j.at(
"Skybox")[9].get<uint8_t>();
264 Skybox.TopLeft.g =
j.at(
"Skybox")[10].get<uint8_t>();
265 Skybox.TopLeft.b =
j.at(
"Skybox")[11].get<uint8_t>();
267 Skybox.FloorTopRight.r =
j.at(
"Skybox")[12].get<uint8_t>();
268 Skybox.FloorTopRight.g =
j.at(
"Skybox")[13].get<uint8_t>();
269 Skybox.FloorTopRight.b =
j.at(
"Skybox")[14].get<uint8_t>();
271 Skybox.FloorBottomRight.r =
j.at(
"Skybox")[15].get<uint8_t>();
272 Skybox.FloorBottomRight.g =
j.at(
"Skybox")[16].get<uint8_t>();
273 Skybox.FloorBottomRight.b =
j.at(
"Skybox")[17].get<uint8_t>();
275 Skybox.FloorBottomLeft.r =
j.at(
"Skybox")[18].get<uint8_t>();
276 Skybox.FloorBottomLeft.g =
j.at(
"Skybox")[19].get<uint8_t>();
277 Skybox.FloorBottomLeft.b =
j.at(
"Skybox")[20].get<uint8_t>();
279 Skybox.FloorTopLeft.r =
j.at(
"Skybox")[21].get<uint8_t>();
280 Skybox.FloorTopLeft.g =
j.at(
"Skybox")[22].get<uint8_t>();
281 Skybox.FloorTopLeft.b =
j.at(
"Skybox")[23].get<uint8_t>();
286 void SetText(
char* name,
const char* title,
size_t bufferSize) {
288 std::strncpy(name, title, bufferSize - 1);
289 name[bufferSize - 1] =
'\0';
292 const char* GetName() {
313 enum class CloudType {
320 std::shared_ptr<Ship::Archive> Archive;
321 std::string ResourceName;
324 enum CloudType mCloudType;
328 std::vector<WaterVolume> WaterVolumes;
330 bool bSpawnFinishline =
true;
331 std::optional<FVector> FinishlineSpawnPoint;
334 std::vector<SpawnParams> SpawnList;
336 bool bTourEnabled =
false;
337 std::vector<TourCamera::CameraShot> TourShots;
346 virtual void Load(Vtx* vtx, Gfx *gfx);
352 virtual void BeginPlay();
354 virtual void SomeCollisionThing(Player *player,
Vec3f arg1,
Vec3f arg2,
Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7);
355 virtual void InitTrackObjects();
356 virtual void TickTrackObjects();
357 virtual void DrawTrackObjects(s32 cameraId);
358 virtual void SomeSounds();
359 virtual void CreditsSpawnActors();
360 virtual void WhatDoesThisDo(Player*, int8_t);
361 virtual void WhatDoesThisDoAI(Player*, int8_t);
362 virtual void SetStaffGhost();
363 virtual void Draw(ScreenContext*);
364 virtual void DrawCredits();
365 virtual void Waypoints(Player* player, int8_t playerId);
366 virtual f32 GetWaterLevel(FVector pos, Collision* collision);
369 virtual void DrawTransparency(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot,
370 uint16_t playerDirection);
374 virtual bool IsMod() {
return false; };
void RestoreTriangleWinding()
Definition Track.cpp:293
void InvertTriangleWindingModdedInternal(Gfx *gfx, const char *gfxName)
Definition Track.cpp:193
void InvertTriangleWindingByName(const char *name)
Definition Track.cpp:284
void ReverseGfx(Gfx *gfx)
void RestoreTriangleWinding()
Definition Track.cpp:293
struct Properties Properties
void ResizeMinimap(MinimapProps *minimap)
Definition Track.cpp:37
void InvertTriangleWinding(Gfx *gfx)
Definition Track.cpp:280
bool IsTriangleWindingInverted()
Definition Track.cpp:342
f32 Vec3f[3]
Definition common_structs.h:10
f32 Vec4f[4]
Definition common_structs.h:11
@ SNOW
Definition mk64.h:91
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:119
Definition CoreMath.h:119
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:91
uint8_t * CloudTexture
Definition Track.h:110
TrackPathPoint * PathTable2[5]
Definition Track.h:109
CloudData * Clouds
Definition Track.h:111
Vec4f D_0D0096B8
Definition Track.h:106
Vec4f CurveTargetSpeed
Definition Track.h:104
float AIMaximumSeparation
Definition Track.h:97
float WaterLevel
Definition Track.h:115
int32_t LakituTowType
Definition Track.h:94
Vec4f OffTrackTargetSpeed
Definition Track.h:107
uint32_t AISteeringSensitivity
Definition Track.h:102
TrackPathPoint * PathTable[4]
Definition Track.h:108
const char * AIBehaviour
Definition Track.h:96
TrackPathSizes PathSizes
Definition Track.h:103
float NearPersp
Definition Track.h:99
SkyboxColours Skybox
Definition Track.h:113
float AIMinimumSeparation
Definition Track.h:98
char TrackLength[128]
Definition Track.h:93
enum MusicSeq Sequence
Definition Track.h:114
int16_t * AIDistance
Definition Track.h:101
char DebugName[128]
Definition Track.h:92
CloudData * CloudList
Definition Track.h:112
float FarPersp
Definition Track.h:100
MinimapProps Minimap
Definition Track.h:95
Vec4f NormalTargetSpeed
Definition Track.h:105
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
u16 layer
Definition Track.h:86
u8 surfaceType
Definition Track.h:83
u16 clip
Definition Track.h:85
Vec3f location
Definition Track.h:87
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