GoodEngine/HO (File Format): Difference between revisions

no edit summary
m (new target game)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 5:
 
==Format==
===HEL/HEB (Header)===
{| class="wikitable"
|-
! Offset !! Type !! Variable !! Description
|-
| 0x00 || stringchar[4] || '''cMagic''' || '''HEL''' or '''HEB'''
|-
| 0x04 || int || '''verPackFile''' ||
Line 20:
| 0x10 || long || '''timeValue''' || Number of seconds since 00:00, Jan 1 1970 UTC, with a timezone offset of UTC-7:00 (Pacific Time).
|-
| 0x18 || stringchar[0x18] || '''timeString''' || <code>Www Mmm dd hh:mm:ss yyyy</code>
|-
| 0x40 || int || [FormatInfo] '''sectorSize''' || Always 0x800 (2048 bytes).
Line 26:
| 0x44 || int || [MasterTable] '''startSector''' || Always 1 (if '''sectorSize''' is 0x800).
|-
| 0x48 || int || [MasterTable] '''tableSize''' || Size of [[#MAST (MasterTable)|MAST]].
|-
| 0x4C || intbyte[0x3B4] || '''pad01reserved''' || ''null''
|-
| 0x400 || WideString || '''platform''' ||
Line 42:
* WALE = Wall-E
* Up = Up
* SB09 = SpongebobSpongeBob's Truth or Square
* UFCT = UFC Personal Trainer
* FIVE = Harley Pasternak's Hollywood Workout
* FGUY = Family Guy: Back to the Multiverse
* RB09 = ? '''[Unreleased]'''
* STRO = Saints Row: The Cooler '''[Unreleased]'''
* MM = Megamind '''[Unreleased]'''
* CSNO = Casino '''[Unreleased]'''
* BAKU = Bakugan '''[Unreleased]'''
* UFCU = UFC Undisputed '''[Unreleased]'''
* WA/WA10 = Warhammer 40.000: Armageddon Skies '''[Unreleased]'''
|-
| 0x4BC || WideString || '''creator''' || always "'''GoodEditor:PackView.GEPlugin'''"
Line 62 ⟶ 55:
| 0x63C || int || '''libVersion''' || Always 1.
|-
| 0x640 || intbyte[0x1C0] || '''pad02reserved''' || ''null''
|}
 
===MAST (MasterTable)===
====TableHeader====
{| class="wikitable"
Line 71 ⟶ 64:
! Offset !! Type !! Variable !! Description
|-
| 0x00 || stringchar[4] || '''tableTypeTag''' || '''MAST'''
|-
| 0x04 || int || '''entryCount''' || Amount of [[#MasterEntry|master entries]], always 1.
Line 85 ⟶ 78:
| 0x18 || int || '''metaDataSize''' || ''null''
|-
| 0x1C || intbyte[4] || '''reserved''' || ''null''
|}
 
Line 95 ⟶ 88:
| 0x00 || int || '''sectionType''' || '''SECT/TCES'''
|-
| 0x04 || shortushort || '''packLangID''' || ''null''
|-
| 0x06 || byteubyte || '''parcelType''' || ''null''
|-
| 0x07 || byte || '''pad''' || ''0x33''
Line 103 ⟶ 96:
| 0x08 || int || '''userKey''' || ''null''
|-
| 0x0C || intuint || '''nameHash''' || Lowercase BKDRHashBKDR hash of domain string.
|-
| 0x10 || int || '''namePtr''' || Offset to domain string, relative to start of [[#MAST (MasterTable)|MAST]].
|-
| 0x14 || intuint || '''fromNameHash''' || ''null''
|-
| 0x18 || int || '''fromNamePtr''' || ''0xFFFFFFFF''
|-
| 0x1C || int || '''startSector''' || Multiply this by [[#HEL/HEBHeader|'''sectorSize''']] to get the absolute offset. Start of [[#SECT (SectionTable)|SECT (SectionTable)]].
|-
| 0x20 || int || '''sizeOnDisk''' || Size of [[#SECT (SectionTable)|SECT]].
|-
| 0x24 || int || '''sizeInMem''' || Size of [[#SECT (SectionTable)|SECT]].
|-
| 0x28 || int || '''memoryAlignment''' || ''0xFFFFFFFF''
Line 127 ⟶ 120:
| 0x38 || int || '''metaRecord''' || ''0xFFFFFFFF''
|-
| 0x3C || intbyte[4] || '''reserved''' || ''null''
|}
 
Line 133 ⟶ 126:
Unknown
 
===SECT (SectionTable)===
====TableHeader====
{| class="wikitable"
Line 139 ⟶ 132:
! Offset !! Type !! Variable !! Description
|-
| 0x00 || stringchar[4] || '''tableTypeTag''' || '''SECT'''
|-
| 0x04 || int || '''entryCount''' || Amount of [[#SectionEntry|section entries]].
Line 153 ⟶ 146:
| 0x18 || int || '''metaDataSize''' || Size of PSL/PSLD entries in [[#MetaSection|MetaSection]] (without child blocks).
|-
| 0x1C || intbyte[4] || '''reserved''' || ''null''
|}
 
Line 165 ⟶ 158:
* '''PD/DP''' = ParcelDebug
* '''PTEX/XETP''' = ParcelTexture
* '''PFST/TSFP''' = ParcelMemFast '''(Not present in Ratatouille)'''
|-
| 0x04 || shortushort || '''packLangID''' ||
'''(Values are in big-endian)'''<br>First byte is region code, second byte is language code<br>E.g., 0x0409 = English US, 0x0009 = English Neutral
* 0x0000 = NeutralNeutralNeutral Neutral
* 0x0401 = ArabicSaudiArabiaArabic SaudiArabia
* 0x0804 = ChineseChinaChinese China
* 0x0C04 = ChineseHongKongChinese HongKong
* 0x0404 = ChineseTaiwanChinese Taiwan
* 0x1004 = ChineseSingaporeChinese Singapore
* 0x0405 = CzechRepublicCzech Republic
* 0x0406 = DanishDenmarkDanish Denmark
* 0x0413 = DutchNetherlandsDutch Netherlands
* 0x0409 = EnglishUSEnglish US
* 0x0809 = EnglishUKEnglish UK
* 0x0C09 = EnglishAustraliaEnglish Australia
* 0x1009 = EnglishCanadaEnglish Canada
* 0x040B = FinnishFinlandFinnish Finland
* 0x040C = FrenchFranceFrench France
* 0x0407 = GermanGermanyGerman Germany
* 0x0807 = GermanSwissGerman Swiss
* 0x0408 = GreekGreeceGreek Greece
* 0x0410 = ItalianItalyItalian Italy
* 0x0411 = JapaneseJapanJapanese Japan
* 0x0412 = KoreanKoreaKorean Korea
* 0x0814 = NorwegianNynorskNorwegian Nynorsk
* 0x0415 = PolishPolandPolish Poland
* 0x0816 = PortuguesePortugalPortuguese Portugal
* 0x0416 = PortugueseBrazilianPortuguese Brazilian
* 0x0419 = RussianFederationRussian Federation
* 0x041B = SlovakSlovakSlovak Slovak
* 0x080A = SpanishMexicanSpanish Mexican
* 0x0C0A = SpanishSpainSpanish Spain
* 0x041D = SwedishSwedenSwedish Sweden
* 0x0422 = UkrainianUkraineUkrainian Ukraine
|-
| 0x06 || byteubyte || '''parcelType''' ||
* 0 = UNDEFINED
* 1 = EXCLUSIVE
Line 211 ⟶ 204:
| 0x08 || int || '''userKey''' || ''null''
|-
| 0x0C || intuint || '''nameHash''' || Lowercase BKDRHashBKDR hash of domain string.
|-
| 0x10 || int || '''namePtr''' || Offset to domain string, relative to start of [[#SECT (SectionTable)|SECT]].
|-
| 0x14 || intuint || '''fromNameHash''' || Lowercase BKDRHashBKDR hash of domain string from original parcel (if '''parcelType''' is 3).
|-
| 0x18 || int || '''fromNamePtr''' || ''0xFFFFFFFF''
|-
| 0x1C || int || '''startSector''' || Multiply this by [[#HEL/HEBHeader|'''sectorSize''']] to get the absolute offset. Start of section.
|-
| 0x20 || int || '''sizeOnDisk''' || Size of section.
Line 231 ⟶ 224:
| 0x30 || int || '''externName''' || ''0xFFFFFFFF''
|-
| 0x34 || int || '''metaBlockCount''' || Amount of [[#PSL (ParcelSliceMeta)|PSL]]/[[#PSLD (ParcelSliceDebugMeta)|PSLD]] entries, always 1.
|-
| 0x38 || int || '''metaRecord''' || Offset to [[#PSL (ParcelSliceMeta)|PSL]] (P, PTEX, PFST) or [[#PSLD (ParcelSliceDebugMeta)|PSLD]] (PD) entry, relative to start of [[#SECT (SectionTable)|SECT]].
|-
| 0x3C || intbyte[4] || '''reserved''' || ''null''
|}
 
 
===MetaSection===
====PSL (ParcelSliceMeta)====
{| class="wikitable"
|-
Line 247 ⟶ 239:
! colspan="4" | MetaParcelSlicesHeader
|-
| 0x00 || stringchar[4] || '''metatype''' || '''PSL'''
|-
| 0x04 || int || '''metasize''' || Size of PSL.
Line 296 ⟶ 288:
| 0x18 || int || '''wmlTypeID''' || AssetType of corresponding asset.
|-
| 0x1C || short || '''subType''' || Not present in Ratatouille/Wall-E
|-
| 0x1E || short || '''blobFlags''' || int32 in Ratatouille/Wall-E
|}
 
====PSLD (ParcelSliceDebugMeta)====
{| class="wikitable
|-
Line 316 ⟶ 308:
| 0x10 || byte[16] || Unknown ||
|}
 
=====PSLD Entry=====
{| class="wikitable"
Line 327 ⟶ 320:
| 0x00 || [[AssetID]] || '''assetid''' || AssetID of corresponding asset.
|-
| 0x08 || int || '''offset'''? || OffsetRelative offset to assetname?
|-
| 0x0C || int || Unknown ||
Line 335 ⟶ 328:
| 0x14 || int[3] || Unknown || ''null''
|-
| 0x20 || Stringchar[] || '''assetname''' || NameNull-terminated name of corresponding asset.
|-
| colspan="4 | Padding - 0x33 bytes until this entry reaches '''<entrySize>''' in length.
|}
 
 
[[Category:File Format]] [[Category:GoodEngine]]
2,079

edits