The following is a brief description of the kinds of files found within the various DAT files. Note that the following information is based on initial beta tests and may be out of date.
game00000.dat - Appears to be all UI related files (LUA, XML, TTF, DDS, etc...) - Last entry (MNF index 0xC15) is ZOSFT with 2087 entries - The Feb/2014 beta patch changes the format of the sub-file data esoaudioen0000.dat esoaudioen0001.dat esoaudioen0002.dat esoaudioen0003.dat - Appears to be all audio files - While the format looks like a RIFF WAV file it does not play in any media player - Information found from GSpot (http://www.headbands.com/gspot/v26x/index.htm) - 24kHz - 1 channel - Codex 0xffff (development use) - Overall format is a regular WAV file. - The large ''data'' chunk looks like a custom format (thus why it is not readable in any regular sound player) byte ChunkName[4] = "data" dword ChunkSize block Blocks[] word BlockSize byte Data[BlockSize] eso0000.dat - As of 6.3.6, archive 0 contains ALL serialized/exported from original SQL Live (internal) database that are required for "Client Public Release Builds" - All these "Defs" and "Defs_infos" are strict serialization of "Defs_client" or "Defs" (but not Defs_Server in client builds) - The list of exhaustive known Defs Datatypes as of 6.3.6 Public build are listed in next section - Related 1:1 MNF entry is known and a short function is given in former said section so one can easily get targeted ingame def file for known datatypes - Some defs are either legacy or old duplicate or even not used anymore. Still, these are easily detectable and are little to no loss at all (assumption is these are left there as lost knowledge of what might be the impact of deleting them) - Name Inconsistency and similarity in datatypes doesn't mean one override another. Usually tightly complement them. A lot of time such complement is both mandatory and misleading or poorly named. (The whole datatypes is solid example of "how much naming things is hard", and taking that mindset in account helps a lot finding what one actually seek in there or overall logic. - Hopefully next section will at last make next sentence obsolete. - Looks like all the same, unknown, file format (no obvious pattern or information) // this sentence is becoming wrong in a few minutes - Has similar 4 byte headers like ''FB FB EC EC'' or ''FA FA EB EB'' - ''FA FA EB EB'' files appear to contain some floating point numbers so may be 3D data of some form. - ''FB FB EC EC'' files are composed of multiple dwords, which generally grow larger and larger. - See below for more details on these files. - From the ZOSFT these appear to be GR2 animation files - The Feb/14 beta patch results in a bunch of sub-files in this archive not having a valid compressed format eso0001.dat - All another, unknown, file format - Looks like a small header followed by very random data (possibly compressed) - Has similar long header: ''29 DE 6C C0 BA A4 53 2B ...'' - From the ZOSFT these appear to be GR2 animation files eso0002.dat - A few DDS files that look like for development and testing use (e.g.: ''missing'' texture) - Beta trial agreement text file (0x000180E9, 0x000180DC, 0x000180CB) - Has an ANFT entry at MNF index 0x00001E6D (contains 7,612 entries) - Has a ZOSFT entry at MNF index 0x00018133 (contains 68,642 entries) - All character animation and texture files - Three files that contain quest text: - Files 0x00018624 (french), 0x00018483 (english), 0x00018326 (french) - Header bytes of ''00 00 00 02 00 09'' - Short header followed by a series of 0x10 byte records followed by text - Text is not NUL terminated eso0003.dat - Havok data - One XML file (0x0001A4C7) containing Havok data - The rest appear to be Havok data files (physics system) - Common header bytes of ''1E 0D B0 CA CE FA 11 ...'' eso0004.dat - DDS files with a variety of purposes (character/NPC, landscape, architecture, etc...) - Rest are files with the ''PSB'' header containing binary data - From the ZOSFT these are ''\art\fx\texture\'' files eso0005.dat eso0006.dat eso0007.dat - All DDS files - Map files - Treasure maps - Loading screens - Map icons - Inventory icons - Ability icons eso0008.dat - eso0014.dat - Appear to be all an unknown file format (same as in eso0001.dat) - Some GR2 files eso0015.dat - eso0020.dat - Sound files (RIFF WAV but don't play) eso0021.dat - Sound files (RIFF WAV but don't play) - File 0x0001F6F7 is a C/C++ header file (WWISE_IDS.h) with sound ID definitions eso0022.dat - Sound files (RIFF WAV but don't play) - File 0x0001E03A is a Wwise SoundBank file, with a BKHD, STMG, and HIRC section eso0023.dat - Sound files (RIFF WAV but don't play) eso0024.dat - Sound files (RIFF WAV but don't play) - File 0x00022DD0 contains sound ID info eso0022.dat - eso0031.dat - Sound files (RIFF WAV but don't play) eso0032.dat - eso0098.dat - All DDS files (all texture related: architecture, landscape, character, NPC, etc...) eso0099.dat - eso0203.dat - Assumed to be landscape/world data - Some DDS files - Looks like files are 512x512 overhead views of the world - A variety of other files in unknown formats - Includes a few that looks like it has a DDS file following a short header - A bunch are exactly the same size (1MB) eso0204.dat - eso215.dat - All empty files except for the header - Assumed to be missing or future world data? - Some files are referenced in the MNF file indexes
ESO0000.DAT Sub-File FormatsEdit
This archive contains two file types that start with the magic bytes of:
-
- FA FA EB EB -- Compressed sub-file data.
- FB FB EC EC -- Index data for the compressed sub-files.
The index file always follows immediately after the compressed sub-file in the DAT file with the exception of the first file with file index 000000 which has no following index and appears to contain duplicate information from another sub-file.
List of Client Public Builds DatatypesEdit
- Exhaustive and up to date as of 6.3.6 minus very last ones that are acceptable guess yet require definitive confirmation
- Enum values reflect 1:1 both mnf ID system for these and actual ingame enums. And are rather stable in between non major version (stable from 5 to 6 excluded, 6 to 7(U30) excluded and so on)
- As usual, enums are either shuffled voluntarily or as other collateral effect every new major version (so this have low chance to be valid at 7.X or U30)
enum class DefDataType : unsigned short { AbilityDef = 0x0, AbilityListDef = 0x1, ClassDef = 0x2, GraveyardDef = 0x3, ItemDef = 0x4, MaterialDef = 0x5, ModelDef = 0x6, ModelTemplateDef = 0x7, MonsterDef = 0x8, QuestConditionDef = 0x9, QuestDef = 0xa, QuestEndingDef = 0xb, QuestStepDef = 0xc, RequirementListDef = 0xd, SpawnerDef = 0xe, GlobalCombatDataDef = 0xf, MonsterAbilityListDef = 0x14, WaypointDef = 0x15, ItemSetDef = 0x16, InteractableObjectDef = 0x17, LootTableDef = 0x18, WaypointPathDef = 0x19, ScriptActionTextDef = 0x1a, FxDef = 0x1b, FxModelDef = 0x1c, FxEmitterDef = 0x1d, FxSoundDef = 0x1e, FxAnimDef = 0x1f, FxLightningDef = 0x20, FxProjectileDef = 0x21, FxMovementDef = 0x22, FxRibbonTrailDef = 0x23, SpawnControllerDef = 0x25, AnimListDef = 0x27, AnimSetDef = 0x28, TerrainTextureDef = 0x29, MonsterModifierDef = 0x2a, ConversationDef = 0x2c, QuestItemDef = 0x2d, EnvironmentDef = 0x2e, GlobalQuestDataDef = 0x2f, QuestRewardDef = 0x30, RenderingMetadataDef = 0x31, ZoneDef = 0x32, StoreDef = 0x33, AmbienceDef = 0x35, MusicDef = 0x36, AnchorObjectDef = 0x37, GlobalSettingsDef = 0x39, ObjectStateDef = 0x3b, WorldDef = 0x3c, VignetteDef = 0x3d, SubzoneDef = 0x3f, CharacterTemplateDef = 0x40, FxSetStateInfoDef = 0x42, FxVisibilityDef = 0x43, WorldTileMapDef = 0x44, WaterVolumeDef = 0x45, GlobalTradeskillDataDef = 0x46, BattleGroundDef = 0x47, MapDef = 0x48, GlobalItemDataDef = 0x49, PointOfInterestDef = 0x4a, TriggerDataDef = 0x4b, ObjectiveDef = 0x4c, FxAnimOverrideDef = 0x4d, RaceDef = 0x4e, NudeMaterialDef = 0x4f, ItemPartMaterialDef = 0x50, TintDef = 0x51, GlobalPvpDataDef = 0x52, GlobalRewardsDataDef = 0x53, InteractableModelDef = 0x54, PSBToAudioMappingDef = 0x55, AllianceDef = 0x56, ErrorStringDef = 0x57, ItemVisualTemplateDef = 0x58, GlobalDeathDataDef = 0x59, KeepDef = 0x5a, KeepPieceDef = 0x5b, RoomDef = 0x5c, SiegeDef = 0x5d, RandomStringTableDef = 0x5e, GreetingTableDef = 0x5f, GlobalRendererDef = 0x60, PostureDef = 0x61, SkillLineDef = 0x62, PostureVisualsDef = 0x63, ToolTipDef = 0x64, FixtureInstanceDef = 0x65, QuestTableDef = 0x66, LightDef = 0x67, ItemVisualStyleDef = 0x68, TintSetDef = 0x69, PostureActionDef = 0x6a, FigureDef = 0x6b, WaterVisualDef = 0x6c, FxLightDef = 0x6d, FxAnimLoopDef = 0x6e, WaveformDef = 0x6f, GlobalFxDataDef = 0x70, QuestBestowalDef = 0x71, FxSiegeAimDef = 0x72, GlobalCharacterCreationDef = 0x73, GlobalKeepDataDef = 0x74, KeepUpgradeDef = 0x75, GuildReputationDef = 0x76, MapLocationDef = 0x77, PostProcessDef = 0x78, FxPostProcessDef = 0x79, ItemStyleRequirementsDef = 0x7a, RandomItemStyleDef = 0x7b, GearBucketDef = 0x7c, AchievementDef = 0x7d, AchievementCategoryDef = 0x7e, TitleDef = 0x7f, SystemMailDef = 0x80, FxCameraShakeDef = 0x81, GlobalAnimationDef = 0x82, AbilityStickDef = 0x83, GlobalMapListDef = 0x84, MapFloorNavigationDef = 0x85, GlobalAudioDef = 0x86, SkyDef = 0x87, AppearanceDef = 0x88, ScriptedEventDef = 0x89, FxBeamDef = 0x8a, FxMaterialDef = 0x8b, GlobalSkyDef = 0x8c, FxFlagDef = 0x8d, FxWeaponFxDef = 0x8e, WeaponFxSetDef = 0x8f, FxGroundProjectionDef = 0x90, ImpactLevelsDef = 0x91, InteriorEnvironmentDef = 0x92, FxWeatherDef = 0x93, WeatherDef = 0x94, FastTravelKeepDef = 0x95, SelectionCapsuleDataDef = 0x96, BookDef = 0x97, BookCollectionDef = 0x98, GlobalFastTravelDef = 0x99, FastTravelGraveyardDef = 0x9a, InteractionCameraDef = 0x9b, PrioritizedPostureStateDef = 0x9c, MedalDef = 0x9d, LensFlareDef = 0x9e, FxMountDef = 0x9f, PrioritizedFXSetStateDef = 0xa0, VOLineDef = 0xa1, FxAnimChoreoDef = 0xa3, ActiveCombatTipDef = 0xa4, GenericVOTableDef = 0xa5, FootfallSplashDef = 0xa6, WeaponSetDef = 0xa7, SimpleInteractableObjectDef = 0xa8, AbilityProgressionLineDef = 0xaa, DoorDef = 0xac, HarvestDataDef = 0xad, GlobalCameraDef = 0xae, CharacterSliderDef = 0xaf, ClickableDef = 0xb0, TutorialDef = 0xb1, PregameCharacterCreateSetupDef = 0xb2, FxInteractableFixtureDef = 0xb3, GlobalLockDataDef = 0xb4, VideoDataDef = 0xb5, CraftComponentTraitDef = 0xb6, GlobalInteractDef = 0xb7, ItemMaterialDef = 0xb8, FxTelegraphDef = 0xb9, ItemPropertiesDef = 0xba, GlobalSoulGemDataDef = 0xbb, PlayerEmoteDef = 0xbc, GlobalSkillDataDef = 0xbd, ParticleDensityDef = 0xbe, FxPropDef = 0xbf, CampaignRulesetDef = 0xc2, CampaignDef = 0xc3, GlobalAbilityDataDef = 0xc4, GlobalMountDataDef = 0xc5, MountDef = 0xc6, GlobalFishingDataDef = 0xc7, TreasureMapDef = 0xc8, ItemTemplateDef = 0xc9, EnchantmentDef = 0xca, ItemQualityDef = 0xcb, EmitterOverrideDef = 0xcc, FxWeatherOverrideDef = 0xcd, WorldPositionNodeDef = 0xce, GlobalDifficultyLevelDataDef = 0xcf, FxStatusEffectDef = 0xd0, RewardDef = 0xd1, LFGDef = 0xd2, GlobalEntitlementPackageDef = 0xd3, GlobalTradingHouseDataDef = 0xd4, HelpDef = 0xd5, HelpCategoryDef = 0xd6, GlobalEventsDataDef = 0xd7, FixtureGroupDef = 0xd8, TwistedLocomotionDef = 0xd9, GlobalPOIDataDef = 0xda, GlobalNameplateDef = 0xdb, BookCollectionCategoryDef = 0xdc, ItemVisualTintDef = 0xdd, GlobalItemTraitsDef = 0xde, RecipeDef = 0xdf, RecipeListDef = 0xe0, GlobalProvisioningDef = 0xe1, GlobalAlchemyDef = 0xe2, GlobalEnchantingDef = 0xe3, SmithingMaterialProgressionDef = 0xe4, SmithingPatternDef = 0xe5, SmithingPatternListDef = 0xe6, ItemTintIndexProgressionDef = 0xe7, GlobalSmithingDef = 0xe8, SmithingResearchDef = 0xe9, KeepUpgradeSetDef = 0xea, MapLocationTooltipCategoryDef = 0xeb, GlobalMapLocationDef = 0xec, EnchantmentValueDef = 0xed, MapKeySectionDef = 0xee, MapKeyDef = 0xef, TintHueDef = 0xf0, DyeDef = 0xf1, DisplayAnnouncementDef = 0xf2, LoadingTipDef = 0xf3, GlobalLoadingTipDef = 0xf4, RaidDef = 0xf6, SpellcraftingDef = 0xf7, GlobalSpellcraftingDef = 0xf8, DeathRecapHintDef = 0xf9, GlobalDeathRecapDef = 0xfa, GlobalTintDataDef = 0xfb, AccentTintProgressionDef = 0xfc, GlobalJusticeDataDef = 0xfd, HeraldryBackgroundDef = 0xfe, HeraldryCrestDef = 0xff, GlobalHeraldryDataDef = 0x100, GlobalFaceFxDef = 0x101, BattleStandardDef = 0x102, HeraldryCategoryDef = 0x103, GlobalDyeDef = 0x104, BoneSetDef = 0x105, GlobalPlayerGuildDef = 0x106, GlobalGamepadDef = 0x107, VibrationDef = 0x108, FxVibrationDef = 0x109, ConsoleAchievementDef = 0x10a, WaveDef = 0x10b, GlobalChampionDef = 0x10c, FaceFxDataDef = 0x10d, AccountTypeDef = 0x10f, EventStageDef = 0x110, MarketProductDef = 0x111, FxTelegraphOverrideDef = 0x112, CollectibleDef = 0x114, GlobalCollectionDef = 0x115, ItemQualityScaleDef = 0x116, CollectibleCategoryDef = 0x117, MarketProductCategoryDef = 0x118, ActorRandomStringTableDef = 0x119, MountSkinDef = 0x11b, FxCameraFovDef = 0x11c, GlobalLocaleDef = 0x11d, GlobalClickableDataDef = 0x11e, GlobalQuickChatDef = 0x11f, LODTriggerVolumeDataDef = 0x120, MapLayerTriggerVolumeDataDef = 0x121, MountTriggerVolumeDataDef = 0x122, ModelTemplateSetDef = 0x123, ItemAbilityScalingDef = 0x124, DisplayAlertDef = 0x125, PersonalityDef = 0x126, FxMessageRelayDef = 0x127, GlobalSCTDef = 0x128, GlobalCharacterPartsListDef = 0x129, SCTEventVisualInfoDef = 0x12a, GlobalActivityFeedDef = 0x12b, ItemTagDef = 0x12c, SCTCloudDef = 0x12d, TheaterSceneDef = 0x12e, PoseDef = 0x12f, GlobalCharacterPoseListDef = 0x130, ClientTriggeredTrapDef = 0x131, TheaterBlockingMarkerDef = 0x132, ZoneOffsetVolumeDef = 0x133, FxAnimPairedDef = 0x134, GlobalMarketSubscriptionInfoDef = 0x135, GlobalHelpOverviewDef = 0x136, CollectibleHatDef = 0x137, CollectibleSkinDef = 0x138, CollectibleCostumeDef = 0x139, CollectiblePersonalityDef = 0x13a, ActivityFeedDef = 0x13b, ConsoleTrophyGroupDef = 0x13c, MotifPreviewDef = 0x13d, FxAnimPairedAnimationVariantsDef = 0x13e, FxAnimPairedCameraDef = 0x13f, MarketProductBundleDef = 0x141, MarketProductCollectibleDef = 0x142, MarketProductInstantUnlockDef = 0x143, MarketProductItemDef = 0x144, AnimNameOverrideListDef = 0x145, DyeStampDef = 0x146, LootCrateDef = 0x147, LootCrateTierDef = 0x148, CollectibleHairDef = 0x149, PlaceableFurnitureDef = 0x14a, BiomeDef = 0x14b, CollectibleAppearanceDef = 0x14c, TheaterActorDef = 0x14d, TheaterDirectionDef = 0x14e, TheaterCueDef = 0x14f, HolidayDef = 0x150, CrownCratePriorityDef = 0x151, GlobalCrownCrateDef = 0x152, MarketProductLootCrateDef = 0x153, LootCrateTierTemplateDef = 0x154, HouseDef = 0x155, HouseEventDef = 0x156, HouseTemplateDef = 0x157, InteractiveFurnitureDef = 0x158, GlobalHousingEditorDef = 0x159, RandomizedCraftingWritDef = 0x15a, CompositeMonsterDef = 0x15b, FurnitureCategoryDef = 0x15d, FurnitureDataDef = 0x15e, PathStripperDef = 0x15f, GlobalPairedFurnitureDef = 0x160, InverseKinematicsRulesetDef = 0x161, MarketProductHousingDef = 0x162, GPUParticleEmitterDef = 0x163, GPUParticleEffectDef = 0x164, GameStartDef = 0x165, BoneCapsuleSetDef = 0x166, LFGSetDef = 0x167, ZoneSetDef = 0x168, FxPhysicsDef = 0x169, GlobalChapterUpgradeDef = 0x16a, GlobalTheaterDataDef = 0x16b, MarketProductPromoDef = 0x16c, PetAbilitySkinDef = 0x16d, CutsceneDef = 0x16e, DataCurveDef = 0x16f, AnimListTypeDef = 0x170, GlobalMemoryDef = 0x173, ItemStyleDef = 0x174, GlobalUISortOrderDef = 0x175, GlobalCurrencyDef = 0x176, CurrencyDef = 0x177, OutfitStyleDef = 0x178, OutfitTemplateDef = 0x179, OutfitTemplateCategoryDef = 0x17a, SkillAdvisorBuildDef = 0x17b, GlobalOutfitDef = 0x17c, OutfitSlotDataDef = 0x17d, LFGRewardsDef = 0x17e, LFGRewardUIDef = 0x17f, MarketProductCurrencyDef = 0x180, FxSpawnPathDef = 0x181, InstantUnlockRewardDef = 0x182, LevelUpDef = 0x183, TextureLayerRevealAnimationDef = 0x184, ChapterUpgradeDef = 0x185, MarketProductChapterDef = 0x186, AbilityRankDeltaDef = 0x187, FxGPUParticleEffectDef = 0x188, FxItemVisualOverrideDef = 0x189, FxAnimFreezeDef = 0x18a, GlobalMarketDef = 0x18b, FxCameraFacingLockDef = 0x18c, RewardListDef = 0x18d, ChapterUpgradeLinksDef = 0x18e, TeachableMomentDef = 0x18f, MonsterPartsDef = 0x190, FxWaveDef = 0x191, FxMusicDef = 0x192, CombinationDef = 0x193, WorldEventDef = 0x194, ZoneStoryQuestBranchDef = 0x195, CharacterAimingDef = 0x196, WorldEventLocationDef = 0x198, WorldEventMonsterDef = 0x199, MonsterFlightDataDef = 0x19c, GlobalGuildFinderDef = 0x19d, DaedricArtifactDef = 0x19e, PoseSetDef = 0x19f, AreaOfOperationsDef = 0x1a0, WaypointInfoDef = 0x1a1, AntiquityDef = 0x1a2, AntiquityCategoryDef = 0x1a3, AntiquityTagDef = 0x1a4, AntiquityDigSiteDef = 0x1a5, AntiquitySetDef = 0x1a6, GlobalVideoDataDef = 0x1a7, GlobalAntiquityDef = 0x1a8, AntiquityDiggingBonusLootDef = 0x1a9, AntiquityEncasementDef = 0x1aa, AntiquityDigSpotObstructionPoolDef = 0x1ab, AntiquityDigSpotVisualInfoDef = 0x1ac, HolidayAnnouncementDef = 0x1ad, CPUParticleEffectDef = 0x1ae, CPUParticleEmitterDef = 0x1af, FxXrayOutlineDef = 0x1b0, GlobalAchievementDef = 0x1b1, ItemSetCollectionCategoryDef = 0x1b2, GlobalItemSetCollectionsDef = 0x1b3, ChampionSkillDef = 0x1b4, AdvancedStatsCategoryDef = 0x1b5, GlobalAdvancedStatsDef = 0x1b6 };
Getting Game Definition MNF EntryEdit
- Entry existence is rather consistent yet is not requiring actual existing definition file so expect inconsistencies when a definition is obsolete or not present in public build.
uint64_t DefEnums::DFT::GetClientGameDataFileId(unsigned short DataType, int FileType) { FileType = filetype>=1; return ((uint64_t)(FileType | 0x60000000u) << 0x20) | DataType; } uint64_t GetFileId(DefDataType DataType, unsigned int FileType) { FileType = filetype>=1; return ((uint64_t)(FileType | 0x60000000u) << 0x20) | DefDataTypeToNumber(DataType); }
- Filetype is Either 0 or 1, being what EsoExtractData call respectively "EsoFileData" versus related "EsoIdFile" if I recall correctly.
- Usually will only be of any use the 0x0 one, as 0x1 type is expected to be related index and nothing more (again, Game history has proven such theory to have unexpected exception, even if this is now made cleaner each game update).
- Correspondance in EsoExtractDataFormat for relevant entries (file index might not be up to date)
807809, 0x00000000, 0x00000000, 0x60000000, 0x00B65DF9, 0x00367808, 0x9BD484DC, 0x0000000E, 0x00, 0x00, 0x0004, // abilityDef 807810, 0x00000000, 0x00000000, 0x60000001, 0x000903CE, 0x0001EFA5, 0xEE4B41E1, 0x00367816, 0x00, 0x00, 0x0004, ... 807929, 0x00000000, 0x00000048, 0x60000000, 0x00034825, 0x0001AF85, 0x99EC0E7A, 0x023E8D4E, 0x00, 0x00, 0x0004, // mapdef and so on 807930, 0x00000000, 0x00000048, 0x60000001, 0x0000375E, 0x00000ABD, 0xFC5E8256, 0x02403CD3, 0x00, 0x00, 0x0004, .. 808629, 0x00000000, 0x000001B6, 0x60000000, 0x00000053, 0x00000055, 0x35499427, 0x039B9BB5, 0x00, 0x00, 0x0004, //GlobalAdvancedStatsDef 808630, 0x00000000, 0x000001B6, 0x60000001, 0x00000026, 0x00000028, 0xD4570614, 0x039B9C0A, 0x00, 0x00, 0x0004, ... 808637, 0x00000000, 0x000001BC, 0x60000000, 0x00000229, 0x000001C4, 0xD2453E10, 0x039B9E31, 0x00, 0x00, 0x0004, // not disclosed temporarily there 808638, 0x00000000, 0x000001BC, 0x60000001, 0x0000006E, 0x00000070, 0x648FB015, 0x039B9FF5, 0x00, 0x00, 0x0004,
Compressed Sub-File FormatEdit
The general layout of this file is a short header followed by multiple sub-files/records each with a short header followed by zLib compressed data. All data in this file is in Big-endian byte order.
-
- Header (16 Bytes)
-
- dword MagicBytes = 0xFAFAEBEB
- dword Unknown1 = 0x00000011
- dword NumRecords (0-271024)
- dword Unknown2 = 0x00000004
- (0...NumRecords) Sub-File Data (variable size)
Each sub-file has the format:
-
- Header (12 bytes)
-
- dword UncompressedSize1
- dword UncompressedSize2 (always the same as UncompressedSize1)
- dword CompressedSize
- byte CompressedData[CompressedSize]; (always starts with 78 9C)
The format of the uncompressed data varies but it usually (always?) starts with a 4 byte ID/Index which uniquely identifies the record.
Index Sub-File FormatEdit
The index sub-file contains a short header followed by 0 or more 8-byte records. All data in this file is in Big-endian byte order.
-
- Header (20 bytes)
-
- dword MagicBytes = 0xFBFBECEC
- dword Unknown1 = 0x00000004
- word Unknown2 (usually 0x0001, sometimes 0x0011)
- dword Unknown3 = 0x00000011 (same as Unknown1 from the sub-file data header)
- dword Unknown4 (same as Unknown2 from the sub-file data header)
- dword Unknown5 (takes on a wide range of values)
- dword NumRecords (always the same as the NumRecords from the matching sub-file data)
- (0...NumRecords) RecordData (8 bytes each)
-
- dword Index = Uniquely identifies the record in the sub-file data, same as the first 4 bytes in the uncompressed sub-file dataq
- dword Offset = Offset to the start of the sub-file data from the beginning of the file.