diff --git a/patterns/Crashlvl.hexpat b/patterns/Crashlvl.hexpat index 4bb69d3..2feb741 100644 --- a/patterns/Crashlvl.hexpat +++ b/patterns/Crashlvl.hexpat @@ -1,12 +1,15 @@ #pragma author AdventureT #pragma description Crash Bandicoot - Back in Time (fan game) User created level format -// Supports all versions till 0.94c, newer versions might be compatible! +#pragma history +#pragma 0.3 2024-05-15 Added support for version 0.95 +#pragma 0.2 2023-10-29 Added support for version 0.94c +#pragma 0.1 2023-04-25 Initial support +// Supports all versions till 0.95, newer versions might be compatible! import type.magic; import std.string; import std.array; - struct Header { type::Magic<"CRASHLVL"> magic; u8 version; @@ -17,8 +20,6 @@ struct Header { std::string::SizedString author; }; -Header header @ 0x0; - // Background Music enum BGM : u32 { None, @@ -37,6 +38,56 @@ enum BGM : u32 { }; enum BGMV2 : u32 { + None, + N_TropyBGM, + CrashCreatorBGM, + MainMenuBGM, + WarpRoomBGM, + Jungle01BGM, + SnowBGM, + RiverBGM, + FutureBGM, + LabBGM, + SewerBGM, + EgyptBGM, + NBrioBGM, + AdventureBGM, + SpyBGM, + ChaseBGM, + TrialsBGM, + SpaceBGM, + Jungle02BGM, + RipperBGM, + TheGreatWallBGM, + RoadToSomewhereBGM, + LavaKoalaBGM, + CortexBGM, + CyberCortexBGM, + ArabicBGM, + N_Tropy2BGM, + JazzBGM, + Space2BGM, + TawnaBonusBGM, + CortexPowerBGM, + ArabicBonusBGM, + EgyptBonusBGM, + FutureBonusBGM, + LostCityBGM, + PolarBGM, + RiverBonusBGM, + RuinsBonusBGM, + SewerBonusBGM, + SnowBonusBGM, + RoadToRuinBGM, + NGinBGM, + Arabia01BGM, + Arabia02BGM, + BashBGM, + Cortex02BGM +}; + +// v0.95 +enum BGMV3 : BGMV2 { None, N_TropyBGM, CrashCreatorBGM, @@ -83,12 +134,19 @@ enum BGMV2 : u32 { Arabia02BGM, BashBGM, Cortex02BGM, + MedievalBGM, + PreHistoricBGM, + UnderWaterBGM, + BrioRevisitedBGM, + EgyptChaseBGM, + RuinsLoopBGM, + DingoSynthBGM }; enum Type : u32 { Unset, Flashback, - Trial, + Trial }; enum TypeV2 : u32 { @@ -118,13 +176,31 @@ enum SkyboxV2 : u32 { Black }; +// 0.95 +enum SkyboxV3 : u32 { + Default = 1, + Briolab, + Fort, + Moon, + Toxic, + AboutRight, + Crash1Island, + Arabia, + RoadToRuin, + MotorcycleDay, + MotorcycleNoon, + MotorcycleMoon, + MotorcycleNight, + Black +}; + enum Scenery : u32 { None, FutureTense, Forest, Waterfall, Snow, - Fortress, + Fortress }; enum SceneryV2 : u32 { @@ -165,44 +241,102 @@ enum SceneryV4 : u32 { Pipes }; +// 0.95 +enum SceneryV5 : u32 { + None, + FutureTense, + Forest, + Waterfall, + Snow, + Fortress, + None2, + Lava, + TheGreatGate, + Mountain, + KoalaKong, + SunsetVista, + HangemHigh, + Sphynxinator, + Tunnel, + Pipes, + Medieval, + FutureCity, + TinyArena, + HeavyMachinery, + CrystalCave, + MedievalWithHouses, + CortexBonusChamber +}; + enum Weather : u32 { Default, Snow, Rain }; +// 0.95 +enum WeatherV2 : u32 { + Default, + Snow, + Rain, + Night, + UnderWater +}; + + struct Options { - - if (header.version > 1) + // Type + if (header.version > 1) { TypeV2 type; - else - Type type; - - if (header.version > 1) - SkyboxV2 skybox; - else - Skybox skybox; - - if (header.version == 1) - Scenery scenery; - else if (header.version > 1 && header.version < 4) - SceneryV2 scenery; - else - SceneryV4 scenery; - - if (header.version > 2) - { - Weather weather; } - - if (header.version > 1) + else { + Type type; + } + // Skybox + if (header.version > 1) { + if (header.gameVersion == "0.95") { + SkyboxV3 skybox; + } + else { + SkyboxV2 skybox; + } + } + else { + Skybox skybox; + } + // Scenery + if (header.version == 1) { + Scenery scenery; + } + else if (header.version > 1 && header.version < 4) { + SceneryV2 scenery; + } + else { + if (header.gameVersion == "0.95") { + SceneryV5 skybox; + } + else { + SceneryV4 skybox; + } + } + // Weather + if (header.version > 2) { + if (header.gameVersion == "0.95") { + WeatherV2 weather; + } + else { + Weather weather; + } + } + // Background music + if (header.version > 1) { BGMV2 bgm; - else + } + else { BGM bgm; - - - if (type == Type::Trial) - { + } + // Time Trial + if (type == Type::Trial) { u32 timeTrialTicksBronze; u32 timeTrialTicksSilver; u32 timeTrialTicksGold; @@ -210,22 +344,17 @@ struct Options { }; struct Object { - std::string::SizedString objName; - - if (header.version > 1) - { + if (header.version > 1) { u16 x; u16 y; bool hasMetafields; - if (hasMetafields) - { + if (hasMetafields) { u16 numOfMetafields; u8 metafields[numOfMetafields]; } - } - else - { + } + else { u32 x; u32 y; } @@ -236,9 +365,6 @@ struct Objects{ std::Array objArray; }; - +Header header @ $; Options options @ $; -Objects objects @ $; - - - +Objects objects @ $; \ No newline at end of file