diff --git a/TagTool/Cache/Resources/ResourceGestalt.cs b/TagTool/Cache/Resources/ResourceGestalt.cs index b58a127f..f5ad7dee 100644 --- a/TagTool/Cache/Resources/ResourceGestalt.cs +++ b/TagTool/Cache/Resources/ResourceGestalt.cs @@ -6,71 +6,164 @@ namespace TagTool.Cache.Resources { + [TagStructure(Name = "cache_file_resource_gestalt", Tag = "zone", Size = 0x598, MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] [TagStructure(Name = "cache_file_resource_gestalt", Tag = "zone", Size = 0x228, MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.MCC)] [TagStructure(Name = "cache_file_resource_gestalt", Tag = "zone", Size = 0x220, Version = CacheVersion.HaloReach11883, Platform = CachePlatform.MCC)] [TagStructure(Name = "cache_file_resource_gestalt", Tag = "zone", Size = 0x214, MaxVersion = CacheVersion.HaloReach11883, Platform = CachePlatform.Original)] public class ResourceGestalt : TagStructure - { + { + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOTagResources; + + [TagField(Length = 0x8, MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public byte[] HOPadding1; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HODesignerZonesets; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOGlobalZoneset; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOUnattachedZoneset; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HODiscForbiddenZoneset; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HODiscAlwaysStreamingZoneset; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOBspZonesets; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOBspZonesets2; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOBspZonesets3; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOCinematicZonesets; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOScenarioZonesets; + + [TagField(Length = 0x18, Flags = TagFieldFlags.Padding, MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public byte[] HOPadding2; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOUnknownBlock1; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOUnknownBlock2; + + [TagField(Length = 0x4, MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public byte[] HOPadding3; + + [TagField(MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public List HOUnknownBlock3; + + [TagField(Length = 0x4CC, Flags = TagFieldFlags.Padding, MinVersion = CacheVersion.HaloOnlineED, MaxVersion = CacheVersion.HaloOnline700123)] + public byte[] HORemainingData; + + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public ScenarioTypeEnum MapType; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public ScenarioFlags Flags; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List ResourceDefinitions; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List InteropDefinitions; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public ResourceLayoutTable LayoutTable = new ResourceLayoutTable(); + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List TagResources; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List DesignerZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List GlobalZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List HsZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List UnattachedDesignerZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List DvdForbiddenZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List DvdAlwaysStreamingZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List DefaultBspZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List StaticBspZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List DynamicBspZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List CinematicZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List ZonesOnlyZoneSetManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List ExpectedZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List FullyPopulatedZoneManifests; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List ZoneSetZoneUsages; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List BspReferences; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List TagReferences; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List ModelVariantUsages; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List CharacterUsages; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public byte[] DefinitionData; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public uint MinimumCompletePageableDataSize; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public uint MinimumRequiredPageableDataSize; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public uint MinimumRequiredDvdDataSize; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public uint GlobalPageableDataSize; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public uint OptionalControlDataSize; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List GlobalResourceUsage; - [TagField(Flags = TagFieldFlags.Padding, Length = 96)] + [TagField(Flags = TagFieldFlags.Padding, Length = 96, MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public byte[] Unused = new byte[96]; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List PredictionQuanta; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List PredictionAtoms; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List PredictionMoleculeAtoms; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List PredictionMolecules; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public List PredictionMoleculeKeys; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public int CampaignId; + [TagField(MaxVersion = CacheVersion.HaloReach, Platform = CachePlatform.Original | CachePlatform.MCC)] public int MapId; - [TagField(Platform = CachePlatform.MCC)] + [TagField(Platform = CachePlatform.MCC, MaxVersion = CacheVersion.HaloReach)] public int Unknown0; - [TagField(Platform = CachePlatform.MCC)] + [TagField(Platform = CachePlatform.MCC, MaxVersion = CacheVersion.HaloReach)] public int Unknown1; public enum ScenarioTypeEnum : short @@ -83,4 +176,125 @@ public enum ScenarioTypeEnum : short SoundsShared } } -} \ No newline at end of file + + [TagStructure(Size = 0x70)] + public class HOTagResource : TagStructure + { + public short Unknown1; + public ushort Flags; + + [TagField(Length = 0x4)] + public byte[] Padding1; + + public int Offset; + public int CompressedSize; + public int UncompressedSize; + public int Checksum; + + [TagField(Length = 0x10, Flags = TagFieldFlags.Padding)] + public byte[] Padding2; + + public CachedTag UnknownTag; + + public short Unknown2; + public sbyte ResourceTypeIndex; + public sbyte Unknown3; + + [TagField(Length = 0x14)] + public byte[] FixupDataRaw; + + public ushort RootDefinitionAddress; + public byte RootDefinitionAddressUpperBits; + public byte RootDefinitionAddressLocationHighBits; + + public List ResourceFixups; + public List ResourceDefinitionFixups; + + public int Unknown4; + } + + [TagStructure(Size = 0x8)] + public class HOResourceFixup : TagStructure + { + public int BlockOffset; + public ushort Address; + public byte AddressUpperBits; + public byte AddressLocationHighBits; + } + + [TagStructure(Size = 0x8)] + public class HOResourceDefinitionFixup : TagStructure + { + public ushort Offset; + public byte OffsetUpperBits; + public byte OffsetLocationHighBits; + public int ResourceStructureTypeIndex; + } + + [TagStructure(Size = 0x60)] + public class HOZoneSet : TagStructure + { + public List RequiredRawPool; + public List OptionalRawPool; + + [TagField(Length = 0x8)] + public byte[] Padding1; + + public StringId SetName; + public List ResourceTypes; + public List RequiredTagPool; + public List OptionalTagPool; + public List ZonesetObjects; + + [TagField(Length = 0xC, Flags = TagFieldFlags.Padding)] + public byte[] Padding2; + } + + [TagStructure(Size = 0x4)] + public class HOActiveBitVector : TagStructure + { + public uint ActiveMembers; + } + + [TagStructure(Size = 0xC)] + public class HOResourceType : TagStructure + { + [TagField(Length = 0xC)] + public byte[] Unknown; + } + + [TagStructure(Size = 0x1C)] + public class HOZoneSetObject : TagStructure + { + public CachedTag Object; + public List Dependencies; + } + + [TagStructure(Size = 0x2)] + public class HOZoneSetObjectDependency : TagStructure + { + public short TagResourceIndex; + } + + [TagStructure(Size = 0x24)] + public class HOUnknownBlock1 : TagStructure + { + public StringId Unknown1; + + [TagField(Length = 0x20)] + public byte[] Unknown; + } + + [TagStructure(Size = 0x10)] + public class HOUnknownBlock2 : TagStructure + { + public CachedTag Unknown; + } + + [TagStructure(Size = 0xC)] + public class HOUnknownBlock3 : TagStructure + { + [TagField(Length = 0xC)] + public byte[] Unknown; + } +}