diff options
Diffstat (limited to 'src/engine')
171 files changed, 4309 insertions, 5851 deletions
diff --git a/src/engine/Actor.cpp b/src/engine/Actor.cpp index f3254fed0..c1c2ea0c3 100644 --- a/src/engine/Actor.cpp +++ b/src/engine/Actor.cpp @@ -7,30 +7,36 @@ extern "C" { #include "math_util.h" } -AActor::AActor() {} +AActor::AActor() { +} // Virtual functions to be overridden by derived classes -void AActor::Tick() { } -void AActor::Draw(Camera *camera) { +void AActor::Tick() { +} +void AActor::Draw(Camera* camera) { if (Model) { Mat4 mtx; gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - ApplyMatrixTransformations(mtx, *(FVector*)Pos, *(IRotator*)Rot, Scale); + ApplyMatrixTransformations(mtx, *(FVector*) Pos, *(IRotator*) Rot, Scale); if (render_set_position(mtx, 0) != 0) { gSPDisplayList(gDisplayListHead++, Model); } } } -void AActor::Collision(Player* player, AActor* actor) {} -void AActor::VehicleCollision(s32 playerId, Player* player){} +void AActor::Collision(Player* player, AActor* actor) { +} +void AActor::VehicleCollision(s32 playerId, Player* player) { +} void AActor::Destroy() { // Set uuid to zero. memset(uuid, 0, sizeof(uuid)); } -bool AActor::IsMod() { return false; } +bool AActor::IsMod() { + return false; +} void AActor::SetLocation(FVector pos) { Pos[0] = pos.x; Pos[1] = pos.y; diff --git a/src/engine/Actor.h b/src/engine/Actor.h index fb0a9f89e..c287329a4 100644 --- a/src/engine/Actor.h +++ b/src/engine/Actor.h @@ -9,28 +9,26 @@ extern "C" { #include "camera.h" #include "common_structs.h" - class AActor { -public: - + public: /* 0x00 */ s16 Type = 0; /* 0x02 */ s16 Flags; /* 0x04 */ s16 Unk_04; /* 0x06 */ s16 State; /* 0x08 */ f32 Unk_08; /* 0x0C */ f32 BoundingBoxSize; - /* 0x10 */ Vec3s Rot = {0, 0, 0}; + /* 0x10 */ Vec3s Rot = { 0, 0, 0 }; /* 0x16 */ s16 Unk_16; /* 0x18 */ Vec3f Pos; - /* 0x24 */ Vec3f Velocity = {0, 0, 0}; + /* 0x24 */ Vec3f Velocity = { 0, 0, 0 }; /* 0x30 */ Collision Unk30; uint8_t uuid[16]; const char* Name = ""; - FVector Scale = {1, 1, 1}; + FVector Scale = { 1, 1, 1 }; Gfx* Model = NULL; - virtual ~AActor() = default; // Virtual destructor for proper cleanup in derived classes + virtual ~AActor() = default; // Virtual destructor for proper cleanup in derived classes explicit AActor(); @@ -44,5 +42,4 @@ public: virtual void Destroy(); virtual bool IsMod(); }; - -}
\ No newline at end of file +} diff --git a/src/engine/AllActors.h b/src/engine/AllActors.h index f2b228b57..78e37a271 100644 --- a/src/engine/AllActors.h +++ b/src/engine/AllActors.h @@ -36,4 +36,3 @@ #include "objects/Snowman.h" #include "objects/Podium.h" #include "objects/GrandPrixBalloons.h" - diff --git a/src/engine/CoreMath.h b/src/engine/CoreMath.h index 2c232aab9..20c7479c9 100644 --- a/src/engine/CoreMath.h +++ b/src/engine/CoreMath.h @@ -5,13 +5,13 @@ /** * @file CoreMath.h - * + * * Basic vector structs for manipulating 2D and 3D coordinates - * + * */ /** - * + * * Applies pos, rot, and scale * */ @@ -38,13 +38,8 @@ struct FVector { return x * other.x + y * other.y + z * other.z; } - FVector Cross(const FVector& other) const { - return FVector( - y * other.z - z * other.y, - z * other.x - x * other.z, - x * other.y - y * other.x - ); + return FVector(y * other.z - z * other.y, z * other.x - x * other.z, x * other.y - y * other.x); } float Magnitude() const { @@ -54,15 +49,15 @@ struct FVector { FVector Normalize() const { float len = std::sqrt(x * x + y * y + z * z); if (len > 0.0001f) { - return FVector( - x / len, y / len, z / len - ); + return FVector(x / len, y / len, z / len); } return FVector(0, 0, 0); } - FVector() : x(0), y(0), z(0) {} - FVector(float x, float y, float z) : x(x), y(y), z(z) {} + FVector() : x(0), y(0), z(0) { + } + FVector(float x, float y, float z) : x(x), y(y), z(z) { + } #endif // __cplusplus }; @@ -71,8 +66,10 @@ struct FVector4 { #ifdef __cplusplus - FVector4() : x(0), y(0), z(0), w(0) {} - FVector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {} + FVector4() : x(0), y(0), z(0), w(0) { + } + FVector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) { + } #endif // __cplusplus }; @@ -92,8 +89,10 @@ struct FVector2D { return *this; } - FVector2D() : x(0), z(0) {} - FVector2D(float x, float z) : x(x), z(z) {} + FVector2D() : x(0), z(0) { + } + FVector2D(float x, float z) : x(x), z(z) { + } #endif // __cplusplus }; @@ -102,10 +101,11 @@ typedef struct IVector2D { int32_t X, Y; #ifdef __cplusplus - IVector2D() : X(0), Y(0) {} // Default constructor - - IVector2D(int32_t x, int32_t y) : X(x), Y(y) {} // Constructor to initialize with values + IVector2D() : X(0), Y(0) { + } // Default constructor + IVector2D(int32_t x, int32_t y) : X(x), Y(y) { + } // Constructor to initialize with values IVector2D& operator=(const IVector2D& other) { X = other.X; @@ -116,9 +116,8 @@ typedef struct IVector2D { } IVector2D; /** - * This struct immediately converts float pitch/yaw/roll in degrees to n64 int16_t binary angles 0-0xFFFF == 0-360 degrees - * ToDegrees() Receive an FRotator of float degrees back. - * Set() Set an n64 int16_t binary angles 0-0xFFFF + * This struct immediately converts float pitch/yaw/roll in degrees to n64 int16_t binary angles 0-0xFFFF == 0-360 + * degrees ToDegrees() Receive an FRotator of float degrees back. Set() Set an n64 int16_t binary angles 0-0xFFFF */ struct IRotator { uint16_t pitch, yaw, roll; @@ -126,8 +125,8 @@ struct IRotator { #ifdef __cplusplus IRotator& operator=(const IRotator& other) { pitch = other.pitch; - yaw = other.yaw; - roll = other.roll; + yaw = other.yaw; + roll = other.roll; return *this; } @@ -137,21 +136,18 @@ struct IRotator { roll = r; } - IRotator() : pitch(0), yaw(0), roll(0) {} + IRotator() : pitch(0), yaw(0), roll(0) { + } IRotator(float p, float y, float r) { pitch = p * (UINT16_MAX / 360); - yaw = y * (UINT16_MAX / 360); - roll = r * (UINT16_MAX / 360); + yaw = y * (UINT16_MAX / 360); + roll = r * (UINT16_MAX / 360); } // Convert to radians as FVector [[nodiscard]] FVector ToRadians() const { float scale = 2.0f * M_PI / 65536.0f; - return FVector( - pitch * scale, - yaw * scale, - roll * scale - ); + return FVector(pitch * scale, yaw * scale, roll * scale); } #endif // __cplusplus }; @@ -167,26 +163,26 @@ struct FRotator { #ifdef __cplusplus FRotator& operator=(const FRotator& other) { pitch = other.pitch; - yaw = other.yaw; - roll = other.roll; + yaw = other.yaw; + roll = other.roll; return *this; } // Convert to binary rotator 0 --> INT16_MAX [[nodiscard]] IRotator ToBinary() const { - return IRotator( - static_cast<uint16_t>(pitch * (UINT16_MAX / 360)), - static_cast<uint16_t>(yaw * (UINT16_MAX / 360)), - static_cast<uint16_t>(roll * (UINT16_MAX / 360)) - ); + return IRotator(static_cast<uint16_t>(pitch * (UINT16_MAX / 360)), + static_cast<uint16_t>(yaw * (UINT16_MAX / 360)), + static_cast<uint16_t>(roll * (UINT16_MAX / 360))); } - FRotator() : pitch(0), yaw(0), roll(0) {} - FRotator(float p, float y, float r) : pitch(p), yaw(y), roll(r) {} + FRotator() : pitch(0), yaw(0), roll(0) { + } + FRotator(float p, float y, float r) : pitch(p), yaw(y), roll(r) { + } FRotator(IRotator rot) { pitch = static_cast<float>(rot.pitch * (360 / UINT16_MAX)); - yaw = static_cast<float>(rot.yaw * (360 / UINT16_MAX)); - roll = static_cast<float>(rot.roll * (360 / UINT16_MAX)); + yaw = static_cast<float>(rot.yaw * (360 / UINT16_MAX)); + roll = static_cast<float>(rot.roll * (360 / UINT16_MAX)); } #endif // __cplusplus }; @@ -200,11 +196,12 @@ struct IPathSpan { #ifdef __cplusplus // Default Constructor - IPathSpan() : Start(0), End(0) {} + IPathSpan() : Start(0), End(0) { + } // Parameterized Constructor - IPathSpan(int InStart, int InEnd) - : Start(InStart), End(InEnd) {} + IPathSpan(int InStart, int InEnd) : Start(InStart), End(InEnd) { + } // Copy Assignment Operator IPathSpan& operator=(const IPathSpan& Other) { diff --git a/src/engine/Cup.cpp b/src/engine/Cup.cpp index ec9e6c913..a798bb5e8 100644 --- a/src/engine/Cup.cpp +++ b/src/engine/Cup.cpp @@ -42,5 +42,5 @@ size_t Cup::GetSize() { void Cup::ShuffleCourses() { // std::random_device rd; // std::mt19937 g(rd()); - //std::shuffle(Courses.begin(), Courses.end(), g); + // std::shuffle(Courses.begin(), Courses.end(), g); } diff --git a/src/engine/Cup.h b/src/engine/Cup.h index 0b477824f..4ef5a3f83 100644 --- a/src/engine/Cup.h +++ b/src/engine/Cup.h @@ -8,10 +8,10 @@ class Course; // <-- Forward declare class Cup { -public: + public: std::string Id; const char* Name; - u8 *Thumbnail; + u8* Thumbnail; size_t CursorPosition = 0; // Course index in cup std::vector<Course*> Courses; @@ -24,4 +24,4 @@ public: virtual void SetCourse(size_t position); virtual Course* GetCourse(); virtual size_t GetSize(); -};
\ No newline at end of file +}; diff --git a/src/engine/GameAPI.h b/src/engine/GameAPI.h index 6e2e84323..009735e87 100644 --- a/src/engine/GameAPI.h +++ b/src/engine/GameAPI.h @@ -3,4 +3,4 @@ void* GetCourse(void); -#endif // GAME_API_H
\ No newline at end of file +#endif // GAME_API_H diff --git a/src/engine/GarbageCollector.cpp b/src/engine/GarbageCollector.cpp index 9832aa29d..34dee17c8 100644 --- a/src/engine/GarbageCollector.cpp +++ b/src/engine/GarbageCollector.cpp @@ -2,7 +2,7 @@ #include "World.h" void RunGarbageCollector() { - //CleanActors(); + // CleanActors(); CleanObjects(); CleanStaticMeshActors(); } diff --git a/src/engine/GarbageCollector.h b/src/engine/GarbageCollector.h index c96f1c36a..f9f82cbfd 100644 --- a/src/engine/GarbageCollector.h +++ b/src/engine/GarbageCollector.h @@ -5,7 +5,6 @@ #include "Object.h" #include "World.h" - void RunGarbageCollector(); void CleanActors(); void CleanStaticMeshActors(); diff --git a/src/engine/HM_Intro.cpp b/src/engine/HM_Intro.cpp index e27d5db0c..8fb97f89d 100644 --- a/src/engine/HM_Intro.cpp +++ b/src/engine/HM_Intro.cpp @@ -40,7 +40,7 @@ void HarbourMastersIntro::HM_InitIntro() { _pos = FVector(-1000, -205, -800); // -1000, -210, -800 _rot = IRotator(-5, 100, 0); - _scale = {0.7f, 0.7f, 0.7f}; + _scale = { 0.7f, 0.7f, 0.7f }; _ship2Pos = FVector(300, -210, -1960); _ship2Rot = IRotator(0, 45, 0); @@ -53,18 +53,16 @@ void HarbourMastersIntro::HM_InitIntro() { _hPos = FVector(-2000, 100, -4900); _hRot = IRotator(0, -45.0f, 0); - _hScale = {2.0f, 2.0f, 2.0f}; + _hScale = { 2.0f, 2.0f, 2.0f }; lusPos = FVector(0, -400, -614); // 12, 190, -1000 lusRot = IRotator(0, 0, 0); lusScale = FVector(1, 1, 1); - ground_f3d_material_013_lights = gdSPDefLights1( - 0x7F, 0x30, 0x80, - 0x60, 20, 10, 0x49, 0x49, 0x49 - ); + ground_f3d_material_013_lights = gdSPDefLights1(0x7F, 0x30, 0x80, 0x60, 20, 10, 0x49, 0x49, 0x49); - gEditor.AddObject("lus", &lusPos, &lusRot, &lusScale, nullptr, 1, Editor::GameObject::CollisionType::BOUNDING_BOX, 10, &DespawnValue, -1); + gEditor.AddObject("lus", &lusPos, &lusRot, &lusScale, nullptr, 1, Editor::GameObject::CollisionType::BOUNDING_BOX, + 10, &DespawnValue, -1); } void HarbourMastersIntro::HM_TickIntro() { @@ -90,12 +88,14 @@ void HarbourMastersIntro::HM_TickIntro() { gFadeModeSelection = FADE_MODE_LOGO; } - find_and_set_tile_size((uintptr_t) ((void*)mat_water_water1), 0, _water); - find_and_set_tile_size((uintptr_t) ((void*)mat_water_water2), _water, 0);; + find_and_set_tile_size((uintptr_t) ((void*) mat_water_water1), 0, _water); + find_and_set_tile_size((uintptr_t) ((void*) mat_water_water2), _water, 0); + ; } -void HarbourMastersIntro::Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed) { - float time = (float)gGlobalTimer; +void HarbourMastersIntro::Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, + f32 rollAmp, f32 rollSpeed) { + float time = (float) gGlobalTimer; pos.y = -210 + bobAmp * sin(time * bobSpeed); @@ -104,14 +104,15 @@ void HarbourMastersIntro::Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSp rot.roll = (rollAmp * sin(time * rollSpeed)) * (UINT16_MAX / 360); } -void HarbourMastersIntro::SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed) { - float time = (float)gGlobalTimer; +void HarbourMastersIntro::SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, + f32 rollAmp, f32 rollSpeed) { + float time = (float) gGlobalTimer; pos.y = -205 + bobAmp * sin(time * bobSpeed); - rot.pitch = (-5 + tiltAmp * sin(time * tiltSpeed)) * (UINT16_MAX / 360); + rot.pitch = (-5 + tiltAmp * sin(time * tiltSpeed)) * (UINT16_MAX / 360); - rot.roll = (rollAmp * sin(time * rollSpeed)) * (UINT16_MAX / 360); + rot.roll = (rollAmp * sin(time * rollSpeed)) * (UINT16_MAX / 360); } void HarbourMastersIntro::HM_DrawIntro() { @@ -142,7 +143,7 @@ void HarbourMastersIntro::HM_DrawIntro() { render_set_position(mtx_geo, 0); gSPDisplayList(gDisplayListHead++, ground_map_mesh); - //gSPDisplayList(gDisplayListHead++, powered_Text_mesh); // Replaced by poweredbylus + // gSPDisplayList(gDisplayListHead++, powered_Text_mesh); // Replaced by poweredbylus gSPDisplayList(gDisplayListHead++, castle_map_002_mesh); gSPDisplayList(gDisplayListHead++, road_map_001_mesh); gSPDisplayList(gDisplayListHead++, water_water1_mesh); @@ -150,7 +151,7 @@ void HarbourMastersIntro::HM_DrawIntro() { Mat4 lusMtx; ApplyMatrixTransformations(lusMtx, lusPos, lusRot, lusScale); render_set_position(lusMtx, 0); - gSPDisplayList(gDisplayListHead++, (Gfx*)"__OTR__hmintro/poweredbylus"); + gSPDisplayList(gDisplayListHead++, (Gfx*) "__OTR__hmintro/poweredbylus"); HarbourMastersIntro::Sync(); } @@ -161,7 +162,8 @@ void HarbourMastersIntro::Setup() { gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP); guPerspective(&gGfxPool->mtxScreen, &perspNorm, 45.0f, 1.3333334f, 100.0f, 12800.0f, 1.0f); gSPPerspNormalize(gDisplayListHead++, perspNorm); - guLookAt(&gGfxPool->mtxLookAt[0], _camera.Pos.x, _camera.Pos.y, _camera.Pos.z, _camera.LookAt.x, _camera.LookAt.y, _camera.LookAt.z, 0.0f, 1.0f, 0.0f); + guLookAt(&gGfxPool->mtxLookAt[0], _camera.Pos.x, _camera.Pos.y, _camera.Pos.z, _camera.LookAt.x, _camera.LookAt.y, + _camera.LookAt.z, 0.0f, 1.0f, 0.0f); gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2); diff --git a/src/engine/HM_Intro.h b/src/engine/HM_Intro.h index 24fe08e35..552056a7f 100644 --- a/src/engine/HM_Intro.h +++ b/src/engine/HM_Intro.h @@ -15,17 +15,20 @@ extern "C" { #ifdef __cplusplus class HarbourMastersIntro { -public: + public: HarbourMastersIntro(); void HM_InitIntro(); void HM_TickIntro(); void HM_DrawIntro(); -private: + + private: void Setup(); void Sync(); - void Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed); - void SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed); + void Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, + f32 rollSpeed); + void SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, + f32 rollSpeed); void MoveCloserToCamera(float moveSpeed); struct HMCamera { @@ -75,4 +78,4 @@ void HM_DrawIntro(void); } #endif -#endif // _HM_INTRO_H
\ No newline at end of file +#endif // _HM_INTRO_H diff --git a/src/engine/Matrix.cpp b/src/engine/Matrix.cpp index 1f2301258..686df48bd 100644 --- a/src/engine/Matrix.cpp +++ b/src/engine/Matrix.cpp @@ -99,7 +99,7 @@ void ApplyMatrixTransformations(Mat4 mtx, FVector pos, IRotator rot, FVector sca mtx[0][2] *= scale.z; mtx[1][2] *= scale.z; mtx[2][2] *= scale.z; - + // Set the last row and column for the homogeneous coordinate system mtx[0][3] = 0.0f; mtx[1][3] = 0.0f; @@ -119,79 +119,76 @@ void AddLocalRotation(Mat4 mat, IRotator rot) { mat[0][0] = (cos_yaw * cos_roll) + (sin_pitch * sin_yaw * sin_roll); mat[0][1] = (cos_pitch * sin_roll); mat[0][2] = (-sin_yaw * cos_roll) + (sin_pitch * cos_yaw * sin_roll); - + mat[1][0] = (-cos_yaw * sin_roll) + (sin_pitch * sin_yaw * cos_roll); mat[1][1] = (cos_pitch * cos_roll); mat[1][2] = (sin_yaw * sin_roll) + (sin_pitch * cos_yaw * cos_roll); - + mat[2][0] = (cos_pitch * sin_yaw); mat[2][1] = -sin_pitch; mat[2][2] = (cos_pitch * cos_yaw); } - // API extern "C" { - void AddHudMatrix(Mat4 mtx, s32 flags) { - AddMatrix(gWorldInstance.Mtx.Hud, mtx, flags); - } - - void AddObjectMatrix(Mat4 mtx, s32 flags) { - AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags); - } +void AddHudMatrix(Mat4 mtx, s32 flags) { + AddMatrix(gWorldInstance.Mtx.Hud, mtx, flags); +} - void AddShadowMatrix(Mat4 mtx, s32 flags) { - AddMatrix(gWorldInstance.Mtx.Shadows, mtx, flags); - } +void AddObjectMatrix(Mat4 mtx, s32 flags) { + AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags); +} - void AddKartMatrix(Mat4 mtx, s32 flags) { - AddMatrix(gWorldInstance.Mtx.Karts, mtx, flags); - } +void AddShadowMatrix(Mat4 mtx, s32 flags) { + AddMatrix(gWorldInstance.Mtx.Shadows, mtx, flags); +} - void AddEffectMatrix(Mat4 mtx, s32 flags) { - AddMatrix(gWorldInstance.Mtx.Effects, mtx, flags); - } +void AddKartMatrix(Mat4 mtx, s32 flags) { + AddMatrix(gWorldInstance.Mtx.Karts, mtx, flags); +} - void AddEffectMatrixFixed(s32 flags) { - AddMatrixFixed(gWorldInstance.Mtx.Effects, flags); - } +void AddEffectMatrix(Mat4 mtx, s32 flags) { + AddMatrix(gWorldInstance.Mtx.Effects, mtx, flags); +} - void AddEffectMatrixOrtho(void) { - auto& stack = gWorldInstance.Mtx.Effects; - stack.emplace_back(); +void AddEffectMatrixFixed(s32 flags) { + AddMatrixFixed(gWorldInstance.Mtx.Effects, flags); +} - guOrtho(&stack.back(), 0.0f, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0.0f, -100.0f, 100.0f, 1.0f); - - gSPMatrix(gDisplayListHead++, &stack.back(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - } +void AddEffectMatrixOrtho(void) { + auto& stack = gWorldInstance.Mtx.Effects; + stack.emplace_back(); - Mtx* GetEffectMatrix(void) { - return GetMatrix(gWorldInstance.Mtx.Effects); - } + guOrtho(&stack.back(), 0.0f, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0.0f, -100.0f, 100.0f, 1.0f); + gSPMatrix(gDisplayListHead++, &stack.back(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); +} - /** - * Note that the game doesn't seem to clear all of these at the beginning of a new frame. - * We might need to adjust which ones we clear. - */ - void ClearMatrixPools(void) { - gWorldInstance.Mtx.Hud.clear(); - gWorldInstance.Mtx.Objects.clear(); - gWorldInstance.Mtx.Shadows.clear(); - gWorldInstance.Mtx.Karts.clear(); - gWorldInstance.Mtx.Effects.clear(); - } +Mtx* GetEffectMatrix(void) { + return GetMatrix(gWorldInstance.Mtx.Effects); +} - void ClearHudMatrixPool(void) { - gWorldInstance.Mtx.Hud.clear(); - } - void ClearEffectsMatrixPool(void) { - gWorldInstance.Mtx.Effects.clear(); - } +/** + * Note that the game doesn't seem to clear all of these at the beginning of a new frame. + * We might need to adjust which ones we clear. + */ +void ClearMatrixPools(void) { + gWorldInstance.Mtx.Hud.clear(); + gWorldInstance.Mtx.Objects.clear(); + gWorldInstance.Mtx.Shadows.clear(); + gWorldInstance.Mtx.Karts.clear(); + gWorldInstance.Mtx.Effects.clear(); +} - void ClearObjectsMatrixPool(void) { - gWorldInstance.Mtx.Objects.clear(); - } +void ClearHudMatrixPool(void) { + gWorldInstance.Mtx.Hud.clear(); +} +void ClearEffectsMatrixPool(void) { + gWorldInstance.Mtx.Effects.clear(); } +void ClearObjectsMatrixPool(void) { + gWorldInstance.Mtx.Objects.clear(); +} +} diff --git a/src/engine/Matrix.h b/src/engine/Matrix.h index 180ebfb16..996b08afb 100644 --- a/src/engine/Matrix.h +++ b/src/engine/Matrix.h @@ -29,4 +29,4 @@ void AddShadowMatrix(Mat4 mtx, s32 flags); } #endif -#endif // _MATRIX_HEADER_
\ No newline at end of file +#endif // _MATRIX_HEADER_ diff --git a/src/engine/ModelLoader.cpp b/src/engine/ModelLoader.cpp index 1c41a8ca9..fbfcaaaee 100644 --- a/src/engine/ModelLoader.cpp +++ b/src/engine/ModelLoader.cpp @@ -70,7 +70,6 @@ void ModelLoader::Extract(Course* course) { memcpy(list.gfxBuffer, &gfx[list.gfxStart], list.gfxBufferSize * sizeof(Gfx)); UpdateVtx(list); - } free(vtx); diff --git a/src/engine/ModelLoader.h b/src/engine/ModelLoader.h index e89c7c457..56720b365 100644 --- a/src/engine/ModelLoader.h +++ b/src/engine/ModelLoader.h @@ -10,16 +10,16 @@ extern "C" { class Course; /** - * + * * Lists are deferred until load time so that models that use the same course may all use the same extraction - * + * * Note ensure that the buffers passed to LoadModelList are big enough for the requested data. - * + * * This class should only be ran once. - * - * + * + * * Usage: - * + * * ModelLoader::LoadModelList bowserStatueList = { .course = gBowsersCastle, .gfxBuffer = &gBowserStatueGfx[0], @@ -29,13 +29,13 @@ class Course; .vtxBufferSize = 717, .vtxStart = 1942, }; - * + * * gModelLoader.Add(bowserStatueList); */ class ModelLoader { -public: + public: struct LoadModelList { Course* course; @@ -50,10 +50,9 @@ public: void Add(LoadModelList list); void Load(); -private: - struct CourseMap { - }; + private: + struct CourseMap {}; void Extract(Course* course); void UpdateVtx(LoadModelList list); diff --git a/src/engine/PlayerBombKart.cpp b/src/engine/PlayerBombKart.cpp index 9ab3b74e1..61d373772 100644 --- a/src/engine/PlayerBombKart.cpp +++ b/src/engine/PlayerBombKart.cpp @@ -38,12 +38,12 @@ void PlayerBombKart::func_800563DC(s32 cameraId, s32 arg2) { D_80183E80[1] = func_800418AC(pos.x, pos.z, camera->pos); D_80183E80[2] = 0x8000; rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007E98); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007E98); func_8004B310(arg2); - draw_rectangle_texture_overlap((u8*) common_tlut_bomb, (u8*)common_texture_bomb[residue], (Vtx*)D_0D005AE0, 0x00000020, - 0x00000020, 0x00000020, 0x00000020); + draw_rectangle_texture_overlap((u8*) common_tlut_bomb, (u8*) common_texture_bomb[residue], (Vtx*) D_0D005AE0, + 0x00000020, 0x00000020, 0x00000020, 0x00000020); temp_s0 = D_8018D400; - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B00); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007B00); func_8004B414(0, 0, 0, arg2); D_80183E40[1] = D_80183E40[1] + 4.0; D_80183E80[2] = 0; @@ -58,22 +58,22 @@ void PlayerBombKart::func_800563DC(s32 cameraId, s32 arg2) { } void PlayerBombKart::func_8005669C(s32 arg2) { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0079E8); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0079E8); func_8004B310(arg2); load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010); D_80183E40[1] = pos.y - 2.0; D_80183E40[0] = pos.x + 2.0; D_80183E40[2] = pos.z + 2.0; - func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); D_80183E40[0] = pos.x + 2.0; D_80183E40[2] = pos.z - 2.0; - func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); D_80183E40[0] = pos.x - 2.0; D_80183E40[2] = pos.z - 2.0; - func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); D_80183E40[0] = pos.x - 2.0; D_80183E40[2] = pos.z + 2.0; - func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } @@ -91,5 +91,5 @@ void PlayerBombKart::func_800568A0(s32 cameraId) { // G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); AddHudMatrix(mtx, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B98); -}
\ No newline at end of file + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007B98); +} diff --git a/src/engine/PlayerBombKart.h b/src/engine/PlayerBombKart.h index c1e58d815..827e62191 100644 --- a/src/engine/PlayerBombKart.h +++ b/src/engine/PlayerBombKart.h @@ -4,15 +4,14 @@ #include "CoreMath.h" class PlayerBombKart { -public: - + public: enum PlayerBombKartState { DISABLED, ACTIVE, }; s16 state = PlayerBombKartState::DISABLED; - FVector pos = {0, 0, 0}; + FVector pos = { 0, 0, 0 }; f32 surfaceHeight = 0; s32 _primAlpha = 0; diff --git a/src/engine/Registry.h b/src/engine/Registry.h index f55818dc3..1aaf6c568 100644 --- a/src/engine/Registry.h +++ b/src/engine/Registry.h @@ -13,7 +13,7 @@ // public: // Registry(); // void Add(std::string name, std::function<T*()>); - + // template <typename... Args> // void AddArgs(std::string id); // T* Get(std::string id); diff --git a/src/engine/Smoke.cpp b/src/engine/Smoke.cpp index 5fb0c0c39..ad5830464 100644 --- a/src/engine/Smoke.cpp +++ b/src/engine/Smoke.cpp @@ -69,7 +69,6 @@ void TrainSmokeTick() { if (count != 0) { boat->SmokeTimer = 100; } - } } } @@ -80,22 +79,21 @@ void TrainSmokeDraw(s32 cameraId) { for (auto& actor : gWorldInstance.Actors) { if (auto train = dynamic_cast<ATrain*>(actor)) { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0); - load_texture_block_i8_nomirror((uint8_t*)D_0D029458, 32, 32); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0); + load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32); func_8004B72C(255, 255, 255, 255, 255, 255, 255); D_80183E80[0] = 0; D_80183E80[2] = 0x8000; - if ((train->SomeFlags != 0) && - (is_particle_on_screen(train->Locomotive.position, camera, 0x4000U) != 0)) { + if ((train->SomeFlags != 0) && (is_particle_on_screen(train->Locomotive.position, camera, 0x4000U) != 0)) { for (size_t i = 0; i < 128; i++) { render_object_train_smoke_particle(train->SmokeParticles[i], cameraId); } } } else if (auto boat = dynamic_cast<ABoat*>(actor)) { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0); - load_texture_block_i8_nomirror((uint8_t*)D_0D029458, 32, 32); + load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32); func_8004B72C(255, 255, 255, 255, 255, 255, 255); D_80183E80[0] = 0; D_80183E80[2] = 0x8000; diff --git a/src/engine/StaticMeshActor.cpp b/src/engine/StaticMeshActor.cpp index 2e5fa1119..ee3fba9c0 100644 --- a/src/engine/StaticMeshActor.cpp +++ b/src/engine/StaticMeshActor.cpp @@ -8,8 +8,9 @@ extern "C" { #include "math_util_2.h" } -StaticMeshActor::StaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision) : Name(name), Pos(pos), Rot(rot), Scale(scale), Model(""), Collision(collision) { - +StaticMeshActor::StaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, + int32_t* collision) + : Name(name), Pos(pos), Rot(rot), Scale(scale), Model(""), Collision(collision) { } void StaticMeshActor::Draw() { @@ -19,7 +20,7 @@ void StaticMeshActor::Draw() { if (!Model.empty()) { ApplyMatrixTransformations(mtx, Pos, Rot, Scale); if (render_set_position(mtx, 0) != 0) { - gSPDisplayList(gDisplayListHead++, (Gfx*)Model.c_str()); + gSPDisplayList(gDisplayListHead++, (Gfx*) Model.c_str()); } } } diff --git a/src/engine/StaticMeshActor.h b/src/engine/StaticMeshActor.h index 4007aa2c1..b0dad88be 100644 --- a/src/engine/StaticMeshActor.h +++ b/src/engine/StaticMeshActor.h @@ -7,7 +7,7 @@ // todo: Make this class AStaticMeshActor : public AActor class StaticMeshActor { -public: + public: std::string Name; FVector Pos; IRotator Rot; @@ -22,16 +22,16 @@ public: // Serialize each field of the class j["Name"] = Name; - j["Position"] = {Pos.x, Pos.y, Pos.z}; // Assuming FVector has x, y, z fields - j["Rotation"] = {Rot.pitch, Rot.yaw, Rot.roll}; // Assuming IRotator has pitch, yaw, roll fields - j["Scale"] = {Scale.x, Scale.y, Scale.z}; // Assuming FVector has x, y, z fields + j["Position"] = { Pos.x, Pos.y, Pos.z }; // Assuming FVector has x, y, z fields + j["Rotation"] = { Rot.pitch, Rot.yaw, Rot.roll }; // Assuming IRotator has pitch, yaw, roll fields + j["Scale"] = { Scale.x, Scale.y, Scale.z }; // Assuming FVector has x, y, z fields j["Model"] = Model; // If Collision is not null, serialize it if (Collision != nullptr) { - j["Collision"] = *Collision; // Serialize the value that Collision points to + j["Collision"] = *Collision; // Serialize the value that Collision points to } else { - j["Collision"] = nullptr; // Handle the case where Collision is nullptr + j["Collision"] = nullptr; // Handle the case where Collision is nullptr } return j; @@ -39,20 +39,22 @@ public: void from_json(const nlohmann::json& j) { Name = j.at("Name").get<std::string>(); - Pos = FVector(j.at("Position")[0].get<float>(), j.at("Position")[1].get<float>(), j.at("Position")[2].get<float>()); - Rot.Set(j.at("Rotation")[0].get<uint16_t>(), j.at("Rotation")[1].get<uint16_t>(), j.at("Rotation")[2].get<uint16_t>()); + Pos = FVector(j.at("Position")[0].get<float>(), j.at("Position")[1].get<float>(), + j.at("Position")[2].get<float>()); + Rot.Set(j.at("Rotation")[0].get<uint16_t>(), j.at("Rotation")[1].get<uint16_t>(), + j.at("Rotation")[2].get<uint16_t>()); Scale = FVector(j.at("Scale")[0].get<float>(), j.at("Scale")[1].get<float>(), j.at("Scale")[2].get<float>()); // Deserialize the Model string Model = j.at("Model").get<std::string>(); // Check if Collision is present in the JSON and deserialize it - //if (j.contains("Collision") && !j["Collision"].is_null()) { - // If Collision is a valid value, allocate memory for it and assign the value + // if (j.contains("Collision") && !j["Collision"].is_null()) { + // If Collision is a valid value, allocate memory for it and assign the value // Collision = new int32_t(j.at("Collision").get<int32_t>()); //} else { - // If Collision is not present or is null, set it to nullptr - Collision = nullptr; + // If Collision is not present or is null, set it to nullptr + Collision = nullptr; //} } diff --git a/src/engine/TrainCrossing.cpp b/src/engine/TrainCrossing.cpp index 8dce6984b..505c2d0e7 100644 --- a/src/engine/TrainCrossing.cpp +++ b/src/engine/TrainCrossing.cpp @@ -29,9 +29,9 @@ void TrainCrossing::CrossingTrigger() { s32 i; OnTriggered = 0; - for (const auto& actor : gWorldInstance.Actors) { - if (auto train = dynamic_cast<ATrain*>(actor)) {; + if (auto train = dynamic_cast<ATrain*>(actor)) { + ; f32 radius = DynamicRadius(train->Locomotive.position, train->Locomotive.velocity, Position); if (Distance(train->Locomotive.position, Position) < radius) { @@ -61,9 +61,9 @@ void TrainCrossing::AICrossingBehaviour(s32 playerId) { } f32 TrainCrossing::Distance(Vec3f a, Vec3f b) { - float dx = b[0] - a[0]; // Difference in x-coordinates - float dy = b[1] - a[1]; // Difference in y-coordinates - float dz = b[2] - a[2]; // Difference in z-coordinates + float dx = b[0] - a[0]; // Difference in x-coordinates + float dy = b[1] - a[1]; // Difference in y-coordinates + float dz = b[2] - a[2]; // Difference in z-coordinates return sqrt(dx * dx + dy * dy + dz * dz); // Return the distance } @@ -75,8 +75,7 @@ f32 TrainCrossing::DynamicRadius(Vec3f trainPos, Vec3f trainVelocity, Vec3f cros trainToCrossing[2] = crossingPos[2] - trainPos[2]; // Dot product to check if the train is approaching or moving away from the crossing - f32 dotProduct = trainToCrossing[0] * trainVelocity[0] + - trainToCrossing[1] * trainVelocity[1] + + f32 dotProduct = trainToCrossing[0] * trainVelocity[0] + trainToCrossing[1] * trainVelocity[1] + trainToCrossing[2] * trainVelocity[2]; if (dotProduct > 0) { diff --git a/src/engine/TrainCrossing.h b/src/engine/TrainCrossing.h index eeb6b5fc2..e45eb9d53 100644 --- a/src/engine/TrainCrossing.h +++ b/src/engine/TrainCrossing.h @@ -11,12 +11,12 @@ extern "C" { * @arg Vec3f position of the crossing * @arg u32 waypointMin * @arg u32 waypointMax - * + * * Min/Max are used to determine the range for AI to stop for the crossing. - * + * */ class TrainCrossing { -public: + public: TrainCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius); Vec3f Position; diff --git a/src/engine/World.cpp b/src/engine/World.cpp index 8e20806ff..71b0c856c 100644 --- a/src/engine/World.cpp +++ b/src/engine/World.cpp @@ -21,7 +21,8 @@ extern "C" { #include "mario_raceway_data.h" } -World::World() {} +World::World() { +} Course* CurrentCourse; Cup* CurrentCup; @@ -38,7 +39,8 @@ void World::SetCourseFromCup() { CurrentCourse = CurrentCup->GetCourse(); } -TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius) { +TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, + f32 exitRadius) { auto crossing = std::make_shared<TrainCrossing>(position, waypointMin, waypointMax, approachRadius, exitRadius); Crossings.push_back(crossing); return crossing.get(); @@ -119,11 +121,12 @@ AActor* World::AddActor(AActor* actor) { Actors.push_back(actor); if (actor->Model != NULL) { - gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*)&actor->Rot, &actor->Scale, + gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*) &actor->Rot, &actor->Scale, (Gfx*) LOAD_ASSET_RAW(actor->Model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->Type, 0); } else { - gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*)&actor->Rot, &actor->Scale, nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->Type, 0); + gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*) &actor->Rot, &actor->Scale, nullptr, 1.0f, + Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->Type, 0); } return Actors.back(); } @@ -139,9 +142,12 @@ struct Actor* World::AddBaseActor() { void World::AddEditorObject(Actor* actor, const char* name) { if (actor->model != NULL) { - gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*)&actor->rot, nullptr, (Gfx*)LOAD_ASSET_RAW(actor->model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0); + gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*) &actor->rot, nullptr, + (Gfx*) LOAD_ASSET_RAW(actor->model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, + 0.0f, (int32_t*) &actor->type, 0); } else { - gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*)&actor->rot, nullptr, nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0); + gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*) &actor->rot, nullptr, nullptr, 1.0f, + Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->type, 0); } } @@ -152,7 +158,7 @@ AActor* World::ConvertActorToAActor(Actor* actor) { // Move the ptr back so that it points at the vtable. // Which is the initial item in the class, or in other words // Point to the class. - return reinterpret_cast<AActor*>((char*)actor - sizeof(void*)); + return reinterpret_cast<AActor*>((char*) actor - sizeof(void*)); } /** @@ -161,7 +167,7 @@ AActor* World::ConvertActorToAActor(Actor* actor) { Actor* World::ConvertAActorToActor(AActor* actor) { // Move the ptr forward past the vtable. // This allows C to access the class variables like a normal Actor* struct. - return reinterpret_cast<Actor*>((char*)actor + sizeof(void*)); + return reinterpret_cast<Actor*>((char*) actor + sizeof(void*)); } AActor* World::GetActor(size_t index) { @@ -177,16 +183,18 @@ void World::TickActors() { } } -StaticMeshActor* World::AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision) { +StaticMeshActor* World::AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, + std::string model, int32_t* collision) { StaticMeshActors.push_back(new StaticMeshActor(name, pos, rot, scale, model, collision)); auto actor = StaticMeshActors.back(); - auto gameObj = gEditor.AddObject(actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) LOAD_ASSET_RAW(actor->Model.c_str()), 1.0f, - Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) true); + auto gameObj = gEditor.AddObject( + actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) LOAD_ASSET_RAW(actor->Model.c_str()), 1.0f, + Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) true); return actor; } void World::DrawStaticMeshActors() { - for (const auto& actor: StaticMeshActors) { + for (const auto& actor : StaticMeshActors) { actor->Draw(); } } @@ -194,10 +202,10 @@ void World::DrawStaticMeshActors() { void World::DeleteStaticMeshActors() { for (auto it = StaticMeshActors.begin(); it != StaticMeshActors.end();) { if ((*it)->bPendingDestroy) { - delete *it; // Deallocate memory for the actor - it = StaticMeshActors.erase(it); // Remove the pointer from the vector + delete *it; // Deallocate memory for the actor + it = StaticMeshActors.erase(it); // Remove the pointer from the vector } else { - ++it; // Only increment the iterator if we didn't erase an element + ++it; // Only increment the iterator if we didn't erase an element } } } @@ -209,9 +217,13 @@ OObject* World::AddObject(OObject* object) { Object* cObj = &gObjectList[object->_objectIndex]; if (cObj->model != NULL) { - gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*)&cObj->orientation, nullptr, (Gfx*)LOAD_ASSET_RAW(cObj->model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); + gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*) &cObj->orientation, nullptr, + (Gfx*) LOAD_ASSET_RAW(cObj->model), 1.0f, + Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); } else { - gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*)&cObj->orientation, nullptr, nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); + gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*) &cObj->orientation, nullptr, + nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, + &object->_objectIndex, -1); } } @@ -228,7 +240,7 @@ void World::TickObjects() { // This is a fallback to support those objects. Probably don't use this. void World::TickObjects60fps() { for (const auto& object : Objects) { - object->Tick60fps(); + object->Tick60fps(); } } @@ -239,19 +251,19 @@ ParticleEmitter* World::AddEmitter(ParticleEmitter* emitter) { void World::DrawObjects(s32 cameraId) { for (const auto& object : Objects) { - object->Draw(cameraId); + object->Draw(cameraId); } } void World::TickParticles() { for (const auto& emitter : Emitters) { - emitter->Tick(); + emitter->Tick(); } } void World::DrawParticles(s32 cameraId) { for (const auto& emitter : Emitters) { - emitter->Draw(cameraId); + emitter->Draw(cameraId); } } @@ -263,8 +275,8 @@ void World::Reset() { } Object* World::GetObjectByIndex(size_t index) { - //if (index < this->Objects.size()) { - // Assuming GameActor::a is accessible, use reinterpret_cast if needed + // if (index < this->Objects.size()) { + // Assuming GameActor::a is accessible, use reinterpret_cast if needed // return reinterpret_cast<Object*>(&this->Objects[index]->o); //} return nullptr; // Or handle the error as needed diff --git a/src/engine/World.h b/src/engine/World.h index bb8979090..bb5120c0f 100644 --- a/src/engine/World.h +++ b/src/engine/World.h @@ -48,7 +48,7 @@ class World { std::vector<Mtx> Effects; } Matrix; -public: + public: explicit World(); void AddCourse(Course* course); @@ -63,7 +63,8 @@ public: Actor* ConvertAActorToActor(AActor* actor); void DrawStaticMeshActors(); - StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision); + StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, + int32_t* collision); void DeleteStaticMeshActors(); OObject* AddObject(OObject* object); @@ -71,7 +72,7 @@ public: void TickObjects(); void TickObjects60fps(); void DrawObjects(s32 cameraId); - Object *GetObjectByIndex(size_t); + Object* GetObjectByIndex(size_t); void TickParticles(); void DrawParticles(s32 cameraId); @@ -89,7 +90,6 @@ public: World* GetWorld(void); void ClearWorld(void); - // These are only for browsing through the course list void SetCourse(const char*); void NextCourse(void); @@ -97,7 +97,6 @@ public: Matrix Mtx; - Course* CurrentCourse; Cup* CurrentCup; @@ -120,8 +119,7 @@ public: // Holds all available courses std::vector<Course*> Courses; size_t CourseIndex = 0; // For browsing courses. -private: - + private: }; extern World gWorldInstance; diff --git a/src/engine/actors/Banana.cpp b/src/engine/actors/Banana.cpp index 6c7f837d1..2c7eb8f99 100644 --- a/src/engine/actors/Banana.cpp +++ b/src/engine/actors/Banana.cpp @@ -14,7 +14,7 @@ ABanana::ABanana(uint16_t playerId, const float pos[3], const s16 rot[3], const Name = "Banana"; // Initialize the BananaActor's position, rotation, and velocity std::copy(pos, pos + 3, Pos); - //std::copy(rot, rot + 3, this->a.rot); + // std::copy(rot, rot + 3, this->a.rot); std::copy(velocity, velocity + 3, Velocity); Type = 6; // ACTOR_BANANA @@ -23,8 +23,8 @@ ABanana::ABanana(uint16_t playerId, const float pos[3], const s16 rot[3], const State = HELD_BANANA; PlayerId = playerId; - - //this->a.unk_08 = 0.0f; + + // this->a.unk_08 = 0.0f; Flags |= 0x4000 | 0x1000; BoundingBoxSize = 2.0f; @@ -48,14 +48,16 @@ ABanana::ABanana(uint16_t playerId, const float pos[3], const s16 rot[3], const Unk30.orientationVector[2] = 0.0f; } -void ABanana::Tick() { - update_actor_banana((BananaActor*)this); +void ABanana::Tick() { + update_actor_banana((BananaActor*) this); } -void ABanana::Draw(Camera *camera) { - render_actor_banana(camera, NULL, (BananaActor*)this); +void ABanana::Draw(Camera* camera) { + render_actor_banana(camera, NULL, (BananaActor*) this); +} +void ABanana::Collision(Player* player, AActor*) { +} +void ABanana::Destroy() { } -void ABanana::Collision(Player* player, AActor*) { } -void ABanana::Destroy() { } -//void ABanana::Held() {} +// void ABanana::Held() {} diff --git a/src/engine/actors/Banana.h b/src/engine/actors/Banana.h index d8c55e9cb..d7985b545 100644 --- a/src/engine/actors/Banana.h +++ b/src/engine/actors/Banana.h @@ -4,8 +4,7 @@ #include "engine/Actor.h" class ABanana : public AActor { -public: - + public: uint16_t PlayerId; // Constructor diff --git a/src/engine/actors/BowserStatue.cpp b/src/engine/actors/BowserStatue.cpp index c680c4c25..d3af82b2a 100644 --- a/src/engine/actors/BowserStatue.cpp +++ b/src/engine/actors/BowserStatue.cpp @@ -19,7 +19,7 @@ ABowserStatue::ABowserStatue(FVector pos, ABowserStatue::Behaviour behaviour) { } void ABowserStatue::Tick() { - switch(_behaviour) { + switch (_behaviour) { case DEFAULT: break; case CRUSH: @@ -27,7 +27,7 @@ void ABowserStatue::Tick() { } } -void ABowserStatue::Draw(Camera *camera) { +void ABowserStatue::Draw(Camera* camera) { Mat4 mtx; Vec3f pos; pos[0] = Pos.x + 76; @@ -43,4 +43,6 @@ void ABowserStatue::Draw(Camera *camera) { } } -bool ABowserStatue::IsMod() { return true; } +bool ABowserStatue::IsMod() { + return true; +} diff --git a/src/engine/actors/BowserStatue.h b/src/engine/actors/BowserStatue.h index 869f6910f..8e3479502 100644 --- a/src/engine/actors/BowserStatue.h +++ b/src/engine/actors/BowserStatue.h @@ -14,11 +14,8 @@ extern Vtx gBowserStatueVtx[717]; extern Gfx gBowserStatueGfx[162]; class ABowserStatue : public AActor { -public: - enum Behaviour { - DEFAULT, - CRUSH - }; + public: + enum Behaviour { DEFAULT, CRUSH }; virtual ~ABowserStatue() = default; explicit ABowserStatue(FVector pos, ABowserStatue::Behaviour behaviour); @@ -28,7 +25,8 @@ public: virtual bool IsMod() override; FVector Pos; -private: + + private: ABowserStatue::Behaviour _behaviour; f32 scale; }; diff --git a/src/engine/actors/Cloud.cpp b/src/engine/actors/Cloud.cpp index cae55e342..1c8f74c60 100644 --- a/src/engine/actors/Cloud.cpp +++ b/src/engine/actors/Cloud.cpp @@ -15,15 +15,15 @@ extern f32 gKartGravityTable[]; } ACloud::ACloud(FVector pos) { - Name = "Cloud"; - Pos[0] = pos.x; - Pos[1] = pos.y; - Pos[2] = pos.z; - Rot[0] = 0; - Rot[1] = 0; - Rot[2] = 0; + Name = "Cloud"; + Pos[0] = pos.x; + Pos[1] = pos.y; + Pos[2] = pos.z; + Rot[0] = 0; + Rot[1] = 0; + Rot[2] = 0; - //Flags = -0x8000 | 0x4000; + // Flags = -0x8000 | 0x4000; BoundingBoxSize = 2.0f; } @@ -48,7 +48,7 @@ void ACloud::Tick() { extern Gfx cloud_mesh[]; -void ACloud::Draw(Camera *camera) { +void ACloud::Draw(Camera* camera) { Mat4 mtx; if (PickedUp) { @@ -58,14 +58,14 @@ void ACloud::Draw(Camera *camera) { mtxf_pos_rotation_xyz(mtx, Pos, Rot); if (render_set_position(mtx, 0) != 0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); - gSPDisplayList(gDisplayListHead++, (Gfx*)cloud_mesh); + gSPDisplayList(gDisplayListHead++, (Gfx*) cloud_mesh); } } void ACloud::Collision(Player* player, AActor* actor) { if (!PickedUp) { if (query_collision_player_vs_actor_item(player, gWorldInstance.ConvertAActorToActor(actor))) { - // Player has picked up the actor, activate the cloud effect + // Player has picked up the actor, activate the cloud effect _player = player; PickedUp = true; @@ -77,61 +77,65 @@ void ACloud::Collision(Player* player, AActor* actor) { } } -bool ACloud::IsMod() { return true; } +bool ACloud::IsMod() { + return true; +} Vtx cloud_mesh_vtx_cull[8] = { - {{ {0, -4, -4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, -4, 4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, 4, 4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, 4, -4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, -4, -4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, -4, 4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, 4, 4}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {0, 4, -4}, 0, {0, 0}, {0, 0, 0, 0} }}, + { { { 0, -4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, -4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + { { { 0, 4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, 4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + { { { 0, -4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, -4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + { { { 0, 4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, 4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, }; Vtx cloud_mesh_vtx_0[4] = { - {{ {0, 4, 4}, 0, {-524, -530}, {255, 255, 255, 166} }}, - {{ {0, -4, 4}, 0, {-530, 1516}, {255, 255, 255, 201} }}, - {{ {0, -4, -4}, 0, {1516, 1522}, {255, 255, 255, 188} }}, - {{ {0, 4, -4}, 0, {1522, -524}, {255, 255, 255, 154} }}, + { { { 0, 4, 4 }, 0, { -524, -530 }, { 255, 255, 255, 166 } } }, + { { { 0, -4, 4 }, 0, { -530, 1516 }, { 255, 255, 255, 201 } } }, + { { { 0, -4, -4 }, 0, { 1516, 1522 }, { 255, 255, 255, 188 } } }, + { { { 0, 4, -4 }, 0, { 1522, -524 }, { 255, 255, 255, 154 } } }, }; Gfx cloud_mesh_tri_0[] = { - gsSPVertex(cloud_mesh_vtx_0 + 0, 4, 0), - gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), - gsSPEndDisplayList(), + gsSPVertex(cloud_mesh_vtx_0 + 0, 4, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSPEndDisplayList(), }; Gfx mat_cloud_cutout[] = { - gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), - gsSPClearGeometryMode(G_CULL_FRONT | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_CLIPPING), - gsDPPipeSync(), - gsDPSetCombineLERP(TEXEL0, PRIMITIVE, PRIMITIVE, TEXEL1, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED), - gsSPSetOtherMode(G_SETOTHERMODE_H, 4, 20, G_AD_NOISE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), - gsSPSetOtherMode(G_SETOTHERMODE_L, 0, 32, G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), - gsSPTexture(65535, 65535, 0, 0, 1), - gsDPSetPrimColor(0, 0, 255, 220, 203, 255), - gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 1, gTexture69C4E4), - gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0), - gsDPLoadBlock(7, 0, 0, 511, 512), - gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, 1, G_TX_WRAP | G_TX_NOMIRROR, 5, 1), - gsDPSetTileSize(0, 98, 100, 124, 124), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, gTexture66C8F4), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 128, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0), - gsDPLoadBlock(6, 0, 0, 1023, 256), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 128, 1, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0), - gsDPSetTileSize(1, 0, 0, 124, 124), - gsSPEndDisplayList(), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPClearGeometryMode(G_CULL_FRONT | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | + G_CLIPPING), + gsDPPipeSync(), + gsDPSetCombineLERP(TEXEL0, PRIMITIVE, PRIMITIVE, TEXEL1, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, + COMBINED), + gsSPSetOtherMode(G_SETOTHERMODE_H, 4, 20, + G_AD_NOISE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPSetOtherMode(G_SETOTHERMODE_L, 0, 32, G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), + gsSPTexture(65535, 65535, 0, 0, 1), + gsDPSetPrimColor(0, 0, 255, 220, 203, 255), + gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 1, gTexture69C4E4), + gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, + G_TX_WRAP | G_TX_NOMIRROR, 0, 0), + gsDPLoadBlock(7, 0, 0, 511, 512), + gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, 1, G_TX_WRAP | G_TX_NOMIRROR, 5, 1), + gsDPSetTileSize(0, 98, 100, 124, 124), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, gTexture66C8F4), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 128, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, + G_TX_WRAP | G_TX_NOMIRROR, 0, 0), + gsDPLoadBlock(6, 0, 0, 1023, 256), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 128, 1, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0, G_TX_CLAMP | G_TX_NOMIRROR, + 5, 0), + gsDPSetTileSize(1, 0, 0, 124, 124), + gsSPEndDisplayList(), }; Gfx cloud_mesh[] = { - //gsSPClearGeometryMode(G_LIGHTING), - //gsSPVertex(cloud_mesh_vtx_cull + 0, 8, 0), - gsSPSetGeometryMode(G_LIGHTING), - //gsSPCullDisplayList(0, 7), - gsSPDisplayList(mat_cloud_cutout), - gsSPDisplayList(cloud_mesh_tri_0), - gsSPEndDisplayList(), + // gsSPClearGeometryMode(G_LIGHTING), + // gsSPVertex(cloud_mesh_vtx_cull + 0, 8, 0), + gsSPSetGeometryMode(G_LIGHTING), + // gsSPCullDisplayList(0, 7), + gsSPDisplayList(mat_cloud_cutout), + gsSPDisplayList(cloud_mesh_tri_0), + gsSPEndDisplayList(), }; - diff --git a/src/engine/actors/Cloud.h b/src/engine/actors/Cloud.h index 4805c08b9..657340b14 100644 --- a/src/engine/actors/Cloud.h +++ b/src/engine/actors/Cloud.h @@ -12,9 +12,7 @@ extern "C" { } class ACloud : public AActor { -public: - - + public: // Constructor ACloud(FVector pos); @@ -28,13 +26,12 @@ public: bool PickedUp = false; uint32_t Timer = 0; - + Player* _player = NULL; - + f32 Hop = 3.0f; f32 Gravity = 200.0f; f32 OldHop = 0; f32 OldGravity = 0; - }; diff --git a/src/engine/actors/Finishline.cpp b/src/engine/actors/Finishline.cpp index 0680e60bd..197442f9e 100644 --- a/src/engine/actors/Finishline.cpp +++ b/src/engine/actors/Finishline.cpp @@ -41,14 +41,14 @@ AFinishline::AFinishline(std::optional<FVector> pos) { BoundingBoxSize = 0.0f; } -void AFinishline::Tick() {} +void AFinishline::Tick() { +} -void AFinishline::Draw(Camera *camera) { +void AFinishline::Draw(Camera* camera) { Mat4 mtx; s16 temp = Pos[2]; s32 maxObjectsReached; - if (gGamestate == CREDITS_SEQUENCE) { return; } @@ -64,18 +64,21 @@ void AFinishline::Draw(Camera *camera) { if (D_800DC5BC != 0) { gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001C20); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001C20); } else { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001B90); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001B90); } } else if (D_800DC5BC != 0) { gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001C88); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001C88); } else { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001BD8); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001BD8); } } -void AFinishline::Collision(Player* player, AActor* actor) {} +void AFinishline::Collision(Player* player, AActor* actor) { +} -bool AFinishline::IsMod() { return true; } +bool AFinishline::IsMod() { + return true; +} diff --git a/src/engine/actors/Finishline.h b/src/engine/actors/Finishline.h index 61b561a5e..e40d6ffe0 100644 --- a/src/engine/actors/Finishline.h +++ b/src/engine/actors/Finishline.h @@ -12,7 +12,7 @@ extern "C" { } class AFinishline : public AActor { -public: + public: /** * Default behaviour places the finishline at the first waypoint. * @arg pos, optional. Sets a custom position @@ -29,13 +29,12 @@ public: bool PickedUp = false; uint32_t Timer = 0; - + Player* _player = NULL; - + f32 Hop = 3.0f; f32 Gravity = 200.0f; f32 OldHop = 0; f32 OldGravity = 0; - }; diff --git a/src/engine/actors/MarioSign.cpp b/src/engine/actors/MarioSign.cpp index f39e4f69b..5e92e8220 100644 --- a/src/engine/actors/MarioSign.cpp +++ b/src/engine/actors/MarioSign.cpp @@ -33,7 +33,7 @@ void AMarioSign::Tick() { } } -void AMarioSign::Draw(Camera *camera) { +void AMarioSign::Draw(Camera* camera) { Mat4 sp40; f32 unk; @@ -50,7 +50,7 @@ void AMarioSign::Draw(Camera *camera) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); mtxf_pos_rotation_xyz(sp40, Pos, Rot); if (render_set_position(sp40, 0) != 0) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_mario_raceway_dl_sign); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_dl_sign); } } } diff --git a/src/engine/actors/MarioSign.h b/src/engine/actors/MarioSign.h index 099894dc1..b077ee7e7 100644 --- a/src/engine/actors/MarioSign.h +++ b/src/engine/actors/MarioSign.h @@ -9,8 +9,7 @@ extern "C" { } class AMarioSign : public AActor { -public: - + public: virtual ~AMarioSign() = default; explicit AMarioSign(FVector pos); diff --git a/src/engine/actors/Ship.cpp b/src/engine/actors/Ship.cpp index 5af3553e2..de92eec62 100644 --- a/src/engine/actors/Ship.cpp +++ b/src/engine/actors/Ship.cpp @@ -20,8 +20,8 @@ AShip::AShip(FVector pos, AShip::Skin skin) { Pos[1] = pos.y; Pos[2] = pos.z; Scale = FVector(0.4, 0.4, 0.4); - - switch(skin) { + + switch (skin) { case GHOSTSHIP: Name = "Ghostship"; _skin = ghostship_Plane_mesh; @@ -53,4 +53,6 @@ void AShip::Tick() { // Rot.yaw = -static_cast<int16_t>(angle * (32768.0f / M_PI / 2.0f)); } -bool AShip::IsMod() { return true; } +bool AShip::IsMod() { + return true; +} diff --git a/src/engine/actors/Ship.h b/src/engine/actors/Ship.h index fe5743922..15e4ca48c 100644 --- a/src/engine/actors/Ship.h +++ b/src/engine/actors/Ship.h @@ -11,8 +11,7 @@ extern "C" { } class AShip : public AActor { -public: - + public: enum Skin { GHOSTSHIP, SHIP2, @@ -26,9 +25,9 @@ public: virtual bool IsMod() override; FVector Spawn; - //FVector Pos; - ///IRotator Rot = {0, 0, 0}; - //FVector Scale = {0.4, 0.4, 0.4}; -private: + // FVector Pos; + /// IRotator Rot = {0, 0, 0}; + // FVector Scale = {0.4, 0.4, 0.4}; + private: Gfx* _skin; }; diff --git a/src/engine/actors/SpaghettiShip.cpp b/src/engine/actors/SpaghettiShip.cpp index b09ada319..0566fd4b6 100644 --- a/src/engine/actors/SpaghettiShip.cpp +++ b/src/engine/actors/SpaghettiShip.cpp @@ -17,12 +17,12 @@ ASpaghettiShip::ASpaghettiShip(FVector pos) { Pos[2] = pos.z; Spawn = pos; Spawn.y += 10; - Scale = {0.4, 0.4, 0.4}; + Scale = { 0.4, 0.4, 0.4 }; } void ASpaghettiShip::Tick() { static float angle = 0.0f; // Keeps track of the ship's rotation around the circle - float radius = 150.0f; // The radius of the circular path + float radius = 150.0f; // The radius of the circular path float speed = 0.01f; // Speed of rotation angle += speed; // Increment the angle to move in a circle @@ -37,22 +37,22 @@ void ASpaghettiShip::Tick() { WheelRot.pitch += 500; } -void ASpaghettiShip::Draw(Camera *camera) { +void ASpaghettiShip::Draw(Camera* camera) { Mat4 shipMtx; Mat4 objectMtx; Mat4 resultMtx; - Vec3f hullPos = {Pos[0], Pos[1], Pos[2]}; - Vec3s hullRot = {Rot[0], Rot[1], Rot[2]}; - Vec3s rot = {WheelRot.pitch, WheelRot.yaw, WheelRot.roll}; + Vec3f hullPos = { Pos[0], Pos[1], Pos[2] }; + Vec3s hullRot = { Rot[0], Rot[1], Rot[2] }; + Vec3s rot = { WheelRot.pitch, WheelRot.yaw, WheelRot.roll }; gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - ApplyMatrixTransformations(shipMtx, *(FVector*)Pos, *(IRotator*)Rot, Scale); + ApplyMatrixTransformations(shipMtx, *(FVector*) Pos, *(IRotator*) Rot, Scale); if (render_set_position(shipMtx, 0) != 0) {} // Render the ships hull - ApplyMatrixTransformations(objectMtx, {0, 0, 0}, {0, 0, 0}, {1, 1, 1}); + ApplyMatrixTransformations(objectMtx, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 }); mtxf_multiplication(resultMtx, shipMtx, objectMtx); if (render_set_position(resultMtx, 3) != 0) { gSPDisplayList(gDisplayListHead++, ship1_spag1_mesh); @@ -67,10 +67,10 @@ void ASpaghettiShip::Draw(Camera *camera) { gSPDisplayList(gDisplayListHead++, wheels_Spaghetti_002_mesh); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } - + // Back tyre AddLocalRotation(shipMtx, WheelRot); - ApplyMatrixTransformations(objectMtx, FVector(0, 0, -165), {0, 0, 0}, {1, 1, 1}); + ApplyMatrixTransformations(objectMtx, FVector(0, 0, -165), { 0, 0, 0 }, { 1, 1, 1 }); mtxf_multiplication(resultMtx, shipMtx, objectMtx); if (render_set_position(resultMtx, 3) != 0) { gSPDisplayList(gDisplayListHead++, wheels_Spaghetti_002_mesh); @@ -78,4 +78,6 @@ void ASpaghettiShip::Draw(Camera *camera) { } } -bool ASpaghettiShip::IsMod() { return true; } +bool ASpaghettiShip::IsMod() { + return true; +} diff --git a/src/engine/actors/SpaghettiShip.h b/src/engine/actors/SpaghettiShip.h index 70bd047d7..9afef2719 100644 --- a/src/engine/actors/SpaghettiShip.h +++ b/src/engine/actors/SpaghettiShip.h @@ -11,7 +11,7 @@ extern "C" { } class ASpaghettiShip : public AActor { -public: + public: explicit ASpaghettiShip(FVector pos); virtual ~ASpaghettiShip() = default; @@ -20,5 +20,5 @@ public: virtual bool IsMod() override; FVector Spawn; - IRotator WheelRot = {0, 0, 0}; + IRotator WheelRot = { 0, 0, 0 }; }; diff --git a/src/engine/actors/Starship.cpp b/src/engine/actors/Starship.cpp index e104d0eb6..3bcd7c83b 100644 --- a/src/engine/actors/Starship.cpp +++ b/src/engine/actors/Starship.cpp @@ -33,10 +33,12 @@ void AStarship::Tick() { SetLocation(pos); // Keep y from changing (or adjust it if necessary) - //Pos.y = Spawn.y; + // Pos.y = Spawn.y; // Rotate to face forward along the circle Rot[1] = angle * (180.0f / M_PI) + 90.0f; } -bool AStarship::IsMod() { return true; } +bool AStarship::IsMod() { + return true; +} diff --git a/src/engine/actors/Starship.h b/src/engine/actors/Starship.h index 71b898358..83a8c2f82 100644 --- a/src/engine/actors/Starship.h +++ b/src/engine/actors/Starship.h @@ -11,7 +11,7 @@ extern "C" { } class AStarship : public AActor { -public: + public: explicit AStarship(FVector pos); virtual ~AStarship() = default; diff --git a/src/engine/actors/Tree.cpp b/src/engine/actors/Tree.cpp index faffd0798..2081a29a2 100644 --- a/src/engine/actors/Tree.cpp +++ b/src/engine/actors/Tree.cpp @@ -37,13 +37,12 @@ void ATree::Draw(Camera* camera) { return; } - dist = is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1], - DrawDistance); + dist = is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1], DrawDistance); if (CVarGetInteger("gNoCulling", 0) == 1) { dist = MAX(dist, 0.0f); } - + if (dist < 0.0f) { return; } @@ -63,5 +62,7 @@ void ATree::Draw(Camera* camera) { } } -void ATree::Collision(Player* player, AActor*) { } -void ATree::Destroy() { } +void ATree::Collision(Player* player, AActor*) { +} +void ATree::Destroy() { +} diff --git a/src/engine/actors/Tree.h b/src/engine/actors/Tree.h index eb51f6e7e..6df8c5053 100644 --- a/src/engine/actors/Tree.h +++ b/src/engine/actors/Tree.h @@ -7,13 +7,11 @@ extern "C" { #include "common_structs.h" } - // Note that this doesn't seem to work right // Use add_actor_to_empty_slot(test, rot, vel, ACTOR_TREE_MARIO_RACEWAY); // to spawn stock actors class ATree : public AActor { -public: - + public: Gfx* Displaylist; const char* Tlut; f32 DrawDistance; diff --git a/src/engine/actors/WarioSign.cpp b/src/engine/actors/WarioSign.cpp index 0e83e114f..ba1001b8e 100644 --- a/src/engine/actors/WarioSign.cpp +++ b/src/engine/actors/WarioSign.cpp @@ -22,7 +22,7 @@ void AWarioSign::Tick() { Rot[1] += 0xB6; } -void AWarioSign::Draw(Camera *camera) { +void AWarioSign::Draw(Camera* camera) { Mat4 sp38; f32 unk = is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 16000000.0f); @@ -37,7 +37,7 @@ void AWarioSign::Draw(Camera *camera) { mtxf_pos_rotation_xyz(sp38, Pos, Rot); if (render_set_position(sp38, 0) != 0) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_wario_stadium_dl_sign); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_wario_stadium_dl_sign); } } } diff --git a/src/engine/actors/WarioSign.h b/src/engine/actors/WarioSign.h index 634b2132e..15ab72a91 100644 --- a/src/engine/actors/WarioSign.h +++ b/src/engine/actors/WarioSign.h @@ -9,8 +9,7 @@ extern "C" { } class AWarioSign : public AActor { -public: - + public: virtual ~AWarioSign() = default; explicit AWarioSign(FVector pos); diff --git a/src/engine/courses/BansheeBoardwalk.cpp b/src/engine/courses/BansheeBoardwalk.cpp index 51049fb8d..bf4abc7bf 100644 --- a/src/engine/courses/BansheeBoardwalk.cpp +++ b/src/engine/courses/BansheeBoardwalk.cpp @@ -15,28 +15,28 @@ #include "assets/boo_frames.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course_offsets.h" - #include "course.h" - extern const char *banshee_boardwalk_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course_offsets.h" +#include "course.h" +extern const char* banshee_boardwalk_dls[]; } const course_texture banshee_boardwalk_textures[] = { @@ -95,7 +95,7 @@ BansheeBoardwalk::BansheeBoardwalk() { Props.NearPersp = 2.0f; Props.FarPersp = 2700.0f; - Props.PathSizes = {0x2EE, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x2EE, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -117,12 +117,12 @@ BansheeBoardwalk::BansheeBoardwalk() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -130,14 +130,14 @@ BansheeBoardwalk::BansheeBoardwalk() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {0, 0, 0}; - Props.Skybox.BottomRight = {0, 0, 0}; - Props.Skybox.BottomLeft = {0, 0, 0}; - Props.Skybox.TopLeft = {0, 0, 0}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 0, 0, 0 }; + Props.Skybox.BottomRight = { 0, 0, 0 }; + Props.Skybox.BottomLeft = { 0, 0, 0 }; + Props.Skybox.TopLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_BANSHEE_BOARDWALK; Props.WaterLevel = -80.0f; @@ -150,19 +150,19 @@ void BansheeBoardwalk::Load() { D_801625EC = 0; D_801625F4 = 0; D_801625F0 = 0; - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_sections)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_sections)); func_80295C6C(); - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000878), 128, 0, 0, 0); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07000878), 128, 0, 0, 0); } void BansheeBoardwalk::LoadTextures() { } void BansheeBoardwalk::BeginPlay() { - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns)); - - gWorldInstance.AddObject(new OCheepCheep(FVector(xOrientation * -1650.0, -200.0f, -1650.0f), OCheepCheep::CheepType::RACE, IPathSpan(160, 170))); + gWorldInstance.AddObject(new OCheepCheep(FVector(xOrientation * -1650.0, -200.0f, -1650.0f), + OCheepCheep::CheepType::RACE, IPathSpan(160, 170))); OTrashBin::Behaviour bhv; if (gModeSelection == TIME_TRIALS) { @@ -178,7 +178,7 @@ void BansheeBoardwalk::BeginPlay() { } if ((gGamestate != CREDITS_SEQUENCE) && (gModeSelection != TIME_TRIALS)) { - gWorldInstance.AddObject(new OBat(FVector(0,0,0), IRotator(0, 0, 90))); + gWorldInstance.AddObject(new OBat(FVector(0, 0, 0), IRotator(0, 0, 90))); gWorldInstance.AddObject(new OBoos(5, IPathSpan(180, 190), IPathSpan(200, 210), IPathSpan(280, 290))); gWorldInstance.AddObject(new OBoos(5, IPathSpan(490, 500), IPathSpan(510, 520), IPathSpan(620, 630))); } @@ -207,16 +207,16 @@ void BansheeBoardwalk::UpdateCourseObjects() { if (gGamestate != CREDITS_SEQUENCE) { func_8007E4C4(); if (gModeSelection != TIME_TRIALS) { - //update_bat(); + // update_bat(); } - //wrapper_update_boos(); + // wrapper_update_boos(); } } void BansheeBoardwalk::RenderCourseObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { - //render_object_bat(cameraId); - //render_object_boos(cameraId); + // render_object_bat(cameraId); + // render_object_boos(cameraId); } } @@ -224,8 +224,7 @@ void BansheeBoardwalk::SomeSounds() { } void BansheeBoardwalk::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x41); } @@ -239,8 +238,7 @@ void BansheeBoardwalk::WhatDoesThisDo(Player* player, int8_t playerId) { } void BansheeBoardwalk::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x41); } @@ -308,12 +306,12 @@ void BansheeBoardwalk::Render(struct UnkStruct_800DC5EC* arg0) { mtxf_translate(spCC, spA8); render_set_position(spCC, 0); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_banshee_boardwalk_dl_B278); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_B278); gDPPipeSync(gDisplayListHead++); } void BansheeBoardwalk::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_banshee_boardwalk_dl_B308)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_banshee_boardwalk_dl_B308)); } void BansheeBoardwalk::ScrollingTextures() { @@ -337,7 +335,8 @@ void BansheeBoardwalk::Waypoints(Player* player, int8_t playerId) { } } -void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) { gDPPipeSync(gDisplayListHead++); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -345,13 +344,14 @@ void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pat gDPSetBlendMask(gDisplayListHead++, 0xFF); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); // d_course_banshee_boardwalk_packed_dl_878 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07000878)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07000878)); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); gDPPipeSync(gDisplayListHead++); } void BansheeBoardwalk::CreditsSpawnActors() { - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000878), 0x32, 0, 0, 0); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07000878), 0x32, 0, 0, 0); } -void BansheeBoardwalk::Destroy() { } +void BansheeBoardwalk::Destroy() { +} diff --git a/src/engine/courses/BansheeBoardwalk.h b/src/engine/courses/BansheeBoardwalk.h index cc5b72213..b87f58255 100644 --- a/src/engine/courses/BansheeBoardwalk.h +++ b/src/engine/courses/BansheeBoardwalk.h @@ -4,30 +4,30 @@ #include "Course.h" extern "C" { - #include "assets/banshee_boardwalk_vertices.h" - #include "assets/banshee_boardwalk_displaylists.h" - #include "assets/banshee_boardwalk_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture banshee_boardwalk_textures[]; +#include "assets/banshee_boardwalk_vertices.h" +#include "assets/banshee_boardwalk_displaylists.h" +#include "assets/banshee_boardwalk_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture banshee_boardwalk_textures[]; } class BansheeBoardwalk : public Course { -public: - virtual ~BansheeBoardwalk() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~BansheeBoardwalk() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit BansheeBoardwalk(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; - //virtual void InitClouds() override; + // virtual void InitClouds() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; virtual void RenderCourseObjects(s32 cameraId) override; @@ -35,10 +35,11 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void ScrollingTextures() override; virtual void Waypoints(Player*, int8_t) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/BigDonut.cpp b/src/engine/courses/BigDonut.cpp index 4e99828eb..2b498059a 100644 --- a/src/engine/courses/BigDonut.cpp +++ b/src/engine/courses/BigDonut.cpp @@ -9,27 +9,27 @@ #include "assets/big_donut_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - extern const char *big_donut_dls[]; - extern s16 currentScreenSection; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +extern const char* big_donut_dls[]; +extern s16 currentScreenSection; } const course_texture big_donut_textures[] = { @@ -63,7 +63,7 @@ BigDonut::BigDonut() { Props.AIMinimumSeparation = 0.5f; Props.AISteeringSensitivity = 40; - Props.PathSizes = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -98,14 +98,14 @@ BigDonut::BigDonut() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {0, 0, 0}; - Props.Skybox.BottomRight = {0, 0, 0}; - Props.Skybox.BottomLeft = {0, 0, 0}; - Props.Skybox.TopLeft = {0, 0, 0}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 0, 0, 0 }; + Props.Skybox.BottomRight = { 0, 0, 0 }; + Props.Skybox.BottomLeft = { 0, 0, 0 }; + Props.Skybox.TopLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_BATTLE_ARENAS; Props.WaterLevel = 100.0f; @@ -115,23 +115,23 @@ void BigDonut::Load() { Course::Load(); // d_course_big_donut_packed_dl_1018 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07001018), 6); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07001018), 6); // d_course_big_donut_packed_dl_450 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000450), 6); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000450), 6); // d_course_big_donut_packed_dl_AC0 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000AC0), 6); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000AC0), 6); // d_course_big_donut_packed_dl_B58 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000B58), 6); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000B58), 6); // d_course_big_donut_packed_dl_230 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000230), 6); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000230), 6); func_80295C6C(); } void BigDonut::BeginPlay() { - spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns)); + spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns)); if (gModeSelection == VERSUS) { - FVector pos = {0, 0, 0}; + FVector pos = { 0, 0, 0 }; gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f)); gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f)); @@ -154,22 +154,24 @@ void BigDonut::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_big_donut_packed_dl_DE8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000DE8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000DE8))); } // d_course_big_donut_packed_dl_450 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000450))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000450))); // d_course_big_donut_packed_dl_AC0 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000AC0))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000AC0))); // d_course_big_donut_packed_dl_D20 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000D20))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000D20))); // d_course_big_donut_packed_dl_230 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000230))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000230))); } -void BigDonut::RenderCredits() {} +void BigDonut::RenderCredits() { +} void BigDonut::Waypoints(Player* player, int8_t playerId) { player->nearestWaypointId = 0; } -void BigDonut::Destroy() { } +void BigDonut::Destroy() { +} diff --git a/src/engine/courses/BigDonut.h b/src/engine/courses/BigDonut.h index bc10105e1..4add75b9f 100644 --- a/src/engine/courses/BigDonut.h +++ b/src/engine/courses/BigDonut.h @@ -4,19 +4,19 @@ #include "Course.h" extern "C" { - #include "assets/big_donut_vertices.h" - #include "assets/big_donut_displaylists.h" - #include "assets/big_donut_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture big_donut_textures[]; +#include "assets/big_donut_vertices.h" +#include "assets/big_donut_displaylists.h" +#include "assets/big_donut_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture big_donut_textures[]; } class BigDonut : public Course { -public: + public: virtual ~BigDonut() = default; explicit BigDonut(); @@ -24,7 +24,7 @@ public: virtual void Load() override; virtual void BeginPlay() override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/BlockFort.cpp b/src/engine/courses/BlockFort.cpp index cf246220e..d15b8bfef 100644 --- a/src/engine/courses/BlockFort.cpp +++ b/src/engine/courses/BlockFort.cpp @@ -9,28 +9,28 @@ #include "assets/block_fort_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course_offsets.h" - extern const char *block_fort_dls[]; - extern s16 currentScreenSection; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course_offsets.h" +extern const char* block_fort_dls[]; +extern s16 currentScreenSection; } const course_texture block_fort_textures[] = { @@ -68,7 +68,7 @@ BlockFort::BlockFort() { Props.NearPersp = 2.0f; Props.FarPersp = 2700.0f; - Props.PathSizes = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -103,27 +103,27 @@ BlockFort::BlockFort() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {128, 184, 248}; - Props.Skybox.BottomRight = {216, 232, 248}; - Props.Skybox.BottomLeft = {216, 232, 248}; - Props.Skybox.TopLeft = {128, 184, 248}; - Props.Skybox.FloorTopRight = {216, 232, 248}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {216, 232, 248}; + Props.Skybox.TopRight = { 128, 184, 248 }; + Props.Skybox.BottomRight = { 216, 232, 248 }; + Props.Skybox.BottomLeft = { 216, 232, 248 }; + Props.Skybox.TopLeft = { 128, 184, 248 }; + Props.Skybox.FloorTopRight = { 216, 232, 248 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 216, 232, 248 }; Props.Sequence = MusicSeq::MUSIC_SEQ_CHOCO_MOUNTAIN; } void BlockFort::Load() { Course::Load(); - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x070015C0), 1); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x070015C0), 1); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } void BlockFort::BeginPlay() { - spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns)); + spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns)); if (gModeSelection == VERSUS) { FVector pos = { 0, 0, 0 }; @@ -144,7 +144,7 @@ void BlockFort::Render(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); // d_course_block_fort_packed_dl_15C0 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x070015C0))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x070015C0))); } void BlockFort::Waypoints(Player* player, int8_t playerId) { diff --git a/src/engine/courses/BlockFort.h b/src/engine/courses/BlockFort.h index f0e4c6aa6..e07a036dc 100644 --- a/src/engine/courses/BlockFort.h +++ b/src/engine/courses/BlockFort.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/block_fort_vertices.h" - #include "assets/block_fort_displaylists.h" - #include "assets/block_fort_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture block_fort_textures[]; +#include "assets/block_fort_vertices.h" +#include "assets/block_fort_displaylists.h" +#include "assets/block_fort_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture block_fort_textures[]; } class BlockFort : public Course { -public: - virtual ~BlockFort() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~BlockFort() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit BlockFort(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void BeginPlay() override; virtual void Render(struct UnkStruct_800DC5EC*) override; diff --git a/src/engine/courses/BowsersCastle.cpp b/src/engine/courses/BowsersCastle.cpp index 22b6cbe78..fd37ab860 100644 --- a/src/engine/courses/BowsersCastle.cpp +++ b/src/engine/courses/BowsersCastle.cpp @@ -11,28 +11,28 @@ #include "bowsers_castle_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "code_8003DC40.h" - #include "memory.h" - #include "course.h" - extern const char *bowsers_castle_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "code_8003DC40.h" +#include "memory.h" +#include "course.h" +extern const char* bowsers_castle_dls[]; } const course_texture bowsers_castle_textures[] = { @@ -97,7 +97,7 @@ BowsersCastle::BowsersCastle() { Props.NearPersp = 2.0f; Props.FarPersp = 2700.0f; - Props.PathSizes = {0x30C, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x30C, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -119,12 +119,12 @@ BowsersCastle::BowsersCastle() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_bowsers_castle_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_bowsers_castle_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_bowsers_castle_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_bowsers_castle_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -132,24 +132,24 @@ BowsersCastle::BowsersCastle() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {48, 8, 120}; - Props.Skybox.BottomRight = {0, 0, 0}; - Props.Skybox.BottomLeft = {0, 0, 0}; - Props.Skybox.TopLeft = {48, 8, 120}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 48, 8, 120 }; + Props.Skybox.BottomRight = { 0, 0, 0 }; + Props.Skybox.BottomLeft = { 0, 0, 0 }; + Props.Skybox.TopLeft = { 48, 8, 120 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_BOWSERS_CASTLE; Props.WaterLevel = -50.0f; - WaterVolumes.push_back({20.0f, 1549.0f, 1859.0f, -1402.0f, -1102.0f}); + WaterVolumes.push_back({ 20.0f, 1549.0f, 1859.0f, -1402.0f, -1102.0f }); } void BowsersCastle::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_bowsers_castle_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_bowsers_castle_addr)); func_80295C6C(); find_vtx_and_set_colours(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07001350)), 0x32, 0, 0, 0); } @@ -176,8 +176,8 @@ void BowsersCastle::SpawnStockThwomp() { } void BowsersCastle::BeginPlay() { - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_tree_spawn)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_item_box_spawns)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_bowsers_castle_tree_spawn)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_bowsers_castle_item_box_spawns)); switch (gCCSelection) { case CC_100: @@ -268,7 +268,7 @@ void BowsersCastle::UpdateCourseObjects() { } void BowsersCastle::RenderCourseObjects(s32 cameraId) { - //render_object_thwomps(cameraId); + // render_object_thwomps(cameraId); render_object_bowser_flame(cameraId); } @@ -276,8 +276,7 @@ void BowsersCastle::SomeSounds() { } void BowsersCastle::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x41); } @@ -291,8 +290,7 @@ void BowsersCastle::WhatDoesThisDo(Player* player, int8_t playerId) { } void BowsersCastle::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x41); } @@ -333,10 +331,11 @@ void BowsersCastle::Render(struct UnkStruct_800DC5EC* arg0) { } void BowsersCastle::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_bowsers_castle_dl_9148)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_bowsers_castle_dl_9148)); } -void BowsersCastle::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) { +void BowsersCastle::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, + f32* arg6, f32* arg7) { func_8003E6EC(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } @@ -354,7 +353,8 @@ void BowsersCastle::Waypoints(Player* player, int8_t playerId) { } } -void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) { if (gActiveScreenMode != SCREEN_MODE_1P) { return; } @@ -372,11 +372,12 @@ void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCo return; } } - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_bowsers_castle_dl_9228); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_bowsers_castle_dl_9228); } void BowsersCastle::CreditsSpawnActors() { - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001350), 0x32, 0, 0, 0); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001350), 0x32, 0, 0, 0); } -void BowsersCastle::Destroy() { } +void BowsersCastle::Destroy() { +} diff --git a/src/engine/courses/BowsersCastle.h b/src/engine/courses/BowsersCastle.h index b52af2a26..739c598c3 100644 --- a/src/engine/courses/BowsersCastle.h +++ b/src/engine/courses/BowsersCastle.h @@ -4,31 +4,31 @@ #include "Course.h" extern "C" { - #include "assets/bowsers_castle_vertices.h" - #include "assets/bowsers_castle_displaylists.h" - #include "assets/bowsers_castle_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture bowsers_castle_textures[]; +#include "assets/bowsers_castle_vertices.h" +#include "assets/bowsers_castle_displaylists.h" +#include "assets/bowsers_castle_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture bowsers_castle_textures[]; } class BowsersCastle : public Course { -public: - virtual ~BowsersCastle() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~BowsersCastle() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit BowsersCastle(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; void SpawnStockThwomp(); virtual void BeginPlay() override; - //virtual void InitClouds() override; + // virtual void InitClouds() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; virtual void RenderCourseObjects(s32 cameraId) override; @@ -37,9 +37,11 @@ public: virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; virtual void RenderCredits() override; - virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; + virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, + f32* arg7) override; virtual void Waypoints(Player*, int8_t) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection); + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection); virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/ChocoMountain.cpp b/src/engine/courses/ChocoMountain.cpp index be5dcb0b1..089e80abb 100644 --- a/src/engine/courses/ChocoMountain.cpp +++ b/src/engine/courses/ChocoMountain.cpp @@ -10,29 +10,29 @@ #include "engine/actors/Finishline.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "code_8003DC40.h" - #include "memory.h" - #include "course_offsets.h" - #include "course.h" - extern const char *choco_mountain_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "code_8003DC40.h" +#include "memory.h" +#include "course_offsets.h" +#include "course.h" +extern const char* choco_mountain_dls[]; } const course_texture choco_mountain_textures[] = { @@ -88,7 +88,7 @@ ChocoMountain::ChocoMountain() { Props.NearPersp = 2.0f; Props.FarPersp = 1500.0f; - Props.PathSizes = {0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -110,12 +110,12 @@ ChocoMountain::ChocoMountain() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_choco_mountain_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_choco_mountain_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_choco_mountain_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_choco_mountain_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -123,14 +123,14 @@ ChocoMountain::ChocoMountain() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {255, 255, 255}; - Props.Skybox.BottomRight = {255, 255, 255}; - Props.Skybox.BottomLeft = {255, 255, 255}; - Props.Skybox.TopLeft = {255, 255, 255}; - Props.Skybox.FloorTopRight = {255, 255, 255}; - Props.Skybox.FloorBottomRight = {255, 255, 255}; - Props.Skybox.FloorBottomLeft = {255, 255, 255}; - Props.Skybox.FloorTopLeft = {255, 255, 255}; + Props.Skybox.TopRight = { 255, 255, 255 }; + Props.Skybox.BottomRight = { 255, 255, 255 }; + Props.Skybox.BottomLeft = { 255, 255, 255 }; + Props.Skybox.TopLeft = { 255, 255, 255 }; + Props.Skybox.FloorTopRight = { 255, 255, 255 }; + Props.Skybox.FloorBottomRight = { 255, 255, 255 }; + Props.Skybox.FloorBottomLeft = { 255, 255, 255 }; + Props.Skybox.FloorTopLeft = { 255, 255, 255 }; Props.Sequence = MusicSeq::MUSIC_SEQ_CHOCO_MOUNTAIN; Props.WaterLevel = -80.0f; @@ -163,7 +163,7 @@ void ChocoMountain::Load() { nullify_displaylist((uintptr_t) segmented_gfx_to_virtual(reinterpret_cast<void*>(0x070003C8))); } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_choco_mountain_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_choco_mountain_addr)); func_802B5CAC(0x238E, 0x31C7, D_8015F590); func_80295C6C(); } @@ -172,8 +172,9 @@ void ChocoMountain::LoadTextures() { } void ChocoMountain::BeginPlay() { - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns)); - spawn_falling_rocks((struct ActorSpawnData*)LOAD_ASSET_RAW((const char*)d_course_choco_mountain_falling_rock_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns)); + spawn_falling_rocks( + (struct ActorSpawnData*) LOAD_ASSET_RAW((const char*) d_course_choco_mountain_falling_rock_spawns)); if (gModeSelection == VERSUS) { FVector pos = { 0, 0, 0 }; @@ -206,8 +207,7 @@ void ChocoMountain::SomeSounds() { } void ChocoMountain::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) && ((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x55); } @@ -221,8 +221,7 @@ void ChocoMountain::WhatDoesThisDo(Player* player, int8_t playerId) { } void ChocoMountain::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) && ((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x55); } @@ -283,11 +282,13 @@ void ChocoMountain::Render(struct UnkStruct_800DC5EC* arg0) { } void ChocoMountain::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_choco_mountain_dl_71B8)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_choco_mountain_dl_71B8)); } -void ChocoMountain::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) { +void ChocoMountain::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, + f32* arg6, f32* arg7) { func_8003E37C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -void ChocoMountain::Destroy() { } +void ChocoMountain::Destroy() { +} diff --git a/src/engine/courses/ChocoMountain.h b/src/engine/courses/ChocoMountain.h index b592ba9df..e9eb83263 100644 --- a/src/engine/courses/ChocoMountain.h +++ b/src/engine/courses/ChocoMountain.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/choco_mountain_vertices.h" - #include "assets/choco_mountain_displaylists.h" - #include "assets/choco_mountain_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture choco_mountain_textures[]; +#include "assets/choco_mountain_vertices.h" +#include "assets/choco_mountain_displaylists.h" +#include "assets/choco_mountain_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture choco_mountain_textures[]; } class ChocoMountain : public Course { -public: - virtual ~ChocoMountain() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~ChocoMountain() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit ChocoMountain(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -32,7 +32,8 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; - virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; + virtual void RenderCredits() override; + virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, + f32* arg7) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/Course.cpp b/src/engine/courses/Course.cpp index bbc9455fe..c27ab2590 100644 --- a/src/engine/courses/Course.cpp +++ b/src/engine/courses/Course.cpp @@ -43,7 +43,7 @@ Course::Course() { Props.Minimap.PlayerScaleFactor = 0.22f; Props.Minimap.FinishlineX = 0; Props.Minimap.FinishlineY = 0; - Props.Minimap.Colour = {255, 255, 255}; + Props.Minimap.Colour = { 255, 255, 255 }; Props.WaterLevel = -10.0f; Props.LakituTowType = (s32) OLakitu::LakituTowType::NORMAL; @@ -115,11 +115,11 @@ void Course::LoadO2R(std::string trackPath) { size_t i = 0; for (auto& path : paths) { if (i == 0) { - Props.PathTable[0] = (TrackWaypoint*)path.data(); + Props.PathTable[0] = (TrackWaypoint*) path.data(); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)path.data(); + Props.PathTable2[0] = (TrackWaypoint*) path.data(); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -140,7 +140,7 @@ void Course::Load() { // Load from O2R if (!TrackSectionsPtr.empty()) { bIsMod = true; - //auto res = std::dynamic_pointer_cast<MK64::TrackSectionsO2RClass>(ResourceLoad(TrackSectionsPtr.c_str())); + // auto res = std::dynamic_pointer_cast<MK64::TrackSectionsO2RClass>(ResourceLoad(TrackSectionsPtr.c_str())); TrackSectionsO2R* sections = (TrackSectionsO2R*) LOAD_ASSET_RAW(TrackSectionsPtr.c_str()); size_t size = ResourceGetSizeByName(TrackSectionsPtr.c_str()); @@ -217,8 +217,9 @@ void Course::ParseCourseSections(TrackSectionsO2R* sections, size_t size) { } else { D_8015F5A4 = 0; } - printf("LOADING DL %s\n", sections[i].addr.c_str()); - generate_collision_mesh((Gfx*)LOAD_ASSET_RAW(sections[i].addr.c_str()), sections[i].surfaceType, sections[i].sectionId); + printf("LOADING DL %s\n", sections[i].addr.c_str()); + generate_collision_mesh((Gfx*) LOAD_ASSET_RAW(sections[i].addr.c_str()), sections[i].surfaceType, + sections[i].sectionId); } } @@ -228,8 +229,8 @@ void Course::TestPath() { s16 x; s16 y; s16 z; - Vec3s rot = {0, 0, 0}; - Vec3f vel = {0, 0, 0}; + Vec3s rot = { 0, 0, 0 }; + Vec3f vel = { 0, 0, 0 }; for (size_t i = 0; i < gWaypointCountByPathIndex[0]; i++) { x = D_80164550[0][i].posX; @@ -241,7 +242,7 @@ void Course::TestPath() { } f32 height = spawn_actor_on_surface(x, 2000.0f, z); - Vec3f itemPos = {x, height, z}; + Vec3f itemPos = { x, height, z }; add_actor_to_empty_slot(itemPos, rot, vel, ACTOR_ITEM_BOX); } } @@ -337,7 +338,7 @@ void Course::Render(struct UnkStruct_800DC5EC* arg0) { if (!TrackSectionsPtr.empty()) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - // set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); + // set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); @@ -347,10 +348,10 @@ void Course::Render(struct UnkStruct_800DC5EC* arg0) { // d_course_big_donut_packed_dl_DE8 } - TrackSectionsO2R* sections = (TrackSectionsO2R*)LOAD_ASSET_RAW(TrackSectionsPtr.c_str()); + TrackSectionsO2R* sections = (TrackSectionsO2R*) LOAD_ASSET_RAW(TrackSectionsPtr.c_str()); size_t size = ResourceGetSizeByName(TrackSectionsPtr.c_str()); for (size_t i = 0; i < (size / sizeof(TrackSectionsO2R)); i++) { - gSPDisplayList(gDisplayListHead++, (Gfx*)LOAD_ASSET_RAW(sections[i].addr.c_str())); + gSPDisplayList(gDisplayListHead++, (Gfx*) LOAD_ASSET_RAW(sections[i].addr.c_str())); } } } @@ -363,8 +364,7 @@ f32 Course::GetWaterLevel(FVector pos, Collision* collision) { bool found = false; for (const auto& volume : gWorldInstance.CurrentCourse->WaterVolumes) { - if (pos.x >= volume.MinX && pos.x <= volume.MaxX && - pos.z >= volume.MinZ && pos.z <= volume.MaxZ) { + if (pos.x >= volume.MinX && pos.x <= volume.MaxX && pos.z >= volume.MinZ && pos.z <= volume.MaxZ) { // Choose the highest water volume the player is over if (!found || volume.Height > highestWater) { highestWater = volume.Height; diff --git a/src/engine/courses/Course.h b/src/engine/courses/Course.h index 0a0eff823..d16c9c5a5 100644 --- a/src/engine/courses/Course.h +++ b/src/engine/courses/Course.h @@ -53,10 +53,10 @@ typedef struct MinimapProps { int16_t Width; int16_t Height; IVector2D Pos[2]; // Minimap position for players 1 and 2. 3/4 player mode is hard-coded to the center. - int32_t PlayerX; // The offset to place the player markers + int32_t PlayerX; // The offset to place the player markers int32_t PlayerY; float PlayerScaleFactor; // Scale factor of the player markers - float FinishlineX; // The offset to place the finishline texture on the minimap + float FinishlineX; // The offset to place the finishline texture on the minimap float FinishlineY; RGB8 Colour; // Colour of the visible pixels (the track path) } MinimapProps; @@ -82,17 +82,17 @@ typedef struct Properties { TrackWaypoint* PathTable[4]; TrackWaypoint* PathTable2[4]; uint8_t* CloudTexture; - CloudData *Clouds; - CloudData *CloudList; + CloudData* Clouds; + CloudData* CloudList; SkyboxColours Skybox; - const course_texture *textures; + const course_texture* textures; enum MusicSeq Sequence; float WaterLevel; // Used for effects, and Lakitu pick up height. Not necessarily the visual water model height. #ifdef __cplusplus nlohmann::json to_json() const { nlohmann::json j; - // j["Id"] = Id ? Id : ""; + // j["Id"] = Id ? Id : ""; j["Name"] = Name ? Name : ""; j["DebugName"] = DebugName ? DebugName : ""; j["CourseLength"] = CourseLength ? CourseLength : ""; @@ -117,21 +117,23 @@ typedef struct Properties { j["D_0D009808"] = { D_0D009808[0], D_0D009808[1], D_0D009808[2], D_0D009808[3] }; // Serialize arrays PathTable and PathTable2 (convert pointers into a JSON array if possible) - //j["PathTable"] = {{}}; - //j["PathTable2"] = {{}}; + // j["PathTable"] = {{}}; + // j["PathTable2"] = {{}}; // Populate PathTable and PathTable2 - //j["Clouds"] = Clouds ? nlohmann::json{{"x", Clouds->x, "y", Clouds->y, "z", Clouds->z}} : nullptr; - //j["CloudList"] = CloudList ? nlohmann::json{{"x", CloudList->x, "y", CloudList->y, "z", CloudList->z}} : nullptr; - - j["MinimapPosition"] = {Minimap.Pos[0].X, Minimap.Pos[0].Y}; - j["MinimapPosition2P"] = {Minimap.Pos[1].X, Minimap.Pos[1].Y}; + // j["Clouds"] = Clouds ? nlohmann::json{{"x", Clouds->x, "y", Clouds->y, "z", Clouds->z}} : nullptr; + // j["CloudList"] = CloudList ? nlohmann::json{{"x", CloudList->x, "y", CloudList->y, "z", CloudList->z}} : + // nullptr; + + j["MinimapPosition"] = { Minimap.Pos[0].X, Minimap.Pos[0].Y }; + j["MinimapPosition2P"] = { Minimap.Pos[1].X, Minimap.Pos[1].Y }; j["MinimapPlayerX"] = Minimap.PlayerX; j["MinimapPlayerY"] = Minimap.PlayerY; j["MinimapPlayerScaleFactor"] = Minimap.PlayerScaleFactor; j["MinimapFinishlineX"] = Minimap.FinishlineX; j["MinimapFinishlineY"] = Minimap.FinishlineY; - j["MinimapColour"] = {static_cast<int>(Minimap.Colour.r), static_cast<int>(Minimap.Colour.g), static_cast<int>(Minimap.Colour.b)}; + j["MinimapColour"] = { static_cast<int>(Minimap.Colour.r), static_cast<int>(Minimap.Colour.g), + static_cast<int>(Minimap.Colour.b) }; // SkyboxColors - assuming SkyboxColors can be serialized similarly // j["Skybox"] = Skybox; // Implement your serialization logic here j["Sequence"] = static_cast<int>(Sequence); @@ -143,16 +145,16 @@ typedef struct Properties { // Function to load struct from JSON void from_json(const nlohmann::json& j) { - //Id = j.at("Id").get<std::string>().c_str(); -// Name = j.at("Name").get<std::string>().c_str(); + // Id = j.at("Id").get<std::string>().c_str(); + // Name = j.at("Name").get<std::string>().c_str(); strncpy(Name, j.at("Name").get<std::string>().c_str(), sizeof(Name) - 1); Name[sizeof(Name) - 1] = '\0'; // Ensure null termination -// DebugName = j.at("DebugName").get<std::string>().c_str(); + // DebugName = j.at("DebugName").get<std::string>().c_str(); strncpy(DebugName, j.at("DebugName").get<std::string>().c_str(), sizeof(DebugName) - 1); DebugName[sizeof(DebugName) - 1] = '\0'; // Ensure null termination - // CourseLength = j.at("CourseLength").get<std::string>().c_str(); + // CourseLength = j.at("CourseLength").get<std::string>().c_str(); strncpy(CourseLength, j.at("CourseLength").get<std::string>().c_str(), sizeof(CourseLength) - 1); CourseLength[sizeof(CourseLength) - 1] = '\0'; // Ensure null termination @@ -197,11 +199,11 @@ typedef struct Properties { D_0D009808[1] = j.at("D_0D009808")[1].get<float>(); D_0D009808[2] = j.at("D_0D009808")[2].get<float>(); D_0D009808[3] = j.at("D_0D009808")[3].get<float>(); - + // Deserialize arrays PathTable and PathTable2 similarly - - //Clouds = nullptr; // Deserialize if data is present - //CloudList = nullptr; // Deserialize if data is present + + // Clouds = nullptr; // Deserialize if data is present + // CloudList = nullptr; // Deserialize if data is present Minimap.Pos[0].X = j.at("MinimapPosition")[0].get<int32_t>(); Minimap.Pos[0].Y = j.at("MinimapPosition")[1].get<int32_t>(); Minimap.Pos[1].X = j.at("MinimapPosition2P")[0].get<int32_t>(); @@ -214,14 +216,14 @@ typedef struct Properties { Minimap.Colour.r = j.at("MinimapColour")[0].get<uint8_t>(); Minimap.Colour.g = j.at("MinimapColour")[1].get<uint8_t>(); Minimap.Colour.b = j.at("MinimapColour")[2].get<uint8_t>(); - //textures = nullptr; // Deserialize textures if present + // textures = nullptr; // Deserialize textures if present Sequence = static_cast<MusicSeq>(j.at("Sequence").get<int>()); WaterLevel = j.at("WaterLevel").get<float>(); } void SetText(char* name, const char* title, size_t bufferSize) { // Copy the title into the name buffer, ensuring it's null-terminated and within bounds std::strncpy(name, title, bufferSize - 1); - name[bufferSize - 1] = '\0'; // Ensure the string is null-terminated + name[bufferSize - 1] = '\0'; // Ensure the string is null-terminated } const char* GetName() { @@ -243,7 +245,7 @@ class World; // <-- Forward declare class Course { -public: + public: std::string Id; Properties Props; @@ -266,7 +268,9 @@ public: virtual void LoadO2R(std::string trackPath); // Load custom track from o2r virtual void Load(); // Decompress and load stock courses or from o2r but TrackSectionsPtr must be set. - virtual void Load(Vtx* vtx, Gfx *gfx); // Load custom track from code. Load must be overridden and then call to this base class method impl. + virtual void Load( + Vtx* vtx, + Gfx* gfx); // Load custom track from code. Load must be overridden and then call to this base class method impl. virtual void LoadTextures(); virtual void ParseCourseSections(TrackSectionsO2R* sections, size_t size); @@ -278,7 +282,8 @@ public: virtual void TestPath(); virtual void InitClouds(); virtual void UpdateClouds(s32, Camera*); - virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7); + virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, + f32* arg7); virtual void InitCourseObjects(); virtual void UpdateCourseObjects(); virtual void RenderCourseObjects(s32 cameraId); @@ -292,10 +297,12 @@ public: virtual void Waypoints(Player* player, int8_t playerId); virtual f32 GetWaterLevel(FVector pos, Collision* collision); virtual void ScrollingTextures(); - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection); + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection); virtual void Destroy(); virtual bool IsMod(); -private: + + private: void Init(); }; diff --git a/src/engine/courses/DKJungle.cpp b/src/engine/courses/DKJungle.cpp index bbb602584..7ada96a48 100644 --- a/src/engine/courses/DKJungle.cpp +++ b/src/engine/courses/DKJungle.cpp @@ -13,31 +13,31 @@ #include "engine/vehicles/Utils.h" extern "C" { - #include "main.h" - #include "common_structs.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "code_8003DC40.h" - #include "memory.h" - #include "sounds.h" - #include "course.h" - extern const char *d_course_dks_jungle_parkway_unknown_dl_list[]; - extern s16 currentScreenSection; +#include "main.h" +#include "common_structs.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "code_8003DC40.h" +#include "memory.h" +#include "sounds.h" +#include "course.h" +extern const char* d_course_dks_jungle_parkway_unknown_dl_list[]; +extern s16 currentScreenSection; } const course_texture dks_jungle_parkway_textures[] = { @@ -96,7 +96,7 @@ DKJungle::DKJungle() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {0x370, 1, 1, 1, 0x1F4, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x370, 1, 1, 1, 0x1F4, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -118,12 +118,12 @@ DKJungle::DKJungle() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_dks_jungle_parkway_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_dks_jungle_parkway_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -131,14 +131,14 @@ DKJungle::DKJungle() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {255, 174, 0}; - Props.Skybox.BottomRight = {255, 229, 124}; - Props.Skybox.BottomLeft = {255, 229, 124}; - Props.Skybox.TopLeft = {255, 174, 0}; - Props.Skybox.FloorTopRight = {22, 145, 22}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {22, 145, 22}; + Props.Skybox.TopRight = { 255, 174, 0 }; + Props.Skybox.BottomRight = { 255, 229, 124 }; + Props.Skybox.BottomLeft = { 255, 229, 124 }; + Props.Skybox.TopLeft = { 255, 174, 0 }; + Props.Skybox.FloorTopRight = { 22, 145, 22 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 22, 145, 22 }; Props.Sequence = MusicSeq::MUSIC_SEQ_DK_JUNGLE; Props.WaterLevel = -475.0f; @@ -147,10 +147,10 @@ DKJungle::DKJungle() { void DKJungle::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_dks_jungle_parkway_addr)); func_80295C6C(); // d_course_dks_jungle_parkway_packed_dl_3FA8 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07003FA8), 120, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07003FA8), 120, 255, 255, 255); } f32 DKJungle::GetWaterLevel(FVector pos, Collision* collision) { @@ -191,7 +191,7 @@ void DKJungle::LoadTextures() { } void DKJungle::BeginPlay() { - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_dks_jungle_parkway_item_box_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_dks_jungle_parkway_item_box_spawns)); init_kiwano_fruit(); func_80298D10(); @@ -201,7 +201,7 @@ void DKJungle::BeginPlay() { // The original game only ran vehicle logic every second frame. // Thus the speed gets divided by two to set speed to match properly - gWorldInstance.AddActor(new ABoat((0.6666666f)/4, 0)); + gWorldInstance.AddActor(new ABoat((0.6666666f) / 4, 0)); if (gModeSelection == VERSUS) { FVector pos = { 0, 0, 0 }; @@ -241,10 +241,9 @@ void DKJungle::SomeSounds() { } void DKJungle::WhatDoesThisDo(Player* player, int8_t playerId) { - if ((((s16) gNearestWaypointByPlayerId[playerId] >= 0) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x65)) || + if ((((s16) gNearestWaypointByPlayerId[playerId] >= 0) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x65)) || (((s16) gNearestWaypointByPlayerId[playerId] >= 0x14A) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x21F))) { + ((s16) gNearestWaypointByPlayerId[playerId] < 0x21F))) { if (D_80165300[playerId] != 2) { func_800C8F80(playerId, 0x0170802D); } @@ -271,8 +270,7 @@ void DKJungle::WhatDoesThisDo(Player* player, int8_t playerId) { } void DKJungle::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x288) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x305)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x288) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x305)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x55); } @@ -297,7 +295,7 @@ void DKJungle::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_dks_jungle_parkway_packed_dl_92D8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x070092D8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x070092D8))); } gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -309,10 +307,11 @@ void DKJungle::Render(struct UnkStruct_800DC5EC* arg0) { } void DKJungle::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_dks_jungle_parkway_dl_13C30)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_dks_jungle_parkway_dl_13C30)); } -void DKJungle::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) { +void DKJungle::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, + f32* arg7) { func_8003F138(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } @@ -334,25 +333,26 @@ void DKJungle::ScrollingTextures() { D_802B87BC = 0; } // d_course_dks_jungle_parkway_packed_dl_3DD0 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x07003DD0), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x07003DD0), 0, D_802B87BC); // d_course_dks_jungle_parkway_packed_dl_3E40 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x07003E40), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x07003E40), 0, D_802B87BC); // d_course_dks_jungle_parkway_packed_dl_3EB0 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x07003EB0), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x07003EB0), 0, D_802B87BC); // d_course_dks_jungle_parkway_packed_dl_3F30 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x07003F30), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x07003F30), 0, D_802B87BC); // d_course_dks_jungle_parkway_packed_dl_36A8 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x070036A8), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x070036A8), 0, D_802B87BC); D_802B87C4 -= 20; if (D_802B87C4 < 0) { D_802B87C4 = 0xFF; } // d_course_dks_jungle_parkway_packed_dl_9880 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x07009880), 0, D_802B87C4); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x07009880), 0, D_802B87C4); evaluate_collision_players_palm_trees(); } -void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) { Mat4 matrix; gDPPipeSync(gDisplayListHead++); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -370,46 +370,46 @@ void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter if (pathCounter < 17) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); if ((pathCounter >= 6) && (pathCounter < 13)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003DD0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003DD0)); } } else if ((pathCounter == 21) || (pathCounter == 22)) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070036A8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070036A8)); } if ((playerDirection == 1) || (playerDirection == 0)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070036A8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070036A8)); } else { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003F30)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003F30)); // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070036A8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070036A8)); } } else if (pathCounter == 24) { if ((playerDirection == 0) || (playerDirection == 3)) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070036A8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070036A8)); } } else if (pathCounter == 23) { if (playerDirection == 3) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070036A8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070036A8)); } else if (playerDirection == 0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); // d_course_dks_jungle_parkway_packed_dl_36A8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070036A8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070036A8)); } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -417,38 +417,38 @@ void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter case 5: if (playerDirection != 3) { // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003DD0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003DD0)); } break; case 17: switch (playerDirection) { case 0: // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); break; case 1: // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003DD0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003DD0)); // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); break; case 2: // d_course_dks_jungle_parkway_packed_dl_ - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003F30)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003F30)); break; case 3: // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003F30)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003F30)); break; } break; @@ -456,49 +456,49 @@ void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter switch (playerDirection) { case 0: // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); break; case 1: // d_course_dks_jungle_parkway_packed_dl_3DD0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003DD0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003DD0)); // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); break; case 2: // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); break; } break; case 21: if ((playerDirection == 0) || (playerDirection == 1)) { // d_course_dks_jungle_parkway_packed_dl_3E40 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003E40)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003E40)); // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003F30)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003F30)); } else { // d_course_dks_jungle_parkway_packed_dl_3EB0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003EB0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003EB0)); } break; case 22: if (playerDirection == 0) { // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003F30)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003F30)); } break; case 23: if (playerDirection != 1) { // d_course_dks_jungle_parkway_packed_dl_3F30 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07003F30)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07003F30)); } break; } @@ -509,7 +509,8 @@ void DKJungle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter void DKJungle::CreditsSpawnActors() { // d_course_dks_jungle_parkway_packed_dl_3FA8 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07003FA8), 0x78, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07003FA8), 0x78, 0xFF, 0xFF, 0xFF); } -void DKJungle::Destroy() { } +void DKJungle::Destroy() { +} diff --git a/src/engine/courses/DKJungle.h b/src/engine/courses/DKJungle.h index 84767a94a..bcc02196c 100644 --- a/src/engine/courses/DKJungle.h +++ b/src/engine/courses/DKJungle.h @@ -4,31 +4,31 @@ #include "Course.h" extern "C" { - #include "assets/dks_jungle_parkway_vertices.h" - #include "assets/dks_jungle_parkway_displaylists.h" - #include "assets/dks_jungle_parkway_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture dks_jungle_parkway_textures[]; +#include "assets/dks_jungle_parkway_vertices.h" +#include "assets/dks_jungle_parkway_displaylists.h" +#include "assets/dks_jungle_parkway_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture dks_jungle_parkway_textures[]; } class DKJungle : public Course { -public: - virtual ~DKJungle() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~DKJungle() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit DKJungle(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual f32 GetWaterLevel(FVector pos, Collision* collision) override; virtual void BeginPlay() override; - //virtual void InitClouds() override; + // virtual void InitClouds() override; virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; virtual void RenderCourseObjects(s32 cameraId) override; @@ -37,10 +37,12 @@ public: virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; virtual void RenderCredits() override; - virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; + virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, + f32* arg7) override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void ScrollingTextures() override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/DoubleDeck.cpp b/src/engine/courses/DoubleDeck.cpp index ecadf9d48..f3abbc603 100644 --- a/src/engine/courses/DoubleDeck.cpp +++ b/src/engine/courses/DoubleDeck.cpp @@ -9,27 +9,27 @@ #include "assets/double_deck_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - extern const char *double_deck_dls[]; - extern s16 currentScreenSection; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +extern const char* double_deck_dls[]; +extern s16 currentScreenSection; } const course_texture double_deck_textures[] = { @@ -58,7 +58,6 @@ DoubleDeck::DoubleDeck() { Props.SetText(Props.DebugName, "deck", sizeof(Props.DebugName)); Props.SetText(Props.CourseLength, "", sizeof(Props.CourseLength)); - Props.AIBehaviour = D_0D008F18; Props.AIMaximumSeparation = -1.0f; Props.AIMinimumSeparation = 0.5f; @@ -67,7 +66,7 @@ DoubleDeck::DoubleDeck() { Props.NearPersp = 2.0f; Props.FarPersp = 1500.0f; - Props.PathSizes = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -102,21 +101,21 @@ DoubleDeck::DoubleDeck() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {113, 70, 255}; - Props.Skybox.BottomRight = {255, 184, 99}; - Props.Skybox.BottomLeft = {255, 184, 99}; - Props.Skybox.TopLeft = {113, 70, 255}; - Props.Skybox.FloorTopRight = {255, 224, 240}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {255, 224, 240}; + Props.Skybox.TopRight = { 113, 70, 255 }; + Props.Skybox.BottomRight = { 255, 184, 99 }; + Props.Skybox.BottomLeft = { 255, 184, 99 }; + Props.Skybox.TopLeft = { 113, 70, 255 }; + Props.Skybox.FloorTopRight = { 255, 224, 240 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 255, 224, 240 }; Props.Sequence = MusicSeq::MUSIC_SEQ_CHOCO_MOUNTAIN; } void DoubleDeck::Load() { Course::Load(); - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000738), 1); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000738), 1); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -125,7 +124,7 @@ void DoubleDeck::LoadTextures() { } void DoubleDeck::BeginPlay() { - spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_double_deck_item_box_spawns)); + spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_double_deck_item_box_spawns)); if (gModeSelection == VERSUS) { FVector pos = { 0, 0, 0 }; @@ -140,13 +139,17 @@ void DoubleDeck::BeginPlay() { } } -void DoubleDeck::InitCourseObjects() {} +void DoubleDeck::InitCourseObjects() { +} -void DoubleDeck::SomeSounds() {} +void DoubleDeck::SomeSounds() { +} -void DoubleDeck::WhatDoesThisDo(Player* player, int8_t playerId) {} +void DoubleDeck::WhatDoesThisDo(Player* player, int8_t playerId) { +} -void DoubleDeck::WhatDoesThisDoAI(Player* player, int8_t playerId) {} +void DoubleDeck::WhatDoesThisDoAI(Player* player, int8_t playerId) { +} void DoubleDeck::Render(struct UnkStruct_800DC5EC* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); @@ -155,14 +158,16 @@ void DoubleDeck::Render(struct UnkStruct_800DC5EC* arg0) { gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_double_deck_packed_dl_738 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000738))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000738))); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } -void DoubleDeck::RenderCredits() {} +void DoubleDeck::RenderCredits() { +} void DoubleDeck::Waypoints(Player* player, int8_t playerId) { player->nearestWaypointId = 0; } -void DoubleDeck::Destroy() { } +void DoubleDeck::Destroy() { +} diff --git a/src/engine/courses/DoubleDeck.h b/src/engine/courses/DoubleDeck.h index 2ebb5d9c3..d53483239 100644 --- a/src/engine/courses/DoubleDeck.h +++ b/src/engine/courses/DoubleDeck.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/double_deck_vertices.h" - #include "assets/double_deck_displaylists.h" - #include "assets/double_deck_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture double_deck_textures[]; +#include "assets/double_deck_vertices.h" +#include "assets/double_deck_displaylists.h" +#include "assets/double_deck_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture double_deck_textures[]; } class DoubleDeck : public Course { -public: - virtual ~DoubleDeck() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~DoubleDeck() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit DoubleDeck(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -32,7 +32,7 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/FrappeSnowland.cpp b/src/engine/courses/FrappeSnowland.cpp index 16b9b7380..e41bc2625 100644 --- a/src/engine/courses/FrappeSnowland.cpp +++ b/src/engine/courses/FrappeSnowland.cpp @@ -13,30 +13,30 @@ #include "assets/boo_frames.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "update_objects.h" - #include "course_offsets.h" - #include "course.h" - extern const char *d_course_frappe_snowland_dl_list[]; - extern s8 gPlayerCount; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "update_objects.h" +#include "course_offsets.h" +#include "course.h" +extern const char* d_course_frappe_snowland_dl_list[]; +extern s8 gPlayerCount; } const course_texture frappe_snowland_textures[] = { @@ -62,7 +62,7 @@ FrappeSnowland::FrappeSnowland() { Props.Minimap.PlayerScaleFactor = 0.016f; Props.Minimap.FinishlineX = 0; Props.Minimap.FinishlineY = 0; - Props.Minimap.Colour = {72, 100, 255}; + Props.Minimap.Colour = { 72, 100, 255 }; Props.SetText(Props.Name, "frappe snowland", sizeof(Props.Name)); Props.SetText(Props.DebugName, "snow", sizeof(Props.DebugName)); @@ -76,7 +76,7 @@ FrappeSnowland::FrappeSnowland() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {0x2EE, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x2EE, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -98,12 +98,12 @@ FrappeSnowland::FrappeSnowland() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_frappe_snowland_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_frappe_snowland_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_frappe_snowland_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_frappe_snowland_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -111,14 +111,14 @@ FrappeSnowland::FrappeSnowland() { Props.Clouds = NULL; // not used for frappe Props.CloudList = NULL; - Props.Skybox.TopRight = {28, 11, 90}; - Props.Skybox.BottomRight = {0, 99, 164}; - Props.Skybox.BottomLeft = {0, 9, 164}; - Props.Skybox.TopLeft = {28, 11, 90}; - Props.Skybox.FloorTopRight = {0, 99, 164}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 99, 164}; + Props.Skybox.TopRight = { 28, 11, 90 }; + Props.Skybox.BottomRight = { 0, 99, 164 }; + Props.Skybox.BottomLeft = { 0, 9, 164 }; + Props.Skybox.TopLeft = { 28, 11, 90 }; + Props.Skybox.FloorTopRight = { 0, 99, 164 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 99, 164 }; Props.Sequence = MusicSeq::MUSIC_SEQ_FRAPPE_SNOWLAND; Props.WaterLevel = -50.0f; @@ -127,7 +127,7 @@ FrappeSnowland::FrappeSnowland() { void FrappeSnowland::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_frappe_snowland_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_frappe_snowland_addr)); func_80295C6C(); } @@ -137,8 +137,8 @@ void FrappeSnowland::LoadTextures() { } void FrappeSnowland::BeginPlay() { - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_tree_spawns)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_item_box_spawns)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_frappe_snowland_tree_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_frappe_snowland_item_box_spawns)); if (gGamestate != CREDITS_SEQUENCE) { gWorldInstance.AddObject(new OSnowman(FVector(697, 0, -1684))); @@ -225,7 +225,7 @@ void FrappeSnowland::Render(struct UnkStruct_800DC5EC* arg0) { } void FrappeSnowland::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_frappe_snowland_dl_76A0)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_frappe_snowland_dl_76A0)); } void FrappeSnowland::Waypoints(Player* player, int8_t playerId) { diff --git a/src/engine/courses/FrappeSnowland.h b/src/engine/courses/FrappeSnowland.h index 8f01559a9..b2d8b5db3 100644 --- a/src/engine/courses/FrappeSnowland.h +++ b/src/engine/courses/FrappeSnowland.h @@ -4,19 +4,19 @@ #include "Course.h" extern "C" { - #include "assets/frappe_snowland_vertices.h" - #include "assets/frappe_snowland_displaylists.h" - #include "assets/frappe_snowland_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture frappe_snowland_textures[]; +#include "assets/frappe_snowland_vertices.h" +#include "assets/frappe_snowland_displaylists.h" +#include "assets/frappe_snowland_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture frappe_snowland_textures[]; } class FrappeSnowland : public Course { -public: + public: virtual ~FrappeSnowland() = default; explicit FrappeSnowland(); @@ -29,6 +29,6 @@ public: virtual void InitCourseObjects() override; virtual void UpdateCourseObjects() override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; }; diff --git a/src/engine/courses/Harbour.cpp b/src/engine/courses/Harbour.cpp index bd037754c..bb9980410 100644 --- a/src/engine/courses/Harbour.cpp +++ b/src/engine/courses/Harbour.cpp @@ -31,489 +31,145 @@ #include "engine/objects/GrandPrixBalloons.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "courses/harbour/track.h" - #include "course.h" +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "courses/harbour/track.h" +#include "course.h" } TrackWaypoint harbour_path[] = { - {16,-121,-34,0}, - {27,-121,-60,0}, - {31,-121,-83,0}, - {34,-121,-101,0}, - {38,-121,-119,0}, - {42,-121,-132,0}, - {46,-121,-141,0}, - {53,-121,-150,0}, - {60,-121,-158,0}, - {64,-121,-171,0}, - {71,-121,-185,0}, - {79,-121,-194,0}, - {87,-121,-209,0}, - {98,-121,-225,0}, - {109,-121,-236,0}, - {120,-121,-251,0}, - {130,-121,-263,0}, - {140,-121,-273,0}, - {149,-121,-280,0}, - {157,-121,-284,0}, - {167,-121,-292,0}, - {177,-121,-301,0}, - {191,-121,-306,0}, - {203,-121,-313,0}, - {213,-121,-319,0}, - {228,-121,-325,0}, - {240,-121,-332,0}, - {251,-121,-340,0}, - {260,-121,-342,0}, - {270,-121,-345,0}, - {279,-121,-347,0}, - {289,-121,-348,0}, - {298,-121,-351,0}, - {311,-121,-356,0}, - {323,-121,-359,0}, - {332,-121,-359,0}, - {343,-121,-361,0}, - {354,-121,-363,0}, - {363,-121,-361,0}, - {373,-121,-363,0}, - {385,-121,-362,0}, - {396,-121,-360,0}, - {405,-121,-359,0}, - {418,-121,-357,0}, - {432,-120,-354,0}, - {444,-119,-349,0}, - {459,-119,-346,0}, - {467,-119,-341,0}, - {479,-119,-337,0}, - {489,-119,-332,0}, - {501,-120,-325,0}, - {513,-120,-315,0}, - {526,-121,-309,0}, - {537,-121,-300,0}, - {551,-121,-294,0}, - {561,-121,-282,0}, - {572,-120,-269,0}, - {583,-119,-259,0}, - {592,-118,-254,0}, - {598,-119,-246,0}, - {606,-119,-240,0}, - {615,-121,-228,0}, - {624,-121,-219,0}, - {637,-121,-212,0}, - {647,-121,-206,0}, - {657,-121,-193,0}, - {667,-121,-188,0}, - {674,-121,-180,0}, - {688,-122,-173,0}, - {699,-123,-160,0}, - {711,-121,-152,0}, - {722,-118,-141,0}, - {734,-115,-136,0}, - {745,-115,-130,0}, - {753,-116,-121,0}, - {768,-117,-112,0}, - {788,-116,-99,0}, - {809,-114,-85,0}, - {832,-112,-72,0}, - {849,-110,-63,0}, - {861,-110,-57,0}, - {875,-109,-51,0}, - {888,-109,-42,0}, - {899,-109,-37,0}, - {923,-110,-31,0}, - {939,-110,-25,0}, - {950,-110,-21,0}, - {958,-110,-18,0}, - {975,-109,-13,0}, - {988,-109,-8,0}, - {1017,-109,-17,0}, - {1033,-109,-25,0}, - {1055,-110,-33,0}, - {1075,-112,-38,0}, - {1091,-115,-45,0}, - {1104,-118,-55,0}, - {1112,-119,-62,0}, - {1137,-124,-75,0}, - {1160,-127,-91,0}, - {1173,-128,-101,0}, - {1184,-129,-118,0}, - {1209,-132,-147,0}, - {1224,-132,-163,0}, - {1235,-132,-190,0}, - {1244,-132,-221,0}, - {1251,-132,-257,0}, - {1255,-132,-282,0}, - {1256,-132,-327,0}, - {1253,-132,-364,0}, - {1247,-132,-405,0}, - {1236,-132,-431,0}, - {1233,-132,-473,0}, - {1228,-132,-495,0}, - {1223,-132,-513,0}, - {1218,-132,-543,0}, - {1206,-132,-561,0}, - {1197,-132,-584,0}, - {1182,-132,-613,0}, - {1170,-132,-645,0}, - {1163,-132,-660,0}, - {1158,-132,-677,0}, - {1150,-132,-689,0}, - {1138,-132,-712,0}, - {1126,-132,-737,0}, - {1114,-132,-760,0}, - {1101,-132,-775,0}, - {1085,-132,-796,0}, - {1070,-132,-823,0}, - {1058,-132,-839,0}, - {1046,-132,-861,0}, - {1024,-132,-886,0}, - {1010,-132,-906,0}, - {997,-132,-918,0}, - {989,-132,-930,0}, - {975,-132,-943,0}, - {953,-132,-971,0}, - {934,-132,-985,0}, - {919,-132,-999,0}, - {904,-132,-1014,0}, - {889,-132,-1030,0}, - {874,-132,-1044,0}, - {852,-132,-1057,0}, - {826,-132,-1074,0}, - {806,-132,-1087,0}, - {787,-132,-1104,0}, - {773,-132,-1111,0}, - {751,-132,-1125,0}, - {728,-132,-1136,0}, - {710,-132,-1148,0}, - {687,-132,-1162,0}, - {667,-132,-1174,0}, - {648,-132,-1187,0}, - {632,-132,-1190,0}, - {615,-132,-1198,0}, - {597,-132,-1205,0}, - {576,-132,-1211,0}, - {562,-132,-1216,0}, - {543,-132,-1222,0}, - {526,-132,-1227,0}, - {513,-132,-1231,0}, - {495,-132,-1236,0}, - {472,-132,-1243,0}, - {451,-132,-1243,0}, - {431,-132,-1245,0}, - {402,-132,-1250,0}, - {379,-132,-1250,0}, - {358,-132,-1252,0}, - {340,-132,-1253,0}, - {316,-132,-1255,0}, - {298,-132,-1254,0}, - {275,-132,-1252,0}, - {246,-132,-1249,0}, - {221,-132,-1242,0}, - {198,-132,-1237,0}, - {173,-132,-1232,0}, - {156,-132,-1229,0}, - {137,-132,-1221,0}, - {119,-132,-1208,0}, - {103,-132,-1195,0}, - {81,-132,-1179,0}, - {63,-132,-1161,0}, - {48,-132,-1150,0}, - {28,-132,-1125,0}, - {9,-132,-1104,0}, - {-3,-132,-1086,0}, - {-24,-132,-1064,0}, - {-38,-133,-1049,0}, - {-50,-133,-1030,0}, - {-64,-134,-1005,0}, - {-82,-135,-985,0}, - {-97,-136,-960,0}, - {-109,-137,-942,0}, - {-130,-138,-921,0}, - {-148,-139,-897,0}, - {-160,-141,-874,0}, - {-176,-142,-849,0}, - {-202,-143,-821,0}, - {-219,-145,-792,0}, - {-235,-147,-763,0}, - {-257,-149,-729,0}, - {-273,-150,-705,0}, - {-288,-152,-673,0}, - {-309,-154,-637,0}, - {-326,-155,-603,0}, - {-343,-157,-569,0}, - {-356,-158,-542,0}, - {-373,-158,-512,0}, - {-386,-160,-479,0}, - {-401,-161,-441,0}, - {-412,-163,-402,0}, - {-425,-163,-374,0}, - {-441,-164,-332,0}, - {-455,-163,-295,0}, - {-468,-163,-264,0}, - {-482,-162,-219,0}, - {-494,-162,-184,0}, - {-502,-162,-149,0}, - {-509,-162,-118,0}, - {-516,-161,-85,0}, - {-524,-160,-64,0}, - {-532,-159,-39,0}, - {-539,-159,-3,0}, - {-545,-158,28,0}, - {-551,-157,56,0}, - {-558,-156,86,0}, - {-562,-156,124,0}, - {-569,-155,152,0}, - {-574,-154,194,0}, - {-582,-153,241,0}, - {-582,-153,262,0}, - {-586,-152,298,0}, - {-590,-152,330,0}, - {-593,-152,351,0}, - {-594,-152,383,0}, - {-595,-152,415,0}, - {-595,-152,442,0}, - {-597,-152,466,0}, - {-597,-152,492,0}, - {-598,-152,530,0}, - {-597,-152,571,0}, - {-596,-152,612,0}, - {-595,-152,646,0}, - {-591,-153,683,0}, - {-591,-153,717,0}, - {-591,-152,752,0}, - {-587,-152,788,0}, - {-583,-153,820,0}, - {-580,-153,858,0}, - {-573,-154,886,0}, - {-567,-154,924,0}, - {-562,-155,952,0}, - {-554,-155,988,0}, - {-547,-156,1022,0}, - {-534,-156,1065,0}, - {-518,-157,1108,0}, - {-510,-157,1147,0}, - {-503,-158,1172,0}, - {-494,-158,1206,0}, - {-486,-157,1242,0}, - {-474,-157,1274,0}, - {-466,-157,1303,0}, - {-448,-156,1363,0}, - {-435,-156,1400,0}, - {-425,-155,1428,0}, - {-414,-154,1464,0}, - {-404,-153,1498,0}, - {-397,-150,1532,0}, - {-383,-149,1565,0}, - {-370,-148,1604,0}, - {-348,-144,1667,0}, - {-329,-142,1714,0}, - {-312,-141,1744,0}, - {-298,-138,1785,0}, - {-286,-137,1812,0}, - {-263,-135,1860,0}, - {-236,-134,1890,0}, - {-207,-134,1927,0}, - {-184,-133,1949,0}, - {-163,-133,1965,0}, - {-146,-133,1985,0}, - {-103,-132,2022,0}, - {-74,-132,2056,0}, - {-52,-132,2078,0}, - {-20,-132,2101,0}, - {6,-132,2118,0}, - {28,-132,2133,0}, - {52,-132,2154,0}, - {72,-132,2169,0}, - {89,-132,2183,0}, - {105,-132,2196,0}, - {127,-132,2215,0}, - {149,-132,2233,0}, - {169,-132,2245,0}, - {196,-132,2262,0}, - {219,-132,2277,0}, - {248,-132,2293,0}, - {284,-132,2311,0}, - {314,-132,2330,0}, - {348,-132,2339,0}, - {376,-132,2346,0}, - {395,-132,2343,0}, - {414,-132,2344,0}, - {434,-132,2342,0}, - {452,-132,2341,0}, - {486,-132,2328,0}, - {518,-132,2322,0}, - {541,-132,2312,0}, - {567,-132,2305,0}, - {590,-132,2298,0}, - {609,-132,2287,0}, - {633,-132,2277,0}, - {658,-132,2267,0}, - {686,-132,2251,0}, - {712,-132,2235,0}, - {731,-132,2227,0}, - {753,-132,2214,0}, - {774,-132,2200,0}, - {799,-132,2181,0}, - {826,-132,2160,0}, - {846,-132,2144,0}, - {867,-132,2122,0}, - {894,-132,2097,0}, - {916,-132,2070,0}, - {936,-132,2043,0}, - {960,-132,2001,0}, - {980,-132,1968,0}, - {995,-132,1936,0}, - {1008,-132,1908,0}, - {1023,-132,1882,0}, - {1048,-132,1850,0}, - {1064,-132,1820,0}, - {1077,-132,1788,0}, - {1096,-133,1757,0}, - {1113,-133,1712,0}, - {1134,-134,1667,0}, - {1150,-135,1623,0}, - {1165,-135,1582,0}, - {1186,-136,1521,0}, - {1202,-136,1480,0}, - {1219,-136,1436,0}, - {1230,-135,1397,0}, - {1249,-135,1361,0}, - {1260,-134,1327,0}, - {1270,-134,1295,0}, - {1279,-133,1258,0}, - {1292,-133,1218,0}, - {1304,-132,1177,0}, - {1305,-132,1162,0}, - {1303,-132,1146,0}, - {1302,-132,1131,0}, - {1296,-132,1115,0}, - {1291,-133,1106,0}, - {1281,-133,1097,0}, - {1275,-134,1085,0}, - {1266,-136,1074,0}, - {1254,-137,1064,0}, - {1242,-138,1060,0}, - {1225,-139,1042,0}, - {1211,-138,1034,0}, - {1196,-137,1025,0}, - {1178,-134,1018,0}, - {1165,-132,1014,0}, - {1144,-130,1009,0}, - {1124,-127,993,0}, - {1105,-126,986,0}, - {1084,-125,981,0}, - {1059,-124,980,0}, - {1039,-122,972,0}, - {1016,-121,974,0}, - {988,-120,979,0}, - {964,-120,983,0}, - {941,-121,984,0}, - {914,-124,988,0}, - {892,-124,996,0}, - {865,-123,1000,0}, - {848,-122,1004,0}, - {829,-120,1015,0}, - {811,-119,1028,0}, - {785,-115,1036,0}, - {765,-113,1044,0}, - {747,-113,1064,0}, - {724,-114,1080,0}, - {707,-115,1098,0}, - {682,-116,1109,0}, - {663,-117,1131,0}, - {645,-117,1150,0}, - {625,-117,1172,0}, - {606,-118,1183,0}, - {573,-120,1200,0}, - {554,-121,1222,0}, - {532,-121,1238,0}, - {508,-121,1258,0}, - {482,-121,1270,0}, - {461,-121,1286,0}, - {435,-121,1299,0}, - {413,-121,1307,0}, - {389,-121,1313,0}, - {369,-121,1316,0}, - {348,-121,1322,0}, - {330,-121,1325,0}, - {309,-121,1323,0}, - {284,-121,1322,0}, - {258,-121,1323,0}, - {235,-121,1313,0}, - {216,-121,1301,0}, - {186,-121,1289,0}, - {170,-121,1284,0}, - {155,-121,1271,0}, - {141,-121,1255,0}, - {126,-121,1241,0}, - {118,-121,1232,0}, - {109,-121,1217,0}, - {101,-121,1205,0}, - {94,-121,1194,0}, - {86,-121,1180,0}, - {78,-121,1164,0}, - {71,-121,1144,0}, - {63,-121,1127,0}, - {57,-121,1111,0}, - {49,-121,1088,0}, - {44,-121,1074,0}, - {38,-121,1056,0}, - {34,-121,1032,0}, - {29,-121,1010,0}, - {26,-121,986,0}, - {21,-121,968,0}, - {14,-121,940,0}, - {8,-121,918,0}, - {8,-121,893,0}, - {4,-121,872,0}, - {3,-121,851,0}, - {1,-121,829,0}, - {0,-121,803,0}, - {-1,-121,788,0}, - {-5,-121,749,0}, - {-7,-121,713,0}, - {-11,-121,678,0}, - {-8,-121,642,0}, - {-8,-121,608,0}, - {-7,-121,577,0}, - {-8,-121,556,0}, - {-11,-121,515,0}, - {-9,-121,484,0}, - {-9,-121,453,0}, - {-8,-121,416,0}, - {-6,-121,394,0}, - {-3,-121,345,0}, - {-2,-121,305,0}, - {-1,-121,251,0}, - {-1,-121,214,0}, - {-2,-121,189,0}, - {-1,-121,156,0}, - {1,-121,124,0}, - {4,-121,86,0}, - {6,-121,66,0}, - {8,-121,36,0}, - {13,-121,0,0}, - {15,-121,-14,0}, - {-32768, -32768, -32768, 0} + { 16, -121, -34, 0 }, { 27, -121, -60, 0 }, { 31, -121, -83, 0 }, { 34, -121, -101, 0 }, + { 38, -121, -119, 0 }, { 42, -121, -132, 0 }, { 46, -121, -141, 0 }, { 53, -121, -150, 0 }, + { 60, -121, -158, 0 }, { 64, -121, -171, 0 }, { 71, -121, -185, 0 }, { 79, -121, -194, 0 }, + { 87, -121, -209, 0 }, { 98, -121, -225, 0 }, { 109, -121, -236, 0 }, { 120, -121, -251, 0 }, + { 130, -121, -263, 0 }, { 140, -121, -273, 0 }, { 149, -121, -280, 0 }, { 157, -121, -284, 0 }, + { 167, -121, -292, 0 }, { 177, -121, -301, 0 }, { 191, -121, -306, 0 }, { 203, -121, -313, 0 }, + { 213, -121, -319, 0 }, { 228, -121, -325, 0 }, { 240, -121, -332, 0 }, { 251, -121, -340, 0 }, + { 260, -121, -342, 0 }, { 270, -121, -345, 0 }, { 279, -121, -347, 0 }, { 289, -121, -348, 0 }, + { 298, -121, -351, 0 }, { 311, -121, -356, 0 }, { 323, -121, -359, 0 }, { 332, -121, -359, 0 }, + { 343, -121, -361, 0 }, { 354, -121, -363, 0 }, { 363, -121, -361, 0 }, { 373, -121, -363, 0 }, + { 385, -121, -362, 0 }, { 396, -121, -360, 0 }, { 405, -121, -359, 0 }, { 418, -121, -357, 0 }, + { 432, -120, -354, 0 }, { 444, -119, -349, 0 }, { 459, -119, -346, 0 }, { 467, -119, -341, 0 }, + { 479, -119, -337, 0 }, { 489, -119, -332, 0 }, { 501, -120, -325, 0 }, { 513, -120, -315, 0 }, + { 526, -121, -309, 0 }, { 537, -121, -300, 0 }, { 551, -121, -294, 0 }, { 561, -121, -282, 0 }, + { 572, -120, -269, 0 }, { 583, -119, -259, 0 }, { 592, -118, -254, 0 }, { 598, -119, -246, 0 }, + { 606, -119, -240, 0 }, { 615, -121, -228, 0 }, { 624, -121, -219, 0 }, { 637, -121, -212, 0 }, + { 647, -121, -206, 0 }, { 657, -121, -193, 0 }, { 667, -121, -188, 0 }, { 674, -121, -180, 0 }, + { 688, -122, -173, 0 }, { 699, -123, -160, 0 }, { 711, -121, -152, 0 }, { 722, -118, -141, 0 }, + { 734, -115, -136, 0 }, { 745, -115, -130, 0 }, { 753, -116, -121, 0 }, { 768, -117, -112, 0 }, + { 788, -116, -99, 0 }, { 809, -114, -85, 0 }, { 832, -112, -72, 0 }, { 849, -110, -63, 0 }, + { 861, -110, -57, 0 }, { 875, -109, -51, 0 }, { 888, -109, -42, 0 }, { 899, -109, -37, 0 }, + { 923, -110, -31, 0 }, { 939, -110, -25, 0 }, { 950, -110, -21, 0 }, { 958, -110, -18, 0 }, + { 975, -109, -13, 0 }, { 988, -109, -8, 0 }, { 1017, -109, -17, 0 }, { 1033, -109, -25, 0 }, + { 1055, -110, -33, 0 }, { 1075, -112, -38, 0 }, { 1091, -115, -45, 0 }, { 1104, -118, -55, 0 }, + { 1112, -119, -62, 0 }, { 1137, -124, -75, 0 }, { 1160, -127, -91, 0 }, { 1173, -128, -101, 0 }, + { 1184, -129, -118, 0 }, { 1209, -132, -147, 0 }, { 1224, -132, -163, 0 }, { 1235, -132, -190, 0 }, + { 1244, -132, -221, 0 }, { 1251, -132, -257, 0 }, { 1255, -132, -282, 0 }, { 1256, -132, -327, 0 }, + { 1253, -132, -364, 0 }, { 1247, -132, -405, 0 }, { 1236, -132, -431, 0 }, { 1233, -132, -473, 0 }, + { 1228, -132, -495, 0 }, { 1223, -132, -513, 0 }, { 1218, -132, -543, 0 }, { 1206, -132, -561, 0 }, + { 1197, -132, -584, 0 }, { 1182, -132, -613, 0 }, { 1170, -132, -645, 0 }, { 1163, -132, -660, 0 }, + { 1158, -132, -677, 0 }, { 1150, -132, -689, 0 }, { 1138, -132, -712, 0 }, { 1126, -132, -737, 0 }, + { 1114, -132, -760, 0 }, { 1101, -132, -775, 0 }, { 1085, -132, -796, 0 }, { 1070, -132, -823, 0 }, + { 1058, -132, -839, 0 }, { 1046, -132, -861, 0 }, { 1024, -132, -886, 0 }, { 1010, -132, -906, 0 }, + { 997, -132, -918, 0 }, { 989, -132, -930, 0 }, { 975, -132, -943, 0 }, { 953, -132, -971, 0 }, + { 934, -132, -985, 0 }, { 919, -132, -999, 0 }, { 904, -132, -1014, 0 }, { 889, -132, -1030, 0 }, + { 874, -132, -1044, 0 }, { 852, -132, -1057, 0 }, { 826, -132, -1074, 0 }, { 806, -132, -1087, 0 }, + { 787, -132, -1104, 0 }, { 773, -132, -1111, 0 }, { 751, -132, -1125, 0 }, { 728, -132, -1136, 0 }, + { 710, -132, -1148, 0 }, { 687, -132, -1162, 0 }, { 667, -132, -1174, 0 }, { 648, -132, -1187, 0 }, + { 632, -132, -1190, 0 }, { 615, -132, -1198, 0 }, { 597, -132, -1205, 0 }, { 576, -132, -1211, 0 }, + { 562, -132, -1216, 0 }, { 543, -132, -1222, 0 }, { 526, -132, -1227, 0 }, { 513, -132, -1231, 0 }, + { 495, -132, -1236, 0 }, { 472, -132, -1243, 0 }, { 451, -132, -1243, 0 }, { 431, -132, -1245, 0 }, + { 402, -132, -1250, 0 }, { 379, -132, -1250, 0 }, { 358, -132, -1252, 0 }, { 340, -132, -1253, 0 }, + { 316, -132, -1255, 0 }, { 298, -132, -1254, 0 }, { 275, -132, -1252, 0 }, { 246, -132, -1249, 0 }, + { 221, -132, -1242, 0 }, { 198, -132, -1237, 0 }, { 173, -132, -1232, 0 }, { 156, -132, -1229, 0 }, + { 137, -132, -1221, 0 }, { 119, -132, -1208, 0 }, { 103, -132, -1195, 0 }, { 81, -132, -1179, 0 }, + { 63, -132, -1161, 0 }, { 48, -132, -1150, 0 }, { 28, -132, -1125, 0 }, { 9, -132, -1104, 0 }, + { -3, -132, -1086, 0 }, { -24, -132, -1064, 0 }, { -38, -133, -1049, 0 }, { -50, -133, -1030, 0 }, + { -64, -134, -1005, 0 }, { -82, -135, -985, 0 }, { -97, -136, -960, 0 }, { -109, -137, -942, 0 }, + { -130, -138, -921, 0 }, { -148, -139, -897, 0 }, { -160, -141, -874, 0 }, { -176, -142, -849, 0 }, + { -202, -143, -821, 0 }, { -219, -145, -792, 0 }, { -235, -147, -763, 0 }, { -257, -149, -729, 0 }, + { -273, -150, -705, 0 }, { -288, -152, -673, 0 }, { -309, -154, -637, 0 }, { -326, -155, -603, 0 }, + { -343, -157, -569, 0 }, { -356, -158, -542, 0 }, { -373, -158, -512, 0 }, { -386, -160, -479, 0 }, + { -401, -161, -441, 0 }, { -412, -163, -402, 0 }, { -425, -163, -374, 0 }, { -441, -164, -332, 0 }, + { -455, -163, -295, 0 }, { -468, -163, -264, 0 }, { -482, -162, -219, 0 }, { -494, -162, -184, 0 }, + { -502, -162, -149, 0 }, { -509, -162, -118, 0 }, { -516, -161, -85, 0 }, { -524, -160, -64, 0 }, + { -532, -159, -39, 0 }, { -539, -159, -3, 0 }, { -545, -158, 28, 0 }, { -551, -157, 56, 0 }, + { -558, -156, 86, 0 }, { -562, -156, 124, 0 }, { -569, -155, 152, 0 }, { -574, -154, 194, 0 }, + { -582, -153, 241, 0 }, { -582, -153, 262, 0 }, { -586, -152, 298, 0 }, { -590, -152, 330, 0 }, + { -593, -152, 351, 0 }, { -594, -152, 383, 0 }, { -595, -152, 415, 0 }, { -595, -152, 442, 0 }, + { -597, -152, 466, 0 }, { -597, -152, 492, 0 }, { -598, -152, 530, 0 }, { -597, -152, 571, 0 }, + { -596, -152, 612, 0 }, { -595, -152, 646, 0 }, { -591, -153, 683, 0 }, { -591, -153, 717, 0 }, + { -591, -152, 752, 0 }, { -587, -152, 788, 0 }, { -583, -153, 820, 0 }, { -580, -153, 858, 0 }, + { -573, -154, 886, 0 }, { -567, -154, 924, 0 }, { -562, -155, 952, 0 }, { -554, -155, 988, 0 }, + { -547, -156, 1022, 0 }, { -534, -156, 1065, 0 }, { -518, -157, 1108, 0 }, { -510, -157, 1147, 0 }, + { -503, -158, 1172, 0 }, { -494, -158, 1206, 0 }, { -486, -157, 1242, 0 }, { -474, -157, 1274, 0 }, + { -466, -157, 1303, 0 }, { -448, -156, 1363, 0 }, { -435, -156, 1400, 0 }, { -425, -155, 1428, 0 }, + { -414, -154, 1464, 0 }, { -404, -153, 1498, 0 }, { -397, -150, 1532, 0 }, { -383, -149, 1565, 0 }, + { -370, -148, 1604, 0 }, { -348, -144, 1667, 0 }, { -329, -142, 1714, 0 }, { -312, -141, 1744, 0 }, + { -298, -138, 1785, 0 }, { -286, -137, 1812, 0 }, { -263, -135, 1860, 0 }, { -236, -134, 1890, 0 }, + { -207, -134, 1927, 0 }, { -184, -133, 1949, 0 }, { -163, -133, 1965, 0 }, { -146, -133, 1985, 0 }, + { -103, -132, 2022, 0 }, { -74, -132, 2056, 0 }, { -52, -132, 2078, 0 }, { -20, -132, 2101, 0 }, + { 6, -132, 2118, 0 }, { 28, -132, 2133, 0 }, { 52, -132, 2154, 0 }, { 72, -132, 2169, 0 }, + { 89, -132, 2183, 0 }, { 105, -132, 2196, 0 }, { 127, -132, 2215, 0 }, { 149, -132, 2233, 0 }, + { 169, -132, 2245, 0 }, { 196, -132, 2262, 0 }, { 219, -132, 2277, 0 }, { 248, -132, 2293, 0 }, + { 284, -132, 2311, 0 }, { 314, -132, 2330, 0 }, { 348, -132, 2339, 0 }, { 376, -132, 2346, 0 }, + { 395, -132, 2343, 0 }, { 414, -132, 2344, 0 }, { 434, -132, 2342, 0 }, { 452, -132, 2341, 0 }, + { 486, -132, 2328, 0 }, { 518, -132, 2322, 0 }, { 541, -132, 2312, 0 }, { 567, -132, 2305, 0 }, + { 590, -132, 2298, 0 }, { 609, -132, 2287, 0 }, { 633, -132, 2277, 0 }, { 658, -132, 2267, 0 }, + { 686, -132, 2251, 0 }, { 712, -132, 2235, 0 }, { 731, -132, 2227, 0 }, { 753, -132, 2214, 0 }, + { 774, -132, 2200, 0 }, { 799, -132, 2181, 0 }, { 826, -132, 2160, 0 }, { 846, -132, 2144, 0 }, + { 867, -132, 2122, 0 }, { 894, -132, 2097, 0 }, { 916, -132, 2070, 0 }, { 936, -132, 2043, 0 }, + { 960, -132, 2001, 0 }, { 980, -132, 1968, 0 }, { 995, -132, 1936, 0 }, { 1008, -132, 1908, 0 }, + { 1023, -132, 1882, 0 }, { 1048, -132, 1850, 0 }, { 1064, -132, 1820, 0 }, { 1077, -132, 1788, 0 }, + { 1096, -133, 1757, 0 }, { 1113, -133, 1712, 0 }, { 1134, -134, 1667, 0 }, { 1150, -135, 1623, 0 }, + { 1165, -135, 1582, 0 }, { 1186, -136, 1521, 0 }, { 1202, -136, 1480, 0 }, { 1219, -136, 1436, 0 }, + { 1230, -135, 1397, 0 }, { 1249, -135, 1361, 0 }, { 1260, -134, 1327, 0 }, { 1270, -134, 1295, 0 }, + { 1279, -133, 1258, 0 }, { 1292, -133, 1218, 0 }, { 1304, -132, 1177, 0 }, { 1305, -132, 1162, 0 }, + { 1303, -132, 1146, 0 }, { 1302, -132, 1131, 0 }, { 1296, -132, 1115, 0 }, { 1291, -133, 1106, 0 }, + { 1281, -133, 1097, 0 }, { 1275, -134, 1085, 0 }, { 1266, -136, 1074, 0 }, { 1254, -137, 1064, 0 }, + { 1242, -138, 1060, 0 }, { 1225, -139, 1042, 0 }, { 1211, -138, 1034, 0 }, { 1196, -137, 1025, 0 }, + { 1178, -134, 1018, 0 }, { 1165, -132, 1014, 0 }, { 1144, -130, 1009, 0 }, { 1124, -127, 993, 0 }, + { 1105, -126, 986, 0 }, { 1084, -125, 981, 0 }, { 1059, -124, 980, 0 }, { 1039, -122, 972, 0 }, + { 1016, -121, 974, 0 }, { 988, -120, 979, 0 }, { 964, -120, 983, 0 }, { 941, -121, 984, 0 }, + { 914, -124, 988, 0 }, { 892, -124, 996, 0 }, { 865, -123, 1000, 0 }, { 848, -122, 1004, 0 }, + { 829, -120, 1015, 0 }, { 811, -119, 1028, 0 }, { 785, -115, 1036, 0 }, { 765, -113, 1044, 0 }, + { 747, -113, 1064, 0 }, { 724, -114, 1080, 0 }, { 707, -115, 1098, 0 }, { 682, -116, 1109, 0 }, + { 663, -117, 1131, 0 }, { 645, -117, 1150, 0 }, { 625, -117, 1172, 0 }, { 606, -118, 1183, 0 }, + { 573, -120, 1200, 0 }, { 554, -121, 1222, 0 }, { 532, -121, 1238, 0 }, { 508, -121, 1258, 0 }, + { 482, -121, 1270, 0 }, { 461, -121, 1286, 0 }, { 435, -121, 1299, 0 }, { 413, -121, 1307, 0 }, + { 389, -121, 1313, 0 }, { 369, -121, 1316, 0 }, { 348, -121, 1322, 0 }, { 330, -121, 1325, 0 }, + { 309, -121, 1323, 0 }, { 284, -121, 1322, 0 }, { 258, -121, 1323, 0 }, { 235, -121, 1313, 0 }, + { 216, -121, 1301, 0 }, { 186, -121, 1289, 0 }, { 170, -121, 1284, 0 }, { 155, -121, 1271, 0 }, + { 141, -121, 1255, 0 }, { 126, -121, 1241, 0 }, { 118, -121, 1232, 0 }, { 109, -121, 1217, 0 }, + { 101, -121, 1205, 0 }, { 94, -121, 1194, 0 }, { 86, -121, 1180, 0 }, { 78, -121, 1164, 0 }, + { 71, -121, 1144, 0 }, { 63, -121, 1127, 0 }, { 57, -121, 1111, 0 }, { 49, -121, 1088, 0 }, + { 44, -121, 1074, 0 }, { 38, -121, 1056, 0 }, { 34, -121, 1032, 0 }, { 29, -121, 1010, 0 }, + { 26, -121, 986, 0 }, { 21, -121, 968, 0 }, { 14, -121, 940, 0 }, { 8, -121, 918, 0 }, + { 8, -121, 893, 0 }, { 4, -121, 872, 0 }, { 3, -121, 851, 0 }, { 1, -121, 829, 0 }, + { 0, -121, 803, 0 }, { -1, -121, 788, 0 }, { -5, -121, 749, 0 }, { -7, -121, 713, 0 }, + { -11, -121, 678, 0 }, { -8, -121, 642, 0 }, { -8, -121, 608, 0 }, { -7, -121, 577, 0 }, + { -8, -121, 556, 0 }, { -11, -121, 515, 0 }, { -9, -121, 484, 0 }, { -9, -121, 453, 0 }, + { -8, -121, 416, 0 }, { -6, -121, 394, 0 }, { -3, -121, 345, 0 }, { -2, -121, 305, 0 }, + { -1, -121, 251, 0 }, { -1, -121, 214, 0 }, { -2, -121, 189, 0 }, { -1, -121, 156, 0 }, + { 1, -121, 124, 0 }, { 4, -121, 86, 0 }, { 6, -121, 66, 0 }, { 8, -121, 36, 0 }, + { 13, -121, 0, 0 }, { 15, -121, -14, 0 }, { -32768, -32768, -32768, 0 } }; Harbour::Harbour() { @@ -541,7 +197,7 @@ Harbour::Harbour() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {459, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 459, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -579,20 +235,20 @@ Harbour::Harbour() { Props.Minimap.FinishlineX = 0; Props.Minimap.FinishlineY = 0; - Props.Skybox.TopRight = {120, 140, 188}; - Props.Skybox.BottomRight = {216, 232, 248}; - Props.Skybox.BottomLeft = {216, 232, 248}; - Props.Skybox.TopLeft = {40, 184, 208}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 120, 140, 188 }; + Props.Skybox.BottomRight = { 216, 232, 248 }; + Props.Skybox.BottomLeft = { 216, 232, 248 }; + Props.Skybox.TopLeft = { 40, 184, 208 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_RACEWAYS_WARIO_STADIUM; } TrackSections harbour_surfaces[] = { - { road_map_001_mesh, 1, 255, 0x0000 }, - { ground_map_mesh, 8, 255, 0x0000 }, + { road_map_001_mesh, 1, 255, 0x0000 }, + { ground_map_mesh, 8, 255, 0x0000 }, { 0x00000000, 0, 0, 0x00000 }, }; @@ -600,10 +256,7 @@ void Harbour::Load() { Course::Load(road_map_001_mesh_vtx_0, NULL); // The light gets overridden in hm_intro, reset to normal - ground_f3d_material_013_lights = gdSPDefLights1( - 0x7F, 0x7F, 0x7F, - 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49 - ); + ground_f3d_material_013_lights = gdSPDefLights1(0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49); generate_collision_mesh_with_default_section_id(ground_map_mesh, 8); generate_collision_mesh_with_default_section_id(road_map_001_mesh, 1); @@ -612,7 +265,7 @@ void Harbour::Load() { generate_collision_mesh_with_defaults(bush_map_004_mesh); generate_collision_mesh_with_defaults(statue_map_005_mesh); - parse_course_displaylists((TrackSections*)harbour_surfaces); + parse_course_displaylists((TrackSections*) harbour_surfaces); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -631,58 +284,58 @@ void Harbour::LoadTextures() { } Path2D harbour_path2D[] = { - { 0, 0}, - { 0, -100}, - { 0, -200}, - { 0, -300}, - { 0, -400}, - { 0, -500}, - { 0, -600}, - { 0, -700}, - { 0, -800}, - { 0, -900}, - { 0, -1000}, - { 0, -1096}, // Main point 1 - { 100, -1090}, - { 200, -1085}, - { 300, -1080}, - { 400, -1075}, - { 500, -1072}, // Curve begins to smooth here - { 600, -1068}, - { 700, -1065}, - { 800, -1063}, - { 900, -1061}, - { 984, -1060}, // Main point 2 - { 990, -900}, - { 995, -800}, - { 997, -700}, - { 998, -600}, - { 999, -500}, - { 999, -400}, - { 999, -300}, - { 999, -200}, - { 999, -100}, - { 999, 0}, - { 999, 100}, - { 999, 200}, - { 999, 300}, - { 999, 400}, - { 999, 500}, - { 999, 600}, - { 999, 700}, - { 999, 800}, - { 999, 900}, - { 999, 940}, // Main point 3 - { 900, 945}, - { 800, 945}, - { 700, 947}, - { 600, 948}, - { 500, 949}, - { 400, 949}, - { 300, 949}, - { 200, 950}, - { 100, 950}, - { 0, 950}, // Main point 4 + { 0, 0 }, + { 0, -100 }, + { 0, -200 }, + { 0, -300 }, + { 0, -400 }, + { 0, -500 }, + { 0, -600 }, + { 0, -700 }, + { 0, -800 }, + { 0, -900 }, + { 0, -1000 }, + { 0, -1096 }, // Main point 1 + { 100, -1090 }, + { 200, -1085 }, + { 300, -1080 }, + { 400, -1075 }, + { 500, -1072 }, // Curve begins to smooth here + { 600, -1068 }, + { 700, -1065 }, + { 800, -1063 }, + { 900, -1061 }, + { 984, -1060 }, // Main point 2 + { 990, -900 }, + { 995, -800 }, + { 997, -700 }, + { 998, -600 }, + { 999, -500 }, + { 999, -400 }, + { 999, -300 }, + { 999, -200 }, + { 999, -100 }, + { 999, 0 }, + { 999, 100 }, + { 999, 200 }, + { 999, 300 }, + { 999, 400 }, + { 999, 500 }, + { 999, 600 }, + { 999, 700 }, + { 999, 800 }, + { 999, 900 }, + { 999, 940 }, // Main point 3 + { 900, 945 }, + { 800, 945 }, + { 700, 947 }, + { 600, 948 }, + { 500, 949 }, + { 400, 949 }, + { 300, 949 }, + { 200, 950 }, + { 100, 950 }, + { 0, 950 }, // Main point 4 // End of path { -32768, -32768 } // Terminator @@ -690,37 +343,27 @@ Path2D harbour_path2D[] = { void Harbour::BeginPlay() { struct ActorSpawnData itemboxes[] = { - { 200, 1500, 200 , 0}, - { 350, 2500, 300 , 1}, - { 400, 2000, 350 , 2}, - { 40, 0, -800, 0}, - { -40, 0, -800, 0}, - { 0, 0, -800, 0}, - { 999, 6, 482, 0}, - { 1064, 8, 275, {0}}, - { 1028, 5, -39 , {0}}, - { 320, 0, 1020, {0}}, - { 293, 0, 950, {0}}, - {{ -32768, 0, 0 }, {0}}, + { 200, 1500, 200, 0 }, { 350, 2500, 300, 1 }, { 400, 2000, 350, 2 }, { 40, 0, -800, 0 }, + { -40, 0, -800, 0 }, { 0, 0, -800, 0 }, { 999, 6, 482, 0 }, { 1064, 8, 275, { 0 } }, + { 1028, 5, -39, { 0 } }, { 320, 0, 1020, { 0 } }, { 293, 0, 950, { 0 } }, { { -32768, 0, 0 }, { 0 } }, }; struct ActorSpawnData rocks[] = { - {{ 200, 1500, 200 }, {0}}, - {{ 350, 2500, 300 }, {1}}, - {{ 400, 2000, 350 }, {2}}, - {{ -32768, 0, 0 }, {0}}, + { { 200, 1500, 200 }, { 0 } }, + { { 350, 2500, 300 }, { 1 } }, + { { 400, 2000, 350 }, { 2 } }, + { { -32768, 0, 0 }, { 0 } }, }; - //spawn_all_item_boxes(itemboxes); + // spawn_all_item_boxes(itemboxes); - Vec3f test = {-100, 0, -150}; - Vec3s rot = {0, 0, 0}; - Vec3f vel = {0, 0, 0}; + Vec3f test = { -100, 0, -150 }; + Vec3s rot = { 0, 0, 0 }; + Vec3f vel = { 0, 0, 0 }; - //add_actor_to_empty_slot(test, rot, vel, ACTOR_TREE_MARIO_RACEWAY); + // add_actor_to_empty_slot(test, rot, vel, ACTOR_TREE_MARIO_RACEWAY); - - Vec3f pos = {0, 80, 0}; + Vec3f pos = { 0, 80, 0 }; // gWorldInstance.AddActor(new ACloud(pos)); // gWorldInstance.AddActor(new OSeagull(0, pos)); @@ -729,23 +372,23 @@ void Harbour::BeginPlay() { // gWorldInstance.AddActor(new OSeagull(3, pos)); // gWorldInstance.AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10))); // gWorldInstance.AddObject(new OTrophy(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH)); - //gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0))); - //gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING)); + // gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0))); + // gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, + // OTrashBin::Behaviour::MUNCHING)); - //gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9)); - //gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400)); -// gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f))); + // gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9)); + // gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400)); + // gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f))); - //gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200))); -// gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH)); + // gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200))); + // gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH)); -// gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50))); + // gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50))); - // gVehicle2DWaypoint = harbour_path2D; - //gVehicle2DWaypointLength = 53; + // gVehicle2DWaypoint = harbour_path2D; + // gVehicle2DWaypointLength = 53; // D_80162EB0 = spawn_actor_on_surface(harbour_path2D[0].x, 2000.0f, harbour_path2D[0].z); - // DEBUG ONLY TO VISUALIZE PATH // for (size_t i = 0; i < ARRAY_COUNT(harbour_path); i++) { // if (i % 10 == 1) { @@ -754,14 +397,13 @@ void Harbour::BeginPlay() { // add_actor_to_empty_slot(itemPos, rot, vel, ACTOR_ITEM_BOX); // } // } - //gWorldInstance.AddActor(new AShip(FVector(-1694, -111, 1451), AShip::Skin::GHOSTSHIP)); - //gWorldInstance.AddActor(new AShip(FVector(2811, -83, 966), AShip::Skin::SHIP2)); - //gWorldInstance.AddObject(new OGrandPrixBalloons(FVector(16, -136, -34))); + // gWorldInstance.AddActor(new AShip(FVector(-1694, -111, 1451), AShip::Skin::GHOSTSHIP)); + // gWorldInstance.AddActor(new AShip(FVector(2811, -83, 966), AShip::Skin::SHIP2)); + // gWorldInstance.AddObject(new OGrandPrixBalloons(FVector(16, -136, -34))); } void Harbour::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x55); } @@ -775,8 +417,7 @@ void Harbour::WhatDoesThisDo(Player* player, int8_t playerId) { } void Harbour::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x55); } @@ -813,4 +454,4 @@ void Harbour::Render(struct UnkStruct_800DC5EC* arg0) { bool Harbour::IsMod() { return true; -}
\ No newline at end of file +} diff --git a/src/engine/courses/Harbour.h b/src/engine/courses/Harbour.h index 834154f84..d7efc459b 100644 --- a/src/engine/courses/Harbour.h +++ b/src/engine/courses/Harbour.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "mario_raceway_vertices.h" - #include "mario_raceway_displaylists.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - #include "mario_raceway_data.h" - extern const course_texture test_course_textures[]; +#include "mario_raceway_vertices.h" +#include "mario_raceway_displaylists.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +#include "mario_raceway_data.h" +extern const course_texture test_course_textures[]; } class Harbour : public Course { -public: - virtual ~Harbour() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~Harbour() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit Harbour(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; diff --git a/src/engine/courses/KalimariDesert.cpp b/src/engine/courses/KalimariDesert.cpp index 8f4c3e893..58c0a7876 100644 --- a/src/engine/courses/KalimariDesert.cpp +++ b/src/engine/courses/KalimariDesert.cpp @@ -13,27 +13,27 @@ #include "engine/vehicles/Train.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course.h" - extern const char *kalimari_desert_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course.h" +extern const char* kalimari_desert_dls[]; } const course_texture kalimari_desert_textures[] = { @@ -80,7 +80,7 @@ KalimariDesert::KalimariDesert() { Props.NearPersp = 10.0f; Props.FarPersp = 7000.0f; - Props.PathSizes = {0x2BC, 1, 1, 1, 0x226, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x2BC, 1, 1, 1, 0x226, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -102,12 +102,12 @@ KalimariDesert::KalimariDesert() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_kalimari_desert_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_kalimari_desert_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_kalimari_desert_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_kalimari_desert_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -116,21 +116,21 @@ KalimariDesert::KalimariDesert() { Props.Clouds = gKalimariDesertClouds; Props.CloudList = gKalimariDesertClouds; - Props.Skybox.TopRight = {195, 231, 255}; - Props.Skybox.BottomRight = {255, 192, 0}; - Props.Skybox.BottomLeft = {255, 192, 0}; - Props.Skybox.TopLeft = {195, 231, 255}; - Props.Skybox.FloorTopRight = {255, 192, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {255, 192, 0}; + Props.Skybox.TopRight = { 195, 231, 255 }; + Props.Skybox.BottomRight = { 255, 192, 0 }; + Props.Skybox.BottomLeft = { 255, 192, 0 }; + Props.Skybox.TopLeft = { 195, 231, 255 }; + Props.Skybox.FloorTopRight = { 255, 192, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 255, 192, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_KALIMARI_DESERT; } void KalimariDesert::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_kalimari_desert_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_kalimari_desert_addr)); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -149,41 +149,40 @@ void KalimariDesert::BeginPlay() { Vec3f velocity = { 0.0f, 0.0f, 0.0f }; Vec3s rotation = { 0, 0, 0 }; - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_kalimari_desert_cactus_spawn)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_kalimari_desert_item_box_spawns)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_kalimari_desert_cactus_spawn)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_kalimari_desert_item_box_spawns)); if (gGamestate != CREDITS_SEQUENCE) { - Vec3f crossingPos = {-2500, 2, 2355}; - Vec3f crossingPos2 = {-1639, 2, 68}; + Vec3f crossingPos = { -2500, 2, 2355 }; + Vec3f crossingPos2 = { -1639, 2, 68 }; uintptr_t* crossing1 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos, 306, 310, 900.0f, 650.0f); uintptr_t* crossing2 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos2, 176, 182, 900.0f, 650.0f); vec3f_set(position, -1680.0f, 2.0f, 35.0f); position[0] *= gCourseDirection; - rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, - ACTOR_RAILROAD_CROSSING)); + rrxing = (struct RailroadCrossing*) GET_ACTOR( + add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing2; vec3f_set(position, -1600.0f, 2.0f, 35.0f); position[0] *= gCourseDirection; - rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, - ACTOR_RAILROAD_CROSSING)); + rrxing = (struct RailroadCrossing*) GET_ACTOR( + add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing2; // Original game forgot to put gCourseDirection to face the crossing the right direction in extra mode vec3s_set(rotation, 0, -0x2000 * gCourseDirection, 0); vec3f_set(position, -2459.0f, 2.0f, 2263.0f); position[0] *= gCourseDirection; - rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, - ACTOR_RAILROAD_CROSSING)); + rrxing = (struct RailroadCrossing*) GET_ACTOR( + add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; vec3f_set(position, -2467.0f, 2.0f, 2375.0f); position[0] *= gCourseDirection; - rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, - ACTOR_RAILROAD_CROSSING)); + rrxing = (struct RailroadCrossing*) GET_ACTOR( + add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; - generate_train_waypoints(); s32 centerWaypoint = 160; @@ -240,11 +239,14 @@ void KalimariDesert::InitCourseObjects() { } } -void KalimariDesert::SomeSounds() {} +void KalimariDesert::SomeSounds() { +} -void KalimariDesert::WhatDoesThisDo(Player* player, int8_t playerId) {} +void KalimariDesert::WhatDoesThisDo(Player* player, int8_t playerId) { +} -void KalimariDesert::WhatDoesThisDoAI(Player* player, int8_t playerId) {} +void KalimariDesert::WhatDoesThisDoAI(Player* player, int8_t playerId) { +} void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); @@ -257,30 +259,31 @@ void KalimariDesert::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_kalimari_desert_packed_dl_71C8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x070071C8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x070071C8))); } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); render_course_segments(kalimari_desert_dls, arg0); // d_course_kalimari_desert_packed_dl_1ED8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07001ED8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07001ED8))); // d_course_kalimari_desert_packed_dl_1B18 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07001B18))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07001B18))); // d_course_kalimari_desert_packed_dl_8330 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07008330))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07008330))); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); // d_course_kalimari_desert_packed_dl_998 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000998))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000998))); // d_course_kalimari_desert_packed_dl_270 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000270))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000270))); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); } void KalimariDesert::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_kalimari_desert_dl_22E00)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_kalimari_desert_dl_22E00)); } -void KalimariDesert::Destroy() { } +void KalimariDesert::Destroy() { +} diff --git a/src/engine/courses/KalimariDesert.h b/src/engine/courses/KalimariDesert.h index fe8b21f23..5dc6c2eba 100644 --- a/src/engine/courses/KalimariDesert.h +++ b/src/engine/courses/KalimariDesert.h @@ -6,26 +6,26 @@ #include "engine/vehicles/Train.h" extern "C" { - #include "assets/kalimari_desert_vertices.h" - #include "assets/kalimari_desert_displaylists.h" - #include "assets/kalimari_desert_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture kalimari_desert_textures[]; +#include "assets/kalimari_desert_vertices.h" +#include "assets/kalimari_desert_displaylists.h" +#include "assets/kalimari_desert_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture kalimari_desert_textures[]; } class KalimariDesert : public Course { -public: - virtual ~KalimariDesert() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~KalimariDesert() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit KalimariDesert(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -37,7 +37,7 @@ public: virtual void RenderCredits() override; virtual void Destroy() override; -private: + private: size_t _numTrains = 2; size_t _numCarriages = 5; ATrain::TenderStatus _tender = ATrain::TenderStatus::HAS_TENDER; diff --git a/src/engine/courses/KoopaTroopaBeach.cpp b/src/engine/courses/KoopaTroopaBeach.cpp index fff1b7b55..9d39bd25c 100644 --- a/src/engine/courses/KoopaTroopaBeach.cpp +++ b/src/engine/courses/KoopaTroopaBeach.cpp @@ -12,29 +12,29 @@ #include "assets/koopa_troopa_beach_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "code_8003DC40.h" - #include "memory.h" - #include "course.h" - extern const char *koopa_troopa_beach_dls[]; - extern s8 gPlayerCount; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "code_8003DC40.h" +#include "memory.h" +#include "course.h" +extern const char* koopa_troopa_beach_dls[]; +extern s8 gPlayerCount; } const course_texture koopa_troopa_beach_textures[] = { @@ -86,7 +86,7 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Props.NearPersp = 1.0f; Props.FarPersp = 5000.0f; - Props.PathSizes = {0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -108,13 +108,13 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_koopa_troopa_beach_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_track_waypoints); - Props.PathTable2[1] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_track_waypoints_2); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_koopa_troopa_beach_track_waypoints); + Props.PathTable2[1] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_koopa_troopa_beach_track_waypoints_2); Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -122,30 +122,30 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Props.Clouds = gKoopaTroopaBeachClouds; Props.CloudList = gKoopaTroopaBeachClouds; - Props.Skybox.TopRight = {48, 152, 120}; - Props.Skybox.BottomRight = {216, 232, 248}; - Props.Skybox.BottomLeft = {216, 232, 248}; - Props.Skybox.TopLeft = {48, 152, 120}; - Props.Skybox.FloorTopRight = {48, 152, 120}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {48, 152, 120}; + Props.Skybox.TopRight = { 48, 152, 120 }; + Props.Skybox.BottomRight = { 216, 232, 248 }; + Props.Skybox.BottomLeft = { 216, 232, 248 }; + Props.Skybox.TopLeft = { 48, 152, 120 }; + Props.Skybox.FloorTopRight = { 48, 152, 120 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 48, 152, 120 }; Props.Sequence = MusicSeq::MUSIC_SEQ_KOOPA_TROOPA_BEACH; Props.WaterLevel = 0.0f; gWaterVelocity = -0.1f; - WaterVolumes.push_back({0.8f, 67.0f, 239.0f, 2233.0f, 2405.0f}); + WaterVolumes.push_back({ 0.8f, 67.0f, 239.0f, 2233.0f, 2405.0f }); } void KoopaTroopaBeach::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); func_80295C6C(); - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x0700ADE0), -0x6A, 255, 255, 255); - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x0700A540), -0x6A, 255, 255, 255); - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07009E70), -0x6A, 255, 255, 255); - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000358), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x0700ADE0), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x0700A540), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07009E70), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07000358), -0x6A, 255, 255, 255); } void KoopaTroopaBeach::LoadTextures() { @@ -153,8 +153,8 @@ void KoopaTroopaBeach::LoadTextures() { void KoopaTroopaBeach::BeginPlay() { init_actor_hot_air_balloon_item_box(328.0f * gCourseDirection, 70.0f, 2541.0f); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_item_box_spawns)); - spawn_palm_trees((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_tree_spawn)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_koopa_troopa_beach_item_box_spawns)); + spawn_palm_trees((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_koopa_troopa_beach_tree_spawn)); if (gGamestate != CREDITS_SEQUENCE) { gWorldInstance.AddObject(new OCrab(FVector2D(-1809, 625), FVector2D(-1666, 594))); @@ -201,24 +201,24 @@ void KoopaTroopaBeach::InitCourseObjects() { void KoopaTroopaBeach::UpdateCourseObjects() { if (gGamestate != CREDITS_SEQUENCE) { - //update_crabs(); + // update_crabs(); } if ((gPlayerCount == 1) || (gPlayerCount == 2) || (gGamestate == CREDITS_SEQUENCE)) { - //update_seagulls(); + // update_seagulls(); } } void KoopaTroopaBeach::RenderCourseObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { - //render_object_crabs(cameraId); + // render_object_crabs(cameraId); } if (gGamestate != CREDITS_SEQUENCE) { if ((gPlayerCount == 1) || (gPlayerCount == 2)) { - //render_object_seagulls(cameraId); + // render_object_seagulls(cameraId); } } else { - //render_object_seagulls(cameraId); + // render_object_seagulls(cameraId); } } @@ -227,9 +227,11 @@ void KoopaTroopaBeach::SomeSounds() { func_800C9D80(D_8015F738, D_802B91C8, 0x51028001); } -void KoopaTroopaBeach::WhatDoesThisDo(Player* player, int8_t playerId) {} +void KoopaTroopaBeach::WhatDoesThisDo(Player* player, int8_t playerId) { +} -void KoopaTroopaBeach::WhatDoesThisDoAI(Player* player, int8_t playerId) {} +void KoopaTroopaBeach::WhatDoesThisDoAI(Player* player, int8_t playerId) { +} void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { gDPPipeSync(gDisplayListHead++); @@ -247,7 +249,7 @@ void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_koopa_troopa_beach_packed_dl_9688 gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07009688))); - render_course_segments((const char**)d_course_koopa_troopa_beach_dl_list1, arg0); + render_course_segments((const char**) d_course_koopa_troopa_beach_dl_list1, arg0); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); @@ -258,10 +260,11 @@ void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { } void KoopaTroopaBeach::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_koopa_troopa_beach_dl_18D68)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_koopa_troopa_beach_dl_18D68)); } -void KoopaTroopaBeach::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) { +void KoopaTroopaBeach::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, + f32* arg6, f32* arg7) { func_8003E37C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } @@ -286,9 +289,9 @@ void KoopaTroopaBeach::ScrollingTextures() { } // waterfall animation // d_course_koopa_troopa_beach_packed_dl_9D58 - find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07009D58)), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07009D58)), 0, D_802B87BC); // d_course_koopa_troopa_beach_packed_dl_9CD0 - find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07009CD0)), 0, D_802B87C4); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07009CD0)), 0, D_802B87C4); D_802B87CC = random_int(300) / 40; if (D_802B87C8 < 0) { D_802B87C8 = random_int(300) / 40; @@ -297,11 +300,12 @@ void KoopaTroopaBeach::ScrollingTextures() { } // Waterfall bubbling effect? (unused) // d_course_koopa_troopa_beach_packed_dl_2E8 - find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(reinterpret_cast<void*>(0x070002E8)), D_802B87C8, D_802B87CC); - + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual(reinterpret_cast<void*>(0x070002E8)), D_802B87C8, + D_802B87CC); } -void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) { Mat4 matrix; Vec3f vector; @@ -321,7 +325,7 @@ void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pat case 37: gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_koopa_troopa_beach_packed_dl_9E70 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07009E70)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07009E70)); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); break; } @@ -335,11 +339,12 @@ void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pat gDPSetBlendMask(gDisplayListHead++, 0xFF); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); - render_course_segments((const char**)koopa_troopa_beach_dls2, screen); + render_course_segments((const char**) koopa_troopa_beach_dls2, screen); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); gDPPipeSync(gDisplayListHead++); } -void KoopaTroopaBeach::Destroy() {} +void KoopaTroopaBeach::Destroy() { +} diff --git a/src/engine/courses/KoopaTroopaBeach.h b/src/engine/courses/KoopaTroopaBeach.h index 7ebd8bac8..4f5ce6e8d 100644 --- a/src/engine/courses/KoopaTroopaBeach.h +++ b/src/engine/courses/KoopaTroopaBeach.h @@ -7,26 +7,26 @@ #include "World.h" extern "C" { - #include "assets/koopa_troopa_beach_vertices.h" - #include "assets/koopa_troopa_beach_displaylists.h" - #include "assets/koopa_troopa_beach_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture koopa_troopa_beach_textures[]; +#include "assets/koopa_troopa_beach_vertices.h" +#include "assets/koopa_troopa_beach_displaylists.h" +#include "assets/koopa_troopa_beach_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture koopa_troopa_beach_textures[]; } class KoopaTroopaBeach : public Course { -public: - virtual ~KoopaTroopaBeach() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~KoopaTroopaBeach() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit KoopaTroopaBeach(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -37,9 +37,11 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; - virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override; + virtual void RenderCredits() override; + virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, + f32* arg7) override; virtual void ScrollingTextures() override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/LuigiRaceway.cpp b/src/engine/courses/LuigiRaceway.cpp index e4ee857a3..fa327f696 100644 --- a/src/engine/courses/LuigiRaceway.cpp +++ b/src/engine/courses/LuigiRaceway.cpp @@ -145,7 +145,7 @@ LuigiRaceway::LuigiRaceway() { Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; - Props.CloudTexture = (u8*)LOAD_ASSET_RAW(gTextureExhaust2); + Props.CloudTexture = (u8*) LOAD_ASSET_RAW(gTextureExhaust2); Props.Clouds = gLuigiRacewayClouds; Props.CloudList = gLuigiRacewayClouds; diff --git a/src/engine/courses/MarioRaceway.cpp b/src/engine/courses/MarioRaceway.cpp index 50af0d890..ccfe35921 100644 --- a/src/engine/courses/MarioRaceway.cpp +++ b/src/engine/courses/MarioRaceway.cpp @@ -11,29 +11,29 @@ #include "engine/objects/GrandPrixBalloons.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "mario_raceway_data.h" - #include "collision.h" - #include "memory.h" - #include "courses/staff_ghost_data.h" - #include "course.h" - extern const char *mario_raceway_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "mario_raceway_data.h" +#include "collision.h" +#include "memory.h" +#include "courses/staff_ghost_data.h" +#include "course.h" +extern const char* mario_raceway_dls[]; } const course_texture mario_raceway_textures[] = { @@ -101,7 +101,7 @@ MarioRaceway::MarioRaceway() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {600, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 600, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -123,12 +123,12 @@ MarioRaceway::MarioRaceway() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_mario_raceway_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_mario_raceway_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_mario_raceway_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_mario_raceway_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -137,36 +137,36 @@ MarioRaceway::MarioRaceway() { Props.Clouds = gKalimariDesertClouds; Props.CloudList = gLuigiRacewayClouds; - Props.Skybox.TopRight = {0, 184, 248}; - Props.Skybox.BottomRight = {216, 232, 248}; - Props.Skybox.BottomLeft = {216, 232, 248}; - Props.Skybox.TopLeft = {0, 184, 248}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 0, 184, 248 }; + Props.Skybox.BottomRight = { 216, 232, 248 }; + Props.Skybox.BottomLeft = { 216, 232, 248 }; + Props.Skybox.TopLeft = { 0, 184, 248 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_RACEWAYS_WARIO_STADIUM; } void MarioRaceway::Load() { Course::Load(); - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*)0x07001140)); - + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*) 0x07001140)); + // Generate pipe collision mesh if (gScreenModeSelection == SCREEN_MODE_1P) { // d_course_mario_raceway_packed_dl_8E8 - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*)0x070008E8)); + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*) 0x070008E8)); } else { if (CVarGetInteger("gDisableLod", 1) == true) { - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*)0x070008E8)); + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*) 0x070008E8)); } else { // d_course_mario_raceway_packed_dl_2D68 - generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*)0x07002D68)); + generate_collision_mesh_with_defaults(segmented_gfx_to_virtual((void*) 0x07002D68)); } } - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_mario_raceway_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_mario_raceway_addr)); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -190,9 +190,9 @@ void MarioRaceway::BeginPlay() { Vec3f velocity = { 0.0f, 0.0f, 0.0f }; Vec3s rotation = { 0, 0, 0 }; - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_tree_spawns)); - spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_piranha_plant_spawns)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_item_box_spawns)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_mario_raceway_tree_spawns)); + spawn_piranha_plants((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_mario_raceway_piranha_plant_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_mario_raceway_item_box_spawns)); vec3f_set(position, 150.0f, 40.0f, -1300.0f); position[0] *= gCourseDirection; add_actor_to_empty_slot(position, rotation, velocity, ACTOR_MARIO_SIGN); @@ -230,8 +230,7 @@ void MarioRaceway::SomeSounds() { } void MarioRaceway::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x55); } @@ -245,8 +244,7 @@ void MarioRaceway::WhatDoesThisDo(Player* player, int8_t playerId) { } void MarioRaceway::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x55); } @@ -378,12 +376,13 @@ void MarioRaceway::Render(struct UnkStruct_800DC5EC* arg0) { } void MarioRaceway::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_mario_raceway_dl_9348)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_mario_raceway_dl_9348)); } void MarioRaceway::CreditsSpawnActors() { dma_textures(gTextureTrees1, 0x35B, 0x800); - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_tree_spawns)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_mario_raceway_tree_spawns)); } -void MarioRaceway::Destroy() { } +void MarioRaceway::Destroy() { +} diff --git a/src/engine/courses/MarioRaceway.h b/src/engine/courses/MarioRaceway.h index e237f1538..ecf23ddd3 100644 --- a/src/engine/courses/MarioRaceway.h +++ b/src/engine/courses/MarioRaceway.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "mario_raceway_vertices.h" - #include "mario_raceway_displaylists.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - #include "mario_raceway_data.h" - extern const course_texture mario_raceway_textures[]; +#include "mario_raceway_vertices.h" +#include "mario_raceway_displaylists.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +#include "mario_raceway_data.h" +extern const course_texture mario_raceway_textures[]; } class MarioRaceway : public Course { -public: - virtual ~MarioRaceway() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~MarioRaceway() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit MarioRaceway(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -33,7 +33,7 @@ public: virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void SetStaffGhost() override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/MooMooFarm.cpp b/src/engine/courses/MooMooFarm.cpp index 304ad2210..90b1cdfd9 100644 --- a/src/engine/courses/MooMooFarm.cpp +++ b/src/engine/courses/MooMooFarm.cpp @@ -12,30 +12,30 @@ #include "engine/objects/Mole.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "code_80086E70.h" - #include "course.h" - extern const char *moo_moo_farm_dls[]; - extern s16 currentScreenSection; - extern s8 gPlayerCount; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "code_80086E70.h" +#include "course.h" +extern const char* moo_moo_farm_dls[]; +extern s16 currentScreenSection; +extern s8 gPlayerCount; } const course_texture moo_moo_farm_textures[] = { @@ -98,7 +98,7 @@ MooMooFarm::MooMooFarm() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {0x230, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x230, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -120,12 +120,12 @@ MooMooFarm::MooMooFarm() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_moo_moo_farm_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_moo_moo_farm_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_moo_moo_farm_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_moo_moo_farm_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -134,21 +134,21 @@ MooMooFarm::MooMooFarm() { Props.Clouds = gYoshiValleyMooMooFarmClouds; Props.CloudList = gYoshiValleyMooMooFarmClouds; - Props.Skybox.TopRight = {0, 18, 255}; - Props.Skybox.BottomRight = {197, 211, 255}; - Props.Skybox.BottomLeft = {197, 211, 255}; - Props.Skybox.TopLeft = {0, 18, 255}; - Props.Skybox.FloorTopRight = {255, 184, 99}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {255, 184, 99}; + Props.Skybox.TopRight = { 0, 18, 255 }; + Props.Skybox.BottomRight = { 197, 211, 255 }; + Props.Skybox.BottomLeft = { 197, 211, 255 }; + Props.Skybox.TopLeft = { 0, 18, 255 }; + Props.Skybox.FloorTopRight = { 255, 184, 99 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 255, 184, 99 }; Props.Sequence = MusicSeq::MUSIC_SEQ_MOO_MOO_FARM_YOSHI_VALLEY; } void MooMooFarm::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_moo_moo_farm_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_moo_moo_farm_addr)); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -170,57 +170,34 @@ void MooMooFarm::LoadTextures() { // These are full arrays that are not used in the original game static std::vector<FVector> sMoleSpawns1 = { - { FVector(771, 20, -2022) }, - { FVector(807, 15, -2063) }, - { FVector(847, 18, -2040) }, - { FVector(913, 14, -2054) }, - { FVector(939, 21, -1997) }, - { FVector(941, 17, -2024) }, - { FVector(994, 17, -1994) }, - { FVector(863, 22, -2010) }, + { FVector(771, 20, -2022) }, { FVector(807, 15, -2063) }, { FVector(847, 18, -2040) }, { FVector(913, 14, -2054) }, + { FVector(939, 21, -1997) }, { FVector(941, 17, -2024) }, { FVector(994, 17, -1994) }, { FVector(863, 22, -2010) }, }; static std::vector<FVector> sMoleSpawns2 = { - { FVector(1500, 2, 1140) }, - { FVector(1510, 15, 1050) }, - { FVector(1609, 21, 935) }, - { FVector(1289, 3, 1269) }, - { FVector(1468, 22, 1046) }, - { FVector(1380, 12, 1154) }, - { FVector(1297, 19, 1170) }, - { FVector(1589, 11, 1004) }, - { FVector(1414, 3, 1185) }, - { FVector(1405, 4, 1254) }, - { FVector(1463, 8, 1118) }, + { FVector(1500, 2, 1140) }, { FVector(1510, 15, 1050) }, { FVector(1609, 21, 935) }, { FVector(1289, 3, 1269) }, + { FVector(1468, 22, 1046) }, { FVector(1380, 12, 1154) }, { FVector(1297, 19, 1170) }, { FVector(1589, 11, 1004) }, + { FVector(1414, 3, 1185) }, { FVector(1405, 4, 1254) }, { FVector(1463, 8, 1118) }, }; static std::vector<FVector> sMoleSpawns3 = { - { FVector(701, 2, 1279) }, - { FVector(811, 8, 1278) }, - { FVector(791, 16, 1229) }, - { FVector(876, 15, 1266) }, - { FVector(984, 23, 1248) }, - { FVector(891, 20, 1242) }, - { FVector(920, 15, 1304) }, - { FVector(823, 6, 1327) }, - { FVector(717, 8, 1239) }, - { FVector(695, 19, 1176) }, - { FVector(628, 8, 1191) }, - { FVector(724, 4, 1339) }, + { FVector(701, 2, 1279) }, { FVector(811, 8, 1278) }, { FVector(791, 16, 1229) }, { FVector(876, 15, 1266) }, + { FVector(984, 23, 1248) }, { FVector(891, 20, 1242) }, { FVector(920, 15, 1304) }, { FVector(823, 6, 1327) }, + { FVector(717, 8, 1239) }, { FVector(695, 19, 1176) }, { FVector(628, 8, 1191) }, { FVector(724, 4, 1339) }, }; void MooMooFarm::BeginPlay() { if (gPlayerCountSelection1 != 4) { - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_tree_spawn)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_moo_moo_farm_tree_spawn)); } - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_moo_moo_farm_item_box_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_moo_moo_farm_item_box_spawns)); for (size_t i = 0; i < gObjectParticle2_SIZE; i++) { find_unused_obj_index(&gObjectParticle2[i]); } if (gGamestate != CREDITS_SEQUENCE) { - switch(gCCSelection) { + switch (gCCSelection) { case CC_50: { std::vector<FVector> moleSpawns1_50 = { { FVector(771, 20, -2022) }, { FVector(807, 15, -2063) }, @@ -332,8 +309,7 @@ void MooMooFarm::BeginPlay() { } void MooMooFarm::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x145) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x18B)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x145) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x18B)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x55); } @@ -347,8 +323,7 @@ void MooMooFarm::WhatDoesThisDo(Player* player, int8_t playerId) { } void MooMooFarm::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x145) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x18B)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x145) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x18B)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x55); } @@ -372,28 +347,28 @@ void MooMooFarm::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_moo_moo_farm_packed_dl_4DF8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07004DF8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07004DF8)); // d_course_moo_moo_farm_packed_dl_5640 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07005640)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07005640)); gSPFogPosition(gDisplayListHead++, D_802B87B0, D_802B87B4); render_course_segments(moo_moo_farm_dls, arg0); if ((temp_s0 < 14) && (temp_s0 > 10)) { if ((temp_s1 == 2) || (temp_s1 == 3) || (temp_s1 == 1)) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_13FF8); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_13FF8); } } else if (temp_s0 < 16) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_13FF8); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_13FF8); } else if (temp_s0 < 19) { if (temp_s1 != 2) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_13FF8); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_13FF8); } } else if (temp_s0 < 20) { if (temp_s1 == 0) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_13FF8); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_13FF8); } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); @@ -402,40 +377,40 @@ void MooMooFarm::Render(struct UnkStruct_800DC5EC* arg0) { if ((temp_s0 >= 16) && (temp_s0 < 24)) { if ((temp_s1 == 2) || (temp_s1 == 3)) { // d_course_moo_moo_farm_packed_dl_5410 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07005410)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07005410)); } } else if (temp_s0 < 9) { if (temp_s1 == 2) { // d_course_moo_moo_farm_packed_dl_5410 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07005410)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07005410)); } } if (temp_s0 < 4) { if (temp_s1 != 0) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_14060); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_14060); } } else if (temp_s0 < 8) { if (temp_s1 == 2) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_14060); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_14060); } } else if (temp_s0 >= 22) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_14060); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_14060); } else if (temp_s0 >= 18) { if ((temp_s1 == 0) || (temp_s1 == 3)) { - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_moo_moo_farm_dl_14060); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_moo_moo_farm_dl_14060); } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); // d_course_moo_moo_farm_packed_dl_10C0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070010C0)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070010C0)); } void MooMooFarm::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_moo_moo_farm_dl_14088)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_moo_moo_farm_dl_14088)); } void MooMooFarm::CreditsSpawnActors() { @@ -454,4 +429,5 @@ void MooMooFarm::CreditsSpawnActors() { spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_moo_moo_farm_tree_spawn)); } -void MooMooFarm::Destroy() { } +void MooMooFarm::Destroy() { +} diff --git a/src/engine/courses/MooMooFarm.h b/src/engine/courses/MooMooFarm.h index 3c18e5024..46f96159d 100644 --- a/src/engine/courses/MooMooFarm.h +++ b/src/engine/courses/MooMooFarm.h @@ -5,35 +5,35 @@ #include "engine/objects/Mole.h" extern "C" { - #include "assets/moo_moo_farm_vertices.h" - #include "assets/moo_moo_farm_displaylists.h" - #include "assets/moo_moo_farm_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture moo_moo_farm_textures[]; +#include "assets/moo_moo_farm_vertices.h" +#include "assets/moo_moo_farm_displaylists.h" +#include "assets/moo_moo_farm_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture moo_moo_farm_textures[]; } class OMole; class MooMooFarm : public Course { -public: - virtual ~MooMooFarm() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~MooMooFarm() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit MooMooFarm(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/PodiumCeremony.cpp b/src/engine/courses/PodiumCeremony.cpp index a4c01f588..7748cd73f 100644 --- a/src/engine/courses/PodiumCeremony.cpp +++ b/src/engine/courses/PodiumCeremony.cpp @@ -15,29 +15,29 @@ #include "engine/objects/GrandPrixBalloons.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "courses/staff_ghost_data.h" - #include "podium_ceremony_actors.h" - #include "course.h" - extern const char *royal_raceway_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "courses/staff_ghost_data.h" +#include "podium_ceremony_actors.h" +#include "course.h" +extern const char* royal_raceway_dls[]; } const course_texture podium_ceremony_textures[] = { @@ -111,7 +111,7 @@ PodiumCeremony::PodiumCeremony() { Props.AIMinimumSeparation = 0.4f; Props.AISteeringSensitivity = 53; - Props.PathSizes = {500, 500, 500, 500, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 500, 500, 500, 500, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -133,10 +133,10 @@ PodiumCeremony::PodiumCeremony() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(podium_ceremony_path); - Props.PathTable[1] = (TrackWaypoint*)LOAD_ASSET_RAW(podium_ceremony_path_2); - Props.PathTable[2] = (TrackWaypoint*)LOAD_ASSET_RAW(podium_ceremony_path_3); - Props.PathTable[3] = (TrackWaypoint*)LOAD_ASSET_RAW(podium_ceremony_path_4); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(podium_ceremony_path); + Props.PathTable[1] = (TrackWaypoint*) LOAD_ASSET_RAW(podium_ceremony_path_2); + Props.PathTable[2] = (TrackWaypoint*) LOAD_ASSET_RAW(podium_ceremony_path_3); + Props.PathTable[3] = (TrackWaypoint*) LOAD_ASSET_RAW(podium_ceremony_path_4); Props.PathTable2[0] = NULL; Props.PathTable2[1] = NULL; @@ -147,14 +147,14 @@ PodiumCeremony::PodiumCeremony() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {238, 144, 255}; - Props.Skybox.BottomRight = {255, 224, 240}; - Props.Skybox.BottomLeft = {255, 224, 240}; - Props.Skybox.TopLeft = {238, 144, 255}; - Props.Skybox.FloorTopRight = {255, 224, 240}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {255, 224, 240}; + Props.Skybox.TopRight = { 238, 144, 255 }; + Props.Skybox.BottomRight = { 255, 224, 240 }; + Props.Skybox.BottomLeft = { 255, 224, 240 }; + Props.Skybox.TopLeft = { 238, 144, 255 }; + Props.Skybox.FloorTopRight = { 255, 224, 240 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 255, 224, 240 }; Props.Sequence = MusicSeq::MUSIC_SEQ_UNKNOWN; Props.WaterLevel = -60.0f; @@ -163,7 +163,7 @@ PodiumCeremony::PodiumCeremony() { void PodiumCeremony::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_royal_raceway_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_royal_raceway_addr)); func_80295C6C(); } @@ -171,17 +171,18 @@ void PodiumCeremony::LoadTextures() { } void PodiumCeremony::BeginPlay() { - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns)); - spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns)); + spawn_piranha_plants((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn)); - gWorldInstance.AddObject(new OCheepCheep(FVector((f32)-3202, (f32)19, (f32)-478), OCheepCheep::CheepType::PODIUM_CEREMONY, IPathSpan(0, 0))); - gWorldInstance.AddObject(new OPodium(FVector((f32)-3202, (f32)19, (f32)-478))); - - FVector pos = {0, 90.0f, 0}; + gWorldInstance.AddObject(new OCheepCheep(FVector((f32) -3202, (f32) 19, (f32) -478), + OCheepCheep::CheepType::PODIUM_CEREMONY, IPathSpan(0, 0))); + gWorldInstance.AddObject(new OPodium(FVector((f32) -3202, (f32) 19, (f32) -478))); + + FVector pos = { 0, 90.0f, 0 }; OTrophy::TrophyType type = OTrophy::TrophyType::BRONZE; - switch(D_802874D8.unk1D) { + switch (D_802874D8.unk1D) { case 2: // Bronze type = gCCSelection == CC_150 ? OTrophy::TrophyType::BRONZE_150 : OTrophy::TrophyType::BRONZE; break; @@ -197,7 +198,8 @@ void PodiumCeremony::BeginPlay() { break; } - OTrophy* trophy = reinterpret_cast<OTrophy*>(gWorldInstance.AddObject(new OTrophy(pos, type, OTrophy::Behaviour::PODIUM_CEREMONY))); + OTrophy* trophy = reinterpret_cast<OTrophy*>( + gWorldInstance.AddObject(new OTrophy(pos, type, OTrophy::Behaviour::PODIUM_CEREMONY))); FVector kart = { 0, 0, 0 }; gWorldInstance.AddObject(new OBombKart(kart, &D_80164550[3][3], 3, 5, 1.25f)); @@ -226,8 +228,7 @@ void PodiumCeremony::SomeSounds() { } void PodiumCeremony::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x41); } @@ -241,8 +242,7 @@ void PodiumCeremony::WhatDoesThisDo(Player* player, int8_t playerId) { } void PodiumCeremony::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x41); } @@ -285,7 +285,8 @@ void PodiumCeremony::Render(struct UnkStruct_800DC5EC* arg0) { } void PodiumCeremony::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_royal_raceway_dl_D8E8)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_royal_raceway_dl_D8E8)); } -void PodiumCeremony::Destroy() { } +void PodiumCeremony::Destroy() { +} diff --git a/src/engine/courses/PodiumCeremony.h b/src/engine/courses/PodiumCeremony.h index 6026d7f9f..e99bc2ee4 100644 --- a/src/engine/courses/PodiumCeremony.h +++ b/src/engine/courses/PodiumCeremony.h @@ -5,35 +5,35 @@ #include "Course.h" extern "C" { - #include "assets/royal_raceway_vertices.h" - #include "assets/royal_raceway_displaylists.h" - #include "assets/royal_raceway_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture royal_raceway_textures[]; +#include "assets/royal_raceway_vertices.h" +#include "assets/royal_raceway_displaylists.h" +#include "assets/royal_raceway_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture royal_raceway_textures[]; } class PodiumCeremony : public Course { -public: - virtual ~PodiumCeremony() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~PodiumCeremony() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit PodiumCeremony(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; - //virtual void InitClouds() override; + // virtual void InitClouds() override; virtual void InitCourseObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/RainbowRoad.cpp b/src/engine/courses/RainbowRoad.cpp index 7c60d3af3..ae85c280d 100644 --- a/src/engine/courses/RainbowRoad.cpp +++ b/src/engine/courses/RainbowRoad.cpp @@ -11,27 +11,27 @@ #include "assets/rainbow_road_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course.h" - extern const char *rainbow_road_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course.h" +extern const char* rainbow_road_dls[]; } const course_texture rainbow_road_textures[] = { @@ -43,7 +43,6 @@ const course_texture rainbow_road_textures[] = { { 0x00000000, 0x0000, 0x0000, 0x0 }, }; - RainbowRoad::RainbowRoad() { this->vtx = d_course_rainbow_road_vertex; this->gfx = d_course_rainbow_road_packed_dls; @@ -72,7 +71,7 @@ RainbowRoad::RainbowRoad() { Props.NearPersp = 2.0f; Props.FarPersp = 2700.0f; - Props.PathSizes = {0x76C, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x76C, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -94,12 +93,12 @@ RainbowRoad::RainbowRoad() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_rainbow_road_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_rainbow_road_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_rainbow_road_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_rainbow_road_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -107,16 +106,16 @@ RainbowRoad::RainbowRoad() { Props.Clouds = gToadsTurnpikeRainbowRoadStars; Props.CloudList = gToadsTurnpikeRainbowRoadStars; - Props.Skybox.TopRight = {0, 0, 0}; - Props.Skybox.BottomRight = {0, 0, 0}; - Props.Skybox.BottomLeft = {0, 0, 0}; - Props.Skybox.TopLeft = {0, 0, 0}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 0, 0, 0 }; + Props.Skybox.BottomRight = { 0, 0, 0 }; + Props.Skybox.BottomLeft = { 0, 0, 0 }; + Props.Skybox.TopLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_RAINBOW_ROAD; - + Props.WaterLevel = 0.0f; } @@ -124,17 +123,17 @@ void RainbowRoad::Load() { Course::Load(); D_800DC5C8 = 1; - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_rainbow_road_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_rainbow_road_addr)); func_80295C6C(); // d_course_rainbow_road_packed_dl_2068 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002068), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07002068), -0x6A, 255, 255, 255); // d_course_rainbow_road_packed_dl_1E18 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001E18), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001E18), -0x6A, 255, 255, 255); // d_course_rainbow_road_packed_dl_1318 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001318), 255, 255, 255, 0); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001318), 255, 255, 255, 0); if (gGamestate != CREDITS_SEQUENCE) { // d_course_rainbow_road_packed_dl_1FB8 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001FB8), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001FB8), -0x6A, 255, 255, 255); } } @@ -142,7 +141,7 @@ void RainbowRoad::LoadTextures() { } void RainbowRoad::BeginPlay() { - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns)); if (gGamestate != CREDITS_SEQUENCE) { gWorldInstance.AddObject(new OChainChomp()); @@ -187,23 +186,25 @@ void RainbowRoad::InitCourseObjects() { void RainbowRoad::UpdateCourseObjects() { if (gGamestate != CREDITS_SEQUENCE) { update_neon(); - //update_chain_chomps(); + // update_chain_chomps(); } } void RainbowRoad::RenderCourseObjects(s32 cameraId) { if (gGamestate != CREDITS_SEQUENCE) { render_object_neon(cameraId); - //render_object_chain_chomps(cameraId); + // render_object_chain_chomps(cameraId); } } void RainbowRoad::SomeSounds() { } -void RainbowRoad::WhatDoesThisDo(Player* player, int8_t playerId) {} +void RainbowRoad::WhatDoesThisDo(Player* player, int8_t playerId) { +} -void RainbowRoad::WhatDoesThisDoAI(Player* player, int8_t playerId) {} +void RainbowRoad::WhatDoesThisDoAI(Player* player, int8_t playerId) { +} void RainbowRoad::Render(struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -214,14 +215,15 @@ void RainbowRoad::Render(struct UnkStruct_800DC5EC* arg0) { } void RainbowRoad::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_rainbow_road_dl_16220)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_rainbow_road_dl_16220)); } void RainbowRoad::Waypoints(Player* player, int8_t playerId) { player->nearestWaypointId = gCopyNearestWaypointByPlayerId[playerId]; } -void RainbowRoad::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void RainbowRoad::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) { Mat4 matrix; gDPPipeSync(gDisplayListHead++); @@ -236,11 +238,12 @@ void RainbowRoad::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCoun void RainbowRoad::CreditsSpawnActors() { // d_course_rainbow_road_packed_dl_2068 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002068), -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07002068), -0x6A, 0xFF, 0xFF, 0xFF); // d_course_rainbow_road_packed_dl_1E18 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001E18), -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001E18), -0x6A, 0xFF, 0xFF, 0xFF); // d_course_rainbow_road_packed_dl_1318 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001318), -1, 0xFF, 0xFF, 0); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001318), -1, 0xFF, 0xFF, 0); } -void RainbowRoad::Destroy() {} +void RainbowRoad::Destroy() { +} diff --git a/src/engine/courses/RainbowRoad.h b/src/engine/courses/RainbowRoad.h index 282655ace..962584eae 100644 --- a/src/engine/courses/RainbowRoad.h +++ b/src/engine/courses/RainbowRoad.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/rainbow_road_vertices.h" - #include "assets/rainbow_road_displaylists.h" - #include "assets/rainbow_road_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture rainbow_road_textures[]; +#include "assets/rainbow_road_vertices.h" +#include "assets/rainbow_road_displaylists.h" +#include "assets/rainbow_road_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture rainbow_road_textures[]; } class RainbowRoad : public Course { -public: - virtual ~RainbowRoad() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~RainbowRoad() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit RainbowRoad(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -36,9 +36,10 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; virtual void Destroy() override; }; diff --git a/src/engine/courses/RoyalRaceway.cpp b/src/engine/courses/RoyalRaceway.cpp index 849087c3f..97f3acc49 100644 --- a/src/engine/courses/RoyalRaceway.cpp +++ b/src/engine/courses/RoyalRaceway.cpp @@ -11,28 +11,28 @@ #include "engine/objects/GrandPrixBalloons.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "courses/staff_ghost_data.h" - #include "course.h" - extern const char *royal_raceway_dls[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "courses/staff_ghost_data.h" +#include "course.h" +extern const char* royal_raceway_dls[]; } const course_texture royal_raceway_textures[] = { @@ -110,7 +110,7 @@ RoyalRaceway::RoyalRaceway() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {0x3E8, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x3E8, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -132,12 +132,12 @@ RoyalRaceway::RoyalRaceway() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_royal_raceway_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_royal_raceway_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_royal_raceway_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_royal_raceway_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -146,14 +146,14 @@ RoyalRaceway::RoyalRaceway() { Props.Clouds = gRoyalRacewayClouds; Props.CloudList = gRoyalRacewayClouds; - Props.Skybox.TopRight = {238, 144, 255}; - Props.Skybox.BottomRight = {255, 224, 240}; - Props.Skybox.BottomLeft = {255, 224, 240}; - Props.Skybox.TopLeft = {238, 144, 255}; - Props.Skybox.FloorTopRight = {255, 224, 240}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {255, 224, 240}; + Props.Skybox.TopRight = { 238, 144, 255 }; + Props.Skybox.BottomRight = { 255, 224, 240 }; + Props.Skybox.BottomLeft = { 255, 224, 240 }; + Props.Skybox.TopLeft = { 238, 144, 255 }; + Props.Skybox.FloorTopRight = { 255, 224, 240 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 255, 224, 240 }; Props.Sequence = MusicSeq::MUSIC_SEQ_RACEWAYS_WARIO_STADIUM; Props.WaterLevel = -60.0f; @@ -162,7 +162,7 @@ RoyalRaceway::RoyalRaceway() { void RoyalRaceway::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_royal_raceway_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_royal_raceway_addr)); func_80295C6C(); } @@ -181,9 +181,9 @@ void RoyalRaceway::LoadTextures() { } void RoyalRaceway::BeginPlay() { - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns)); - spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_royal_raceway_tree_spawn)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_royal_raceway_item_box_spawns)); + spawn_piranha_plants((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn)); if (gModeSelection == VERSUS) { FVector pos = { 0, 0, 0 }; @@ -211,8 +211,7 @@ void RoyalRaceway::InitCourseObjects() { } void RoyalRaceway::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x41); } @@ -226,8 +225,7 @@ void RoyalRaceway::WhatDoesThisDo(Player* player, int8_t playerId) { } void RoyalRaceway::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x41); } @@ -283,7 +281,7 @@ void RoyalRaceway::Render(struct UnkStruct_800DC5EC* arg0) { } void RoyalRaceway::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_royal_raceway_dl_D8E8)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_royal_raceway_dl_D8E8)); } void RoyalRaceway::Waypoints(Player* player, int8_t playerId) { @@ -304,7 +302,7 @@ void RoyalRaceway::ScrollingTextures() { D_802B87BC = 0xFF; } // d_course_royal_raceway_packed_dl_A6A8 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x0700A6A8), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x0700A6A8), 0, D_802B87BC); // d_course_royal_raceway_packed_dl_A648 - find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*)0x0700A648), 0, D_802B87BC); + find_and_set_tile_size((uintptr_t) segmented_gfx_to_virtual((void*) 0x0700A648), 0, D_802B87BC); } diff --git a/src/engine/courses/RoyalRaceway.h b/src/engine/courses/RoyalRaceway.h index 7fe973edd..328378752 100644 --- a/src/engine/courses/RoyalRaceway.h +++ b/src/engine/courses/RoyalRaceway.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/royal_raceway_vertices.h" - #include "assets/royal_raceway_displaylists.h" - #include "assets/royal_raceway_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture royal_raceway_textures[]; +#include "assets/royal_raceway_vertices.h" +#include "assets/royal_raceway_displaylists.h" +#include "assets/royal_raceway_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture royal_raceway_textures[]; } class RoyalRaceway : public Course { -public: - virtual ~RoyalRaceway() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~RoyalRaceway() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit RoyalRaceway(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -32,7 +32,7 @@ public: virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void SetStaffGhost() override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void ScrollingTextures() override; virtual void Waypoints(Player* player, int8_t playerId) override; }; diff --git a/src/engine/courses/SherbetLand.cpp b/src/engine/courses/SherbetLand.cpp index 7eb7e958c..8a9c66e5c 100644 --- a/src/engine/courses/SherbetLand.cpp +++ b/src/engine/courses/SherbetLand.cpp @@ -11,28 +11,28 @@ #include "engine/objects/Penguin.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course.h" - extern const char *sherbet_land_dls[]; - extern const char *sherbet_land_dls_2[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course.h" +extern const char* sherbet_land_dls[]; +extern const char* sherbet_land_dls_2[]; } const course_texture sherbet_land_textures[] = { @@ -59,13 +59,13 @@ SherbetLand::SherbetLand() { Props.Minimap.PlayerScaleFactor = 0.015f; Props.Minimap.FinishlineX = 0; Props.Minimap.FinishlineY = 0; - Props.Minimap.Colour = {72, 100, 255}; + Props.Minimap.Colour = { 72, 100, 255 }; Props.SetText(Props.Name, "sherbet land", sizeof(Props.Name)); Props.SetText(Props.DebugName, "sherbet", sizeof(Props.DebugName)); Props.SetText(Props.CourseLength, "756m", sizeof(Props.CourseLength)); - Props.LakituTowType = (s32)OLakitu::LakituTowType::ICE; + Props.LakituTowType = (s32) OLakitu::LakituTowType::ICE; Props.AIBehaviour = D_0D009280; Props.AIMaximumSeparation = 50.0f; @@ -75,7 +75,7 @@ SherbetLand::SherbetLand() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -97,12 +97,12 @@ SherbetLand::SherbetLand() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_sherbet_land_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_sherbet_land_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_sherbet_land_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_sherbet_land_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -111,14 +111,14 @@ SherbetLand::SherbetLand() { Props.Clouds = gSherbetLandClouds; Props.CloudList = gSherbetLandClouds; - Props.Skybox.TopRight = {128, 184, 248}; - Props.Skybox.BottomRight = {216, 232, 248}; - Props.Skybox.BottomLeft = {216, 232, 248}; - Props.Skybox.TopLeft = {128, 184, 248}; - Props.Skybox.FloorTopRight = {216, 232, 248}; - Props.Skybox.FloorBottomRight = {128, 184, 248}; - Props.Skybox.FloorBottomLeft = {128, 184, 248}; - Props.Skybox.FloorTopLeft = {216, 232, 248}; + Props.Skybox.TopRight = { 128, 184, 248 }; + Props.Skybox.BottomRight = { 216, 232, 248 }; + Props.Skybox.BottomLeft = { 216, 232, 248 }; + Props.Skybox.TopLeft = { 128, 184, 248 }; + Props.Skybox.FloorTopRight = { 216, 232, 248 }; + Props.Skybox.FloorBottomRight = { 128, 184, 248 }; + Props.Skybox.FloorBottomLeft = { 128, 184, 248 }; + Props.Skybox.FloorTopLeft = { 216, 232, 248 }; Props.Sequence = MusicSeq::MUSIC_SEQ_FRAPPE_SNOWLAND; Props.WaterLevel = -18.0f; @@ -127,12 +127,12 @@ SherbetLand::SherbetLand() { void SherbetLand::Load() { Course::Load(); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_sherbet_land_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_sherbet_land_addr)); func_80295C6C(); // d_course_sherbet_land_packed_dl_1EB8 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001EB8), -0x4C, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001EB8), -0x4C, 255, 255, 255); // d_course_sherbet_land_packed_dl_2308 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002308), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07002308), -0x6A, 255, 255, 255); } f32 SherbetLand::GetWaterLevel(FVector pos, Collision* collision) { @@ -143,64 +143,77 @@ f32 SherbetLand::GetWaterLevel(FVector pos, Collision* collision) { } void SherbetLand::BeginPlay() { - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_sherbet_land_item_box_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_sherbet_land_item_box_spawns)); // Multiplayer does not spawn the big penguin -// if (gPlayerCountSelection1 == 1) { - FVector pos = {-383.0f, 2.0f, -690.0f}; - gWorldInstance.AddObject(new OPenguin(pos, 0, OPenguin::PenguinType::EMPEROR, OPenguin::Behaviour::STRUT)); -// } + // if (gPlayerCountSelection1 == 1) { + FVector pos = { -383.0f, 2.0f, -690.0f }; + gWorldInstance.AddObject(new OPenguin(pos, 0, OPenguin::PenguinType::EMPEROR, OPenguin::Behaviour::STRUT)); + // } FVector pos2 = { -2960.0f, -80.0f, 1521.0f }; - auto penguin = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos2, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); - auto penguin2 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos2, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin = reinterpret_cast<OPenguin*>( + gWorldInstance.AddObject(new OPenguin(pos2, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin2 = reinterpret_cast<OPenguin*>( + gWorldInstance.AddObject(new OPenguin(pos2, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); penguin->Diameter = penguin2->Diameter = 100.0f; FVector pos3 = { -2490.0f, -80.0f, 1612.0f }; - auto penguin3 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos3, 0x100, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); - auto penguin4 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos3, 0x100, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin3 = reinterpret_cast<OPenguin*>( + gWorldInstance.AddObject(new OPenguin(pos3, 0x100, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin4 = reinterpret_cast<OPenguin*>( + gWorldInstance.AddObject(new OPenguin(pos3, 0x100, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); penguin3->Diameter = penguin4->Diameter = 80.0f; FVector pos4 = { -2098.0f, -80.0f, 1624.0f }; - auto penguin5 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos4, 0xFF00, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); - auto penguin6 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos4, 0xFF00, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin5 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos4, 0xFF00, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin6 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos4, 0xFF00, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); penguin5->Diameter = penguin6->Diameter = 80.0f; - FVector pos5 = { -2080.0f, -80.0f, 1171.0f }; - auto penguin7 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos5, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); - auto penguin8 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos5, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin7 = reinterpret_cast<OPenguin*>( + gWorldInstance.AddObject(new OPenguin(pos5, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); + auto penguin8 = reinterpret_cast<OPenguin*>( + gWorldInstance.AddObject(new OPenguin(pos5, 0x150, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE))); penguin7->Diameter = penguin8->Diameter = 80.0f; - if (gGamestate == CREDITS_SEQUENCE) { FVector pos6 = { 380.0, 0.0f, -535.0f }; - auto penguin9 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos6, 0x9000, OPenguin::PenguinType::CREDITS, OPenguin::Behaviour::SLIDE3))); + auto penguin9 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos6, 0x9000, OPenguin::PenguinType::CREDITS, OPenguin::Behaviour::SLIDE3))); penguin9->MirrorModeAngleOffset = -0x4000; } else { FVector pos6 = { 146.0f, 0.0f, -380.0f }; - auto penguin9 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos6, 0x9000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE3))); + auto penguin9 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos6, 0x9000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE3))); penguin9->MirrorModeAngleOffset = -0x4000; } FVector pos7 = { 380.0f, 0.0f, -766.0f }; - auto penguin10 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos7, 0x5000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE4))); + auto penguin10 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos7, 0x5000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE4))); penguin10->MirrorModeAngleOffset = 0x8000; FVector pos8 = { -2300.0f, 0.0f, -210.0f }; - auto penguin11 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos8, 0xC000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); + auto penguin11 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos8, 0xC000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); penguin11->MirrorModeAngleOffset = 0x8000; FVector pos9 = { -2500.0f, 0.0f, -250.0f }; - auto penguin12 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos9, 0x4000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); + auto penguin12 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos9, 0x4000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); penguin12->MirrorModeAngleOffset = 0x8000; FVector pos10 = { -535.0f, 0.0f, 875.0f }; - auto penguin13 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos10, 0x8000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); + auto penguin13 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos10, 0x8000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); penguin13->MirrorModeAngleOffset = -0x4000; FVector pos11 = { -250.0f, 0.0f, 953.0f }; - auto penguin14 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject(new OPenguin(pos11, 0x9000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); + auto penguin14 = reinterpret_cast<OPenguin*>(gWorldInstance.AddObject( + new OPenguin(pos11, 0x9000, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6))); penguin14->MirrorModeAngleOffset = -0x4000; if (gGamestate != CREDITS_SEQUENCE) { @@ -239,10 +252,11 @@ void SherbetLand::Render(struct UnkStruct_800DC5EC* arg0) { } void SherbetLand::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_sherbet_land_dl_9AE8)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_sherbet_land_dl_9AE8)); } -void SherbetLand::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { +void SherbetLand::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) { Mat4 matrix; gDPPipeSync(gDisplayListHead++); @@ -263,14 +277,14 @@ void SherbetLand::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCoun gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); // d_course_sherbet_land_packed_dl_2B48 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07002B48)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07002B48)); } gDPPipeSync(gDisplayListHead++); } void SherbetLand::CreditsSpawnActors() { // d_course_sherbet_land_packed_dl_1EB8 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001EB8), -0x4C, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001EB8), -0x4C, 0xFF, 0xFF, 0xFF); // d_course_sherbet_land_packed_dl_2308 - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002308), -0x6A, 0xFF, 0xFF, 0xFF); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07002308), -0x6A, 0xFF, 0xFF, 0xFF); } diff --git a/src/engine/courses/SherbetLand.h b/src/engine/courses/SherbetLand.h index eb62e2807..f57563405 100644 --- a/src/engine/courses/SherbetLand.h +++ b/src/engine/courses/SherbetLand.h @@ -4,33 +4,34 @@ #include "Course.h" extern "C" { - #include "assets/sherbet_land_vertices.h" - #include "assets/sherbet_land_displaylists.h" - #include "assets/sherbet_land_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture sherbet_land_textures[]; +#include "assets/sherbet_land_vertices.h" +#include "assets/sherbet_land_displaylists.h" +#include "assets/sherbet_land_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture sherbet_land_textures[]; } class SherbetLand : public Course { -public: - virtual ~SherbetLand() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~SherbetLand() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit SherbetLand(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual f32 GetWaterLevel(FVector pos, Collision* collision) override; virtual void BeginPlay() override; virtual void UpdateCourseObjects() override; virtual void RenderCourseObjects(s32 cameraId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; - virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; + virtual void RenderCredits() override; + virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, + uint16_t playerDirection) override; virtual void CreditsSpawnActors() override; }; diff --git a/src/engine/courses/Skyscraper.cpp b/src/engine/courses/Skyscraper.cpp index 4c165a787..99e73942a 100644 --- a/src/engine/courses/Skyscraper.cpp +++ b/src/engine/courses/Skyscraper.cpp @@ -9,27 +9,27 @@ #include "assets/skyscraper_data.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - extern const char *skyscraper_dls[]; - extern s16 currentScreenSection; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +extern const char* skyscraper_dls[]; +extern s16 currentScreenSection; } const course_texture skyscraper_textures[] = { @@ -87,7 +87,7 @@ Skyscraper::Skyscraper() { Props.NearPersp = 2.0f; Props.FarPersp = 2700.0f; - Props.PathSizes = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -122,14 +122,14 @@ Skyscraper::Skyscraper() { Props.Clouds = NULL; // no clouds Props.CloudList = NULL; - Props.Skybox.TopRight = {0, 0, 0}; - Props.Skybox.BottomRight = {0, 0, 0}; - Props.Skybox.BottomLeft = {0, 0, 0}; - Props.Skybox.TopLeft = {0, 0, 0}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 0, 0, 0 }; + Props.Skybox.BottomRight = { 0, 0, 0 }; + Props.Skybox.BottomLeft = { 0, 0, 0 }; + Props.Skybox.TopLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_BATTLE_ARENAS; Props.WaterLevel = -480.0f; @@ -139,9 +139,9 @@ void Skyscraper::Load() { Course::Load(); // d_course_skyscraper_packed_dl_1110 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07001110), 1); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07001110), 1); // d_course_skyscraper_packed_dl_258 - generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000258), 1); + generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000258), 1); func_80295C6C(); } @@ -149,7 +149,7 @@ void Skyscraper::LoadTextures() { } void Skyscraper::BeginPlay() { - spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_skyscraper_item_box_spawns)); + spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_skyscraper_item_box_spawns)); if (gModeSelection == VERSUS) { FVector pos = { 0, 0, 0 }; @@ -164,13 +164,17 @@ void Skyscraper::BeginPlay() { } } -void Skyscraper::InitCourseObjects() {} +void Skyscraper::InitCourseObjects() { +} -void Skyscraper::SomeSounds() {} +void Skyscraper::SomeSounds() { +} -void Skyscraper::WhatDoesThisDo(Player* player, int8_t playerId) {} +void Skyscraper::WhatDoesThisDo(Player* player, int8_t playerId) { +} -void Skyscraper::WhatDoesThisDoAI(Player* player, int8_t playerId) {} +void Skyscraper::WhatDoesThisDoAI(Player* player, int8_t playerId) { +} void Skyscraper::Render(struct UnkStruct_800DC5EC* arg0) { set_track_light_direction(D_800DC610, D_802B87D4, 0, 1); @@ -178,27 +182,29 @@ void Skyscraper::Render(struct UnkStruct_800DC5EC* arg0) { gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); // d_course_skyscraper_packed_dl_FE8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000FE8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000FE8))); // d_course_skyscraper_packed_dl_C60 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000C60))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000C60))); // d_course_skyscraper_packed_dl_B70 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000B70))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000B70))); // d_course_skyscraper_packed_dl_6B8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x070006B8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x070006B8))); // d_course_skyscraper_packed_dl_570 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000570))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000570))); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_skyscraper_packed_dl_10C8 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x070010C8))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x070010C8))); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); // d_course_skyscraper_packed_dl_258 - gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000258))); + gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000258))); } -void Skyscraper::RenderCredits() {} +void Skyscraper::RenderCredits() { +} void Skyscraper::Waypoints(Player* player, int8_t playerId) { player->nearestWaypointId = 0; } -void Skyscraper::Destroy() { } +void Skyscraper::Destroy() { +} diff --git a/src/engine/courses/Skyscraper.h b/src/engine/courses/Skyscraper.h index ed6592121..122e649eb 100644 --- a/src/engine/courses/Skyscraper.h +++ b/src/engine/courses/Skyscraper.h @@ -4,36 +4,36 @@ #include "Course.h" extern "C" { - #include "assets/skyscraper_vertices.h" - #include "assets/skyscraper_displaylists.h" - #include "assets/skyscraper_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture skyscraper_textures[]; +#include "assets/skyscraper_vertices.h" +#include "assets/skyscraper_displaylists.h" +#include "assets/skyscraper_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture skyscraper_textures[]; } class Skyscraper : public Course { -public: - virtual ~Skyscraper() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~Skyscraper() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit Skyscraper(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; - //virtual void InitClouds() override; + // virtual void InitClouds() override; virtual void InitCourseObjects() override; virtual void SomeSounds() override; virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void Destroy() override; }; diff --git a/src/engine/courses/TestCourse.cpp b/src/engine/courses/TestCourse.cpp index eebaee17a..fa1c72303 100644 --- a/src/engine/courses/TestCourse.cpp +++ b/src/engine/courses/TestCourse.cpp @@ -31,31 +31,31 @@ #include "engine/objects/GrandPrixBalloons.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course.h" - extern Gfx test_course_dls[]; - extern Vtx mario_Plane_001_mesh_vtx_1[]; - extern Gfx mario_Plane_001_mesh[]; - extern TrackWaypoint test_course_path[]; - extern TrackSections test_course_addr[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course.h" +extern Gfx test_course_dls[]; +extern Vtx mario_Plane_001_mesh_vtx_1[]; +extern Gfx mario_Plane_001_mesh[]; +extern TrackWaypoint test_course_path[]; +extern TrackSections test_course_addr[]; } TestCourse::TestCourse() { @@ -71,7 +71,7 @@ TestCourse::TestCourse() { Props.Minimap.PlayerScaleFactor = 0.022f; Props.Minimap.FinishlineX = 0; Props.Minimap.FinishlineY = 0; - Props.Minimap.Colour = {255, 255, 255}; + Props.Minimap.Colour = { 255, 255, 255 }; Id = "mk:test_course"; @@ -87,7 +87,7 @@ TestCourse::TestCourse() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {51, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 51, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -123,14 +123,14 @@ TestCourse::TestCourse() { Props.Clouds = gKalimariDesertClouds; Props.CloudList = gLuigiRacewayClouds; - Props.Skybox.TopRight = {120, 140, 188}; - Props.Skybox.BottomRight = {216, 232, 248}; - Props.Skybox.BottomLeft = {216, 232, 248}; - Props.Skybox.TopLeft = {40, 184, 208}; - Props.Skybox.FloorTopRight = {0, 0, 0}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {0, 0, 0}; + Props.Skybox.TopRight = { 120, 140, 188 }; + Props.Skybox.BottomRight = { 216, 232, 248 }; + Props.Skybox.BottomLeft = { 216, 232, 248 }; + Props.Skybox.TopLeft = { 40, 184, 208 }; + Props.Skybox.FloorTopRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 0, 0, 0 }; Props.Sequence = MusicSeq::MUSIC_SEQ_RACEWAYS_WARIO_STADIUM; } @@ -139,7 +139,7 @@ void TestCourse::Load() { generate_collision_mesh_with_defaults(mario_Plane_001_mesh); - parse_course_displaylists((TrackSections*)test_course_addr); + parse_course_displaylists((TrackSections*) test_course_addr); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -158,58 +158,58 @@ void TestCourse::LoadTextures() { } Path2D test_course_path2D[] = { - { 0, 0}, - { 0, -100}, - { 0, -200}, - { 0, -300}, - { 0, -400}, - { 0, -500}, - { 0, -600}, - { 0, -700}, - { 0, -800}, - { 0, -900}, - { 0, -1000}, - { 0, -1096}, // Main point 1 - { 100, -1090}, - { 200, -1085}, - { 300, -1080}, - { 400, -1075}, - { 500, -1072}, // Curve begins to smooth here - { 600, -1068}, - { 700, -1065}, - { 800, -1063}, - { 900, -1061}, - { 984, -1060}, // Main point 2 - { 990, -900}, - { 995, -800}, - { 997, -700}, - { 998, -600}, - { 999, -500}, - { 999, -400}, - { 999, -300}, - { 999, -200}, - { 999, -100}, - { 999, 0}, - { 999, 100}, - { 999, 200}, - { 999, 300}, - { 999, 400}, - { 999, 500}, - { 999, 600}, - { 999, 700}, - { 999, 800}, - { 999, 900}, - { 999, 940}, // Main point 3 - { 900, 945}, - { 800, 945}, - { 700, 947}, - { 600, 948}, - { 500, 949}, - { 400, 949}, - { 300, 949}, - { 200, 950}, - { 100, 950}, - { 0, 950}, // Main point 4 + { 0, 0 }, + { 0, -100 }, + { 0, -200 }, + { 0, -300 }, + { 0, -400 }, + { 0, -500 }, + { 0, -600 }, + { 0, -700 }, + { 0, -800 }, + { 0, -900 }, + { 0, -1000 }, + { 0, -1096 }, // Main point 1 + { 100, -1090 }, + { 200, -1085 }, + { 300, -1080 }, + { 400, -1075 }, + { 500, -1072 }, // Curve begins to smooth here + { 600, -1068 }, + { 700, -1065 }, + { 800, -1063 }, + { 900, -1061 }, + { 984, -1060 }, // Main point 2 + { 990, -900 }, + { 995, -800 }, + { 997, -700 }, + { 998, -600 }, + { 999, -500 }, + { 999, -400 }, + { 999, -300 }, + { 999, -200 }, + { 999, -100 }, + { 999, 0 }, + { 999, 100 }, + { 999, 200 }, + { 999, 300 }, + { 999, 400 }, + { 999, 500 }, + { 999, 600 }, + { 999, 700 }, + { 999, 800 }, + { 999, 900 }, + { 999, 940 }, // Main point 3 + { 900, 945 }, + { 800, 945 }, + { 700, 947 }, + { 600, 948 }, + { 500, 949 }, + { 400, 949 }, + { 300, 949 }, + { 200, 950 }, + { 100, 950 }, + { 0, 950 }, // Main point 4 // End of path { -32768, -32768 } // Terminator @@ -217,33 +217,24 @@ Path2D test_course_path2D[] = { void TestCourse::BeginPlay() { struct ActorSpawnData itemboxes[] = { - { 200, 1500, 200 , 0}, - { 350, 2500, 300 , 1}, - { 400, 2000, 350 , 2}, - { 40, 0, -800, 0}, - { -40, 0, -800, 0}, - { 0, 0, -800, 0}, - { 999, 6, 482, 0}, - { 1064, 8, 275, {0}}, - { 1028, 5, -39 , {0}}, - { 320, 0, 1020, {0}}, - { 293, 0, 950, {0}}, - {{ -32768, 0, 0 }, {0}}, + { 200, 1500, 200, 0 }, { 350, 2500, 300, 1 }, { 400, 2000, 350, 2 }, { 40, 0, -800, 0 }, + { -40, 0, -800, 0 }, { 0, 0, -800, 0 }, { 999, 6, 482, 0 }, { 1064, 8, 275, { 0 } }, + { 1028, 5, -39, { 0 } }, { 320, 0, 1020, { 0 } }, { 293, 0, 950, { 0 } }, { { -32768, 0, 0 }, { 0 } }, }; struct ActorSpawnData rocks[] = { - {{ 200, 1500, 200 }, {0}}, - {{ 350, 2500, 300 }, {1}}, - {{ 400, 2000, 350 }, {2}}, - {{ -32768, 0, 0 }, {0}}, + { { 200, 1500, 200 }, { 0 } }, + { { 350, 2500, 300 }, { 1 } }, + { { 400, 2000, 350 }, { 2 } }, + { { -32768, 0, 0 }, { 0 } }, }; spawn_all_item_boxes(itemboxes); spawn_falling_rocks(rocks); - Vec3f test = {-100, 0, -150}; - Vec3s rot = {0, 0, 0}; - Vec3f vel = {0, 0, 0}; + Vec3f test = { -100, 0, -150 }; + Vec3s rot = { 0, 0, 0 }; + Vec3f vel = { 0, 0, 0 }; add_actor_to_empty_slot(test, rot, vel, ACTOR_TREE_MARIO_RACEWAY); @@ -253,15 +244,15 @@ void TestCourse::BeginPlay() { Vec3s rotation = { 0, 0, 0 }; vec3f_set(position, 50.0f, 2.0f, 50.0f); - Vec3f crossingPos = {0, 2, 0}; + Vec3f crossingPos = { 0, 2, 0 }; uintptr_t* crossing1 = (uintptr_t*) gWorldInstance.AddCrossing(crossingPos, 0, 2, 900.0f, 650.0f); position[0] *= gCourseDirection; - rrxing = (struct RailroadCrossing*) GET_ACTOR(add_actor_to_empty_slot(position, rotation, velocity, - ACTOR_RAILROAD_CROSSING)); + rrxing = (struct RailroadCrossing*) GET_ACTOR( + add_actor_to_empty_slot(position, rotation, velocity, ACTOR_RAILROAD_CROSSING)); rrxing->crossingTrigger = crossing1; - Vec3f pos = {0, 80, 0}; + Vec3f pos = { 0, 80, 0 }; // gWorldInstance.AddActor(new ACloud(pos)); // gWorldInstance.AddActor(new OSeagull(0, pos)); @@ -270,24 +261,25 @@ void TestCourse::BeginPlay() { // gWorldInstance.AddActor(new OSeagull(3, pos)); // gWorldInstance.AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10))); // gWorldInstance.AddObject(new OTrophy(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH)); - //gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0))); - //gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING)); + // gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0))); + // gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, + // OTrashBin::Behaviour::MUNCHING)); - //gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9)); - //gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400)); -// gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f))); + // gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9)); + // gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400)); + // gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f))); - //gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200))); -// gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH)); + // gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200))); + // gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH)); -// gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50))); + // gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50))); gVehicle2DWaypoint = test_course_path2D; gVehicle2DWaypointLength = 53; D_80162EB0 = spawn_actor_on_surface(test_course_path2D[0].x, 2000.0f, test_course_path2D[0].z); - //gWorldInstance.AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 0); - //gWorldInstance.AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 8); + // gWorldInstance.AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 0); + // gWorldInstance.AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 8); FVector pos2 = { 0, 0, 0 }; @@ -300,8 +292,7 @@ void TestCourse::BeginPlay() { } void TestCourse::WhatDoesThisDo(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { func_800CA288(playerId, 0x55); } @@ -315,8 +306,7 @@ void TestCourse::WhatDoesThisDo(Player* player, int8_t playerId) { } void TestCourse::WhatDoesThisDoAI(Player* player, int8_t playerId) { - if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && - ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { + if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) { if (D_80165300[playerId] != 1) { func_800CA2E4(playerId, 0x55); } @@ -346,4 +336,4 @@ void TestCourse::Render(struct UnkStruct_800DC5EC* arg0) { bool TestCourse::IsMod() { return true; -}
\ No newline at end of file +} diff --git a/src/engine/courses/TestCourse.h b/src/engine/courses/TestCourse.h index d44e0a266..a27044a9d 100644 --- a/src/engine/courses/TestCourse.h +++ b/src/engine/courses/TestCourse.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "mario_raceway_vertices.h" - #include "mario_raceway_displaylists.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - #include "mario_raceway_data.h" - extern const course_texture test_course_textures[]; +#include "mario_raceway_vertices.h" +#include "mario_raceway_displaylists.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +#include "mario_raceway_data.h" +extern const course_texture test_course_textures[]; } class TestCourse : public Course { -public: - virtual ~TestCourse() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~TestCourse() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit TestCourse(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; diff --git a/src/engine/courses/ToadsTurnpike.cpp b/src/engine/courses/ToadsTurnpike.cpp index 867fedf25..6d69022c1 100644 --- a/src/engine/courses/ToadsTurnpike.cpp +++ b/src/engine/courses/ToadsTurnpike.cpp @@ -16,30 +16,30 @@ #include "engine/vehicles/Utils.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "code_80086E70.h" - #include "course.h" - extern const char *d_course_toads_turnpike_dl_list[]; - extern s16 currentScreenSection; - extern s8 gPlayerCount; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "code_80086E70.h" +#include "course.h" +extern const char* d_course_toads_turnpike_dl_list[]; +extern s16 currentScreenSection; +extern s8 gPlayerCount; } const course_texture toads_turnpike_textures[] = { @@ -93,7 +93,7 @@ ToadsTurnpike::ToadsTurnpike() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {1000, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 1000, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -115,12 +115,12 @@ ToadsTurnpike::ToadsTurnpike() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_toads_turnpike_unknown_waypoints); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_toads_turnpike_unknown_waypoints); Props.PathTable[1] = NULL; Props.PathTable[2] = NULL; Props.PathTable[3] = NULL; - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_toads_turnpike_track_waypoints); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_toads_turnpike_track_waypoints); Props.PathTable2[1] = NULL; Props.PathTable2[2] = NULL; Props.PathTable2[3] = NULL; @@ -135,14 +135,14 @@ ToadsTurnpike::ToadsTurnpike() { this->FinishlineSpawnPoint = finish; - Props.Skybox.TopRight = {0, 2, 94}; - Props.Skybox.BottomRight = {209, 65, 23}; - Props.Skybox.BottomLeft = {209, 65, 23}; - Props.Skybox.TopLeft = {0, 2, 94}; - Props.Skybox.FloorTopRight = {209, 65, 23}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {209, 65, 23}; + Props.Skybox.TopRight = { 0, 2, 94 }; + Props.Skybox.BottomRight = { 209, 65, 23 }; + Props.Skybox.BottomLeft = { 209, 65, 23 }; + Props.Skybox.TopLeft = { 0, 2, 94 }; + Props.Skybox.FloorTopRight = { 209, 65, 23 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 209, 65, 23 }; Props.Sequence = MusicSeq::MUSIC_SEQ_TOADS_TURNPIKE; } @@ -154,7 +154,7 @@ void ToadsTurnpike::Load() { D_801625F0 = 4; D_802B87B0 = 993; D_802B87B4 = 1000; - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_toads_turnpike_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_toads_turnpike_addr)); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -163,7 +163,7 @@ void ToadsTurnpike::LoadTextures() { } void ToadsTurnpike::BeginPlay() { - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_toads_turnpike_item_box_spawns)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_toads_turnpike_item_box_spawns)); if (gGamestate != CREDITS_SEQUENCE) { uint32_t waypoint; @@ -182,7 +182,7 @@ void ToadsTurnpike::BeginPlay() { for (size_t i = 0; i < _numTrucks; i++) { waypoint = CalculateWaypointDistribution(i, _numTrucks, gWaypointCountByPathIndex[0], 0); - gWorldInstance.AddActor(new ATruck(a, b, &D_80164550[0][0], waypoint)); + gWorldInstance.AddActor(new ATruck(a, b, &D_80164550[0][0], waypoint)); } for (size_t i = 0; i < _numBuses; i++) { @@ -221,7 +221,8 @@ void ToadsTurnpike::UpdateClouds(s32 sp1C, Camera* camera) { update_stars(sp1C, camera, this->Props.CloudList); } -void ToadsTurnpike::SomeSounds() {} +void ToadsTurnpike::SomeSounds() { +} void ToadsTurnpike::WhatDoesThisDo(Player* player, int8_t playerId) { if ((player->type & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE) { @@ -268,17 +269,18 @@ void ToadsTurnpike::Render(struct UnkStruct_800DC5EC* arg0) { gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); // d_course_toads_turnpike_packed_dl_0 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07000000)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07000000)); // d_course_toads_turnpike_packed_dl_68 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07000068)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07000068)); // d_course_toads_turnpike_packed_dl_D8 - gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x070000D8)); + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x070000D8)); gSPClearGeometryMode(gDisplayListHead++, G_FOG); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); } void ToadsTurnpike::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_toads_turnpike_dl_23930)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_toads_turnpike_dl_23930)); } -void ToadsTurnpike::Destroy() { } +void ToadsTurnpike::Destroy() { +} diff --git a/src/engine/courses/ToadsTurnpike.h b/src/engine/courses/ToadsTurnpike.h index de145849d..6358097b3 100644 --- a/src/engine/courses/ToadsTurnpike.h +++ b/src/engine/courses/ToadsTurnpike.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/toads_turnpike_vertices.h" - #include "assets/toads_turnpike_displaylists.h" - #include "assets/toads_turnpike_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture toads_turnpike_textures[]; +#include "assets/toads_turnpike_vertices.h" +#include "assets/toads_turnpike_displaylists.h" +#include "assets/toads_turnpike_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture toads_turnpike_textures[]; } class ToadsTurnpike : public Course { -public: - virtual ~ToadsTurnpike() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~ToadsTurnpike() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit ToadsTurnpike(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -33,9 +33,10 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void Destroy() override; -private: + + private: size_t _numTrucks = 7; size_t _numBuses = 7; size_t _numTankerTrucks = 7; diff --git a/src/engine/courses/YoshiValley.cpp b/src/engine/courses/YoshiValley.cpp index 5fbcbea69..a5de1e86f 100644 --- a/src/engine/courses/YoshiValley.cpp +++ b/src/engine/courses/YoshiValley.cpp @@ -14,27 +14,27 @@ #include "assets/boo_frames.h" extern "C" { - #include "main.h" - #include "camera.h" - #include "course_offsets.h" - #include "code_800029B0.h" - #include "render_courses.h" - #include "code_8006E9C0.h" - #include "code_80057C60.h" - #include "defines.h" - #include "math_util.h" - #include "external.h" - #include "code_80005FD0.h" - #include "spawn_players.h" - #include "render_objects.h" - #include "assets/common_data.h" - #include "save.h" - #include "staff_ghosts.h" - #include "actors.h" - #include "collision.h" - #include "memory.h" - #include "course.h" - extern const char *d_course_yoshi_valley_dl_list[]; +#include "main.h" +#include "camera.h" +#include "course_offsets.h" +#include "code_800029B0.h" +#include "render_courses.h" +#include "code_8006E9C0.h" +#include "code_80057C60.h" +#include "defines.h" +#include "math_util.h" +#include "external.h" +#include "code_80005FD0.h" +#include "spawn_players.h" +#include "render_objects.h" +#include "assets/common_data.h" +#include "save.h" +#include "staff_ghosts.h" +#include "actors.h" +#include "collision.h" +#include "memory.h" +#include "course.h" +extern const char* d_course_yoshi_valley_dl_list[]; } const course_texture yoshi_valley_textures[] = { @@ -82,7 +82,7 @@ YoshiValley::YoshiValley() { Props.NearPersp = 9.0f; Props.FarPersp = 4500.0f; - Props.PathSizes = {0x02B2, 0x02A8, 0x02B2, 0x0320, 1, 0, 0, 0, 0, 0, 0}; + Props.PathSizes = { 0x02B2, 0x02A8, 0x02B2, 0x0320, 1, 0, 0, 0, 0, 0, 0 }; Props.D_0D009418[0] = 4.1666665f; Props.D_0D009418[1] = 5.5833334f; @@ -104,28 +104,28 @@ YoshiValley::YoshiValley() { Props.D_0D009808[2] = 5.75f; Props.D_0D009808[3] = 6.3333334f; - Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints); - Props.PathTable[1] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints_2); - Props.PathTable[2] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints_3); - Props.PathTable[3] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints_4); + Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints); + Props.PathTable[1] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints_2); + Props.PathTable[2] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints_3); + Props.PathTable[3] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_unknown_waypoints_4); - Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints); - Props.PathTable2[1] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints_2); - Props.PathTable2[2] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints_3); - Props.PathTable2[3] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints_4); + Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints); + Props.PathTable2[1] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints_2); + Props.PathTable2[2] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints_3); + Props.PathTable2[3] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_yoshi_valley_track_waypoints_4); Props.CloudTexture = (u8*) LOAD_ASSET_RAW(gTextureExhaust0); Props.Clouds = gYoshiValleyMooMooFarmClouds; Props.CloudList = gYoshiValleyMooMooFarmClouds; - Props.Skybox.TopRight = {113, 70, 255}; - Props.Skybox.BottomRight = {255, 184, 99}; - Props.Skybox.BottomLeft = {255, 184, 99}; - Props.Skybox.TopLeft = {113, 70, 255}; - Props.Skybox.FloorTopRight = {95, 40, 15}; - Props.Skybox.FloorBottomRight = {0, 0, 0}; - Props.Skybox.FloorBottomLeft = {0, 0, 0}; - Props.Skybox.FloorTopLeft = {95, 40, 15}; + Props.Skybox.TopRight = { 113, 70, 255 }; + Props.Skybox.BottomRight = { 255, 184, 99 }; + Props.Skybox.BottomLeft = { 255, 184, 99 }; + Props.Skybox.TopLeft = { 113, 70, 255 }; + Props.Skybox.FloorTopRight = { 95, 40, 15 }; + Props.Skybox.FloorBottomRight = { 0, 0, 0 }; + Props.Skybox.FloorBottomLeft = { 0, 0, 0 }; + Props.Skybox.FloorTopLeft = { 95, 40, 15 }; Props.Sequence = MusicSeq::MUSIC_SEQ_MOO_MOO_FARM_YOSHI_VALLEY; } @@ -134,7 +134,7 @@ void YoshiValley::Load() { Lights1 lights4 = gdSPDefLights1(100, 100, 100, 255, 254, 254, 0, 0, 120); set_track_light_direction(&lights4, -0x38F0, 0x1C70, 1); - parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_yoshi_valley_addr)); + parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_yoshi_valley_addr)); func_80295C6C(); Props.WaterLevel = gCourseMinY - 10.0f; } @@ -148,8 +148,8 @@ void YoshiValley::BeginPlay() { Vec3f velocity = { 0.0f, 0.0f, 0.0f }; Vec3s rotation = { 0, 0, 0 }; - spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_yoshi_valley_tree_spawn)); - spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_yoshi_valley_item_box_spawns)); + spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_yoshi_valley_tree_spawn)); + spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_yoshi_valley_item_box_spawns)); vec3f_set(position, -2300.0f, 0.0f, 634.0f); position[0] *= gCourseDirection; add_actor_to_empty_slot(position, rotation, velocity, ACTOR_YOSHI_EGG); @@ -212,9 +212,11 @@ void YoshiValley::RenderCourseObjects(s32 cameraId) { void YoshiValley::SomeSounds() { } -void YoshiValley::WhatDoesThisDo(Player* player, int8_t playerId) {} +void YoshiValley::WhatDoesThisDo(Player* player, int8_t playerId) { +} -void YoshiValley::WhatDoesThisDoAI(Player* player, int8_t playerId) {} +void YoshiValley::WhatDoesThisDoAI(Player* player, int8_t playerId) { +} void YoshiValley::Render(struct UnkStruct_800DC5EC* arg0) { gDPPipeSync(gDisplayListHead++); @@ -226,14 +228,15 @@ void YoshiValley::Render(struct UnkStruct_800DC5EC* arg0) { } void YoshiValley::RenderCredits() { - gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_yoshi_valley_dl_18020)); + gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_yoshi_valley_dl_18020)); } void YoshiValley::Waypoints(Player* player, int8_t playerId) { player->nearestWaypointId = gCopyNearestWaypointByPlayerId[playerId]; } -void YoshiValley::ScrollingTextures() {} +void YoshiValley::ScrollingTextures() { +} void YoshiValley::CreditsSpawnActors() { Vec3f position; @@ -245,4 +248,5 @@ void YoshiValley::CreditsSpawnActors() { add_actor_to_empty_slot(position, rotation, velocity, ACTOR_YOSHI_EGG); } -void YoshiValley::Destroy() {} +void YoshiValley::Destroy() { +} diff --git a/src/engine/courses/YoshiValley.h b/src/engine/courses/YoshiValley.h index b4ec8d442..92c714602 100644 --- a/src/engine/courses/YoshiValley.h +++ b/src/engine/courses/YoshiValley.h @@ -4,26 +4,26 @@ #include "Course.h" extern "C" { - #include "assets/yoshi_valley_vertices.h" - #include "assets/yoshi_valley_displaylists.h" - #include "assets/yoshi_valley_data.h" - #include "course_offsets.h" - #include "camera.h" - #include "data/some_data.h" - #include "objects.h" - #include "path_spawn_metadata.h" - extern const course_texture yoshi_valley_textures[]; +#include "assets/yoshi_valley_vertices.h" +#include "assets/yoshi_valley_displaylists.h" +#include "assets/yoshi_valley_data.h" +#include "course_offsets.h" +#include "camera.h" +#include "data/some_data.h" +#include "objects.h" +#include "path_spawn_metadata.h" +extern const course_texture yoshi_valley_textures[]; } class YoshiValley : public Course { -public: - virtual ~YoshiValley() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~YoshiValley() = default; // Virtual destructor for proper cleanup in derived classes // Constructor explicit YoshiValley(); -// virtual void Load(const char* courseVtx, -// course_texture* textures, const char* displaylists, size_t dlSize); + // virtual void Load(const char* courseVtx, + // course_texture* textures, const char* displaylists, size_t dlSize); virtual void Load() override; virtual void LoadTextures() override; virtual void BeginPlay() override; @@ -34,7 +34,7 @@ public: virtual void WhatDoesThisDo(Player* player, int8_t playerId) override; virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override; virtual void Render(struct UnkStruct_800DC5EC*) override; - virtual void RenderCredits() override; + virtual void RenderCredits() override; virtual void ScrollingTextures() override; virtual void Waypoints(Player* player, int8_t playerId) override; virtual void CreditsSpawnActors() override; diff --git a/src/engine/editor/Collision.cpp b/src/engine/editor/Collision.cpp index bf62d6273..cf98ed82f 100644 --- a/src/engine/editor/Collision.cpp +++ b/src/engine/editor/Collision.cpp @@ -10,179 +10,183 @@ extern "C" { } namespace Editor { - void GenerateCollisionMesh(GameObject* object, Gfx* model, float scale) { - int8_t opcode; - uintptr_t lo; - uintptr_t hi; - - Gfx* ptr = model; - Vtx* vtx = NULL; - size_t i = 0; - bool run = true; - while (run) { - i++; - lo = ptr->words.w0; - hi = ptr->words.w1; - - opcode = (EDITOR_GFX_GET_OPCODE(lo) >> 24); - switch(opcode) { - case G_DL: - GenerateCollisionMesh(object, (Gfx*)hi, scale); - break; - case G_DL_OTR_HASH: - ptr++; - GenerateCollisionMesh(object, (Gfx*)ResourceGetDataByCrc(((uint64_t)(ptr->words.w0 << 32)) + ptr->words.w1), scale); - break; - case G_DL_OTR_FILEPATH: - // printf("otr filepath: %s\n", (const char*)hi); - GenerateCollisionMesh(object, (Gfx*)ResourceGetDataByName((const char*)hi), scale); - break; - case G_VTX: - vtx = (Vtx*)ptr->words.w1; - break; - case G_VTX_OTR_HASH: { +void GenerateCollisionMesh(GameObject* object, Gfx* model, float scale) { + int8_t opcode; + uintptr_t lo; + uintptr_t hi; + + Gfx* ptr = model; + Vtx* vtx = NULL; + size_t i = 0; + bool run = true; + while (run) { + i++; + lo = ptr->words.w0; + hi = ptr->words.w1; + + opcode = (EDITOR_GFX_GET_OPCODE(lo) >> 24); + switch (opcode) { + case G_DL: + GenerateCollisionMesh(object, (Gfx*) hi, scale); + break; + case G_DL_OTR_HASH: + ptr++; + GenerateCollisionMesh( + object, (Gfx*) ResourceGetDataByCrc(((uint64_t) (ptr->words.w0 << 32)) + ptr->words.w1), scale); + break; + case G_DL_OTR_FILEPATH: + // printf("otr filepath: %s\n", (const char*)hi); + GenerateCollisionMesh(object, (Gfx*) ResourceGetDataByName((const char*) hi), scale); + break; + case G_VTX: + vtx = (Vtx*) ptr->words.w1; + break; + case G_VTX_OTR_HASH: { + ptr++; + vtx = (Vtx*) ResourceGetDataByCrc(((uint64_t) (ptr->words.w0 << 32)) + ptr->words.w1); + break; + } + case G_VTX_OTR_FILEPATH: { + const char* filePath = (const char*) hi; + ptr++; + size_t vtxDataOff = ptr->words.w1 & 0xFFFF; + vtx = ((Vtx*) ResourceGetDataByName(filePath)) + vtxDataOff; + break; + } + case G_TRI1: { + if (vtx == NULL) { ptr++; - vtx = (Vtx*)ResourceGetDataByCrc(((uint64_t)(ptr->words.w0 << 32)) + ptr->words.w1); - break; + continue; } - case G_VTX_OTR_FILEPATH: { - const char* filePath = (const char*)hi; + uint32_t v1 = ((hi & 0x00FF0000) >> 16) / 2; + uint32_t v2 = ((hi & 0x0000FF00) >> 8) / 2; + uint32_t v3 = (hi & 0x000000FF) / 2; + + FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); + FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); + FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); + + object->Triangles.push_back({ p1, p2, p3 }); + break; + } + case G_TRI1_OTR: { + if (vtx == NULL) { ptr++; - size_t vtxDataOff = ptr->words.w1 & 0xFFFF; - vtx = ( (Vtx*)ResourceGetDataByName(filePath) ) + vtxDataOff; - break; + continue; } - case G_TRI1: { - if (vtx == NULL) { - ptr++; - continue; - } - uint32_t v1 = ((hi & 0x00FF0000) >> 16) / 2; - uint32_t v2 = ((hi & 0x0000FF00) >> 8) / 2; - uint32_t v3 = (hi & 0x000000FF) / 2; - - FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); - FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); - FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); - - object->Triangles.push_back({p1, p2, p3}); - break; - } - case G_TRI1_OTR: { - if (vtx == NULL) { - ptr++; - continue; - } - // The shift values here are different than the above. No idea why. But it has to be this way. - uint32_t v1 = (lo & 0x0000FFFF); - uint32_t v2 = (hi >> 16); - uint32_t v3 = (hi & 0x0000FFFF); + // The shift values here are different than the above. No idea why. But it has to be this way. + uint32_t v1 = (lo & 0x0000FFFF); + uint32_t v2 = (hi >> 16); + uint32_t v3 = (hi & 0x0000FFFF); - FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); - FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); - FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); + FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); + FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); + FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); - object->Triangles.push_back({p1, p2, p3}); + object->Triangles.push_back({ p1, p2, p3 }); - break; - } - case G_TRI2: { - if (vtx == NULL) { - ptr++; - continue; - } - uint32_t v1 = ((lo & 0x00FF0000) >> 16) / 2; - uint32_t v2 = ((lo & 0x0000FF00) >> 8) / 2; - uint32_t v3 = (lo & 0x000000FF) / 2; - - // This is actually triangle 2; vert 1,2,3. - uint32_t v4 = ((hi & 0x00FF0000) >> 16) / 2; - uint32_t v5 = ((hi & 0x0000FF00) >> 8) / 2; - uint32_t v6 = (hi & 0x000000FF) / 2; - - FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); - FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); - FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); - - FVector p4 = FVector(vtx[v4].v.ob[0], vtx[v4].v.ob[1], vtx[v4].v.ob[2]); - FVector p5 = FVector(vtx[v5].v.ob[0], vtx[v5].v.ob[1], vtx[v5].v.ob[2]); - FVector p6 = FVector(vtx[v6].v.ob[0], vtx[v6].v.ob[1], vtx[v6].v.ob[2]); - - object->Triangles.push_back({p1, p2, p3}); - object->Triangles.push_back({p4, p5, p6}); - break; + break; + } + case G_TRI2: { + if (vtx == NULL) { + ptr++; + continue; } - case G_QUAD: { - if (vtx == NULL) { - ptr++; - continue; - } - uint32_t v1 = ((hi & 0x00FF0000) >> 16) / 2; - uint32_t v2 = ((hi & 0x0000FF00) >> 8) / 2; - uint32_t v3 = (hi & 0x000000FF) / 2; - uint32_t v4 = ((hi & 0xFF000000) >> 24) / 2; - - FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); - FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); - FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); - FVector p4 = FVector(vtx[v4].v.ob[0], vtx[v4].v.ob[1], vtx[v4].v.ob[2]); - - object->Triangles.push_back({p1, p2, p3}); - object->Triangles.push_back({p1, p3, p4}); - break; + uint32_t v1 = ((lo & 0x00FF0000) >> 16) / 2; + uint32_t v2 = ((lo & 0x0000FF00) >> 8) / 2; + uint32_t v3 = (lo & 0x000000FF) / 2; + + // This is actually triangle 2; vert 1,2,3. + uint32_t v4 = ((hi & 0x00FF0000) >> 16) / 2; + uint32_t v5 = ((hi & 0x0000FF00) >> 8) / 2; + uint32_t v6 = (hi & 0x000000FF) / 2; + + FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); + FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); + FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); + + FVector p4 = FVector(vtx[v4].v.ob[0], vtx[v4].v.ob[1], vtx[v4].v.ob[2]); + FVector p5 = FVector(vtx[v5].v.ob[0], vtx[v5].v.ob[1], vtx[v5].v.ob[2]); + FVector p6 = FVector(vtx[v6].v.ob[0], vtx[v6].v.ob[1], vtx[v6].v.ob[2]); + + object->Triangles.push_back({ p1, p2, p3 }); + object->Triangles.push_back({ p4, p5, p6 }); + break; + } + case G_QUAD: { + if (vtx == NULL) { + ptr++; + continue; } - case G_ENDDL: - run = false; - break; + uint32_t v1 = ((hi & 0x00FF0000) >> 16) / 2; + uint32_t v2 = ((hi & 0x0000FF00) >> 8) / 2; + uint32_t v3 = (hi & 0x000000FF) / 2; + uint32_t v4 = ((hi & 0xFF000000) >> 24) / 2; + + FVector p1 = FVector(vtx[v1].v.ob[0], vtx[v1].v.ob[1], vtx[v1].v.ob[2]); + FVector p2 = FVector(vtx[v2].v.ob[0], vtx[v2].v.ob[1], vtx[v2].v.ob[2]); + FVector p3 = FVector(vtx[v3].v.ob[0], vtx[v3].v.ob[1], vtx[v3].v.ob[2]); + FVector p4 = FVector(vtx[v4].v.ob[0], vtx[v4].v.ob[1], vtx[v4].v.ob[2]); + + object->Triangles.push_back({ p1, p2, p3 }); + object->Triangles.push_back({ p1, p3, p4 }); + break; } - - ptr++; + case G_ENDDL: + run = false; + break; } + + ptr++; } +} - std::unordered_map<GameObject*, std::vector<Vtx>> gDebugObjVtxCache; +std::unordered_map<GameObject*, std::vector<Vtx>> gDebugObjVtxCache; - // Render a collision model - void DebugCollision(GameObject* obj, FVector pos, IRotator rot, FVector scale, const std::vector<Triangle>& triangles) { - if (obj == NULL || triangles.empty()) { - return; - } - - gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF); - - auto& vtxBuffer = gDebugObjVtxCache[obj]; - if (vtxBuffer.empty()) { - for (const auto& tri : triangles) { - vtxBuffer.push_back({(s16)tri.v0.x, (s16)tri.v0.y, (s16)tri.v0.z, 0, {0, 0}, {255, 255, 255, 255}}); - vtxBuffer.push_back({(s16)tri.v1.x, (s16)tri.v1.y, (s16)tri.v1.z, 0, {0, 0}, {255, 255, 255, 255}}); - vtxBuffer.push_back({(s16)tri.v2.x, (s16)tri.v2.y, (s16)tri.v2.z, 0, {0, 0}, {255, 255, 255, 255}}); - } - } - - // Setup matrix and render state - Mat4 mtx; - ApplyMatrixTransformations(mtx, pos, rot, scale); - Editor_AddMatrix(mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - gSPSetGeometryMode(gDisplayListHead++, G_FOG); - gDPPipeSync(gDisplayListHead++); - gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - gSPTexture(gDisplayListHead++, 0, 0, 0, G_TX_RENDERTILE, G_OFF); - gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - uint32_t hash = (uint32_t)((uintptr_t)obj ^ ((uintptr_t)obj >> 16)); - u8 r = (hash >> 16) & 0xFF; - u8 g = (hash >> 8) & 0xFF; - u8 b = hash & 0xFF; - - gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, 255); - - // Render triangles in batches of 3 - for (size_t i = 0; i + 2 < vtxBuffer.size(); i += 3) { - gSPVertex(gDisplayListHead++, (uintptr_t)&vtxBuffer[i], 3, 0); - gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0); +// Render a collision model +void DebugCollision(GameObject* obj, FVector pos, IRotator rot, FVector scale, const std::vector<Triangle>& triangles) { + if (obj == NULL || triangles.empty()) { + return; + } + + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF); + + auto& vtxBuffer = gDebugObjVtxCache[obj]; + if (vtxBuffer.empty()) { + for (const auto& tri : triangles) { + vtxBuffer.push_back( + { (s16) tri.v0.x, (s16) tri.v0.y, (s16) tri.v0.z, 0, { 0, 0 }, { 255, 255, 255, 255 } }); + vtxBuffer.push_back( + { (s16) tri.v1.x, (s16) tri.v1.y, (s16) tri.v1.z, 0, { 0, 0 }, { 255, 255, 255, 255 } }); + vtxBuffer.push_back( + { (s16) tri.v2.x, (s16) tri.v2.y, (s16) tri.v2.z, 0, { 0, 0 }, { 255, 255, 255, 255 } }); } + } - gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK | G_ZBUFFER); + // Setup matrix and render state + Mat4 mtx; + ApplyMatrixTransformations(mtx, pos, rot, scale); + Editor_AddMatrix(mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPSetGeometryMode(gDisplayListHead++, G_FOG); + gDPPipeSync(gDisplayListHead++); + gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gSPTexture(gDisplayListHead++, 0, 0, 0, G_TX_RENDERTILE, G_OFF); + gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + uint32_t hash = (uint32_t) ((uintptr_t) obj ^ ((uintptr_t) obj >> 16)); + u8 r = (hash >> 16) & 0xFF; + u8 g = (hash >> 8) & 0xFF; + u8 b = hash & 0xFF; + + gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, 255); + + // Render triangles in batches of 3 + for (size_t i = 0; i + 2 < vtxBuffer.size(); i += 3) { + gSPVertex(gDisplayListHead++, (uintptr_t) &vtxBuffer[i], 3, 0); + gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0); } + + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK | G_ZBUFFER); } +} // namespace Editor diff --git a/src/engine/editor/Collision.h b/src/engine/editor/Collision.h index ee8fef4af..2ba10b362 100644 --- a/src/engine/editor/Collision.h +++ b/src/engine/editor/Collision.h @@ -8,16 +8,16 @@ /** * @file Editor Collision - * - * Most actors use cylinder collision. + * + * Most actors use cylinder collision. * Proper vtx intersection tests are necessary for object picking - * + * * Therefore, generate a full collision mesh for actors */ #define EDITOR_GFX_GET_OPCODE(var) ((uint32_t) ((var) & 0xFF000000)) namespace Editor { - void GenerateCollisionMesh(GameObject* object, Gfx* model, float scale); - void DebugCollision(GameObject* obj, FVector pos, IRotator rot, FVector scale, const std::vector<Triangle>& triangles); -}
\ No newline at end of file +void GenerateCollisionMesh(GameObject* object, Gfx* model, float scale); +void DebugCollision(GameObject* obj, FVector pos, IRotator rot, FVector scale, const std::vector<Triangle>& triangles); +} // namespace Editor diff --git a/src/engine/editor/Editor.cpp b/src/engine/editor/Editor.cpp index 446da7487..e993199ff 100644 --- a/src/engine/editor/Editor.cpp +++ b/src/engine/editor/Editor.cpp @@ -24,143 +24,145 @@ extern "C" { } namespace Editor { - int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height, - uint8_t resize); +int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height, + uint8_t resize); - Editor::Editor() { - } +Editor::Editor() { +} - void Editor::Load() { - printf("Editor: Loading Editor...\n"); - eObjectPicker.Load(); - for (auto& object : eGameObjects) { - GenerateCollisionMesh(object, object->Model, 1.0f); - object->Load(); - } - printf("Editor: Loading Complete!\n"); +void Editor::Load() { + printf("Editor: Loading Editor...\n"); + eObjectPicker.Load(); + for (auto& object : eGameObjects) { + GenerateCollisionMesh(object, object->Model, 1.0f); + object->Load(); } + printf("Editor: Loading Complete!\n"); +} - void Editor::Tick() { +void Editor::Tick() { - if (CVarGetInteger("gEditorEnabled", 0) == true) { - bEditorEnabled = true; - } else { - bEditorEnabled = false; - return; - } + if (CVarGetInteger("gEditorEnabled", 0) == true) { + bEditorEnabled = true; + } else { + bEditorEnabled = false; + return; + } - auto wnd = GameEngine::Instance->context->GetWindow(); + auto wnd = GameEngine::Instance->context->GetWindow(); - static bool wasMouseDown = false; - static bool isDragging = false; - static Ship::Coords mouseStartPos; + static bool wasMouseDown = false; + static bool isDragging = false; + static Ship::Coords mouseStartPos; - Ship::Coords mousePos = wnd->GetMousePos(); - bool isMouseDown = wnd->GetMouseState(Ship::LUS_MOUSE_BTN_LEFT); + Ship::Coords mousePos = wnd->GetMousePos(); + bool isMouseDown = wnd->GetMouseState(Ship::LUS_MOUSE_BTN_LEFT); - eGameObjects.erase( - std::remove_if(eGameObjects.begin(), eGameObjects.end(), - [](const auto& object) { return (*object->DespawnFlag) == object->DespawnValue; }), - eGameObjects.end()); + eGameObjects.erase( + std::remove_if(eGameObjects.begin(), eGameObjects.end(), + [](const auto& object) { return (*object->DespawnFlag) == object->DespawnValue; }), + eGameObjects.end()); - if (isMouseDown && !wasMouseDown) { - // Mouse just pressed (Pressed state) - mouseStartPos = mousePos; - isDragging = false; - } + if (isMouseDown && !wasMouseDown) { + // Mouse just pressed (Pressed state) + mouseStartPos = mousePos; + isDragging = false; + } - if (isMouseDown) { - // Mouse is being held (Held state) - int dx = mousePos.x - mouseStartPos.x; - int dy = mousePos.y - mouseStartPos.y; - int dragThreshold = 5; // Adjust as needed - - if ((dx * dx + dy * dy) > (dragThreshold * dragThreshold)) { - // Squared distance check to avoid unnecessary sqrt() - isDragging = true; - eObjectPicker.DragHandle(); // Call drag logic - } - } + if (isMouseDown) { + // Mouse is being held (Held state) + int dx = mousePos.x - mouseStartPos.x; + int dy = mousePos.y - mouseStartPos.y; + int dragThreshold = 5; // Adjust as needed - if (!isMouseDown && wasMouseDown) { - // Mouse just released (Released state) - eObjectPicker.eGizmo.SelectedHandle = Gizmo::GizmoHandle::None; - eObjectPicker.eGizmo.ManipulationStart = true; - if (!isDragging) { - eObjectPicker.SelectObject(eGameObjects); - } + if ((dx * dx + dy * dy) > (dragThreshold * dragThreshold)) { + // Squared distance check to avoid unnecessary sqrt() + isDragging = true; + eObjectPicker.DragHandle(); // Call drag logic + } + } + if (!isMouseDown && wasMouseDown) { + // Mouse just released (Released state) + eObjectPicker.eGizmo.SelectedHandle = Gizmo::GizmoHandle::None; + eObjectPicker.eGizmo.ManipulationStart = true; + if (!isDragging) { + eObjectPicker.SelectObject(eGameObjects); } + } - wasMouseDown = isMouseDown; // Update previous state + wasMouseDown = isMouseDown; // Update previous state - eObjectPicker.Tick(); + eObjectPicker.Tick(); - for (auto& object : eGameObjects) { - object->Tick(); - } + for (auto& object : eGameObjects) { + object->Tick(); } +} - void Editor::Draw() { - if (!bEditorEnabled) { - return; - } - eObjectPicker.Draw(); - for (auto& object : eGameObjects) { - object->Draw(); - } +void Editor::Draw() { + if (!bEditorEnabled) { + return; } - - GameObject* Editor::AddObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, float collScale, GameObject::CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue) { - //printf("After AddObj: Pos(%f, %f, %f), Name: %s, Model: %s\n", - // pos->x, pos->y, pos->z, name, model); - if (model != nullptr) { - eGameObjects.push_back(new GameObject(name, pos, rot, scale, model, {}, collision, boundingBoxSize, despawnFlag, despawnValue)); - GenerateCollisionMesh(eGameObjects.back(), model, collScale); - } else { // to bounding box or sphere collision - eGameObjects.push_back(new GameObject(name, pos, rot, scale, model, {}, GameObject::CollisionType::BOUNDING_BOX, - 10.0f, despawnFlag, despawnValue)); - } - return eGameObjects.back(); + eObjectPicker.Draw(); + for (auto& object : eGameObjects) { + object->Draw(); } +} - void Editor::AddLight(const char* name, FVector* pos, s8* rot) { - eGameObjects.push_back(new LightObject(name, pos, rot)); +GameObject* Editor::AddObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, + float collScale, GameObject::CollisionType collision, float boundingBoxSize, + int32_t* despawnFlag, int32_t despawnValue) { + // printf("After AddObj: Pos(%f, %f, %f), Name: %s, Model: %s\n", + // pos->x, pos->y, pos->z, name, model); + if (model != nullptr) { + eGameObjects.push_back( + new GameObject(name, pos, rot, scale, model, {}, collision, boundingBoxSize, despawnFlag, despawnValue)); + GenerateCollisionMesh(eGameObjects.back(), model, collScale); + } else { // to bounding box or sphere collision + eGameObjects.push_back(new GameObject(name, pos, rot, scale, model, {}, GameObject::CollisionType::BOUNDING_BOX, + 10.0f, despawnFlag, despawnValue)); } + return eGameObjects.back(); +} - void Editor::ClearObjects() { - for (auto& obj : eGameObjects) { - delete obj; - } - eGameObjects.clear(); +void Editor::AddLight(const char* name, FVector* pos, s8* rot) { + eGameObjects.push_back(new LightObject(name, pos, rot)); +} + +void Editor::ClearObjects() { + for (auto& obj : eGameObjects) { + delete obj; } + eGameObjects.clear(); +} - void Editor::DeleteObject() { - GameObject* obj = eObjectPicker.eGizmo._selected; +void Editor::DeleteObject() { + GameObject* obj = eObjectPicker.eGizmo._selected; - if (obj) { - *obj->DespawnFlag = obj->DespawnValue; - obj = nullptr; - eObjectPicker._selected = nullptr; - } + if (obj) { + *obj->DespawnFlag = obj->DespawnValue; + obj = nullptr; + eObjectPicker._selected = nullptr; } +} - void Editor::ClearMatrixPool() { - EditorMatrix.clear(); - } +void Editor::ClearMatrixPool() { + EditorMatrix.clear(); +} - void Editor::SelectObjectFromSceneExplorer(GameObject* object) { - eObjectPicker._selected = object; - eObjectPicker.eGizmo.Enabled = true; - eObjectPicker.eGizmo.SetGizmoNoCursor(object); - } +void Editor::SelectObjectFromSceneExplorer(GameObject* object) { + eObjectPicker._selected = object; + eObjectPicker.eGizmo.Enabled = true; + eObjectPicker.eGizmo.SetGizmoNoCursor(object); +} - void Editor::SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 minY, s16 maxY) { - eObjectPicker.eGizmo.dimensions.MinX = minX + -1000; - eObjectPicker.eGizmo.dimensions.MaxX = maxX + 1000; - eObjectPicker.eGizmo.dimensions.MinY = minY + -100; - eObjectPicker.eGizmo.dimensions.MaxY = maxY + 500; - eObjectPicker.eGizmo.dimensions.MinZ = minZ + -1000; - eObjectPicker.eGizmo.dimensions.MaxZ = maxZ + 1000; - } +void Editor::SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 minY, s16 maxY) { + eObjectPicker.eGizmo.dimensions.MinX = minX + -1000; + eObjectPicker.eGizmo.dimensions.MaxX = maxX + 1000; + eObjectPicker.eGizmo.dimensions.MinY = minY + -100; + eObjectPicker.eGizmo.dimensions.MaxY = maxY + 500; + eObjectPicker.eGizmo.dimensions.MinZ = minZ + -1000; + eObjectPicker.eGizmo.dimensions.MaxZ = maxZ + 1000; } +} // namespace Editor diff --git a/src/engine/editor/Editor.h b/src/engine/editor/Editor.h index 759c59355..3b5602818 100644 --- a/src/engine/editor/Editor.h +++ b/src/engine/editor/Editor.h @@ -9,10 +9,10 @@ #include "ObjectPicker.h" namespace Editor { - class ObjectPicker; +class ObjectPicker; - class Editor { -public: +class Editor { + public: Editor(); ObjectPicker eObjectPicker; @@ -20,8 +20,10 @@ public: void Tick(); void Draw(); - void Load(); - GameObject* AddObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, float collScale, GameObject::CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue); + void Load(); + GameObject* AddObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, float collScale, + GameObject::CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, + int32_t despawnValue); void AddLight(const char* name, FVector* pos, s8* rot); void ClearObjects(); void RemoveObject(); @@ -31,7 +33,7 @@ public: void DeleteObject(); bool bEditorEnabled = false; -private: + private: bool _draw = false; Vec3f _ray; @@ -39,7 +41,7 @@ private: void Copy(MtxF* src, MtxF* dest); void Clear(MtxF* mf); }; -} +} // namespace Editor #endif void SetLevelDimensions(s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 minY, s16 maxY); diff --git a/src/engine/editor/EditorMath.cpp b/src/engine/editor/EditorMath.cpp index 44923e08e..69029c797 100644 --- a/src/engine/editor/EditorMath.cpp +++ b/src/engine/editor/EditorMath.cpp @@ -55,24 +55,26 @@ FVector ScreenRayTrace() { // Convert mouse to NDS screen coordinates float x = (2.0f * mouse.x) / width - 1.0f; // Normalized X: -1 to 1 float y = 1.0f - (2.0f * mouse.y) / height; // Normalized Y: -1 to 1 - float z = 1.0f; // z is typically 1.0 for the near plane + float z = 1.0f; // z is typically 1.0 for the near plane - FVector4 rayClip = {x, y, z, 1.0f}; + FVector4 rayClip = { x, y, z, 1.0f }; Mat4 perspMtx; u16 perspNorm; - guPerspectiveF(perspMtx, &perspNorm, gCameraZoom[0], OTRGetAspectRatio(), CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f); + guPerspectiveF(perspMtx, &perspNorm, gCameraZoom[0], OTRGetAspectRatio(), CM_GetProps()->NearPersp, + CM_GetProps()->FarPersp, 1.0f); Mat4 inversePerspMtx; - if (InverseMatrix((float*)&perspMtx, (float*)&inversePerspMtx) != 2) { - FVector4 rayEye = MultiplyMatrixVector(inversePerspMtx, (float*)&rayClip.x); + if (InverseMatrix((float*) &perspMtx, (float*) &inversePerspMtx) != 2) { + FVector4 rayEye = MultiplyMatrixVector(inversePerspMtx, (float*) &rayClip.x); Mat4 lookAtMtx; - guLookAtF(lookAtMtx, camera->pos[0], camera->pos[1], camera->pos[2], camera->lookAt[0], camera->lookAt[1], camera->lookAt[2], camera->up[0], camera->up[1], camera->up[2]); + guLookAtF(lookAtMtx, camera->pos[0], camera->pos[1], camera->pos[2], camera->lookAt[0], camera->lookAt[1], + camera->lookAt[2], camera->up[0], camera->up[1], camera->up[2]); Mat4 inverseViewMtx; - if (InverseMatrix((float*)&lookAtMtx, (float*)&inverseViewMtx[0][0]) != 2) { + if (InverseMatrix((float*) &lookAtMtx, (float*) &inverseViewMtx[0][0]) != 2) { rayEye.w = 0; - FVector4 invRayWor = MultiplyMatrixVector(inverseViewMtx, (float*)&rayEye.x); + FVector4 invRayWor = MultiplyMatrixVector(inverseViewMtx, (float*) &rayEye.x); FVector direction; direction = FVector(invRayWor.x, invRayWor.y, invRayWor.z); @@ -91,12 +93,17 @@ bool QueryCollisionRayActor(Vec3f rayOrigin, Vec3f rayDir, Vec3f actorMin, Vec3f float t1 = (actorMin[i] - rayOrigin[i]) / rayDir[i]; float t2 = (actorMax[i] - rayOrigin[i]) / rayDir[i]; - if (t1 > t2) { float temp = t1; t1 = t2; t2 = temp; } + if (t1 > t2) { + float temp = t1; + t1 = t2; + t2 = temp; + } tmin = fmax(tmin, t1); tmax = fmin(tmax, t2); - if (tmax < tmin) return false; // No intersection + if (tmax < tmin) + return false; // No intersection } else if (rayOrigin[i] < actorMin[i] || rayOrigin[i] > actorMax[i]) { return false; // Ray is outside the slab } @@ -112,7 +119,7 @@ FVector4 MultiplyMatrixVector(float matrix[4][4], float vector[4]) { for (int i = 0; i < 4; i++) { resultPtr[i] = 0; for (int j = 0; j < 4; j++) { - resultPtr[i] += matrix[j][i] * vector[j]; // Swap [i][j] → [j][i] for column order + resultPtr[i] += matrix[j][i] * vector[j]; // Swap [i][j] → [j][i] for column order } } return result; @@ -205,10 +212,10 @@ FVector TransformVecDirection(const FVector& dir, const float mtx[4][4]) { Ray RayToLocalSpace(MtxF mtx, const Ray& ray) { MtxF inverse; - if (InverseMatrix((float*)&mtx, (float*)&inverse) != 2) { - FVector localRayOrigin = TransformVecByMatrix(ray.Origin, (float(*)[4])&inverse); - FVector localRayDir = TransformVecDirection(ray.Direction, (float(*)[4])&inverse); - return Ray{localRayOrigin, localRayDir.Normalize()}; + if (InverseMatrix((float*) &mtx, (float*) &inverse) != 2) { + FVector localRayOrigin = TransformVecByMatrix(ray.Origin, (float(*)[4]) & inverse); + FVector localRayDir = TransformVecDirection(ray.Direction, (float(*)[4]) & inverse); + return Ray{ localRayOrigin, localRayDir.Normalize() }; } return Ray{}; // Fail. Return empty ray } @@ -284,7 +291,7 @@ std::optional<FVector> QueryHandleIntersection(MtxF mtx, Ray ray, const Triangle Ray localRay = RayToLocalSpace(mtx, ray); if (IntersectRayTriangle(localRay, tri, t)) { FVector localClickPosition = localRay.Origin + localRay.Direction * t; - FVector worldClickPosition = TransformVecByMatrix(localClickPosition, (float(*)[4])&mtx); + FVector worldClickPosition = TransformVecByMatrix(localClickPosition, (float(*)[4]) & mtx); return worldClickPosition; // Stop checking objects if we selected a Gizmo handle } @@ -327,7 +334,8 @@ bool IntersectRaySphere(const Ray& ray, const FVector& sphereCenter, float radiu return false; // Sphere is behind the ray origin } -// bool FindClosestObject(const Ray& ray, const std::vector<GameObject*>& objects, GameObject* outObject, float& outDistance) { +// bool FindClosestObject(const Ray& ray, const std::vector<GameObject*>& objects, GameObject* outObject, float& +// outDistance) { // float closestDist = std::numeric_limits<float>::max(); // bool found = false; @@ -346,7 +354,7 @@ bool IntersectRaySphere(const Ray& ray, const FVector& sphereCenter, float radiu // outDistance = closestDist; // return true; // } - + // return false; // } @@ -381,8 +389,8 @@ float CalculateAngle(const FVector& start, const FVector& end) { } void SetDirectionFromRotator(IRotator rot, s8 direction[3]) { - float yaw = (rot.yaw) * (M_PI / 32768.0f); // Convert from n64 binary angles 0-0xFFFF 0-360 degrees to radians - float pitch = rot.pitch * (M_PI / 32768.0f); + float yaw = (rot.yaw) * (M_PI / 32768.0f); // Convert from n64 binary angles 0-0xFFFF 0-360 degrees to radians + float pitch = rot.pitch * (M_PI / 32768.0f); // Compute unit direction vector float x = cosf(yaw) * cosf(pitch); @@ -394,7 +402,8 @@ void SetDirectionFromRotator(IRotator rot, s8 direction[3]) { direction[1] = static_cast<s8>(y * 127.0f); direction[2] = static_cast<s8>(z * 127.0f); - //printf("Light dir %d %d %d (from rot 0x%X 0x%X 0x%X)\n", direction[0], direction[1], direction[2], rotator[0], rotator[1], rotator[2]); + // printf("Light dir %d %d %d (from rot 0x%X 0x%X 0x%X)\n", direction[0], direction[1], direction[2], rotator[0], + // rotator[1], rotator[2]); } void SetRotatorFromDirection(FVector direction, IRotator* rot) { @@ -405,8 +414,8 @@ void SetRotatorFromDirection(FVector direction, IRotator* rot) { float yaw = atan2f(-direction.z, direction.x); // Convert back to N64 angles (0-0xFFFF range) - rot->pitch = (s16)(pitch * (32768.0f / M_PI)); - rot->yaw = (s16)(yaw * (32768.0f / M_PI)); + rot->pitch = (s16) (pitch * (32768.0f / M_PI)); + rot->yaw = (s16) (yaw * (32768.0f / M_PI)); rot->roll = 0; // Assume no roll, since it's undefined from direction alone } @@ -421,10 +430,9 @@ FVector GetPositionAheadOfCamera(f32 dist) { yaw = yaw * M_PI / 180.0f; // Compute forward vector - FVector forward( - -sinf(yaw), // X - -sinf(pitch), // Y - cosf(yaw) // Z (vertical component) + FVector forward(-sinf(yaw), // X + -sinf(pitch), // Y + cosf(yaw) // Z (vertical component) ); // Move 1000 units forward from the camera position diff --git a/src/engine/editor/EditorMath.h b/src/engine/editor/EditorMath.h index d5d75fe13..cc2dfcf34 100644 --- a/src/engine/editor/EditorMath.h +++ b/src/engine/editor/EditorMath.h @@ -26,9 +26,9 @@ struct Triangle { /** * Projects 2D cursor into the game world - * + * * @return FVector ray direction - * + * * ray.x = camera->pos[0] + direction.x * length; * ray.y = camera->pos[1] + direction.y * length; * ray.z = camera->pos[2] + direction.z * length; @@ -45,7 +45,8 @@ FVector TransformVecByMatrix(const FVector& vec, const float mtx[4][4]); FVector TransformVecDirection(const FVector& dir, const float mtx[4][4]); Ray RayToLocalSpace(MtxF mtx, const Ray& ray); bool IntersectRayTriangle(const Ray& ray, const Triangle& tri, float& t); // Uses local space not global space. -bool IntersectRayTriangleAndTransform(const Ray& ray, FVector pos, const Triangle& tri, float& t); // Uses global space because no access to mtx +bool IntersectRayTriangleAndTransform(const Ray& ray, FVector pos, const Triangle& tri, + float& t); // Uses global space because no access to mtx bool IntersectRaySphere(const Ray& ray, const FVector& sphereCenter, float radius, float& t); /** * optional used here so we can check for successful query and return the click position diff --git a/src/engine/editor/GameObject.cpp b/src/engine/editor/GameObject.cpp index 6f52c8ac8..5145d8491 100644 --- a/src/engine/editor/GameObject.cpp +++ b/src/engine/editor/GameObject.cpp @@ -3,28 +3,30 @@ namespace Editor { - GameObject::GameObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, std::vector<Triangle> triangles, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue) { - Name = name; - Pos = pos; - Rot = rot; - Scale = scale; - Model = model; - Triangles = triangles; - Collision = collision; - BoundingBoxSize = boundingBoxSize; - DespawnFlag = despawnFlag; - DespawnValue = despawnValue; - } +GameObject::GameObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, + std::vector<Triangle> triangles, CollisionType collision, float boundingBoxSize, + int32_t* despawnFlag, int32_t despawnValue) { + Name = name; + Pos = pos; + Rot = rot; + Scale = scale; + Model = model; + Triangles = triangles; + Collision = collision; + BoundingBoxSize = boundingBoxSize; + DespawnFlag = despawnFlag; + DespawnValue = despawnValue; +} - GameObject::GameObject(FVector* pos, Vec3s* rot) { - //Pos = pos; - //Rot = rot; - } +GameObject::GameObject(FVector* pos, Vec3s* rot) { + // Pos = pos; + // Rot = rot; +} - GameObject::GameObject() {}; +GameObject::GameObject(){}; - void GameObject::Draw(){}; +void GameObject::Draw() {}; - void GameObject::Tick(){}; +void GameObject::Tick() {}; } // namespace Editor diff --git a/src/engine/editor/GameObject.h b/src/engine/editor/GameObject.h index ca08d8ba9..a8e269df9 100644 --- a/src/engine/editor/GameObject.h +++ b/src/engine/editor/GameObject.h @@ -14,31 +14,28 @@ extern "C" { struct Triangle; namespace Editor { - class GameObject { -public: - enum class CollisionType { - VTX_INTERSECT, - BOUNDING_BOX, - BOUNDING_SPHERE - }; +class GameObject { + public: + enum class CollisionType { VTX_INTERSECT, BOUNDING_BOX, BOUNDING_SPHERE }; - GameObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, std::vector<Triangle> triangles, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue); - GameObject(FVector* pos, Vec3s* rot); - GameObject(); - virtual void Tick(); - virtual void Draw(); - virtual void Load() {}; + GameObject(const char* name, FVector* pos, IRotator* rot, FVector* scale, Gfx* model, + std::vector<Triangle> triangles, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, + int32_t despawnValue); + GameObject(FVector* pos, Vec3s* rot); + GameObject(); + virtual void Tick(); + virtual void Draw(); + virtual void Load() {}; - const char* Name; - FVector* Pos; - IRotator* Rot; - FVector* Scale; - Gfx* Model; - std::vector<Triangle> Triangles; - CollisionType Collision; - float BoundingBoxSize; - int32_t* DespawnFlag; - int32_t DespawnValue; - - }; -} + const char* Name; + FVector* Pos; + IRotator* Rot; + FVector* Scale; + Gfx* Model; + std::vector<Triangle> Triangles; + CollisionType Collision; + float BoundingBoxSize; + int32_t* DespawnFlag; + int32_t DespawnValue; +}; +} // namespace Editor diff --git a/src/engine/editor/Gizmo.cpp b/src/engine/editor/Gizmo.cpp index 4987242f0..4923415b4 100644 --- a/src/engine/editor/Gizmo.cpp +++ b/src/engine/editor/Gizmo.cpp @@ -11,7 +11,6 @@ #include <controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h> #include <window/Window.h> - #include "engine/actors/Ship.h" #include "port/Game.h" #include "Handles.h" @@ -30,51 +29,51 @@ namespace Editor { void Gizmo::Load() { /* Translate handle collision */ RedCollision.Pos = &Pos; - RedCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_red"; + RedCollision.Model = (Gfx*) "__OTR__editor/gizmo/translate_handle_red"; GreenCollision.Pos = &Pos; - GreenCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_green"; + GreenCollision.Model = (Gfx*) "__OTR__editor/gizmo/translate_handle_green"; BlueCollision.Pos = &Pos; - BlueCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_blue"; + BlueCollision.Model = (Gfx*) "__OTR__editor/gizmo/translate_handle_blue"; /* Rotate handle collision */ RedRotateCollision.Pos = &Pos; - RedRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_red"; + RedRotateCollision.Model = (Gfx*) "__OTR__editor/gizmo/rot_handle_red"; GreenRotateCollision.Pos = &Pos; - GreenRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_green"; + GreenRotateCollision.Model = (Gfx*) "__OTR__editor/gizmo/rot_handle_green"; BlueRotateCollision.Pos = &Pos; - BlueRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_blue"; + BlueRotateCollision.Model = (Gfx*) "__OTR__editor/gizmo/rot_handle_blue"; /* Scale handle collision */ RedScaleCollision.Pos = &Pos; - RedScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_red"; + RedScaleCollision.Model = (Gfx*) "__OTR__editor/gizmo/scale_handle_red"; GreenScaleCollision.Pos = &Pos; - GreenScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_green"; + GreenScaleCollision.Model = (Gfx*) "__OTR__editor/gizmo/scale_handle_green"; BlueScaleCollision.Pos = &Pos; - BlueScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_blue"; + BlueScaleCollision.Model = (Gfx*) "__OTR__editor/gizmo/scale_handle_blue"; - GenerateCollisionMesh(&RedCollision, (Gfx*)LOAD_ASSET_RAW(RedCollision.Model), 1.0f); - GenerateCollisionMesh(&GreenCollision, (Gfx*)LOAD_ASSET_RAW(GreenCollision.Model), 1.0f); - GenerateCollisionMesh(&BlueCollision, (Gfx*)LOAD_ASSET_RAW(BlueCollision.Model), 1.0f); + GenerateCollisionMesh(&RedCollision, (Gfx*) LOAD_ASSET_RAW(RedCollision.Model), 1.0f); + GenerateCollisionMesh(&GreenCollision, (Gfx*) LOAD_ASSET_RAW(GreenCollision.Model), 1.0f); + GenerateCollisionMesh(&BlueCollision, (Gfx*) LOAD_ASSET_RAW(BlueCollision.Model), 1.0f); - GenerateCollisionMesh(&RedRotateCollision, (Gfx*)LOAD_ASSET_RAW(RedRotateCollision.Model), 1.0f); - GenerateCollisionMesh(&GreenRotateCollision, (Gfx*)LOAD_ASSET_RAW(GreenRotateCollision.Model), 1.0f); - GenerateCollisionMesh(&BlueRotateCollision, (Gfx*)LOAD_ASSET_RAW(BlueRotateCollision.Model), 1.0f); + GenerateCollisionMesh(&RedRotateCollision, (Gfx*) LOAD_ASSET_RAW(RedRotateCollision.Model), 1.0f); + GenerateCollisionMesh(&GreenRotateCollision, (Gfx*) LOAD_ASSET_RAW(GreenRotateCollision.Model), 1.0f); + GenerateCollisionMesh(&BlueRotateCollision, (Gfx*) LOAD_ASSET_RAW(BlueRotateCollision.Model), 1.0f); - GenerateCollisionMesh(&RedScaleCollision, (Gfx*)LOAD_ASSET_RAW(RedScaleCollision.Model), 1.0f); - GenerateCollisionMesh(&GreenScaleCollision, (Gfx*)LOAD_ASSET_RAW(GreenScaleCollision.Model), 1.0f); - GenerateCollisionMesh(&BlueScaleCollision, (Gfx*)LOAD_ASSET_RAW(BlueScaleCollision.Model), 1.0f); + GenerateCollisionMesh(&RedScaleCollision, (Gfx*) LOAD_ASSET_RAW(RedScaleCollision.Model), 1.0f); + GenerateCollisionMesh(&GreenScaleCollision, (Gfx*) LOAD_ASSET_RAW(GreenScaleCollision.Model), 1.0f); + GenerateCollisionMesh(&BlueScaleCollision, (Gfx*) LOAD_ASSET_RAW(BlueScaleCollision.Model), 1.0f); } void Gizmo::Tick() { if (Enabled) { TranslationMode mode = static_cast<TranslationMode>(CVarGetInteger("eGizmoMode", 0)); - switch(mode) { + switch (mode) { case TranslationMode::Move: Gizmo::Translate(); break; @@ -92,20 +91,12 @@ void Gizmo::Tick() { void Gizmo::SetGizmo(GameObject* object, Ray ray) { _selected = object; _ray = ray.Direction; - Pos = FVector( - object->Pos->x, - object->Pos->y, - object->Pos->z - ); + Pos = FVector(object->Pos->x, object->Pos->y, object->Pos->z); } void Gizmo::SetGizmoNoCursor(GameObject* object) { _selected = object; - Pos = FVector( - object->Pos->x, - object->Pos->y, - object->Pos->z - ); + Pos = FVector(object->Pos->x, object->Pos->y, object->Pos->z); } void Gizmo::Translate() { @@ -117,13 +108,10 @@ void Gizmo::Translate() { } if (Enabled) { - length = sqrt( - pow(_selected->Pos->x - cameras[0].pos[0], 2) + - pow(_selected->Pos->y - cameras[0].pos[1], 2) + - pow(_selected->Pos->z - cameras[0].pos[2], 2) - ); + length = sqrt(pow(_selected->Pos->x - cameras[0].pos[0], 2) + pow(_selected->Pos->y - cameras[0].pos[1], 2) + + pow(_selected->Pos->z - cameras[0].pos[2], 2)); - switch(SelectedHandle) { + switch (SelectedHandle) { case GizmoHandle::All_Axis: _selected->Pos->x = (cameras[0].pos[0] + _ray.x * PickDistance) + _cursorOffset.x; _selected->Pos->y = (cameras[0].pos[1] + _ray.y * PickDistance) + _cursorOffset.y; @@ -160,11 +148,7 @@ void Gizmo::Translate() { _selected->Pos->z = MIN(_selected->Pos->z, dimensions.MaxZ); } - Pos = FVector( - _selected->Pos->x, - _selected->Pos->y, - _selected->Pos->z - ); + Pos = FVector(_selected->Pos->x, _selected->Pos->y, _selected->Pos->z); } } @@ -189,7 +173,7 @@ void Gizmo::Rotate() { // Store initial scale at the beginning of the drag if (ManipulationStart) { ManipulationStart = false; - InitialRotation = *_selected->Rot; // Store initial rotation + InitialRotation = *_selected->Rot; // Store initial rotation } // Initial click position @@ -202,13 +186,13 @@ void Gizmo::Rotate() { diff = diff * 100.0f; switch (SelectedHandle) { case GizmoHandle::X_Axis: - _selected->Rot->pitch = (uint16_t)InitialRotation.pitch + diff.x; + _selected->Rot->pitch = (uint16_t) InitialRotation.pitch + diff.x; break; case GizmoHandle::Y_Axis: - _selected->Rot->yaw = (uint16_t)InitialRotation.yaw + diff.y; + _selected->Rot->yaw = (uint16_t) InitialRotation.yaw + diff.y; break; case GizmoHandle::Z_Axis: - _selected->Rot->roll = (uint16_t)InitialRotation.roll + diff.z; + _selected->Rot->roll = (uint16_t) InitialRotation.roll + diff.z; break; } } @@ -257,20 +241,20 @@ void Gizmo::Scale() { void Gizmo::Draw() { if (Enabled) { DrawHandles(); - //DebugCollision(&RedCollision, Pos, {0, 0, 0}, {0.05f, 0.05f, 0.05f}, RedCollision.Triangles); - //DebugCollision(&BlueCollision, Pos, {90, 0, 0}, {0.05f, 0.05f, 0.05f}, BlueCollision.Triangles); - //DebugCollision(&GreenCollision, Pos, {0, 90, 0}, {0.05f, 0.05f, 0.05f}, GreenCollision.Triangles); - //DebugCollision(&RedRotateCollision, Pos, {0, 0, 0}, {0.15f, 0.15f, 0.15f}, RedRotateCollision.Triangles); - //DebugCollision((uintptr_t)_selected, Pos, BlueRotateCollision.Triangles); - //DebugCollision((uintptr_t)_selected, Pos, GreenRotateCollision.Triangles); + // DebugCollision(&RedCollision, Pos, {0, 0, 0}, {0.05f, 0.05f, 0.05f}, RedCollision.Triangles); + // DebugCollision(&BlueCollision, Pos, {90, 0, 0}, {0.05f, 0.05f, 0.05f}, BlueCollision.Triangles); + // DebugCollision(&GreenCollision, Pos, {0, 90, 0}, {0.05f, 0.05f, 0.05f}, GreenCollision.Triangles); + // DebugCollision(&RedRotateCollision, Pos, {0, 0, 0}, {0.15f, 0.15f, 0.15f}, RedRotateCollision.Triangles); + // DebugCollision((uintptr_t)_selected, Pos, BlueRotateCollision.Triangles); + // DebugCollision((uintptr_t)_selected, Pos, GreenRotateCollision.Triangles); } } void Gizmo::DrawHandles() { Mat4 mainMtx; - Editor_MatrixIdentity((float(*)[4])&Mtx_RedX); - Editor_MatrixIdentity((float(*)[4])&Mtx_GreenY); - Editor_MatrixIdentity((float(*)[4])&Mtx_BlueZ); + Editor_MatrixIdentity((float(*)[4]) & Mtx_RedX); + Editor_MatrixIdentity((float(*)[4]) & Mtx_GreenY); + Editor_MatrixIdentity((float(*)[4]) & Mtx_BlueZ); const char* blueHandle; const char* greenHandle; @@ -279,18 +263,18 @@ void Gizmo::DrawHandles() { IRotator blueRot; IRotator greenRot; IRotator redRot; - FVector scale = {0.05f, 0.05f, 0.05f}; + FVector scale = { 0.05f, 0.05f, 0.05f }; - switch(static_cast<TranslationMode>(CVarGetInteger("eGizmoMode", 0))) { + switch (static_cast<TranslationMode>(CVarGetInteger("eGizmoMode", 0))) { case TranslationMode::Move: center = "__OTR__editor/gizmo/center_handle"; blueHandle = "__OTR__editor/gizmo/translate_handle_blue"; greenHandle = "__OTR__editor/gizmo/translate_handle_green"; redHandle = "__OTR__editor/gizmo/translate_handle_red"; _gizmoOffset = 8.0f; - greenRot = {0, 90, 0}; - blueRot = {90, 0, 0}; - scale = {0.3, 0.3, 0.3}; + greenRot = { 0, 90, 0 }; + blueRot = { 90, 0, 0 }; + scale = { 0.3, 0.3, 0.3 }; break; case TranslationMode::Rotate: center = nullptr; // No All_Axis drag button for Rotation @@ -298,7 +282,7 @@ void Gizmo::DrawHandles() { greenHandle = "__OTR__editor/gizmo/rot_handle_green"; redHandle = "__OTR__editor/gizmo/rot_handle_red"; _gizmoOffset = 0.0f; - scale = {0.15f, 0.15f, 0.15f}; + scale = { 0.15f, 0.15f, 0.15f }; break; case TranslationMode::Scale: center = "__OTR__editor/gizmo/center_handle"; @@ -306,13 +290,13 @@ void Gizmo::DrawHandles() { greenHandle = "__OTR__editor/gizmo/scale_handle_green"; redHandle = "__OTR__editor/gizmo/scale_handle_red"; _gizmoOffset = 8.0f; - greenRot = {0, 90, 0}; - blueRot = {90, 0, 0}; - scale = {0.05f, 0.05f, 0.05f}; + greenRot = { 0, 90, 0 }; + blueRot = { 90, 0, 0 }; + scale = { 0.05f, 0.05f, 0.05f }; break; } - ApplyMatrixTransformations(mainMtx, Pos, Rot, {1, 1, 1}); + ApplyMatrixTransformations(mainMtx, Pos, Rot, { 1, 1, 1 }); Editor_AddMatrix(mainMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (center) { @@ -330,19 +314,20 @@ void Gizmo::DrawHandles() { ApplyMatrixTransformations(CenterMtx, Pos, centerRot, FVector(0.06f, 0.06f, 0.06f)); Editor_AddMatrix(CenterMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)center); + gSPDisplayList(gDisplayListHead++, (Gfx*) center); } - ApplyMatrixTransformations((float(*)[4])&Mtx_RedX, FVector(Pos.x, Pos.y, Pos.z - _gizmoOffset), Rot, scale); - Editor_AddMatrix((float(*)[4])&Mtx_RedX, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)redHandle); + ApplyMatrixTransformations((float(*)[4]) & Mtx_RedX, FVector(Pos.x, Pos.y, Pos.z - _gizmoOffset), Rot, scale); + Editor_AddMatrix((float(*)[4]) & Mtx_RedX, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gDisplayListHead++, (Gfx*) redHandle); - ApplyMatrixTransformations((float(*)[4])&Mtx_GreenY, FVector(Pos.x - _gizmoOffset, Pos.y, Pos.z), greenRot, scale); - Editor_AddMatrix((float(*)[4])&Mtx_GreenY, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)greenHandle); + ApplyMatrixTransformations((float(*)[4]) & Mtx_GreenY, FVector(Pos.x - _gizmoOffset, Pos.y, Pos.z), greenRot, + scale); + Editor_AddMatrix((float(*)[4]) & Mtx_GreenY, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gDisplayListHead++, (Gfx*) greenHandle); - ApplyMatrixTransformations((float(*)[4])&Mtx_BlueZ, FVector(Pos.x, Pos.y + _gizmoOffset, Pos.z), blueRot, scale); - Editor_AddMatrix((float(*)[4])&Mtx_BlueZ, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)blueHandle); -} + ApplyMatrixTransformations((float(*)[4]) & Mtx_BlueZ, FVector(Pos.x, Pos.y + _gizmoOffset, Pos.z), blueRot, scale); + Editor_AddMatrix((float(*)[4]) & Mtx_BlueZ, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gDisplayListHead++, (Gfx*) blueHandle); } +} // namespace Editor diff --git a/src/engine/editor/Gizmo.h b/src/engine/editor/Gizmo.h index 47ef99549..3ce55bf1d 100644 --- a/src/engine/editor/Gizmo.h +++ b/src/engine/editor/Gizmo.h @@ -8,21 +8,10 @@ namespace Editor { class Gizmo { -public: - - enum class GizmoHandle { - None, - All_Axis, - X_Axis, - Y_Axis, - Z_Axis - }; + public: + enum class GizmoHandle { None, All_Axis, X_Axis, Y_Axis, Z_Axis }; - enum class TranslationMode { - Move, - Rotate, - Scale - }; + enum class TranslationMode { Move, Rotate, Scale }; void Tick(); void Draw(); @@ -48,8 +37,8 @@ public: bool Enabled; bool ManipulationStart = true; - FVector InitialScale = {1, 1, 1}; - IRotator InitialRotation = {0, 0, 0}; + FVector InitialScale = { 1, 1, 1 }; + IRotator InitialRotation = { 0, 0, 0 }; GizmoHandle SelectedHandle; GameObject RedCollision; @@ -69,17 +58,18 @@ public: MtxF Mtx_BlueZ; FVector Pos; // Global scene view - IRotator Rot = {0, 0, 0}; + IRotator Rot = { 0, 0, 0 }; float AllAxisRadius = 3.0f; // Free move selection radius float PickDistance; FVector _cursorOffset; float _gizmoOffset = 8.0f; float HandleSize = 2.0f; - + FVector _ray; GameObject* _selected = nullptr; - private: + + private: bool _draw = false; }; -} +} // namespace Editor diff --git a/src/engine/editor/Handles.cpp b/src/engine/editor/Handles.cpp index 9074a2b45..73a0211c5 100644 --- a/src/engine/editor/Handles.cpp +++ b/src/engine/editor/Handles.cpp @@ -4,20 +4,17 @@ #include "Handles.h" namespace Editor { - Handles::Handles() { - Pos = &pos; - Rot = &rot; - } +Handles::Handles() { + Pos = &pos; + Rot = &rot; +} - void Handles::Load() { +void Handles::Load() { +} - } +void Handles::Tick() { +} - void Handles::Tick() { - - } - - void Handles::Draw() { - - } -}
\ No newline at end of file +void Handles::Draw() { +} +} // namespace Editor diff --git a/src/engine/editor/Handles.h b/src/engine/editor/Handles.h index 1faa4b59e..68825f086 100644 --- a/src/engine/editor/Handles.h +++ b/src/engine/editor/Handles.h @@ -5,15 +5,15 @@ #include "GameObject.h" namespace Editor { - class Handles : public GameObject { +class Handles : public GameObject { - Handles(); + Handles(); - virtual void Tick() override; - virtual void Draw() override; - virtual void Load() override; + virtual void Tick() override; + virtual void Draw() override; + virtual void Load() override; - FVector pos; - IRotator rot; - }; -} + FVector pos; + IRotator rot; +}; +} // namespace Editor diff --git a/src/engine/editor/Light.cpp b/src/engine/editor/Light.cpp index 594383bd3..c4a368421 100644 --- a/src/engine/editor/Light.cpp +++ b/src/engine/editor/Light.cpp @@ -30,55 +30,55 @@ namespace Editor { size_t LightObject::NumLights = 0; - LightObject::LightObject(const char* name, FVector* pos, s8* direction) : GameObject(nullptr, nullptr) { - Name = name; - Pos = &LightPos; - Rot = &LightRot; - Scale = &LightScale; - - DespawnFlag = &_despawnFlag; - DespawnValue = -1; - - Direction = direction; - - Collision = CollisionType::BOUNDING_BOX; - BoundingBoxSize = 4.0f; - - NumLights += 1; - } - - void LightObject::Load() { - } - - void LightObject::Tick() { - SetDirectionFromRotator(*Rot, Direction); - } - void LightObject::Draw() { - Mat4 mtx_sun; - Editor_MatrixIdentity(mtx_sun); - gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); - gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); - - - // Calculate camera-to-object distance - FVector cameraDir = FVector(LightPos.x - cameras[0].pos[0], LightPos.y - cameras[0].pos[1], LightPos.z - cameras[0].pos[2]); - cameraDir = cameraDir.Normalize(); - - IRotator centerRot; - SetRotatorFromDirection(cameraDir, ¢erRot); - - // Account for object not facing the correct direction when exported - centerRot.yaw += 0x4000; - ApplyMatrixTransformations(mtx_sun, LightPos, centerRot, LightScale); - Editor_AddMatrix(mtx_sun, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, sun_LightModel_mesh); - - // Draw Arrow - Mat4 mtx_arrow; - IRotator rot = LightRot; - rot.yaw += 0x4000; - ApplyMatrixTransformations(mtx_arrow, LightPos, rot, LightScale); - Editor_AddMatrix(mtx_arrow, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)"__OTR__editor/light/sun_arrow"); - } +LightObject::LightObject(const char* name, FVector* pos, s8* direction) : GameObject(nullptr, nullptr) { + Name = name; + Pos = &LightPos; + Rot = &LightRot; + Scale = &LightScale; + + DespawnFlag = &_despawnFlag; + DespawnValue = -1; + + Direction = direction; + + Collision = CollisionType::BOUNDING_BOX; + BoundingBoxSize = 4.0f; + + NumLights += 1; +} + +void LightObject::Load() { +} + +void LightObject::Tick() { + SetDirectionFromRotator(*Rot, Direction); +} +void LightObject::Draw() { + Mat4 mtx_sun; + Editor_MatrixIdentity(mtx_sun); + gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + + // Calculate camera-to-object distance + FVector cameraDir = + FVector(LightPos.x - cameras[0].pos[0], LightPos.y - cameras[0].pos[1], LightPos.z - cameras[0].pos[2]); + cameraDir = cameraDir.Normalize(); + + IRotator centerRot; + SetRotatorFromDirection(cameraDir, ¢erRot); + + // Account for object not facing the correct direction when exported + centerRot.yaw += 0x4000; + ApplyMatrixTransformations(mtx_sun, LightPos, centerRot, LightScale); + Editor_AddMatrix(mtx_sun, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gDisplayListHead++, sun_LightModel_mesh); + + // Draw Arrow + Mat4 mtx_arrow; + IRotator rot = LightRot; + rot.yaw += 0x4000; + ApplyMatrixTransformations(mtx_arrow, LightPos, rot, LightScale); + Editor_AddMatrix(mtx_arrow, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gDisplayListHead++, (Gfx*) "__OTR__editor/light/sun_arrow"); } +} // namespace Editor diff --git a/src/engine/editor/Light.h b/src/engine/editor/Light.h index 972942663..690b7ae1d 100644 --- a/src/engine/editor/Light.h +++ b/src/engine/editor/Light.h @@ -9,7 +9,7 @@ namespace Editor { class LightObject : public GameObject { -public: + public: LightObject(const char* name, FVector* pos, s8* direction); virtual void Draw() override; @@ -19,2125 +19,984 @@ public: static size_t NumLights; FVector LightPos = FVector(0, 100, 0); IRotator LightRot = IRotator(0, 0, 0); - FVector LightScale = FVector(0.1, 0.1, 0.1); + FVector LightScale = FVector(0.1, 0.1, 0.1); s8* Direction; s32 _despawnFlag = 0; -u8 sun_sun_rgba32[16384] = { - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xed, 0x8e, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xe4, 0x85, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfb, 0x9d, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xdb, 0x7d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xac, 0x01, 0xff, - 0xe5, 0x87, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xae, 0x01, 0xff, - 0xd1, 0x72, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xba, 0x00, 0xff, - 0xff, 0xaa, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xc4, 0x01, 0xff, 0xfe, 0xba, 0x00, 0xff, - 0xc6, 0x67, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xc9, 0x00, 0xff, - 0xff, 0xc8, 0x01, 0xff, 0xda, 0x7c, 0x01, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xd9, 0x00, 0xff, - 0xff, 0xd1, 0x01, 0xff, 0xff, 0xc0, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xd8, 0x00, 0xff, - 0xff, 0xd8, 0x01, 0xff, 0xfe, 0xa2, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xe5, 0x00, 0xff, - 0xff, 0xde, 0x00, 0xff, 0xff, 0xb8, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xe8, 0x01, 0xff, - 0xff, 0xe9, 0x01, 0xff, 0xff, 0xcc, 0x01, 0xff, - 0xcd, 0x6f, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xf9, 0x00, 0xff, 0xff, 0xf3, 0x00, 0xff, - 0xff, 0xec, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf5, 0x00, 0xff, - 0xff, 0xf8, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, - 0xf8, 0x99, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xfa, 0x01, 0xff, 0xff, 0xa5, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xca, 0x00, 0xff, 0xc1, 0x63, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xfd, 0x01, 0xff, 0xf6, 0x98, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xef, 0x91, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xf6, 0x01, 0xff, 0xef, 0x91, 0x00, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xf9, 0x01, 0xff, 0xeb, 0x8c, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xfe, 0xa0, 0x01, 0xff, - 0xef, 0x91, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfd, 0x9e, 0x00, 0xff, - 0xff, 0xa4, 0x00, 0xff, 0xcf, 0x70, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xc6, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xf3, 0x01, 0xff, 0xdc, 0x7e, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xc2, 0x01, 0xff, - 0xff, 0xb3, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xb3, 0x01, 0xff, 0xff, 0xb9, 0x01, 0xff, - 0xe2, 0x84, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xf7, 0x01, 0xff, - 0xe1, 0x82, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xec, 0x00, 0xff, 0xcd, 0x6e, 0x00, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xe4, 0x00, 0xff, - 0xff, 0xd7, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, - 0xff, 0xb9, 0x00, 0xff, 0xcf, 0x70, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xc0, 0x00, 0xff, 0xff, 0xc7, 0x00, 0xff, - 0xff, 0xcf, 0x01, 0xff, 0xf8, 0x99, 0x01, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xbe, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xe5, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xf8, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff, - 0xff, 0xde, 0x00, 0xff, 0xff, 0xcf, 0x00, 0xff, - 0xe1, 0x82, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xd5, 0x00, 0xff, - 0xfe, 0xdc, 0x00, 0xff, 0xff, 0xe7, 0x01, 0xff, - 0xff, 0xb2, 0x00, 0xff, 0xd0, 0x72, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xf7, 0x00, 0xff, 0xea, 0x8b, 0x00, 0xff, - 0xfc, 0x9e, 0x00, 0xff, 0xff, 0xb0, 0x01, 0xff, - 0xff, 0xb1, 0x00, 0xff, 0xff, 0xa2, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xdc, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xf4, 0x00, 0xff, - 0xff, 0xe7, 0x01, 0xff, 0xf6, 0x98, 0x00, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xe1, 0x00, 0xff, - 0xff, 0xea, 0x00, 0xff, 0xff, 0xf3, 0x01, 0xff, - 0xfe, 0xfc, 0x00, 0xff, 0xfe, 0xcb, 0x00, 0xff, - 0xe2, 0x84, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xa2, 0x00, 0xff, 0xfe, 0xb5, 0x00, 0xff, - 0xff, 0xc9, 0x01, 0xff, 0xff, 0xda, 0x01, 0xff, - 0xff, 0xe1, 0x01, 0xff, 0xff, 0xe6, 0x01, 0xff, - 0xff, 0xe7, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, - 0xff, 0xda, 0x01, 0xff, 0xfe, 0xcb, 0x00, 0xff, - 0xff, 0xbd, 0x00, 0xff, 0xff, 0xaa, 0x01, 0xff, - 0xf1, 0x93, 0x00, 0xff, 0xda, 0x7c, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xfd, 0x00, 0xff, - 0xff, 0xb0, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xff, 0xf5, 0x01, 0xff, 0xff, 0xfe, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xe3, 0x00, 0xff, 0xff, 0xa0, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff, - 0xff, 0xd4, 0x00, 0xff, 0xff, 0xdc, 0x01, 0xff, - 0xff, 0xe2, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff, - 0xff, 0xee, 0x00, 0xff, 0xfe, 0xf3, 0x00, 0xff, - 0xfe, 0xf7, 0x00, 0xff, 0xff, 0xfd, 0x00, 0xff, - 0xfe, 0xfc, 0x00, 0xff, 0xfe, 0xf9, 0x00, 0xff, - 0xff, 0xf5, 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff, - 0xff, 0xe9, 0x00, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0xff, 0xdc, 0x00, 0xff, 0xff, 0xd4, 0x00, 0xff, - 0xff, 0xb9, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xcb, 0x01, 0xff, - 0xce, 0x6f, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xca, 0x00, 0xff, 0xd5, 0x76, 0x01, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xfa, 0x9b, 0x01, 0xff, - 0xfe, 0xd2, 0x00, 0xff, 0xfe, 0xe2, 0x00, 0xff, - 0xff, 0xf0, 0x00, 0xff, 0xfe, 0xf5, 0x00, 0xff, - 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xfe, 0x01, 0xff, - 0xff, 0xf7, 0x00, 0xff, 0xfe, 0xf0, 0x00, 0xff, - 0xff, 0xe4, 0x01, 0xff, 0xff, 0xd4, 0x01, 0xff, - 0xff, 0xa7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xe2, 0x01, 0xff, 0xe0, 0x82, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xd4, 0x75, 0x00, 0xff, - 0xff, 0xbb, 0x00, 0xff, 0xfe, 0xd7, 0x00, 0xff, - 0xff, 0xe8, 0x01, 0xff, 0xff, 0xf7, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xf8, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff, - 0xff, 0xda, 0x00, 0xff, 0xff, 0xc1, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfb, 0x9d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xf6, 0x98, 0x01, 0xff, 0xff, 0xcb, 0x01, 0xff, - 0xff, 0xdc, 0x01, 0xff, 0xff, 0xed, 0x01, 0xff, - 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xf1, 0x01, 0xff, 0xff, 0xdf, 0x00, 0xff, - 0xff, 0xcc, 0x00, 0xff, 0xf6, 0x97, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xc6, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xca, 0x00, 0xff, 0xfe, 0xe3, 0x00, 0xff, - 0xfe, 0xf3, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xf5, 0x00, 0xff, - 0xff, 0xe3, 0x00, 0xff, 0xff, 0xca, 0x01, 0xff, - 0xd1, 0x73, 0x01, 0xff, 0xcf, 0x71, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xbc, 0x01, 0xff, - 0xff, 0xdb, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xf3, 0x01, 0xff, 0xff, 0xd9, 0x01, 0xff, - 0xff, 0xb6, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xfd, 0x9f, 0x00, 0xff, 0xff, 0xd3, 0x00, 0xff, - 0xff, 0xec, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff, - 0xff, 0xd1, 0x01, 0xff, 0xf1, 0x92, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xc9, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0xfe, 0xf8, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf5, 0x01, 0xff, - 0xff, 0xe0, 0x01, 0xff, 0xff, 0xc8, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xcf, 0x71, 0x00, 0xff, 0xc7, 0x68, 0x01, 0xff, - 0xbd, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff, - 0xff, 0xd8, 0x01, 0xff, 0xff, 0xef, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xed, 0x00, 0xff, 0xff, 0xd7, 0x01, 0xff, - 0xff, 0xa9, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xf6, 0x00, 0xff, - 0xff, 0xe7, 0x01, 0xff, 0xff, 0xd7, 0x01, 0xff, - 0xff, 0xc7, 0x01, 0xff, 0xff, 0xb8, 0x01, 0xff, - 0xff, 0xa7, 0x00, 0xff, 0xf6, 0x98, 0x00, 0xff, - 0xe7, 0x89, 0x01, 0xff, 0xd9, 0x7b, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0x99, 0x00, 0xff, 0xff, 0xa6, 0x00, 0xff, - 0xff, 0xac, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, - 0xfa, 0x9b, 0x01, 0xff, 0xf0, 0x91, 0x00, 0xff, - 0xe4, 0x85, 0x00, 0xff, 0xd9, 0x7a, 0x01, 0xff, - 0xcb, 0x6c, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xca, 0x6b, 0x01, 0xff, 0xff, 0xc5, 0x00, 0xff, - 0xff, 0xe4, 0x01, 0xff, 0xfe, 0xfa, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xfb, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0xff, 0xc5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf8, 0x00, 0xff, - 0xff, 0xe7, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff, - 0xff, 0xc5, 0x00, 0xff, 0xff, 0xb4, 0x00, 0xff, - 0xf4, 0x95, 0x00, 0xff, 0xd0, 0x71, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xaf, 0x00, 0xff, - 0xff, 0xbc, 0x01, 0xff, 0xff, 0xca, 0x01, 0xff, - 0xff, 0xd9, 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff, - 0xff, 0xec, 0x00, 0xff, 0xff, 0xe8, 0x01, 0xff, - 0xff, 0xe2, 0x01, 0xff, 0xff, 0xdc, 0x00, 0xff, - 0xff, 0xd5, 0x00, 0xff, 0xff, 0xcd, 0x01, 0xff, - 0xdf, 0x80, 0x00, 0xff, 0xfe, 0xcb, 0x00, 0xff, - 0xff, 0xe9, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xe8, 0x01, 0xff, - 0xff, 0xcc, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xfa, 0x00, 0xff, - 0xff, 0xe0, 0x00, 0xff, 0xff, 0xb8, 0x00, 0xff, - 0xec, 0x8e, 0x01, 0xff, 0xc4, 0x65, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xc4, 0x00, 0xff, 0xff, 0xd1, 0x00, 0xff, - 0xff, 0xdf, 0x01, 0xff, 0xfe, 0xed, 0x00, 0xff, - 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xf4, 0x96, 0x01, 0xff, 0xff, 0xd1, 0x00, 0xff, - 0xff, 0xee, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xec, 0x01, 0xff, - 0xff, 0xd0, 0x00, 0xff, 0xec, 0x8d, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xe4, 0x01, 0xff, 0xfe, 0xb5, 0x00, 0xff, - 0xe2, 0x83, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xfe, 0xe4, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xa8, 0x00, 0xff, 0xff, 0xd6, 0x00, 0xff, - 0xff, 0xf3, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xef, 0x00, 0xff, - 0xff, 0xd5, 0x01, 0xff, 0xff, 0xa0, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xe3, 0x00, 0xff, 0xff, 0xaf, 0x00, 0xff, - 0xd8, 0x79, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xff, 0xf7, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xdb, 0x01, 0xff, - 0xff, 0xf6, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff, - 0xff, 0xd9, 0x00, 0xff, 0xfe, 0xb1, 0x00, 0xff, - 0xff, 0xe2, 0x00, 0xff, 0xff, 0xa6, 0x00, 0xff, - 0xc9, 0x6a, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xc3, 0x00, 0xff, 0xff, 0xe0, 0x01, 0xff, - 0xff, 0xf9, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf7, 0x00, 0xff, - 0xff, 0xde, 0x01, 0xff, 0xfe, 0xc2, 0x00, 0xff, - 0xd0, 0x72, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xe5, 0x87, 0x01, 0xff, - 0xff, 0xc9, 0x01, 0xff, 0xfe, 0xe2, 0x00, 0xff, - 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xfa, 0x00, 0xff, - 0xff, 0xe2, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, - 0xe1, 0x83, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xfe, 0xff, 0x00, 0xff, 0xf4, 0x95, 0x01, 0xff, - 0xff, 0xcd, 0x01, 0xff, 0xff, 0xe5, 0x00, 0xff, - 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xfd, 0x01, 0xff, - 0xff, 0xe4, 0x00, 0xff, 0xff, 0xcc, 0x00, 0xff, - 0xf2, 0x93, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbb, 0x5d, 0x00, 0xff, 0xf1, 0x92, 0x01, 0xff, - 0xff, 0xca, 0x00, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xfb, 0x00, 0xff, - 0xff, 0xe3, 0x00, 0xff, 0xff, 0xcb, 0x00, 0xff, - 0xf2, 0x93, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xdd, 0x7f, 0x00, 0xff, - 0xff, 0xc4, 0x00, 0xff, 0xff, 0xdd, 0x00, 0xff, - 0xff, 0xf6, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xf7, 0x00, 0xff, - 0xff, 0xde, 0x01, 0xff, 0xfe, 0xc4, 0x00, 0xff, - 0xe1, 0x82, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xca, 0x6b, 0x01, 0xff, - 0xff, 0xbb, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff, - 0xff, 0xf1, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf2, 0x01, 0xff, - 0xff, 0xd9, 0x01, 0xff, 0xff, 0xbc, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0xbf, 0x60, 0x00, 0xff, - 0xfc, 0x9e, 0x00, 0xff, 0xff, 0xdb, 0x00, 0xff, - 0xfe, 0xa8, 0x00, 0xff, 0xfe, 0xcf, 0x00, 0xff, - 0xff, 0xea, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xed, 0x01, 0xff, - 0xff, 0xd1, 0x00, 0xff, 0xff, 0xac, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff, - 0xff, 0xf0, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0xcd, 0x6f, 0x00, 0xff, - 0xff, 0xa5, 0x01, 0xff, 0xff, 0xd9, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xf2, 0x94, 0x00, 0xff, 0xff, 0xc9, 0x01, 0xff, - 0xff, 0xe3, 0x00, 0xff, 0xff, 0xfb, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xfc, 0x01, 0xff, 0xff, 0xe6, 0x01, 0xff, - 0xff, 0xc9, 0x00, 0xff, 0xf9, 0x9b, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x01, 0xff, - 0xff, 0xea, 0x01, 0xff, 0xff, 0xdd, 0x01, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xd6, 0x77, 0x01, 0xff, - 0xff, 0xa9, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xdc, 0x7e, 0x00, 0xff, 0xfe, 0xc1, 0x00, 0xff, - 0xff, 0xdd, 0x01, 0xff, 0xfe, 0xf4, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xf6, 0x01, 0xff, 0xff, 0xdf, 0x01, 0xff, - 0xff, 0xc2, 0x00, 0xff, 0xe4, 0x86, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xf3, 0x00, 0xff, - 0xff, 0xe3, 0x00, 0xff, 0xff, 0xd5, 0x01, 0xff, - 0xff, 0xc7, 0x01, 0xff, 0xff, 0xb9, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5e, 0x01, 0xff, 0xde, 0x80, 0x00, 0xff, - 0xff, 0xaa, 0x01, 0xff, 0xff, 0xd3, 0x00, 0xff, - 0xff, 0xed, 0x01, 0xff, 0xff, 0xfd, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xba, 0x00, 0xff, - 0xfe, 0xd5, 0x00, 0xff, 0xff, 0xee, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xee, 0x00, 0xff, 0xff, 0xd7, 0x01, 0xff, - 0xff, 0xba, 0x01, 0xff, 0xcd, 0x6e, 0x01, 0xff, - 0xff, 0xba, 0x01, 0xff, 0xff, 0xc4, 0x01, 0xff, - 0xff, 0xcc, 0x00, 0xff, 0xff, 0xd3, 0x01, 0xff, - 0xff, 0xd9, 0x00, 0xff, 0xfe, 0xde, 0x00, 0xff, - 0xff, 0xdc, 0x00, 0xff, 0xfe, 0xcc, 0x00, 0xff, - 0xff, 0xbe, 0x01, 0xff, 0xff, 0xaf, 0x00, 0xff, - 0xff, 0xa3, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xc2, 0x64, 0x01, 0xff, 0xe6, 0x87, 0x00, 0xff, - 0xff, 0xa7, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff, - 0xff, 0xc8, 0x00, 0xff, 0xff, 0xd8, 0x00, 0xff, - 0xff, 0xea, 0x01, 0xff, 0xff, 0xf9, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xb1, 0x01, 0xff, - 0xff, 0xce, 0x00, 0xff, 0xff, 0xe6, 0x00, 0xff, - 0xff, 0xf9, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x00, 0xff, - 0xff, 0xe6, 0x01, 0xff, 0xff, 0xcf, 0x01, 0xff, - 0xff, 0xb1, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xc6, 0x67, 0x01, 0xff, 0xd2, 0x73, 0x00, 0xff, - 0xdf, 0x80, 0x00, 0xff, 0xe9, 0x8b, 0x00, 0xff, - 0xf3, 0x95, 0x00, 0xff, 0xfb, 0x9d, 0x00, 0xff, - 0xf6, 0x98, 0x00, 0xff, 0xea, 0x8b, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xc9, 0x6a, 0x00, 0xff, 0xd8, 0x79, 0x01, 0xff, - 0xe6, 0x88, 0x01, 0xff, 0xf5, 0x97, 0x00, 0xff, - 0xfe, 0xa6, 0x00, 0xff, 0xff, 0xb7, 0x01, 0xff, - 0xff, 0xc7, 0x01, 0xff, 0xff, 0xd6, 0x00, 0xff, - 0xff, 0xe6, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xf0, 0x91, 0x00, 0xff, - 0xff, 0xbf, 0x01, 0xff, 0xfe, 0xd4, 0x00, 0xff, - 0xff, 0xe9, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xf9, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff, - 0xff, 0xd6, 0x00, 0xff, 0xff, 0xc1, 0x01, 0xff, - 0xf1, 0x92, 0x00, 0xff, 0xbc, 0x5e, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xc0, 0x62, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xae, 0x01, 0xff, 0xfe, 0xc3, 0x00, 0xff, - 0xfe, 0xd9, 0x00, 0xff, 0xfe, 0xef, 0x00, 0xff, - 0xff, 0xfd, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xf8, 0x00, 0xff, - 0xfe, 0xee, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff, - 0xfe, 0xc7, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xd1, 0x73, 0x00, 0xff, 0xff, 0xb2, 0x00, 0xff, - 0xff, 0xc8, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, - 0xfe, 0xf1, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xf9, 0x01, 0xff, 0xff, 0xee, 0x00, 0xff, - 0xff, 0xe2, 0x00, 0xff, 0xff, 0xce, 0x00, 0xff, - 0xff, 0xb5, 0x01, 0xff, 0xdf, 0x80, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xf3, 0x94, 0x01, 0xff, - 0xff, 0xb6, 0x00, 0xff, 0xff, 0xd1, 0x01, 0xff, - 0xfe, 0xe4, 0x00, 0xff, 0xff, 0xf0, 0x01, 0xff, - 0xff, 0xfa, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x00, 0xff, - 0xff, 0xed, 0x00, 0xff, 0xfe, 0xe3, 0x00, 0xff, - 0xff, 0xd2, 0x01, 0xff, 0xff, 0xba, 0x01, 0xff, - 0xf9, 0x9a, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0xff, 0xa4, 0x00, 0xff, 0xff, 0xbf, 0x01, 0xff, - 0xfe, 0xd0, 0x00, 0xff, 0xff, 0xdf, 0x01, 0xff, - 0xff, 0xec, 0x01, 0xff, 0xff, 0xf5, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xfe, 0x00, 0xff, - 0xfe, 0xf3, 0x00, 0xff, 0xff, 0xeb, 0x01, 0xff, - 0xff, 0xde, 0x00, 0xff, 0xff, 0xcf, 0x00, 0xff, - 0xff, 0xbf, 0x01, 0xff, 0xff, 0xa6, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xff, 0xa3, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xcd, 0x6f, 0x01, 0xff, 0xff, 0xa4, 0x00, 0xff, - 0xff, 0xb7, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, - 0xff, 0xd7, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0xff, 0xf1, 0x01, 0xff, 0xff, 0xf7, 0x00, 0xff, - 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, - 0xff, 0xf7, 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff, - 0xff, 0xe2, 0x00, 0xff, 0xff, 0xd3, 0x01, 0xff, - 0xff, 0xc4, 0x00, 0xff, 0xff, 0xb3, 0x00, 0xff, - 0xfe, 0xa2, 0x00, 0xff, 0xcd, 0x6e, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5c, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xd7, 0x78, 0x01, 0xff, - 0xfe, 0xe3, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xf3, 0x95, 0x01, 0xff, 0xff, 0xae, 0x00, 0xff, - 0xfe, 0xbf, 0x00, 0xff, 0xff, 0xcd, 0x01, 0xff, - 0xff, 0xdb, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0xff, 0xe9, 0x01, 0xff, 0xff, 0xee, 0x01, 0xff, - 0xff, 0xf1, 0x00, 0xff, 0xff, 0xf5, 0x00, 0xff, - 0xfe, 0xf8, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, - 0xff, 0xfc, 0x01, 0xff, 0xff, 0xf9, 0x01, 0xff, - 0xff, 0xf5, 0x01, 0xff, 0xff, 0xf1, 0x00, 0xff, - 0xff, 0xec, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff, - 0xff, 0xe2, 0x00, 0xff, 0xff, 0xda, 0x00, 0xff, - 0xff, 0xcb, 0x01, 0xff, 0xff, 0xbc, 0x00, 0xff, - 0xff, 0xac, 0x01, 0xff, 0xed, 0x8e, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xf6, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xbe, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xd6, 0x77, 0x01, 0xff, - 0xff, 0xa4, 0x00, 0xff, 0xfe, 0xb4, 0x00, 0xff, - 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff, - 0xff, 0xcf, 0x01, 0xff, 0xff, 0xd5, 0x01, 0xff, - 0xff, 0xda, 0x01, 0xff, 0xff, 0xdf, 0x01, 0xff, - 0xff, 0xe3, 0x01, 0xff, 0xff, 0xe6, 0x00, 0xff, - 0xff, 0xe6, 0x01, 0xff, 0xff, 0xe1, 0x00, 0xff, - 0xff, 0xdd, 0x01, 0xff, 0xff, 0xd7, 0x01, 0xff, - 0xff, 0xd2, 0x01, 0xff, 0xff, 0xcd, 0x01, 0xff, - 0xff, 0xc7, 0x01, 0xff, 0xfe, 0xc1, 0x00, 0xff, - 0xfe, 0xb3, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, - 0xc9, 0x6b, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xfe, 0x9f, 0x00, 0xff, - 0xff, 0xe2, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x01, 0xff, - 0xff, 0xec, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0xff, 0xa5, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xe3, 0x85, 0x00, 0xff, - 0xfe, 0xa1, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff, - 0xff, 0xb0, 0x00, 0xff, 0xff, 0xb7, 0x00, 0xff, - 0xff, 0xbd, 0x00, 0xff, 0xff, 0xc3, 0x01, 0xff, - 0xff, 0xc7, 0x00, 0xff, 0xff, 0xcb, 0x00, 0xff, - 0xff, 0xcb, 0x01, 0xff, 0xff, 0xc6, 0x01, 0xff, - 0xff, 0xc1, 0x01, 0xff, 0xff, 0xbb, 0x00, 0xff, - 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xb0, 0x01, 0xff, - 0xff, 0xaa, 0x01, 0xff, 0xff, 0xa2, 0x01, 0xff, - 0xe2, 0x84, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0xd3, 0x74, 0x00, 0xff, 0xff, 0xbd, 0x01, 0xff, - 0xff, 0xf3, 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff, - 0xff, 0xde, 0x00, 0xff, 0xff, 0xd5, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xe7, 0x89, 0x00, 0xff, - 0xff, 0xdb, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff, - 0xff, 0xf4, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xd1, 0x72, 0x00, 0xff, 0xe4, 0x86, 0x00, 0xff, - 0xf4, 0x96, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, - 0xff, 0xac, 0x00, 0xff, 0xff, 0xb2, 0x01, 0xff, - 0xff, 0xb1, 0x00, 0xff, 0xfe, 0xab, 0x00, 0xff, - 0xff, 0xa4, 0x00, 0xff, 0xf0, 0x91, 0x00, 0xff, - 0xdd, 0x7e, 0x00, 0xff, 0xc9, 0x6a, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xff, 0xa4, 0x01, 0xff, 0xff, 0xdb, 0x00, 0xff, - 0xff, 0xd1, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff, - 0xff, 0xbf, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, - 0xcf, 0x70, 0x01, 0xff, 0xff, 0xc2, 0x01, 0xff, - 0xff, 0xd0, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff, - 0xff, 0xe9, 0x00, 0xff, 0xff, 0xf3, 0x01, 0xff, - 0xff, 0xfc, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xab, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xc6, 0x67, 0x00, 0xff, 0xd6, 0x78, 0x01, 0xff, - 0xd5, 0x77, 0x01, 0xff, 0xc2, 0x64, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xc6, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xe7, 0x89, 0x01, 0xff, - 0xfe, 0xc1, 0x00, 0xff, 0xff, 0xb9, 0x00, 0xff, - 0xff, 0xb0, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, - 0xff, 0xa9, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff, - 0xff, 0xc6, 0x01, 0xff, 0xff, 0xd2, 0x00, 0xff, - 0xff, 0xdf, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x00, 0xff, 0xff, 0xb3, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0xe5, 0x87, 0x01, 0xff, - 0xff, 0xf5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xcd, 0x6f, 0x00, 0xff, 0xff, 0xa9, 0x01, 0xff, - 0xff, 0xa1, 0x00, 0xff, 0xf9, 0x9a, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0x5c, 0x00, 0xff, 0xef, 0x91, 0x00, 0xff, - 0xfe, 0xa0, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff, - 0xff, 0xbd, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xbc, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, - 0xff, 0xc6, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xf0, 0x91, 0x01, 0xff, 0xea, 0x8b, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xda, 0x7b, 0x00, 0xff, 0xe9, 0x8b, 0x01, 0xff, - 0xf7, 0x98, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xc3, 0x01, 0xff, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xed, 0x8e, 0x00, 0xff, 0xff, 0xef, 0x01, 0xff, - 0xff, 0xfe, 0x01, 0xff, 0xff, 0xfa, 0x00, 0xff, - 0xff, 0xf5, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5d, 0x00, 0xff, 0xda, 0x7c, 0x01, 0xff, - 0xd6, 0x77, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0x67, 0x00, 0xff, - 0xd4, 0x76, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff, - 0xff, 0xf2, 0x01, 0xff, 0xff, 0xf6, 0x00, 0xff, - 0xff, 0xfa, 0x01, 0xff, 0xff, 0xfc, 0x01, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc5, 0x01, 0xff, - 0xff, 0xee, 0x01, 0xff, 0xff, 0xea, 0x00, 0xff, - 0xff, 0xe7, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xc6, 0x67, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xc0, 0x61, 0x01, 0xff, 0xff, 0xcd, 0x00, 0xff, - 0xff, 0xe2, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff, - 0xff, 0xeb, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xbb, 0x5d, 0x00, 0xff, 0xf3, 0x94, 0x00, 0xff, - 0xff, 0xdd, 0x01, 0xff, 0xff, 0xda, 0x00, 0xff, - 0xff, 0xd8, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xcc, 0x6e, 0x01, 0xff, 0xff, 0xca, 0x00, 0xff, - 0xff, 0xd1, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff, - 0xff, 0xdb, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbc, 0x5d, 0x00, 0xff, 0xbf, 0x60, 0x00, 0xff, - 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff, - 0xfe, 0xc6, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xd6, 0x77, 0x00, 0xff, 0xff, 0xb9, 0x00, 0xff, - 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbb, 0x5c, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, - 0xf4, 0x96, 0x00, 0xff, 0xff, 0xb6, 0x00, 0xff, - 0xff, 0xb6, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xdf, 0x81, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff, - 0xff, 0xb2, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xc9, 0x6b, 0x01, 0xff, 0xff, 0xa5, 0x01, 0xff, - 0xff, 0xa6, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0xe8, 0x89, 0x00, 0xff, 0xf9, 0x9b, 0x00, 0xff, - 0xff, 0xa4, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0x5c, 0x00, 0xff, 0xf1, 0x92, 0x00, 0xff, - 0xf3, 0x94, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xe2, 0x83, 0x00, 0xff, 0xec, 0x8e, 0x01, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0xbc, 0x5d, 0x01, 0xff, 0xd1, 0x73, 0x00, 0xff, - 0xe2, 0x84, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xd6, 0x77, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, - 0xd3, 0x74, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5c, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc3, 0x64, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -}; - -Vtx sun_LightModel_mesh_vtx_cull[8] = { - {{ {-100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {-100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {-100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {-100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {100, -100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, - {{ {100, 100, 0}, 0, {0, 0}, {0, 0, 0, 0} }}, -}; + u8 sun_sun_rgba32[16384] = { + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xed, 0x8e, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xe4, 0x85, + 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x9d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xdb, 0x7d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xac, 0x01, 0xff, 0xe5, 0x87, 0x01, 0xff, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xae, 0x01, 0xff, 0xd1, 0x72, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xba, 0x00, 0xff, + 0xff, 0xaa, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xc4, 0x01, 0xff, 0xfe, 0xba, 0x00, 0xff, 0xc6, 0x67, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xc9, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff, 0xda, 0x7c, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xd9, 0x00, 0xff, 0xff, 0xd1, 0x01, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0xff, 0xd8, 0x00, 0xff, 0xff, 0xd8, 0x01, 0xff, 0xfe, 0xa2, 0x00, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe5, 0x00, 0xff, 0xff, 0xde, 0x00, 0xff, 0xff, 0xb8, 0x01, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe8, 0x01, 0xff, 0xff, 0xe9, 0x01, 0xff, 0xff, 0xcc, + 0x01, 0xff, 0xcd, 0x6f, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf9, 0x00, 0xff, 0xff, 0xf3, 0x00, 0xff, 0xff, 0xec, 0x00, 0xff, + 0xff, 0xae, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf5, 0x00, 0xff, 0xff, 0xf8, + 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xf8, 0x99, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xfa, 0x01, 0xff, 0xff, 0xa5, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xca, 0x00, 0xff, 0xc1, 0x63, 0x01, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xfd, 0x01, 0xff, 0xf6, 0x98, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xef, 0x91, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x01, 0xff, + 0xef, 0x91, 0x00, 0xff, 0xbc, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x01, 0xff, 0xeb, 0x8c, 0x01, 0xff, 0xbb, 0x5d, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xfe, 0xa0, 0x01, 0xff, + 0xef, 0x91, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfd, 0x9e, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xcf, 0x70, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xc6, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xf3, 0x01, 0xff, 0xdc, 0x7e, + 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xc2, 0x01, 0xff, 0xff, 0xb3, 0x00, 0xff, + 0xff, 0xa4, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xb3, 0x01, 0xff, 0xff, 0xb9, + 0x01, 0xff, 0xe2, 0x84, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xf7, 0x01, 0xff, 0xe1, 0x82, 0x00, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xbc, 0x5e, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xec, + 0x00, 0xff, 0xcd, 0x6e, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xe4, 0x00, 0xff, 0xff, 0xd7, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, + 0xff, 0xb9, 0x00, 0xff, 0xcf, 0x70, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, + 0x00, 0xff, 0xff, 0xc7, 0x00, 0xff, 0xff, 0xcf, 0x01, 0xff, 0xf8, 0x99, 0x01, 0xff, 0xbc, 0x5e, 0x01, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xbe, + 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xe5, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff, 0xff, 0xde, 0x00, 0xff, + 0xff, 0xcf, 0x00, 0xff, 0xe1, 0x82, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xd5, 0x00, 0xff, 0xfe, 0xdc, 0x00, 0xff, 0xff, 0xe7, 0x01, 0xff, + 0xff, 0xb2, 0x00, 0xff, 0xd0, 0x72, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xf7, 0x00, 0xff, 0xea, 0x8b, 0x00, 0xff, 0xfc, 0x9e, 0x00, 0xff, 0xff, 0xb0, 0x01, 0xff, + 0xff, 0xb1, 0x00, 0xff, 0xff, 0xa2, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xdc, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xf4, 0x00, 0xff, + 0xff, 0xe7, 0x01, 0xff, 0xf6, 0x98, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xe1, 0x00, 0xff, 0xff, 0xea, 0x00, 0xff, + 0xff, 0xf3, 0x01, 0xff, 0xfe, 0xfc, 0x00, 0xff, 0xfe, 0xcb, 0x00, 0xff, 0xe2, 0x84, 0x00, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xa2, + 0x00, 0xff, 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xc9, 0x01, 0xff, 0xff, 0xda, 0x01, 0xff, 0xff, 0xe1, 0x01, 0xff, + 0xff, 0xe6, 0x01, 0xff, 0xff, 0xe7, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, 0xff, 0xda, 0x01, 0xff, 0xfe, 0xcb, + 0x00, 0xff, 0xff, 0xbd, 0x00, 0xff, 0xff, 0xaa, 0x01, 0xff, 0xf1, 0x93, 0x00, 0xff, 0xda, 0x7c, 0x00, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xfd, 0x00, 0xff, 0xff, 0xb0, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0xff, 0xf5, 0x01, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xe3, + 0x00, 0xff, 0xff, 0xa0, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff, 0xff, 0xd4, 0x00, 0xff, 0xff, 0xdc, + 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff, 0xff, 0xee, 0x00, 0xff, 0xfe, 0xf3, 0x00, 0xff, + 0xfe, 0xf7, 0x00, 0xff, 0xff, 0xfd, 0x00, 0xff, 0xfe, 0xfc, 0x00, 0xff, 0xfe, 0xf9, 0x00, 0xff, 0xff, 0xf5, + 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xe9, 0x00, 0xff, 0xff, 0xe3, 0x01, 0xff, 0xff, 0xdc, 0x00, 0xff, + 0xff, 0xd4, 0x00, 0xff, 0xff, 0xb9, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xcb, 0x01, 0xff, 0xce, 0x6f, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xca, 0x00, 0xff, 0xd5, 0x76, 0x01, 0xff, + 0xbc, 0x5e, 0x01, 0xff, 0xfa, 0x9b, 0x01, 0xff, 0xfe, 0xd2, 0x00, 0xff, 0xfe, 0xe2, 0x00, 0xff, 0xff, 0xf0, + 0x00, 0xff, 0xfe, 0xf5, 0x00, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xfe, 0x01, 0xff, + 0xff, 0xf7, 0x00, 0xff, 0xfe, 0xf0, 0x00, 0xff, 0xff, 0xe4, 0x01, 0xff, 0xff, 0xd4, 0x01, 0xff, 0xff, 0xa7, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, 0xe0, 0x82, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xd4, 0x75, 0x00, 0xff, 0xff, 0xbb, 0x00, 0xff, 0xfe, 0xd7, 0x00, 0xff, 0xff, 0xe8, 0x01, 0xff, 0xff, 0xf7, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xeb, + 0x00, 0xff, 0xff, 0xda, 0x00, 0xff, 0xff, 0xc1, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfb, 0x9d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, + 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xf6, 0x98, 0x01, 0xff, 0xff, 0xcb, 0x01, 0xff, 0xff, 0xdc, 0x01, 0xff, 0xff, 0xed, 0x01, 0xff, 0xff, 0xfb, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xf1, 0x01, 0xff, 0xff, 0xdf, 0x00, 0xff, 0xff, 0xcc, 0x00, 0xff, + 0xf6, 0x97, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xc6, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xca, 0x00, 0xff, 0xfe, 0xe3, 0x00, 0xff, 0xfe, 0xf3, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xf5, 0x00, 0xff, + 0xff, 0xe3, 0x00, 0xff, 0xff, 0xca, 0x01, 0xff, 0xd1, 0x73, 0x01, 0xff, 0xcf, 0x71, 0x01, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xbc, 0x01, 0xff, 0xff, 0xdb, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xf3, 0x01, 0xff, 0xff, 0xd9, 0x01, 0xff, 0xff, 0xb6, 0x00, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0xff, 0xfd, 0x9f, 0x00, 0xff, 0xff, 0xd3, 0x00, 0xff, 0xff, 0xec, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff, 0xff, 0xd1, + 0x01, 0xff, 0xf1, 0x92, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xc9, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, 0xfe, 0xf8, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf5, + 0x01, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xc8, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xcf, 0x71, 0x00, 0xff, 0xc7, 0x68, 0x01, 0xff, 0xbd, 0x5e, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5e, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, + 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff, 0xff, 0xd8, 0x01, 0xff, 0xff, 0xef, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xed, 0x00, 0xff, 0xff, 0xd7, 0x01, 0xff, 0xff, 0xa9, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xf6, 0x00, 0xff, 0xff, 0xe7, 0x01, 0xff, 0xff, 0xd7, 0x01, 0xff, + 0xff, 0xc7, 0x01, 0xff, 0xff, 0xb8, 0x01, 0xff, 0xff, 0xa7, 0x00, 0xff, 0xf6, 0x98, 0x00, 0xff, 0xe7, 0x89, + 0x01, 0xff, 0xd9, 0x7b, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x99, 0x00, 0xff, + 0xff, 0xa6, 0x00, 0xff, 0xff, 0xac, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xfa, 0x9b, 0x01, 0xff, 0xf0, 0x91, + 0x00, 0xff, 0xe4, 0x85, 0x00, 0xff, 0xd9, 0x7a, 0x01, 0xff, 0xcb, 0x6c, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, + 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xca, 0x6b, 0x01, 0xff, 0xff, 0xc5, 0x00, 0xff, 0xff, 0xe4, + 0x01, 0xff, 0xfe, 0xfa, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xfb, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, + 0xff, 0xc5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff, + 0xff, 0xd7, 0x00, 0xff, 0xff, 0xc5, 0x00, 0xff, 0xff, 0xb4, 0x00, 0xff, 0xf4, 0x95, 0x00, 0xff, 0xd0, 0x71, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0xff, 0xaf, 0x00, 0xff, 0xff, 0xbc, 0x01, 0xff, 0xff, 0xca, 0x01, 0xff, 0xff, 0xd9, + 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff, 0xff, 0xec, 0x00, 0xff, 0xff, 0xe8, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, + 0xff, 0xdc, 0x00, 0xff, 0xff, 0xd5, 0x00, 0xff, 0xff, 0xcd, 0x01, 0xff, 0xdf, 0x80, 0x00, 0xff, 0xfe, 0xcb, + 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xe8, 0x01, 0xff, 0xff, 0xcc, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xfa, 0x00, 0xff, + 0xff, 0xe0, 0x00, 0xff, 0xff, 0xb8, 0x00, 0xff, 0xec, 0x8e, 0x01, 0xff, 0xc4, 0x65, 0x00, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0xff, 0xff, 0xd1, + 0x00, 0xff, 0xff, 0xdf, 0x01, 0xff, 0xfe, 0xed, 0x00, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xf4, 0x96, + 0x01, 0xff, 0xff, 0xd1, 0x00, 0xff, 0xff, 0xee, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xec, 0x01, 0xff, 0xff, 0xd0, 0x00, 0xff, 0xec, 0x8d, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe4, 0x01, 0xff, + 0xfe, 0xb5, 0x00, 0xff, 0xe2, 0x83, 0x01, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xfe, 0xe4, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xa8, 0x00, 0xff, 0xff, 0xd6, 0x00, 0xff, 0xff, 0xf3, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xef, 0x00, 0xff, 0xff, 0xd5, 0x01, 0xff, 0xff, 0xa0, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xe3, 0x00, 0xff, 0xff, 0xaf, 0x00, 0xff, + 0xd8, 0x79, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xf7, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xdb, 0x01, 0xff, 0xff, 0xf6, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf4, 0x01, 0xff, 0xff, 0xd9, + 0x00, 0xff, 0xfe, 0xb1, 0x00, 0xff, 0xff, 0xe2, 0x00, 0xff, 0xff, 0xa6, 0x00, 0xff, 0xc9, 0x6a, 0x01, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xc3, 0x00, 0xff, 0xff, 0xe0, 0x01, 0xff, + 0xff, 0xf9, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf7, + 0x00, 0xff, 0xff, 0xde, 0x01, 0xff, 0xfe, 0xc2, 0x00, 0xff, 0xd0, 0x72, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xe5, 0x87, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, + 0xfe, 0xe2, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xfe, 0xfa, 0x00, 0xff, 0xff, 0xe2, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, 0xe1, 0x83, 0x00, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xfe, 0xff, 0x00, 0xff, 0xf4, 0x95, 0x01, 0xff, + 0xff, 0xcd, 0x01, 0xff, 0xff, 0xe5, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xfd, 0x01, 0xff, 0xff, 0xe4, 0x00, 0xff, 0xff, 0xcc, 0x00, 0xff, + 0xf2, 0x93, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, + 0xf1, 0x92, 0x01, 0xff, 0xff, 0xca, 0x00, 0xff, 0xff, 0xe3, 0x01, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xfb, 0x00, 0xff, 0xff, 0xe3, 0x00, 0xff, + 0xff, 0xcb, 0x00, 0xff, 0xf2, 0x93, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xdd, 0x7f, 0x00, 0xff, 0xff, 0xc4, 0x00, 0xff, 0xff, 0xdd, 0x00, 0xff, 0xff, 0xf6, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xf7, 0x00, 0xff, + 0xff, 0xde, 0x01, 0xff, 0xfe, 0xc4, 0x00, 0xff, 0xe1, 0x82, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xca, 0x6b, 0x01, 0xff, 0xff, 0xbb, 0x00, 0xff, 0xff, 0xd7, + 0x00, 0xff, 0xff, 0xf1, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xf2, 0x01, 0xff, 0xff, 0xd9, 0x01, 0xff, 0xff, 0xbc, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0xbc, 0x5d, 0x00, 0xff, 0xbf, 0x60, 0x00, 0xff, 0xfc, 0x9e, 0x00, 0xff, 0xff, 0xdb, 0x00, 0xff, 0xfe, 0xa8, + 0x00, 0xff, 0xfe, 0xcf, 0x00, 0xff, 0xff, 0xea, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xed, 0x01, 0xff, 0xff, 0xd1, 0x00, 0xff, 0xff, 0xac, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, + 0xcd, 0x6f, 0x00, 0xff, 0xff, 0xa5, 0x01, 0xff, 0xff, 0xd9, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xf2, 0x94, 0x00, 0xff, 0xff, 0xc9, 0x01, 0xff, 0xff, 0xe3, 0x00, 0xff, 0xff, 0xfb, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xe6, 0x01, 0xff, 0xff, 0xc9, 0x00, 0xff, 0xf9, 0x9b, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x01, 0xff, 0xff, 0xea, 0x01, 0xff, 0xff, 0xdd, 0x01, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xd6, 0x77, 0x01, 0xff, + 0xff, 0xa9, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xdc, 0x7e, 0x00, 0xff, 0xfe, 0xc1, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff, + 0xfe, 0xf4, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x01, 0xff, 0xff, 0xdf, 0x01, 0xff, 0xff, 0xc2, + 0x00, 0xff, 0xe4, 0x86, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xf3, 0x00, 0xff, 0xff, 0xe3, 0x00, 0xff, 0xff, 0xd5, + 0x01, 0xff, 0xff, 0xc7, 0x01, 0xff, 0xff, 0xb9, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5e, 0x01, 0xff, 0xde, 0x80, 0x00, 0xff, 0xff, 0xaa, 0x01, 0xff, + 0xff, 0xd3, 0x00, 0xff, 0xff, 0xed, 0x01, 0xff, 0xff, 0xfd, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xba, 0x00, 0xff, + 0xfe, 0xd5, 0x00, 0xff, 0xff, 0xee, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xee, 0x00, 0xff, 0xff, 0xd7, + 0x01, 0xff, 0xff, 0xba, 0x01, 0xff, 0xcd, 0x6e, 0x01, 0xff, 0xff, 0xba, 0x01, 0xff, 0xff, 0xc4, 0x01, 0xff, + 0xff, 0xcc, 0x00, 0xff, 0xff, 0xd3, 0x01, 0xff, 0xff, 0xd9, 0x00, 0xff, 0xfe, 0xde, 0x00, 0xff, 0xff, 0xdc, + 0x00, 0xff, 0xfe, 0xcc, 0x00, 0xff, 0xff, 0xbe, 0x01, 0xff, 0xff, 0xaf, 0x00, 0xff, 0xff, 0xa3, 0x01, 0xff, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xc2, 0x64, 0x01, 0xff, 0xe6, 0x87, 0x00, 0xff, 0xff, 0xa7, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff, + 0xff, 0xc8, 0x00, 0xff, 0xff, 0xd8, 0x00, 0xff, 0xff, 0xea, 0x01, 0xff, 0xff, 0xf9, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xb1, 0x01, 0xff, 0xff, 0xce, 0x00, 0xff, 0xff, 0xe6, 0x00, 0xff, 0xff, 0xf9, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x00, 0xff, 0xff, 0xe6, + 0x01, 0xff, 0xff, 0xcf, 0x01, 0xff, 0xff, 0xb1, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xc6, 0x67, 0x01, 0xff, 0xd2, 0x73, + 0x00, 0xff, 0xdf, 0x80, 0x00, 0xff, 0xe9, 0x8b, 0x00, 0xff, 0xf3, 0x95, 0x00, 0xff, 0xfb, 0x9d, 0x00, 0xff, + 0xf6, 0x98, 0x00, 0xff, 0xea, 0x8b, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xc9, 0x6a, + 0x00, 0xff, 0xd8, 0x79, 0x01, 0xff, 0xe6, 0x88, 0x01, 0xff, 0xf5, 0x97, 0x00, 0xff, 0xfe, 0xa6, 0x00, 0xff, + 0xff, 0xb7, 0x01, 0xff, 0xff, 0xc7, 0x01, 0xff, 0xff, 0xd6, 0x00, 0xff, 0xff, 0xe6, 0x00, 0xff, 0xff, 0xf4, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xf0, 0x91, 0x00, 0xff, 0xff, 0xbf, 0x01, 0xff, 0xfe, 0xd4, 0x00, 0xff, 0xff, 0xe9, + 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x00, 0xff, 0xff, 0xeb, + 0x00, 0xff, 0xff, 0xd6, 0x00, 0xff, 0xff, 0xc1, 0x01, 0xff, 0xf1, 0x92, 0x00, 0xff, 0xbc, 0x5e, 0x01, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, + 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xc0, 0x62, + 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xae, 0x01, 0xff, 0xfe, 0xc3, + 0x00, 0xff, 0xfe, 0xd9, 0x00, 0xff, 0xfe, 0xef, 0x00, 0xff, 0xff, 0xfd, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xf8, 0x00, 0xff, 0xfe, 0xee, + 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff, 0xfe, 0xc7, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xd1, 0x73, + 0x00, 0xff, 0xff, 0xb2, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff, 0xff, 0xe2, 0x01, 0xff, 0xfe, 0xf1, 0x00, 0xff, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf9, 0x01, 0xff, 0xff, 0xee, + 0x00, 0xff, 0xff, 0xe2, 0x00, 0xff, 0xff, 0xce, 0x00, 0xff, 0xff, 0xb5, 0x01, 0xff, 0xdf, 0x80, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, + 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xf3, 0x94, 0x01, 0xff, 0xff, 0xb6, 0x00, 0xff, 0xff, 0xd1, 0x01, 0xff, + 0xfe, 0xe4, 0x00, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xfa, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x00, 0xff, 0xff, 0xed, + 0x00, 0xff, 0xfe, 0xe3, 0x00, 0xff, 0xff, 0xd2, 0x01, 0xff, 0xff, 0xba, 0x01, 0xff, 0xf9, 0x9a, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5e, + 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, + 0xff, 0xbf, 0x01, 0xff, 0xfe, 0xd0, 0x00, 0xff, 0xff, 0xdf, 0x01, 0xff, 0xff, 0xec, 0x01, 0xff, 0xff, 0xf5, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xfe, 0x00, 0xff, 0xfe, 0xf3, 0x00, 0xff, 0xff, 0xeb, + 0x01, 0xff, 0xff, 0xde, 0x00, 0xff, 0xff, 0xcf, 0x00, 0xff, 0xff, 0xbf, 0x01, 0xff, 0xff, 0xa6, 0x01, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xa3, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xcd, 0x6f, 0x01, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xff, 0xb7, 0x01, 0xff, 0xff, 0xc9, 0x01, 0xff, 0xff, 0xd7, + 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, 0xff, 0xf1, 0x01, 0xff, 0xff, 0xf7, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, 0xff, 0xf7, 0x01, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xe2, + 0x00, 0xff, 0xff, 0xd3, 0x01, 0xff, 0xff, 0xc4, 0x00, 0xff, 0xff, 0xb3, 0x00, 0xff, 0xfe, 0xa2, 0x00, 0xff, + 0xcd, 0x6e, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xd7, 0x78, 0x01, 0xff, 0xfe, 0xe3, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xf3, 0x95, 0x01, 0xff, 0xff, 0xae, + 0x00, 0xff, 0xfe, 0xbf, 0x00, 0xff, 0xff, 0xcd, 0x01, 0xff, 0xff, 0xdb, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, + 0xff, 0xe9, 0x01, 0xff, 0xff, 0xee, 0x01, 0xff, 0xff, 0xf1, 0x00, 0xff, 0xff, 0xf5, 0x00, 0xff, 0xfe, 0xf8, + 0x00, 0xff, 0xff, 0xfb, 0x00, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xf9, 0x01, 0xff, 0xff, 0xf5, 0x01, 0xff, + 0xff, 0xf1, 0x00, 0xff, 0xff, 0xec, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff, 0xff, 0xe2, 0x00, 0xff, 0xff, 0xda, + 0x00, 0xff, 0xff, 0xcb, 0x01, 0xff, 0xff, 0xbc, 0x00, 0xff, 0xff, 0xac, 0x01, 0xff, 0xed, 0x8e, 0x00, 0xff, + 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xf6, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xbe, 0x01, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xd6, 0x77, 0x01, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xfe, 0xb4, 0x00, 0xff, 0xff, 0xc1, 0x00, 0xff, + 0xff, 0xc8, 0x00, 0xff, 0xff, 0xcf, 0x01, 0xff, 0xff, 0xd5, 0x01, 0xff, 0xff, 0xda, 0x01, 0xff, 0xff, 0xdf, + 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, 0xff, 0xe6, 0x00, 0xff, 0xff, 0xe6, 0x01, 0xff, 0xff, 0xe1, 0x00, 0xff, + 0xff, 0xdd, 0x01, 0xff, 0xff, 0xd7, 0x01, 0xff, 0xff, 0xd2, 0x01, 0xff, 0xff, 0xcd, 0x01, 0xff, 0xff, 0xc7, + 0x01, 0xff, 0xfe, 0xc1, 0x00, 0xff, 0xfe, 0xb3, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xc9, 0x6b, 0x01, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xfe, 0x9f, 0x00, 0xff, 0xff, 0xe2, 0x00, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xf6, 0x01, 0xff, 0xff, 0xec, 0x01, 0xff, 0xff, 0xe3, 0x01, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xa5, 0x00, 0xff, + 0xff, 0xf4, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xe3, 0x85, 0x00, 0xff, + 0xfe, 0xa1, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff, 0xff, 0xb0, 0x00, 0xff, 0xff, 0xb7, 0x00, 0xff, 0xff, 0xbd, + 0x00, 0xff, 0xff, 0xc3, 0x01, 0xff, 0xff, 0xc7, 0x00, 0xff, 0xff, 0xcb, 0x00, 0xff, 0xff, 0xcb, 0x01, 0xff, + 0xff, 0xc6, 0x01, 0xff, 0xff, 0xc1, 0x01, 0xff, 0xff, 0xbb, 0x00, 0xff, 0xfe, 0xb5, 0x00, 0xff, 0xff, 0xb0, + 0x01, 0xff, 0xff, 0xaa, 0x01, 0xff, 0xff, 0xa2, 0x01, 0xff, 0xe2, 0x84, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0xd3, 0x74, + 0x00, 0xff, 0xff, 0xbd, 0x01, 0xff, 0xff, 0xf3, 0x00, 0xff, 0xff, 0xe9, 0x01, 0xff, 0xff, 0xde, 0x00, 0xff, + 0xff, 0xd5, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xe7, 0x89, 0x00, 0xff, + 0xff, 0xdb, 0x01, 0xff, 0xff, 0xe8, 0x01, 0xff, 0xff, 0xf4, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xd1, 0x72, 0x00, 0xff, 0xe4, 0x86, + 0x00, 0xff, 0xf4, 0x96, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xff, 0xac, 0x00, 0xff, 0xff, 0xb2, 0x01, 0xff, + 0xff, 0xb1, 0x00, 0xff, 0xfe, 0xab, 0x00, 0xff, 0xff, 0xa4, 0x00, 0xff, 0xf0, 0x91, 0x00, 0xff, 0xdd, 0x7e, + 0x00, 0xff, 0xc9, 0x6a, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xa4, 0x01, 0xff, 0xff, 0xdb, 0x00, 0xff, + 0xff, 0xd1, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff, 0xff, 0xbf, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, 0xcf, 0x70, 0x01, 0xff, + 0xff, 0xc2, 0x01, 0xff, 0xff, 0xd0, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff, 0xff, 0xe9, 0x00, 0xff, 0xff, 0xf3, + 0x01, 0xff, 0xff, 0xfc, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xab, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xc6, 0x67, 0x00, 0xff, + 0xd6, 0x78, 0x01, 0xff, 0xd5, 0x77, 0x01, 0xff, 0xc2, 0x64, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xff, 0xc6, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, + 0xe7, 0x89, 0x01, 0xff, 0xfe, 0xc1, 0x00, 0xff, 0xff, 0xb9, 0x00, 0xff, 0xff, 0xb0, 0x00, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, + 0xff, 0xa9, 0x01, 0xff, 0xff, 0xb7, 0x00, 0xff, 0xff, 0xc6, 0x01, 0xff, 0xff, 0xd2, 0x00, 0xff, 0xff, 0xdf, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xff, 0xb3, + 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x00, 0xff, 0xbb, 0x5c, + 0x00, 0xff, 0xe5, 0x87, 0x01, 0xff, 0xff, 0xf5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xcd, 0x6f, 0x00, 0xff, 0xff, 0xa9, 0x01, 0xff, 0xff, 0xa1, + 0x00, 0xff, 0xf9, 0x9a, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5c, 0x00, 0xff, + 0xef, 0x91, 0x00, 0xff, 0xfe, 0xa0, 0x00, 0xff, 0xff, 0xae, 0x00, 0xff, 0xff, 0xbd, 0x01, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xff, 0xbc, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, + 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc6, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5c, 0x00, 0xff, 0xbb, 0x5d, + 0x00, 0xff, 0xf0, 0x91, 0x01, 0xff, 0xea, 0x8b, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0xda, 0x7b, 0x00, 0xff, 0xe9, 0x8b, 0x01, 0xff, 0xf7, 0x98, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, + 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xff, 0xc3, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, 0xbc, 0x5d, 0x01, 0xff, 0xed, 0x8e, 0x00, 0xff, + 0xff, 0xef, 0x01, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xfa, 0x00, 0xff, 0xff, 0xf5, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x00, 0xff, 0xda, 0x7c, 0x01, 0xff, 0xd6, 0x77, 0x01, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc6, 0x67, 0x00, 0xff, 0xd4, 0x76, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff, 0xff, 0xf2, 0x01, 0xff, + 0xff, 0xf6, 0x00, 0xff, 0xff, 0xfa, 0x01, 0xff, 0xff, 0xfc, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xbb, 0x5d, 0x00, 0xff, + 0xbb, 0x5c, 0x00, 0xff, 0xff, 0xc5, 0x01, 0xff, 0xff, 0xee, 0x01, 0xff, 0xff, 0xea, 0x00, 0xff, 0xff, 0xe7, + 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0xc6, 0x67, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xc0, 0x61, 0x01, 0xff, 0xff, 0xcd, 0x00, 0xff, + 0xff, 0xe2, 0x00, 0xff, 0xff, 0xe7, 0x00, 0xff, 0xff, 0xeb, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xbb, 0x5d, 0x00, 0xff, 0xbb, 0x5d, 0x00, 0xff, 0xf3, 0x94, 0x00, 0xff, 0xff, 0xdd, 0x01, 0xff, 0xff, 0xda, + 0x00, 0xff, 0xff, 0xd8, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xcc, 0x6e, 0x01, 0xff, + 0xff, 0xca, 0x00, 0xff, 0xff, 0xd1, 0x00, 0xff, 0xff, 0xd7, 0x00, 0xff, 0xff, 0xdb, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x00, 0xff, 0xbf, 0x60, 0x00, 0xff, 0xff, 0xc1, + 0x00, 0xff, 0xff, 0xc8, 0x00, 0xff, 0xfe, 0xc6, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, + 0xd6, 0x77, 0x00, 0xff, 0xff, 0xb9, 0x00, 0xff, 0xff, 0xc1, 0x00, 0xff, 0xff, 0xc8, 0x01, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5c, 0x00, 0xff, 0xbc, 0x5d, + 0x01, 0xff, 0xf4, 0x96, 0x00, 0xff, 0xff, 0xb6, 0x00, 0xff, 0xff, 0xb6, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0xbc, 0x5d, 0x01, 0xff, 0xdf, 0x81, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xff, 0xff, 0xb2, 0x00, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xc9, 0x6b, 0x01, 0xff, 0xff, 0xa5, 0x01, 0xff, 0xff, 0xa6, 0x01, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0xe8, 0x89, 0x00, 0xff, 0xf9, 0x9b, 0x00, 0xff, 0xff, 0xa4, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5c, 0x00, 0xff, 0xf1, 0x92, 0x00, 0xff, + 0xf3, 0x94, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xe2, 0x83, 0x00, 0xff, 0xec, 0x8e, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, + 0xd1, 0x73, 0x00, 0xff, 0xe2, 0x84, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xd6, 0x77, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbc, 0x5d, 0x01, 0xff, 0xd3, 0x74, 0x01, 0xff, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xbb, 0x5c, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x64, 0x00, 0xff, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xbb, 0x5d, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x5d, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, -Vtx sun_LightModel_mesh_vtx_0[4] = { - {{ {-100, -100, 0}, 0, {-16, 2032}, {0, 0, 127, 255} }}, - {{ {100, -100, 0}, 0, {2032, 2032}, {0, 0, 127, 255} }}, - {{ {100, 100, 0}, 0, {2032, -16}, {0, 0, 127, 255} }}, - {{ {-100, 100, 0}, 0, {-16, -16}, {0, 0, 127, 255} }}, -}; + }; -Gfx sun_LightModel_mesh_tri_0[3] = { - gsSPVertex(sun_LightModel_mesh_vtx_0 + 0, 4, 0), - gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), - gsSPEndDisplayList(), -}; + Vtx sun_LightModel_mesh_vtx_cull[8] = { + { { { -100, -100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { -100, -100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + { { { -100, 100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { -100, 100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + { { { 100, -100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 100, -100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + { { { 100, 100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 100, 100, 0 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, + }; -Gfx mat_sun_sun[13] = { - gsSPSetGeometryMode(G_FOG), - gsSPClearGeometryMode(G_CULL_BACK | G_CLIPPING), - gsDPPipeSync(), - gsDPSetCombineLERP(0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0), - gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2), - gsSPTexture(65535, 65535, 0, 0, 1), - gsDPSetPrimColor(0, 0, 255, 255, 255, 128), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_32b_LOAD_BLOCK, 1, sun_sun_rgba32), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0), - gsDPLoadBlock(7, 0, 0, 4095, 64), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b, 16, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 6, 0), - gsDPSetTileSize(0, 0, 0, 252, 252), - gsSPEndDisplayList(), -}; + Vtx sun_LightModel_mesh_vtx_0[4] = { + { { { -100, -100, 0 }, 0, { -16, 2032 }, { 0, 0, 127, 255 } } }, + { { { 100, -100, 0 }, 0, { 2032, 2032 }, { 0, 0, 127, 255 } } }, + { { { 100, 100, 0 }, 0, { 2032, -16 }, { 0, 0, 127, 255 } } }, + { { { -100, 100, 0 }, 0, { -16, -16 }, { 0, 0, 127, 255 } } }, + }; -Gfx mat_revert_sun_sun[4] = { - gsSPClearGeometryMode(G_FOG), - gsSPSetGeometryMode(G_CULL_BACK | G_CLIPPING), - gsDPPipeSync(), - gsSPEndDisplayList(), -}; + Gfx sun_LightModel_mesh_tri_0[3] = { + gsSPVertex(sun_LightModel_mesh_vtx_0 + 0, 4, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSPEndDisplayList(), + }; -Gfx sun_LightModel_mesh[13] = { - gsSPClearGeometryMode(G_LIGHTING), - gsSPVertex(sun_LightModel_mesh_vtx_cull + 0, 8, 0), - gsSPSetGeometryMode(G_LIGHTING), - gsSPCullDisplayList(0, 7), - gsSPDisplayList(mat_sun_sun), - gsSPDisplayList(sun_LightModel_mesh_tri_0), - gsSPDisplayList(mat_revert_sun_sun), - gsDPPipeSync(), - gsSPSetGeometryMode(G_LIGHTING), - gsSPClearGeometryMode(G_TEXTURE_GEN), - gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT), - gsSPTexture(65535, 65535, 0, 0, 0), - gsSPEndDisplayList(), -}; + Gfx mat_sun_sun[13] = { + gsSPSetGeometryMode(G_FOG), + gsSPClearGeometryMode(G_CULL_BACK | G_CLIPPING), + gsDPPipeSync(), + gsDPSetCombineLERP(0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2), + gsSPTexture(65535, 65535, 0, 0, 1), + gsDPSetPrimColor(0, 0, 255, 255, 255, 128), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_32b_LOAD_BLOCK, 1, sun_sun_rgba32), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, + G_TX_WRAP | G_TX_NOMIRROR, 0, 0), + gsDPLoadBlock(7, 0, 0, 4095, 64), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b, 16, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 6, 0, + G_TX_WRAP | G_TX_NOMIRROR, 6, 0), + gsDPSetTileSize(0, 0, 0, 252, 252), + gsSPEndDisplayList(), + }; + Gfx mat_revert_sun_sun[4] = { + gsSPClearGeometryMode(G_FOG), + gsSPSetGeometryMode(G_CULL_BACK | G_CLIPPING), + gsDPPipeSync(), + gsSPEndDisplayList(), + }; + Gfx sun_LightModel_mesh[13] = { + gsSPClearGeometryMode(G_LIGHTING), + gsSPVertex(sun_LightModel_mesh_vtx_cull + 0, 8, 0), + gsSPSetGeometryMode(G_LIGHTING), + gsSPCullDisplayList(0, 7), + gsSPDisplayList(mat_sun_sun), + gsSPDisplayList(sun_LightModel_mesh_tri_0), + gsSPDisplayList(mat_revert_sun_sun), + gsDPPipeSync(), + gsSPSetGeometryMode(G_LIGHTING), + gsSPClearGeometryMode(G_TEXTURE_GEN), + gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT), + gsSPTexture(65535, 65535, 0, 0, 0), + gsSPEndDisplayList(), + }; }; -} +} // namespace Editor diff --git a/src/engine/editor/ObjectPicker.cpp b/src/engine/editor/ObjectPicker.cpp index 9cfeed5f8..51eaf9820 100644 --- a/src/engine/editor/ObjectPicker.cpp +++ b/src/engine/editor/ObjectPicker.cpp @@ -47,7 +47,7 @@ void ObjectPicker::SelectObject(std::vector<GameObject*> objects) { eGizmo.SetGizmo(_selected, ray); eGizmo.Enabled = true; } else { - //eGizmo.Disable(); + // eGizmo.Disable(); eGizmo.Enabled = false; eGizmo._selected = nullptr; } @@ -67,7 +67,9 @@ void ObjectPicker::DragHandle() { } // Is the gizmo being dragged? - if (!eGizmo.Enabled) { return; } + if (!eGizmo.Enabled) { + return; + } float closestDistance = FLT_MAX; std::optional<FVector> closestClickPos; Gizmo::GizmoHandle closestHandle = Gizmo::GizmoHandle::None; @@ -98,7 +100,7 @@ void ObjectPicker::DragHandle() { } }; - switch(static_cast<Gizmo::TranslationMode>(CVarGetInteger("eGizmoMode", 0))) { + switch (static_cast<Gizmo::TranslationMode>(CVarGetInteger("eGizmoMode", 0))) { case Gizmo::TranslationMode::Move: tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedCollision.Triangles); tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenCollision.Triangles); @@ -114,7 +116,6 @@ void ObjectPicker::DragHandle() { tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenScaleCollision.Triangles); tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueScaleCollision.Triangles); break; - } if (closestHandle != Gizmo::GizmoHandle::None && closestClickPos.has_value()) { @@ -132,7 +133,7 @@ void ObjectPicker::Draw() { if (Debug) { Mat4 CursorMtx; - IRotator rot = IRotator(0,0,0); + IRotator rot = IRotator(0, 0, 0); FVector scale = FVector(0.1, 0.1, 0.1); FVector ray = ScreenRayTrace(); @@ -140,9 +141,9 @@ void ObjectPicker::Draw() { float y = (cameras[0].pos[1] + ray.y * 800); float z = (cameras[0].pos[2] + ray.z * 800); - ApplyMatrixTransformations((float(*)[4])&CursorMtx, FVector(x, y, z), rot, scale); - Editor_AddMatrix((float(*)[4])&CursorMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)"__OTR__tracks/sphere"); + ApplyMatrixTransformations((float(*)[4]) & CursorMtx, FVector(x, y, z), rot, scale); + Editor_AddMatrix((float(*)[4]) & CursorMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gDisplayListHead++, (Gfx*) "__OTR__tracks/sphere"); } } @@ -157,7 +158,7 @@ void ObjectPicker::FindObject(Ray ray, std::vector<GameObject*> objects) { boundingBox = 2.0f; } - switch(object->Collision) { + switch (object->Collision) { case GameObject::CollisionType::VTX_INTERSECT: for (const auto& tri : object->Triangles) { float t; @@ -173,12 +174,10 @@ void ObjectPicker::FindObject(Ray ray, std::vector<GameObject*> objects) { case GameObject::CollisionType::BOUNDING_BOX: { float max = 2.0f; float min = -2.0f; - Vec3f boxMin = { object->Pos->x + boundingBox * min, - object->Pos->y + boundingBox * min, + Vec3f boxMin = { object->Pos->x + boundingBox * min, object->Pos->y + boundingBox * min, object->Pos->z + boundingBox * min }; - Vec3f boxMax = { object->Pos->x + boundingBox * max, - object->Pos->y + boundingBox * max, + Vec3f boxMax = { object->Pos->x + boundingBox * max, object->Pos->y + boundingBox * max, object->Pos->z + boundingBox * max }; float t; if (QueryCollisionRayActor(&ray.Origin.x, &ray.Direction.x, boxMin, boxMax, &t)) { @@ -198,10 +197,10 @@ void ObjectPicker::FindObject(Ray ray, std::vector<GameObject*> objects) { } if (closestObject != nullptr) { _selected = closestObject; - // printf("FOUND COLLISION %d\n", type); + // printf("FOUND COLLISION %d\n", type); } else { - // printf("NO COLLISION\n"); + // printf("NO COLLISION\n"); _selected = nullptr; } } -} +} // namespace Editor diff --git a/src/engine/editor/ObjectPicker.h b/src/engine/editor/ObjectPicker.h index e96bddcbc..99706ff45 100644 --- a/src/engine/editor/ObjectPicker.h +++ b/src/engine/editor/ObjectPicker.h @@ -7,22 +7,23 @@ #include "GameObject.h" namespace Editor { - class ObjectPicker { - public: - void SelectObject(std::vector<GameObject*> objects); - void DragHandle(); - void Draw(); - void FindObject(Ray ray, std::vector<GameObject*> objects); - void Load(); - void Tick(); - Gizmo eGizmo; - GameObject* _selected; - private: - bool _draw = false; - GameObject* _lastSelected; - s32 Inverse(MtxF* src, MtxF* dest); - void Copy(MtxF* src, MtxF* dest); - void Clear(MtxF* mf); - bool Debug = false; - }; -} +class ObjectPicker { + public: + void SelectObject(std::vector<GameObject*> objects); + void DragHandle(); + void Draw(); + void FindObject(Ray ray, std::vector<GameObject*> objects); + void Load(); + void Tick(); + Gizmo eGizmo; + GameObject* _selected; + + private: + bool _draw = false; + GameObject* _lastSelected; + s32 Inverse(MtxF* src, MtxF* dest); + void Copy(MtxF* src, MtxF* dest); + void Clear(MtxF* mf); + bool Debug = false; +}; +} // namespace Editor diff --git a/src/engine/editor/SceneManager.cpp b/src/engine/editor/SceneManager.cpp index a2de6656c..c0ba58f2d 100644 --- a/src/engine/editor/SceneManager.cpp +++ b/src/engine/editor/SceneManager.cpp @@ -15,142 +15,146 @@ namespace Editor { - std::shared_ptr<Ship::Archive> CurrentArchive; - std::string SceneFile = ""; +std::shared_ptr<Ship::Archive> CurrentArchive; +std::string SceneFile = ""; - void SaveLevel() { - auto props = gWorldInstance.CurrentCourse->Props; +void SaveLevel() { + auto props = gWorldInstance.CurrentCourse->Props; - if ((CurrentArchive) && (!SceneFile.empty())) { - nlohmann::json data; - - data["Props"] = props.to_json(); + if ((CurrentArchive) && (!SceneFile.empty())) { + nlohmann::json data; - nlohmann::json staticMesh; + data["Props"] = props.to_json(); - for (const auto& mesh : gWorldInstance.StaticMeshActors) { - staticMesh.push_back(mesh->to_json()); - } - data["StaticMeshActors"] = staticMesh; + nlohmann::json staticMesh; - // nlohmann::json actors; + for (const auto& mesh : gWorldInstance.StaticMeshActors) { + staticMesh.push_back(mesh->to_json()); + } + data["StaticMeshActors"] = staticMesh; - // for (const auto& actor : gWorldInstance.Actors) { - // actors.push_back(actor->to_json()); - // } - // data["Actors"] = actors; + // nlohmann::json actors; - // nlohmann::json objects; + // for (const auto& actor : gWorldInstance.Actors) { + // actors.push_back(actor->to_json()); + // } + // data["Actors"] = actors; - // for (const auto& object : gWorldInstance.Objects) { - // objects.push_back(object->to_json()); - // } - // data["Objects"] = objects; + // nlohmann::json objects; - try { - auto dat = data.dump(); - std::vector<uint8_t> stringify; - stringify.assign(dat.begin(), dat.end()); - - bool wrote = GameEngine::Instance->context->GetResourceManager()->GetArchiveManager()->WriteFile(CurrentArchive, SceneFile, stringify); - if (wrote) { - printf("Successfully wrote scene file!\n Wrote: %s\n", SceneFile.c_str()); - } else { - printf("Failed to write scene file!\n"); - } - } catch (const nlohmann::json::exception& e) { - printf("SceneManager::SaveLevel():\n JSON error during dump: %s\n", e.what()); + // for (const auto& object : gWorldInstance.Objects) { + // objects.push_back(object->to_json()); + // } + // data["Objects"] = objects; + + try { + auto dat = data.dump(); + std::vector<uint8_t> stringify; + stringify.assign(dat.begin(), dat.end()); + + bool wrote = GameEngine::Instance->context->GetResourceManager()->GetArchiveManager()->WriteFile( + CurrentArchive, SceneFile, stringify); + if (wrote) { + printf("Successfully wrote scene file!\n Wrote: %s\n", SceneFile.c_str()); + } else { + printf("Failed to write scene file!\n"); } - } else { - printf("Could not save scene file, SceneFile or CurrentArchive not set\n"); + } catch (const nlohmann::json::exception& e) { + printf("SceneManager::SaveLevel():\n JSON error during dump: %s\n", e.what()); } + } else { + printf("Could not save scene file, SceneFile or CurrentArchive not set\n"); } +} - void LoadLevel(std::shared_ptr<Ship::Archive> archive, Course* course, std::string sceneFile) { - SceneFile = sceneFile; +void LoadLevel(std::shared_ptr<Ship::Archive> archive, Course* course, std::string sceneFile) { + SceneFile = sceneFile; - if (archive) { - auto initData = std::make_shared<Ship::ResourceInitData>(); - initData->Parent = archive; - initData->Format = RESOURCE_FORMAT_BINARY; - initData->ByteOrder = Ship::Endianness::Little; - initData->Type = static_cast<uint32_t>(Ship::ResourceType::Json); - initData->ResourceVersion = 0; + if (archive) { + auto initData = std::make_shared<Ship::ResourceInitData>(); + initData->Parent = archive; + initData->Format = RESOURCE_FORMAT_BINARY; + initData->ByteOrder = Ship::Endianness::Little; + initData->Type = static_cast<uint32_t>(Ship::ResourceType::Json); + initData->ResourceVersion = 0; - nlohmann::json data = std::static_pointer_cast<Ship::Json>( - GameEngine::Instance->context->GetResourceManager()->LoadResource(sceneFile, true, initData))->Data; + nlohmann::json data = + std::static_pointer_cast<Ship::Json>( + GameEngine::Instance->context->GetResourceManager()->LoadResource(sceneFile, true, initData)) + ->Data; - if (data.is_null() || data.empty()) { - return; - } + if (data.is_null() || data.empty()) { + return; + } - // Load the Props (deserialize it) - if (data.contains("Props")) { - auto& propsJson = data["Props"]; - try { - course->Props.from_json(propsJson); - } catch(const std::exception& e) { - std::cerr << "SceneManager::LoadLevel() Error parsing track properties: " << e.what() << std::endl; - std::cerr << " Is your scene.json file out of date?" << std::endl; - } - } else { - std::cerr << "Props data not found in the JSON file!" << std::endl; + // Load the Props (deserialize it) + if (data.contains("Props")) { + auto& propsJson = data["Props"]; + try { + course->Props.from_json(propsJson); + } catch (const std::exception& e) { + std::cerr << "SceneManager::LoadLevel() Error parsing track properties: " << e.what() << std::endl; + std::cerr << " Is your scene.json file out of date?" << std::endl; } + } else { + std::cerr << "Props data not found in the JSON file!" << std::endl; + } - // Load the Actors (deserialize them) - if (data.contains("StaticMeshActors")) { - auto& actorsJson = data["StaticMeshActors"]; - gWorldInstance.StaticMeshActors.clear(); // Clear existing actors, if any - - for (const auto& actorJson : actorsJson) { - Load_AddStaticMeshActor(actorJson); - } - } else { - std::cerr << "Actors data not found in the JSON file!" << std::endl; + // Load the Actors (deserialize them) + if (data.contains("StaticMeshActors")) { + auto& actorsJson = data["StaticMeshActors"]; + gWorldInstance.StaticMeshActors.clear(); // Clear existing actors, if any + + for (const auto& actorJson : actorsJson) { + Load_AddStaticMeshActor(actorJson); } + } else { + std::cerr << "Actors data not found in the JSON file!" << std::endl; } } +} - void Load_AddStaticMeshActor(const nlohmann::json& actorJson) { - gWorldInstance.StaticMeshActors.push_back(new StaticMeshActor("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr)); - auto actor = gWorldInstance.StaticMeshActors.back(); - actor->from_json(actorJson); +void Load_AddStaticMeshActor(const nlohmann::json& actorJson) { + gWorldInstance.StaticMeshActors.push_back( + new StaticMeshActor("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr)); + auto actor = gWorldInstance.StaticMeshActors.back(); + actor->from_json(actorJson); - printf("After from_json: Pos(%f, %f, %f), Name: %s, Model: %s\n", - actor->Pos.x, actor->Pos.y, actor->Pos.z, actor->Name.c_str(), actor->Model.c_str()); - gEditor.AddObject(actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) nullptr, 1.0f, - GameObject::CollisionType::BOUNDING_BOX, 20.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) 1); - } + printf("After from_json: Pos(%f, %f, %f), Name: %s, Model: %s\n", actor->Pos.x, actor->Pos.y, actor->Pos.z, + actor->Name.c_str(), actor->Model.c_str()); + gEditor.AddObject(actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) nullptr, 1.0f, + GameObject::CollisionType::BOUNDING_BOX, 20.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) 1); +} - void SetSceneFile(std::shared_ptr<Ship::Archive> archive, std::string sceneFile) { - CurrentArchive = archive; - SceneFile = sceneFile; - } +void SetSceneFile(std::shared_ptr<Ship::Archive> archive, std::string sceneFile) { + CurrentArchive = archive; + SceneFile = sceneFile; +} - void LoadMinimap(std::shared_ptr<Ship::Archive> archive, Course* course, std::string filePath) { - printf("LOADING MINIMAP %s\n", filePath.c_str()); - if (archive) { - auto initData = std::make_shared<Ship::ResourceInitData>(); - initData->Parent = archive; - initData->Format = RESOURCE_FORMAT_BINARY; - initData->ByteOrder = Ship::Endianness::Little; - initData->Type = static_cast<uint32_t>(MK64::ResourceType::Minimap); - initData->ResourceVersion = 0; - - std::shared_ptr<MK64::Minimap> ptr = std::static_pointer_cast<MK64::Minimap>( - GameEngine::Instance->context->GetResourceManager()->LoadResource(filePath, true, initData)); - - if (ptr) { - printf("LOADED MINIMAP!\n"); - MK64::MinimapTexture texture = ptr->Texture; - course->Props.Minimap.Texture = (const char*)texture.Data; - course->Props.Minimap.Width = texture.Width; - course->Props.Minimap.Height = texture.Height; - } else { // Fallback - course->Props.Minimap.Texture = gTextureCourseOutlineMarioRaceway; - course->Props.Minimap.Width = ResourceGetTexWidthByName(course->Props.Minimap.Texture); - course->Props.Minimap.Height = ResourceGetTexHeightByName(course->Props.Minimap.Texture); - } +void LoadMinimap(std::shared_ptr<Ship::Archive> archive, Course* course, std::string filePath) { + printf("LOADING MINIMAP %s\n", filePath.c_str()); + if (archive) { + auto initData = std::make_shared<Ship::ResourceInitData>(); + initData->Parent = archive; + initData->Format = RESOURCE_FORMAT_BINARY; + initData->ByteOrder = Ship::Endianness::Little; + initData->Type = static_cast<uint32_t>(MK64::ResourceType::Minimap); + initData->ResourceVersion = 0; + + std::shared_ptr<MK64::Minimap> ptr = std::static_pointer_cast<MK64::Minimap>( + GameEngine::Instance->context->GetResourceManager()->LoadResource(filePath, true, initData)); + + if (ptr) { + printf("LOADED MINIMAP!\n"); + MK64::MinimapTexture texture = ptr->Texture; + course->Props.Minimap.Texture = (const char*) texture.Data; + course->Props.Minimap.Width = texture.Width; + course->Props.Minimap.Height = texture.Height; + } else { // Fallback + course->Props.Minimap.Texture = gTextureCourseOutlineMarioRaceway; + course->Props.Minimap.Width = ResourceGetTexWidthByName(course->Props.Minimap.Texture); + course->Props.Minimap.Height = ResourceGetTexHeightByName(course->Props.Minimap.Texture); } } } +} // namespace Editor diff --git a/src/engine/editor/SceneManager.h b/src/engine/editor/SceneManager.h index 58699107e..2d174d70c 100644 --- a/src/engine/editor/SceneManager.h +++ b/src/engine/editor/SceneManager.h @@ -2,12 +2,12 @@ #include "engine/courses/Course.h" namespace Editor { - void SaveLevel(); - void LoadLevel(std::shared_ptr<Ship::Archive> archive, Course* course, std::string sceneFile); - void Load_AddStaticMeshActor(const nlohmann::json& actorJson); - void SetSceneFile(std::shared_ptr<Ship::Archive> archive, std::string sceneFile); - void LoadMinimap(std::shared_ptr<Ship::Archive> archive, Course* course, std::string filePath); +void SaveLevel(); +void LoadLevel(std::shared_ptr<Ship::Archive> archive, Course* course, std::string sceneFile); +void Load_AddStaticMeshActor(const nlohmann::json& actorJson); +void SetSceneFile(std::shared_ptr<Ship::Archive> archive, std::string sceneFile); +void LoadMinimap(std::shared_ptr<Ship::Archive> archive, Course* course, std::string filePath); - extern std::shared_ptr<Ship::Archive> CurrentArchive; // This is used to retrieve and write the scene data file - extern std::string SceneFile; -} +extern std::shared_ptr<Ship::Archive> CurrentArchive; // This is used to retrieve and write the scene data file +extern std::string SceneFile; +} // namespace Editor diff --git a/src/engine/items/Items.cpp b/src/engine/items/Items.cpp index e69de29bb..8b1378917 100644 --- a/src/engine/items/Items.cpp +++ b/src/engine/items/Items.cpp @@ -0,0 +1 @@ + diff --git a/src/engine/items/Items.h b/src/engine/items/Items.h index e69de29bb..8b1378917 100644 --- a/src/engine/items/Items.h +++ b/src/engine/items/Items.h @@ -0,0 +1 @@ + diff --git a/src/engine/objects/Bat.cpp b/src/engine/objects/Bat.cpp index 764476064..0c74f3582 100644 --- a/src/engine/objects/Bat.cpp +++ b/src/engine/objects/Bat.cpp @@ -22,7 +22,7 @@ OBat::OBat(const FVector& pos, const IRotator& rot) { Name = "Bat"; find_unused_obj_index(&_objectIndex); - init_texture_object(_objectIndex, (uint8_t*)d_course_banshee_boardwalk_bat_tlut, sBoardwalkTexList, 0x20U, + init_texture_object(_objectIndex, (uint8_t*) d_course_banshee_boardwalk_bat_tlut, sBoardwalkTexList, 0x20U, (u16) 0x00000040); gObjectList[_objectIndex].orientation[0] = rot.pitch; gObjectList[_objectIndex].orientation[1] = rot.roll; @@ -107,8 +107,8 @@ void OBat::Draw(s32 cameraId) { objectIndex = _objectIndex; temp_s7 = &camera1[cameraId]; - OBat::func_80046F60((u8*)gObjectList[objectIndex].activeTLUT, (u8*)gObjectList[objectIndex].activeTexture, 0x00000020, 0x00000040, - 5); + OBat::func_80046F60((u8*) gObjectList[objectIndex].activeTLUT, (u8*) gObjectList[objectIndex].activeTexture, + 0x00000020, 0x00000040, 5); D_80183E80[0] = gObjectList[objectIndex].orientation[0]; D_80183E80[2] = gObjectList[objectIndex].orientation[2]; if ((D_8018CFB0 != 0) || (D_8018CFC8 != 0)) { @@ -122,7 +122,7 @@ void OBat::Draw(s32 cameraId) { D_80183E80[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], temp_s7->pos); func_800431B0(gObjectList[objectIndex].pos, D_80183E80, gObjectList[objectIndex].sizeScaling, - (Vtx*)D_0D0062B0); + (Vtx*) D_0D0062B0); } } } @@ -137,7 +137,7 @@ void OBat::Draw(s32 cameraId) { D_80183E80[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], temp_s7->pos); func_800431B0(gObjectList[objectIndex].pos, D_80183E80, gObjectList[objectIndex].sizeScaling, - (Vtx*)D_0D0062B0); + (Vtx*) D_0D0062B0); } } } @@ -145,7 +145,7 @@ void OBat::Draw(s32 cameraId) { } void OBat::func_80046F60(u8* tlut, u8* arg1, s32 arg2, s32 arg3, s32 arg4) { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007D78); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78); gDPLoadTLUT_pal256(gDisplayListHead++, tlut); rsp_load_texture_mask(arg1, arg2, arg3, arg4); } diff --git a/src/engine/objects/Bat.h b/src/engine/objects/Bat.h index d6b7e8774..c6740c251 100644 --- a/src/engine/objects/Bat.h +++ b/src/engine/objects/Bat.h @@ -20,14 +20,14 @@ extern "C" { /** * OBat - * + * * IRotator does not appear to do anything. * Could not find where origin_pos was at. * So pos does not work either - * + * */ class OBat : public OObject { -public: + public: explicit OBat(const FVector& pos, const IRotator& rot); ~OBat() { @@ -51,7 +51,7 @@ public: void func_8007D794(s32 objectIndex); void func_8007DA4C(s32 objectIndex); -private: + private: FVector _pos; static size_t _count; size_t _idx; diff --git a/src/engine/objects/BombKart.cpp b/src/engine/objects/BombKart.cpp index 53b4a4262..414100b99 100644 --- a/src/engine/objects/BombKart.cpp +++ b/src/engine/objects/BombKart.cpp @@ -32,7 +32,7 @@ size_t OBombKart::_count = 0; OBombKart::OBombKart(FVector pos, TrackWaypoint* waypoint, uint16_t waypointIndex, uint16_t state, f32 unk_3C) { Name = "Bomb Kart"; _idx = _count; - Vec3f _pos = {0, 0, 0}; + Vec3f _pos = { 0, 0, 0 }; if (waypoint) { // Spawn kart on waypoint _pos[0] = waypoint->posX; @@ -162,7 +162,7 @@ void OBombKart::Tick() { } } } - switch(state) { + switch (state) { case States::CCW: circleTimer = (circleTimer + 356) % 360; temp_t6 = (circleTimer * 0xFFFF) / 360; @@ -389,22 +389,21 @@ void OBombKart::Draw(s32 cameraId) { } void OBombKart::DrawBattle(s32 cameraId) { - } void OBombKart::SomeRender(Vec3f arg1) { D_80183E80[0] = 0; D_80183E80[2] = 0x8000; - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0079C8); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0079C8); load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010); D_80183E80[1] = func_800418AC(WheelPos[0][0], WheelPos[0][2], arg1); - func_800431B0(WheelPos[0], D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(WheelPos[0], D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); D_80183E80[1] = func_800418AC(WheelPos[1][0], WheelPos[1][2], arg1); - func_800431B0(WheelPos[1], D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(WheelPos[1], D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); D_80183E80[1] = func_800418AC(WheelPos[2][0], WheelPos[2][2], arg1); - func_800431B0(WheelPos[2], D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(WheelPos[2], D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); D_80183E80[1] = func_800418AC(WheelPos[3][0], WheelPos[3][2], arg1); - func_800431B0(WheelPos[3], D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle); + func_800431B0(WheelPos[3], D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle); gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } @@ -415,13 +414,13 @@ void OBombKart::LoadMtx() { D_80183E50[1] = CenterY + 1.0; D_80183E50[2] = Pos[2]; set_transform_matrix(mat, _Collision.orientationVector, D_80183E50, 0U, 0.5f); - //convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mat); + // convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mat); AddHudMatrix(mat, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW); // gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), // G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B98); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007B98); } void OBombKart::Waypoint(s32 screenId) { @@ -431,10 +430,14 @@ void OBombKart::Waypoint(s32 screenId) { playerWaypoint = gNearestWaypointByPlayerId[screenId]; playerHUD[screenId].unk_74 = 0; - if ((State == States::EXPLODE) || (State == States::DISABLED)) { return; }; + if ((State == States::EXPLODE) || (State == States::DISABLED)) { + return; + }; bombWaypoint = WaypointIndex; waypointDiff = bombWaypoint - playerWaypoint; - if ((waypointDiff < -5) || (waypointDiff > 0x1E)) { return; }; + if ((waypointDiff < -5) || (waypointDiff > 0x1E)) { + return; + }; playerHUD[screenId].unk_74 = 1; } @@ -452,7 +455,8 @@ Player* OBombKart::FindTarget() { void OBombKart::Chase(Player* player, Vec3f pos) { const f32 speed = 2.7f; // Speed the kart uses in a chase - if (!player) return; // Ensure player is valid + if (!player) + return; // Ensure player is valid // Calculate the directional vector toward the player Vec3f direction; @@ -482,7 +486,7 @@ void OBombKart::Chase(Player* player, Vec3f pos) { } if (xz_dist > 0.0f) { - + // Normalize the direction vector in the XZ plane direction[0] /= xz_dist; direction[2] /= xz_dist; @@ -504,4 +508,4 @@ void OBombKart::Chase(Player* player, Vec3f pos) { pos[2] = newPosition[2]; check_bounding_collision(&_Collision, 10.0f, pos[0], pos[1], pos[2]); -}
\ No newline at end of file +} diff --git a/src/engine/objects/BombKart.h b/src/engine/objects/BombKart.h index 29069a00f..b236a13d9 100644 --- a/src/engine/objects/BombKart.h +++ b/src/engine/objects/BombKart.h @@ -18,12 +18,12 @@ extern "C" { /** * Used in VS mode - * + * * This differs from the other vehicle classes in that it does not get added to the standard actor list * So this is sort of its own thing. Draw call in different place too. */ class OBombKart : public OObject { -public: + public: enum States : uint16_t { // 0,1,3,5 DISABLED, CCW, @@ -39,7 +39,7 @@ public: Vec3f Pos; Vec3f WheelPos[4]; //! @todo Turn WheelPos into a struct f32 Unk_3C; - u16 SomeRot; // Some angle + u16 SomeRot; // Some angle u16 WaypointIndex; // The waypoint the kart circles States State = States::DISABLED; u16 BounceTimer = 0; @@ -66,7 +66,8 @@ public: void SomeRender(Vec3f arg1); void LoadMtx(); void Waypoint(s32 screenId); -private: + + private: static size_t _count; s32 _idx; Player* FindTarget(); @@ -74,6 +75,4 @@ private: Vec3f _spawnPos; Player* _target = NULL; - - }; diff --git a/src/engine/objects/Boos.cpp b/src/engine/objects/Boos.cpp index 5bdbd41cf..bc3574e64 100644 --- a/src/engine/objects/Boos.cpp +++ b/src/engine/objects/Boos.cpp @@ -33,7 +33,6 @@ OBoos::OBoos(size_t numBoos, const IPathSpan& leftBoundary, const IPathSpan& act _indices.resize(numBoos, 0); - // Generate objects for (size_t i = 0; i < numBoos; i++) { find_unused_obj_index(&_indices[i]); @@ -54,7 +53,7 @@ void OBoos::Tick() { OBoos::func_8007CA70(); for (size_t i = 0; i < _numBoos; i++) { - objectIndex = _indices[i]; //indexObjectList3[i]; + objectIndex = _indices[i]; // indexObjectList3[i]; object = &gObjectList[objectIndex]; if (object->state != 0) { func_8007C684(objectIndex); @@ -82,7 +81,7 @@ void OBoos::Draw(s32 cameraId) { s32 objectIndex; for (size_t i = 0; i < _numBoos; i++) { - objectIndex = _indices[i]; //indexObjectList3[i]; + objectIndex = _indices[i]; // indexObjectList3[i]; if (gObjectList[objectIndex].state >= 2) { temp_s2 = func_8008A364(objectIndex, cameraId, 0x4000U, 0x00000320); if (CVarGetInteger("gNoCulling", 0) == 1) { @@ -103,7 +102,7 @@ void OBoos::func_800523B8(s32 objectIndex, s32 arg1, u32 arg2) { object = &gObjectList[objectIndex]; object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos); func_800484BC(object->pos, object->orientation, object->sizeScaling, object->primAlpha, (u8*) object->activeTLUT, - (u8*)object->activeTexture, object->vertex, 0x00000030, 0x00000028, 0x00000030, 0x00000028); + (u8*) object->activeTexture, object->vertex, 0x00000030, 0x00000028, 0x00000030, 0x00000028); if ((is_obj_flag_status_active(objectIndex, 0x00000020) != 0) && (arg2 < 0x15F91U)) { func_8004A630(&D_8018C830, object->pos, 0.4f); } @@ -138,7 +137,7 @@ void OBoos::func_8007CA70(void) { void OBoos::func_8007C5B4(s32 objectIndex) { Object* object; - init_texture_object(objectIndex, (u8*)d_course_banshee_boardwalk_boo_tlut, gTextureGhosts, 48, 40); + init_texture_object(objectIndex, (u8*) d_course_banshee_boardwalk_boo_tlut, gTextureGhosts, 48, 40); object = &gObjectList[objectIndex]; object->pos[0] = 0.0f; object->pos[1] = 0.0f; @@ -261,7 +260,7 @@ void OBoos::BooStart(s32 group, s32 playerId) { void OBoos::BooExit(s32 group) { s32 objectIndex; for (size_t i = 0; i < _numBoos; i++) { - objectIndex = _indices[i]; //indexObjectList3[group + temp_a0]; + objectIndex = _indices[i]; // indexObjectList3[group + temp_a0]; gObjectList[objectIndex].unk_0DC += 1; } diff --git a/src/engine/objects/Boos.h b/src/engine/objects/Boos.h index cc49df474..b6ead3fd2 100644 --- a/src/engine/objects/Boos.h +++ b/src/engine/objects/Boos.h @@ -20,23 +20,24 @@ extern "C" { /** * OBoos - * + * * Args use path indices or path points. Recommended to use a span of 10 * for each IPathSpan as that's how the original game did it. Ex. IPathSpan(10, 20) - * + * * Once boos are active, they do not deactivate until the player drives into leftBoundary * or rightBoundary. leftBoundary is really only used to deactivate the boos when the player is * driving in the reverse direction. - * + * * @arg numBoos to show, default 5, maximum 10 allowed due to limited splines * @arg leftBoundary When the player enters this area, deactivate the boos. * @arg active When the player enters this area, activate the boos. * @arg rightBoundary When the player enters this area, deactivate the boos. - * + * */ class OBoos : public OObject { -public: - explicit OBoos(size_t numBoos, const IPathSpan& leftBoundary, const IPathSpan& active, const IPathSpan& rightBoundary); + public: + explicit OBoos(size_t numBoos, const IPathSpan& leftBoundary, const IPathSpan& active, + const IPathSpan& rightBoundary); ~OBoos() { _count--; @@ -59,7 +60,7 @@ public: void BooExit(s32 someIndex); void func_8007C550(s32 objectIndex); -private: + private: FVector _pos; static size_t _count; size_t _idx; diff --git a/src/engine/objects/ChainChomp.cpp b/src/engine/objects/ChainChomp.cpp index 695df1e8a..fe5d45229 100644 --- a/src/engine/objects/ChainChomp.cpp +++ b/src/engine/objects/ChainChomp.cpp @@ -65,12 +65,12 @@ void OChainChomp::func_80055AB8(s32 objectIndex, s32 cameraId) { D_80183E80[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); D_80183E80[2] = 0x8000; - func_800468E0(D_80183E40, D_80183E80, 0.54f, (u8*)d_course_rainbow_road_sphere, (Vtx*)D_0D0062B0, 0x00000020, - 0x00000040, 0x00000020, 0x00000040, 5); + func_800468E0(D_80183E40, D_80183E80, 0.54f, (u8*) d_course_rainbow_road_sphere, (Vtx*) D_0D0062B0, + 0x00000020, 0x00000040, 0x00000020, 0x00000040, 5); } else { rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077D0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077D0); render_animated_model((Armature*) gObjectList[objectIndex].model, (Animation**) gObjectList[objectIndex].vertex, 0, (s16) gObjectList[objectIndex].textureListIndex); @@ -99,7 +99,6 @@ void OChainChomp::func_80085878(s32 objectIndex, s32 arg1) { object_next_state(objectIndex); } - void OChainChomp::func_800859C8(s32 objectIndex, s32 arg1) { Object* object; @@ -119,8 +118,3 @@ void OChainChomp::func_800859C8(s32 objectIndex, s32 arg1) { } func_80074344(objectIndex, &object->surfaceHeight, -0.8f, 0.8f, 0.03f, 0, -1); } - - - - - diff --git a/src/engine/objects/ChainChomp.h b/src/engine/objects/ChainChomp.h index e1eb35347..174f24930 100644 --- a/src/engine/objects/ChainChomp.h +++ b/src/engine/objects/ChainChomp.h @@ -21,10 +21,9 @@ extern "C" { * Animation crash for custom courses */ class OChainChomp : public OObject { -public: + public: explicit OChainChomp(); - ~OChainChomp() { _count--; } @@ -40,7 +39,7 @@ public: void func_80085878(s32 objectIndex, s32 arg1); void func_800859C8(s32 objectIndex, s32 arg1); -private: + private: FVector _pos; static size_t _count; size_t _idx; diff --git a/src/engine/objects/CheepCheep.cpp b/src/engine/objects/CheepCheep.cpp index 5b4157c61..eb83c9922 100644 --- a/src/engine/objects/CheepCheep.cpp +++ b/src/engine/objects/CheepCheep.cpp @@ -57,22 +57,22 @@ void OCheepCheep::Draw(s32 cameraId) { // func_8005217C object = &gObjectList[temp_a3]; if (object->state >= 2) { if (is_obj_flag_status_active(temp_a3, 0x10) != 0) { - rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); - func_800520C0(temp_a3); + rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); + func_800520C0(temp_a3); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007828); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007828); gSPLight(gDisplayListHead++, &D_800E45C0l[0].l[0], LIGHT_1); gSPLight(gDisplayListHead++, &D_800E45C0l[0].a, LIGHT_2); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_banshee_boardwalk_dl_7B38); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_7B38); gSPLight(gDisplayListHead++, &D_800E45C0l[1].l[0], LIGHT_1); gSPLight(gDisplayListHead++, &D_800E45C0l[1].a, LIGHT_2); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_banshee_boardwalk_dl_7978); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_7978); gSPLight(gDisplayListHead++, &D_800E45C0l[2].l[0], LIGHT_1); gSPLight(gDisplayListHead++, &D_800E45C0l[2].a, LIGHT_2); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_banshee_boardwalk_dl_78C0); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_78C0); gSPLight(gDisplayListHead++, &D_800E45C0l[3].l[0], LIGHT_1); gSPLight(gDisplayListHead++, &D_800E45C0l[3].a, LIGHT_2); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_banshee_boardwalk_dl_7650); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_7650); } } } @@ -84,7 +84,7 @@ void OCheepCheep::func_8007BBBC(s32 objectIndex) { object = &gObjectList[objectIndex]; switch (object->state) { case 1: - func_800735BC(objectIndex, (Gfx*)d_course_banshee_boardwalk_dl_cheep_cheep, 2.0f); + func_800735BC(objectIndex, (Gfx*) d_course_banshee_boardwalk_dl_cheep_cheep, 2.0f); set_object_flag(objectIndex, 0x00000010); object->unk_0D5 = 0; break; @@ -129,7 +129,7 @@ void OCheepCheep::init_var_cheep_cheep(s32 objectIndex) { object = &gObjectList[objectIndex]; object->unk_0D5 = 1; object->status = 0; - object->model = (Gfx*)d_course_banshee_boardwalk_dl_cheep_cheep; + object->model = (Gfx*) d_course_banshee_boardwalk_dl_cheep_cheep; object->sizeScaling = 0.2f; object_next_state(objectIndex); set_obj_origin_pos(objectIndex, D_800E634C[0][0], D_800E634C[0][1] + 55.0, D_800E634C[0][2]); diff --git a/src/engine/objects/CheepCheep.h b/src/engine/objects/CheepCheep.h index 32e9a5aeb..db7d05ed3 100644 --- a/src/engine/objects/CheepCheep.h +++ b/src/engine/objects/CheepCheep.h @@ -15,19 +15,13 @@ extern "C" { #include "some_data.h" } - class OCheepCheep : public OObject { -public: - enum CheepType { - RACE, - PODIUM_CEREMONY - }; - - enum Behaviour : uint16_t { - }; + public: + enum CheepType { RACE, PODIUM_CEREMONY }; -public: + enum Behaviour : uint16_t {}; + public: explicit OCheepCheep(const FVector& pos, CheepType type, IPathSpan span); virtual void Tick() override; @@ -38,11 +32,9 @@ public: void func_8007BEC8(s32 objectIndex); void func_8007BFB0(s32 objectIndex); -private: - + private: s32 _idx; CheepType _type; FVector _spawnPos; IPathSpan _span; - }; diff --git a/src/engine/objects/Crab.cpp b/src/engine/objects/Crab.cpp index 82d2b9330..eabd60c96 100644 --- a/src/engine/objects/Crab.cpp +++ b/src/engine/objects/Crab.cpp @@ -4,7 +4,6 @@ #include <vector> #include "CoreMath.h" - #include "port/Game.h" extern "C" { @@ -66,8 +65,7 @@ void OCrab::Draw(s32 cameraId) { func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, - (uint8_t*)gObjectList[objectIndex].activeTexture, vtx, 64, 64, - 64, 32); + (uint8_t*) gObjectList[objectIndex].activeTexture, vtx, 64, 64, 64, 32); } } @@ -76,14 +74,18 @@ void OCrab::DrawModel(s32 cameraId) { s32 objectIndex = _objectIndex; func_8008A364(objectIndex, cameraId, 0x2AABU, 800); if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) { - Camera *camera; + Camera* camera; s32 objectIndex; if (gObjectList[objectIndex].state >= 2) { camera = &camera1[cameraId]; func_8004A6EC(objectIndex, 0.5f); - gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); - draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, (u8*)gObjectList[objectIndex].activeTexture, (Vtx*)common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020); + gObjectList[objectIndex].orientation[1] = + func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); + draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, + gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, + (u8*) gObjectList[objectIndex].activeTexture, (Vtx*) common_vtx_hedgehog, 0x00000040, + 0x00000040, 0x00000040, 0x00000020); } } } diff --git a/src/engine/objects/Crab.h b/src/engine/objects/Crab.h index 4cadd3b87..450fa6597 100644 --- a/src/engine/objects/Crab.h +++ b/src/engine/objects/Crab.h @@ -20,16 +20,16 @@ extern "C" { /** * @arg start x and z spawn location * @arg end x and z patrol location - * + * * Crab patrols between start and end. * The game automatically places the actor on the course surface. * Therefore, providing a Y height is unnecessary. - * + * * Crab appears to have a maximum patrolling distance and will patrol between * end --> max distance rather than start --> end or start --> max distance. */ class OCrab : public OObject { -public: + public: explicit OCrab(const FVector2D& start, const FVector2D& end); virtual void Tick() override; @@ -41,7 +41,7 @@ public: void func_80082C30(s32 objectIndex); void func_80082E18(s32 objectIndex); -private: + private: FVector2D _start; FVector2D _end; static size_t _count; diff --git a/src/engine/objects/Flagpole.cpp b/src/engine/objects/Flagpole.cpp index acd74ba2b..e79f20155 100644 --- a/src/engine/objects/Flagpole.cpp +++ b/src/engine/objects/Flagpole.cpp @@ -48,7 +48,7 @@ void OFlagpole::Draw(s32 cameraId) { // func_80055228 void OFlagpole::func_80055164(s32 objectIndex) { // func_80055164 if (gObjectList[objectIndex].state >= 2) { - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077A0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077A0); rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling); if (gIsGamePaused == 0) { diff --git a/src/engine/objects/Flagpole.h b/src/engine/objects/Flagpole.h index 5824fcf18..d3341b52c 100644 --- a/src/engine/objects/Flagpole.h +++ b/src/engine/objects/Flagpole.h @@ -18,7 +18,7 @@ extern "C" { } class OFlagpole : public OObject { -public: + public: explicit OFlagpole(const FVector& pos, s16 direction); ~OFlagpole() { @@ -37,7 +37,7 @@ public: void func_80083018(s32 objectIndex); void func_80083060(s32 objectIndex); -private: + private: FVector _pos; s16 _direction; static size_t _count; diff --git a/src/engine/objects/GrandPrixBalloons.cpp b/src/engine/objects/GrandPrixBalloons.cpp index 819bde1c6..66cdc17cd 100644 --- a/src/engine/objects/GrandPrixBalloons.cpp +++ b/src/engine/objects/GrandPrixBalloons.cpp @@ -73,7 +73,7 @@ void OGrandPrixBalloons::Draw(s32 cameraId) { return; } - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007E98); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007E98); gDPLoadTLUT_pal256(gDisplayListHead++, gTLUTOnomatopoeia); func_8004B614(0, 0, 0, 0, 0, 0, 0); gDPSetAlphaCompare(gDisplayListHead++, G_AC_THRESHOLD); @@ -84,14 +84,14 @@ void OGrandPrixBalloons::Draw(s32 cameraId) { GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); D_80183E80[0] = 0; D_80183E80[1] = 0x8000; - rsp_load_texture((uint8_t*)gTextureBalloon1, 64, 32); + rsp_load_texture((uint8_t*) gTextureBalloon1, 64, 32); for (var_s1 = 0; var_s1 < _numBalloons; var_s1++) { objectIndex = gObjectParticle3[var_s1]; if ((objectIndex != NULL_OBJECT_ID) && (gObjectList[objectIndex].state >= 2)) { OGrandPrixBalloons::func_80053D74(objectIndex, cameraId, 0); } } - rsp_load_texture((uint8_t*)gTextureBalloon2, 64, 32); + rsp_load_texture((uint8_t*) gTextureBalloon2, 64, 32); for (var_s1 = 0; var_s1 < _numBalloons; var_s1++) { objectIndex = gObjectParticle3[var_s1]; if ((objectIndex != NULL_OBJECT_ID) && (gObjectList[objectIndex].state >= 2)) { @@ -112,8 +112,8 @@ void OGrandPrixBalloons::func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 ver set_color_render((s32) object->unk_084[0], (s32) object->unk_084[1], (s32) object->unk_084[2], (s32) object->unk_084[3], (s32) object->unk_084[4], (s32) object->unk_084[5], (s32) object->primAlpha); - gSPVertex(gDisplayListHead++, (uintptr_t)&vtx[vertexIndex], 4, 0); - gSPDisplayList(gDisplayListHead++, (Gfx*)common_rectangle_display); + gSPVertex(gDisplayListHead++, (uintptr_t) &vtx[vertexIndex], 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); } } @@ -209,7 +209,8 @@ void OGrandPrixBalloons::func_80074E28(s32 objectIndex) { case 0: break; case 3: - OGrandPrixBalloons::func_80041480(&gObjectList[objectIndex].unk_084[6], -0x1000, 0x1000, &gObjectList[objectIndex].unk_084[7]); + OGrandPrixBalloons::func_80041480(&gObjectList[objectIndex].unk_084[6], -0x1000, 0x1000, + &gObjectList[objectIndex].unk_084[7]); if (gObjectList[objectIndex].unk_0AE == 0) { func_80072428(objectIndex); } @@ -228,4 +229,4 @@ void OGrandPrixBalloons::func_80041480(s16* arg0, s16 arg1, s16 arg2, s16* arg3) *arg0 = arg1; *arg3 = -*arg3; } -}
\ No newline at end of file +} diff --git a/src/engine/objects/GrandPrixBalloons.h b/src/engine/objects/GrandPrixBalloons.h index 93ec04479..f3baea750 100644 --- a/src/engine/objects/GrandPrixBalloons.h +++ b/src/engine/objects/GrandPrixBalloons.h @@ -17,14 +17,11 @@ extern "C" { #include "some_data.h" } - - /** * Grand Prix Balloons OObject */ class OGrandPrixBalloons : public OObject { -public: - + public: explicit OGrandPrixBalloons(const FVector& pos); ~OGrandPrixBalloons() { @@ -44,7 +41,7 @@ public: void func_80074E28(s32 objectIndex); void func_80041480(s16* arg0, s16 arg1, s16 arg2, s16* arg3); // Some weird math function -private: + private: static size_t _count; s32 _idx; FVector Pos; diff --git a/src/engine/objects/Hedgehog.cpp b/src/engine/objects/Hedgehog.cpp index ebc5b30bb..230d7330b 100644 --- a/src/engine/objects/Hedgehog.cpp +++ b/src/engine/objects/Hedgehog.cpp @@ -25,7 +25,7 @@ OHedgehog::OHedgehog(const FVector& pos, const FVector2D& patrolPoint, s16 unk) gObjectList[objectId].pos[0] = gObjectList[objectId].origin_pos[0] = pos.x * xOrientation; gObjectList[objectId].pos[1] = gObjectList[objectId].surfaceHeight = pos.y + 6.0; gObjectList[objectId].pos[2] = gObjectList[objectId].origin_pos[2] = pos.z; - gObjectList[objectId].unk_0D5 = (u8)unk; + gObjectList[objectId].unk_0D5 = (u8) unk; gObjectList[objectId].unk_09C = patrolPoint.x * xOrientation; gObjectList[objectId].unk_09E = patrolPoint.z; @@ -38,10 +38,10 @@ void OHedgehog::Tick() { OHedgehog::func_800833D0(objectIndex, _idx); OHedgehog::func_80083248(objectIndex); OHedgehog::func_80083474(objectIndex); - + // This func clears a bit from all hedgehogs. This results in setting the height of all hedgehogs to zero. // The solution is to only clear the bit from the current instance; `self` or `this` - //func_80072120(indexObjectList2, NUM_HEDGEHOGS); + // func_80072120(indexObjectList2, NUM_HEDGEHOGS); clear_object_flag(objectIndex, 0x00600000); // The fix } @@ -78,7 +78,8 @@ void OHedgehog::func_800555BC(s32 objectIndex, s32 cameraId) { func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, - (u8*)gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, 64, 64, 64, 32); + (u8*) gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, 64, 64, 64, + 32); } } @@ -98,7 +99,7 @@ void OHedgehog::func_8004A870(s32 objectIndex, f32 arg1) { // G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); AddHudMatrix(mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B98); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007B98); } } @@ -108,7 +109,8 @@ void OHedgehog::func_8008311C(s32 objectIndex, s32 arg1) { Object* object; Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog); - init_texture_object(objectIndex, (u8*)d_course_yoshi_valley_hedgehog_tlut, sHedgehogTexList, 0x40U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_yoshi_valley_hedgehog_tlut, sHedgehogTexList, 0x40U, + (u16) 0x00000040); object = &gObjectList[objectIndex]; object->activeTLUT = d_course_yoshi_valley_hedgehog_tlut; object->activeTexture = d_course_yoshi_valley_hedgehog; diff --git a/src/engine/objects/Hedgehog.h b/src/engine/objects/Hedgehog.h index 2057d894d..eab1fde15 100644 --- a/src/engine/objects/Hedgehog.h +++ b/src/engine/objects/Hedgehog.h @@ -23,7 +23,7 @@ extern "C" { * @arg unk unknown. Likely actor type. */ class OHedgehog : public OObject { -public: + public: explicit OHedgehog(const FVector& pos, const FVector2D& patrolPoint, s16 unk); ~OHedgehog() { @@ -45,8 +45,7 @@ public: void func_800833D0(s32 objectIndex, s32 arg1); void func_80083474(s32 objectIndex); - -private: + private: FVector _pos; static size_t _count; size_t _idx; diff --git a/src/engine/objects/HotAirBalloon.cpp b/src/engine/objects/HotAirBalloon.cpp index 4e337d98e..242731378 100644 --- a/src/engine/objects/HotAirBalloon.cpp +++ b/src/engine/objects/HotAirBalloon.cpp @@ -22,7 +22,7 @@ OHotAirBalloon::OHotAirBalloon(const FVector& pos) { // Spawn balloon on second lap. if (GetCourse() == GetLuigiRaceway()) { - _visible = (bool*)&D_80165898; + _visible = (bool*) &D_80165898; } else { // Spawn balloon on race start bool mod = true; _visible = &mod; @@ -35,7 +35,7 @@ OHotAirBalloon::OHotAirBalloon(const FVector& pos) { void OHotAirBalloon::Tick() { s32 objectIndex = _objectIndex; - + if (*_visible) { if (gObjectList[objectIndex].state != 0) { OHotAirBalloon::func_80085768(objectIndex); @@ -78,8 +78,8 @@ void OHotAirBalloon::func_80055CCC(s32 objectIndex, s32 cameraId) { func_8004A6EC(objectIndex, (20.0 / test) + 0.5); if (is_obj_index_flag_status_inactive(objectIndex, 0x00100000) != 0) { func_80043328(gObjectList[objectIndex].pos, (u16*) gObjectList[objectIndex].direction_angle, - gObjectList[objectIndex].sizeScaling, (Gfx*)d_course_luigi_raceway_dl_F960); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_luigi_raceway_dl_F650); + gObjectList[objectIndex].sizeScaling, (Gfx*) d_course_luigi_raceway_dl_F960); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_luigi_raceway_dl_F650); } else { D_80183E80[0] = (s16) gObjectList[objectIndex].direction_angle[0]; D_80183E80[1] = @@ -87,8 +87,8 @@ void OHotAirBalloon::func_80055CCC(s32 objectIndex, s32 cameraId) { 0x8000); D_80183E80[2] = (u16) gObjectList[objectIndex].direction_angle[2]; func_80043328(gObjectList[objectIndex].pos, D_80183E80, gObjectList[objectIndex].sizeScaling, - (Gfx*)d_course_luigi_raceway_dl_FBE0); - gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_luigi_raceway_dl_FA20); + (Gfx*) d_course_luigi_raceway_dl_FBE0); + gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_luigi_raceway_dl_FA20); if (gPlayerCountSelection1 == 1) { gObjectList[objectIndex].direction_angle[1] = 0; } @@ -98,7 +98,7 @@ void OHotAirBalloon::func_80055CCC(s32 objectIndex, s32 cameraId) { void OHotAirBalloon::init_hot_air_balloon(s32 objectIndex) { gObjectList[objectIndex].sizeScaling = 1.0f; - gObjectList[objectIndex].model = (Gfx*)d_course_luigi_raceway_dl_F960; + gObjectList[objectIndex].model = (Gfx*) d_course_luigi_raceway_dl_F960; if (gGamestate != CREDITS_SEQUENCE) { set_obj_origin_pos(objectIndex, xOrientation * _pos.x, _pos.y, _pos.z); set_obj_origin_offset(objectIndex, 0.0f, 300.0f, 0.0f); diff --git a/src/engine/objects/HotAirBalloon.h b/src/engine/objects/HotAirBalloon.h index 301e111c4..c80422348 100644 --- a/src/engine/objects/HotAirBalloon.h +++ b/src/engine/objects/HotAirBalloon.h @@ -18,7 +18,7 @@ extern "C" { } class OHotAirBalloon : public OObject { -public: + public: explicit OHotAirBalloon(const FVector& pos); virtual void Tick() override; @@ -28,7 +28,7 @@ public: void func_80085534(s32 objectIndex); void func_80085768(s32 objectIndex); -private: + private: FVector _pos; - bool *_visible; + bool* _visible; }; diff --git a/src/engine/objects/Lakitu.cpp b/src/engine/objects/Lakitu.cpp index 12ca2d7db..4998dc0a9 100644 --- a/src/engine/objects/Lakitu.cpp +++ b/src/engine/objects/Lakitu.cpp @@ -31,7 +31,7 @@ extern "C" { #include "course_offsets.h" #include "data/some_data.h" #include "race_logic.h" -#include "effects.h" +#include "effects.h" #include "memory.h" extern s8 gPlayerCount; } @@ -40,11 +40,11 @@ OLakitu::OLakitu(s32 playerId, LakituType type) { Name = "Lakitu"; _playerId = playerId; - init_object(gIndexLakituList[playerId], (s32)type); + init_object(gIndexLakituList[playerId], (s32) type); } void OLakitu::Activate(LakituType type) { - init_object(gIndexLakituList[_playerId], (s32)type); + init_object(gIndexLakituList[_playerId], (s32) type); } void OLakitu::Tick() { @@ -104,13 +104,14 @@ void OLakitu::Draw(s32 cameraId) { object->orientation[2] = 0x8000; if (func_80072354(objectIndex, 2) != 0) { draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8*) object->activeTLUT, - (u8*)object->activeTexture, object->vertex, (s32) object->textureWidth, + (u8*) object->activeTexture, object->vertex, (s32) object->textureWidth, (s32) object->textureHeight, (s32) object->textureWidth, (s32) object->textureHeight / 2); } else { func_800485C4(object->pos, object->orientation, object->sizeScaling, (s32) object->primAlpha, - (u8*) object->activeTLUT, (u8*)object->activeTexture, object->vertex, (s32) object->textureWidth, - (s32) object->textureHeight, (s32) object->textureWidth, (s32) object->textureHeight / 2); + (u8*) object->activeTLUT, (u8*) object->activeTexture, object->vertex, + (s32) object->textureWidth, (s32) object->textureHeight, (s32) object->textureWidth, + (s32) object->textureHeight / 2); } if (gScreenModeSelection == SCREEN_MODE_1P) { var_f0 = object->pos[0] - camera->pos[0]; @@ -362,7 +363,7 @@ void OLakitu::func_800797AC(s32 playerId) { objectIndex = gIndexLakituList[playerId]; player = &gPlayerOne[playerId]; - //if ((GetCourse() == GetSherbetLand()) && (player->unk_0CA & 1)) { + // if ((GetCourse() == GetSherbetLand()) && (player->unk_0CA & 1)) { if ((CM_GetProps()->LakituTowType == LakituTowType::ICE) && (player->unk_0CA & 1)) { init_object(objectIndex, 7); player->unk_0CA |= 0x10; @@ -765,14 +766,12 @@ void OLakitu::func_8007A66C(s32 objectIndex) { u16 rot = 0x8000 - camera->rot[1]; gObjectList[objectIndex].pos[0] = - (player->pos[0] + - (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - + (player->pos[0] + (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - (sins(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); gObjectList[objectIndex].pos[1] = player->unk_074 + gObjectList[objectIndex].origin_pos[1] + gObjectList[objectIndex].offset[1]; gObjectList[objectIndex].pos[2] = - (player->pos[2] + - (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + + (player->pos[2] + (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + (coss(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); } @@ -780,16 +779,14 @@ void OLakitu::func_8007A778(s32 objectIndex) { Player* player = &gPlayers[_playerId]; Camera* camera = &cameras[_playerId]; u16 rot = 0x8000 - camera->rot[1]; - + gObjectList[objectIndex].pos[0] = - (player->pos[0] + - (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - + (player->pos[0] + (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - (sins(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); gObjectList[objectIndex].pos[1] = player->pos[1] + gObjectList[objectIndex].origin_pos[1] + gObjectList[objectIndex].offset[1]; gObjectList[objectIndex].pos[2] = - (player->pos[2] + - (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + + (player->pos[2] + (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + (coss(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); } @@ -801,7 +798,7 @@ void OLakitu::func_8007A88C(s32 playerId) { player = &gPlayerOne[playerId]; if ((gObjectList[objectIndex].state == 0) && (player->effects & 0x400000)) { - //func_800790E4(playerId); + // func_800790E4(playerId); init_object(gIndexLakituList[playerId], 6); } } @@ -819,7 +816,7 @@ void OLakitu::func_8007AA44(s32 playerId) { OLakitu::func_8007A910(playerId); objectIndex = gIndexLakituList[playerId]; - gLakituTexturePtr = (const char**)&gLakituTextureBuffer[playerId]; + gLakituTexturePtr = (const char**) &gLakituTextureBuffer[playerId]; switch (gObjectList[objectIndex].unk_0D8) { case 1: OLakitu::func_80079114(objectIndex, playerId, 2); @@ -854,4 +851,3 @@ void OLakitu::func_8007AA44(s32 playerId) { break; } } - diff --git a/src/engine/objects/Lakitu.h b/src/engine/objects/Lakitu.h index 1944733ee..514b041db 100644 --- a/src/engine/objects/Lakitu.h +++ b/src/engine/objects/Lakitu.h @@ -20,11 +20,11 @@ extern "C" { * Otherwise Lakitu will animate faster than normal. */ class OLakitu : public OObject { -public: + public: enum LakituType : uint32_t { STARTER = 1, FINISH, // Checkered flag - TOW, // Picks up an out of bounds player + TOW, // Picks up an out of bounds player SECOND_LAP, FINAL_LAP, REVERSE, @@ -36,7 +36,7 @@ public: ICE, // Used in sherbet land to put an ice-cube on the player }; -public: + public: explicit OLakitu(s32 playerId, LakituType type); void Activate(LakituType type); // Triggers Lakitu into a behaviour @@ -76,7 +76,7 @@ public: void func_8007A910(s32 arg0); void func_8007AA44(s32 playerId); // animate lakitu -private: + private: LakituType _type; s32 _playerId; }; diff --git a/src/engine/objects/Mole.cpp b/src/engine/objects/Mole.cpp index 06bd5f56c..b9c542f0c 100644 --- a/src/engine/objects/Mole.cpp +++ b/src/engine/objects/Mole.cpp @@ -145,7 +145,7 @@ void OMole::func_80081AFC(s32 objectIndex, s32 arg1) { // sp2C = D_8018D1B8; // break; // } - //sp2C[object->type] = 0; + // sp2C[object->type] = 0; } break; case 0: @@ -179,20 +179,20 @@ void OMole::func_8008153C(s32 objectIndex) { } u8* mole = (u8*) LOAD_ASSET_RAW(d_course_moo_moo_farm_mole_dirt); - init_object(loopObjectIndex, 0); - gObjectList[loopObjectIndex].activeTLUT = d_course_moo_moo_farm_mole_dirt; - gObjectList[loopObjectIndex].tlutList = mole; - gObjectList[loopObjectIndex].sizeScaling = 0.15f; - gObjectList[loopObjectIndex].velocity[1] = random_int(0x000AU); - gObjectList[loopObjectIndex].velocity[1] = (gObjectList[loopObjectIndex].velocity[1] * 0.1) + 4.8; - gObjectList[loopObjectIndex].unk_034 = random_int(5U); - gObjectList[loopObjectIndex].unk_034 = (gObjectList[loopObjectIndex].unk_034 * 0.01) + 0.8; - gObjectList[loopObjectIndex].orientation[1] = (0x10000 / sp70) * var_s1; - gObjectList[loopObjectIndex].origin_pos[0] = gObjectList[objectIndex].origin_pos[0]; - gObjectList[loopObjectIndex].origin_pos[1] = gObjectList[objectIndex].origin_pos[1] - 13.0; - gObjectList[loopObjectIndex].origin_pos[2] = gObjectList[objectIndex].origin_pos[2]; - break; - } + init_object(loopObjectIndex, 0); + gObjectList[loopObjectIndex].activeTLUT = d_course_moo_moo_farm_mole_dirt; + gObjectList[loopObjectIndex].tlutList = mole; + gObjectList[loopObjectIndex].sizeScaling = 0.15f; + gObjectList[loopObjectIndex].velocity[1] = random_int(0x000AU); + gObjectList[loopObjectIndex].velocity[1] = (gObjectList[loopObjectIndex].velocity[1] * 0.1) + 4.8; + gObjectList[loopObjectIndex].unk_034 = random_int(5U); + gObjectList[loopObjectIndex].unk_034 = (gObjectList[loopObjectIndex].unk_034 * 0.01) + 0.8; + gObjectList[loopObjectIndex].orientation[1] = (0x10000 / sp70) * var_s1; + gObjectList[loopObjectIndex].origin_pos[0] = gObjectList[objectIndex].origin_pos[0]; + gObjectList[loopObjectIndex].origin_pos[1] = gObjectList[objectIndex].origin_pos[1] - 13.0; + gObjectList[loopObjectIndex].origin_pos[2] = gObjectList[objectIndex].origin_pos[2]; + break; + } } } @@ -243,21 +243,15 @@ void OMole::func_80081D34(s32 objectIndex) { } static const char* frames[] = { - gTextureMole1, - gTextureMole2, - gTextureMole3, - gTextureMole4, - gTextureMole5, - gTextureMole6, - gTextureMole7, - d_course_moo_moo_farm_mole_dirt, + gTextureMole1, gTextureMole2, gTextureMole3, gTextureMole4, + gTextureMole5, gTextureMole6, gTextureMole7, d_course_moo_moo_farm_mole_dirt, }; - void OMole::func_80081848(s32 objectIndex) { - init_texture_object(objectIndex, (u8*)d_course_moo_moo_farm_mole_tlut, (const char**) frames, 0x20U, (u16) 0x00000040); - //gObjectList[objectIndex].activeTexture = (const char*)d_course_moo_moo_farm_mole_frames; - //gObjectList[objectIndex].activeTLUT = (const char*)d_course_moo_moo_farm_mole_tlut; + init_texture_object(objectIndex, (u8*) d_course_moo_moo_farm_mole_tlut, (const char**) frames, 0x20U, + (u16) 0x00000040); + // gObjectList[objectIndex].activeTexture = (const char*)d_course_moo_moo_farm_mole_frames; + // gObjectList[objectIndex].activeTLUT = (const char*)d_course_moo_moo_farm_mole_tlut; gObjectList[objectIndex].sizeScaling = 0.15f; gObjectList[objectIndex].textureListIndex = 0; @@ -270,7 +264,6 @@ void OMole::func_80081848(s32 objectIndex) { object_next_state(objectIndex); } - void OMole::func_80081924(s32 objectIndex) { switch (gObjectList[objectIndex].unk_0AE) { case 1: @@ -307,7 +300,6 @@ void OMole::func_80081924(s32 objectIndex) { } } - void OMole::func_80081A88(s32 objectIndex) { switch (gObjectList[objectIndex].unk_0DD) { /* irregular */ case 0: @@ -348,8 +340,8 @@ void OMole::func_80054E10(s32 objectIndex) { void OMole::func_80054EB8() { s32 someIndex; - //for (someIndex = 0; someIndex < NUM_TOTAL_MOLES; someIndex++) { - func_80054E10(_moleIndex); + // for (someIndex = 0; someIndex < NUM_TOTAL_MOLES; someIndex++) { + func_80054E10(_moleIndex); //} } @@ -365,8 +357,8 @@ void OMole::func_80054D00(s32 objectIndex, s32 cameraId) { func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2]; func_80048130(gObjectList[objectIndex].pos, (u16*) D_80183E80, gObjectList[objectIndex].sizeScaling, - (u8*) gObjectList[objectIndex].activeTLUT, (u8*)gObjectList[objectIndex].activeTexture, - (Vtx*)LOAD_ASSET_RAW(D_0D0062B0), 0x00000020, 0x00000040, 0x00000020, 0x00000040, 5); + (u8*) gObjectList[objectIndex].activeTLUT, (u8*) gObjectList[objectIndex].activeTexture, + (Vtx*) LOAD_ASSET_RAW(D_0D0062B0), 0x00000020, 0x00000040, 0x00000020, 0x00000040, 5); } } } @@ -374,22 +366,23 @@ void OMole::func_80054D00(s32 objectIndex, s32 cameraId) { void OMole::func_80054F04(s32 cameraId) { Camera* camera = &camera1[cameraId]; - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0079C8); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0079C8); load_texture_block_rgba16_mirror((u8*) LOAD_ASSET_RAW(d_course_moo_moo_farm_mole_dirt), 0x00000010, 0x00000010); -if (_idx == 0) { - for (size_t i = 0; i < gObjectParticle2_SIZE; i++) { - s32 objectIndex = gObjectParticle2[i]; - Object* object = &gObjectList[objectIndex]; - if (object->state > 0) { - func_8008A364(objectIndex, cameraId, 0x2AABU, 0x000000C8); - if ((is_obj_flag_status_active(objectIndex, VISIBLE) != 0) && (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) { - object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos); - rsp_set_matrix_gObjectList(objectIndex); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D006980); + if (_idx == 0) { + for (size_t i = 0; i < gObjectParticle2_SIZE; i++) { + s32 objectIndex = gObjectParticle2[i]; + Object* object = &gObjectList[objectIndex]; + if (object->state > 0) { + func_8008A364(objectIndex, cameraId, 0x2AABU, 0x000000C8); + if ((is_obj_flag_status_active(objectIndex, VISIBLE) != 0) && + (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) { + object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos); + rsp_set_matrix_gObjectList(objectIndex); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D006980); + } } } } -} gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } diff --git a/src/engine/objects/Mole.h b/src/engine/objects/Mole.h index 1457c72cc..07293f8f9 100644 --- a/src/engine/objects/Mole.h +++ b/src/engine/objects/Mole.h @@ -20,7 +20,7 @@ extern "C" { class OMoleGroup; class OMole : public OObject { -public: + public: explicit OMole(FVector pos, OMoleGroup* group); virtual void Tick() override; @@ -41,7 +41,8 @@ public: void func_8008153C(s32 objectIndex); s32 _moleIndex; -private: + + private: static size_t _count; size_t _idx; OMoleGroup* _group; diff --git a/src/engine/objects/MoleGroup.cpp b/src/engine/objects/MoleGroup.cpp index 6e98edbbb..0e114c274 100644 --- a/src/engine/objects/MoleGroup.cpp +++ b/src/engine/objects/MoleGroup.cpp @@ -10,14 +10,14 @@ extern "C" { OMoleGroup::OMoleGroup(std::vector<FVector> spawns) { for (auto& pos : spawns) { - pos.x * xOrientation; + pos.x* xOrientation; OMole* ptr = reinterpret_cast<OMole*>(gWorldInstance.AddObject(new OMole(pos, this))); - _moles.push_back({ptr, pos, false}); + _moles.push_back({ ptr, pos, false }); } } void OMoleGroup::Tick() { - for (auto &mole : _moles) { + for (auto& mole : _moles) { if (gObjectList[mole.Mole->_objectIndex].state == 0) { func_80081FF4(mole.Mole->_objectIndex); } else { diff --git a/src/engine/objects/MoleGroup.h b/src/engine/objects/MoleGroup.h index dfb920985..2db36caed 100644 --- a/src/engine/objects/MoleGroup.h +++ b/src/engine/objects/MoleGroup.h @@ -9,7 +9,7 @@ class OMole; class OMoleGroup : public OObject { -public: + public: struct MoleEntry { OMole* Mole; FVector Pos; @@ -22,6 +22,5 @@ public: void func_80081FF4(s32 objectIndex); - std::vector<MoleEntry> _moles; }; diff --git a/src/engine/objects/Object.cpp b/src/engine/objects/Object.cpp index 4e4fd6766..88f1dad1b 100644 --- a/src/engine/objects/Object.cpp +++ b/src/engine/objects/Object.cpp @@ -4,20 +4,25 @@ #include "World.h" extern "C" { - #include "camera.h" +#include "camera.h" } +// GameActor() - //GameActor() - -OObject::OObject() {} +OObject::OObject() { +} - // Virtual functions to be overridden by derived classes -void OObject::Tick() { } -void OObject::Tick60fps() {} -void OObject::Draw(s32 cameraId) { } -void OObject::Expire() { } +// Virtual functions to be overridden by derived classes +void OObject::Tick() { +} +void OObject::Tick60fps() { +} +void OObject::Draw(s32 cameraId) { +} +void OObject::Expire() { +} void OObject::Destroy() { bPendingDestroy = true; } -void OObject::Reset() { } +void OObject::Reset() { +} diff --git a/src/engine/objects/Object.h b/src/engine/objects/Object.h index 9dd44397b..98d7fc99c 100644 --- a/src/engine/objects/Object.h +++ b/src/engine/objects/Object.h @@ -3,12 +3,12 @@ #include <libultraship.h> extern "C" { - #include "camera.h" - #include "objects.h" +#include "camera.h" +#include "objects.h" } class OObject { -public: + public: uint8_t uuid[16]; Object o; const char* Name = ""; diff --git a/src/engine/objects/Penguin.cpp b/src/engine/objects/Penguin.cpp index d283101b3..147922896 100644 --- a/src/engine/objects/Penguin.cpp +++ b/src/engine/objects/Penguin.cpp @@ -33,7 +33,6 @@ extern "C" { extern s8 gPlayerCount; } - OPenguin::OPenguin(FVector pos, u16 direction, PenguinType type, Behaviour behaviour) { Name = "Penguin"; _type = type; @@ -43,13 +42,13 @@ OPenguin::OPenguin(FVector pos, u16 direction, PenguinType type, Behaviour behav init_object(_objectIndex, 0); - Object *object = &gObjectList[_objectIndex]; + Object* object = &gObjectList[_objectIndex]; object->origin_pos[0] = pos.x * xOrientation; object->origin_pos[1] = pos.y; object->origin_pos[2] = pos.z; object->unk_0C6 = direction; - switch(type) { + switch (type) { case PenguinType::CHICK: object->surfaceHeight = 5.0f; object->sizeScaling = 0.04f; @@ -91,8 +90,7 @@ void OPenguin::Tick(void) { } else { func_80089820(objectIndex, 1.5f, 1.25f, 0x1900A046U); } - if ((is_obj_flag_status_active(objectIndex, 0x02000000) != 0) && - (func_80072354(objectIndex, 0x00000020) != 0)) { + if ((is_obj_flag_status_active(objectIndex, 0x02000000) != 0) && (func_80072354(objectIndex, 0x00000020) != 0)) { func_800722A4(objectIndex, 0x00000060); clear_object_flag(objectIndex, 0x02000000); } @@ -113,7 +111,6 @@ void OPenguin::Draw(s32 cameraId) { var_s3 = 0x00015F90; } - if (gObjectList[objectIndex].state >= 2) { // This code decreased draw dist if there's more players. @@ -121,9 +118,9 @@ void OPenguin::Draw(s32 cameraId) { // It seems to check the angle of the camera. // These changes were so instance indices are not required. - //if (gPlayerCountSelection1 == 1) { - var_s1 = 0x4000; - drawDistance = 1500; + // if (gPlayerCountSelection1 == 1) { + var_s1 = 0x4000; + drawDistance = 1500; //} else { // if (func_80072320(objectIndex, 8) != 0) { // drawDistance = 500; @@ -283,7 +280,6 @@ void OPenguin::func_8008502C(s32 objectIndex) { func_800873F4(objectIndex); } - void OPenguin::EmperorPenguin(s32 objectIndex) { switch (gObjectList[objectIndex].state) { case 0: @@ -304,8 +300,8 @@ void OPenguin::InitEmperorPenguin(s32 objectIndex) { object->unk_0D8 = 0; object->model = (Gfx*) d_course_sherbet_land_unk_data1; object->vertex = (Vtx*) d_course_sherbet_land_unk_data11; - //object->sizeScaling = 0.2f; - //object->boundingBoxSize = 0x000C; + // object->sizeScaling = 0.2f; + // object->boundingBoxSize = 0x000C; object->unk_09C = 1; set_obj_direction_angle(objectIndex, 0U, 0U, 0U); object->unk_0DD = 1; @@ -372,14 +368,14 @@ void OPenguin::InitOtherPenguin(s32 objectIndex) { object->unk_0D8 = 0; object->model = (Gfx*) d_course_sherbet_land_unk_data1; object->vertex = (Vtx*) d_course_sherbet_land_unk_data11; - //object->boundingBoxSize = 4; + // object->boundingBoxSize = 4; object->unk_09C = 2; object->unk_04C = random_int(300); set_object_flag(objectIndex, 0x04000220); // This code has been significantly refactored from the original func_800845C8 // Into a switch statement instead of checking for the index of the penguin - switch(_bhv) { + switch (_bhv) { case Behaviour::CIRCLE: object->unk_01C[1] = Diameter; @@ -391,7 +387,7 @@ void OPenguin::InitOtherPenguin(s32 objectIndex) { _toggle = !_toggle; - //object->unk_0DD = 2; + // object->unk_0DD = 2; func_800722A4(objectIndex, 8); break; case Behaviour::SLIDE3: diff --git a/src/engine/objects/Penguin.h b/src/engine/objects/Penguin.h index 91d5687b9..471b553db 100644 --- a/src/engine/objects/Penguin.h +++ b/src/engine/objects/Penguin.h @@ -16,17 +16,12 @@ extern "C" { } class OPenguin : public OObject { -public: - enum PenguinType : uint32_t { - CHICK, - ADULT, - CREDITS, - EMPEROR - }; + public: + enum PenguinType : uint32_t { CHICK, ADULT, CREDITS, EMPEROR }; enum Behaviour : uint16_t { DISABLED, - STRUT, // Emperor penguin + STRUT, // Emperor penguin CIRCLE, // Waddle in a circle SLIDE3, SLIDE4, @@ -34,7 +29,7 @@ public: SLIDE6, }; -public: + public: f32 Diameter = 0.0f; // Waddle in a circle around the spawn point at this diameter. uint16_t MirrorModeAngleOffset; @@ -43,7 +38,8 @@ public: virtual void Tick() override; virtual void Draw(s32 cameraId) override; virtual void Reset() override; -private: + + private: void Behaviours(s32 objectIndex); void EmperorPenguin(s32 objectIndex); void func_80085080(s32 objectIndex); diff --git a/src/engine/objects/Podium.cpp b/src/engine/objects/Podium.cpp index ec396ca53..5e50ee092 100644 --- a/src/engine/objects/Podium.cpp +++ b/src/engine/objects/Podium.cpp @@ -33,8 +33,8 @@ OPodium::OPodium(const FVector& pos) { find_unused_obj_index(&_podium2Index); find_unused_obj_index(&_podium3Index); - //init_object(objectIndex, 0); - //set_obj_origin_pos(objectIndex, pos.x - 1.5, pos.y, pos.z); + // init_object(objectIndex, 0); + // set_obj_origin_pos(objectIndex, pos.x - 1.5, pos.y, pos.z); } void OPodium::Tick() { // func_80086604 @@ -66,43 +66,43 @@ void OPodium::Tick() { // func_80086604 } void OPodium::Draw(s32 cameraId) { // func_80055F48 - Object* object = &gObjectList[_podium1Index]; - if (object->state >= 2) { - //func_80043220(object->pos, object->direction_angle, object->sizeScaling, object->model); - rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077A0); - gSPDisplayList(gDisplayListHead++, object->model); - } + Object* object = &gObjectList[_podium1Index]; + if (object->state >= 2) { + // func_80043220(object->pos, object->direction_angle, object->sizeScaling, object->model); + rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077A0); + gSPDisplayList(gDisplayListHead++, object->model); + } - object = &gObjectList[_podium2Index]; - if (object->state >= 2) { - //func_80043220(object->pos, object->direction_angle, object->sizeScaling, object->model); - rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077A0); - gSPDisplayList(gDisplayListHead++, object->model); - } + object = &gObjectList[_podium2Index]; + if (object->state >= 2) { + // func_80043220(object->pos, object->direction_angle, object->sizeScaling, object->model); + rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077A0); + gSPDisplayList(gDisplayListHead++, object->model); + } - object = &gObjectList[_podium3Index]; - if (object->state >= 2) { - //func_80043220(object->pos, object->direction_angle, object->sizeScaling, object->model); - rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077A0); - gSPDisplayList(gDisplayListHead++, object->model); - } + object = &gObjectList[_podium3Index]; + if (object->state >= 2) { + // func_80043220(object->pos, object->direction_angle, object->sizeScaling, object->model); + rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077A0); + gSPDisplayList(gDisplayListHead++, object->model); + } } void OPodium::func_8008629C(s32 objectIndex, s32 arg1) { switch (arg1) { /* irregular */ case 0: - gObjectList[objectIndex].model = (Gfx*)podium_dl3; + gObjectList[objectIndex].model = (Gfx*) podium_dl3; gObjectList[objectIndex].unk_04C = 0x00000038; break; case 1: - gObjectList[objectIndex].model = (Gfx*)podium2_dl3; + gObjectList[objectIndex].model = (Gfx*) podium2_dl3; gObjectList[objectIndex].unk_04C = 0x0000002B; break; case 2: - gObjectList[objectIndex].model = (Gfx*)podium3_dl3; + gObjectList[objectIndex].model = (Gfx*) podium3_dl3; gObjectList[objectIndex].unk_04C = 0x0000001E; break; default: diff --git a/src/engine/objects/Podium.h b/src/engine/objects/Podium.h index fafdfe63d..55ab64709 100644 --- a/src/engine/objects/Podium.h +++ b/src/engine/objects/Podium.h @@ -16,14 +16,11 @@ extern "C" { #include "some_data.h" } - class OPodium : public OObject { -public: - enum Behaviour : uint16_t { - }; - -public: + public: + enum Behaviour : uint16_t {}; + public: explicit OPodium(const FVector& pos); virtual void Tick() override; @@ -32,7 +29,7 @@ public: void func_80086424(s32 objectIndex); void func_80086528(s32 objectIndex, s32 arg1); -private: + private: s32 _podium1Index; s32 _podium2Index; s32 _podium3Index; diff --git a/src/engine/objects/Seagull.cpp b/src/engine/objects/Seagull.cpp index 17c35c07d..0a32d1ee8 100644 --- a/src/engine/objects/Seagull.cpp +++ b/src/engine/objects/Seagull.cpp @@ -49,7 +49,6 @@ OSeagull::OSeagull(FVector pos) { init_object(_objectIndex, 0); - set_obj_origin_pos(_objectIndex, pos.x, pos.y, pos.z); if (_idx < (NUM_SEAGULLS / 2)) { gObjectList[_objectIndex].unk_0D5 = 0; @@ -64,32 +63,32 @@ void OSeagull::Tick() { Object* object; s32 objectIndex = _objectIndex; - object = &gObjectList[objectIndex]; - if (object->state == 0) { - return; - } + object = &gObjectList[objectIndex]; + if (object->state == 0) { + return; + } - OSeagull::func_80082714(objectIndex, _idx); - OSeagull::func_8008275C(objectIndex); - if (func_80072320(objectIndex, 2) != 0) { - func_800722CC(objectIndex, 2); - if (D_80165A90 != 0) { - D_80165A90 = 0; - D_80183E40[0] = 0.0f; - D_80183E40[1] = 0.0f; - D_80183E40[2] = 0.0f; - if (gGamestate != CREDITS_SEQUENCE) { - func_800C98B8(object->pos, D_80183E40, SOUND_ARG_LOAD(0x19, 0x01, 0x70, 0x43)); - } else { - if (_idx == 1) { - if (gCutsceneShotTimer <= 150) { - object = &gObjectList[_objectIndex]; - func_800C98B8(object->pos, D_80183E40, SOUND_ARG_LOAD(0x19, 0x01, 0x70, 0x43)); - } + OSeagull::func_80082714(objectIndex, _idx); + OSeagull::func_8008275C(objectIndex); + if (func_80072320(objectIndex, 2) != 0) { + func_800722CC(objectIndex, 2); + if (D_80165A90 != 0) { + D_80165A90 = 0; + D_80183E40[0] = 0.0f; + D_80183E40[1] = 0.0f; + D_80183E40[2] = 0.0f; + if (gGamestate != CREDITS_SEQUENCE) { + func_800C98B8(object->pos, D_80183E40, SOUND_ARG_LOAD(0x19, 0x01, 0x70, 0x43)); + } else { + if (_idx == 1) { + if (gCutsceneShotTimer <= 150) { + object = &gObjectList[_objectIndex]; + func_800C98B8(object->pos, D_80183E40, SOUND_ARG_LOAD(0x19, 0x01, 0x70, 0x43)); } } } } + } //} if (D_80165900 != 0) { D_80165900 -= 1; @@ -122,7 +121,7 @@ void OSeagull::func_800552BC(s32 objectIndex) { if (gObjectList[objectIndex].state >= 2) { rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].direction_angle, gObjectList[objectIndex].sizeScaling); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077D0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077D0); if (gIsGamePaused == 0) { gObjectList[objectIndex].unk_0A2 = render_animated_model((Armature*) gObjectList[objectIndex].model, (Animation**) gObjectList[objectIndex].vertex, 0, @@ -180,7 +179,6 @@ void OSeagull::func_8008241C(s32 objectIndex, s32 arg1) { object_next_state(objectIndex); } - void OSeagull::func_80082714(s32 objectIndex, s32 arg1) { switch (gObjectList[objectIndex].state) { case 1: @@ -190,4 +188,4 @@ void OSeagull::func_80082714(s32 objectIndex, s32 arg1) { default: break; } -}
\ No newline at end of file +} diff --git a/src/engine/objects/Seagull.h b/src/engine/objects/Seagull.h index 42474159e..a5ee71b38 100644 --- a/src/engine/objects/Seagull.h +++ b/src/engine/objects/Seagull.h @@ -18,7 +18,7 @@ extern "C" { //! @todo unk_0D5 needs to be a struct variable probably. What does it do? Behaviour? class OSeagull : public OObject { -public: + public: explicit OSeagull(FVector pos); ~OSeagull() { @@ -37,11 +37,12 @@ public: void func_8008275C(s32 objectIndex); void func_8008241C(s32 objectIndex, s32 arg1); void func_80082714(s32 objectIndex, s32 arg1); -private: + + private: FVector _pos; static size_t _count; s32 _idx; bool _toggle; - SplineData *spline; + SplineData* spline; }; diff --git a/src/engine/objects/Snowman.cpp b/src/engine/objects/Snowman.cpp index 12beb9e47..581ffbc69 100644 --- a/src/engine/objects/Snowman.cpp +++ b/src/engine/objects/Snowman.cpp @@ -27,7 +27,7 @@ OSnowman::OSnowman(const FVector& pos) { gObjectList[_headIndex].origin_pos[0] = pos.x * xOrientation; gObjectList[_headIndex].origin_pos[1] = pos.y + 5.0 + 3.0; gObjectList[_headIndex].origin_pos[2] = pos.z; - gObjectList[_headIndex].pos[0] = pos.x * xOrientation; + gObjectList[_headIndex].pos[0] = pos.x * xOrientation; gObjectList[_headIndex].pos[1] = pos.y + 5.0 + 3.0; gObjectList[_headIndex].pos[2] = pos.z; @@ -38,7 +38,7 @@ OSnowman::OSnowman(const FVector& pos) { gObjectList[_bodyIndex].origin_pos[2] = pos.z; gObjectList[_bodyIndex].unk_0D5 = 0; // Section Id no longer used. - gObjectList[_bodyIndex].pos[0] = pos.x * xOrientation; + gObjectList[_bodyIndex].pos[0] = pos.x * xOrientation; gObjectList[_bodyIndex].pos[1] = pos.y + 3.0; gObjectList[_bodyIndex].pos[2] = pos.z; @@ -71,14 +71,15 @@ void OSnowman::Tick() { } } - //for (var_s0 = 0; var_s0 < NUM_SNOWMEN; var_s0++) { + // for (var_s0 = 0; var_s0 < NUM_SNOWMEN; var_s0++) { var_s4 = _bodyIndex; var_s3 = _headIndex; OSnowman::func_80083A94(var_s3); // snowman head OSnowman::func_80083C04(var_s4); // snowman body if (is_obj_index_flag_status_inactive(var_s4, 0x00001000) != 0) { object = &gObjectList[var_s4]; - if ((are_players_in_course_section(object->unk_0D5 - 1, object->unk_0D5 + 1) != 0) && (func_80089B50(var_s4) != 0)) { + if ((are_players_in_course_section(object->unk_0D5 - 1, object->unk_0D5 + 1) != 0) && + (func_80089B50(var_s4) != 0)) { set_object_flag(var_s4, 0x00001000); clear_object_flag(var_s4, 0x00000010); func_800726CC(var_s4, 0x0000000A); @@ -123,17 +124,16 @@ void OSnowman::DrawHead(s32 cameraId) { D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2]; if (is_obj_flag_status_active(objectIndex, 0x00000010) != 0) { draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80, - gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, - (u8*)gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, - 0x00000040, 0x00000040, 0x00000040, 0x00000020); + gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, + (u8*) gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, + 0x00000040, 0x00000040, 0x00000040, 0x00000020); } objectIndex = _headIndex; D_80183E80[0] = (s16) gObjectList[objectIndex].orientation[0]; D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2]; - draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80, - gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, - (u8*)gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, 0x00000040, - 0x00000040, 0x00000040, 0x00000020); + draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80, gObjectList[objectIndex].sizeScaling, + (u8*) gObjectList[objectIndex].activeTLUT, (u8*) gObjectList[objectIndex].activeTexture, + gObjectList[objectIndex].vertex, 0x00000040, 0x00000040, 0x00000040, 0x00000020); } } } @@ -146,7 +146,8 @@ void OSnowman::DrawBody(s32 cameraId) { Object* object; sp44 = &camera1[cameraId]; - load_texture_and_tlut((u8*)d_course_frappe_snowland_snow_tlut, (u8*)d_course_frappe_snowland_snow, 0x00000020, 0x00000020); + load_texture_and_tlut((u8*) d_course_frappe_snowland_snow_tlut, (u8*) d_course_frappe_snowland_snow, 0x00000020, + 0x00000020); //! @todo quick hack to add the snow particles on hit. Need to separate into its own class if (_idx == 0) { @@ -159,7 +160,7 @@ void OSnowman::DrawBody(s32 cameraId) { if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) { object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], sp44->pos); rsp_set_matrix_gObjectList(objectIndex); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0069E0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0069E0); } } } @@ -215,7 +216,8 @@ void OSnowman::func_80083BE4(s32 objectIndex) { void OSnowman::func_80083868(s32 objectIndex) { Object* object; Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(D_0D0061B0); - init_texture_object(objectIndex, (u8*)d_course_frappe_snowland_snowman_tlut, (const char**)sSnowmanHeadList, 0x40U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_frappe_snowland_snowman_tlut, (const char**) sSnowmanHeadList, + 0x40U, (u16) 0x00000040); object = &gObjectList[objectIndex]; object->vertex = vtx; object->sizeScaling = 0.1f; @@ -259,7 +261,8 @@ void OSnowman::func_80083948(s32 objectIndex) { break; } object_calculate_new_pos_offset(objectIndex); - OSnowman::func_80073D0C(objectIndex, &gObjectList[objectIndex].primAlpha, -0x00001000, 0x00001000, 0x00000400, 1, -1); + OSnowman::func_80073D0C(objectIndex, &gObjectList[objectIndex].primAlpha, -0x00001000, 0x00001000, 0x00000400, 1, + -1); gObjectList[objectIndex].orientation[2] = gObjectList[objectIndex].primAlpha + 0x8000; } @@ -285,7 +288,8 @@ static const char* sSnowmanBodyList[] = { d_course_frappe_snowland_snowman_body void OSnowman::func_80083B0C(s32 objectIndex) { Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog); - init_texture_object(objectIndex, (u8*)d_course_frappe_snowland_snowman_tlut, (const char**)sSnowmanBodyList, 0x40U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_frappe_snowland_snowman_tlut, (const char**) sSnowmanBodyList, + 0x40U, (u16) 0x00000040); gObjectList[objectIndex].vertex = vtx; gObjectList[objectIndex].sizeScaling = 0.1f; gObjectList[objectIndex].textureListIndex = 0; @@ -299,16 +303,15 @@ void OSnowman::func_80083B0C(s32 objectIndex) { set_object_flag(objectIndex, 0x04000210); } - void OSnowman::func_80083538(s32 objectIndex, Vec3f arg1, s32 arg2, s32 arg3) { Object* object; init_object(objectIndex, 0); object = &gObjectList[objectIndex]; - object->activeTexture = (const char*)d_course_frappe_snowland_snow; - object->textureList = (const char**)d_course_frappe_snowland_snow; + object->activeTexture = (const char*) d_course_frappe_snowland_snow; + object->textureList = (const char**) d_course_frappe_snowland_snow; object->activeTLUT = d_course_frappe_snowland_snow_tlut; - object->tlutList = (u8*)d_course_frappe_snowland_snow_tlut; + object->tlutList = (u8*) d_course_frappe_snowland_snow_tlut; object->sizeScaling = random_int(0x0064U); object->sizeScaling = (object->sizeScaling * 0.001) + 0.05; object->velocity[1] = random_int(0x0014U); diff --git a/src/engine/objects/Snowman.h b/src/engine/objects/Snowman.h index f33ee3b53..5333c09cd 100644 --- a/src/engine/objects/Snowman.h +++ b/src/engine/objects/Snowman.h @@ -18,7 +18,7 @@ extern "C" { } class OSnowman : public OObject { -public: + public: explicit OSnowman(const FVector& pos); ~OSnowman() { @@ -46,7 +46,7 @@ public: void func_80083538(s32 objectIndex, Vec3f arg1, s32 arg2, s32 arg3); void func_8008379C(s32 objectIndex); -private: + private: FVector _pos; static size_t _count; size_t _idx; diff --git a/src/engine/objects/Thwomp.cpp b/src/engine/objects/Thwomp.cpp index d3f99a8d9..740abd481 100644 --- a/src/engine/objects/Thwomp.cpp +++ b/src/engine/objects/Thwomp.cpp @@ -51,8 +51,8 @@ OThwomp::OThwomp(s16 x, s16 z, s16 direction, f32 scale, s16 behaviour, s16 prim _idx = _count; _faceDirection = direction; _boundingBoxSize = boundingBoxSize; - State = (States)behaviour; - + State = (States) behaviour; + find_unused_obj_index(&_objectIndex); s32 objectId = _objectIndex; @@ -127,7 +127,6 @@ void OThwomp::Tick60fps() { // func_80081210 if (is_obj_flag_status_active(_objectIndex, 0x00010000) != 0) { OThwomp::func_80080A4C(_objectIndex, var_s4); } - } OThwomp::func_8007542C(3); @@ -180,8 +179,8 @@ void OThwomp::func_80081080(s32 objectIndex) { Object* object; object = &gObjectList[objectIndex]; - object->activeTexture = (const char*)D_8018D490; - object->textureList = (const char**)D_8018D490; + object->activeTexture = (const char*) D_8018D490; + object->textureList = (const char**) D_8018D490; object->primAlpha = 0x00FF; object->direction_angle[1] = 0; object->orientation[0] = 0; @@ -628,8 +627,8 @@ void OThwomp::func_80080B28(s32 objectIndex, s32 playerId) { } } } else if ((temp_f0 <= 17.5) && (func_80072320(objectIndex, 1) != 0) && - (is_within_horizontal_distance_of_player(objectIndex, temp_s0, (temp_s0->unk_094 * 0.5) + _boundingBoxSize) != - 0)) { + (is_within_horizontal_distance_of_player(objectIndex, temp_s0, + (temp_s0->unk_094 * 0.5) + _boundingBoxSize) != 0)) { if ((temp_s0->type & 0x8000) && !(temp_s0->type & 0x100)) { if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) { func_80072180(); @@ -680,29 +679,29 @@ void OThwomp::Draw(s32 cameraId) { OThwomp::DrawModel(objectIndex); } - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0079C8); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0079C8); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gSPNumLights(gDisplayListHead++, 1); gSPLight(gDisplayListHead++, &D_800E4668.l[0], LIGHT_1); gSPLight(gDisplayListHead++, &D_800E4668.a, LIGHT_2); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BOTH); gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_LIGHTING | G_SHADING_SMOOTH); - load_texture_block_rgba16_mirror((u8*)d_course_bowsers_castle_thwomp_side, 0x00000020, 0x00000020); + load_texture_block_rgba16_mirror((u8*) d_course_bowsers_castle_thwomp_side, 0x00000020, 0x00000020); for (i = 0; i < gObjectParticle3_SIZE; i++) { objectIndex = gObjectParticle3[i]; if (objectIndex != NULL_OBJECT_ID) { object = &gObjectList[objectIndex]; if ((object->state > 0) && (State == MOVE_FAR) && (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) { rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling); - gSPVertex(gDisplayListHead++, (uintptr_t)D_0D005C00, 3, 0); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D006930); + gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005C00, 3, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D006930); } } } gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPTexture(gDisplayListHead++, 0x0001, 0x0001, 0, G_TX_RENDERTILE, G_OFF); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0); load_texture_block_ia8_nomirror(D_8018D490, 0x00000020, 0x00000020); func_8004B3C8(0); D_80183E80[0] = 0; @@ -714,7 +713,7 @@ void OThwomp::Draw(s32 cameraId) { if ((object->state >= 2) && (State == MOVE_AND_ROTATE) && (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) { func_8004B138(0x000000FF, 0x000000FF, 0x000000FF, (s32) object->primAlpha); D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos); - func_800431B0(object->pos, D_80183E80, object->sizeScaling, (Vtx*)D_0D005AE0); + func_800431B0(object->pos, D_80183E80, object->sizeScaling, (Vtx*) D_0D005AE0); } } } @@ -726,10 +725,10 @@ void OThwomp::DrawModel(s32 objectIndex) { rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling); OThwomp::ThwompLights(objectIndex); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007828); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007828); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); gDPLoadTLUT_pal256(gDisplayListHead++, d_course_bowsers_castle_thwomp_tlut); - rsp_load_texture_mask((u8*)gObjectList[objectIndex].activeTexture, 0x00000010, 0x00000040, 4); + rsp_load_texture_mask((u8*) gObjectList[objectIndex].activeTexture, 0x00000010, 0x00000040, 4); gSPDisplayList(gDisplayListHead++, gObjectList[objectIndex].model); } } @@ -827,9 +826,9 @@ void OThwomp::func_8007EC30(s32 objectIndex) { set_obj_direction_angle(objectIndex, 0U, _faceDirection, 0U); set_obj_orientation(objectIndex, 0U, _faceDirection, 0U); } - init_texture_object(objectIndex, (uint8_t*) d_course_bowsers_castle_thwomp_tlut, (const char**) d_course_bowsers_castle_thwomp_faces, - 0x10U, (u16) 0x00000040); - object->model = (Gfx*)d_course_bowsers_castle_dl_thwomp; + init_texture_object(objectIndex, (uint8_t*) d_course_bowsers_castle_thwomp_tlut, + (const char**) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); + object->model = (Gfx*) d_course_bowsers_castle_dl_thwomp; object->unk_01C[1] = 30.0f; set_object_flag(objectIndex, 0x05000220); object->type = 0; @@ -864,10 +863,10 @@ void OThwomp::MoveAndRotateBehaviour(s32 objectIndex) { // func_8007F5A8 void OThwomp::func_8007EE5C(s32 objectIndex) { Object* object; - init_texture_object(objectIndex, (u8*)d_course_bowsers_castle_thwomp_tlut, (const char**) d_course_bowsers_castle_thwomp_faces, - 0x10U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_bowsers_castle_thwomp_tlut, + (const char**) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); object = &gObjectList[objectIndex]; - object->model = (Gfx*)d_course_bowsers_castle_dl_thwomp; + object->model = (Gfx*) d_course_bowsers_castle_dl_thwomp; set_object_flag(objectIndex, 0x04000220); object->type = 0; object->unk_0DF = 6; @@ -917,10 +916,10 @@ void OThwomp::MoveFarBehaviour(s32 objectIndex) { // func_8007FFC0 void OThwomp::func_8007FA08(s32 objectIndex) { Object* object; - init_texture_object(objectIndex, (u8*)d_course_bowsers_castle_thwomp_tlut, (const char**) d_course_bowsers_castle_thwomp_faces, - 0x10U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_bowsers_castle_thwomp_tlut, + (const char**) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); object = &gObjectList[objectIndex]; - object->model = (Gfx*)d_course_bowsers_castle_dl_thwomp; + object->model = (Gfx*) d_course_bowsers_castle_dl_thwomp; set_object_flag(objectIndex, 0x04000220); object->type = 0; object->surfaceHeight = 0.0f; @@ -1083,10 +1082,10 @@ void OThwomp::StationaryFastBehaviour(s32 objectIndex) { // func_800801FC void OThwomp::func_80080078(s32 objectIndex) { // func_80080078 Object* object; - init_texture_object(objectIndex, (u8*)d_course_bowsers_castle_thwomp_tlut, (const char**) d_course_bowsers_castle_thwomp_faces, - 0x10U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_bowsers_castle_thwomp_tlut, + (const char**) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); object = &gObjectList[objectIndex]; - object->model = (Gfx*)d_course_bowsers_castle_dl_thwomp; + object->model = (Gfx*) d_course_bowsers_castle_dl_thwomp; set_object_flag(objectIndex, 0x04000220); object->type = 2; object->unk_0DF = 8; @@ -1154,11 +1153,11 @@ void OThwomp::func_800802C0(s32 objectIndex) { object = &gObjectList[objectIndex]; object->unk_0D8 = 0; - init_texture_object(objectIndex, (u8*)d_course_bowsers_castle_thwomp_tlut, (const char**) d_course_bowsers_castle_thwomp_faces, - 0x10U, (u16) 0x00000040); - object->model = (Gfx*)d_course_bowsers_castle_dl_thwomp; + init_texture_object(objectIndex, (u8*) d_course_bowsers_castle_thwomp_tlut, + (const char**) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); + object->model = (Gfx*) d_course_bowsers_castle_dl_thwomp; object->textureListIndex = 0; - //object->sizeScaling = 1.5f; + // object->sizeScaling = 1.5f; set_object_flag(objectIndex, 0x05000220); object->type = 1; object->unk_0DF = 6; @@ -1180,7 +1179,7 @@ void OThwomp::func_800802C0(s32 objectIndex) { } void OThwomp::SlidingBehaviour(s32 objectIndex) { // func_800808CC - switch (gObjectList[objectIndex].state) { /* irregular */ + switch (gObjectList[objectIndex].state) { /* irregular */ case 0: break; case 1: @@ -1264,10 +1263,10 @@ void OThwomp::func_8008078C(s32 objectIndex) { void OThwomp::func_80080524(s32 objectIndex) { Object* object; - init_texture_object(objectIndex, (u8*)d_course_bowsers_castle_thwomp_tlut, (const char**) d_course_bowsers_castle_thwomp_faces, - 0x10U, (u16) 0x00000040); + init_texture_object(objectIndex, (u8*) d_course_bowsers_castle_thwomp_tlut, + (const char**) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); object = &gObjectList[objectIndex]; - object->model = (Gfx*)d_course_bowsers_castle_dl_thwomp; + object->model = (Gfx*) d_course_bowsers_castle_dl_thwomp; object->textureListIndex = 0; set_object_flag(objectIndex, 0x04000220); object->type = 0; diff --git a/src/engine/objects/Thwomp.h b/src/engine/objects/Thwomp.h index 22c674bb5..c66705312 100644 --- a/src/engine/objects/Thwomp.h +++ b/src/engine/objects/Thwomp.h @@ -22,16 +22,16 @@ extern "C" { /** * Thwomp OObject - * + * * The game automatically places the actor on the ground so you do not need to provide a Y coordinate value. - * + * * @arg direction the rotational direction the thwomp is facing. * @arg behaviour the behaviour of the thwomp, uses values 1-6. * @arg primAlpha unknown * @arg boundingBoxSize optional. The size of the bounding box for the thwomp. Default value is 12 */ class OThwomp : public OObject { -private: + private: enum States : uint16_t { DISABLED, STATIONARY, @@ -42,7 +42,7 @@ private: JAILED // Has no collision }; -public: + public: States State = States::DISABLED; explicit OThwomp(s16 x, s16 z, s16 direction, f32 scale, s16 behaviour, s16 primAlpha, u16 boundingBoxSize = 7); @@ -110,7 +110,8 @@ public: void func_8008078C(s32 objectIndex); void func_8007E63C(s32 objectIndex); -private: + + private: static size_t _count; s32 _idx; s16 _faceDirection; diff --git a/src/engine/objects/TrashBin.cpp b/src/engine/objects/TrashBin.cpp index c94d0352f..8ff278045 100644 --- a/src/engine/objects/TrashBin.cpp +++ b/src/engine/objects/TrashBin.cpp @@ -18,7 +18,7 @@ extern "C" { #include "audio/external.h" } -#define DEGREES_FLOAT_TO_SHORT(Degrees) ((s16)((Degrees) * (0x8000 / 180.0f))) +#define DEGREES_FLOAT_TO_SHORT(Degrees) ((s16) ((Degrees) * (0x8000 / 180.0f))) OTrashBin::OTrashBin(const FVector& pos, const IRotator& rotation, f32 scale, OTrashBin::Behaviour bhv) { Name = "Trashbin"; @@ -39,7 +39,7 @@ OTrashBin::OTrashBin(const FVector& pos, const IRotator& rotation, f32 scale, OT void OTrashBin::Tick() { OTrashBin::func_8007E00C(_objectIndex); - switch(_bhv) { + switch (_bhv) { case STATIC: break; case MUNCHING: @@ -63,7 +63,7 @@ void OTrashBin::Draw(s32 cameraId) { Vec3f Pos = { _pos.x + 63, _pos.y + 12, _pos.z + 25 }; Vec3s Rot = { 0, 0x4000, 0 }; mtxf_pos_rotation_xyz(mtx, Pos, Rot); - //mtxf_scale(mtx, 1.0f); + // mtxf_scale(mtx, 1.0f); if (render_set_position(mtx, 0) != 0) { gSPDisplayList(gDisplayListHead++, BinMod); } @@ -73,7 +73,7 @@ void OTrashBin::Draw(s32 cameraId) { void OTrashBin::init_bb_trash_bin(s32 objectIndex) { gObjectList[objectIndex].sizeScaling = 1.0f; - gObjectList[objectIndex].model = (Gfx*)d_course_banshee_boardwalk_dl_trash_bin; + gObjectList[objectIndex].model = (Gfx*) d_course_banshee_boardwalk_dl_trash_bin; gObjectList[objectIndex].unk_04C = 0; gObjectList[objectIndex].unk_084[7] = 0; set_obj_orientation(objectIndex, 0U, 0U, 0U); @@ -149,83 +149,78 @@ void OTrashBin::func_8007E00C(s32 objectIndex) { } } -Gfx OTrashBin::BinMod[] = -{ +Gfx OTrashBin::BinMod[] = { gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), gsDPTileSync(), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C), gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture651B20), gsDPTileSync(), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), - gsSPVertex(BinVtx, 20, 0), - gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), - gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), - gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), - gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0), - gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0), - gsSPVertex(BinVtx2, 20, 0), - gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), - gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), - gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), - gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0), - gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0), - gsDPPipeSync(), - gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT), - gsSPTexture(65535, 65535, 0, 0, 0), + gsSPVertex(BinVtx, 20, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), + gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0), + gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0), + gsSPVertex(BinVtx2, 20, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), + gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0), + gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0), + gsDPPipeSync(), + gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT), + gsSPTexture(65535, 65535, 0, 0, 0), gsSPEndDisplayList(), }; - - - - - - Vtx OTrashBin::BinVtx[20] = { - {{ {25, -13, 62}, 0, {0, -2303}, {255, 255, 255, 0} }}, - {{ {-25, -13, 62}, 0, {1280, -2303}, {255, 255, 255, 0} }}, - {{ {-25, -13, -63}, 0, {1280, 896}, {255, 255, 255, 0} }}, - {{ {25, -13, -63}, 0, {0, 895}, {255, 255, 255, 0} }}, - {{ {25, -13, -63}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {25, 20, -63}, 0, {0, 256}, {255, 255, 255, 0} }}, - {{ {25, 20, 62}, 0, {3199, 256}, {255, 255, 255, 0} }}, - {{ {25, -13, 62}, 0, {3199, 1113}, {255, 255, 255, 0} }}, - {{ {-25, -13, -63}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {-25, 20, -63}, 0, {0, 255}, {255, 255, 255, 0} }}, - {{ {25, 20, -63}, 0, {1280, 255}, {255, 255, 255, 0} }}, - {{ {25, -13, -63}, 0, {1280, 1113}, {255, 255, 255, 0} }}, - {{ {-25, -13, 62}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {-25, 20, 62}, 0, {0, 255}, {255, 255, 255, 0} }}, - {{ {-25, 20, -63}, 0, {3200, 255}, {255, 255, 255, 0} }}, - {{ {-25, -13, -63}, 0, {3200, 1113}, {255, 255, 255, 0} }}, - {{ {25, -13, 62}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {25, 20, 62}, 0, {0, 256}, {255, 255, 255, 0} }}, - {{ {-25, 20, 62}, 0, {1279, 256}, {255, 255, 255, 0} }}, - {{ {-25, -13, 62}, 0, {1279, 1113}, {255, 255, 255, 0} }}, + { { { 25, -13, 62 }, 0, { 0, -2303 }, { 255, 255, 255, 0 } } }, + { { { -25, -13, 62 }, 0, { 1280, -2303 }, { 255, 255, 255, 0 } } }, + { { { -25, -13, -63 }, 0, { 1280, 896 }, { 255, 255, 255, 0 } } }, + { { { 25, -13, -63 }, 0, { 0, 895 }, { 255, 255, 255, 0 } } }, + { { { 25, -13, -63 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, -63 }, 0, { 0, 256 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, 62 }, 0, { 3199, 256 }, { 255, 255, 255, 0 } } }, + { { { 25, -13, 62 }, 0, { 3199, 1113 }, { 255, 255, 255, 0 } } }, + { { { -25, -13, -63 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, -63 }, 0, { 0, 255 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, -63 }, 0, { 1280, 255 }, { 255, 255, 255, 0 } } }, + { { { 25, -13, -63 }, 0, { 1280, 1113 }, { 255, 255, 255, 0 } } }, + { { { -25, -13, 62 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, 62 }, 0, { 0, 255 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, -63 }, 0, { 3200, 255 }, { 255, 255, 255, 0 } } }, + { { { -25, -13, -63 }, 0, { 3200, 1113 }, { 255, 255, 255, 0 } } }, + { { { 25, -13, 62 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, 62 }, 0, { 0, 256 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, 62 }, 0, { 1279, 256 }, { 255, 255, 255, 0 } } }, + { { { -25, -13, 62 }, 0, { 1279, 1113 }, { 255, 255, 255, 0 } } }, }; Vtx OTrashBin::BinVtx2[20] = { - {{ {19, -8, 52}, 0, {3199, 1113}, {255, 255, 255, 0} }}, - {{ {25, 20, 62}, 0, {3199, 256}, {255, 255, 255, 0} }}, - {{ {25, 20, -63}, 0, {0, 256}, {255, 255, 255, 0} }}, - {{ {19, -8, -52}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {19, -8, -52}, 0, {1280, 1113}, {255, 255, 255, 0} }}, - {{ {25, 20, -63}, 0, {1280, 255}, {255, 255, 255, 0} }}, - {{ {-25, 20, -63}, 0, {0, 255}, {255, 255, 255, 0} }}, - {{ {-19, -8, -52}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {-19, -8, 52}, 0, {1279, 1113}, {255, 255, 255, 0} }}, - {{ {-25, 20, 62}, 0, {1279, 256}, {255, 255, 255, 0} }}, - {{ {25, 20, 62}, 0, {0, 256}, {255, 255, 255, 0} }}, - {{ {19, -8, 52}, 0, {0, 1113}, {255, 255, 255, 0} }}, - {{ {19, -8, -52}, 0, {0, 895}, {255, 255, 255, 0} }}, - {{ {-19, -8, -52}, 0, {1280, 896}, {255, 255, 255, 0} }}, - {{ {-19, -8, 52}, 0, {1280, -2303}, {255, 255, 255, 0} }}, - {{ {19, -8, 52}, 0, {0, -2303}, {255, 255, 255, 0} }}, - {{ {-19, -8, -52}, 0, {3200, 1113}, {255, 255, 255, 0} }}, - {{ {-25, 20, -63}, 0, {3200, 255}, {255, 255, 255, 0} }}, - {{ {-25, 20, 62}, 0, {0, 255}, {255, 255, 255, 0} }}, - {{ {-19, -8, 52}, 0, {0, 1113}, {255, 255, 255, 0} }}, + { { { 19, -8, 52 }, 0, { 3199, 1113 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, 62 }, 0, { 3199, 256 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, -63 }, 0, { 0, 256 }, { 255, 255, 255, 0 } } }, + { { { 19, -8, -52 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { 19, -8, -52 }, 0, { 1280, 1113 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, -63 }, 0, { 1280, 255 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, -63 }, 0, { 0, 255 }, { 255, 255, 255, 0 } } }, + { { { -19, -8, -52 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { -19, -8, 52 }, 0, { 1279, 1113 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, 62 }, 0, { 1279, 256 }, { 255, 255, 255, 0 } } }, + { { { 25, 20, 62 }, 0, { 0, 256 }, { 255, 255, 255, 0 } } }, + { { { 19, -8, 52 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, + { { { 19, -8, -52 }, 0, { 0, 895 }, { 255, 255, 255, 0 } } }, + { { { -19, -8, -52 }, 0, { 1280, 896 }, { 255, 255, 255, 0 } } }, + { { { -19, -8, 52 }, 0, { 1280, -2303 }, { 255, 255, 255, 0 } } }, + { { { 19, -8, 52 }, 0, { 0, -2303 }, { 255, 255, 255, 0 } } }, + { { { -19, -8, -52 }, 0, { 3200, 1113 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, -63 }, 0, { 3200, 255 }, { 255, 255, 255, 0 } } }, + { { { -25, 20, 62 }, 0, { 0, 255 }, { 255, 255, 255, 0 } } }, + { { { -19, -8, 52 }, 0, { 0, 1113 }, { 255, 255, 255, 0 } } }, }; diff --git a/src/engine/objects/TrashBin.h b/src/engine/objects/TrashBin.h index 3e878e1c0..ff1118249 100644 --- a/src/engine/objects/TrashBin.h +++ b/src/engine/objects/TrashBin.h @@ -18,10 +18,9 @@ extern "C" { } class OTrashBin : public OObject { -public: - + public: enum Behaviour { - STATIC, // The lid stays shut + STATIC, // The lid stays shut MUNCHING // The lid opens/closes in a scary munching manner }; explicit OTrashBin(const FVector& pos, const IRotator& rotation, f32 scale, OTrashBin::Behaviour bhv); @@ -31,7 +30,7 @@ public: void func_8007E00C(s32 objectIndex); void init_bb_trash_bin(s32); -private: + private: static Gfx BinMod[]; static Vtx BinVtx[]; static Vtx BinVtx2[]; diff --git a/src/engine/objects/Trophy.cpp b/src/engine/objects/Trophy.cpp index 9f90b6be1..f90bf906d 100644 --- a/src/engine/objects/Trophy.cpp +++ b/src/engine/objects/Trophy.cpp @@ -49,22 +49,22 @@ OTrophy::OTrophy(const FVector& pos, TrophyType trophy, Behaviour bhv) { switch (trophy) { case TrophyType::GOLD: - gObjectList[_objectIndex].model = (Gfx*)gold_trophy_dl10; + gObjectList[_objectIndex].model = (Gfx*) gold_trophy_dl10; break; case TrophyType::SILVER: - gObjectList[_objectIndex].model = (Gfx*)gold_trophy_dl12; + gObjectList[_objectIndex].model = (Gfx*) gold_trophy_dl12; break; case TrophyType::BRONZE: - gObjectList[_objectIndex].model = (Gfx*)gold_trophy_dl14; + gObjectList[_objectIndex].model = (Gfx*) gold_trophy_dl14; break; case TrophyType::GOLD_150: - gObjectList[_objectIndex].model = (Gfx*)gold_trophy_dl11; + gObjectList[_objectIndex].model = (Gfx*) gold_trophy_dl11; break; case TrophyType::SILVER_150: - gObjectList[_objectIndex].model = (Gfx*)gold_trophy_dl13; + gObjectList[_objectIndex].model = (Gfx*) gold_trophy_dl13; break; case TrophyType::BRONZE_150: - gObjectList[_objectIndex].model = (Gfx*)gold_trophy_dl15; + gObjectList[_objectIndex].model = (Gfx*) gold_trophy_dl15; break; } @@ -76,13 +76,13 @@ OTrophy::OTrophy(const FVector& pos, TrophyType trophy, Behaviour bhv) { func_80086E70(_objectIndex); } - switch(_bhv) { + switch (_bhv) { case OTrophy::Behaviour::GO_FISH: gObjectList[_objectIndex].sizeScaling = 0.010f; break; } - Object *object = &gObjectList[_objectIndex]; + Object* object = &gObjectList[_objectIndex]; object->origin_pos[0] = _spawnPos.x; object->origin_pos[1] = _spawnPos.y; object->origin_pos[2] = _spawnPos.z; @@ -103,7 +103,7 @@ void OTrophy::Tick() { // func_80086D80 D_801658DC = 1; } - switch(_bhv) { + switch (_bhv) { case OTrophy::Behaviour::PODIUM_CEREMONY: if (gObjectList[objectIndex].state != 0 && (*_toggleVisibility == true)) { OTrophy::func_80086C14(objectIndex); @@ -122,15 +122,14 @@ void OTrophy::Tick() { // func_80086D80 case OTrophy::Behaviour::STATIONARY: if (gObjectList[objectIndex].state != 0) { - gObjectList[objectIndex].sizeScaling = 0.025f; - set_obj_origin_pos(objectIndex, _spawnPos.x, - _spawnPos.y + 16.0, _spawnPos.z); - set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); - set_obj_direction_angle(objectIndex, 0U, 0U, 0U); - gObjectList[objectIndex].unk_084[1] = 0x0200; - object_next_state(objectIndex); - func_80086E70(objectIndex); - OTrophy::func_80086940(objectIndex); + gObjectList[objectIndex].sizeScaling = 0.025f; + set_obj_origin_pos(objectIndex, _spawnPos.x, _spawnPos.y + 16.0, _spawnPos.z); + set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); + set_obj_direction_angle(objectIndex, 0U, 0U, 0U); + gObjectList[objectIndex].unk_084[1] = 0x0200; + object_next_state(objectIndex); + func_80086E70(objectIndex); + OTrophy::func_80086940(objectIndex); } break; case OTrophy::Behaviour::ROTATE: @@ -152,8 +151,8 @@ void OTrophy::Tick() { // func_80086D80 if (gObjectList[objectIndex].state != 0) { // Get the player's yaw - Player *player = &gPlayers[0]; - float yaw = (player->rotation[1] + 0x4000) * (M_PI / 32768.0f); // Convert degrees to radians + Player* player = &gPlayers[0]; + float yaw = (player->rotation[1] + 0x4000) * (M_PI / 32768.0f); // Convert degrees to radians // Calculate forward direction based on yaw (same as before) float lookAtX = player->pos[0] + cos(yaw); @@ -174,33 +173,37 @@ void OTrophy::Tick() { // func_80086D80 // Calculate the object's position in front of the player (same as before) gObjectList[objectIndex].pos[0] = player->pos[0] + forwardX * distance; - gObjectList[objectIndex].pos[1] = player->pos[1] + 8.0f; // Optional height offset + gObjectList[objectIndex].pos[1] = player->pos[1] + 8.0f; // Optional height offset gObjectList[objectIndex].pos[2] = player->pos[2] + forwardZ * distance; // Apply more sensitive random movement based on player velocity to simulate floating behavior float velocityFactor = 0.1f; // Increased factor for more sensitivity gObjectList[objectIndex].pos[0] += player->velocity[0] * velocityFactor; - gObjectList[objectIndex].pos[1] += player->velocity[1] * velocityFactor; // Optional: Add vertical movement + gObjectList[objectIndex].pos[1] += + player->velocity[1] * velocityFactor; // Optional: Add vertical movement gObjectList[objectIndex].pos[2] += player->velocity[2] * velocityFactor; // Increase oscillation for more dynamic movement (sine wave effect) - float oscillationSpeed = 4.0f; // Increased speed for quicker oscillations + float oscillationSpeed = 4.0f; // Increased speed for quicker oscillations float oscillationAmplitude = 0.4f; // Increased amplitude for more noticeable movement - gObjectList[objectIndex].pos[1] += oscillationAmplitude * sinf(oscillationSpeed * gGlobalTimer); // Vertical oscillation based on time + gObjectList[objectIndex].pos[1] += + oscillationAmplitude * sinf(oscillationSpeed * gGlobalTimer); // Vertical oscillation based on time // Now use smooth interpolation (lerp) to gradually move the trophy towards its target position - float lerpFactor = 0.25f; // Increased to make the trophy follow the player more quickly + float lerpFactor = 0.25f; // Increased to make the trophy follow the player more quickly - gObjectList[objectIndex].pos[0] = _oldPos[0] + lerpFactor * (gObjectList[objectIndex].pos[0] - _oldPos[0]); - gObjectList[objectIndex].pos[1] = _oldPos[1] + lerpFactor * (gObjectList[objectIndex].pos[1] - _oldPos[1]); - gObjectList[objectIndex].pos[2] = _oldPos[2] + lerpFactor * (gObjectList[objectIndex].pos[2] - _oldPos[2]); + gObjectList[objectIndex].pos[0] = + _oldPos[0] + lerpFactor * (gObjectList[objectIndex].pos[0] - _oldPos[0]); + gObjectList[objectIndex].pos[1] = + _oldPos[1] + lerpFactor * (gObjectList[objectIndex].pos[1] - _oldPos[1]); + gObjectList[objectIndex].pos[2] = + _oldPos[2] + lerpFactor * (gObjectList[objectIndex].pos[2] - _oldPos[2]); // Save the current position for the next frame _oldPos[0] = gObjectList[objectIndex].pos[0]; _oldPos[1] = gObjectList[objectIndex].pos[1]; _oldPos[2] = gObjectList[objectIndex].pos[2]; - gObjectList[objectIndex].direction_angle[0] += 0x400; gObjectList[objectIndex].direction_angle[1] -= 0x200; } @@ -217,20 +220,20 @@ void OTrophy::Draw(s32 cameraId) { object = &gObjectList[listIndex]; if (object->state >= 2) { gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[0]), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[0]), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); mtxf_set_matrix_transformation(someMatrix1, object->pos, object->direction_angle, object->sizeScaling); - //convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], someMatrix1); - //gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), - // G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + // convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], someMatrix1); + // gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), + // G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); AddHudMatrix(someMatrix1, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0077A0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0077A0); gSPDisplayList(gDisplayListHead++, object->model); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxLookAt[0]), - G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); mtxf_identity(someMatrix2); render_set_position(someMatrix2, 0); } diff --git a/src/engine/objects/Trophy.h b/src/engine/objects/Trophy.h index 89f130997..9b776e885 100644 --- a/src/engine/objects/Trophy.h +++ b/src/engine/objects/Trophy.h @@ -18,7 +18,7 @@ extern "C" { } class OTrophy : public OObject { -public: + public: enum TrophyType { BRONZE, SILVER, @@ -31,7 +31,7 @@ public: enum Behaviour { PODIUM_CEREMONY, STATIONARY, - ROTATE, // A dual-axis opposing rotation + ROTATE, // A dual-axis opposing rotation ROTATE2, // A single-axis rotation GO_FISH, }; @@ -45,13 +45,13 @@ public: void func_80086C14(s32 objectIndex); void func_80086C6C(s32 objectIndex); -private: + private: StarEmitter* _emitter; TrophyType _trophy; FVector _spawnPos; Behaviour _bhv; - int8_t *_toggleVisibility; + int8_t* _toggleVisibility; Vec3f _oldPos; bool _isMod = false; }; diff --git a/src/engine/particles/ParticleEmitter.cpp b/src/engine/particles/ParticleEmitter.cpp index 5154abf56..c1a66ae98 100644 --- a/src/engine/particles/ParticleEmitter.cpp +++ b/src/engine/particles/ParticleEmitter.cpp @@ -2,12 +2,15 @@ #include "ParticleEmitter.h" +ParticleEmitter::ParticleEmitter() { +} +// Virtual functions to be overridden by derived classes +void ParticleEmitter::Tick() { +} +void ParticleEmitter::Draw(s32 cameraId) { +} -ParticleEmitter::ParticleEmitter() {} - - // Virtual functions to be overridden by derived classes -void ParticleEmitter::Tick() { } -void ParticleEmitter::Draw(s32 cameraId) { } - -bool ParticleEmitter::IsMod() { return false; } +bool ParticleEmitter::IsMod() { + return false; +} diff --git a/src/engine/particles/ParticleEmitter.h b/src/engine/particles/ParticleEmitter.h index 1a71164d1..8197d4b97 100644 --- a/src/engine/particles/ParticleEmitter.h +++ b/src/engine/particles/ParticleEmitter.h @@ -8,10 +8,9 @@ extern "C" { #include "camera.h" #include "common_structs.h" - class ParticleEmitter { -public: - virtual ~ParticleEmitter() = default; // Virtual destructor for proper cleanup in derived classes + public: + virtual ~ParticleEmitter() = default; // Virtual destructor for proper cleanup in derived classes explicit ParticleEmitter(); @@ -19,5 +18,4 @@ public: virtual void Draw(s32 cameraId); virtual bool IsMod(); }; - -}
\ No newline at end of file +} diff --git a/src/engine/particles/StarEmitter.cpp b/src/engine/particles/StarEmitter.cpp index 242e1a75a..fcf187180 100644 --- a/src/engine/particles/StarEmitter.cpp +++ b/src/engine/particles/StarEmitter.cpp @@ -101,7 +101,7 @@ void StarEmitter::Draw(s32 cameraId) { // func_80054BE8 Camera* camera; camera = &camera1[cameraId]; - gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0); load_texture_block_ia8_nomirror(D_8018D488, 0x00000020, 0x00000020); func_8004B35C(0x000000FF, 0x000000FF, 0, 0x000000FF); D_80183E80[0] = 0; @@ -121,8 +121,8 @@ void StarEmitter::func_80054AFC(s32 objectIndex, Vec3f arg1) { (s32) gObjectList[objectIndex].unk_084[2], (s32) gObjectList[objectIndex].primAlpha); rsp_set_matrix_transformation(gObjectList[objectIndex].pos, (u16*) D_80183E80, gObjectList[objectIndex].sizeScaling); - gSPVertex(gDisplayListHead++, (uintptr_t)D_0D005AE0, 4, 0); - gSPDisplayList(gDisplayListHead++, (Gfx*)common_rectangle_display); + gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005AE0, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); } void StarEmitter::func_80077428(s32 objectIndex) { @@ -176,4 +176,4 @@ void StarEmitter::func_80077450(s32 objectIndex) { gObjectList[objectIndex].unk_084[1] = sp3A; gObjectList[objectIndex].unk_084[2] = sp38; } -}
\ No newline at end of file +} diff --git a/src/engine/particles/StarEmitter.h b/src/engine/particles/StarEmitter.h index e1c6e0416..a5d37fece 100644 --- a/src/engine/particles/StarEmitter.h +++ b/src/engine/particles/StarEmitter.h @@ -20,11 +20,10 @@ extern "C" { * Used in the podium ceremony when the trophy appears */ class StarEmitter : public ParticleEmitter { -public: - enum Behaviour : uint16_t { - }; + public: + enum Behaviour : uint16_t {}; -public: + public: f32 Diameter = 0.0f; // Waddle in a circle around the spawn point at this diameter. uint16_t MirrorModeAngleOffset; @@ -38,7 +37,7 @@ public: void func_80077450(s32 objectIndex); void func_80054AFC(s32 objectIndex, Vec3f arg1); -private: + private: s32 ObjectIndex[128]; s32 _next = 0; }; diff --git a/src/engine/vehicles/Boat.cpp b/src/engine/vehicles/Boat.cpp index 073974581..1e3ba1737 100644 --- a/src/engine/vehicles/Boat.cpp +++ b/src/engine/vehicles/Boat.cpp @@ -44,21 +44,17 @@ ABoat::ABoat(f32 speed, u32 waypoint) { if (IsActive == 1) { f32 origXPos = Position[0]; f32 origZPos = Position[2]; - RotY = update_vehicle_following_waypoint( - Position, (s16*) &WaypointIndex, - Speed); + RotY = update_vehicle_following_waypoint(Position, (s16*) &WaypointIndex, Speed); Velocity[0] = Position[0] - origXPos; Velocity[2] = Position[2] - origZPos; vec3s_set(paddleWheelBoatRot, 0, RotY, 0); - ActorIndex = add_actor_to_empty_slot(Position, paddleWheelBoatRot, - Velocity, ACTOR_PADDLE_BOAT); + ActorIndex = add_actor_to_empty_slot(Position, paddleWheelBoatRot, Velocity, ACTOR_PADDLE_BOAT); } _count++; } void ABoat::Draw(Camera* camera) { - } bool ABoat::IsMod() { @@ -84,22 +80,20 @@ void ABoat::Tick() { temp_f26 = Position[0]; temp_f28 = Position[1]; temp_f30 = Position[2]; - update_vehicle_following_waypoint(Position, (s16*) &WaypointIndex, - Speed); - SomeFlags = set_vehicle_render_distance_flags(Position, BOAT_SMOKE_RENDER_DISTANCE, - SomeFlags); + update_vehicle_following_waypoint(Position, (s16*) &WaypointIndex, Speed); + SomeFlags = set_vehicle_render_distance_flags(Position, BOAT_SMOKE_RENDER_DISTANCE, SomeFlags); if ((((s16) AnotherSmokeTimer % 10) == 0) && (SomeFlags != 0)) { smokePos[0] = (f32) ((f64) Position[0] - 30.0); smokePos[1] = (f32) ((f64) Position[1] + 180.0); smokePos[2] = (f32) ((f64) Position[2] + 45.0); adjust_position_by_angle(smokePos, Position, RotY); - //spawn_ferry_smoke(Index, smokePos, 1.1f); + // spawn_ferry_smoke(Index, smokePos, 1.1f); AddSmoke(Index, smokePos, 1.1f); smokePos[0] = (f32) ((f64) Position[0] + 30.0); smokePos[1] = (f32) ((f64) Position[1] + 180.0); smokePos[2] = (f32) ((f64) Position[2] + 45.0); adjust_position_by_angle(smokePos, Position, RotY); - //spawn_ferry_smoke(Index, smokePos, 1.1f); + // spawn_ferry_smoke(Index, smokePos, 1.1f); AddSmoke(Index, smokePos, 1.1f); } if (random_int(100) == 0) { @@ -182,9 +176,8 @@ void ABoat::VehicleCollision(s32 playerId, Player* player) { z_diff = playerZ - Position[2]; if ((x_diff > -300.0) && (x_diff < 300.0)) { if ((z_diff > -300.0) && (z_diff < 300.0)) { - if ((func_80006018(Position[0], Position[2], - Velocity[0], Velocity[2], 200.0f, - 60.0f, playerX, playerZ) == 1) && + if ((func_80006018(Position[0], Position[2], Velocity[0], Velocity[2], 200.0f, 60.0f, playerX, + playerZ) == 1) && (y_diff < 60.0)) { player->soundEffects |= 0x80000; } @@ -201,4 +194,4 @@ s32 ABoat::AddSmoke(size_t ferryIndex, Vec3f pos, f32 velocity) { } return objectIndex; -}
\ No newline at end of file +} diff --git a/src/engine/vehicles/Boat.h b/src/engine/vehicles/Boat.h index dcdd89977..cca015d8c 100644 --- a/src/engine/vehicles/Boat.h +++ b/src/engine/vehicles/Boat.h @@ -10,8 +10,7 @@ extern "C" { } class ABoat : public AActor { - public: - + public: const char* Type = "mk:boat"; size_t Index; bool IsActive; // The paddle wheel boat only shows up if the number of players is < 3 @@ -43,7 +42,7 @@ class ABoat : public AActor { virtual void VehicleCollision(s32 playerId, Player* player) override; virtual s32 AddSmoke(size_t, Vec3f, f32); virtual bool IsMod() override; -private: - static size_t _count; -};
\ No newline at end of file + private: + static size_t _count; +}; diff --git a/src/engine/vehicles/Bus.cpp b/src/engine/vehicles/Bus.cpp index c58cd0a6c..c22391fb1 100644 --- a/src/engine/vehicles/Bus.cpp +++ b/src/engine/vehicles/Bus.cpp @@ -50,16 +50,13 @@ ABus::ABus(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) { Rotation[0] = 0; Rotation[2] = 0; if (D_8016347A == 0) { - Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - Rotation[1] = - func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); + Rotation[1] = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } D_801631C8 = 10; - spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, - Speed); + spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, Speed); ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_SCHOOL_BUS); _count++; @@ -119,11 +116,9 @@ void ABus::Tick() { } } if (D_8016347A == 0) { - var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0); + var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } adjust_angle(&Rotation[1], var_a1, 100); temp_f0_3 = Position[0] - sp5C; @@ -176,8 +171,8 @@ void ABus::VehicleCollision(s32 playerId, Player* player) { if ((temp_f22 > -20.0) && (temp_f22 < 20.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { - if (func_80006018(Position[0], Position[2], Velocity[0], - Velocity[2], SomeArg3, SomeArg4, spC4, spBC) == (s32) 1) { + if (func_80006018(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, spC4, + spBC) == (s32) 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } } @@ -212,8 +207,7 @@ void ABus::VehicleCollision(s32 playerId, Player* player) { switch (D_8016347A) { case 0: - t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, - path); + t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, path); if ((D_80163270[playerId] == 0) && (t1 > 0) && (player->unk_094 < Speed)) { var_s1 = 1; } @@ -222,8 +216,7 @@ void ABus::VehicleCollision(s32 playerId, Player* player) { } break; case 1: - t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, - path); + t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, path); if (t2 > 0) { if (random_int(2) == 0) { // temp_v1_2 = D_80163270[playerId]; diff --git a/src/engine/vehicles/Bus.h b/src/engine/vehicles/Bus.h index c7f3f475e..dd6752775 100644 --- a/src/engine/vehicles/Bus.h +++ b/src/engine/vehicles/Bus.h @@ -12,8 +12,7 @@ extern "C" { } class ABus : public AActor { - public: - + public: const char* Type; size_t Index; f32 Speed; @@ -46,6 +45,6 @@ class ABus : public AActor { virtual void VehicleCollision(s32 playerId, Player* player) override; virtual bool IsMod() override; -private: + private: static size_t _count; -};
\ No newline at end of file +}; diff --git a/src/engine/vehicles/Car.cpp b/src/engine/vehicles/Car.cpp index 89409df50..577c283c5 100644 --- a/src/engine/vehicles/Car.cpp +++ b/src/engine/vehicles/Car.cpp @@ -50,16 +50,13 @@ ACar::ACar(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) { Rotation[0] = 0; Rotation[2] = 0; if (D_8016347A == 0) { - Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - Rotation[1] = - func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); + Rotation[1] = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } D_801631C8 = 10; - spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, - Speed); + spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, Speed); ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_CAR); _count++; @@ -101,11 +98,9 @@ void ACar::Tick() { } } if (D_8016347A == 0) { - var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0); + var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } adjust_angle(&Rotation[1], var_a1, 100); temp_f0_3 = Position[0] - sp5C; @@ -176,8 +171,8 @@ void ACar::VehicleCollision(s32 playerId, Player* player) { if ((temp_f22 > -20.0) && (temp_f22 < 20.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { - if (func_80006018(Position[0], Position[2], Velocity[0], - Velocity[2], SomeArg3, SomeArg4, spC4, spBC) == (s32) 1) { + if (func_80006018(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, spC4, + spBC) == (s32) 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } } @@ -212,8 +207,7 @@ void ACar::VehicleCollision(s32 playerId, Player* player) { switch (D_8016347A) { case 0: - t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, - path); + t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, path); if ((D_80163270[playerId] == 0) && (t1 > 0) && (player->unk_094 < Speed)) { var_s1 = 1; } @@ -222,8 +216,7 @@ void ACar::VehicleCollision(s32 playerId, Player* player) { } break; case 1: - t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, - path); + t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, path); if (t2 > 0) { if (random_int(2) == 0) { // temp_v1_2 = D_80163270[playerId]; @@ -283,4 +276,4 @@ void ACar::VehicleCollision(s32 playerId, Player* player) { } } } -}
\ No newline at end of file +} diff --git a/src/engine/vehicles/Car.h b/src/engine/vehicles/Car.h index 97bd47e2e..594420429 100644 --- a/src/engine/vehicles/Car.h +++ b/src/engine/vehicles/Car.h @@ -12,8 +12,7 @@ extern "C" { } class ACar : public AActor { - public: - + public: explicit ACar(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint); ~ACar() { @@ -45,6 +44,7 @@ class ACar : public AActor { virtual void Draw(Camera*) override; virtual void VehicleCollision(s32 playerId, Player* player) override; virtual bool IsMod() override; -private: + + private: static size_t _count; -};
\ No newline at end of file +}; diff --git a/src/engine/vehicles/TankerTruck.cpp b/src/engine/vehicles/TankerTruck.cpp index 02cd9553b..f3ed9707e 100644 --- a/src/engine/vehicles/TankerTruck.cpp +++ b/src/engine/vehicles/TankerTruck.cpp @@ -50,16 +50,13 @@ ATankerTruck::ATankerTruck(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t Rotation[0] = 0; Rotation[2] = 0; if (D_8016347A == 0) { - Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - Rotation[1] = - func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); + Rotation[1] = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } D_801631C8 = 10; - spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, - Speed); + spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, Speed); ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_TANKER_TRUCK); _count++; @@ -119,11 +116,9 @@ void ATankerTruck::Tick() { } } if (D_8016347A == 0) { - var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0); + var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } adjust_angle(&Rotation[1], var_a1, 100); temp_f0_3 = Position[0] - sp5C; @@ -176,8 +171,8 @@ void ATankerTruck::VehicleCollision(s32 playerId, Player* player) { if ((temp_f22 > -20.0) && (temp_f22 < 20.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { - if (func_80006018(Position[0], Position[2], Velocity[0], - Velocity[2], SomeArg3, SomeArg4, spC4, spBC) == (s32) 1) { + if (func_80006018(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, spC4, + spBC) == (s32) 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } } @@ -212,8 +207,7 @@ void ATankerTruck::VehicleCollision(s32 playerId, Player* player) { switch (D_8016347A) { case 0: - t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, - path); + t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, path); if ((D_80163270[playerId] == 0) && (t1 > 0) && (player->unk_094 < Speed)) { var_s1 = 1; } @@ -222,8 +216,7 @@ void ATankerTruck::VehicleCollision(s32 playerId, Player* player) { } break; case 1: - t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, - path); + t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, path); if (t2 > 0) { if (random_int(2) == 0) { // temp_v1_2 = D_80163270[playerId]; diff --git a/src/engine/vehicles/TankerTruck.h b/src/engine/vehicles/TankerTruck.h index e109115a9..f587783d0 100644 --- a/src/engine/vehicles/TankerTruck.h +++ b/src/engine/vehicles/TankerTruck.h @@ -12,8 +12,7 @@ extern "C" { } class ATankerTruck : public AActor { - public: - + public: const char* Type; size_t Index; f32 Speed; @@ -46,6 +45,6 @@ class ATankerTruck : public AActor { virtual void VehicleCollision(s32 playerId, Player* player) override; virtual bool IsMod() override; -private: + private: static size_t _count; -};
\ No newline at end of file +}; diff --git a/src/engine/vehicles/Train.cpp b/src/engine/vehicles/Train.cpp index a3952742d..e34fc12ea 100644 --- a/src/engine/vehicles/Train.cpp +++ b/src/engine/vehicles/Train.cpp @@ -19,7 +19,7 @@ extern "C" { #include "math_util_2.h" #include "render_objects.h" #include "assets/common_data.h" - // #include "common_structs.h" +// #include "common_structs.h" } size_t ATrain::_count = 0; @@ -88,25 +88,25 @@ ATrain::ATrain(ATrain::TenderStatus tender, size_t numCarriages, f32 speed, uint tempLocomotive = &Locomotive; origXPos = tempLocomotive->position[0]; origZPos = tempLocomotive->position[2]; - trainCarYRot = update_vehicle_following_waypoint( - tempLocomotive->position, (s16*) &tempLocomotive->waypointIndex, Speed); + trainCarYRot = + update_vehicle_following_waypoint(tempLocomotive->position, (s16*) &tempLocomotive->waypointIndex, Speed); tempLocomotive->velocity[0] = tempLocomotive->position[0] - origXPos; tempLocomotive->velocity[2] = tempLocomotive->position[2] - origZPos; vec3s_set(trainCarRot, 0, trainCarYRot, 0); - tempLocomotive->actorIndex = add_actor_to_empty_slot(tempLocomotive->position, trainCarRot, - tempLocomotive->velocity, ACTOR_TRAIN_ENGINE); + tempLocomotive->actorIndex = + add_actor_to_empty_slot(tempLocomotive->position, trainCarRot, tempLocomotive->velocity, ACTOR_TRAIN_ENGINE); tempTender = &Tender; if (tempTender->isActive == 1) { origXPos = tempTender->position[0]; origZPos = tempTender->position[2]; - trainCarYRot = update_vehicle_following_waypoint( - tempTender->position, (s16*) &tempTender->waypointIndex, Speed); + trainCarYRot = + update_vehicle_following_waypoint(tempTender->position, (s16*) &tempTender->waypointIndex, Speed); tempTender->velocity[0] = tempTender->position[0] - origXPos; tempTender->velocity[2] = tempTender->position[2] - origZPos; vec3s_set(trainCarRot, 0, trainCarYRot, 0); - tempTender->actorIndex = add_actor_to_empty_slot(tempTender->position, trainCarRot, - tempTender->velocity, ACTOR_TRAIN_TENDER); + tempTender->actorIndex = + add_actor_to_empty_slot(tempTender->position, trainCarRot, tempTender->velocity, ACTOR_TRAIN_TENDER); } for (size_t i = 0; i < PassengerCars.size(); i++) { @@ -115,14 +115,12 @@ ATrain::ATrain(ATrain::TenderStatus tender, size_t numCarriages, f32 speed, uint origXPos = tempPassengerCar->position[0]; origZPos = tempPassengerCar->position[2]; trainCarYRot = update_vehicle_following_waypoint(tempPassengerCar->position, - (s16*) &tempPassengerCar->waypointIndex, - Speed); + (s16*) &tempPassengerCar->waypointIndex, Speed); tempPassengerCar->velocity[0] = tempPassengerCar->position[0] - origXPos; tempPassengerCar->velocity[2] = tempPassengerCar->position[2] - origZPos; vec3s_set(trainCarRot, 0, trainCarYRot, 0); - tempPassengerCar->actorIndex = - add_actor_to_empty_slot(tempPassengerCar->position, trainCarRot, tempPassengerCar->velocity, - ACTOR_TRAIN_PASSENGER_CAR); + tempPassengerCar->actorIndex = add_actor_to_empty_slot( + tempPassengerCar->position, trainCarRot, tempPassengerCar->velocity, ACTOR_TRAIN_PASSENGER_CAR); } } @@ -166,8 +164,8 @@ void ATrain::Tick() { temp_f20 = Locomotive.position[0]; temp_f22 = Locomotive.position[2]; - orientationYUpdate = update_vehicle_following_waypoint( - Locomotive.position, (s16*) &Locomotive.waypointIndex, Speed); + orientationYUpdate = + update_vehicle_following_waypoint(Locomotive.position, (s16*) &Locomotive.waypointIndex, Speed); Locomotive.velocity[0] = Locomotive.position[0] - temp_f20; Locomotive.velocity[2] = Locomotive.position[2] - temp_f22; @@ -175,24 +173,20 @@ void ATrain::Tick() { sync_train_components(&Locomotive, orientationYUpdate); if ((oldWaypointIndex != Locomotive.waypointIndex) && - ((Locomotive.waypointIndex == 0x00BE) || - (Locomotive.waypointIndex == 0x0140))) { // play crossing bell sound - func_800C98B8(Locomotive.position, Locomotive.velocity, - SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x0E)); + ((Locomotive.waypointIndex == 0x00BE) || (Locomotive.waypointIndex == 0x0140))) { // play crossing bell sound + func_800C98B8(Locomotive.position, Locomotive.velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x0E)); } else if (random_int(100) == 0) { // play train whistle sound - func_800C98B8(Locomotive.position, Locomotive.velocity, - SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x0D)); + func_800C98B8(Locomotive.position, Locomotive.velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x0D)); } - SomeFlags = set_vehicle_render_distance_flags( - Locomotive.position, TRAIN_SMOKE_RENDER_DISTANCE, SomeFlags); + SomeFlags = set_vehicle_render_distance_flags(Locomotive.position, TRAIN_SMOKE_RENDER_DISTANCE, SomeFlags); // Renders locomotive smoke on all screens if any player is within range. if ((((s16) AnotherSmokeTimer % 5) == 0) && (SomeFlags != 0)) { smokePos[0] = Locomotive.position[0]; smokePos[1] = (f32) ((f64) Locomotive.position[1] + 65.0); smokePos[2] = (f32) ((f64) Locomotive.position[2] + 25.0); adjust_position_by_angle(smokePos, Locomotive.position, orientationYUpdate); - //spawn_train_smoke(Index, smokePos, 1.1f); + // spawn_train_smoke(Index, smokePos, 1.1f); AddSmoke(Index, smokePos, 1.1f); } @@ -201,8 +195,7 @@ void ATrain::Tick() { if (car->isActive == 1) { temp_f20 = car->position[0]; temp_f22 = car->position[2]; - orientationYUpdate = - update_vehicle_following_waypoint(car->position, (s16*) &car->waypointIndex, Speed); + orientationYUpdate = update_vehicle_following_waypoint(car->position, (s16*) &car->waypointIndex, Speed); car->velocity[0] = car->position[0] - temp_f20; car->velocity[2] = car->position[2] - temp_f22; sync_train_components(car, orientationYUpdate); @@ -214,8 +207,7 @@ void ATrain::Tick() { temp_f20 = car->position[0]; temp_f22 = car->position[2]; - orientationYUpdate = - update_vehicle_following_waypoint(car->position, (s16*) &car->waypointIndex, Speed); + orientationYUpdate = update_vehicle_following_waypoint(car->position, (s16*) &car->waypointIndex, Speed); car->velocity[0] = car->position[0] - temp_f20; car->velocity[2] = car->position[2] - temp_f22; sync_train_components(car, orientationYUpdate); @@ -241,13 +233,13 @@ void ATrain::VehicleCollision(s32 playerId, Player* player) { if ((x_dist > -100.0) && (x_dist < 100.0)) { if ((z_dist > -100.0) && (z_dist < 100.0)) { if (func_80006018(trainCar->position[0], trainCar->position[2], trainCar->velocity[0], - trainCar->velocity[2], 60.0f, 20.0f, playerPosX, playerPosZ) == 1) { + trainCar->velocity[2], 60.0f, 20.0f, playerPosX, playerPosZ) == 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } trainCar = &Tender; if (trainCar->isActive == 1) { if (func_80006018(trainCar->position[0], trainCar->position[2], trainCar->velocity[0], - trainCar->velocity[2], 30.0f, 20.0f, playerPosX, playerPosZ) == 1) { + trainCar->velocity[2], 30.0f, 20.0f, playerPosX, playerPosZ) == 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } } @@ -262,7 +254,7 @@ void ATrain::VehicleCollision(s32 playerId, Player* player) { if ((x_dist > -100.0) && (x_dist < 100.0)) { if ((z_dist > -100.0) && (z_dist < 100.0)) { if (func_80006018(trainCar->position[0], trainCar->position[2], trainCar->velocity[0], - trainCar->velocity[2], 30.0f, 20.0f, playerPosX, playerPosZ) == 1) { + trainCar->velocity[2], 30.0f, 20.0f, playerPosX, playerPosZ) == 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } } @@ -273,7 +265,6 @@ void ATrain::VehicleCollision(s32 playerId, Player* player) { } } - void ATrain::Draw(Camera* camera) { } diff --git a/src/engine/vehicles/Train.h b/src/engine/vehicles/Train.h index b5100586e..d939a7028 100644 --- a/src/engine/vehicles/Train.h +++ b/src/engine/vehicles/Train.h @@ -14,8 +14,7 @@ extern "C" { * @arg waypoint initial waypoint to spawn at. */ class ATrain : public AActor { - public: - + public: enum TenderStatus { NO_TENDER, HAS_TENDER, @@ -54,6 +53,6 @@ class ATrain : public AActor { s32 AddSmoke(s32 trainIndex, Vec3f pos, f32 velocity); void SyncComponents(TrainCarStuff* trainCar, s16 orientationY); -private: + private: static size_t _count; -};
\ No newline at end of file +}; diff --git a/src/engine/vehicles/Truck.cpp b/src/engine/vehicles/Truck.cpp index 585293489..ae1df36a5 100644 --- a/src/engine/vehicles/Truck.cpp +++ b/src/engine/vehicles/Truck.cpp @@ -50,16 +50,13 @@ ATruck::ATruck(f32 speedA, f32 speedB, TrackWaypoint* path, uint32_t waypoint) { Rotation[0] = 0; Rotation[2] = 0; if (D_8016347A == 0) { - Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + Rotation[1] = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - Rotation[1] = - func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); + Rotation[1] = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } D_801631C8 = 10; - spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, - Speed); + spawn_vehicle_on_road(Position, Rotation, Velocity, WaypointIndex, SomeMultiplierTheSequel, Speed); ActorIndex = add_actor_to_empty_slot(Position, Rotation, Velocity, ACTOR_BOX_TRUCK); _count++; @@ -119,11 +116,9 @@ void ATruck::Tick() { } } if (D_8016347A == 0) { - var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0, 3); + var_a1 = func_8000D6D0(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0, 3); } else { - var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, - SomeMultiplierTheSequel, 0); + var_a1 = func_8000D940(Position, (s16*) &WaypointIndex, Speed, SomeMultiplierTheSequel, 0); } adjust_angle(&Rotation[1], var_a1, 100); temp_f0_3 = Position[0] - sp5C; @@ -176,8 +171,8 @@ void ATruck::VehicleCollision(s32 playerId, Player* player) { if ((temp_f22 > -20.0) && (temp_f22 < 20.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { - if (func_80006018(Position[0], Position[2], Velocity[0], - Velocity[2], SomeArg3, SomeArg4, spC4, spBC) == (s32) 1) { + if (func_80006018(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, spC4, + spBC) == (s32) 1) { player->soundEffects |= REVERSE_SOUND_EFFECT; } } @@ -212,8 +207,7 @@ void ATruck::VehicleCollision(s32 playerId, Player* player) { switch (D_8016347A) { case 0: - t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, - path); + t1 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, path); if ((D_80163270[playerId] == 0) && (t1 > 0) && (player->unk_094 < Speed)) { var_s1 = 1; } @@ -222,8 +216,7 @@ void ATruck::VehicleCollision(s32 playerId, Player* player) { } break; case 1: - t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, - path); + t2 = func_80007BF8(WaypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, path); if (t2 > 0) { if (random_int(2) == 0) { // temp_v1_2 = D_80163270[playerId]; diff --git a/src/engine/vehicles/Truck.h b/src/engine/vehicles/Truck.h index c18ce86a5..683c1068b 100644 --- a/src/engine/vehicles/Truck.h +++ b/src/engine/vehicles/Truck.h @@ -12,8 +12,7 @@ extern "C" { } class ATruck : public AActor { - public: - + public: const char* Type; size_t Index; f32 Speed; @@ -46,6 +45,6 @@ class ATruck : public AActor { virtual void VehicleCollision(s32 playerId, Player* player) override; virtual bool IsMod() override; -private: + private: static size_t _count; -};
\ No newline at end of file +}; diff --git a/src/engine/vehicles/Utils.cpp b/src/engine/vehicles/Utils.cpp index d2a3ece57..f51479587 100644 --- a/src/engine/vehicles/Utils.cpp +++ b/src/engine/vehicles/Utils.cpp @@ -8,5 +8,5 @@ extern "C" { } uint32_t CalculateWaypointDistribution(size_t i, uint32_t numVehicles, size_t numWaypoints, uint32_t centerWaypoint) { - return (uint32_t)(((i * numWaypoints) / numVehicles) + centerWaypoint) % numWaypoints; + return (uint32_t) (((i * numWaypoints) / numVehicles) + centerWaypoint) % numWaypoints; } diff --git a/src/engine/wasm.cpp b/src/engine/wasm.cpp index cef8760dd..6503acf75 100644 --- a/src/engine/wasm.cpp +++ b/src/engine/wasm.cpp @@ -244,4 +244,4 @@ // // } // // mod_call_function_wasm("test", "init", 0, NULL); // // exit(-1); -// }
\ No newline at end of file +// } diff --git a/src/engine/wasm.h b/src/engine/wasm.h index 9808c15f2..fbc4023f0 100644 --- a/src/engine/wasm.h +++ b/src/engine/wasm.h @@ -1,2 +1,2 @@ void load_wasm(); -void call_render_hook();
\ No newline at end of file +void call_render_hook(); |
