diff --git a/CHANGELOG.md b/CHANGELOG.md index 51f0f23..92612d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Helper version crc calculator method for `MetaClass`. - Better `TTArchive` compression detection. - A dedicated `Compression` class. +- Support for many new types, including SArrays. +- Missing enums. +- Added missing members to support some older games. +- Support for .ambience files. +- SectionDepth in MetaStream. +- API related to MetaStream to improve serialization support and parity. +- Logging in MetaClassSerializer. +- Many serializers to handle support for old games and improve existing ones. +- Logging when there's no profilesPath found. ### Changed - Rename the following MetaStream implementations: `MetaStreamReader`/`MetaStreamWriter` to `BinaryMetaStreamReader`/`BinaryMetaStreamWriter`. @@ -33,11 +42,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - `Serialize` from `MetaStream` now automatically preserializes. - Namespaces organization. (#24) - Various class names. (#24) +- Symbols now use their own serializers instead of the ones. +- Use LRU caching by default for Containers. +- Removed constraint for GetSerializer - it should support all types. +- Make Blowfish key optional in Containers. +- Animation serializer to return rather than throw when there's an unregistered type. ### Fixed - A regression that did not allow files being copied to the output folder. - Blowfish encryption not working correctly. - +- Many serializers. +- Zlib detection for TTArchive. +- MBIN and MTRE stream support. +- TTArchive2 creation. + ### Removed - A csproj folder. - Redundant `MetaStreamVersion` from `GameProfile`. @@ -45,6 +63,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - `PreSerialize` from `MetaStream`. - Redundant `Version` from `MetaStreamParams`. - Unused `ISymbolResolver` interface. +- Symbol serializing from MetaStream. This does not affect anything except if you use `stream.Serialize(obj)` of type Symbol. + +## [0.2.1] - 2026-05-28 +### Fixed +- Data files not being copied to output directory. ## [0.2.0] - 2026-05-28 @@ -116,7 +139,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Initial support for the following file formats: `.aam`, `.amap`, `.anm`, `.aud`, `.chore`, `.d3dmesh`, `.d3dtx`, `.dlg`, `.dlog`, `.dss`, `.font`, `.imap`, `.landb`, `.lanreg`, `.lang`, `.langdb`, `.langres`, `.ldb`, `.locreg`, `.look`, `.note`, `.overlay`, `.ptable`, `.prop`, `.rules`, `.save`, `.scene`, `.skl`, `.style`, `.tmap`, `.vox`, `.wbox`. Currently most serializers are **unfinished and unreliable, especially in writing mode**. Over time, they will get polished and refined. - Registration system for types, metaclasses, type serializers and game descriptors (game configurations). -[unreleased]: https://github.com/iMrShadow/TelltaleToolKit/compare/0.2.0...HEAD +[unreleased]: https://github.com/iMrShadow/TelltaleToolKit/compare/0.2.1...HEAD +[0.2.1]: https://github.com/iMrShadow/TelltaleToolKit/releases/tag/0.2.1 [0.2.0]: https://github.com/iMrShadow/TelltaleToolKit/releases/tag/0.2.0 [0.1.0]: https://github.com/iMrShadow/TelltaleToolKit/releases/tag/0.1.0 \ No newline at end of file diff --git a/data/CHANGELOG.md b/data/CHANGELOG.md index c709344..971e3d0 100644 --- a/data/CHANGELOG.md +++ b/data/CHANGELOG.md @@ -1,5 +1,24 @@ ## Database Changelog +### 26th of June, 2026 + +#### Game Profiles +- Added initial game profiles for the following games: + - Tales of Monkey Island (2010) (PC) (All 5 Episodes) + - Back To The Future: The Game (2011) (All 5 Episodes) + - Jurassic Park: The Game (2011) + - Puzzle Agent 2 (2011) + - Lad & Order - Legacies (2012) + - Poker Night 2 (2013) +- Fixed an encryption key for The Walking Dead: Season 2. + +#### Version Database +- Added initial version databases for aforementoned games. +- Updated the global database with the new meta class descriptions. +- Implemented meta class descriptions for animations. +- Added a missing member in DlgChild for The Wolf Among Us and The Walking Dead: Season 2. +- Removed some files that weren't used. + ### 1st of June, 2026 #### Game Profiles diff --git a/data/game_profiles/back-to-the-future-101-2010.json b/data/game_profiles/back-to-the-future-101-2010.json new file mode 100644 index 0000000..af65d01 --- /dev/null +++ b/data/game_profiles/back-to-the-future-101-2010.json @@ -0,0 +1 @@ +{"name":"back-to-the-future-101-2010","description":"","blowfishKey":"Bttf101","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.0.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/back-to-the-future-102-2011.json b/data/game_profiles/back-to-the-future-102-2011.json new file mode 100644 index 0000000..156acc1 --- /dev/null +++ b/data/game_profiles/back-to-the-future-102-2011.json @@ -0,0 +1 @@ +{"name":"back-to-the-future-102-2011","description":"","blowfishKey":"Bttf102","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.0.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/back-to-the-future-103-2011.json b/data/game_profiles/back-to-the-future-103-2011.json new file mode 100644 index 0000000..9d82a8e --- /dev/null +++ b/data/game_profiles/back-to-the-future-103-2011.json @@ -0,0 +1 @@ +{"name":"back-to-the-future-103-2011","description":"","blowfishKey":"Bttf103","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.0.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/back-to-the-future-104-2011.json b/data/game_profiles/back-to-the-future-104-2011.json new file mode 100644 index 0000000..993a4e9 --- /dev/null +++ b/data/game_profiles/back-to-the-future-104-2011.json @@ -0,0 +1 @@ +{"name":"back-to-the-future-104-2011","description":"","blowfishKey":"Bttf104","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.0.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/back-to-the-future-105-2011.json b/data/game_profiles/back-to-the-future-105-2011.json new file mode 100644 index 0000000..17c8012 --- /dev/null +++ b/data/game_profiles/back-to-the-future-105-2011.json @@ -0,0 +1,10 @@ +{ + "name": "back-to-the-future-105-2011", + "description": "", + "blowfishKey": "Bttf105", + "isTtarch2": false, + "ttarchVersion": 8, + "luaVersion": "5.0.2", + "streamVersion": 3, + "enableOodleCompression": false +} \ No newline at end of file diff --git a/data/game_profiles/jurassic-park-the-game-2011.json b/data/game_profiles/jurassic-park-the-game-2011.json new file mode 100644 index 0000000..53a37fd --- /dev/null +++ b/data/game_profiles/jurassic-park-the-game-2011.json @@ -0,0 +1,10 @@ +{ + "name": "jurassic-park-the-game-2011", + "description": "", + "blowfishKey": "JurassicPark", + "isTtarch2": false, + "ttarchVersion": 9, + "luaVersion": "5.0.2", + "streamVersion": 3, + "enableOodleCompression": false +} \ No newline at end of file diff --git a/data/game_profiles/law-and-order-legacies-2012.json b/data/game_profiles/law-and-order-legacies-2012.json new file mode 100644 index 0000000..b3e39d4 --- /dev/null +++ b/data/game_profiles/law-and-order-legacies-2012.json @@ -0,0 +1,10 @@ +{ + "name": "law-and-order-legacies-2011", + "description": "", + "blowfishKey": "LawAndOrder", + "isTtarch2": false, + "ttarchVersion": 9, + "luaVersion": "5.1.2", + "streamVersion": 3, + "enableOodleCompression": false +} \ No newline at end of file diff --git a/data/game_profiles/poker-night-2-2013.json b/data/game_profiles/poker-night-2-2013.json index 3d308b2..fa0a520 100644 --- a/data/game_profiles/poker-night-2-2013.json +++ b/data/game_profiles/poker-night-2-2013.json @@ -1,10 +1,10 @@ { - "name": "Poker Night 2", + "name": "poker-night-2-2011", "description": "", - "blowfishKey": "Batman", + "blowfishKey": "CelebrityPoker2", "isTtarch2": false, - "ttarchVersion": 9, - "luaVersion": "5.2.3", - "streamVersion": 6, - "enableOodleCompression": true + "ttarchVersion": 7, + "luaVersion": "5.1.2", + "streamVersion": 3, + "enableOodleCompression": false } \ No newline at end of file diff --git a/data/game_profiles/puzzle-agent-2-2011.json b/data/game_profiles/puzzle-agent-2-2011.json new file mode 100644 index 0000000..0b0bf45 --- /dev/null +++ b/data/game_profiles/puzzle-agent-2-2011.json @@ -0,0 +1,10 @@ +{ + "name": "puzzle-agent-2-2011", + "description": "", + "blowfishKey": "Grickle201", + "isTtarch2": false, + "ttarchVersion": 9, + "luaVersion": "5.1.2", + "streamVersion": 3, + "enableOodleCompression": false +} \ No newline at end of file diff --git a/data/game_profiles/tales-of-monkey-island-1-pc-2010.json b/data/game_profiles/tales-of-monkey-island-1-pc-2010.json new file mode 100644 index 0000000..f00f598 --- /dev/null +++ b/data/game_profiles/tales-of-monkey-island-1-pc-2010.json @@ -0,0 +1,10 @@ +{ + "name": "Tales of Monkey Island 1 (GOG, PC)", + "description": "", + "blowfishKey": "MonkeyIsland101", + "isTtarch2": false, + "ttarchVersion": 0, + "luaVersion": "5.1.2", + "streamVersion": 3, + "enableOodleCompression": false +} \ No newline at end of file diff --git a/data/game_profiles/tales-of-monkey-island-2-pc-2010.json b/data/game_profiles/tales-of-monkey-island-2-pc-2010.json new file mode 100644 index 0000000..ef47958 --- /dev/null +++ b/data/game_profiles/tales-of-monkey-island-2-pc-2010.json @@ -0,0 +1,10 @@ +{ + "name": "tales-of-monkey-island-2-pc-2010", + "description": "", + "blowfishKey": "MonkeyIsland102", + "isTtarch2": false, + "ttarchVersion": 8, + "luaVersion": "5.1.2", + "streamVersion": 3, + "enableOodleCompression": false +} \ No newline at end of file diff --git a/data/game_profiles/tales-of-monkey-island-3-pc-2010.json b/data/game_profiles/tales-of-monkey-island-3-pc-2010.json new file mode 100644 index 0000000..82909f4 --- /dev/null +++ b/data/game_profiles/tales-of-monkey-island-3-pc-2010.json @@ -0,0 +1 @@ +{"name":"tales-of-monkey-island-3-pc-2010","description":"","blowfishKey":"MonkeyIsland103","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.1.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/tales-of-monkey-island-4-pc-2010.json b/data/game_profiles/tales-of-monkey-island-4-pc-2010.json new file mode 100644 index 0000000..7a61597 --- /dev/null +++ b/data/game_profiles/tales-of-monkey-island-4-pc-2010.json @@ -0,0 +1 @@ +{"name":"tales-of-monkey-island-4-pc-2010","description":"","blowfishKey":"MonkeyIsland103","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.1.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/tales-of-monkey-island-5-pc-2010.json b/data/game_profiles/tales-of-monkey-island-5-pc-2010.json new file mode 100644 index 0000000..d026667 --- /dev/null +++ b/data/game_profiles/tales-of-monkey-island-5-pc-2010.json @@ -0,0 +1 @@ +{"name":"tales-of-monkey-island-5-pc-2010","description":"","blowfishKey":"MonkeyIsland105","isTtarch2":false,"ttarchVersion":8,"luaVersion":"5.1.2","streamVersion":3,"enableOodleCompression":false} \ No newline at end of file diff --git a/data/game_profiles/the-walking-dead-season-2-2013.json b/data/game_profiles/the-walking-dead-season-2-2013.json index 81a8f0e..501f5c9 100644 --- a/data/game_profiles/the-walking-dead-season-2-2013.json +++ b/data/game_profiles/the-walking-dead-season-2-2013.json @@ -1,7 +1,7 @@ { "name": "The Walking Dead: Season 2", "description": "", - "blowfishKey": "Twd2", + "blowfishKey": "Twds2", "isTtarch2": true, "ttarchVersion": 3, "luaVersion": "5.1.2", diff --git a/data/versiondb/back-to-the-future-101-2010.vdb.json b/data/versiondb/back-to-the-future-101-2010.vdb.json new file mode 100644 index 0000000..f25c3a9 --- /dev/null +++ b/data/versiondb/back-to-the-future-101-2010.vdb.json @@ -0,0 +1,177 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3028216762, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 2639247216, + "DlgChildSetChoicesChildPost": 2639247216, + "DlgChildSetChoicesChildPre": 2639247216, + "DlgChildSetConditionalCase": 2639247216, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionRule": 1248438046, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 206904488, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 464744749, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 1318950729, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 4170423743, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 549434172, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeParallel": 2666835773, + "DlgNodeParallel::DlgChildSetElement": 2639247216, + "DlgNodeParallel::PElement": 1680549273, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 3618221232, + "DlgNodeSequence::DlgChildSetElement": 2639247216, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 3421566820, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 968864093, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 501925299, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/back-to-the-future-101-UNSUPPORTED.vdb.json b/data/versiondb/back-to-the-future-101-UNSUPPORTED.vdb.json deleted file mode 100644 index ce396f3..0000000 --- a/data/versiondb/back-to-the-future-101-UNSUPPORTED.vdb.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"T3EffectBinaryDataCg::Technique","crc32":3740734772,"members":[]},{"type":"DlgNode","crc32":2296730722,"members":[]},{"type":"InputMapper","crc32":1262583002,"members":[]},{"type":"Font","crc32":1007893783,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgNodeChore","crc32":1170518059,"members":[]},{"type":"KeyframedValue::Sample","crc32":132413475,"members":[]},{"type":"T3Texture","crc32":2671165217,"members":[]},{"type":"Chore","crc32":2369125329,"members":[]},{"type":"LocalizationRegistry","crc32":3013538613,"members":[]},{"type":"DlgVisibilityConditionsOwner","crc32":3220609248,"members":[]},{"type":"DlgObjectPropsOwner","crc32":2762227517,"members":[]},{"type":"DlgNodeLink","crc32":953662834,"members":[]},{"type":"ActingPaletteClass","crc32":3888173555,"members":[]},{"type":"DlgNodeScript","crc32":3420450939,"members":[]},{"type":"LightType","crc32":4136548079,"members":[]},{"type":"DlgFolderChild","crc32":1680549273,"members":[]},{"type":"ZTestFunction","crc32":4022877148,"members":[]},{"type":"WalkBoxes","crc32":990917534,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"WalkBoxes::Vert","crc32":1441281540,"members":[]},{"type":"KeyframedValue","crc32":1378658527,"members":[]},{"type":"DlgConditionInput","crc32":2023478537,"members":[]},{"type":"LanguageLookupMap","crc32":1811276022,"members":[]},{"type":"DlgNodeExchange","crc32":4170423743,"members":[]},{"type":"KeyframedValue::Sample","crc32":1474554471,"members":[]},{"type":"PhonemeKey","crc32":2792191566,"members":[]},{"type":"ActorAgentMapper","crc32":1707351511,"members":[]},{"type":"WalkBoxes::Edge","crc32":4079736747,"members":[]},{"type":"TextAlignmentType","crc32":3309356540,"members":[]},{"type":"DlgNodeCriteria::EnumDefaultResultT","crc32":790155486,"members":[]},{"type":"DlgNodeExchange::Entry","crc32":4141181016,"members":[]},{"type":"KeyframedValue::Sample","crc32":2637781173,"members":[]},{"type":"Polar","crc32":246693104,"members":[]},{"type":"BoundingBox","crc32":3356780285,"members":[]},{"type":"ChoreResource","crc32":2882625115,"members":[]},{"type":"KeyframedValue","crc32":888184802,"members":[]},{"type":"KeyframedValue::Sample","crc32":170530164,"members":[]},{"type":"LocalizeInfo","crc32":1335389649,"members":[]},{"type":"DlgChoicesChildPre","crc32":1680549273,"members":[]},{"type":"DlgNodeIdle","crc32":3665610895,"members":[]},{"type":"LanguageRes","crc32":2142211714,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"DlgChoicesChildPost","crc32":1680549273,"members":[]},{"type":"Dlg","crc32":3298743500,"members":[]},{"type":"Rect","crc32":3414866692,"members":[]},{"type":"DlgNodeSequence","crc32":3618221232,"members":[]},{"type":"StyleGuide","crc32":229073418,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"Animation","crc32":3070283042,"members":[]},{"type":"KeyframedValue::Sample","crc32":132413475,"members":[]},{"type":"TRange","crc32":207664949,"members":[]},{"type":"KeyframedValue::Sample","crc32":2278772877,"members":[]},{"type":"KeyframedValue","crc32":297571138,"members":[]},{"type":"DlgNodeCriteria::EnumTestT","crc32":790155486,"members":[]},{"type":"LogicGroup::LogicItem","crc32":1999535025,"members":[]},{"type":"Rule","crc32":2583983409,"members":[]},{"type":"DlgNodeParallel::PElement","crc32":1680549273,"members":[]},{"type":"DlgChildSetChoicesChildPost","crc32":2639247216,"members":[]},{"type":"KeyframedValue","crc32":888184802,"members":[]},{"type":"DlgVisibilityConditions","crc32":3588417090,"members":[]},{"type":"T3EffectBinaryDataHlsl_D3D","crc32":501925299,"members":[]},{"type":"DlgObjID","crc32":3825594436,"members":[]},{"type":"DlgNodeChoices","crc32":464744749,"members":[]},{"type":"IdleTransitionSettings","crc32":625089554,"members":[]},{"type":"PhonemeTable","crc32":3349763605,"members":[]},{"type":"TRect","crc32":3414866692,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"T3EffectBinaryData","crc32":1269525704,"members":[]},{"type":"InputMapper::EventMapping","crc32":879931039,"members":[]},{"type":"KeyframedValue","crc32":888184802,"members":[]},{"type":"DlgNodeSequence::Element","crc32":233990688,"members":[]},{"type":"Procedural_LookAt::Constraint","crc32":2437348522,"members":[]},{"type":"DlgFolder","crc32":206904488,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"LogicGroup","crc32":1961524803,"members":[]},{"type":"DlgNodeText","crc32":4048018891,"members":[]},{"type":"T3VertexDeclaration","crc32":2485238651,"members":[]},{"type":"ResourceGroups","crc32":1549834930,"members":[]},{"type":"DlgNodeExit","crc32":3421566820,"members":[]},{"type":"PropertySet","crc32":1244318167,"members":[]},{"type":"NavCam::EnumMode","crc32":790155486,"members":[]},{"type":"KeyframedValue","crc32":2277102891,"members":[]},{"type":"DlgNodeStart","crc32":3421566820,"members":[]},{"type":"DlgDownstreamVisibilityConditions","crc32":4082379323,"members":[]},{"type":"DlgConditionRule","crc32":1248438046,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"DlgCondition","crc32":619267492,"members":[]},{"type":"DlgNodeSequence::DlgChildSetElement","crc32":2639247216,"members":[]},{"type":"DlgObjectProps","crc32":1335389649,"members":[]},{"type":"KeyframedValue::Sample","crc32":132413475,"members":[]},{"type":"KeyframedValue::Sample","crc32":3376979309,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"AudioData","crc32":1260322854,"members":[]},{"type":"TRange","crc32":207664949,"members":[]},{"type":"DlgConditionalCase","crc32":1680549273,"members":[]},{"type":"LanguageResProxy","crc32":3571218306,"members":[]},{"type":"Transform","crc32":1161344320,"members":[]},{"type":"T3VertexBuffer","crc32":2267347732,"members":[]},{"type":"Font::GlyphInfo","crc32":2247348633,"members":[]},{"type":"DlgNodeCriteria::EnumThresholdT","crc32":790155486,"members":[]},{"type":"T3EffectBinaryDataCg","crc32":968864093,"members":[]},{"type":"Color","crc32":3181456933,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"LanguageDB","crc32":1582821095,"members":[]},{"type":"KeyframedValue","crc32":1734735409,"members":[]},{"type":"KeyframedValue::Sample","crc32":3832614441,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"KeyframedValue","crc32":2130068831,"members":[]},{"type":"ActingOverridablePropOwner","crc32":1247536035,"members":[]},{"type":"Skeleton","crc32":1477567099,"members":[]},{"type":"T3EffectBinaryDataCg::ParameterLocation","crc32":2738068572,"members":[]},{"type":"DlgChild","crc32":2811348868,"members":[]},{"type":"Scene","crc32":1189796209,"members":[]},{"type":"TaskOwner","crc32":4118068257,"members":[]},{"type":"DlgChildSetChoice","crc32":2639247216,"members":[]},{"type":"DlgNodeJump","crc32":549434172,"members":[]},{"type":"DlgObjIDOwner","crc32":2920636846,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"ActorAgentBinding","crc32":2537407172,"members":[]},{"type":"T3EffectBinaryDataCg::Pass","crc32":3175451858,"members":[]},{"type":"D3DMesh","crc32":852356450,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgLine","crc32":3959344638,"members":[]},{"type":"VoiceData","crc32":2665129651,"members":[]},{"type":"ActingPaletteGroup","crc32":400284731,"members":[]},{"type":"DlgNodeConditional","crc32":1318950729,"members":[]},{"type":"AnimationValueInterfaceBase","crc32":167571457,"members":[]},{"type":"UID::Owner","crc32":3717390811,"members":[]},{"type":"DlgConditionTime","crc32":1743653956,"members":[]},{"type":"DlgLineCollection","crc32":1525136524,"members":[]},{"type":"ChoreAgent","crc32":3067985291,"members":[]},{"type":"KeyframedValue","crc32":53278688,"members":[]},{"type":"T3IndexBuffer","crc32":336093341,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"Skeleton::Entry","crc32":2975528115,"members":[]},{"type":"DlgNodeLogic","crc32":1241111810,"members":[]},{"type":"IdleSlotDefaults","crc32":4097377196,"members":[]},{"type":"D3DMesh::PaletteEntry","crc32":4032760546,"members":[]},{"type":"WalkBoxes::Tri","crc32":2847941802,"members":[]},{"type":"DlgChoice","crc32":3664376747,"members":[]},{"type":"SoundReverbPreset","crc32":1450767649,"members":[]},{"type":"D3DMesh::TriangleSet","crc32":3028216762,"members":[]},{"type":"DlgNodeCriteria","crc32":2678565609,"members":[]},{"type":"AnimOrChore","crc32":3173546333,"members":[]},{"type":"T3RenderStateBlock","crc32":949953411,"members":[]},{"type":"DlgNodeParallel::DlgChildSetElement","crc32":2639247216,"members":[]},{"type":"DlgObjectPropsMap::GroupDefinition","crc32":1024524312,"members":[]},{"type":"Scene::AgentInfo","crc32":1120877395,"members":[]},{"type":"UID::Generator","crc32":3051248175,"members":[]},{"type":"DlgNodeParallel","crc32":2666835773,"members":[]},{"type":"PhonemeTable::PhonemeEntry","crc32":2886334476,"members":[]},{"type":"BoneContraints","crc32":2635847010,"members":[]},{"type":"ChoreResource::Block","crc32":2992439463,"members":[]},{"type":"Flags","crc32":491445159,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"T3EffectBinary","crc32":3738733756,"members":[]},{"type":"ChoreAgent::Attachment","crc32":4168831863,"members":[]},{"type":"DlgChainHead","crc32":3487486240,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"CameraFacingTypes","crc32":2105390671,"members":[]},{"type":"DlgNodeWait","crc32":1738487983,"members":[]},{"type":"LanguageResLocal","crc32":898578839,"members":[]},{"type":"DlgChildSetConditionalCase","crc32":2639247216,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"Sphere","crc32":1068977611,"members":[]},{"type":"LanguageLookupMap::DlgIDSet","crc32":2953674980,"members":[]},{"type":"DlgNodeNotes","crc32":2134526444,"members":[]},{"type":"DlgChildSetChoicesChildPre","crc32":2639247216,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"DlgSystemSettings","crc32":3969313169,"members":[]}] \ No newline at end of file diff --git a/data/versiondb/back-to-the-future-101.vdb.json b/data/versiondb/back-to-the-future-101.vdb.json deleted file mode 100644 index fb81488..0000000 --- a/data/versiondb/back-to-the-future-101.vdb.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":"Vector2","crc32":1845259340,"members":[{"name":"x","type":"float","flags":0},{"name":"y","type":"float","flags":0}]},{"type":"Symbol","crc32":2222126035,"members":[{"name":"mCrc64","type":"unsigned__int64","flags":0}]},{"type":"T3SamplerStateBlock","crc32":2722235157,"members":[{"name":"mData","type":"unsignedint","flags":0}]}] \ No newline at end of file diff --git a/data/versiondb/back-to-the-future-102-2011.vdb.json b/data/versiondb/back-to-the-future-102-2011.vdb.json new file mode 100644 index 0000000..125a345 --- /dev/null +++ b/data/versiondb/back-to-the-future-102-2011.vdb.json @@ -0,0 +1,178 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BlendMode": 790155486, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 1085632428, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 4170423743, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 549434172, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 3421566820, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "T3VertexSampleDataBase": 1574469491, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/back-to-the-future-103-2011.vdb.json b/data/versiondb/back-to-the-future-103-2011.vdb.json new file mode 100644 index 0000000..7caa962 --- /dev/null +++ b/data/versiondb/back-to-the-future-103-2011.vdb.json @@ -0,0 +1,169 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 1085632428, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 4170423743, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 549434172, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 3421566820, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/back-to-the-future-104-2011.vdb.json b/data/versiondb/back-to-the-future-104-2011.vdb.json new file mode 100644 index 0000000..a223a93 --- /dev/null +++ b/data/versiondb/back-to-the-future-104-2011.vdb.json @@ -0,0 +1,177 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BlendMode": 790155486, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 1085632428, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 4170423743, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 549434172, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeParallel": 3186472962, + "DlgNodeParallel::DlgChildSetElement": 4183558796, + "DlgNodeParallel::PElement": 1680549273, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 3421566820, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/back-to-the-future-105-2011-UNSUPPORTED-TYPES.csv b/data/versiondb/back-to-the-future-105-2011-UNSUPPORTED-TYPES.csv new file mode 100644 index 0000000..1d5caa9 --- /dev/null +++ b/data/versiondb/back-to-the-future-105-2011-UNSUPPORTED-TYPES.csv @@ -0,0 +1 @@ +7574063791819912345,2654694165 diff --git a/data/versiondb/back-to-the-future-105-2011.vdb.json b/data/versiondb/back-to-the-future-105-2011.vdb.json new file mode 100644 index 0000000..157260e --- /dev/null +++ b/data/versiondb/back-to-the-future-105-2011.vdb.json @@ -0,0 +1,172 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 1085632428, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 4170423743, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 549434172, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 3421566820, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "T3VertexSampleDataBase": 1574469491, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/global.vdb.json b/data/versiondb/global.vdb.json index 24c2d79..8531e99 100644 --- a/data/versiondb/global.vdb.json +++ b/data/versiondb/global.vdb.json @@ -2,7 +2,18 @@ { "type": "ActingAccentPalette::EnumOverrun", "crc32": 2762767791, - "members": [] + "members": [ + { + "name": "mVal", + "type": "int32", + "flags": 64 + }, + { + "name": "Baseclass_EnumBase", + "type": "EnumBase", + "flags": 16 + } + ] }, { "type": "ActingPaletteGroup::ActingPaletteTransition", @@ -750,7 +761,33 @@ { "type": "KeyframedValue::Sample", "crc32": 123491795, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "CompressedPathBlockingValue::CompressedPathInfoKey", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -807,7 +844,33 @@ { "type": "KeyframedValue::Sample", "crc32": 2775375510, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "LocationInfo", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -838,7 +901,33 @@ { "type": "KeyframedValue>::Sample", "crc32": 3490792114, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "SoundEventName<0>", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -895,12 +984,59 @@ { "type": "KeyframedValue>::Sample", "crc32": 48901230, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "SoundEventName<1>", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", "crc32": 2154151251, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int32", + "flags": 64 + }, + { + "name": "mValue", + "type": "SoundEventName<2>", + "flags": 0 + } + ] }, { "type": "KeyframedValue::Sample", @@ -931,7 +1067,33 @@ { "type": "KeyframedValue::Sample", "crc32": 735955943, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -1040,12 +1202,64 @@ { "type": "KeyframedValue>::Sample", "crc32": 1906438923, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", "crc32": 1964710119, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -1076,7 +1290,33 @@ { "type": "KeyframedValue>::Sample", "crc32": 3845365155, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -1107,7 +1347,33 @@ { "type": "KeyframedValue>::Sample", "crc32": 2968426688, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -1190,12 +1456,64 @@ { "type": "KeyframedValue>::Sample", "crc32": 1083545107, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", "crc32": 1494976989, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -1278,12 +1596,64 @@ { "type": "KeyframedValue>::Sample", "crc32": 762576919, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", "crc32": 2189458300, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue>::Sample", @@ -1335,7 +1705,23 @@ { "type": "LanguageLookupMap::DlgIDSet", "crc32": 1422179024, - "members": [] + "members": [ + { + "name": "mIDRange", + "type": "TRange", + "flags": 0 + }, + { + "name": "mAdditionalIDs", + "type": "Set>", + "flags": 0 + }, + { + "name": "mhDlg", + "type": "Handle", + "flags": 0 + } + ] }, { "type": "LanguageRegister", @@ -2939,12 +3325,34 @@ { "type": "T3VertexSampleDataBase", "crc32": 1740664242, - "members": [] + "members": [ + { + "name": "mNumVerts", + "type": "int32", + "flags": 0 + }, + { + "name": "mVertSize", + "type": "int32", + "flags": 0 + } + ] }, { "type": "TRange", "crc32": 1072543900, - "members": [] + "members": [ + { + "name": "min", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "max", + "type": "unsignedint", + "flags": 0 + } + ] }, { "type": "TRange", @@ -2991,7 +3399,78 @@ { "type": "ActingAccentPalette", "crc32": 2757891538, - "members": [] + "members": [ + { + "name": "Baseclass_ActingOverridablePropOwner", + "type": "ActingOverridablePropOwner", + "flags": 16 + }, + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 32 + }, + { + "name": "mStartOffsetRange", + "type": "TRange", + "flags": 0 + }, + { + "name": "mMoodOverrunAllowed", + "type": "ActingAccentPalette::EnumOverrun", + "flags": 0 + }, + { + "name": "mDisableAct", + "type": "bool", + "flags": 0 + }, + { + "name": "mValidIntensityRange", + "type": "TRange", + "flags": 0 + }, + { + "name": "mSpilloutBufPostRange", + "type": "TRange", + "flags": 0 + }, + { + "name": "mRandomChance", + "type": "float", + "flags": 0 + }, + { + "name": "mTrackID", + "type": "int32", + "flags": 64 + }, + { + "name": "mResourcePtrs", + "type": "DCArray", + "flags": 33 + }, + { + "name": "mGroupMembershipUID", + "type": "int32", + "flags": 32 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int32", + "flags": 32 + } + ] }, { "type": "ActingOverridablePropOwner", @@ -3022,12 +3501,12 @@ { "name": "Baseclass_ActingOverridablePropOwner", "type": "ActingOverridablePropOwner", - "flags": 0 + "flags": 16 }, { "name": "Baseclass_UID::Owner", "type": "UID::Owner", - "flags": 0 + "flags": 16 }, { "name": "mName", @@ -3338,17 +3817,17 @@ { "name": "Baseclass_UID::Generator", "type": "UID::Generator", - "flags": 0 + "flags": 16 }, { "name": "Baseclass_UID::Owner", "type": "UID::Owner", - "flags": 0 + "flags": 16 }, { "name": "Baseclass_ActingOverridablePropOwner", "type": "ActingOverridablePropOwner", - "flags": 0 + "flags": 16 }, { "name": "mName", @@ -3572,12 +4051,12 @@ { "name": "Baseclass_UID::Owner", "type": "UID::Owner", - "flags": 0 + "flags": 16 }, { "name": "mName", "type": "String", - "flags": 0 + "flags": 16 }, { "name": "mIdle", @@ -3675,7 +4154,23 @@ { "type": "ActingResource", "crc32": 3658828778, - "members": [] + "members": [ + { + "name": "Baseclass_ActingOverridablePropOwner", + "type": "ActingOverridablePropOwner", + "flags": 16 + }, + { + "name": "mResource", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mValidIntensityRange", + "type": "TRange", + "flags": 0 + } + ] }, { "type": "ActingResource", @@ -3684,7 +4179,7 @@ { "name": "Baseclass_ActingOverridablePropOwner", "type": "ActingOverridablePropOwner", - "flags": 0 + "flags": 16 }, { "name": "mResource", @@ -19659,7 +20154,33 @@ { "type": "KeyframedValue::Sample", "crc32": 1271868337, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "bool", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue", @@ -19778,7 +20299,33 @@ { "type": "KeyframedValue::Sample", "crc32": 2911155438, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -19944,7 +20491,33 @@ { "type": "KeyframedValue::Sample", "crc32": 162664713, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Color", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -21268,7 +21841,33 @@ { "type": "KeyframedValue::Sample", "crc32": 3662232385, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 0 + }, + { + "name": "mValue", + "type": "String", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -21532,7 +22131,33 @@ { "type": "KeyframedValue::Sample", "crc32": 3129982977, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int32", + "flags": 64 + }, + { + "name": "mValue", + "type": "Transform", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue", @@ -21703,7 +22328,28 @@ { "type": "KeyframedValue::Sample", "crc32": 309762929, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Vector3", + "flags": 0 + } + ] }, { "type": "KeyframedValue::Sample", @@ -21762,6 +22408,32 @@ } ] }, + { + "type": "KeyframedValue::Sample", + "crc32": 2285389175, + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int32", + "flags": 0 + }, + { + "name": "mValue", + "type": "Vector4", + "flags": 0 + } + ] + }, { "type": "KeyframedValue", "crc32": 56723018, @@ -21931,7 +22603,33 @@ { "type": "KeyframedValue::Sample", "crc32": 2034371971, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 0 + }, + { + "name": "mValue", + "type": "float", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue", @@ -22050,7 +22748,33 @@ { "type": "KeyframedValue::Sample", "crc32": 1246207306, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 0 + }, + { + "name": "mValue", + "type": "int", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -22298,7 +23022,33 @@ { "type": "KeyframedValue::Sample", "crc32": 4250266928, - "members": [] + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 0 + }, + { + "name": "mValue", + "type": "unsigned__int64", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 8225 + } + ] }, { "type": "KeyframedValue::Sample", @@ -29885,12 +30635,34 @@ { "type": "SoundBankWaveMapEntry", "crc32": 2682756536, - "members": [] + "members": [ + { + "name": "fLengthSeconds", + "type": "float", + "flags": 0 + }, + { + "name": "strFileName", + "type": "String", + "flags": 0 + } + ] }, { "type": "SoundBankWaveMapEntry", "crc32": 1568689605, - "members": [] + "members": [ + { + "name": "fLengthSeconds", + "type": "float", + "flags": 0 + }, + { + "name": "strFileName", + "type": "String", + "flags": 0 + } + ] }, { "type": "SoundBusSnapshot::Snapshot", @@ -32073,7 +32845,7 @@ }, { "name": "mVertexComponents", - "type": "SArray", + "type": "SArray", "flags": 0 } ] @@ -33722,7 +34494,43 @@ { "type": "ChorecorderParameters", "crc32": 1380213052, - "members": [] + "members": [ + { + "name": "mFlags", + "type": "Flags", + "flags": 262144 + }, + { + "name": "mhDialogChore", + "type": "Handle", + "flags": 32 + }, + { + "name": "mhCutChore", + "type": "Handle", + "flags": 32 + }, + { + "name": "mNewCutName", + "type": "String", + "flags": 0 + }, + { + "name": "mCameraAgentToUse", + "type": "String", + "flags": 0 + }, + { + "name": "mAgentsToChorecord", + "type": "Set", + "flags": 32 + }, + { + "name": "mChorecordingName", + "type": "String", + "flags": 0 + } + ] }, { "type": "ChorecorderParameters", @@ -40162,6 +40970,11 @@ "type": "String", "flags": 0 }, + { + "name": "mToolProps", + "type": "ToolProps", + "flags": 0 + }, { "name": "mbHasTextureData", "type": "bool", @@ -40290,7 +41103,7 @@ { "name": "mbForcePreviewRebuild", "type": "bool", - "flags": 0 + "flags": 1 } ] }, @@ -40587,11 +41400,6 @@ "type": "Flags", "flags": 262144 }, - { - "name": "mNameSymbol", - "type": "Symbol", - "flags": 0 - }, { "name": "mBoundingBox", "type": "BoundingBox", @@ -41972,7 +42780,7 @@ "members": [ { "name": "mBoneName", - "type": "String", + "type": "Symbol", "flags": 0 } ] @@ -43172,12 +43980,12 @@ "crc32": 3098847224, "members": [ { - "name": "mExtrapolationModeBefore", - "type": "int", + "name": "mName", + "type": "Symbol", "flags": 0 }, { - "name": "mExtrapolationModeAfter", + "name": "mFlags", "type": "int", "flags": 0 } @@ -43452,7 +44260,7 @@ "members": [ { "name": "mpChore", - "type": "Ptr", + "type": "Ptr", "flags": 0 }, { @@ -44066,7 +44874,7 @@ }, { "name": "mAttachedToNode", - "type": "String", + "type": "Symbol", "flags": 0 } ] @@ -44707,7 +45515,7 @@ "flags": 0 }, { - "name": "mEnabledDynamicSets", + "name": "mAdditionalPropNames", "type": "Set>", "flags": 0 } @@ -46606,6 +47414,11 @@ "name": "Baseclass_DlgObjectPropsOwner", "type": "DlgObjectPropsOwner", "flags": 16 + }, + { + "name": "mParent", + "type": "DlgNodeLink", + "flags": 32 } ] }, @@ -49210,5 +50023,6334 @@ "flags": 0 } ] + }, + { + "type": "DialogExchange", + "crc32": 951635703, + "members": [ + { + "name": "Baseclass_DialogBase", + "type": "DialogBase", + "flags": 0 + }, + { + "name": "mElems", + "type": "DArray", + "flags": 0 + }, + { + "name": "mBranchLink", + "type": "String", + "flags": 0 + }, + { + "name": "mEnterScript", + "type": "String", + "flags": 0 + }, + { + "name": "mExitScript", + "type": "String", + "flags": 0 + }, + { + "name": "mDispTextProxy", + "type": "LanguageResourceProxy", + "flags": 0 + }, + { + "name": "mExitTrigger", + "type": "int", + "flags": 0 + }, + { + "name": "mhChore", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhTexture", + "type": "Handle", + "flags": 0 + }, + { + "name": "mNotes", + "type": "NoteCollection", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataCg::Pass", + "crc32": 3175451858, + "members": [ + { + "name": "mVertexProgram", + "type": "BinaryBuffer", + "flags": 0 + }, + { + "name": "mFragmentProgram", + "type": "BinaryBuffer", + "flags": 0 + }, + { + "name": "mVertexDecl", + "type": "T3VertexDeclaration", + "flags": 0 + }, + { + "name": "mVertexParameters", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mFragmentParameters", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mVertexConstants", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mFragmentConstants", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mStateBlock", + "type": "T3RenderStateBlock", + "flags": 0 + }, + { + "name": "mStateMask", + "type": "T3RenderStateBlock", + "flags": 0 + } + ] + }, + { + "type": "WalkBoxes::Tri", + "crc32": 2847941802, + "members": [ + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mNormal", + "type": "int", + "flags": 0 + }, + { + "name": "mQuadBuddy", + "type": "int", + "flags": 0 + }, + { + "name": "mMaxRadius", + "type": "float", + "flags": 0 + }, + { + "name": "mVerts", + "type": "SArray", + "flags": 0 + }, + { + "name": "mEdgeInfo", + "type": "SArray", + "flags": 0 + }, + { + "name": "mVertOffsets", + "type": "SArray", + "flags": 0 + }, + { + "name": "mVertScales", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "Note", + "crc32": 1462141437, + "members": [ + { + "name": "Baseclass_UID::Generator", + "type": "UID::Generator", + "flags": 16 + }, + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mEntries", + "type": "DCArray>", + "flags": 1 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + } + ] + }, + { + "type": "ActingPaletteClass", + "crc32": 3888173555, + "members": [ + { + "name": "Baseclass_UID::Generator", + "type": "UID::Generator", + "flags": 16 + }, + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "Baseclass_ActingOverridablePropOwner", + "type": "ActingOverridablePropOwner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mPalettePtrs", + "type": "DCArray>", + "flags": 1 + }, + { + "name": "mPaletteGroupPtrs", + "type": "DCArray>", + "flags": 1 + }, + { + "name": "mAlternateNames", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mDefaultPaletteGroupID", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + } + ] + }, + { + "type": "ActingPaletteGroup", + "crc32": 400284731, + "members": [ + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTalkingIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mWeight", + "type": "float", + "flags": 0 + }, + { + "name": "mTransitionIn", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTransitionOut", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mIdleTransitionTimeOverride", + "type": "float", + "flags": 0 + } + ] + }, + { + "type": "Animation", + "crc32": 3070283042, + "members": [ + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mLength", + "type": "float", + "flags": 0 + }, + { + "name": "mAdditiveMask", + "type": "float", + "flags": 0 + }, + { + "name": "mValues", + "type": "DCArray>", + "flags": 1 + } + ] + }, + { + "type": "T3IndexBuffer", + "crc32": 336093341, + "members": [ + { + "name": "mbLocked", + "type": "bool", + "flags": 0 + }, + { + "name": "mFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mNumIndicies", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + } + ] + }, + { + "type": "DialogItem::EnumPlaybackMode", + "crc32": 790155486, + "members": [ + { + "name": "mVal", + "type": "int", + "flags": 64 + }, + { + "name": "Baseclass_EnumBase", + "type": "EnumBase", + "flags": 16 + } + ] + }, + { + "type": "NoteCollection", + "crc32": 3880798863, + "members": [ + { + "name": "Baseclass_UID::Generator", + "type": "UID::Generator", + "flags": 16 + }, + { + "name": "mNotes", + "type": "Map,less>", + "flags": 1 + } + ] + }, + { + "type": "T3Texture", + "crc32": 2671165217, + "members": [ + { + "name": "mSamplerState", + "type": "T3SamplerStateBlock", + "flags": 0 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mImportName", + "type": "String", + "flags": 0 + }, + { + "name": "mToolProps", + "type": "ToolProps", + "flags": 0 + }, + { + "name": "mbHasTextureData", + "type": "bool", + "flags": 0 + }, + { + "name": "mbIsMipMapped", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEmbedMipMaps", + "type": "bool", + "flags": 0 + }, + { + "name": "mNumMipLevels", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mD3DFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mWidth", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mHeight", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mWiiForceWidth", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mWiiForceHeight", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mbWiiForceUncompressed", + "type": "bool", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 0 + }, + { + "name": "mTextureDataFormats", + "type": "Flags", + "flags": 0 + }, + { + "name": "mTplTexutreDataSize", + "type": "int", + "flags": 0 + }, + { + "name": "mTplAlphaDataSize", + "type": "int", + "flags": 0 + }, + { + "name": "mJPEGTextureDataSize", + "type": "int", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 0 + }, + { + "name": "mWiiTextureFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mbAlphaHDR", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEncrypted", + "type": "bool", + "flags": 0 + }, + { + "name": "mDetailMapBrightness", + "type": "float", + "flags": 0 + }, + { + "name": "mNormalMapFmt", + "type": "unsignedlong", + "flags": 0 + }, + { + "name": "mbEnablePreview", + "type": "bool", + "flags": 1 + }, + { + "name": "mbForcePreviewRebuild", + "type": "bool", + "flags": 1 + } + ] + }, + { + "type": "Note::Entry", + "crc32": 3491402720, + "members": [ + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mAuthor", + "type": "String", + "flags": 0 + }, + { + "name": "mStamp", + "type": "DateStamp", + "flags": 0 + }, + { + "name": "mCategory", + "type": "String", + "flags": 0 + }, + { + "name": "mText", + "type": "String", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh", + "crc32": 852356450, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mbDeformable", + "type": "bool", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mTriangleSets", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mVertexAnimations", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBonePalettes", + "type": "DCArray>", + "flags": 0 + }, + { + "name": "mSkinningData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBoneData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbLightmaps", + "type": "bool", + "flags": 0 + }, + { + "name": "mbLowQualityRender", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAlphaSupport", + "type": "bool", + "flags": 0 + }, + { + "name": "mbMeshHasVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriangleStripState", + "type": "int", + "flags": 0 + }, + { + "name": "mbMeshHasSmoothNormalsSupport", + "type": "bool", + "flags": 0 + }, + { + "name": "mAnimatedVertexCount", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mDiffuseTextureNames", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mDetailTextureNames", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mLightmapTextureNames", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBumpmapTextureNames", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mEnvironmentTextureNames", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbToonLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexEntries", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexGroupEntries", + "type": "Map>", + "flags": 0 + } + ] + }, + { + "type": "DateStamp", + "crc32": 1076445269, + "members": [ + { + "name": "mSec", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mMin", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mHour", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mMday", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mMon", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mYear", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mWday", + "type": "unsignedchar", + "flags": 0 + }, + { + "name": "mYday", + "type": "unsignedshort", + "flags": 0 + }, + { + "name": "mIsdst", + "type": "unsignedchar", + "flags": 0 + } + ] + }, + { + "type": "LanguageResource", + "crc32": 265370348, + "members": [ + { + "name": "mId", + "type": "int", + "flags": 0 + }, + { + "name": "mPrefix", + "type": "String", + "flags": 0 + }, + { + "name": "mText", + "type": "String", + "flags": 0 + }, + { + "name": "mhAnimation", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhVoiceData", + "type": "Handle", + "flags": 0 + }, + { + "name": "mShared", + "type": "bool", + "flags": 0 + }, + { + "name": "mAllowSharing", + "type": "bool", + "flags": 0 + }, + { + "name": "mbNoAnim", + "type": "bool", + "flags": 0 + }, + { + "name": "mpLipsyncAnimation", + "type": "Ptr", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + } + ] + }, + { + "type": "DialogBranch", + "crc32": 4294654313, + "members": [ + { + "name": "Baseclass_DialogBase", + "type": "DialogBase", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mItems", + "type": "DArray", + "flags": 0 + }, + { + "name": "mEnterItemID", + "type": "int", + "flags": 0 + }, + { + "name": "mExitItemID", + "type": "int", + "flags": 0 + }, + { + "name": "mEnterItems", + "type": "DArray", + "flags": 0 + }, + { + "name": "mExitItems", + "type": "DArray", + "flags": 0 + }, + { + "name": "mEnterScript", + "type": "String", + "flags": 0 + }, + { + "name": "mExitScript", + "type": "String", + "flags": 0 + }, + { + "name": "mPersistBGChore", + "type": "bool", + "flags": 0 + } + ] + }, + { + "type": "Chore", + "crc32": 2369125329, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mLength", + "type": "float", + "flags": 0 + }, + { + "name": "mNumResources", + "type": "int", + "flags": 0 + }, + { + "name": "mNumAgents", + "type": "int", + "flags": 0 + }, + { + "name": "mEditorProps", + "type": "PropertySet", + "flags": 0 + }, + { + "name": "mChoreSceneFile", + "type": "String", + "flags": 0 + }, + { + "name": "mRenderDelay", + "type": "int", + "flags": 0 + }, + { + "name": "mSynchronizedToLocalization", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mDependencies", + "type": "DependencyLoader<1>", + "flags": 0 + } + ] + }, + { + "type": "Skeleton::Entry", + "crc32": 2975528115, + "members": [ + { + "name": "mJointName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mParentName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mParentIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mBoneLength", + "type": "float", + "flags": 1 + }, + { + "name": "mLocalPos", + "type": "Vector3", + "flags": 0 + }, + { + "name": "mLocalQuat", + "type": "Quaternion", + "flags": 0 + }, + { + "name": "mRestXform", + "type": "Transform", + "flags": 0 + }, + { + "name": "mGlobalTranslationScale", + "type": "Vector3", + "flags": 0 + }, + { + "name": "mLocalTranslationScale", + "type": "Vector3", + "flags": 0 + }, + { + "name": "mAnimTranslationScale", + "type": "Vector3", + "flags": 0 + }, + { + "name": "mResourceGroupMembership", + "type": "Map>", + "flags": 0 + }, + { + "name": "mConstraints", + "type": "BoneContraints", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + } + ] + }, + { + "type": "T3VertexBuffer", + "crc32": 2267347732, + "members": [ + { + "name": "mNumVerts", + "type": "int", + "flags": 0 + }, + { + "name": "mVertSize", + "type": "int", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataHlsl_D3D", + "crc32": 1563383918, + "members": [ + { + "name": "Baseclass_T3EffectBinaryDataCg", + "type": "T3EffectBinaryDataCg", + "flags": 16 + } + ] + }, + { + "type": "DialogResource", + "crc32": 4068661601, + "members": [ + { + "name": "miNextDialogID", + "type": "int", + "flags": 0 + }, + { + "name": "miNextBranchID", + "type": "int", + "flags": 0 + }, + { + "name": "miNextItemID", + "type": "int", + "flags": 0 + }, + { + "name": "miNextExchangeID", + "type": "int", + "flags": 0 + }, + { + "name": "miNextLineID", + "type": "int", + "flags": 0 + }, + { + "name": "miNextTextID", + "type": "int", + "flags": 0 + }, + { + "name": "miNextChoreID", + "type": "int", + "flags": 0 + }, + { + "name": "mDialogs", + "type": "DArray", + "flags": 0 + }, + { + "name": "mSoloItems", + "type": "DArray", + "flags": 0 + }, + { + "name": "mTexts", + "type": "DArray", + "flags": 0 + }, + { + "name": "mProjectID", + "type": "int", + "flags": 0 + }, + { + "name": "mResourcePath", + "type": "String", + "flags": 0 + }, + { + "name": "mTaskID", + "type": "unsignedlong", + "flags": 0 + }, + { + "name": "mResDialogs", + "type": "Map,less>", + "flags": 1 + }, + { + "name": "mResBranches", + "type": "Map,less>", + "flags": 1 + }, + { + "name": "mResItems", + "type": "Map,less>", + "flags": 1 + }, + { + "name": "mResExchanges", + "type": "Map,less>", + "flags": 1 + }, + { + "name": "mResLines", + "type": "Map,less>", + "flags": 1 + }, + { + "name": "mResTexts", + "type": "Map,less>", + "flags": 1 + } + ] + }, + { + "type": "DialogDialog", + "crc32": 1650362456, + "members": [ + { + "name": "Baseclass_DialogBase", + "type": "DialogBase", + "flags": 0 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mBranches", + "type": "DArray", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh::TriangleSet", + "crc32": 246753866, + "members": [ + { + "name": "mVertexShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mPixelShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBonePaletteIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mBoneMatrixIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mGeometryFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mMinVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mMaxVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mStartIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNumPrimitives", + "type": "int", + "flags": 0 + }, + { + "name": "mLightingGroup", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mDiffuseTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mLightMapTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mhDiffuseMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhSpecularColorMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhDetailMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhLightMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhBumpMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhAmbientMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhOutlineDiscontinuityMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhToonLightQuantized", + "type": "Handle", + "flags": 0 + }, + { + "name": "mbHasPixelShader_RemoveMe", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriStrips", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mNumTotalIndices", + "type": "int", + "flags": 0 + }, + { + "name": "mbDoubleSided", + "type": "bool", + "flags": 0 + }, + { + "name": "mbBumpEffectsSpecular", + "type": "bool", + "flags": 0 + }, + { + "name": "mfBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mbBumpAsNormalMap", + "type": "bool", + "flags": 0 + }, + { + "name": "mhEnvMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mfEccentricity", + "type": "float", + "flags": 0 + }, + { + "name": "mSpecularColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mAmbientColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mbSelfIlluminated", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaterialColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonOffset", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToonEnvLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonNoNormalDeform", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedSWSkinning", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedComputeOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedRenderOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mGlowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mCastShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 64 + }, + { + "name": "mfReflectivity", + "type": "float", + "flags": 0 + }, + { + "name": "mToonNumShades", + "type": "int", + "flags": 0 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAnimation", + "type": "bool", + "flags": 0 + }, + { + "name": "mUVGenMode", + "type": "int", + "flags": 64 + }, + { + "name": "mUVScreenSpaceScaling", + "type": "float", + "flags": 0 + }, + { + "name": "mUVScreenSpaceZoom", + "type": "bool", + "flags": 0 + }, + { + "name": "mbHasOctree", + "type": "bool", + "flags": 0 + }, + { + "name": "mSpecularOnAlpha", + "type": "float", + "flags": 0 + }, + { + "name": "mToonSphericalNormals", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonSphericalNormalBoneName", + "type": "String", + "flags": 0 + }, + { + "name": "mbVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mbCameraFacing", + "type": "bool", + "flags": 0 + }, + { + "name": "mCameraFacingType", + "type": "int", + "flags": 0 + }, + { + "name": "mLocalTransform", + "type": "Transform", + "flags": 0 + }, + { + "name": "mSubsurfaceScateringRadius", + "type": "float", + "flags": 0 + }, + { + "name": "mhSubsurfaceScateringMap", + "type": "Handle", + "flags": 0 + } + ] + }, + { + "type": "DialogLine", + "crc32": 1491241156, + "members": [ + { + "name": "Baseclass_DialogBase", + "type": "DialogBase", + "flags": 0 + }, + { + "name": "mLangResProxy", + "type": "LanguageResourceProxy", + "flags": 0 + } + ] + }, + { + "type": "LanguageResourceProxy", + "crc32": 3776132019, + "members": [ + { + "name": "mLangID", + "type": "int", + "flags": 0 + } + ] + }, + { + "type": "DialogItem", + "crc32": 2671691320, + "members": [ + { + "name": "Baseclass_DialogBase", + "type": "DialogBase", + "flags": 0 + }, + { + "name": "mExchanges", + "type": "DArray", + "flags": 0 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mDispTextProxy", + "type": "LanguageResourceProxy", + "flags": 0 + }, + { + "name": "mPlaybackMode", + "type": "DialogItem::EnumPlaybackMode", + "flags": 0 + }, + { + "name": "mEnterScript", + "type": "String", + "flags": 0 + }, + { + "name": "mExitScript", + "type": "String", + "flags": 0 + }, + { + "name": "mExitTrigger", + "type": "int", + "flags": 0 + }, + { + "name": "mBranchLink", + "type": "String", + "flags": 0 + }, + { + "name": "mbSpoken", + "type": "bool", + "flags": 0 + }, + { + "name": "mbFallbackModeOn", + "type": "bool", + "flags": 0 + }, + { + "name": "mFallbackInput", + "type": "int", + "flags": 0 + }, + { + "name": "mbResetCurExchangeOnBranchReEntry", + "type": "bool", + "flags": 0 + }, + { + "name": "mbAllowAutoActing", + "type": "bool", + "flags": 0 + }, + { + "name": "mbCutscene", + "type": "bool", + "flags": 0 + }, + { + "name": "mhTexture", + "type": "Handle", + "flags": 0 + }, + { + "name": "mUserData", + "type": "Symbol", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryData", + "crc32": 1269525704, + "members": [] + }, + { + "type": "BoneContraints", + "crc32": 2635847010, + "members": [ + { + "name": "mBoneType", + "type": "int", + "flags": 64 + }, + { + "name": "mHingeAxis", + "type": "Vector3", + "flags": 0 + }, + { + "name": "mAxisRange", + "type": "SArray,3>", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataCg::Technique", + "crc32": 3740734772, + "members": [ + { + "name": "mName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mPasses", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataCg", + "crc32": 138448664, + "members": [ + { + "name": "Baseclass_T3EffectBinaryData", + "type": "T3EffectBinaryData", + "flags": 16 + }, + { + "name": "mTechniques", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSamplerState", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "DialogText", + "crc32": 729894956, + "members": [ + { + "name": "Baseclass_DialogBase", + "type": "DialogBase", + "flags": 0 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mLangResProxy", + "type": "LanguageResourceProxy", + "flags": 0 + } + ] + }, + { + "type": "DialogBase", + "crc32": 3952645862, + "members": [ + { + "name": "mDialogElemType", + "type": "int", + "flags": 64 + }, + { + "name": "mUID", + "type": "unsignedlong", + "flags": 0 + }, + { + "name": "mhBackgroundChore", + "type": "Handle", + "flags": 0 + }, + { + "name": "mbHasStyleGuides", + "type": "bool", + "flags": 0 + }, + { + "name": "mDependentVisBranch", + "type": "String", + "flags": 0 + }, + { + "name": "mDescriptiveName", + "type": "String", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mTaskID", + "type": "unsignedlong", + "flags": 0 + } + ] + }, + { + "type": "LanguageDatabase", + "crc32": 3883134207, + "members": [ + { + "name": "mLanguageResources", + "type": "Map>", + "flags": 0 + } + ] + }, + { + "type": "ChoreResource", + "crc32": 2882625115, + "members": [ + { + "name": "mpChore", + "type": "Ptr", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mResName", + "type": "String", + "flags": 0 + }, + { + "name": "mResLength", + "type": "float", + "flags": 0 + }, + { + "name": "mPriority", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mResourceGroup", + "type": "String", + "flags": 0 + }, + { + "name": "mhObject", + "type": "HandleBase", + "flags": 0 + }, + { + "name": "mControlAnimation", + "type": "Animation", + "flags": 0 + }, + { + "name": "mBlocks", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbNoPose", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEmbedded", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEnabled", + "type": "bool", + "flags": 0 + }, + { + "name": "mbIsAgentResource", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewGraphs", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewEmptyGraphs", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewProperties", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewResourceGroups", + "type": "bool", + "flags": 0 + }, + { + "name": "mResourceProperties", + "type": "PropertySet", + "flags": 0 + }, + { + "name": "mResourceGroupInclude", + "type": "Map>", + "flags": 0 + }, + { + "name": "mAAStatus", + "type": "int", + "flags": 64 + } + ] + }, + { + "type": "T3RenderStateBlock", + "crc32": 949953411, + "members": [ + { + "name": "mData", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "VoiceData", + "crc32": 2665129651, + "members": [ + { + "name": "mbEncrypted", + "type": "bool", + "flags": 0 + }, + { + "name": "mLength", + "type": "float", + "flags": 0 + }, + { + "name": "mAllPacketsSize", + "type": "int", + "flags": 0 + }, + { + "name": "mPacketSamples", + "type": "int", + "flags": 0 + }, + { + "name": "mSampleRate", + "type": "int", + "flags": 0 + }, + { + "name": "mMode", + "type": "int", + "flags": 0 + }, + { + "name": "mPacketPositions", + "type": "DArray", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinary", + "crc32": 3738733756, + "members": [ + { + "name": "mStateCrc", + "type": "unsignedlong", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mEffectType", + "type": "int", + "flags": 0 + }, + { + "name": "mEffectFeatures", + "type": "unsignedlong", + "flags": 0 + }, + { + "name": "mEffectTechnique", + "type": "unsignedlong", + "flags": 0 + } + ] + }, + { + "type": "DialogExchange::ExchangeElem", + "crc32": 4141181016, + "members": [ + { + "name": "mID", + "type": "int", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 64 + } + ] + }, + { + "type": "D3DMesh::TriangleSet", + "crc32": 3016195865, + "members": [ + { + "name": "mVertexShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mPixelShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBonePaletteIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mBoneMatrixIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mGeometryFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mMinVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mMaxVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mStartIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNumPrimitives", + "type": "int", + "flags": 0 + }, + { + "name": "mLightingGroup", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mDiffuseTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mLightMapTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mhDiffuseMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhSpecularColorMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhDetailMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhLightMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhBumpMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhAmbientMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhOutlineDiscontinuityMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhToonLightQuantized", + "type": "Handle", + "flags": 0 + }, + { + "name": "mbHasPixelShader_RemoveMe", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriStrips", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mNumTotalIndices", + "type": "int", + "flags": 0 + }, + { + "name": "mbDoubleSided", + "type": "bool", + "flags": 0 + }, + { + "name": "mbBumpEffectsSpecular", + "type": "bool", + "flags": 0 + }, + { + "name": "mfBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mbBumpAsNormalMap", + "type": "bool", + "flags": 0 + }, + { + "name": "mhEnvMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mfEccentricity", + "type": "float", + "flags": 0 + }, + { + "name": "mSpecularColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mAmbientColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mbSelfIlluminated", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaterialColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonOffset", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToonEnvLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonNoNormalDeform", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedSWSkinning", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedComputeOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedRenderOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mGlowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mCastShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 64 + }, + { + "name": "mfReflectivity", + "type": "float", + "flags": 0 + }, + { + "name": "mToonNumShades", + "type": "int", + "flags": 0 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAnimation", + "type": "bool", + "flags": 0 + }, + { + "name": "mUVGenMode", + "type": "int", + "flags": 64 + }, + { + "name": "mUVScreenSpaceScaling", + "type": "float", + "flags": 0 + }, + { + "name": "mUVScreenSpaceZoom", + "type": "bool", + "flags": 0 + }, + { + "name": "mbHasOctree", + "type": "bool", + "flags": 0 + }, + { + "name": "mSpecularOnAlpha", + "type": "float", + "flags": 0 + }, + { + "name": "mToonSphericalNormals", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonSphericalNormalBoneName", + "type": "String", + "flags": 0 + }, + { + "name": "mbVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mbCameraFacing", + "type": "bool", + "flags": 0 + }, + { + "name": "mCameraFacingType", + "type": "int", + "flags": 0 + }, + { + "name": "mLocalTransform", + "type": "Transform", + "flags": 0 + }, + { + "name": "mSubsurfaceScateringRadius", + "type": "float", + "flags": 0 + }, + { + "name": "mhSubsurfaceScateringMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mOverride3DAlpha", + "type": "bool", + "flags": 0 + } + ] + }, + { + "type": "KeyframedValue>::Sample", + "crc32": 3626080576, + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "Handle", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 33 + } + ] + }, + { + "type": "KeyframedValue>", + "crc32": 978371239, + "members": [ + { + "name": "Baseclass_AnimatedValueInterface", + "type": "AnimatedValueInterface>", + "flags": 16 + }, + { + "name": "Baseclass_KeyframedValueInterface", + "type": "KeyframedValueInterface", + "flags": 16 + }, + { + "name": "mMinVal", + "type": "Handle", + "flags": 0 + }, + { + "name": "mMaxVal", + "type": "Handle", + "flags": 0 + }, + { + "name": "mSamples", + "type": "DCArray>::Sample>", + "flags": 0 + } + ] + }, + { + "type": "T3VertexBuffer", + "crc32": 2085920499, + "members": [ + { + "name": "mNumVerts", + "type": "int", + "flags": 0 + }, + { + "name": "mVertSize", + "type": "int", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mUsage", + "type": "int", + "flags": 0 + }, + { + "name": "mVertexComponents", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "AnimatedValueInterface>", + "crc32": 809410798, + "members": [ + { + "name": "Baseclass_AnimationValueInterfaceBase", + "type": "AnimationValueInterfaceBase", + "flags": 16 + } + ] + }, + { + "type": "D3DMesh::TriangleSet", + "crc32": 2081769741, + "members": [ + { + "name": "mVertexShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mPixelShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBonePaletteIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mBoneMatrixIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mGeometryFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mMinVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mMaxVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mStartIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNumPrimitives", + "type": "int", + "flags": 0 + }, + { + "name": "mLightingGroup", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mDiffuseTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mLightMapTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mDetailTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mDetailBumpTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNormalTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mEnvTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mSpecularTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mSSSTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mhDiffuseMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhSpecularColorMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhDetailMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhDetailBumpMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhLightMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhBumpMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhAmbientMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhOutlineDiscontinuityMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhToonLightQuantized", + "type": "Handle", + "flags": 0 + }, + { + "name": "mbHasPixelShader_RemoveMe", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriStrips", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mNumTotalIndices", + "type": "int", + "flags": 0 + }, + { + "name": "mbDoubleSided", + "type": "bool", + "flags": 0 + }, + { + "name": "mbBumpEffectsSpecular", + "type": "bool", + "flags": 0 + }, + { + "name": "mfBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mfDetailBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mbBumpAsNormalMap", + "type": "bool", + "flags": 0 + }, + { + "name": "mbDetailBumpAsNormalMap", + "type": "bool", + "flags": 0 + }, + { + "name": "mhEnvMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mfEccentricity", + "type": "float", + "flags": 0 + }, + { + "name": "mSpecularColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mAmbientColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mbSelfIlluminated", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaterialColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonOffset", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToonEnvLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonNoNormalDeform", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedSWSkinning", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedComputeOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedRenderOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mGlowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mCastShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 64 + }, + { + "name": "mfReflectivity", + "type": "float", + "flags": 0 + }, + { + "name": "mToonNumShades", + "type": "int", + "flags": 64 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAnimation", + "type": "bool", + "flags": 0 + }, + { + "name": "mUVGenMode", + "type": "int", + "flags": 64 + }, + { + "name": "mUVScreenSpaceScaling", + "type": "float", + "flags": 0 + }, + { + "name": "mUVScreenSpaceZoom", + "type": "bool", + "flags": 0 + }, + { + "name": "mbHasOctree", + "type": "bool", + "flags": 0 + }, + { + "name": "mSpecularOnAlpha", + "type": "float", + "flags": 0 + }, + { + "name": "mToonSphericalNormals", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonSphericalNormalBoneName", + "type": "String", + "flags": 0 + }, + { + "name": "mbVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mbCameraFacing", + "type": "bool", + "flags": 0 + }, + { + "name": "mCameraFacingType", + "type": "int", + "flags": 0 + }, + { + "name": "mLocalTransform", + "type": "Transform", + "flags": 0 + }, + { + "name": "mbHasLocalTransform", + "type": "bool", + "flags": 0 + }, + { + "name": "mSubsurfaceScateringRadius", + "type": "float", + "flags": 0 + }, + { + "name": "mhSubsurfaceScateringMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mOverride3DAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mDiffuseColor", + "type": "Color", + "flags": 0 + } + ] + }, + { + "type": "ActingPaletteGroup", + "crc32": 2832049118, + "members": [ + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTalkingIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mMumbleMouth", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mWeight", + "type": "float", + "flags": 0 + }, + { + "name": "mTransitionIn", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTransitionOut", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mIdleTransitionTimeOverride", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition1", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn1", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset1", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition2", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn2", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset2", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition3", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn3", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset3", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition4", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn4", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset4", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition5", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn5", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset5", + "type": "float", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeJump", + "crc32": 572228616, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mJumpToLink", + "type": "DlgNodeLink", + "flags": 32 + }, + { + "name": "mJumpToName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mJumpTargetClass", + "type": "int", + "flags": 64 + }, + { + "name": "mJumpBehavior", + "type": "int", + "flags": 64 + }, + { + "name": "mVisibilityBehavior", + "type": "int", + "flags": 64 + }, + { + "name": "mhJumpToDlg", + "type": "Handle", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh::Texture", + "crc32": 189159021, + "members": [ + { + "name": "mName", + "type": "Handle", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mMaxObjAreaPerUVArea", + "type": "float", + "flags": 0 + }, + { + "name": "mbHasLightmap", + "type": "bool", + "flags": 0 + }, + { + "name": "mbHasNonLightmap", + "type": "bool", + "flags": 0 + } + ] + }, + { + "type": "T3EffectParameters", + "crc32": 164689904, + "members": [ + { + "name": "mParameters", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataCg", + "crc32": 3301767202, + "members": [ + { + "name": "Baseclass_T3EffectBinaryData", + "type": "T3EffectBinaryData", + "flags": 16 + }, + { + "name": "mPasses", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSamplerState", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mParameters", + "type": "T3EffectParameters", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh", + "crc32": 1223194655, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mbDeformable", + "type": "bool", + "flags": 0 + }, + { + "name": "mbManualSort", + "type": "bool", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mTriangleSets", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mVertexAnimations", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBonePalettes", + "type": "DCArray>", + "flags": 0 + }, + { + "name": "mSkinningData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBoneData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbLightmaps", + "type": "bool", + "flags": 0 + }, + { + "name": "mbLowQualityRender", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAlphaSupport", + "type": "bool", + "flags": 0 + }, + { + "name": "mbMeshHasVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriangleStripState", + "type": "int", + "flags": 0 + }, + { + "name": "mbMeshHasSmoothNormalsSupport", + "type": "bool", + "flags": 0 + }, + { + "name": "mAnimatedVertexCount", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mDiffuseTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mDetailTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mDetailBumpTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mLightmapTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBumpmapTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mEnvironmentTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSpecularTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSSSTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbToonLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mDiffuseScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mLightMapScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mDetailScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexEntries", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexGroupEntries", + "type": "Map>", + "flags": 0 + }, + { + "name": "mToolProps", + "type": "ToolProps", + "flags": 0 + } + ] + }, + { + "type": "T3Texture", + "crc32": 552954875, + "members": [ + { + "name": "mSamplerState", + "type": "T3SamplerStateBlock", + "flags": 0 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mImportName", + "type": "String", + "flags": 0 + }, + { + "name": "mToolProps", + "type": "ToolProps", + "flags": 0 + }, + { + "name": "mbHasTextureData", + "type": "bool", + "flags": 0 + }, + { + "name": "mbIsMipMapped", + "type": "bool", + "flags": 0 + }, + { + "name": "mNumMipLevels", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mD3DFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mWidth", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mHeight", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mWiiForceWidth", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mWiiForceHeight", + "type": "unsignedint", + "flags": 0 + }, + { + "name": "mbWiiForceUncompressed", + "type": "bool", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 0 + }, + { + "name": "mTextureDataFormats", + "type": "Flags", + "flags": 0 + }, + { + "name": "mTplTexutreDataSize", + "type": "int", + "flags": 0 + }, + { + "name": "mTplAlphaDataSize", + "type": "int", + "flags": 0 + }, + { + "name": "mJPEGTextureDataSize", + "type": "int", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 0 + }, + { + "name": "mExactAlphaMode", + "type": "int", + "flags": 0 + }, + { + "name": "mColorMode", + "type": "int", + "flags": 0 + }, + { + "name": "mWiiTextureFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mbAlphaHDR", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEncrypted", + "type": "bool", + "flags": 0 + }, + { + "name": "mDetailMapBrightness", + "type": "float", + "flags": 0 + }, + { + "name": "mNormalMapFmt", + "type": "unsignedlong", + "flags": 0 + }, + { + "name": "mUVOffset", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mUVScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mbForcePreviewRebuild", + "type": "bool", + "flags": 1 + } + ] + }, + { + "type": "T3EffectBinaryDataCg::Pass", + "crc32": 2252252666, + "members": [ + { + "name": "mVertexProgram", + "type": "BinaryBuffer", + "flags": 0 + }, + { + "name": "mFragmentProgram", + "type": "BinaryBuffer", + "flags": 0 + }, + { + "name": "mVertexDecl", + "type": "T3VertexDeclaration", + "flags": 0 + }, + { + "name": "mVertexParameters", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mFragmentParameters", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mFragmentParameterOffsets", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mStateBlock", + "type": "T3RenderStateBlock", + "flags": 0 + }, + { + "name": "mStateMask", + "type": "T3RenderStateBlock", + "flags": 0 + }, + { + "name": "mParameters", + "type": "T3EffectParameters", + "flags": 0 + }, + { + "name": "mFragmentOffsets", + "type": "DArray", + "flags": 0 + }, + { + "name": "mNeededInterface", + "type": "unsignedlong", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataHlsl_D3D", + "crc32": 2531485602, + "members": [ + { + "name": "Baseclass_T3EffectBinaryDataCg", + "type": "T3EffectBinaryDataCg", + "flags": 16 + } + ] + }, + { + "type": "ActingPaletteGroup", + "crc32": 2081323303, + "members": [ + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTalkingIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mMumbleMouth", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mWeight", + "type": "float", + "flags": 0 + }, + { + "name": "mTransitionIn", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTransitionOut", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mIdleTransitionTimeOverride", + "type": "float", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeJump", + "crc32": 549434172, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mJumpToLink", + "type": "DlgNodeLink", + "flags": 32 + }, + { + "name": "mJumpToName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mJumpTargetClass", + "type": "int", + "flags": 64 + }, + { + "name": "mJumpBehavior", + "type": "int", + "flags": 64 + }, + { + "name": "mhJumpToDlg", + "type": "Handle", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataCg", + "crc32": 2973441454, + "members": [ + { + "name": "Baseclass_T3EffectBinaryData", + "type": "T3EffectBinaryData", + "flags": 16 + }, + { + "name": "mPasses", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSamplerState", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "T3VertexBuffer", + "crc32": 2887886974, + "members": [ + { + "name": "mNumVerts", + "type": "int", + "flags": 0 + }, + { + "name": "mVertSize", + "type": "int", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mUsage", + "type": "int", + "flags": 0 + }, + { + "name": "mComponents", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh", + "crc32": 2544960065, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mbDeformable", + "type": "bool", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mTriangleSets", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mVertexAnimations", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBonePalettes", + "type": "DCArray>", + "flags": 0 + }, + { + "name": "mSkinningData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBoneData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbLightmaps", + "type": "bool", + "flags": 0 + }, + { + "name": "mbLowQualityRender", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAlphaSupport", + "type": "bool", + "flags": 0 + }, + { + "name": "mbMeshHasVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriangleStripState", + "type": "int", + "flags": 0 + }, + { + "name": "mbMeshHasSmoothNormalsSupport", + "type": "bool", + "flags": 0 + }, + { + "name": "mAnimatedVertexCount", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mDiffuseTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mDetailTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mLightmapTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBumpmapTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mEnvironmentTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSpecularTextures", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbToonLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mDiffuseScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mLightMapScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexEntries", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexGroupEntries", + "type": "Map>", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeStart", + "crc32": 3421566820, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + } + ] + }, + { + "type": "T3EffectBinaryDataHlsl_D3D", + "crc32": 3856109219, + "members": [ + { + "name": "Baseclass_T3EffectBinaryDataCg", + "type": "T3EffectBinaryDataCg", + "flags": 16 + } + ] + }, + { + "type": "DlgNodeSequence::DlgChildSetElement", + "crc32": 1409452376, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "AgentMap", + "crc32": 1682342912, + "members": [ + { + "name": "maAgents", + "type": "Map>", + "flags": 0 + } + ] + }, + { + "type": "Font", + "crc32": 379212889, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mbUnicode", + "type": "bool", + "flags": 0 + }, + { + "name": "mHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mWiiScale", + "type": "float", + "flags": 0 + }, + { + "name": "mFontScale", + "type": "float", + "flags": 0 + }, + { + "name": "mGlyphInfo", + "type": "Map>", + "flags": 0 + }, + { + "name": "mTexturePages", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh::PaletteEntry", + "crc32": 1036283857, + "members": [ + { + "name": "mBoneName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mNumVerts", + "type": "int", + "flags": 0 + } + ] + }, + { + "type": "LogicGroup::LogicItem", + "crc32": 1476040683, + "members": [ + { + "name": "Baseclass_PropertySet", + "type": "PropertySet", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mKeyNegateList", + "type": "Map>", + "flags": 0 + }, + { + "name": "mKeyComparisonList", + "type": "Map>", + "flags": 0 + }, + { + "name": "mKeyActionList", + "type": "Map>", + "flags": 0 + } + ] + }, + { + "type": "StyleGuide", + "crc32": 2062172117, + "members": [ + { + "name": "Baseclass_UID::Generator", + "type": "UID::Generator", + "flags": 16 + }, + { + "name": "Baseclass_ActingOverridablePropOwner", + "type": "ActingOverridablePropOwner", + "flags": 16 + }, + { + "name": "mDefPaletteClassID", + "type": "int", + "flags": 0 + }, + { + "name": "mbGeneratesLookAts", + "type": "bool", + "flags": 0 + }, + { + "name": "mPaletteClassPtrs", + "type": "DCArray>", + "flags": 1 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mbDisallowOverrun", + "type": "bool", + "flags": 0 + }, + { + "name": "mPaletteClasses", + "type": "DCArray", + "flags": 32 + }, + { + "name": "mDefPaletteClassIndex", + "type": "int", + "flags": 32 + } + ] + }, + { + "type": "KeyframedValue>", + "crc32": 1378658527, + "members": [ + { + "name": "Baseclass_AnimatedValueInterface", + "type": "AnimatedValueInterface>", + "flags": 16 + }, + { + "name": "Baseclass_KeyframedValueInterface", + "type": "KeyframedValueInterface", + "flags": 16 + }, + { + "name": "mMinVal", + "type": "T3VertexBufferSample", + "flags": 0 + }, + { + "name": "mMaxVal", + "type": "T3VertexBufferSample", + "flags": 0 + }, + { + "name": "mSamples", + "type": "DCArray>::Sample>", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh::LocalTransformEntry", + "crc32": 3182337113, + "members": [ + { + "name": "mTransform", + "type": "Transform", + "flags": 0 + }, + { + "name": "mCameraFacingType", + "type": "int", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeSequence::Element", + "crc32": 3230022612, + "members": [ + { + "name": "Baseclass_DlgChild", + "type": "DlgChild", + "flags": 16 + }, + { + "name": "mRepeat", + "type": "int", + "flags": 64 + }, + { + "name": "mPlayPosition", + "type": "int", + "flags": 64 + } + ] + }, + { + "type": "Chore", + "crc32": 1913028294, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mLength", + "type": "float", + "flags": 0 + }, + { + "name": "mNumResources", + "type": "int", + "flags": 0 + }, + { + "name": "mNumAgents", + "type": "int", + "flags": 0 + }, + { + "name": "mEditorProps", + "type": "PropertySet", + "flags": 0 + }, + { + "name": "mChoreSceneFile", + "type": "String", + "flags": 0 + }, + { + "name": "mRenderDelay", + "type": "int", + "flags": 0 + }, + { + "name": "mSynchronizedToLocalization", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mDependencies", + "type": "DependencyLoader<1>", + "flags": 0 + }, + { + "name": "mToolProps", + "type": "ToolProps", + "flags": 0 + } + ] + }, + { + "type": "DlgChildSetConditionalCase", + "crc32": 1409452376, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "KeyframedValue>::Sample", + "crc32": 2637781173, + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "T3VertexBufferSample", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 1 + } + ] + }, + { + "type": "DlgNodeSequence", + "crc32": 3991282508, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mElements", + "type": "DlgNodeSequence::DlgChildSetElement", + "flags": 32 + }, + { + "name": "mPlaybackMode", + "type": "int", + "flags": 64 + }, + { + "name": "mLifetimeMode", + "type": "int", + "flags": 64 + }, + { + "name": "mElemUseCriteria", + "type": "DlgNodeCriteria", + "flags": 32 + } + ] + }, + { + "type": "T3EffectBinaryDataCg::Pass", + "crc32": 550025326, + "members": [ + { + "name": "mVertexProgram", + "type": "BinaryBuffer", + "flags": 0 + }, + { + "name": "mFragmentProgram", + "type": "BinaryBuffer", + "flags": 0 + }, + { + "name": "mVertexDecl", + "type": "T3VertexDeclaration", + "flags": 0 + }, + { + "name": "mVertexParameters", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mFragmentParameters", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mFragmentParameterOffsets", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mStateBlock", + "type": "T3RenderStateBlock", + "flags": 0 + }, + { + "name": "mStateMask", + "type": "T3RenderStateBlock", + "flags": 0 + }, + { + "name": "mParameters", + "type": "T3EffectParameters", + "flags": 0 + }, + { + "name": "mFragmentOffsets", + "type": "DArray", + "flags": 0 + }, + { + "name": "mNeededInterface", + "type": "unsignedlong", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeConditional", + "crc32": 2726400862, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mCases", + "type": "DlgChildSetConditionalCase", + "flags": 32 + } + ] + }, + { + "type": "D3DMesh", + "crc32": 2949731128, + "members": [ + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 262144 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mTriangleSets", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mVertexAnimations", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBonePalettes", + "type": "DCArray>", + "flags": 0 + }, + { + "name": "mSkinningData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mBoneData", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mLocalTransformPalettes", + "type": "DCArray>", + "flags": 0 + }, + { + "name": "mTriangleStripState", + "type": "int", + "flags": 0 + }, + { + "name": "mAnimatedVertexCount", + "type": "int", + "flags": 0 + }, + { + "name": "mTextures", + "type": "SArray,11>", + "flags": 0 + }, + { + "name": "mDiffuseScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mLightMapScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mShadowMapScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mDetailScale", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexEntries", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mToolAnimatedVertexGroupEntries", + "type": "Map>", + "flags": 0 + }, + { + "name": "mToolProps", + "type": "ToolProps", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataHlsl_D3D", + "crc32": 4002295803, + "members": [ + { + "name": "Baseclass_T3EffectBinaryDataCg", + "type": "T3EffectBinaryDataCg", + "flags": 16 + } + ] + }, + { + "type": "DlgNodeParallel::DlgChildSetElement", + "crc32": 1409452376, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "ChoreResource", + "crc32": 2992323262, + "members": [ + { + "name": "mpChore", + "type": "Ptr", + "flags": 0 + }, + { + "name": "mVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mResName", + "type": "String", + "flags": 0 + }, + { + "name": "mResLength", + "type": "float", + "flags": 0 + }, + { + "name": "mPriority", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mResourceGroup", + "type": "String", + "flags": 0 + }, + { + "name": "mhObject", + "type": "HandleBase", + "flags": 0 + }, + { + "name": "mControlAnimation", + "type": "Animation", + "flags": 0 + }, + { + "name": "mBlocks", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mbNoPose", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEmbedded", + "type": "bool", + "flags": 0 + }, + { + "name": "mbEnabled", + "type": "bool", + "flags": 0 + }, + { + "name": "mbIsAgentResource", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewGraphs", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewEmptyGraphs", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewProperties", + "type": "bool", + "flags": 0 + }, + { + "name": "mbViewResourceGroups", + "type": "bool", + "flags": 0 + }, + { + "name": "mResourceProperties", + "type": "PropertySet", + "flags": 0 + }, + { + "name": "mResourceGroupInclude", + "type": "Map>", + "flags": 0 + }, + { + "name": "mAAStatus", + "type": "int", + "flags": 64 + } + ] + }, + { + "type": "Font::GlyphInfo", + "crc32": 3913526755, + "members": [ + { + "name": "mTexturePage", + "type": "int", + "flags": 0 + }, + { + "name": "mChannel", + "type": "int", + "flags": 0 + }, + { + "name": "mGlyph", + "type": "TRect", + "flags": 0 + }, + { + "name": "mWidth", + "type": "float", + "flags": 0 + }, + { + "name": "mHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mXOffset", + "type": "float", + "flags": 0 + }, + { + "name": "mYOffset", + "type": "float", + "flags": 0 + }, + { + "name": "mXAdvance", + "type": "float", + "flags": 0 + } + ] + }, + { + "type": "T3VertexBuffer", + "crc32": 2448626855, + "members": [ + { + "name": "mNumVerts", + "type": "int", + "flags": 0 + }, + { + "name": "mVertSize", + "type": "int", + "flags": 0 + }, + { + "name": "mType", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mUsage", + "type": "int", + "flags": 0 + }, + { + "name": "mVertexComponents", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "T3VertexSampleDataBase", + "crc32": 1574469491, + "members": [ + { + "name": "mNumVerts", + "type": "int", + "flags": 0 + }, + { + "name": "mVertSize", + "type": "int", + "flags": 0 + } + ] + }, + { + "type": "SkeletonPoseValue::Sample", + "crc32": 1678832802, + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mRecipTimeToNextSample", + "type": "float", + "flags": 0 + }, + { + "name": "mValues", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mTangents", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "PropertySet", + "crc32": 213285513, + "members": [ + { + "name": "mPropVersion", + "type": "int", + "flags": 0 + }, + { + "name": "mPropertyFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mParentList", + "type": "List>", + "flags": 0 + }, + { + "name": "mKeyMap", + "type": "IntrusiveSet>", + "flags": 1 + } + ] + }, + { + "type": "KeyframedValue>", + "crc32": 1378658527, + "members": [ + { + "name": "Baseclass_AnimatedValueInterface", + "type": "AnimatedValueInterface>", + "flags": 16 + }, + { + "name": "Baseclass_KeyframedValueInterface", + "type": "KeyframedValueInterface", + "flags": 16 + }, + { + "name": "mMinVal", + "type": "T3VertexBufferSample", + "flags": 0 + }, + { + "name": "mMaxVal", + "type": "T3VertexBufferSample", + "flags": 0 + }, + { + "name": "mSamples", + "type": "DCArray>::Sample>", + "flags": 0 + } + ] + }, + { + "type": "AgentMap::AgentMapEntry", + "crc32": 1909936974, + "members": [ + { + "name": "mzName", + "type": "String", + "flags": 0 + }, + { + "name": "mzActor", + "type": "String", + "flags": 0 + }, + { + "name": "mazModels", + "type": "Set>", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh::TriangleSet", + "crc32": 2095573974, + "members": [ + { + "name": "mFlags", + "type": "Flags", + "flags": 262144 + }, + { + "name": "mBonePaletteIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mLocalTransformPaletteIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mLocalTransformIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mMinVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mMaxVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mStartIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNumPrimitives", + "type": "int", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mTxIndex", + "type": "SArray", + "flags": 0 + }, + { + "name": "mTriStrips", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mNumTotalIndices", + "type": "int", + "flags": 0 + }, + { + "name": "mfBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mfDetailBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mfEccentricity", + "type": "float", + "flags": 0 + }, + { + "name": "mSpecularColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mAmbientColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineInvertColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mGlowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 64 + }, + { + "name": "mfReflectivity", + "type": "float", + "flags": 0 + }, + { + "name": "mToonNumShades", + "type": "int", + "flags": 0 + }, + { + "name": "mUVGenMode", + "type": "int", + "flags": 64 + }, + { + "name": "mUVScreenSpaceScaling", + "type": "float", + "flags": 0 + }, + { + "name": "mSpecularOnAlpha", + "type": "float", + "flags": 0 + }, + { + "name": "mToonSphericalNormalBoneName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mSubsurfaceScateringRadius", + "type": "float", + "flags": 0 + }, + { + "name": "mDiffuseColor", + "type": "Color", + "flags": 0 + } + ] + }, + { + "type": "Scene::AgentInfo", + "crc32": 3964543544, + "members": [ + { + "name": "mpAgent", + "type": "Ptr", + "flags": 0 + }, + { + "name": "mAgentName", + "type": "String", + "flags": 0 + }, + { + "name": "mAgentSceneProps", + "type": "PropertySet", + "flags": 0 + } + ] + }, + { + "type": "DlgChild", + "crc32": 3244990921, + "members": [ + { + "name": "Baseclass_DlgChainHead", + "type": "DlgChainHead", + "flags": 48 + }, + { + "name": "mName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "Baseclass_DlgVisibilityConditionsOwner", + "type": "DlgVisibilityConditionsOwner", + "flags": 16 + }, + { + "name": "Baseclass_DlgObjectPropsOwner", + "type": "DlgObjectPropsOwner", + "flags": 16 + }, + { + "name": "mParent", + "type": "DlgNodeLink", + "flags": 32 + } + ] + }, + { + "type": "ActorAgentMapper", + "crc32": 3926361962, + "members": [ + { + "name": "mActorAgentMap", + "type": "PropertySet", + "flags": 0 + }, + { + "name": "mActionActors", + "type": "Set>", + "flags": 0 + } + ] + }, + { + "type": "T3IndexBuffer", + "crc32": 468582904, + "members": [ + { + "name": "mFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mNumIndicies", + "type": "int", + "flags": 0 + }, + { + "name": "mFlags", + "type": "Flags", + "flags": 0 + }, + { + "name": "mUsage", + "type": "int", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeParallel::PElement", + "crc32": 311881456, + "members": [ + { + "name": "Baseclass_DlgChild", + "type": "DlgChild", + "flags": 16 + } + ] + }, + { + "type": "T3EffectParameters", + "crc32": 1453522088, + "members": [ + { + "name": "mParameters", + "type": "SArray", + "flags": 0 + } + ] + }, + { + "type": "KeyframedValue>::Sample", + "crc32": 2637781173, + "members": [ + { + "name": "mTime", + "type": "float", + "flags": 0 + }, + { + "name": "mbInterpolateToNextKey", + "type": "bool", + "flags": 0 + }, + { + "name": "mTangentMode", + "type": "int", + "flags": 64 + }, + { + "name": "mValue", + "type": "T3VertexBufferSample", + "flags": 0 + } + ] + }, + { + "type": "DlgFolder", + "crc32": 3593636014, + "members": [ + { + "name": "Baseclass_DlgObjIDOwner", + "type": "DlgObjIDOwner", + "flags": 48 + }, + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 48 + }, + { + "name": "Baseclass_TaskOwner", + "type": "TaskOwner", + "flags": 16 + }, + { + "name": "mName", + "type": "Symbol", + "flags": 0 + } + ] + }, + { + "type": "DlgConditionalCase", + "crc32": 311881456, + "members": [ + { + "name": "Baseclass_DlgChild", + "type": "DlgChild", + "flags": 16 + } + ] + }, + { + "type": "AnimatedValueInterface>", + "crc32": 809410798, + "members": [ + { + "name": "Baseclass_AnimationValueInterfaceBase", + "type": "AnimationValueInterfaceBase", + "flags": 16 + } + ] + }, + { + "type": "ActingPaletteGroup", + "crc32": 1512868929, + "members": [ + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTalkingIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mMumbleMouth", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mWeight", + "type": "float", + "flags": 0 + }, + { + "name": "mTransitionIn", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTransitionOut", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mIdleTransitionTimeOverride", + "type": "float", + "flags": 0 + }, + { + "name": "mIdleTransitionKind", + "type": "ActingPaletteGroup::EnumIdleTransition", + "flags": 0 + }, + { + "name": "mTransition1", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn1", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset1", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay1", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay1", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition2", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn2", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset2", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay2", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay2", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition3", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn3", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset3", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay3", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay3", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition4", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn4", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset4", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay4", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay4", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition5", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn5", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset5", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay5", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay5", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition6", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn6", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset6", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay6", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay6", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition7", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn7", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset7", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay7", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay7", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition8", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn8", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset8", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay8", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay8", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition9", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn9", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset9", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay9", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay9", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition10", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn10", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset10", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay10", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay10", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition11", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn11", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset11", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay11", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay11", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition12", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn12", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset12", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay12", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay12", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition13", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn13", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset13", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay13", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay13", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition14", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn14", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset14", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay14", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay14", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition15", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn15", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset15", + "type": "float", + "flags": 0 + }, + { + "name": "mPreDelay15", + "type": "float", + "flags": 0 + }, + { + "name": "mPostDelay15", + "type": "float", + "flags": 0 + }, + { + "name": "mRandomAutoMin", + "type": "float", + "flags": 0 + }, + { + "name": "mRandomAutoMax", + "type": "float", + "flags": 0 + } + ] + }, + { + "type": "AnimatedValueInterface>", + "crc32": 809410798, + "members": [ + { + "name": "Baseclass_AnimationValueInterfaceBase", + "type": "AnimationValueInterfaceBase", + "flags": 16 + } + ] + }, + { + "type": "T3EffectBinaryDataCg", + "crc32": 553478047, + "members": [ + { + "name": "Baseclass_T3EffectBinaryData", + "type": "T3EffectBinaryData", + "flags": 16 + }, + { + "name": "mPasses", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSamplerState", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mParameters", + "type": "T3EffectParameters", + "flags": 0 + } + ] + }, + { + "type": "DlgFolderChild", + "crc32": 311881456, + "members": [ + { + "name": "Baseclass_DlgChild", + "type": "DlgChild", + "flags": 16 + } + ] + }, + { + "type": "DlgNodeParallel", + "crc32": 406159052, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mPElements", + "type": "DlgNodeParallel::DlgChildSetElement", + "flags": 32 + }, + { + "name": "mElemUseCriteria", + "type": "DlgNodeCriteria", + "flags": 32 + } + ] + }, + { + "type": "SkeletonPoseValue", + "crc32": 3243035469, + "members": [ + { + "name": "Baseclass_AnimationValueInterfaceBase", + "type": "AnimationValueInterfaceBase", + "flags": 16 + }, + { + "name": "mBones", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mSamples", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "D3DMesh::VertexAnimation", + "crc32": 2757512126, + "members": [ + { + "name": "mName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mResourceGroupMembership", + "type": "Map>", + "flags": 0 + }, + { + "name": "mStartIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNumVertices", + "type": "int", + "flags": 0 + } + ] + }, + { + "type": "ActingPaletteGroup", + "crc32": 664705618, + "members": [ + { + "name": "Baseclass_UID::Owner", + "type": "UID::Owner", + "flags": 16 + }, + { + "name": "mName", + "type": "String", + "flags": 0 + }, + { + "name": "mIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTalkingIdle", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mMumbleMouth", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mWeight", + "type": "float", + "flags": 0 + }, + { + "name": "mTransitionIn", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mTransitionOut", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mIdleTransitionTimeOverride", + "type": "float", + "flags": 0 + }, + { + "name": "mIdleTransitionKind", + "type": "ActingPaletteGroup::EnumIdleTransition", + "flags": 0 + }, + { + "name": "mTransition1", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn1", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset1", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition2", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn2", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset2", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition3", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn3", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset3", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition4", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn4", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset4", + "type": "float", + "flags": 0 + }, + { + "name": "mTransition5", + "type": "String", + "flags": 0 + }, + { + "name": "mTransitionIn5", + "type": "AnimOrChore", + "flags": 0 + }, + { + "name": "mCenterOffset5", + "type": "float", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeParallel", + "crc32": 2666835773, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mPElements", + "type": "DlgNodeParallel::DlgChildSetElement", + "flags": 32 + }, + { + "name": "mElemUseCriteria", + "type": "DlgNodeCriteria", + "flags": 32 + } + ] + }, + { + "type": "DlgNodeConditional", + "crc32": 1318950729, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mCases", + "type": "DlgChildSetConditionalCase", + "flags": 32 + } + ] + }, + { + "type": "DlgChildSetChoice", + "crc32": 2639247216, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "T3EffectBinaryDataCg", + "crc32": 968864093, + "members": [ + { + "name": "Baseclass_T3EffectBinaryData", + "type": "T3EffectBinaryData", + "flags": 16 + }, + { + "name": "mTechniques", + "type": "DCArray", + "flags": 0 + } + ] + }, + { + "type": "DlgChildSetChoicesChildPre", + "crc32": 2639247216, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "DlgNodeSequence", + "crc32": 3618221232, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mElements", + "type": "DlgNodeSequence::DlgChildSetElement", + "flags": 32 + }, + { + "name": "mPlaybackMode", + "type": "int", + "flags": 64 + }, + { + "name": "mLifetimeMode", + "type": "int", + "flags": 64 + }, + { + "name": "mElemUseCriteria", + "type": "DlgNodeCriteria", + "flags": 32 + } + ] + }, + { + "type": "DlgNodeParallel::DlgChildSetElement", + "crc32": 2639247216, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "DlgFolder", + "crc32": 206904488, + "members": [ + { + "name": "Baseclass_DlgObjIDOwner", + "type": "DlgObjIDOwner", + "flags": 48 + }, + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 48 + }, + { + "name": "Baseclass_TaskOwner", + "type": "TaskOwner", + "flags": 16 + }, + { + "name": "mName", + "type": "Symbol", + "flags": 0 + } + ] + }, + { + "type": "T3EffectBinaryDataHlsl_D3D", + "crc32": 501925299, + "members": [ + { + "name": "Baseclass_T3EffectBinaryDataCg", + "type": "T3EffectBinaryDataCg", + "flags": 16 + } + ] + }, + { + "type": "DlgNodeSequence::DlgChildSetElement", + "crc32": 2639247216, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "DlgChildSetChoicesChildPost", + "crc32": 2639247216, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] + }, + { + "type": "DlgNodeChoices", + "crc32": 464744749, + "members": [ + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mChoices", + "type": "DlgChildSetChoice", + "flags": 32 + }, + { + "name": "mPreChoice", + "type": "DlgChildSetChoicesChildPre", + "flags": 32 + }, + { + "name": "mPostChoice", + "type": "DlgChildSetChoicesChildPost", + "flags": 32 + } + ] + }, + { + "type": "D3DMesh::TriangleSet", + "crc32": 3028216762, + "members": [ + { + "name": "mVertexShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mPixelShaderName", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBonePaletteIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mBoneMatrixIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mGeometryFormat", + "type": "int", + "flags": 0 + }, + { + "name": "mMinVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mMaxVertIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mStartIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mNumPrimitives", + "type": "int", + "flags": 0 + }, + { + "name": "mLightingGroup", + "type": "Symbol", + "flags": 0 + }, + { + "name": "mBoundingBox", + "type": "BoundingBox", + "flags": 0 + }, + { + "name": "mBoundingSphere", + "type": "Sphere", + "flags": 0 + }, + { + "name": "mDiffuseTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mLightMapTextureIndex", + "type": "int", + "flags": 0 + }, + { + "name": "mhDiffuseMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhSpecularColorMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhDetailMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhLightMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhBumpMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhAmbientMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhOutlineDiscontinuityMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mhToonLightQuantized", + "type": "Handle", + "flags": 0 + }, + { + "name": "mbHasPixelShader_RemoveMe", + "type": "bool", + "flags": 0 + }, + { + "name": "mTriStrips", + "type": "DCArray", + "flags": 0 + }, + { + "name": "mNumTotalIndices", + "type": "int", + "flags": 0 + }, + { + "name": "mbDoubleSided", + "type": "bool", + "flags": 0 + }, + { + "name": "mbBumpEffectsSpecular", + "type": "bool", + "flags": 0 + }, + { + "name": "mfBumpHeight", + "type": "float", + "flags": 0 + }, + { + "name": "mbBumpAsNormalMap", + "type": "bool", + "flags": 0 + }, + { + "name": "mhEnvMap", + "type": "Handle", + "flags": 0 + }, + { + "name": "mfEccentricity", + "type": "float", + "flags": 0 + }, + { + "name": "mSpecularColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mAmbientColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mbSelfIlluminated", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaterialColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineColor", + "type": "Color", + "flags": 0 + }, + { + "name": "mToonOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonOffset", + "type": "Vector2", + "flags": 0 + }, + { + "name": "mToonEnvLighting", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonNoNormalDeform", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedSWSkinning", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedComputeOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mNeedRenderOutline", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonMaxZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mToonMinZConstOutlineSize", + "type": "float", + "flags": 0 + }, + { + "name": "mGlowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadowIntensity", + "type": "float", + "flags": 0 + }, + { + "name": "mReceiveShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mCastShadows", + "type": "bool", + "flags": 0 + }, + { + "name": "mAlphaMode", + "type": "int", + "flags": 64 + }, + { + "name": "mfReflectivity", + "type": "float", + "flags": 0 + }, + { + "name": "mToonNumShades", + "type": "int", + "flags": 64 + }, + { + "name": "mbToonRendering", + "type": "bool", + "flags": 0 + }, + { + "name": "mbVertexAnimation", + "type": "bool", + "flags": 0 + }, + { + "name": "mUVGenMode", + "type": "int", + "flags": 64 + }, + { + "name": "mUVScreenSpaceScaling", + "type": "float", + "flags": 0 + }, + { + "name": "mUVScreenSpaceZoom", + "type": "bool", + "flags": 0 + }, + { + "name": "mbHasOctree", + "type": "bool", + "flags": 0 + }, + { + "name": "mSpecularOnAlpha", + "type": "float", + "flags": 0 + }, + { + "name": "mToonSphericalNormals", + "type": "bool", + "flags": 0 + }, + { + "name": "mToonSphericalNormalBoneName", + "type": "String", + "flags": 0 + }, + { + "name": "mbVertexAlpha", + "type": "bool", + "flags": 0 + }, + { + "name": "mbCameraFacing", + "type": "bool", + "flags": 0 + }, + { + "name": "mCameraFacingType", + "type": "int", + "flags": 0 + }, + { + "name": "mLocalTransform", + "type": "Transform", + "flags": 0 + } + ] + }, + { + "type": "DlgNodeExchange", + "crc32": 4170423743, + "members": [ + { + "name": "mhChore", + "type": "Handle", + "flags": 0 + }, + { + "name": "Baseclass_DlgNode", + "type": "DlgNode", + "flags": 16 + }, + { + "name": "mEntries", + "type": "DCArray", + "flags": 32 + } + ] + }, + { + "type": "DlgChildSetConditionalCase", + "crc32": 2639247216, + "members": [ + { + "name": "Baseclass_DlgChildSet", + "type": "DlgChildSet", + "flags": 16 + } + ] } ] \ No newline at end of file diff --git a/data/versiondb/jurassic-park-the-game-2011.vdb.json b/data/versiondb/jurassic-park-the-game-2011.vdb.json new file mode 100644 index 0000000..51e2f23 --- /dev/null +++ b/data/versiondb/jurassic-park-the-game-2011.vdb.json @@ -0,0 +1,191 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 2758770217, + "ActingPaletteGroup": 2832049118, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 206780177, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BlendMode": 790155486, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 4177341971, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 74229109, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 1223194655, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::Texture": 189159021, + "D3DMesh::TriangleSet": 2081769741, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionRule": 1248438046, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 1085632428, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 2270241961, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 572228616, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeParallel": 3186472962, + "DlgNodeParallel::DlgChildSetElement": 4183558796, + "DlgNodeParallel::PElement": 1680549273, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 509556765, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "EnumeTangentModes": 790155486, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Rules": 1509450118, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3768542440, + "T3EffectBinaryData": 2221784526, + "T3EffectBinaryDataCg": 3301767202, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 2252252666, + "T3EffectBinaryDataCg::SamplerState": 3074118924, + "T3EffectBinaryDataHlsl_D3D": 2531485602, + "T3EffectParameters": 164689904, + "T3IndexBuffer": 3629110418, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 552954875, + "T3VertexBuffer": 2085920499, + "T3VertexComponent": 1481819521, + "T3VertexDeclaration": 2485238651, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/jurassic-park-the-game-NEW.vdb.json b/data/versiondb/jurassic-park-the-game-NEW.vdb.json deleted file mode 100644 index 7d65a9e..0000000 --- a/data/versiondb/jurassic-park-the-game-NEW.vdb.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":"Symbol","crc32":2222126035,"members":[{"name":"mCrc64","type":"unsigned__int64","flags":0}]},{"type":"T3SamplerStateBlock","crc32":2722235157,"members":[{"name":"mData","type":"unsignedint","flags":0}]},{"type":"Vector2","crc32":1845259340,"members":[{"name":"x","type":"float","flags":0},{"name":"y","type":"float","flags":0}]}] \ No newline at end of file diff --git a/data/versiondb/jurassic-park-the-game-UNSUPPORTED.vdb.json b/data/versiondb/jurassic-park-the-game-UNSUPPORTED.vdb.json deleted file mode 100644 index fe85fc5..0000000 --- a/data/versiondb/jurassic-park-the-game-UNSUPPORTED.vdb.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"TaskOwner","crc32":4118068257,"members":[]},{"type":"DlgNodeParallel::PElement","crc32":1680549273,"members":[]},{"type":"DlgNodeCriteria::EnumTestT","crc32":790155486,"members":[]},{"type":"DlgNodeExchange","crc32":2270241961,"members":[]},{"type":"DlgNodeCriteria::EnumDefaultResultT","crc32":790155486,"members":[]},{"type":"UID::Owner","crc32":3717390811,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgCondition","crc32":619267492,"members":[]},{"type":"DlgLine","crc32":3959344638,"members":[]},{"type":"KeyframedValue::Sample","crc32":2278772877,"members":[]},{"type":"TRange","crc32":207664949,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgNodeJump","crc32":572228616,"members":[]},{"type":"Font::GlyphInfo","crc32":2247348633,"members":[]},{"type":"DlgObjID","crc32":3825594436,"members":[]},{"type":"D3DMesh::TriangleSet","crc32":2081769741,"members":[]},{"type":"KeyframedValue::Sample","crc32":132413475,"members":[]},{"type":"LanguageLookupMap::DlgIDSet","crc32":2953674980,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"DlgNodeIdle","crc32":3665610895,"members":[]},{"type":"T3EffectBinaryDataHlsl_D3D","crc32":2531485602,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"ChoreResource::Block","crc32":2992439463,"members":[]},{"type":"T3EffectBinaryDataCg::ParameterLocation","crc32":2738068572,"members":[]},{"type":"Animation","crc32":206780177,"members":[]},{"type":"T3EffectBinaryDataCg","crc32":3301767202,"members":[]},{"type":"LanguageDB","crc32":1582821095,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"D3DMesh::Texture","crc32":189159021,"members":[]},{"type":"LogicGroup","crc32":1961524803,"members":[]},{"type":"DlgNodeNotes","crc32":2134526444,"members":[]},{"type":"LocalizationRegistry","crc32":3013538613,"members":[]},{"type":"DlgNodeCriteria","crc32":2678565609,"members":[]},{"type":"Transform","crc32":1161344320,"members":[]},{"type":"ActorAgentMapper","crc32":1707351511,"members":[]},{"type":"Polar","crc32":246693104,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"DlgFolderChild","crc32":1680549273,"members":[]},{"type":"LanguageRes","crc32":2142211714,"members":[]},{"type":"T3RenderStateBlock","crc32":949953411,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgChoicesChildPost","crc32":1680549273,"members":[]},{"type":"AudioData","crc32":1260322854,"members":[]},{"type":"DlgNodeWait","crc32":1738487983,"members":[]},{"type":"ChoreResource","crc32":74229109,"members":[]},{"type":"DlgNodeParallel::DlgChildSetElement","crc32":4183558796,"members":[]},{"type":"ZTestFunction","crc32":4022877148,"members":[]},{"type":"DlgChoicesChildPre","crc32":1680549273,"members":[]},{"type":"Dlg","crc32":3298743500,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"KeyframedValue::Sample","crc32":3832614441,"members":[]},{"type":"DlgFolder","crc32":1350171070,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"UID::Generator","crc32":3051248175,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"DlgNodeChore","crc32":1170518059,"members":[]},{"type":"LanguageResProxy","crc32":3571218306,"members":[]},{"type":"TextAlignmentType","crc32":3309356540,"members":[]},{"type":"DlgNodeLink","crc32":953662834,"members":[]},{"type":"Chore","crc32":4177341971,"members":[]},{"type":"Skeleton::Entry","crc32":2975528115,"members":[]},{"type":"T3EffectBinary","crc32":3768542440,"members":[]},{"type":"DlgDownstreamVisibilityConditions","crc32":4082379323,"members":[]},{"type":"KeyframedValue","crc32":297571138,"members":[]},{"type":"PhonemeTable","crc32":3349763605,"members":[]},{"type":"T3EffectBinaryDataCg::SamplerState","crc32":3074118924,"members":[]},{"type":"Flags","crc32":491445159,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgObjIDOwner","crc32":2920636846,"members":[]},{"type":"DlgObjectPropsMap::GroupDefinition","crc32":1024524312,"members":[]},{"type":"InputMapper","crc32":1262583002,"members":[]},{"type":"DlgVisibilityConditions","crc32":3588417090,"members":[]},{"type":"TRange","crc32":207664949,"members":[]},{"type":"DlgNodeText","crc32":4048018891,"members":[]},{"type":"ActingPaletteClass","crc32":2758770217,"members":[]},{"type":"DlgChoice","crc32":3664376747,"members":[]},{"type":"ActingPaletteGroup","crc32":2832049118,"members":[]},{"type":"DlgSystemSettings","crc32":3969313169,"members":[]},{"type":"DlgLineCollection","crc32":1525136524,"members":[]},{"type":"KeyframedValue::Sample","crc32":132413475,"members":[]},{"type":"Procedural_LookAt::Constraint","crc32":2437348522,"members":[]},{"type":"Scene::AgentInfo","crc32":1120877395,"members":[]},{"type":"KeyframedValue::Sample","crc32":2637781173,"members":[]},{"type":"Rules","crc32":1509450118,"members":[]},{"type":"T3EffectBinaryData","crc32":2221784526,"members":[]},{"type":"KeyframedValue","crc32":53278688,"members":[]},{"type":"DlgNodeCriteria::EnumThresholdT","crc32":790155486,"members":[]},{"type":"DlgConditionInput","crc32":2023478537,"members":[]},{"type":"D3DMesh","crc32":1223194655,"members":[]},{"type":"DlgConditionalCase","crc32":1680549273,"members":[]},{"type":"KeyframedValue","crc32":1378658527,"members":[]},{"type":"LocalizeInfo","crc32":1335389649,"members":[]},{"type":"DlgNodeSequence","crc32":4223284552,"members":[]},{"type":"StyleGuide","crc32":229073418,"members":[]},{"type":"PropertySet","crc32":1244318167,"members":[]},{"type":"T3VertexComponent","crc32":1481819521,"members":[]},{"type":"KeyframedValue::Sample","crc32":132413475,"members":[]},{"type":"ActingOverridablePropOwner","crc32":1247536035,"members":[]},{"type":"DlgChildSetChoice","crc32":4183558796,"members":[]},{"type":"DlgChildSetChoicesChildPost","crc32":4183558796,"members":[]},{"type":"KeyframedValue::Sample","crc32":3376979309,"members":[]},{"type":"DlgChainHead","crc32":3487486240,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"DlgVisibilityConditionsOwner","crc32":3220609248,"members":[]},{"type":"KeyframedValue::Sample","crc32":170530164,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgChild","crc32":2811348868,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"T3IndexBuffer","crc32":3629110418,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"Skeleton","crc32":1477567099,"members":[]},{"type":"T3VertexDeclaration","crc32":2485238651,"members":[]},{"type":"KeyframedValue","crc32":2130068831,"members":[]},{"type":"T3VertexBuffer","crc32":2085920499,"members":[]},{"type":"T3Texture","crc32":552954875,"members":[]},{"type":"LanguageLookupMap","crc32":1811276022,"members":[]},{"type":"KeyframedValue","crc32":1734735409,"members":[]},{"type":"DlgNodeLogic","crc32":1241111810,"members":[]},{"type":"DlgNodeParallel","crc32":3186472962,"members":[]},{"type":"T3EffectParameters","crc32":164689904,"members":[]},{"type":"Rule","crc32":2583983409,"members":[]},{"type":"BoneContraints","crc32":2635847010,"members":[]},{"type":"KeyframedValue","crc32":2277102891,"members":[]},{"type":"CameraFacingTypes","crc32":2105390671,"members":[]},{"type":"LightType","crc32":4136548079,"members":[]},{"type":"IdleSlotDefaults","crc32":4097377196,"members":[]},{"type":"KeyframedValue","crc32":888184802,"members":[]},{"type":"DlgObjectPropsOwner","crc32":2762227517,"members":[]},{"type":"BlendMode","crc32":790155486,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"DlgNodeStart","crc32":509556765,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"InputMapper::EventMapping","crc32":879931039,"members":[]},{"type":"KeyframedValue","crc32":888184802,"members":[]},{"type":"T3EffectBinaryDataCg::Pass","crc32":2252252666,"members":[]},{"type":"DlgChildSetConditionalCase","crc32":4183558796,"members":[]},{"type":"BoundingBox","crc32":3356780285,"members":[]},{"type":"DlgNode","crc32":2296730722,"members":[]},{"type":"PhonemeTable::PhonemeEntry","crc32":2886334476,"members":[]},{"type":"KeyframedValue>","crc32":978371239,"members":[]},{"type":"Rect","crc32":3414866692,"members":[]},{"type":"DlgObjectProps","crc32":1335389649,"members":[]},{"type":"IdleTransitionSettings","crc32":625089554,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"KeyframedValue::Sample","crc32":1474554471,"members":[]},{"type":"AnimOrChore","crc32":3173546333,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"DlgNodeSequence::Element","crc32":233990688,"members":[]},{"type":"NavCam::EnumMode","crc32":790155486,"members":[]},{"type":"DlgNodeConditional","crc32":1687926726,"members":[]},{"type":"Scene","crc32":1189796209,"members":[]},{"type":"PhonemeKey","crc32":2792191566,"members":[]},{"type":"VoiceData","crc32":2665129651,"members":[]},{"type":"ChoreAgent","crc32":3067985291,"members":[]},{"type":"DlgConditionRule","crc32":1248438046,"members":[]},{"type":"DlgNodeScript","crc32":3420450939,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"ActorAgentBinding","crc32":2537407172,"members":[]},{"type":"ChoreAgent::Attachment","crc32":4168831863,"members":[]},{"type":"DlgNodeSequence::DlgChildSetElement","crc32":4183558796,"members":[]},{"type":"DlgNodeExit","crc32":3421566820,"members":[]},{"type":"Color","crc32":3181456933,"members":[]},{"type":"D3DMesh::PaletteEntry","crc32":4032760546,"members":[]},{"type":"TRect","crc32":3414866692,"members":[]},{"type":"LanguageResLocal","crc32":898578839,"members":[]},{"type":"DlgConditionTime","crc32":1743653956,"members":[]},{"type":"KeyframedValue","crc32":888184802,"members":[]},{"type":"SoundReverbPreset","crc32":1450767649,"members":[]},{"type":"AnimatedValueInterface","crc32":809410798,"members":[]},{"type":"DlgNodeExchange::Entry","crc32":4141181016,"members":[]},{"type":"AnimationValueInterfaceBase","crc32":167571457,"members":[]},{"type":"Keyframedvalue>::Sample","crc32":3626080576,"members":[]},{"type":"Font","crc32":1007893783,"members":[]},{"type":"DlgChildSetChoicesChildPre","crc32":4183558796,"members":[]},{"type":"Sphere","crc32":1068977611,"members":[]},{"type":"AnimatedValueInterface>","crc32":809410798,"members":[]},{"type":"EnumeTangentModes","crc32":790155486,"members":[]},{"type":"DlgNodeChoices","crc32":1085632428,"members":[]},{"type":"LogicGroup::LogicItem","crc32":1999535025,"members":[]},{"type":"ResourceGroups","crc32":1549834930,"members":[]}] \ No newline at end of file diff --git a/data/versiondb/law-and-order-legacies-2012.vdb.json b/data/versiondb/law-and-order-legacies-2012.vdb.json new file mode 100644 index 0000000..74202e9 --- /dev/null +++ b/data/versiondb/law-and-order-legacies-2012.vdb.json @@ -0,0 +1,175 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 2758770217, + "ActingPaletteGroup": 664705618, + "ActingPaletteGroup::EnumIdleTransition": 790155486, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 206780177, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BlendMode": 790155486, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 4177341971, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 74229109, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 1223194655, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::Texture": 189159021, + "D3DMesh::TriangleSet": 2081769741, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeCancelChoices": 903759376, + "DlgNodeChoices": 1085632428, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 2270241961, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 572228616, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeParallel": 3186472962, + "DlgNodeParallel::DlgChildSetElement": 4183558796, + "DlgNodeParallel::PElement": 1680549273, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 509556765, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "EnumeTangentModes": 790155486, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Rules": 1509450118, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3768542440, + "T3EffectBinaryData": 2221784526, + "T3EffectBinaryDataCg": 3301767202, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 2252252666, + "T3EffectBinaryDataCg::SamplerState": 3074118924, + "T3EffectBinaryDataHlsl_D3D": 2531485602, + "T3EffectParameters": 164689904, + "T3IndexBuffer": 3629110418, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 552954875, + "T3VertexBuffer": 2085920499, + "T3VertexComponent": 1481819521, + "T3VertexDeclaration": 2485238651, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/minecraft-story-mode-2015-UNSUPPORTED-TYPES.csv b/data/versiondb/minecraft-story-mode-2015-UNSUPPORTED-TYPES.csv deleted file mode 100644 index 86a4429..0000000 --- a/data/versiondb/minecraft-story-mode-2015-UNSUPPORTED-TYPES.csv +++ /dev/null @@ -1 +0,0 @@ -7574063791819912345,1772857844 diff --git a/data/versiondb/poker-night-2-2013.vdb.json b/data/versiondb/poker-night-2-2013.vdb.json index 801248d..de67586 100644 --- a/data/versiondb/poker-night-2-2013.vdb.json +++ b/data/versiondb/poker-night-2-2013.vdb.json @@ -1,12 +1,191 @@ { - "unsigned__int64": 2222126035, - "Symbol": 2222126035, - "Vector2": 1845259340, - "ToolProps": 298660267, - "T3Texture::RegionStreamHeader": 854299891, - "T3Texture::AuxiliaryData": 3190128198, - "T3Texture::StreamHeader": 113347101, - "EnumPlatformType": 790155486, - "T3SamplerStateBlock": 2722235157, - "T3Texture": 525586663 + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 2758770217, + "ActingPaletteGroup": 1512868929, + "ActingPaletteGroup::EnumIdleTransition": 790155486, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 3926361962, + "AgentMap": 1682342912, + "AgentMap::AgentMapEntry": 1909936974, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 206780177, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BlendMode": 790155486, + "BoneContraints": 4093569601, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 1913028294, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2992323262, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 2949731128, + "D3DMesh::LocalTransformEntry": 3182337113, + "D3DMesh::PaletteEntry": 1036283857, + "D3DMesh::Texture": 2464415658, + "D3DMesh::TriangleSet": 2095573974, + "D3DMesh::VertexAnimation": 2757512126, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 3244990921, + "DlgChildSetConditionalCase": 1409452376, + "DlgCondition": 619267492, + "DlgConditionalCase": 311881456, + "DlgConditionRule": 1248438046, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 3593636014, + "DlgFolderChild": 311881456, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 2726400862, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 2270241961, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 3719054325, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeParallel": 406159052, + "DlgNodeParallel::DlgChildSetElement": 1409452376, + "DlgNodeParallel::PElement": 311881456, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 3991282508, + "DlgNodeSequence::DlgChildSetElement": 1409452376, + "DlgNodeSequence::Element": 3230022612, + "DlgNodeStart": 509556765, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "EnumeTangentModes": 790155486, + "EnumPlatformType": 790155486, + "Flags": 491445159, + "Font": 379212889, + "Font::GlyphInfo": 3913526755, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue>": 1378658527, + "KeyframedValue>::Sample": 2637781173, + "KeyframedValue>": 1378658527, + "KeyframedValue>::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1476040683, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 213285513, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Rules": 1509450118, + "Scene": 1189796209, + "Scene::AgentInfo": 3964543544, + "Skeleton": 1477567099, + "Skeleton::Entry": 4072822892, + "SkeletonPoseValue": 3243035469, + "SkeletonPoseValue::BoneEntry": 167571457, + "SkeletonPoseValue::Sample": 1678832802, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 2062172117, + "Symbol": 2222126035, + "T3EffectBinary": 3768542440, + "T3EffectBinaryData": 2221784526, + "T3EffectBinaryDataCg": 553478047, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 550025326, + "T3EffectBinaryDataCg::SamplerState": 3074118924, + "T3EffectBinaryDataHlsl_D3D": 4002295803, + "T3EffectParameters": 1453522088, + "T3IndexBuffer": 468582904, + "T3RenderStateBlock": 4236012237, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 525586663, + "T3Texture::AuxiliaryData": 3190128198, + "T3Texture::RegionStreamHeader": 854299891, + "T3Texture::StreamHeader": 113347101, + "T3VertexBuffer": 2448626855, + "T3VertexComponent": 1481819521, + "T3VertexDeclaration": 2485238651, + "T3VertexSampleDataBase": 1574469491, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "ZTestFunction": 4022877148 } \ No newline at end of file diff --git a/data/versiondb/puzzle-agent-2-2011.vdb.json b/data/versiondb/puzzle-agent-2-2011.vdb.json new file mode 100644 index 0000000..d6a118f --- /dev/null +++ b/data/versiondb/puzzle-agent-2-2011.vdb.json @@ -0,0 +1,174 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 2758770217, + "ActingPaletteGroup": 2081323303, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 2544960065, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::Texture": 189159021, + "D3DMesh::TriangleSet": 3016195865, + "Dlg": 3298743500, + "DlgChainHead": 3487486240, + "DlgChild": 2811348868, + "DlgChildSetChoice": 4183558796, + "DlgChildSetChoicesChildPost": 4183558796, + "DlgChildSetChoicesChildPre": 4183558796, + "DlgChildSetConditionalCase": 4183558796, + "DlgChoice": 3664376747, + "DlgChoicesChildPost": 1680549273, + "DlgChoicesChildPre": 1680549273, + "DlgCondition": 619267492, + "DlgConditionalCase": 1680549273, + "DlgConditionInput": 2023478537, + "DlgConditionRule": 1248438046, + "DlgConditionTime": 1743653956, + "DlgDownstreamVisibilityConditions": 4082379323, + "DlgFolder": 1350171070, + "DlgFolderChild": 1680549273, + "DlgLine": 3959344638, + "DlgLineCollection": 1525136524, + "DlgNode": 2296730722, + "DlgNodeChoices": 1085632428, + "DlgNodeChore": 1170518059, + "DlgNodeConditional": 1687926726, + "DlgNodeCriteria": 2678565609, + "DlgNodeCriteria::EnumDefaultResultT": 790155486, + "DlgNodeCriteria::EnumTestT": 790155486, + "DlgNodeCriteria::EnumThresholdT": 790155486, + "DlgNodeExchange": 2270241961, + "DlgNodeExchange::Entry": 4141181016, + "DlgNodeExit": 3421566820, + "DlgNodeIdle": 3665610895, + "DlgNodeJump": 549434172, + "DlgNodeLink": 953662834, + "DlgNodeLogic": 1241111810, + "DlgNodeNotes": 2134526444, + "DlgNodeScript": 3420450939, + "DlgNodeSequence": 4223284552, + "DlgNodeSequence::DlgChildSetElement": 4183558796, + "DlgNodeSequence::Element": 233990688, + "DlgNodeStart": 3421566820, + "DlgNodeText": 4048018891, + "DlgNodeWait": 1738487983, + "DlgObjectProps": 1335389649, + "DlgObjectPropsMap::GroupDefinition": 1024524312, + "DlgObjectPropsOwner": 2762227517, + "DlgObjID": 3825594436, + "DlgObjIDOwner": 2920636846, + "DlgSystemSettings": 3969313169, + "DlgVisibilityConditions": 3588417090, + "DlgVisibilityConditionsOwner": 3220609248, + "EnumeTangentModes": 790155486, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDB": 1582821095, + "LanguageLookupMap": 1811276022, + "LanguageLookupMap::DlgIDSet": 2953674980, + "LanguageRes": 2142211714, + "LanguageResLocal": 898578839, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LocalizationRegistry": 3013538613, + "LocalizeInfo": 1335389649, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Rules": 1509450118, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3768542440, + "T3EffectBinaryData": 2221784526, + "T3EffectBinaryDataCg": 2973441454, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::SamplerState": 3074118924, + "T3EffectBinaryDataHlsl_D3D": 3856109219, + "T3IndexBuffer": 3629110418, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 552954875, + "T3VertexBuffer": 2887886974, + "T3VertexComponent": 1481819521, + "T3VertexDeclaration": 2485238651, + "TaskOwner": 4118068257, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/tales-of-monkey-island-1-pc-2010.vdb.json b/data/versiondb/tales-of-monkey-island-1-pc-2010.vdb.json new file mode 100644 index 0000000..bc1ff2b --- /dev/null +++ b/data/versiondb/tales-of-monkey-island-1-pc-2010.vdb.json @@ -0,0 +1,131 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 246753866, + "DateStamp": 1076445269, + "DialogBase": 3952645862, + "DialogBranch": 4294654313, + "DialogDialog": 1650362456, + "DialogExchange": 951635703, + "DialogExchange::ExchangeElem": 4141181016, + "DialogItem": 2671691320, + "DialogItem::EnumPlaybackMode": 790155486, + "DialogLine": 1491241156, + "DialogResource": 4068661601, + "DialogText": 729894956, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDatabase": 3883134207, + "LanguageResource": 265370348, + "LanguageResourceProxy": 3776132019, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "Note": 1462141437, + "Note::Entry": 3491402720, + "NoteCollection": 3880798863, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "VoiceData": 2665129651, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/tales-of-monkey-island-2-pc-2010.vdb.json b/data/versiondb/tales-of-monkey-island-2-pc-2010.vdb.json new file mode 100644 index 0000000..1f5bdbe --- /dev/null +++ b/data/versiondb/tales-of-monkey-island-2-pc-2010.vdb.json @@ -0,0 +1,127 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "DateStamp": 1076445269, + "DialogBase": 3952645862, + "DialogBranch": 4294654313, + "DialogDialog": 1650362456, + "DialogExchange": 951635703, + "DialogExchange::ExchangeElem": 4141181016, + "DialogItem": 2671691320, + "DialogItem::EnumPlaybackMode": 790155486, + "DialogLine": 1491241156, + "DialogResource": 4068661601, + "DialogText": 729894956, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDatabase": 3883134207, + "LanguageResource": 265370348, + "LanguageResourceProxy": 3776132019, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "Note": 1462141437, + "Note::Entry": 3491402720, + "NoteCollection": 3880798863, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/tales-of-monkey-island-3-pc-2010.vdb.json b/data/versiondb/tales-of-monkey-island-3-pc-2010.vdb.json new file mode 100644 index 0000000..4eb7205 --- /dev/null +++ b/data/versiondb/tales-of-monkey-island-3-pc-2010.vdb.json @@ -0,0 +1,127 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "DateStamp": 1076445269, + "DialogBase": 3952645862, + "DialogBranch": 4294654313, + "DialogDialog": 1650362456, + "DialogExchange": 951635703, + "DialogExchange::ExchangeElem": 4141181016, + "DialogItem": 2671691320, + "DialogItem::EnumPlaybackMode": 790155486, + "DialogLine": 1491241156, + "DialogResource": 4068661601, + "DialogText": 729894956, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDatabase": 3883134207, + "LanguageResource": 265370348, + "LanguageResourceProxy": 3776132019, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "Note": 1462141437, + "Note::Entry": 3491402720, + "NoteCollection": 3880798863, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/tales-of-monkey-island-4-pc-2010.vdb.json b/data/versiondb/tales-of-monkey-island-4-pc-2010.vdb.json new file mode 100644 index 0000000..dfb5a6f --- /dev/null +++ b/data/versiondb/tales-of-monkey-island-4-pc-2010.vdb.json @@ -0,0 +1,130 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "DateStamp": 1076445269, + "DialogBase": 3952645862, + "DialogBranch": 4294654313, + "DialogDialog": 1650362456, + "DialogExchange": 951635703, + "DialogExchange::ExchangeElem": 4141181016, + "DialogItem": 2671691320, + "DialogItem::EnumPlaybackMode": 790155486, + "DialogLine": 1491241156, + "DialogResource": 4068661601, + "DialogText": 729894956, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDatabase": 3883134207, + "LanguageResource": 265370348, + "LanguageResourceProxy": 3776132019, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "Note": 1462141437, + "Note::Entry": 3491402720, + "NoteCollection": 3880798863, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/tales-of-monkey-island-5-pc-2010.vdb.json b/data/versiondb/tales-of-monkey-island-5-pc-2010.vdb.json new file mode 100644 index 0000000..dfb5a6f --- /dev/null +++ b/data/versiondb/tales-of-monkey-island-5-pc-2010.vdb.json @@ -0,0 +1,130 @@ +{ + "ActingOverridablePropOwner": 1247536035, + "ActingPaletteClass": 3888173555, + "ActingPaletteGroup": 400284731, + "ActorAgentBinding": 2537407172, + "ActorAgentMapper": 1707351511, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface>": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "AnimatedValueInterface": 809410798, + "Animation": 3070283042, + "AnimationValueInterfaceBase": 167571457, + "AnimOrChore": 3173546333, + "AudioData": 1260322854, + "BoneContraints": 2635847010, + "BoundingBox": 3356780285, + "CameraFacingTypes": 2105390671, + "Chore": 2369125329, + "ChoreAgent": 3067985291, + "ChoreAgent::Attachment": 4168831863, + "ChoreResource": 2882625115, + "ChoreResource::Block": 2992439463, + "Color": 3181456933, + "D3DMesh": 852356450, + "D3DMesh::PaletteEntry": 4032760546, + "D3DMesh::TriangleSet": 3016195865, + "DateStamp": 1076445269, + "DialogBase": 3952645862, + "DialogBranch": 4294654313, + "DialogDialog": 1650362456, + "DialogExchange": 951635703, + "DialogExchange::ExchangeElem": 4141181016, + "DialogItem": 2671691320, + "DialogItem::EnumPlaybackMode": 790155486, + "DialogLine": 1491241156, + "DialogResource": 4068661601, + "DialogText": 729894956, + "Flags": 491445159, + "Font": 1007893783, + "Font::GlyphInfo": 2247348633, + "IdleSlotDefaults": 4097377196, + "IdleTransitionSettings": 625089554, + "InputMapper": 1262583002, + "InputMapper::EventMapping": 879931039, + "KeyframedValue": 53278688, + "KeyframedValue::Sample": 3376979309, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2277102891, + "KeyframedValue::Sample": 3832614441, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue>": 978371239, + "KeyframedValue>::Sample": 3626080576, + "KeyframedValue": 888184802, + "KeyframedValue::Sample": 132413475, + "KeyframedValue": 2130068831, + "KeyframedValue::Sample": 2278772877, + "KeyframedValue": 1378658527, + "KeyframedValue::Sample": 2637781173, + "KeyframedValue": 297571138, + "KeyframedValue::Sample": 170530164, + "KeyframedValue": 1734735409, + "KeyframedValue::Sample": 1474554471, + "LanguageDatabase": 3883134207, + "LanguageResource": 265370348, + "LanguageResourceProxy": 3776132019, + "LanguageResProxy": 3571218306, + "LightType": 4136548079, + "LogicGroup": 1961524803, + "LogicGroup::LogicItem": 1999535025, + "NavCam::EnumMode": 790155486, + "Note": 1462141437, + "Note::Entry": 3491402720, + "NoteCollection": 3880798863, + "PhonemeKey": 2792191566, + "PhonemeTable": 3349763605, + "PhonemeTable::PhonemeEntry": 2886334476, + "Polar": 246693104, + "Procedural_LookAt::Constraint": 2437348522, + "PropertySet": 1244318167, + "Rect": 3414866692, + "ResourceGroups": 1549834930, + "Rule": 2583983409, + "Scene": 1189796209, + "Scene::AgentInfo": 1120877395, + "Skeleton": 1477567099, + "Skeleton::Entry": 2975528115, + "SoundReverbPreset": 1450767649, + "Sphere": 1068977611, + "StyleGuide": 229073418, + "Symbol": 2222126035, + "T3EffectBinary": 3738733756, + "T3EffectBinaryData": 1269525704, + "T3EffectBinaryDataCg": 138448664, + "T3EffectBinaryDataCg::ParameterLocation": 2738068572, + "T3EffectBinaryDataCg::Pass": 3175451858, + "T3EffectBinaryDataCg::Technique": 3740734772, + "T3EffectBinaryDataHlsl_D3D": 1563383918, + "T3IndexBuffer": 336093341, + "T3RenderStateBlock": 949953411, + "T3SamplerStateBlock": 2722235157, + "T3Texture": 2671165217, + "T3VertexBuffer": 2267347732, + "T3VertexDeclaration": 2485238651, + "TextAlignmentType": 3309356540, + "TRange": 207664949, + "Transform": 1161344320, + "TRect": 3414866692, + "UID::Generator": 3051248175, + "UID::Owner": 3717390811, + "Vector2": 1845259340, + "WalkBoxes": 990917534, + "WalkBoxes::Edge": 4079736747, + "WalkBoxes::Tri": 2847941802, + "WalkBoxes::Vert": 1441281540, + "ZTestFunction": 4022877148 +} \ No newline at end of file diff --git a/data/versiondb/the-walking-dead-UNSUPPORTED-TYPES.csv b/data/versiondb/the-walking-dead-UNSUPPORTED-TYPES.csv deleted file mode 100644 index 91bb5fe..0000000 --- a/data/versiondb/the-walking-dead-UNSUPPORTED-TYPES.csv +++ /dev/null @@ -1,2 +0,0 @@ -12244245282157275807,790155486 -8765348003706977551,790155486 diff --git a/src/TelltaleToolKit/Encryption/LegacyEncryption.cs b/src/TelltaleToolKit/Encryption/LegacyEncryption.cs index dfa5a74..9c14b8e 100644 --- a/src/TelltaleToolKit/Encryption/LegacyEncryption.cs +++ b/src/TelltaleToolKit/Encryption/LegacyEncryption.cs @@ -36,6 +36,7 @@ public static void Decrypt(Stream stream, Blowfish blowfish) MetaStreamMagic magic = ReadMagic(stream); (int BlockSize, int CryptInterval, int CleanInterval) config = GetBlockConfig(magic); + stream.Seek(0, SeekOrigin.Begin); if (config.BlockSize == 0) { return; // not an encrypted magic @@ -45,6 +46,7 @@ public static void Decrypt(Stream stream, Blowfish blowfish) // Patch magic to the readable plaintext equivalent WriteMagic(stream, GetPlaintextMagic(magic)); + stream.Seek(0, SeekOrigin.Begin); } // ------------------------------------------------------------------------- diff --git a/src/TelltaleToolKit/Games/GameProfile.cs b/src/TelltaleToolKit/Games/GameProfile.cs index c210e35..518afa8 100644 --- a/src/TelltaleToolKit/Games/GameProfile.cs +++ b/src/TelltaleToolKit/Games/GameProfile.cs @@ -2,6 +2,7 @@ using TelltaleToolKit.IO.Archives; using TelltaleToolKit.Lua; using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.Games; diff --git a/src/TelltaleToolKit/IO/Archives/Formats/TTArchive.cs b/src/TelltaleToolKit/IO/Archives/Formats/TTArchive.cs index b9fcf91..deee072 100644 --- a/src/TelltaleToolKit/IO/Archives/Formats/TTArchive.cs +++ b/src/TelltaleToolKit/IO/Archives/Formats/TTArchive.cs @@ -1,5 +1,9 @@ +using System; +using System.Collections.Generic; +using System.IO; using System.IO.Compression; using System.IO.Hashing; +using System.Linq; using System.Text; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; using TelltaleToolKit.Encryption; diff --git a/src/TelltaleToolKit/IO/Compression.cs b/src/TelltaleToolKit/IO/Compression.cs index 581446c..f7b1f7a 100644 --- a/src/TelltaleToolKit/IO/Compression.cs +++ b/src/TelltaleToolKit/IO/Compression.cs @@ -110,7 +110,7 @@ public static Mode DetectMode(ReadOnlySpan data) // Zlib header: first byte = 0x78, second byte's high nibble = 0xC // Common values: 0x78 0x9C, 0x78 0xDA, 0x78 0x01, 0x78 0x5E - if ((data[0] * 256 + data[1]) % 31 == 0) + if (data[0] is 0x78 && data[1] is 0x9C or 0xDA or 0x01 or 0x5E) return Mode.Zlib; // Default: raw DEFLATE has no fixed header diff --git a/src/TelltaleToolKit/IO/Streams/ContainerStream.cs b/src/TelltaleToolKit/IO/Streams/ContainerStream.cs index 522eb43..cb2dd17 100644 --- a/src/TelltaleToolKit/IO/Streams/ContainerStream.cs +++ b/src/TelltaleToolKit/IO/Streams/ContainerStream.cs @@ -52,11 +52,10 @@ public sealed class ContainerStream : Stream /// /// Raw file stream, positioned at byte 0. Not disposed by this class. /// Blowfish key for this game's archives. - public ContainerStream(Stream source, string blowfishKey, IChunkCache? cache = null) + public ContainerStream(Stream source, string? blowfishKey = null, IChunkCache? cache = null) { _source = source ?? throw new ArgumentNullException(nameof(source)); - _blowfishKey = blowfishKey ?? throw new ArgumentNullException(nameof(blowfishKey)); - _cache = cache ?? new SinglePageCache(); + _cache = cache ?? new LruChunkCache(); using BinaryReader reader = new(source, Encoding.UTF8, true); @@ -74,10 +73,18 @@ public ContainerStream(Stream source, string blowfishKey, IChunkCache? cache = n _ => Compression.Mode.Deflate }; + bool isEncrypted = ContainerMagic is ContainerMagic.TTCE or ContainerMagic.TTCe; + + if (isEncrypted && blowfishKey is null) + { + throw new ArgumentNullException(nameof(blowfishKey), + "Blowfish key is required for encrypted containers."); + } + Params = new ContainerStreamParams { - Encrypt = ContainerMagic is ContainerMagic.TTCE or ContainerMagic.TTCe, - BlowfishKey = blowfishKey, + Encrypt = isEncrypted, + BlowfishKey = blowfishKey!, Algorithm = algorithm }; diff --git a/src/TelltaleToolKit/Meta/Reflection/MetaClassType.cs b/src/TelltaleToolKit/Meta/Reflection/MetaClassType.cs index d9aa0df..8770076 100644 --- a/src/TelltaleToolKit/Meta/Reflection/MetaClassType.cs +++ b/src/TelltaleToolKit/Meta/Reflection/MetaClassType.cs @@ -16,12 +16,14 @@ public class MetaClassType /// The full type name. /// The .NET type it links to. /// Optional metadata flags for this type. - public MetaClassType(string name, Type linkingType, MetaFlags flags = MetaFlags.None) + /// Optional argument size if the type allows it. + public MetaClassType(string name, Type linkingType, MetaFlags flags = MetaFlags.None, int argNum = 0) { FullTypeName = name; Symbol = Symbol.FromName(GetStrippedTypeName(name)); LinkingType = linkingType; Flags = flags; + ArgNum = argNum; } /// /// @@ -51,6 +53,13 @@ public MetaClassType(string name, Type linkingType, MetaFlags flags = MetaFlags. /// public MetaFlags Flags { get; } + /// + /// Gets the argument size of this type. + /// Used only for types which have a number in them such as SArray or BitSetBases. + /// + /// true if serialization is enabled; otherwise, false. + public int ArgNum { get; } + /// /// Determines whether this type is serialized in a blocked format. /// Blocked serialization is disabled if is present in . diff --git a/src/TelltaleToolKit/Meta/Reflection/MetaClassTypeRegistry.cs b/src/TelltaleToolKit/Meta/Reflection/MetaClassTypeRegistry.cs index 86fe7a4..a48b56f 100644 --- a/src/TelltaleToolKit/Meta/Reflection/MetaClassTypeRegistry.cs +++ b/src/TelltaleToolKit/Meta/Reflection/MetaClassTypeRegistry.cs @@ -14,10 +14,13 @@ using TelltaleToolKit.T3Types.Dialogs.DlgSettings; using TelltaleToolKit.T3Types.Dialogs.Dlog; using TelltaleToolKit.T3Types.Effects; +using TelltaleToolKit.T3Types.Enlighten; +using TelltaleToolKit.T3Types.Events; using TelltaleToolKit.T3Types.Fonts; using TelltaleToolKit.T3Types.InputMaps; using TelltaleToolKit.T3Types.Languages.Landb; using TelltaleToolKit.T3Types.Languages.Langdb; +using TelltaleToolKit.T3Types.Languages.Lanreg; using TelltaleToolKit.T3Types.Languages.Llm; using TelltaleToolKit.T3Types.Languages.Locreg; using TelltaleToolKit.T3Types.LightMaps; @@ -25,8 +28,10 @@ using TelltaleToolKit.T3Types.Meshes; using TelltaleToolKit.T3Types.Meshes.T3Types; using TelltaleToolKit.T3Types.Miscellaneous; +using TelltaleToolKit.T3Types.Miscellaneous.PreloadPackage; using TelltaleToolKit.T3Types.NavCam; using TelltaleToolKit.T3Types.Overlays; +using TelltaleToolKit.T3Types.Particles; using TelltaleToolKit.T3Types.Properties; using TelltaleToolKit.T3Types.Rules; using TelltaleToolKit.T3Types.Scenes; @@ -44,8 +49,8 @@ namespace TelltaleToolKit.Meta.Reflection; public static class MetaClassTypeRegistry { // Lookup by type, name, or CRC hash - private static readonly Dictionary ByName = new(StringComparer.Ordinal); - private static readonly Dictionary ByHash = new(); + private static readonly Dictionary s_byName = new(StringComparer.Ordinal); + private static readonly Dictionary s_byHash = new(); /// /// All encountered types in Telltale Tool in their original nameof form. @@ -55,7 +60,7 @@ static MetaClassTypeRegistry() { // @formatter:off // Types which are linked to int are NOT supported. - Register("ActingAccentPalette::EnumOverrun",typeof(NotImplementedException)); // Telltale...you have outdone yourself. EnumDescriptionMemories. For some reason this type's owner is also ActingAccentPalette. No idea why. + Register("ActingAccentPalette::EnumOverrun",typeof(ActingAccentPalette.EnumOverrun)); // Telltale...you have outdone yourself. EnumDescriptionMemories. For some reason this type's owner is also ActingAccentPalette. No idea why. Register("ActingCommandSequence",typeof(NotImplementedException)); Register("ActingCommandSequence::Context",typeof(NotImplementedException)); Register("ActingPalette::EnumEndOffsetRelativeTo",typeof(NotImplementedException)); @@ -84,6 +89,9 @@ static MetaClassTypeRegistry() Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer>", typeof(NotImplementedException)); + Register("AnimationMixer>", typeof(NotImplementedException)); + Register("AnimationMixer,0>", typeof(NotImplementedException)); + Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer>", typeof(NotImplementedException)); @@ -125,6 +133,8 @@ static MetaClassTypeRegistry() Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer", typeof(NotImplementedException)); Register("AnimationMixer", typeof(NotImplementedException)); + Register("AnimationMixer>", typeof(NotImplementedException)); + Register("AnimationMixer>", typeof(NotImplementedException)); Register("AnimationMixer", typeof(NotImplementedException)); Register("AnimationMixer", typeof(NotImplementedException)); Register("AnimationMixer", typeof(NotImplementedException)); @@ -150,8 +160,8 @@ static MetaClassTypeRegistry() Register("DCArray", typeof(List)); Register("DCArray", typeof(List)); Register("DCArray", typeof(List)); - Register("VertexAnimation", typeof(D3DMesh.VertexAnimation)); - Register("class SArray", typeof(int[])); + Register("D3DMesh::VertexAnimation", typeof(D3DMesh.VertexAnimation)); + Register("class SArray", typeof(int[]), MetaFlags.None, 11); Register("DCArray>", typeof(List>)); Register("DCArray>", typeof(List>)); Register("DCArray>", typeof(List>)); @@ -177,7 +187,7 @@ static MetaClassTypeRegistry() Register("Handle", typeof(NotImplementedException)); Register("Handle", typeof(NotImplementedException)); Register("IntrusiveSet>", typeof(NotImplementedException)); - Register("KeyframedValue::Sample",typeof(NotImplementedException)); + Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); @@ -185,9 +195,9 @@ static MetaClassTypeRegistry() Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); - Register("KeyframedValue>::Sample",typeof(NotImplementedException)); - Register("KeyframedValue>::Sample",typeof(NotImplementedException)); - Register("KeyframedValue>::Sample",typeof(NotImplementedException)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); @@ -197,22 +207,23 @@ static MetaClassTypeRegistry() Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); - Register("KeyframedValue>::Sample",typeof(KeyframedValue.Sample)); - Register("KeyframedValue>::Sample",typeof(KeyframedValue.Sample)); - Register("KeyframedValue>::Sample",typeof(KeyframedValue.Sample)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue.Sample)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue.Sample)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue.Sample)); Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); - Register("KeyframedValue>::Sample",typeof(NotImplementedException)); - Register("KeyframedValue>::Sample",typeof(NotImplementedException)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); + Register("KeyframedValue>::Sample",typeof(KeyframedValue>.Sample)); Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); Register("KeyframedValue::Sample",typeof(KeyframedValue.Sample)); - Register("LanguageLookupMap::DlgIDSet", typeof(NotImplementedException)); - Register("LanguageRegister",typeof(NotImplementedException)); - Register("Map>", typeof(NotImplementedException)); + Register("LanguageLookupMap::DlgIDSet", typeof(LanguageLookupMap.DlgIdSet)); + Register("LanguageRegister",typeof(LanguageRegister)); + Register("Map>", typeof(Dictionary)); Register("Map>", typeof(Dictionary)); Register("D3DMesh::AnimatedVertexGroupEntry", typeof(D3DMesh.AnimatedVertexGroupEntry)); - Register("Map,less>", typeof(NotImplementedException)); - Register("Map,less>", typeof(NotImplementedException)); - Register("Map>", typeof(NotImplementedException)); + Register("Map,less>", typeof(Dictionary>)); + Register("Map,less>", typeof(Dictionary>)); + Register("Map>", typeof(Dictionary)); + Register("class Map,less>", typeof(Dictionary)); Register("MergeInGuideInfo",typeof(NotImplementedException)); Register("MergeInMoodInfo",typeof(NotImplementedException)); Register("Note",typeof(Note)); @@ -226,12 +237,14 @@ static MetaClassTypeRegistry() Register("RenderObject_HLSMovie", typeof(NotImplementedException)); Register("RenderObject_Mesh::MeshInstance", typeof(RenderObject_Mesh.MeshInstance)); Register("RenderObject_Viewport", typeof(NotImplementedException)); - Register("SArray,14>", typeof(List[])); - Register("SArray,14>", typeof(List[])); - Register("SArray", typeof(T3VertexComponent[])); - Register("SArray", typeof(T3VertexComponent[])); - Register("SArray", typeof(int[])); - Register("SArray", typeof(uint[])); + Register("SArray,14>", typeof(List[]), MetaFlags.None, 14); + Register("SArray,14>", typeof(List[]), MetaFlags.None, 14); + Register("SArray", typeof(T3VertexComponent[]), MetaFlags.None, 12); + Register("SArray", typeof(T3VertexComponent[]), MetaFlags.None, 13); + Register("SArray", typeof(T3VertexComponent[]), MetaFlags.None, 14); + Register("SArray", typeof(int[]), MetaFlags.None, 14); + Register("SArray", typeof(uint[]), MetaFlags.None, 2); + Register("SArray", typeof(ushort[]), MetaFlags.None, 3); Register("ScriptEnum:AIAgentState", typeof(ScriptEnum)); Register("ScriptEnum:AIDummyPos", typeof(ScriptEnum)); Register("ScriptEnum:AIPatrolType", typeof(ScriptEnum)); @@ -303,10 +316,10 @@ static MetaClassTypeRegistry() Register("ScriptEnum:WhatTellThanosTrainingRoomGamora", typeof(ScriptEnum)); Register("ScriptEnum:WhatTellThanosTrainingRoomNebula", typeof(ScriptEnum)); Register("ScriptEnum:WormName", typeof(ScriptEnum)); - Register("Set>", typeof(NotImplementedException)); + Register("Set>", typeof(HashSet)); Register("SingleContributionValue",typeof(NotImplementedException)); Register("SkeletonPoseCompoundValue",typeof(NotImplementedException)); - Register("SoundAmbience::EventContext", typeof(NotImplementedException)); + Register("SoundAmbience::EventContext", typeof(EventContext)); Register("Style::StyleIdleManager::FadeData", typeof(NotImplementedException)); Register("T3EffectBinary", typeof(NotImplementedException)); Register("class T3EffectParameters", typeof(NotImplementedException)); @@ -330,14 +343,14 @@ static MetaClassTypeRegistry() Register("T3OverlayTextParams", typeof(T3OverlayTextParams)); Register("T3VertexComponent", typeof(T3VertexComponent)); Register("T3VertexDeclaration", typeof(NotImplementedException)); - Register("T3VertexSampleDataBase",typeof(NotImplementedException)); - Register("TRange", typeof(NotImplementedException)); - Register("class TRange", typeof(Range)); + Register("T3VertexSampleDataBase",typeof(T3VertexSampleDatabase)); + Register("TRange", typeof(Range), MetaFlags.MetaSerializeBlockingDisabled); + Register("class TRange", typeof(Range), MetaFlags.MetaSerializeBlockingDisabled); Register("TextBuffer::Line", typeof(NotImplementedException)); Register("__int64", typeof(long),MetaFlags.MetaSerializeBlockingDisabled); Register("bool", typeof(bool), MetaFlags.MetaSerializeBlockingDisabled); Register("char", typeof(sbyte),MetaFlags.MetaSerializeBlockingDisabled); - Register("class ActingAccentPalette", typeof(NotImplementedException)); + Register("class ActingAccentPalette", typeof(ActingAccentPalette)); Register("class ActingOverridablePropOwner", typeof(ActingOverridablePropOwner)); Register("class ActingPalette", typeof(ActingPalette)); Register("class ActingPaletteClass", typeof(ActingPaletteClass)); @@ -350,46 +363,46 @@ static MetaClassTypeRegistry() Register("class AgentMap::AgentMapEntry", typeof(AgentMap.AgentMapEntry)); Register("class AgentState", typeof(AgentState)); Register("class AnimOrChore", typeof(AnimOrChore)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface >", typeof(AnimatedValueInterface>)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); - Register("class AnimatedValueInterface", typeof(AnimatedValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface >", typeof(AnimationValueInterface>)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); + Register("class AnimatedValueInterface", typeof(AnimationValueInterface)); Register("class Animation", typeof(Animation)); Register("class AnimationConstraintParameters", typeof(AnimationConstraintParameters)); Register("class AnimationManager", typeof(AnimationManager)); @@ -402,16 +415,16 @@ static MetaClassTypeRegistry() Register("class BallJointKey", typeof(BallJointKey)); Register("class BallTwistJointKey", typeof(BallTwistJointKey)); Register("class BinaryBuffer", typeof(BinaryBuffer)); - Register("class BitSetBase<1>", typeof(BitSetBase)); - Register("class BitSetBase<2>", typeof(BitSetBase)); - Register("class BitSetBase<3>", typeof(BitSetBase)); - Register("class BitSetBase<4>", typeof(BitSetBase)); - Register("class BitSetBase<5>", typeof(BitSetBase)); - Register("class BitSetBase<6>", typeof(BitSetBase)); - Register("class BitSetBase<7>", typeof(BitSetBase)); - Register("class BitSetBase<8>", typeof(BitSetBase)); - Register("class BitSetBase<9>", typeof(BitSetBase)); - Register("class BlendCameraResource", typeof(BlendCameraResource)); + Register("class BitSetBase<1>", typeof(BitSetBase), MetaFlags.None, 1); + Register("class BitSetBase<2>", typeof(BitSetBase), MetaFlags.None, 2); + Register("class BitSetBase<3>", typeof(BitSetBase), MetaFlags.None, 3); + Register("class BitSetBase<4>", typeof(BitSetBase), MetaFlags.None, 4); + Register("class BitSetBase<5>", typeof(BitSetBase), MetaFlags.None, 5); + Register("class BitSetBase<6>", typeof(BitSetBase), MetaFlags.None, 6); + Register("class BitSetBase<7>", typeof(BitSetBase), MetaFlags.None, 7); + Register("class BitSetBase<8>", typeof(BitSetBase), MetaFlags.None, 8); + Register("class BitSetBase<9>", typeof(BitSetBase), MetaFlags.None, 9); + Register("class BlendCameraResource", typeof(BlendCameraResource), MetaFlags.Memberless); Register("class BlendEntry", typeof(BlendEntry)); Register("class BlendGraph", typeof(BlendGraph)); Register("class BlendGraphManager", typeof(BlendGraphManager)); @@ -436,7 +449,7 @@ static MetaClassTypeRegistry() Register("class CinematicLightRig", typeof(CinematicLightRig)); Register("class Color", typeof(Color), MetaFlags.MetaSerializeBlockingDisabled); Register("class ColorHDR", typeof(ColorHDR)); - Register("class CompressedKeys", typeof(CompressedKeys)); + Register("class CompressedKeys", typeof(CompressedKeys)); // what the helly Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys >", typeof(CompressedKeys>)); @@ -453,17 +466,17 @@ static MetaClassTypeRegistry() Register("class CompressedKeys >", typeof(CompressedKeys>)); Register("class CompressedKeys >", typeof(CompressedKeys>)); Register("class CompressedKeys >", typeof(CompressedKeys>)); - Register("class CompressedKeys >", typeof(CompressedKeys>)); + Register("class CompressedKeys >", typeof(CompressedKeys>)); Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys", typeof(CompressedKeys)); - Register("class CompressedKeys >", typeof(CompressedKeys)); - Register("class CompressedKeys >", typeof(CompressedKeys)); - Register("class CompressedKeys >", typeof(CompressedKeys)); - Register("class CompressedKeys", typeof(CompressedKeys)); + Register("class CompressedKeys >", typeof(CompressedKeys)); + Register("class CompressedKeys >", typeof(CompressedKeys)); + Register("class CompressedKeys >", typeof(CompressedKeys)); + Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys", typeof(CompressedKeys)); - Register("class CompressedKeys >", typeof(CompressedKeys>)); - Register("class CompressedKeys >", typeof(CompressedKeys>)); + Register("class CompressedKeys >", typeof(CompressedKeys>)); + Register("class CompressedKeys >", typeof(CompressedKeys>)); Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedKeys", typeof(CompressedKeys)); @@ -477,6 +490,7 @@ static MetaClassTypeRegistry() Register("class CompressedKeys", typeof(CompressedKeys)); Register("class CompressedPathBlockingValue", typeof(CompressedPathBlockingValue)); Register("class CompressedPhonemeKeys", typeof(CompressedPhonemeKeys)); + Register("class CompressedTimeKeys", typeof(CompressedTimeKeys)); Register("class CompressedQuaternionKeys", typeof(CompressedQuaternionKeys)); Register("class CompressedQuaternionKeys2", typeof(CompressedQuaternionKeys2)); Register("class CompressedSkeletonPoseKeys", typeof(CompressedSkeletonPoseKeys)); @@ -503,6 +517,7 @@ static MetaClassTypeRegistry() Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); + Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); @@ -519,6 +534,7 @@ static MetaClassTypeRegistry() Register("class DCArray >", typeof(List>)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); + Register("class Guide", typeof(Guide)); Register("class DCArray >", typeof(List>)); Register("class DCArray >", typeof(List>)); Register("class DCArray >", typeof(List>)); @@ -549,18 +565,18 @@ static MetaClassTypeRegistry() Register("class DCArray >::Sample>", typeof(List>.Sample>)); Register("class DCArray >::Sample>", typeof(List>.Sample>)); Register("class DCArray >::Sample>", typeof(List>.Sample>)); - Register("class DCArray >::Sample>", typeof(List>.Sample>)); + Register("class DCArray >::Sample>", typeof(List>.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); Register("class DCArray>", typeof(List>)); Register("class DCArray::Sample>", typeof(List.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); - Register("class DCArray >::Sample>", typeof(List.Sample>)); - Register("class DCArray >::Sample>", typeof(List.Sample>)); - Register("class DCArray >::Sample>", typeof(List.Sample>)); + Register("class DCArray >::Sample>", typeof(List.Sample>)); + Register("class DCArray >::Sample>", typeof(List.Sample>)); + Register("class DCArray >::Sample>", typeof(List.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); - Register("class DCArray >::Sample>", typeof(List>.Sample>)); - Register("class DCArray >::Sample>", typeof(List>.Sample>)); + Register("class DCArray >::Sample>", typeof(List>.Sample>)); + Register("class DCArray >::Sample>", typeof(List>.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); Register("class DCArray::Sample>", typeof(List.Sample>)); @@ -575,16 +591,18 @@ static MetaClassTypeRegistry() Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); - Register("class DCArray > >", typeof(List>)); + Register("class DCArray > >", typeof(List>)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray >", typeof(List)); + Register("class DCArray >", typeof(List)); Register("class DCArray >", typeof(List)); Register("class DCArray >", typeof(List)); Register("class DCArray >", typeof(List)); Register("class DCArray >", typeof(List)); Register("class DCArray >", typeof(List)); + Register("class DCArray >", typeof(List)); Register("class DCArray>", typeof(NotImplementedException)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); @@ -616,17 +634,17 @@ static MetaClassTypeRegistry() Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); - Register("class DCArray", typeof(List)); - Register("class DCArray", typeof(List)); - Register("class DCArray", typeof(List)); - Register("class DCArray", typeof(List)); + Register("class DCArray", typeof(List)); + Register("class DCArray", typeof(List)); + Register("class DCArray", typeof(List)); + Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); - Register("class DCArray", typeof(List)); + Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); Register("class DCArray", typeof(List)); @@ -779,8 +797,8 @@ static MetaClassTypeRegistry() Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); - Register("class Handle", typeof(Handle)); - Register("class Handle", typeof(Handle)); + Register("class Handle", typeof(Handle)); + Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); @@ -804,7 +822,7 @@ static MetaClassTypeRegistry() Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); Register("class Handle", typeof(Handle)); - Register("class Handle", typeof(Handle)); + Register("class Handle", typeof(Handle)); Register("class HandleBase", typeof(HandleBase)); Register("class HandleLock", typeof(Handle)); Register("class HandleLock", typeof(Handle)); @@ -818,12 +836,14 @@ static MetaClassTypeRegistry() Register("class IdleSlotDefaults", typeof(IdleSlotDefaults)); Register("class IdleTransitionSettings", typeof(IdleTransitionSettings)); Register("class InputMapper", typeof(InputMapper)); + Register("class PlatformInputMapper", typeof(PlatformInputMapper)); + Register("class PlatformInputMapper::EventMapping", typeof(PlatformInputMapper.EventMapping)); Register("class InputMapper::EventMapping", typeof(InputMapper.EventMapping)); Register("class InputMapper::RawEvent", typeof(InputMapper.RawEvent)); Register("class IntrusiveSet", typeof(NotImplementedException)); Register("class InverseKinematics", typeof(InverseKinematics)); Register("class InverseKinematicsAttach", typeof(InverseKinematicsAttach)); - Register("class InverseKinematicsBase", typeof(InverseKinematicsBase)); + Register("class InverseKinematicsBase", typeof(InverseKinematicsBase), MetaFlags.MetaSerializeDisable); Register("class InverseKinematicsDerived", typeof(InverseKinematicsDerived)); Register("class JiraRecordManager", typeof(JiraRecordManager)); Register("class KeyframedValue", typeof(KeyframedValue)); @@ -847,20 +867,20 @@ static MetaClassTypeRegistry() Register("class KeyframedValue >", typeof(KeyframedValue>)); Register("class KeyframedValue >", typeof(KeyframedValue>)); Register("class KeyframedValue >", typeof(KeyframedValue>)); - Register("class KeyframedValue >", typeof(KeyframedValue>)); + Register("class KeyframedValue >", typeof(KeyframedValue>)); Register("class KeyframedValue", typeof(KeyframedValue)); Register("class KeyframedValue::Sample", typeof(KeyframedValue.Sample)); Register("class KeyframedValue", typeof(KeyframedValue)); Register("class KeyframedValue", typeof(KeyframedValue)); Register("class KeyframedValue::Sample", typeof(KeyframedValue.Sample)); - Register("class KeyframedValue >", typeof(KeyframedValue)); - Register("class KeyframedValue >", typeof(KeyframedValue)); - Register("class KeyframedValue >", typeof(KeyframedValue)); + Register("class KeyframedValue >", typeof(KeyframedValue)); + Register("class KeyframedValue >", typeof(KeyframedValue)); + Register("class KeyframedValue >", typeof(KeyframedValue)); Register("class KeyframedValue", typeof(KeyframedValue)); Register("class KeyframedValue::Sample", typeof(KeyframedValue.Sample)); Register("class KeyframedValue", typeof(KeyframedValue)); - Register("class KeyframedValue >", typeof(KeyframedValue>)); - Register("class KeyframedValue >", typeof(KeyframedValue>)); + Register("class KeyframedValue >", typeof(KeyframedValue>)); + Register("class KeyframedValue >", typeof(KeyframedValue>)); Register("class KeyframedValue", typeof(KeyframedValue)); Register("class KeyframedValue::Sample", typeof(KeyframedValue.Sample)); Register("class KeyframedValue", typeof(KeyframedValue)); @@ -888,6 +908,7 @@ static MetaClassTypeRegistry() Register("class LanguageResProxy", typeof(LanguageResProxy)); Register("class LanguageResource", typeof(LanguageResource)); Register("class LanguageResourceProxy", typeof(LanguageResourceProxy)); + Register("class LanguageResourceProxy::ModRes", typeof(LanguageResourceProxy.ModRes)); Register("class LightInstance", typeof(LightInstance)); Register("class LightProbe", typeof(LightProbe)); Register("class LightProbeData", typeof(LightProbeData)); @@ -898,7 +919,7 @@ static MetaClassTypeRegistry() Register("class LipSync2", typeof(LipSync2)); Register("class List", typeof(List)); Register("class List", typeof(List)); - Register("class List >", typeof(List>)); + Register("class List >", typeof(List>)); Register("class List >", typeof(List>)); Register("class List >", typeof(List>)); Register("class List >", typeof(List>)); @@ -913,7 +934,7 @@ static MetaClassTypeRegistry() Register("class List >", typeof(List>)); Register("class List > >", typeof(List>)); Register("class List", typeof(List)); - Register("class List", typeof(List)); + Register("class List", typeof(List)); Register("class List", typeof(List)); Register("class List", typeof(List)); Register("class List", typeof(List)); @@ -933,30 +954,30 @@ static MetaClassTypeRegistry() Register("class Map >", typeof(NotImplementedException)); Register("class Map>", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map,struct std::less >", typeof(Dictionary>)); + Register("class Map,struct std::less >", typeof(Dictionary>)); Register("class Map,struct std::less >", typeof(Dictionary>)); Register("class Map,struct std::less >", typeof(Dictionary>)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map,struct std::less >,struct std::less >", typeof(Dictionary>>)); - Register("class Map >,struct std::less >", typeof(Dictionary>)); + Register("class Map,struct std::less >,struct std::less >", typeof(Dictionary>>)); + Register("class Map >,struct std::less >", typeof(Dictionary>)); Register("class Map >", typeof(Dictionary)); Register("class Map,struct std::less >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >,struct std::less >", typeof(Dictionary>)); Register("class Map >,struct StringCompareCaseInsensitive>", typeof(Dictionary>)); Register("class Map >,struct std::less >", typeof(Dictionary>)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); - Register("class Map", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); + Register("class Map", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map,struct std::less >", typeof(Dictionary>)); Register("class Map,struct std::less >", typeof(Dictionary>)); @@ -964,7 +985,7 @@ static MetaClassTypeRegistry() Register("class Map >,struct std::less >,struct std::less >", typeof(Dictionary>>)); Register("class Map >,struct std::less >", typeof(Dictionary>)); Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); @@ -972,7 +993,7 @@ static MetaClassTypeRegistry() Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); @@ -984,12 +1005,12 @@ static MetaClassTypeRegistry() Register("class Map,struct std::less >", typeof(Dictionary)); Register("class Map,struct std::less >", typeof(Dictionary)); Register("class Map,struct std::less >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); - Register("class Map >", typeof(Dictionary)); + Register("class Map >", typeof(Dictionary)); Register("class Map >,struct std::less >", typeof(Dictionary>>)); - Register("class Map,struct std::less >", typeof(Dictionary)); + Register("class Map,struct std::less >", typeof(Dictionary)); Register("class Map >", typeof(Dictionary)); Register("class Map >,struct std::less >", typeof(Dictionary>)); Register("class Map >", typeof(Dictionary)); @@ -1023,11 +1044,12 @@ static MetaClassTypeRegistry() Register("class PlaybackController", typeof(PlaybackController)); Register("class PointOfInterestBlocking", typeof(PointOfInterestBlocking)); Register("class Polar", typeof(Polar)); - Register("class PreloadPackage::RuntimeDataDialog", typeof(PreloadPackage.RuntimeDataDialog)); - Register("class PreloadPackage::RuntimeDataDialog::DlgObjIdAndResourceVector", typeof(PreloadPackage.RuntimeDataDialog.DlgObjIdAndResourceVector)); - Register("class PreloadPackage::RuntimeDataDialog::DlgObjIdAndStartNodeOffset", typeof(PreloadPackage.RuntimeDataDialog.DlgObjIdAndStartNodeOffset)); - Register("class PreloadPackage::RuntimeDataScene", typeof(PreloadPackage.RuntimeDataScene)); - Register("class PreloadPackage::StartNodeOffset", typeof(PreloadPackage.StartNodeOffset)); + Register("class AfterEffect", typeof(AfterEffect)); + Register("class PreloadPackage::RuntimeDataDialog", typeof(RuntimeDataDialog)); + Register("class PreloadPackage::RuntimeDataDialog::DlgObjIdAndResourceVector", typeof(RuntimeDataDialog.DlgObjIdAndResourceVector)); + Register("class PreloadPackage::RuntimeDataDialog::DlgObjIdAndStartNodeOffset", typeof(RuntimeDataDialog.DlgObjIdAndStartNodeOffset)); + Register("class PreloadPackage::RuntimeDataScene", typeof(RuntimeDataScene)); + Register("class PreloadPackage::StartNodeOffset", typeof(StartNodeOffset)); Register("class ProceduralEyes", typeof(ProceduralEyes)); Register("class Procedural_LookAt", typeof(ProceduralLookAt)); Register("class Procedural_LookAt::Constraint", typeof(ProceduralLookAt.Constraint)); @@ -1037,6 +1059,7 @@ static MetaClassTypeRegistry() Register("class Ptr", typeof(NotImplementedException), MetaFlags.MetaSerializeDisable); Register("class Ptr", typeof(NotImplementedException), MetaFlags.MetaSerializeDisable); Register("class Ptr", typeof(NotImplementedException), MetaFlags.MetaSerializeDisable); + Register("class Ptr", typeof(NotImplementedException), MetaFlags.MetaSerializeDisable); Register("class Quaternion", typeof(Quaternion), MetaFlags.MetaSerializeBlockingDisabled); Register("class Rect", typeof(Rect), MetaFlags.MetaSerializeBlockingDisabled); Register("class RenderObjectInterface", typeof(RenderObjectInterface)); @@ -1050,22 +1073,24 @@ static MetaClassTypeRegistry() Register("class RootKey", typeof(RootKey)); Register("class Rule", typeof(Rule)); Register("class Rules", typeof(Rules)); - Register("class SArray,1>", typeof(Handle[])); - Register("class SArray,3>", typeof(Range[])); - Register("class SArray", typeof(WalkBoxes.Edge[])); - Register("class SArray", typeof(float[])); - Register("class SArray", typeof(int[])); - Register("class SArray", typeof(int[])); - Register("class SArray", typeof(byte[])); - Register("class SArray", typeof(uint[])); - Register("class SArray", typeof(uint[])); - Register("class SArray", typeof(uint[])); - Register("class SArray", typeof(uint[])); - Register("class SArray,11>", typeof(List[])); + Register("class SArray,1>", typeof(Handle[]), MetaFlags.None,1); + Register("class SArray,3>", typeof(Range[]), MetaFlags.None, 3); + Register("class SArray", typeof(WalkBoxes.Edge[]), MetaFlags.None, 3); + Register("class SArray", typeof(float[]), MetaFlags.None, 3); + Register("class SArray", typeof(int[]), MetaFlags.None, 3); + Register("class SArray", typeof(int[]), MetaFlags.None, 4); + Register("class SArray", typeof(sbyte[]), MetaFlags.None, 32); + Register("class SArray", typeof(uint[]), MetaFlags.None, 3); + Register("class SArray", typeof(uint[]), MetaFlags.None, 3); + Register("class SArray", typeof(uint[]), MetaFlags.None, 6); + Register("class SArray", typeof(uint[]), MetaFlags.None, 7); + Register("class SArray", typeof(uint[]), MetaFlags.None, 8); + Register("class SArray,11>", typeof(List[]),MetaFlags.None,11); Register("class SaveGame", typeof(SaveGame)); Register("class SaveGame::AgentInfo", typeof(SaveGame.AgentInfo)); Register("class Scene", typeof(Scene)); Register("class Scene::AgentInfo", typeof(Scene.AgentInfo)); + Register("class Scene::AddSceneInfo", typeof(Scene.AddSceneInfo)); Register("class SceneInstData", typeof(SceneInstData)); Register("class ScriptEnum:TextColorStyle", typeof(ScriptEnum)); Register("class Selectable", typeof(Selectable)); @@ -1095,17 +1120,17 @@ static MetaClassTypeRegistry() Register("class SingleValue >", typeof(SingleValue>)); Register("class SingleValue >", typeof(SingleValue>)); Register("class SingleValue >", typeof(SingleValue>)); - Register("class SingleValue >", typeof(SingleValue>)); + Register("class SingleValue >", typeof(SingleValue>)); Register("class SingleValue", typeof(SingleValue)); Register("class SingleValue", typeof(SingleValue)); Register("class SingleValue", typeof(SingleValue)); - Register("class SingleValue >", typeof(SingleValue)); - Register("class SingleValue >", typeof(SingleValue)); - Register("class SingleValue >", typeof(SingleValue)); - Register("class SingleValue", typeof(SingleValue)); + Register("class SingleValue >", typeof(SingleValue)); + Register("class SingleValue >", typeof(SingleValue)); + Register("class SingleValue >", typeof(SingleValue)); + Register("class SingleValue", typeof(SingleValue)); Register("class SingleValue", typeof(SingleValue)); - Register("class SingleValue >", typeof(SingleValue>)); - Register("class SingleValue >", typeof(SingleValue>)); + Register("class SingleValue >", typeof(SingleValue>)); + Register("class SingleValue >", typeof(SingleValue>)); Register("class SingleValue", typeof(SingleValue)); Register("class SingleValue", typeof(SingleValue)); Register("class SingleValue", typeof(SingleValue)); @@ -1136,9 +1161,9 @@ static MetaClassTypeRegistry() Register("class SoundEventBankMap", typeof(SoundEventBankMap)); Register("class SoundEventData", typeof(SoundEventData)); Register("class SoundEventEmitterInstance", typeof(SoundEventEmitterInstance)); - Register("class SoundEventName<0>", typeof(SoundEventName)); - Register("class SoundEventName<1>", typeof(SoundEventName)); - Register("class SoundEventName<2>", typeof(SoundEventName)); + Register("class SoundEventName<0>", typeof(SoundEventName0)); + Register("class SoundEventName<1>", typeof(SoundEventName1)); + Register("class SoundEventName<2>", typeof(SoundEventName2)); Register("class SoundEventNameBase", typeof(SoundEventNameBase)); Register("class SoundEventPreloadInterface", typeof(SoundEventPreloadInterface)); Register("class SoundEventSnapshotData", typeof(SoundEventSnapshotData)); @@ -1175,8 +1200,8 @@ static MetaClassTypeRegistry() Register("class T3Texture::RegionStreamHeader", typeof(T3Texture.RegionStreamHeader)); Register("class T3ToonGradientRegion", typeof(T3ToonGradientRegion)); Register("class T3VertexBuffer", typeof(T3VertexBuffer)); - Register("class T3VertexBufferSample", typeof(T3VertexBufferSample)); - Register("class T3VertexBufferSample", typeof(T3VertexBufferSample)); + Register("class T3VertexBufferSample", typeof(T3VertexBufferSample)); + Register("class T3VertexBufferSample", typeof(T3VertexBufferSample)); Register("class TRange", typeof(Range), MetaFlags.MetaSerializeBlockingDisabled); Register("class TRect", typeof(Rect), MetaFlags.MetaSerializeBlockingDisabled); Register("class TaskOwner", typeof(TaskOwner)); @@ -1215,8 +1240,8 @@ static MetaClassTypeRegistry() Register("double", typeof(double),MetaFlags.MetaSerializeBlockingDisabled); Register("enum ActingPalette::ActiveDuring", typeof(ActingPalette.ActiveDuring), MetaFlags.MetaSerializeBlockingDisabled); Register("enum AudioSound::SoundMode", typeof(AudioSound.SoundMode), MetaFlags.MetaSerializeBlockingDisabled); - Register("enum ChoreResource::AAStatus", typeof(ChoreResource.AutoActStatus), MetaFlags.MetaSerializeBlockingDisabled); - Register("enum DialogItem::PlaybackMode", typeof(DialogItem.PlaybackModeEnum), MetaFlags.MetaSerializeBlockingDisabled); + Register("enum ChoreResource::AAStatus", typeof(ChoreResource.AAStatus), MetaFlags.MetaSerializeBlockingDisabled); + Register("enum DialogItem::PlaybackMode", typeof(DialogItem.PlaybackMode), MetaFlags.MetaSerializeBlockingDisabled); Register("enum DialogUtils::DialogElemT", typeof(DialogUtils.DialogElemT), MetaFlags.MetaSerializeBlockingDisabled); Register("enum InputCode", typeof(InputCode), MetaFlags.MetaSerializeBlockingDisabled); Register("enum InputMapper::EventType", typeof(InputMapper.EventType), MetaFlags.MetaSerializeBlockingDisabled); @@ -1345,12 +1370,12 @@ static MetaClassTypeRegistry() Register("struct PhonemeKey", typeof(PhonemeKey)); Register("struct PhysicsObject::EnumePhysicsBoundingVolumeType", typeof(PhysicsObject.EnumePhysicsBoundingVolumeType)); Register("struct PhysicsObject::EnumePhysicsCollisionType", typeof(PhysicsObject.EnumePhysicsCollisionType)); - Register("struct PreloadPackage::ResourceKey", typeof(PreloadPackage.ResourceKey)); - Register("struct PreloadPackage::ResourceSeenTimes", typeof(PreloadPackage.ResourceSeenTimes)); - Register("struct PreloadPackage::RuntimeDataDialog::DialogResourceInfo", typeof(PreloadPackage.RuntimeDataDialog.DialogResourceInfo)); + Register("struct PreloadPackage::ResourceKey", typeof(ResourceKey)); + Register("struct PreloadPackage::ResourceSeenTimes", typeof(ResourceSeenTimes)); + Register("struct PreloadPackage::RuntimeDataDialog::DialogResourceInfo", typeof(RuntimeDataDialog.DialogResourceInfo)); Register("struct Procedural_LookAt::EnumLookAtComputeStage", typeof(ProceduralLookAt.EnumLookAtComputeStage)); Register("struct PtrBase", typeof(NotImplementedException)); - Register("struct RecordingUtils::EnumRecordingStatus", typeof(RecordingUtils.EnumRecordingStatus)); + Register("struct RecordingUtils::EnumRecordingStatus", typeof(EnumRecordingStatus)); Register("struct RenderSwizzleParams", typeof(RenderSwizzleParams)); Register("struct ResourceGroupInfo", typeof(ResourceGroupInfo)); Register("struct Rule::AgentInfo", typeof(Rule.AgentInfo)); @@ -1360,7 +1385,7 @@ static MetaClassTypeRegistry() Register("struct SkeletonPoseValue::ValueEntry", typeof(SkeletonPoseValue.ValueEntry)); Register("struct SkeletonPoseValue::Sample", typeof(SkeletonPoseValue.Sample)); Register("struct SklNodeData", typeof(SklNodeData)); - Register("struct SoundAmbience::AmbienceDefinition", typeof(SoundAmbience.AmbienceDefinition)); + Register("struct SoundAmbience::AmbienceDefinition", typeof(AmbienceDefinition)); Register("struct SoundSystem::Implementation::ChannelHolder", typeof(SoundSystem.Implementation.ChannelHolder)); Register("struct T3GFXBuffer", typeof(T3GFXBuffer)); Register("struct T3GFXVertexState", typeof(T3GFXVertexState)); @@ -1410,40 +1435,76 @@ static MetaClassTypeRegistry() Register("unsigned int", typeof(uint), MetaFlags.MetaSerializeBlockingDisabled); Register("unsigned long", typeof(uint), MetaFlags.MetaSerializeBlockingDisabled); Register("unsigned short", typeof(ushort),MetaFlags.MetaSerializeBlockingDisabled); + Register("PropertyValue", typeof(PropertyValue)); + Register("PropertySet::KeyInfo", typeof(PropertySet.KeyInfo)); + Register("Sound", typeof(Sound)); + Register("FootSteps::FootStepMonitor", typeof(FootSteps.FootStepMonitor)); + Register("LightGroupInstance", typeof(LightGroupInstance)); + Register("MoviePlayer", typeof(MoviePlayer)); + Register("EnumJumpTargetClass", typeof(DlgNodeJump.EnumJumpTargetClass)); + Register("EnumJumpBehaviour", typeof(DlgNodeJump.EnumJumpBehaviour)); + Register("EnumVisibilityBehaviour ", typeof(DlgNodeJump.EnumVisibilityBehaviour)); + Register("DArray", typeof(List)); + Register("DCArray", typeof(List)); + Register("DCArray", typeof(List)); + // @formatter:on } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Register(string typeName, Type linkingType, MetaFlags flags = MetaFlags.None) + public static void Register(string typeName, Type linkingType, MetaFlags flags = MetaFlags.None, int argNum = 0) { - Register(new MetaClassType(typeName, linkingType, flags)); + Register(new MetaClassType(typeName, linkingType, flags, argNum)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Register(MetaClassType info) { - ByName.Add(info.Symbol.DebugString, info); - ByHash.Add(info.Symbol.Crc64, info); + s_byName.Add(info.Symbol.DebugString, info); + s_byHash.Add(info.Symbol.Crc64, info); } public static MetaClassType GetByName(string typeName) { - ByName.TryGetValue(typeName, out MetaClassType? info); + s_byName.TryGetValue(typeName, out MetaClassType? info); return info ?? throw new KeyNotFoundException($"Unregistered class {typeName}"); } public static MetaClassType? GetByHash(ulong hash) => - ByHash.GetValueOrDefault(hash); + s_byHash.GetValueOrDefault(hash); public static void PrintRegisteredTypes() { - foreach (MetaClassType type in ByHash.Values) + foreach (MetaClassType type in s_byHash.Values) { Console.WriteLine(($"{type.Symbol.DebugString} {type.Symbol.Crc64:X}")); } } } +internal class MoviePlayer +{ +} + +internal class Sound +{ +} + +internal class PropertyValue +{ +} + +internal class AfterEffect +{ +} + +internal class PlatformInputMapper +{ + internal class EventMapping + { + } +} + public class T3EffectBinaryDataAsm_GL { } @@ -1638,7 +1699,6 @@ public enum T3EffectParameterType EVSMShadowSamplerCount = 0x2, } - public class T3EffectBinaryData { } @@ -1668,6 +1728,10 @@ public class VertexStreamIndex public class Technique { } + + public class ConstAssignment + { + } } public class T3EffectBinaryDataHlsl_D3D @@ -1686,26 +1750,10 @@ public class DelaunayTriangleSet { } -public class EnlightenData -{ -} - public class EnvironmentLightGroup { } -public class EnlightenSignature -{ -} - -public class EnlightenSystemData -{ -} - -public class EnlightenProbeData -{ -} - public class Subtitle { } @@ -1748,6 +1796,7 @@ public class SoundSfxInterface public class SoundSnapshotInstance { } + public class SoundEventPreloadInterface { } @@ -1825,40 +1874,23 @@ public class LightProbe { } -public class ParticlePropertySamples -{ -} - public class BGM_HeadTurn_Value { } -public class CorrespondencePoint -{ -} - public class ContainerInterface { } -public class CompressedPhonemeKeys -{ -} public class FilterArea { } - - public class InverseKinematicsDerived { } -public class SoundBankWaveMap -{ -} - public class TetrahedralMeshData { } @@ -1871,26 +1903,14 @@ public class InverseKinematics { } -public class ParticleInverseKinematics -{ -} - public class PathSegment { } -public class ProceduralEyes -{ -} - public class SingleQuaternionValue { } -public class PerAgentClipResourceFilter -{ -} - public class IdleTransitionSettings { } @@ -1899,14 +1919,6 @@ public class IdleSlotDefaults { } -public class EventStoragePage -{ -} - -public class EventLoggerEvent -{ -} - public class AssetCollection { } @@ -1922,10 +1934,6 @@ public class BusHolder } } - - - - public class Selectable { } @@ -1954,45 +1962,6 @@ public class CinematicLight { } -public class AutoActStatus -{ -} - -public class BlendEntry -{ -} - -public class ClipResourceFilter -{ -} - -public class CompressedTransformKeys -{ -} - -public class CompressedVector3Keys2 -{ -} - -public class CompressedVertexPositionKeys -{ -} - -public class CompressedVertexNormalKeys -{ -} - -public class CompressedQuaternionKeys2 -{ -} - - - -public class StyleIdleTransitionsRes -{ -} - - public class CinematicLightRig { } @@ -2015,21 +1984,6 @@ public class KeyframedValueInterface { } -public class DateStamp -{ -} - -public class SoundBankWaveMapEntry -{ -} - -public class SingleVector3Value -{ -} - -public class Guide -{ -} public class T3RenderStateBlock { @@ -2038,13 +1992,6 @@ public class T3RenderStateBlock public class RenderObject_PostMaterial { } -public class SoundEventBankMap -{ -} - -public class PhysicsData -{ -} public class LipSync { @@ -2070,22 +2017,6 @@ public class Rollover { } -public class SkeletonPoseValue -{ - public class Sample - { - } - - public class BoneEntry - { - } - - internal class ValueEntry - { - } -} - - public class LightProbeData { } @@ -2098,13 +2029,6 @@ public class T3MaterialSwizzleParams { } -public class EventStorage -{ - public class PageEntry - { - } -} - public class JiraRecord { } @@ -2113,7 +2037,6 @@ public class ChorecorderParameters { } - public class Agent { } @@ -2134,101 +2057,12 @@ public class Mover { } -public class PhysicsObject -{ - public class EnumePhysicsBoundingVolumeType - { - } - - public class EnumePhysicsCollisionType - { - } -} -public class ParticleProperties -{ - public class Animation - { - } - - public class AnimationParams - { - } -} - public class EnvironmentLight { } -public class ActingAccentPalette -{ -} - -public class RecordingUtils -{ - public class EnumRecordingStatus - { - } -} - -public class CameraSelect -{ -} - -public class PointOfInterestBlocking -{ -} - -public class KeyframedValueSteppedString -{ -} - -public class BlendCameraResource -{ -} - -public class EnumeTangentModes -{ -} - - -public class PreloadPackage -{ - public class ResourceSeenTimes - { - } - - public class RuntimeDataDialog - { - public class DialogResourceInfo - { - } - - public class DlgObjIdAndResourceVector - { - } - - public class DlgObjIdAndStartNodeOffset - { - } - } - - public class RuntimeDataScene - { - } - - public class ResourceKey - { - } - - public class StartNodeOffset - { - } -} - - - public class SklNodeData { } @@ -2237,41 +2071,11 @@ public class Matrix4 { } -public class InverseKinematicsBase -{ -} - - -public class T3HeapAllocator -{ -} - -public class T3NormalSampleData -{ -} - -public class T3VertexBufferSample -{ -} - -public class T3PositionSampleData -{ -} - public class ResourceGroupInfo { } -public class SoundAmbience -{ - public class AmbienceDefinition - { - } - public class EventContext - { - } -} public class SoundEventSnapshotData { @@ -2281,10 +2085,6 @@ public class SoundEventData { } -public class SoundReverbDefinition -{ -} - public class SoundBusSnapshot { public class Snapshot @@ -2296,16 +2096,6 @@ public class SnapshotSuite } } -public class SingleValue -{ -} - -public class ParticleSprite -{ - public class Animation - { - } -} public class RenderObject_Mesh { public class TextureInstance @@ -2325,9 +2115,6 @@ public class VertexAnimationInstance } } -public class CompressedKeys -{ -} public class PathTo @@ -2342,13 +2129,10 @@ public class AgentState { } - public class LightGroupInstance { } - - public class ColorHDR { } @@ -2360,30 +2144,10 @@ public class ResourceInfo } } - - -public class CompressedPathBlockingValue -{ - public class CompressedPathInfoKey - { - } -} - -public class BlendGraph -{ - public class EnumBlendGraphType - { - } -} - public class AnimationConstraintParameters { } -public class BlendGraphManager -{ -} - public class DebugString { } diff --git a/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamReader.cs b/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamReader.cs index dcfa7de..07434da 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamReader.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamReader.cs @@ -2,7 +2,6 @@ using TelltaleToolKit.Hashing; using TelltaleToolKit.IO.Streams; using TelltaleToolKit.Meta.Reflection; -using TelltaleToolKit.T3Types; namespace TelltaleToolKit.Meta.Serialization.Binary; @@ -19,7 +18,7 @@ public BinaryMetaStreamReader(Stream inputStream, Workspace? workspace = null) if (!isValid) { - throw new InvalidDataException("Invalid MetaStream."); + throw new InvalidDataException("[BinaryMetaStreamReader] Invalid MetaStream."); } long offset = Sections[0].CompressedSize; @@ -32,12 +31,7 @@ public BinaryMetaStreamReader(Stream inputStream, Workspace? workspace = null) currentSect.Stream = new SubStream(Sections[0].Stream, offset, currentSect.CompressedSize); if (currentSect.IsCompressed) { - if (Params.Workspace is null) - { - throw new InvalidOperationException("[MetaStream] Workspace is not set for encrypted streams."); - } - - ContainerStream cs = new(currentSect.Stream, Params.Workspace.BlowfishKey); + ContainerStream cs = new(currentSect.Stream); currentSect.Stream = cs; SetSection((SectionType)i); @@ -58,21 +52,23 @@ private bool ReadHeader() { if (BaseStream.Length < 4) { - Toolkit.Instance.Logger.LogError("Invalid MetaHeader: Stream too short."); + Toolkit.Instance.Logger.LogError("[BinaryMetaStreamReader] Invalid header: Stream too short."); return false; } + // Setup the header section Sections[(int)SectionType.Header].Stream = BaseStream; Reader = new BinaryReader(Sections[(int)SectionType.Header].Stream, Encoding.UTF8, true); SetSection(SectionType.Header); + // Read the FourCC MetaStreamMagic magic = (MetaStreamMagic)this.ReadUInt32(); Params.StreamVersion = magic.GetMetaStreamVersion(); uint streamVersion = Params.StreamVersion; if (Params.StreamVersion == 0) { - Toolkit.Instance.Logger.LogError($"Not a valid meta stream version: {magic}"); + Toolkit.Instance.Logger.LogError($"[BinaryMetaStreamReader] Not a valid meta stream version: {magic}"); return false; } @@ -80,6 +76,7 @@ private bool ReadHeader() if (streamVersion >= 4) { + // MSV5 + MSV6 if (streamVersion >= 5) { defaultSize = this.ReadUInt32(); @@ -106,8 +103,9 @@ private bool ReadHeader() Sections[3].IsCompressed = true; } } - else + else if (magic is not MetaStreamMagic.Mbin and not MetaStreamMagic.Mtre) { + Sections[(int)SectionType.Header].IsEnabled = true; Params.Encrypt = true; // For MCOM, there is an extra 4-byte field to skip if (magic is MetaStreamMagic.Mcom or MetaStreamMagic.EncryptedMcom) @@ -126,13 +124,13 @@ This means MCOM is just a compressed version of the entire file. */ } - Toolkit.Instance.Logger.LogError("[MetaStream] Mcom or EncryptedMcom is not supported."); + Toolkit.Instance.Logger.LogError("[BinaryMetaStreamReader] Mcom or EncryptedMcom is not supported."); return false; } if (Params.Workspace is null) { - Toolkit.Instance.Logger.LogError("[MetaStream] Workspace is not set for encrypted streams."); + Toolkit.Instance.Logger.LogError("[BinaryMetaStreamReader] Workspace is not set for encrypted streams."); return false; } @@ -151,7 +149,7 @@ This means MCOM is just a compressed version of the entire file. if (numVers >= 1024) { - Toolkit.Instance.Logger.LogError("[MetaStream] Too many serialized classes."); + Toolkit.Instance.Logger.LogError("[BinaryMetaStreamReader] Too many serialized classes."); return false; } @@ -160,7 +158,7 @@ This means MCOM is just a compressed version of the entire file. { MetaVersionInfo verInfo = new(); - if (magic.GetMetaStreamVersion() >= 3) // mStreamVersion >= 3 uses hashed symbols + if (magic.GetMetaStreamVersion() >= 3) // uses hashed types { verInfo.TypeSymbolCrc = this.ReadUInt64(); } @@ -194,15 +192,17 @@ This means MCOM is just a compressed version of the entire file. return true; } - protected override void SetSection(SectionType newSection) + protected override bool SetSection(SectionType newSection) { - if (_currentSection == newSection) + var section = Sections[(int)newSection]; + if (section.Stream is null) { - return; + return false; } + Reader = new BinaryReader(section.Stream, Encoding.UTF8, true); _currentSection = newSection; - Reader = new BinaryReader(Sections[(int)_currentSection].Stream, Encoding.UTF8, true); + return true; } public override void BeginBlock() @@ -226,9 +226,20 @@ public override void EndBlock() // I have no idea how they got there in the first place, but I saw one such file (ui_mainmenu_background.scene) which benefits from this. // Previously, I used to throw exceptions since I thought it was impossible, but this seems better for stability purposes. // This matches the implementation of the engine behaviour. - Toolkit.Instance.Logger.LogWarning( - $"[BinaryMetaStreamReader] Invalid data position! Current Position: {currentPosition}. Expected Position: {expectedPosition}."); + + if (expectedPosition < currentPosition) + { + Toolkit.Instance.Logger.LogWarning( + $"[BinaryMetaStreamReader] Invalid data position! Current position ahead of expected position! Current Position: {currentPosition}. Expected Position: {expectedPosition}."); + } + + // throw new InvalidDataException($"Invalid data position! Current Position: {currentPosition}. Expected Position: {expectedPosition}."); + currentSectionInfo.Stream.Position = expectedPosition; + currentSectionInfo.CompressedSize -= (int)(currentPosition - expectedPosition); + // #if DEBUG + // throw new InvalidDataException($"Invalid data position! Current Position: {currentPosition}. Expected Position: {expectedPosition}."); + // #endif } public override void Serialize(ref bool value) => @@ -236,7 +247,7 @@ public override void Serialize(ref bool value) => { '1' => true, '0' => false, - _ => throw new InvalidBooleanException($"Invalid boolean at position: {Reader.BaseStream.Position}!") + _ => throw new InvalidBooleanException($"[BinaryMetaStreamReader] Invalid boolean at position: {Reader.BaseStream.Position}!") }; public override void Serialize(ref float value) => value = Reader.ReadSingle(); @@ -259,7 +270,7 @@ public override void Serialize(ref string value) { int strLength = Reader.ReadInt32(); - if (strLength < 0) + if (strLength < 0 || strLength > 0x100000) { throw new ArgumentOutOfRangeException(nameof(strLength)); } @@ -281,13 +292,6 @@ public override void Serialize(ref string value) public override void Serialize(ref sbyte value) => value = Reader.ReadSByte(); - public override void Serialize(ref Symbol value) - { - ulong crc64 = Reader.ReadUInt64(); - value = Symbol.FromCrc64(crc64); - Params.SerializedSymbols.Add(value); - } - public override void Serialize(byte[] values, int offset, int count) => Reader.Read(values, offset, count); public override void Close() => Dispose(true); diff --git a/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamWriter.cs b/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamWriter.cs index 1f87b74..700b430 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamWriter.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Binary/BinaryMetaStreamWriter.cs @@ -1,7 +1,6 @@ using System.Text; using TelltaleToolKit.Encryption; using TelltaleToolKit.IO.Streams; -using TelltaleToolKit.T3Types; namespace TelltaleToolKit.Meta.Serialization.Binary; @@ -17,6 +16,7 @@ public BinaryMetaStreamWriter(Stream outputStream, MetaStreamParams @params) Params.SerializedSymbols.Clear(); Sections[0].Stream = new MemoryStream(0x100); + Sections[0].IsEnabled = true; SetSection(SectionType.Default); } @@ -64,7 +64,7 @@ private void WriteHeader() this.Write(Params.VersionInfo.Count); - foreach (MetaVersionInfo? versionInfo in Params.VersionInfo) + foreach (MetaVersionInfo versionInfo in Params.VersionInfo) { if (streamVersion >= 3) { @@ -79,17 +79,25 @@ private void WriteHeader() } } - protected override void SetSection(SectionType newSection) + protected override bool SetSection(SectionType newSection) { - if (_currentSection == newSection) + var section = Sections[(int)newSection]; + if (section.Stream is not null) { - return; + Writer = new BinaryWriter(section.Stream, Encoding.UTF8, true); + _currentSection = newSection; + return true; + } + + if (!section.IsEnabled) + { + return false; } + section.Stream = new MemoryStream(0x4000); + Writer = new BinaryWriter(section.Stream, Encoding.UTF8, true); _currentSection = newSection; - Stream sectionStream = CurrentSection.Stream ?? new MemoryStream(0x4000); - Writer = new BinaryWriter(sectionStream, Encoding.UTF8, true); - CurrentSection.Stream ??= sectionStream; + return true; } public override void BeginBlock() @@ -212,10 +220,4 @@ public override void Close() _closed = true; Dispose(true); } - - public override void Serialize(ref Symbol value) - { - Writer.Write(value.Crc64); - Params.SerializedSymbols.Add(value); - } } diff --git a/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamReader.cs b/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamReader.cs index c127941..02f64de 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamReader.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamReader.cs @@ -1,5 +1,4 @@ using System.Text.Json; -using TelltaleToolKit.T3Types; namespace TelltaleToolKit.Meta.Serialization.Json; @@ -73,20 +72,23 @@ private void ParseHeader(JsonElement header) public override MetaStreamMode Mode => MetaStreamMode.Read; - protected override void SetSection(SectionType section) + protected override bool SetSection(SectionType section) { + return false; } - public override void BeginAsyncSection() + public override bool BeginAsyncSection() { + return false; } public override void EndAsyncSection() { } - public override void BeginDebugSection() + public override bool BeginDebugSection() { + return false; } public override void EndDebugSection() @@ -266,24 +268,6 @@ public override void Serialize(ref sbyte value) value = GetCurrentValue().GetSByte(); } - public override void Serialize(ref Symbol value) - { - EnsureValue(); - string str = GetCurrentValue().GetString() ?? ""; - // Try to parse as hex CRC, otherwise treat as debug string - if (str.StartsWith("0x", StringComparison.OrdinalIgnoreCase) && - ulong.TryParse(str.AsSpan(2), System.Globalization.NumberStyles.HexNumber, null, out ulong crc)) - { - value = Symbol.FromCrc64(crc); - } - else - { - value = Symbol.FromName(str); - } - - Params.SerializedSymbols.Add(value); - } - public override void Serialize(byte[] values, int offset, int count) { EnsureValue(); diff --git a/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamWriter.cs b/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamWriter.cs index 16ffcb7..c970110 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamWriter.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Json/JsonMetaStreamWriter.cs @@ -1,5 +1,4 @@ using System.Text.Json; -using TelltaleToolKit.T3Types; namespace TelltaleToolKit.Meta.Serialization.Json; @@ -41,21 +40,24 @@ public JsonMetaStreamWriter(Stream outputStream, MetaStreamParams @params) public override MetaStreamMode Mode => MetaStreamMode.Write; - protected override void SetSection(SectionType section) + protected override bool SetSection(SectionType section) { // Intentional no-op: JSON folds all sections into the payload object via // BeginAsyncSection / BeginDebugSection named sub-objects. _currentSection = section; + return true; } - public override void BeginAsyncSection() + public override bool BeginAsyncSection() { - if (Params.StreamVersion < 4) return; - if (_currentSection is SectionType.Async) return; + if (Params.StreamVersion < 4) return false; + if (_currentSection is SectionType.Async) return false; _payload.WritePropertyName("Async Data"); _payload.WriteStartObject(); _currentSection = SectionType.Async; + + return true; } public override void EndAsyncSection() @@ -66,14 +68,16 @@ public override void EndAsyncSection() _currentSection = SectionType.Default; } - public override void BeginDebugSection() + public override bool BeginDebugSection() { - if (Params.StreamVersion < 4) return; - if (_currentSection is SectionType.Debug) return; + if (Params.StreamVersion < 4) return false; + if (_currentSection is SectionType.Debug) return false; _payload.WritePropertyName("Debug Data"); _payload.WriteStartObject(); _currentSection = SectionType.Debug; + + return true; } public override void EndDebugSection() @@ -238,19 +242,6 @@ public override void Serialize(ref sbyte value) _keyPending = false; } - /// - /// Symbols are written as strings. If a debug string is available it is used; - /// otherwise the CRC is written as a hex string, matching C++ serialize_Symbol. - /// - public override void Serialize(ref Symbol value) - { - EnsureKey(); - string display = value.DebugString ?? $"0x{value.Crc64:X16}"; - _payload.WriteStringValue(display); - Params.SerializedSymbols.Add(value); - _keyPending = false; - } - /// /// Binary blobs are Base64-encoded, matching C++ WriteData. /// diff --git a/src/TelltaleToolKit/Meta/Serialization/MetaSerializer.cs b/src/TelltaleToolKit/Meta/Serialization/MetaSerializer.cs index 7344357..1e9bb37 100644 --- a/src/TelltaleToolKit/Meta/Serialization/MetaSerializer.cs +++ b/src/TelltaleToolKit/Meta/Serialization/MetaSerializer.cs @@ -28,7 +28,8 @@ public virtual void Initialize(MetaSerializerSelector serializerSelector) /// /// The object to serialize or deserialize. /// The stream to serialize or deserialize to. - public abstract void Serialize(ref object obj, MetaStream stream); + /// + public abstract void Serialize(ref object obj, MetaStream stream, MetaClassType? type = null); /// /// Performs the first step of serialization or deserialization. @@ -52,7 +53,7 @@ public abstract class MetaSerializer : MetaSerializer public override Type SerializationType => typeof(T); /// - public override void Serialize(ref object obj, MetaStream stream) + public override void Serialize(ref object obj, MetaStream stream, MetaClassType? type = null) { T objT = (T)obj; Serialize(ref objT, stream); @@ -96,5 +97,6 @@ public virtual void PreSerialize(ref T? obj, MetaStream stream, MetaClassType? t /// /// The object to serialize or deserialize. /// The stream to serialize or deserialize to. - public abstract void Serialize(ref T obj, MetaStream stream); + /// + public abstract void Serialize(ref T obj, MetaStream stream, MetaClassType? type = null); } diff --git a/src/TelltaleToolKit/Meta/Serialization/MetaStream.cs b/src/TelltaleToolKit/Meta/Serialization/MetaStream.cs index 502cd2c..94740d9 100644 --- a/src/TelltaleToolKit/Meta/Serialization/MetaStream.cs +++ b/src/TelltaleToolKit/Meta/Serialization/MetaStream.cs @@ -36,6 +36,10 @@ public enum SectionType protected Stream BaseStream { get; set; } = null!; + protected int DebugSectionDepth = 0; + + public int DefaultSectionDepth = 0; + /// /// Gets the mode of this stream (read or write). /// @@ -87,44 +91,49 @@ public static MetaStream OpenJsonWrite(Stream outputStream, MetaStreamParams con => new JsonMetaStreamWriter(outputStream, configuration); - public virtual void BeginAsyncSection() + public virtual bool BeginAsyncSection() { - if (_currentSection is SectionType.Async || Params.StreamVersion < 4) - { - return; - } - - SetSection(SectionType.Async); + return _currentSection == SectionType.Default && SetSection(SectionType.Async); } public virtual void EndAsyncSection() { - if (_currentSection is not SectionType.Async || Params.StreamVersion < 4) + if (_currentSection == SectionType.Async) { - return; + SetSection(SectionType.Default); } - - SetSection(SectionType.Default); } - public virtual void BeginDebugSection() + public virtual bool BeginDebugSection() { - if (_currentSection is SectionType.Debug || Params.StreamVersion < 4) + if ((_currentSection is SectionType.Default && DebugSectionDepth == 0 && SetSection(SectionType.Debug)) + || (_currentSection == SectionType.Debug && DebugSectionDepth >= 0)) { - return; + if (Mode is MetaStreamMode.Read && Sections[2].Stream?.Length == 0) + { + SetSection(SectionType.Default); + return false; + } + + DebugSectionDepth++; + return true; } - SetSection(SectionType.Debug); + return false; } public virtual void EndDebugSection() { - if (_currentSection is not SectionType.Debug || Params.StreamVersion < 4) + if (_currentSection != SectionType.Debug || DebugSectionDepth <= 0) { return; } - SetSection(SectionType.Default); + DebugSectionDepth--; + if (DebugSectionDepth == 0) + { + SetSection(SectionType.Default); + } } /// @@ -132,26 +141,32 @@ public virtual void EndDebugSection() /// in JSON streams this labels the next value within an object container. /// /// The property/field name. - public virtual void Key(string name) { } + public virtual void Key(string name) + { + } /// /// Begins a named object or array container. /// No-op in binary streams. In JSON streams emits the opening brace or bracket. /// - public virtual void BeginObject(string name, bool isArray = false) { } + public virtual void BeginObject(string name, bool isArray = false) + { + } /// /// Ends the most recently opened named container. /// No-op in binary streams. In JSON streams emits the closing brace or bracket. /// - public virtual void EndObject(string name) { } + public virtual void EndObject(string name) + { + } /// /// Called when the current section changes. Implementations should set up their reader/writer /// to point to the new section's stream. /// /// The section that is now active. - protected abstract void SetSection(SectionType section); + protected abstract bool SetSection(SectionType section); public abstract void BeginBlock(); @@ -167,8 +182,17 @@ public bool IsClassSerialized(string typeName) { if (!Params.CanModifySerializedClassesList) { - return Params.VersionInfo - .FirstOrDefault(versionInfo => versionInfo.GetMetaClassType()?.LinkingType == type)?.GetMetaClass(); + var versionInfo = Params.VersionInfo + .FirstOrDefault(versionInfo => versionInfo.GetMetaClassType()?.LinkingType == type); + + if (versionInfo == null) + Toolkit.Instance.Logger.LogError($"MetaClass not found for type: {type}"); + + var metaClass = versionInfo?.GetMetaClass(); + + if (metaClass == null) + Toolkit.Instance.Logger.LogError($"MetaClass not registered for type: {type}"); + return metaClass; } return Params.Workspace?.GetMetaClassDescription(type); @@ -263,12 +287,6 @@ public bool IsClassSerialized(string typeName) /// The value to serialize public abstract void Serialize(ref sbyte value); - /// - /// Serializes the Symbol class. - /// - /// The value to serialize - public abstract void Serialize(ref Symbol value); - /// /// Serializes the specified byte array. /// @@ -284,9 +302,9 @@ public bool IsEndOfStream() return false; } - for (int i = 1; i <= 3; i++) + for (int i = 1; i <= 3; i += 2) { - //for each section (default,async,debug) + //for each section (default,debug,async) SectionInfo currentSect = Sections[i]; if (currentSect.Stream == null) { @@ -295,7 +313,19 @@ public bool IsEndOfStream() if (currentSect.Stream.Position != currentSect.Stream.Length) { - return false; + if (i == 2) + { + Toolkit.Instance.Logger.LogWarning(@"Unexpected end of debug section (non-critical). Position: " + + currentSect.Stream.Position + + @" Length: " + currentSect.Stream.Length); + } + else + { + Toolkit.Instance.Logger.LogError(@"Unexpected end of stream. Position: " + + currentSect.Stream.Position + + @" Length: " + currentSect.Stream.Length); + return false; + } } } @@ -443,6 +473,8 @@ public class SectionInfo public long CompressedSize = 0; public bool IsCompressed = false; + public bool IsEnabled = true; + // Section data stream public Stream? Stream = null; } diff --git a/src/TelltaleToolKit/Meta/Serialization/MetaStreamExtensions.cs b/src/TelltaleToolKit/Meta/Serialization/MetaStreamExtensions.cs index f7f116a..6fffb6c 100644 --- a/src/TelltaleToolKit/Meta/Serialization/MetaStreamExtensions.cs +++ b/src/TelltaleToolKit/Meta/Serialization/MetaStreamExtensions.cs @@ -214,11 +214,11 @@ public static Symbol ReadSymbol(this MetaStream stream) MetaClassType? value; if (stream.Params.StreamVersion >= 3) // mStreamVersion >= 3 uses hashed types { - ulong typeSymbolCrc = stream.ReadUInt64(); - value = MetaClassTypeRegistry.GetByHash(typeSymbolCrc); + Symbol def = stream.ReadSymbol(); + value = MetaClassTypeRegistry.GetByHash(def.Crc64); if (value == null) - Toolkit.Instance.Logger.LogWarning($"Unknown type symbol CRC64: {typeSymbolCrc}"); + Toolkit.Instance.Logger.LogError($"Unknown type symbol CRC64: {def.Crc64}"); } else { @@ -465,11 +465,32 @@ public static MetaStream Write(this MetaStream stream, MetaClassType value) /// The object to serialize or deserialize. /// The stream to serialize or deserialize to. /// - public static void Serialize(this MetaStream stream, ref T obj, MetaClassType? type = null) where T : new() + public static void Serialize(this MetaStream stream, ref T obj, MetaClassType? type = null) { var serializer = Toolkit.Instance.GetSerializer(); serializer.PreSerialize(ref obj, stream, type); serializer.Serialize(ref obj, stream); } + + /// + /// Reads exactly . bytes from the stream into the span. + /// + public static void ReadBytes(this MetaStream stream, Span destination) + { + // Fallback: use a temporary array (one allocation per call) + byte[] temp = new byte[destination.Length]; + stream.Serialize(temp, 0, temp.Length); + temp.AsSpan().CopyTo(destination); + } + + /// + /// Writes a read‑only span of bytes to the stream. + /// + public static void WriteBytes(this MetaStream stream, ReadOnlySpan values) + { + // Fallback: copy to array and write + byte[] temp = values.ToArray(); + stream.Serialize(temp, 0, temp.Length); + } } diff --git a/src/TelltaleToolKit/Meta/Serialization/Serializers/ByteArraySerializer.cs b/src/TelltaleToolKit/Meta/Serialization/Serializers/ByteArraySerializer.cs index 3cdc778..9f2ad09 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Serializers/ByteArraySerializer.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Serializers/ByteArraySerializer.cs @@ -1,9 +1,11 @@ -namespace TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.Meta.Reflection; + +namespace TelltaleToolKit.Meta.Serialization.Serializers; [MetaSerializer(typeof(ByteArraySerializer))] public class ByteArraySerializer : MetaSerializer { - public override void Serialize(ref byte[] obj, MetaStream stream) + public override void Serialize(ref byte[] obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) stream.Write(obj); diff --git a/src/TelltaleToolKit/Meta/Serialization/Serializers/CollectionSerializers.cs b/src/TelltaleToolKit/Meta/Serialization/Serializers/CollectionSerializers.cs index 9c16fb4..3751e9a 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Serializers/CollectionSerializers.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Serializers/CollectionSerializers.cs @@ -26,7 +26,7 @@ public override void PreSerialize(ref List? obj, MetaStream stream, MetaClass } /// - public override void Serialize(ref List obj, MetaStream stream) + public override void Serialize(ref List obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -45,8 +45,8 @@ public override void Serialize(ref List obj, MetaStream stream) for (var i = 0; i < count; i++) { var value = default(T); - _itemDataSerializer.PreSerialize(ref value, stream); - _itemDataSerializer.Serialize(ref value, stream); + _itemDataSerializer.PreSerialize(ref value, stream, type); + _itemDataSerializer.Serialize(ref value, stream, type); obj.Add(value); } @@ -77,7 +77,7 @@ public override void PreSerialize(ref HashSet? obj, MetaStream stream, MetaCl } /// - public override void Serialize(ref HashSet obj, MetaStream stream) + public override void Serialize(ref HashSet obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -130,7 +130,7 @@ public override void Initialize(MetaSerializerSelector selector) } /// - public override void Serialize(ref Dictionary obj, MetaStream stream) + public override void Serialize(ref Dictionary obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -150,11 +150,11 @@ public override void Serialize(ref Dictionary obj, MetaStream stre { var key = default(TKey); var value = default(TValue); - _keySerializer.PreSerialize(ref key, stream); - _keySerializer.Serialize(ref key, stream); - _valueSerializer.PreSerialize(ref value, stream); - _valueSerializer.Serialize(ref value, stream); - obj.Add(key!, value!); + _keySerializer.PreSerialize(ref key, stream, type); + _keySerializer.Serialize(ref key, stream, type); + _valueSerializer.PreSerialize(ref value, stream, type); + _valueSerializer.Serialize(ref value, stream, type); + obj.TryAdd(key!, value!); } } } @@ -164,14 +164,35 @@ public sealed class ArraySerializer : MetaSerializer { private MetaSerializer _itemDataSerializer = null!; + public override void PreSerialize(ref T[]? obj, MetaStream stream, MetaClassType? type = null) + { + if (type is null) return; + + int required = type.ArgNum; + + if (obj is null) + { + obj = new T[required]; + } + else if (obj.Length != required) + { + var newArray = new T[required]; + // Copy as many as fit, preserving existing data when possible + int copyCount = Math.Min(obj.Length, required); + Array.Copy(obj, newArray, copyCount); + obj = newArray; + } + } + public override void Initialize(MetaSerializerSelector selector) { _itemDataSerializer = selector.GetSerializer(); } - public override void Serialize(ref T[] obj, MetaStream stream) + public override void Serialize(ref T[] obj, MetaStream stream, MetaClassType? type = null) { - for (var i = 0; i < obj.Length; ++i) + int length = type?.ArgNum ?? obj.Length; + for (int i = 0; i < length; ++i) { _itemDataSerializer.PreSerialize(ref obj[i], stream); _itemDataSerializer.Serialize(ref obj[i], stream); diff --git a/src/TelltaleToolKit/Meta/Serialization/Serializers/MathTypeSerializer.cs b/src/TelltaleToolKit/Meta/Serialization/Serializers/MathTypeSerializer.cs index 055229e..42e5e27 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Serializers/MathTypeSerializer.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Serializers/MathTypeSerializer.cs @@ -6,7 +6,7 @@ namespace TelltaleToolKit.Meta.Serialization.Serializers; [MetaSerializer(typeof(Vector2Serializer))] public class Vector2Serializer : MetaSerializer { - public override void Serialize(ref Vector2 obj, MetaStream stream) + public override void Serialize(ref Vector2 obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -30,7 +30,7 @@ public override void Serialize(ref Vector2 obj, MetaStream stream) [MetaSerializer(typeof(Vector3Serializer))] public class Vector3Serializer : MetaSerializer { - public override void Serialize(ref Vector3 obj, MetaStream stream) + public override void Serialize(ref Vector3 obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -56,7 +56,7 @@ public override void Serialize(ref Vector3 obj, MetaStream stream) [MetaSerializer(typeof(Vector4Serializer))] public class Vector4Serializer : MetaSerializer { - public override void Serialize(ref Vector4 obj, MetaStream stream) + public override void Serialize(ref Vector4 obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -84,7 +84,7 @@ public override void Serialize(ref Vector4 obj, MetaStream stream) [MetaSerializer(typeof(QuaternionSerializer))] public class QuaternionSerializer : MetaSerializer { - public override void Serialize(ref Quaternion obj, MetaStream stream) + public override void Serialize(ref Quaternion obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { diff --git a/src/TelltaleToolKit/Meta/Serialization/Serializers/MetaClassSerializer.cs b/src/TelltaleToolKit/Meta/Serialization/Serializers/MetaClassSerializer.cs index 547d001..ad995dc 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Serializers/MetaClassSerializer.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Serializers/MetaClassSerializer.cs @@ -1,4 +1,6 @@ -using System.Reflection; +using System.Linq.Expressions; +using System.Numerics; +using System.Reflection; using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.T3Types; @@ -35,20 +37,58 @@ static MetaClassSerializer() Setter = CreateSetterDelegate(p.Property), } ); - } + var fallbackEntries = new List<((string, Type), CachedMember)>(); + + foreach (var kvp in MemberCache) + { + var (name, propType) = kvp.Key; + var member = kvp.Value; + + // Enum properties -> also register under int/uint + if (propType.IsEnum) + { + AddIfMissing((name, typeof(int)), member); + AddIfMissing((name, typeof(uint)), member); + // If Flags is a base type of this enum, register that too + if (typeof(Flags).IsAssignableFrom(propType)) + AddIfMissing((name, typeof(Flags)), member); + } + // Flags type -> register as int/uint + else if (propType == typeof(Flags)) + { + AddIfMissing((name, typeof(int)), member); + AddIfMissing((name, typeof(uint)), member); + } + // int/uint -> optionally register enum/Flags lookups? You know your schema best. + // Also add any inheritance‑based matches you’d otherwise search for. + } + + foreach (var entry in fallbackEntries) + if (!MemberCache.ContainsKey(entry.Item1)) + MemberCache[entry.Item1] = entry.Item2; + + foreach (var cached in MemberCache.Values) + { + cached.Serializer = new Lazy( + () => Toolkit.Instance.GetSerializer(cached.Property.PropertyType), + LazyThreadSafetyMode.ExecutionAndPublication + ); + } + void AddIfMissing((string, Type) key, CachedMember member) + => fallbackEntries.Add((key, member)); + } /// - public override void Serialize(ref T obj, MetaStream stream) + public override void Serialize(ref T obj, MetaStream stream, MetaClassType? type = null) { MetaClass? description = stream.GetMetaClass(typeof(T)); - Toolkit.Instance.Logger.LogInfo($"Reading {typeof(T).Name}."); if (description is null || !description.ClassType.IsSerialized()) { if (description is null) Toolkit.Instance.Logger.LogWarning( - $"[DefaultClassSerializer] No description available for {typeof(T).Name}."); + $"[DefaultClassSerializer] No description available for {type?.FullTypeName} / {typeof(T).Name}."); return; } @@ -60,6 +100,8 @@ public override void Serialize(ref T obj, MetaStream stream) stream.AddVersionInfo(description); } + stream.DefaultSectionDepth++; + // Loop through the metaclass's properties/members foreach (MetaMember propDesc in description.Members.Where(propDesc => propDesc.IsSerialized())) { @@ -69,26 +111,34 @@ public override void Serialize(ref T obj, MetaStream stream) stream.BeginBlock(); stream.Key(propDesc.MemberName); + string pad = new(' ', stream.DefaultSectionDepth); if (propDesc.Type.LinkingType.IsPrimitive || (propDesc.Type.LinkingType == typeof(string) || propDesc.Type.LinkingType == typeof(byte[]) || propDesc.Type.LinkingType == typeof(Symbol))) { - } else { stream.BeginObject(propDesc.MemberName); + Toolkit.Instance.Logger.LogInfo($"{pad}{propDesc.MemberName} {propDesc.Type.LinkingType} - ["); } object? value = cached?.Getter(ref obj); - MetaSerializer serializer = - Toolkit.Instance.GetSerializer(cached?.Property.PropertyType ?? propDesc.Type.LinkingType); + MetaSerializer serializer = cached?.Serializer.Value ?? Toolkit.Instance.GetSerializer(cached?.Property.PropertyType ?? propDesc.Type.LinkingType); + serializer.PreSerialize(ref value, stream, propDesc.Type); - serializer.Serialize(ref value, stream); + serializer.Serialize(ref value, stream, propDesc.Type); + + + if (propDesc.Type.LinkingType.IsPrimitive || (propDesc.Type.LinkingType == typeof(string) || + propDesc.Type.LinkingType == typeof(byte[]) || + propDesc.Type.LinkingType == typeof(Symbol))) + { + Toolkit.Instance.Logger.LogInfo($"{pad}{propDesc.MemberName} {propDesc.Type.LinkingType} - {value}"); + } - Toolkit.Instance.Logger.LogInfo($"{propDesc.MemberName} - {value}"); if (stream.Mode is MetaStreamMode.Read) cached?.Setter(ref obj, value); @@ -97,19 +147,28 @@ public override void Serialize(ref T obj, MetaStream stream) propDesc.Type.LinkingType == typeof(byte[]) || propDesc.Type.LinkingType == typeof(Symbol)) { - } else { stream.EndObject(propDesc.MemberName); + Toolkit.Instance.Logger.LogInfo($"{pad}]"); } if (propDesc.Type.IsBlocked()) - stream.EndBlock(); + { + try + { + stream.EndBlock(); + } + catch + { + //throw; + } + } } + stream.DefaultSectionDepth--; stream.EndObject(typeof(T).Name); - Toolkit.Instance.Logger.LogInfo($"Ending {typeof(T).Name}."); } public override void PreSerialize(ref T? obj, MetaStream stream, MetaClassType? type = null) @@ -132,32 +191,40 @@ public override void PreSerialize(ref T? obj, MetaStream stream, MetaClassType? if (MemberCache.TryGetValue((propDesc.MemberName, propDesc.Type.LinkingType), out CachedMember? cached)) return cached; - // 2. Enum/flag fallback: the member's type is an int, but also an enum - if ((propDesc.IsEnumType() || propDesc.IsFlagType()) && propDesc.Type.LinkingType.IsPrimitive) - { - CachedMember? cachedAlt = MemberCache - .FirstOrDefault(kvp => kvp.Key.Item1 == propDesc.MemberName && kvp.Value.Property.PropertyType.IsEnum) - .Value; - if (cachedAlt != null) - return cachedAlt; - } - - // 5. int<->Flags - if (propDesc.Type.LinkingType == typeof(int)) - { - if (MemberCache.TryGetValue((propDesc.MemberName, typeof(Flags)), out CachedMember? cachedAlt)) - return cachedAlt; - } - - // Final: First available - if (propDesc.Type.LinkingType == typeof(int) || propDesc.Type.LinkingType == typeof(uint)) - { - CachedMember? cachedAltFinal = MemberCache - .FirstOrDefault(kvp => kvp.Key.Item1 == propDesc.MemberName) - .Value; - if (cachedAltFinal != null) - return cachedAltFinal; - } + // // 2. Enum/flag fallback: the member's type is an int, but also an enum + // if ((propDesc.IsEnumType() || propDesc.IsFlagType()) && propDesc.Type.LinkingType.IsPrimitive) + // { + // CachedMember? cachedAlt = MemberCache + // .FirstOrDefault(kvp => kvp.Key.Item1 == propDesc.MemberName && kvp.Value.Property.PropertyType.IsEnum) + // .Value; + // if (cachedAlt != null) + // return cachedAlt; + // } + // + // // 5. int<->Flags + // if (propDesc.Type.LinkingType == typeof(int)) + // { + // if (MemberCache.TryGetValue((propDesc.MemberName, typeof(Flags)), out CachedMember? cachedAlt)) + // return cachedAlt; + // } + // + // // Final: First available + // if (propDesc.Type.LinkingType == typeof(int) || propDesc.Type.LinkingType == typeof(uint)) + // { + // CachedMember? cachedAltFinal = MemberCache + // .FirstOrDefault(kvp => kvp.Key.Item1 == propDesc.MemberName) + // .Value; + // if (cachedAltFinal != null) + // return cachedAltFinal; + // } + + var inheritanceMatch = MemberCache + .FirstOrDefault(kvp => + kvp.Key.Item1 == propDesc.MemberName && propDesc.Type.LinkingType.IsAssignableFrom(kvp.Value.Property.PropertyType) + ); + + if (inheritanceMatch.Value != null) + return inheritanceMatch.Value; Toolkit.Instance.Logger.LogError( $"Property {propDesc.MemberName} with type {propDesc.Type.LinkingType} not found in class {typeof(T)}"); @@ -172,28 +239,22 @@ public override void PreSerialize(ref T? obj, MetaStream stream, MetaClassType? // Getter delegate, uses ref for correct struct handling private static FuncRefGetter CreateGetterDelegate(PropertyInfo prop) { - return (ref T instance) => prop.GetValue(instance); + var instance = Expression.Parameter(typeof(T).MakeByRefType(), "obj"); + var propertyAccess = Expression.Property(instance, prop); + var convert = Expression.Convert(propertyAccess, typeof(object)); + return Expression.Lambda>(convert, instance).Compile(); } - // Setter delegate, uses ref for correct struct handling private static ActionRefSetter CreateSetterDelegate(PropertyInfo prop) { if (!prop.CanWrite) - return (ref T instance, object? value) => { }; - - if (typeof(T).IsValueType) - { - // For structs, use boxing: unbox, set, re-assign - return (ref T instance, object? value) => - { - object boxed = instance!; - prop.SetValue(boxed, value); - instance = (T)boxed; - }; - } + return (ref T obj, object? value) => { }; - // For classes, direct set - return (ref T instance, object? value) => { prop.SetValue(instance, value); }; + var instance = Expression.Parameter(typeof(T).MakeByRefType(), "obj"); + var value = Expression.Parameter(typeof(object), "val"); + var castValue = Expression.Convert(value, prop.PropertyType); + var assign = Expression.Assign(Expression.Property(instance, prop), castValue); + return Expression.Lambda>(assign, instance, value).Compile(); } private class CachedMember @@ -201,5 +262,6 @@ private class CachedMember public PropertyInfo Property = null!; public FuncRefGetter Getter = null!; public ActionRefSetter Setter = null!; + public Lazy Serializer = null!; } } diff --git a/src/TelltaleToolKit/Meta/Serialization/Serializers/PrimitiveTypeSerializer.cs b/src/TelltaleToolKit/Meta/Serialization/Serializers/PrimitiveTypeSerializer.cs index d98d296..06fcd94 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Serializers/PrimitiveTypeSerializer.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Serializers/PrimitiveTypeSerializer.cs @@ -2,11 +2,21 @@ namespace TelltaleToolKit.Meta.Serialization.Serializers; +[MetaSerializer(typeof(CharSerializer))] +public sealed class CharSerializer : MetaSerializer +{ + /// + public override void Serialize(ref char obj, MetaStream stream, MetaClassType? type = null) + { + stream.Serialize(ref obj); + } +} + [MetaSerializer(typeof(BoolSerializer))] public sealed class BoolSerializer : MetaSerializer { /// - public override void Serialize(ref bool obj, MetaStream stream) + public override void Serialize(ref bool obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -16,7 +26,7 @@ public override void Serialize(ref bool obj, MetaStream stream) public sealed class SByteSerializer : MetaSerializer { /// - public override void Serialize(ref sbyte obj, MetaStream stream) + public override void Serialize(ref sbyte obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -26,7 +36,7 @@ public override void Serialize(ref sbyte obj, MetaStream stream) public sealed class ByteSerializer : MetaSerializer { /// - public override void Serialize(ref byte obj, MetaStream stream) + public override void Serialize(ref byte obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -36,7 +46,7 @@ public override void Serialize(ref byte obj, MetaStream stream) public sealed class Int16Serializer : MetaSerializer { /// - public override void Serialize(ref short obj, MetaStream stream) + public override void Serialize(ref short obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -46,7 +56,7 @@ public override void Serialize(ref short obj, MetaStream stream) public sealed class UInt16Serializer : MetaSerializer { /// - public override void Serialize(ref ushort obj, MetaStream stream) + public override void Serialize(ref ushort obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -56,7 +66,7 @@ public override void Serialize(ref ushort obj, MetaStream stream) public sealed class Int32Serializer : MetaSerializer { /// - public override void Serialize(ref int obj, MetaStream stream) + public override void Serialize(ref int obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -66,7 +76,7 @@ public override void Serialize(ref int obj, MetaStream stream) public sealed class UInt32Serializer : MetaSerializer { /// - public override void Serialize(ref uint obj, MetaStream stream) + public override void Serialize(ref uint obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -76,7 +86,7 @@ public override void Serialize(ref uint obj, MetaStream stream) public sealed class Int64Serializer : MetaSerializer { /// - public override void Serialize(ref long obj, MetaStream stream) + public override void Serialize(ref long obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -86,7 +96,7 @@ public override void Serialize(ref long obj, MetaStream stream) public sealed class UInt64Serializer : MetaSerializer { /// - public override void Serialize(ref ulong obj, MetaStream stream) + public override void Serialize(ref ulong obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -96,7 +106,7 @@ public override void Serialize(ref ulong obj, MetaStream stream) public sealed class SingleSerializer : MetaSerializer { /// - public override void Serialize(ref float obj, MetaStream stream) + public override void Serialize(ref float obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -106,7 +116,7 @@ public override void Serialize(ref float obj, MetaStream stream) public sealed class DoubleSerializer : MetaSerializer { /// - public override void Serialize(ref double obj, MetaStream stream) + public override void Serialize(ref double obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -116,7 +126,7 @@ public override void Serialize(ref double obj, MetaStream stream) public sealed class StringSerializer : MetaSerializer { /// - public override void Serialize(ref string obj, MetaStream stream) + public override void Serialize(ref string obj, MetaStream stream, MetaClassType? type = null) { stream.Serialize(ref obj); } @@ -130,7 +140,7 @@ public override void PreSerialize(ref string? obj, MetaStream stream, MetaClassT public sealed class EnumSerializer : MetaSerializer where TEnum : Enum { /// - public override void Serialize(ref TEnum obj, MetaStream stream) + public override void Serialize(ref TEnum obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { diff --git a/src/TelltaleToolKit/Meta/Serialization/Serializers/SymbolSerializer.cs b/src/TelltaleToolKit/Meta/Serialization/Serializers/SymbolSerializer.cs index 620156d..aac34fd 100644 --- a/src/TelltaleToolKit/Meta/Serialization/Serializers/SymbolSerializer.cs +++ b/src/TelltaleToolKit/Meta/Serialization/Serializers/SymbolSerializer.cs @@ -1,4 +1,5 @@ -using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Hashing; +using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.T3Types; namespace TelltaleToolKit.Meta.Serialization.Serializers; @@ -11,7 +12,7 @@ public override void PreSerialize(ref Symbol? obj, MetaStream stream, MetaClassT obj ??= Symbol.Empty; } - public override void Serialize(ref Symbol obj, MetaStream stream) + public override void Serialize(ref Symbol obj, MetaStream stream, MetaClassType? type = null) { MetaClass? description = stream.GetMetaClass(typeof(Symbol)); @@ -25,6 +26,24 @@ public override void Serialize(ref Symbol obj, MetaStream stream) stream.AddVersionInfo(description); } - stream.Serialize(ref obj); + ulong crc64 = stream.ReadUInt64(); + obj = Symbol.FromCrc64(crc64); + stream.Params.SerializedSymbols.Add(obj); + + // What the helly, there's actually debug (although empty) string for symbols. + // I am doing a hard unverified check, I haven't seen any symbols with debug string with MSV5 or MSV6. + // Poker Night 2 might be different, but I doubt it + if (stream.Params.StreamVersion <= 3) + { + string debug = stream.ReadString(); + if (!string.IsNullOrEmpty(debug) && Crc64.Compute(debug) == obj.Crc64) + { + obj = Symbol.FromExplicit(debug, obj.Crc64); + } + else if (Crc64.Compute(debug) != obj.Crc64 && debug.Length > 0) + { + Toolkit.Instance.Logger.LogWarning($"Symbol debug string mismatch: {debug} != {obj.Crc64}"); + } + } } } diff --git a/src/TelltaleToolKit/T3Types/ActorMaps/T3VertexBufferSample.cs b/src/TelltaleToolKit/T3Types/ActorMaps/T3VertexBufferSample.cs new file mode 100644 index 0000000..cd6d647 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/ActorMaps/T3VertexBufferSample.cs @@ -0,0 +1,94 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.ActorMaps; + +[MetaSerializer(typeof(T3VertexBufferSample<>.Serializer), typeof(T3VertexBufferSample<>))] +public class T3VertexBufferSample where T : T3VertexSampleDatabase +{ + public T3VertexSampleDatabase Data { get; set; } = new(); + + public class Serializer : MetaSerializer> + { + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void PreSerialize(ref T3VertexBufferSample? obj, MetaStream stream, + MetaClassType? type = null) + { + obj ??= new T3VertexBufferSample(); + } + + public override void Serialize(ref T3VertexBufferSample obj, MetaStream stream, MetaClassType? type = null) + { + T3VertexSampleDatabase t3VertexSampleDatabase = obj.Data; + s_metaClassSerializer.PreSerialize(ref t3VertexSampleDatabase!, stream); + s_metaClassSerializer.Serialize(ref t3VertexSampleDatabase, stream); + } + } +} + +[MetaSerializer(typeof(Serializer))] +public class T3VertexSampleDatabase +{ + [MetaMember("mNumVerts")] + public int NumVertices { get; set; } + + [MetaMember("mVertSize")] + public int VertSize { get; set; } + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void PreSerialize(ref T3VertexSampleDatabase? obj, MetaStream stream, + MetaClassType? type = null) + { + obj ??= new T3VertexSampleDatabase(); + } + + public override void Serialize(ref T3VertexSampleDatabase obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSerializer.PreSerialize(ref obj!, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + byte[] data = new byte[obj.NumVertices * obj.VertSize]; + stream.ReadBytes(data); + // TODO: + } + } + } +} + +[MetaSerializer(typeof(Serializer))] +public class T3NormalSampleData : T3VertexSampleDatabase +{ + public new class Serializer : MetaSerializer + { + public override void Serialize(ref T3NormalSampleData obj, MetaStream stream, MetaClassType? type = null) + { + T3VertexSampleDatabase objData = obj; + stream.Serialize(ref objData); + obj = (T3NormalSampleData)objData; + } + } +} + +[MetaSerializer(typeof(Serializer))] +public class T3PositionSampleData : T3VertexSampleDatabase +{ + public new class Serializer : MetaSerializer + { + public override void Serialize(ref T3PositionSampleData obj, MetaStream stream, MetaClassType? type = null) + { + T3VertexSampleDatabase objData = obj; + stream.Serialize(ref objData); + obj = (T3PositionSampleData)objData; + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/AnimatedValueInterface.cs b/src/TelltaleToolKit/T3Types/Animations/AnimatedValueInterface.cs deleted file mode 100644 index a53895e..0000000 --- a/src/TelltaleToolKit/T3Types/Animations/AnimatedValueInterface.cs +++ /dev/null @@ -1,24 +0,0 @@ -using TelltaleToolKit.Meta.Reflection; -using TelltaleToolKit.Meta.Serialization; -using TelltaleToolKit.Meta.Serialization.Serializers; - -namespace TelltaleToolKit.T3Types.Animations; - -// TODO: Add interface -[MetaSerializer(typeof(AnimatedValueInterface<>.Serializer), typeof(AnimatedValueInterface<>))] -public class AnimatedValueInterface : IAnimatedValueInterface -{ - [MetaMember("Baseclass_AnimationValueInterfaceBase")] - public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); - - public class Serializer : MetaSerializer> - { - private static readonly MetaClassSerializer> s_metaClassSerializer = new(); - - public override void Serialize(ref AnimatedValueInterface obj, MetaStream stream) - { - s_metaClassSerializer.PreSerialize(ref obj, stream); - s_metaClassSerializer.Serialize(ref obj, stream); - } - } -} diff --git a/src/TelltaleToolKit/T3Types/Animations/Animation.cs b/src/TelltaleToolKit/T3Types/Animations/Animation.cs index 63d6440..b713c9f 100644 --- a/src/TelltaleToolKit/T3Types/Animations/Animation.cs +++ b/src/TelltaleToolKit/T3Types/Animations/Animation.cs @@ -38,7 +38,7 @@ public class InterfaceInfo public List Descriptors { get; set; } = []; - public List Values { get; set; } = []; + public List Values { get; set; } = []; public byte[] Buffer = []; @@ -46,7 +46,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref Animation obj, MetaStream stream) + public override void Serialize(ref Animation obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); @@ -68,7 +68,7 @@ public override void Serialize(ref Animation obj, MetaStream stream) if (stream.Mode is MetaStreamMode.Read) { int numTotalValues = stream.ReadInt32(); - obj.Values = new List(numTotalValues); + obj.Values = new List(numTotalValues); // Runtime buffer (not needed for now) int dataBufferSize = stream.ReadInt32(); @@ -81,7 +81,14 @@ public override void Serialize(ref Animation obj, MetaStream stream) { MetaClassType? typeSymbol = stream.ReadMetaClassType(); // The type of the class if (typeSymbol is null) - throw new InvalidOperationException("[Animation] Type symbol is not registered."); + { + // Graceful crash if the type is not registered. + // This is extremely rare, only a handful of files have been identified to have unregistered types. + // I assume those are leftovers from the editor, but somehow got into the main game. + // Also, it's possible that the asset is not used at all. + stream.EndBlock(); + return; + } int numOfType = stream.ReadInt16(); // The number of times that type has been serialized // TODO: Verify what these versions actually represent. @@ -105,18 +112,25 @@ public override void Serialize(ref Animation obj, MetaStream stream) { object? propertyValue = null; - serializer.PreSerialize(ref propertyValue, stream); - serializer.Serialize(ref propertyValue, stream); + serializer.PreSerialize(ref propertyValue, stream, desc.Type); + serializer.Serialize(ref propertyValue, stream, desc.Type); + + if (propertyValue is IAnimationValueInterface value) + { - if (propertyValue is IAnimatedValueInterface value) obj.Values.Add(value); + } + else + { + throw new InvalidOperationException($"[Animation] Expected {nameof(IAnimationValueInterface)} but got {propertyValue?.GetType().Name ?? "null"}"); + } } } // These are very weird hacks by Telltale. What an...interesting system // If for some reason the serializer for the baseclass of type `AnimationValueInterfaceBase` is not called, // we read its values - the Symbol (CRC64 in this case) and the flags. - foreach (IAnimatedValueInterface value in obj.Values) + foreach (IAnimationValueInterface value in obj.Values) { // TODO: Set other flags? value.AnimationValueInterfaceBase.Flags = stream.ReadInt32(); @@ -126,9 +140,10 @@ public override void Serialize(ref Animation obj, MetaStream stream) if (isNotInterface == 0) { - foreach (IAnimatedValueInterface value in obj.Values) + // TODO: Symbol vs String + foreach (IAnimationValueInterface value in obj.Values) { - value.AnimationValueInterfaceBase.Name = stream.ReadSymbol(); + value.AnimationValueInterfaceBase.NameS = stream.ReadSymbol(); } } } @@ -136,7 +151,6 @@ public override void Serialize(ref Animation obj, MetaStream stream) stream.EndBlock(); } - public void SerializeOldAnimation(ref Animation obj, MetaStream stream) { if (stream.Mode is MetaStreamMode.Write) @@ -163,8 +177,8 @@ public void SerializeOldAnimation(ref Animation obj, MetaStream stream) { object? propertyValue = null; - serializer.PreSerialize(ref propertyValue, stream); - serializer.Serialize(ref propertyValue, stream); + serializer.PreSerialize(ref propertyValue, stream, typeSymbol); + serializer.Serialize(ref propertyValue, stream, typeSymbol); numTotalValues++; } } diff --git a/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterface.cs b/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterface.cs new file mode 100644 index 0000000..780f879 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterface.cs @@ -0,0 +1,29 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(AnimationValueInterface<>.Serializer), typeof(AnimationValueInterface<>))] +public class AnimationValueInterface : IAnimationValueInterface +{ + [MetaMember("Baseclass_AnimationValueInterfaceBase")] + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); + + public class Serializer : MetaSerializer> + { + private static readonly MetaClassSerializer> s_metaClassSerializer = new(); + + public override void PreSerialize(ref AnimationValueInterface? obj, MetaStream stream, + MetaClassType? type = null) + { + obj ??= new AnimationValueInterface(); + } + + public override void Serialize(ref AnimationValueInterface obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSerializer.PreSerialize(ref obj!, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterfaceBase.cs b/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterfaceBase.cs index 4560771..64e2dde 100644 --- a/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterfaceBase.cs +++ b/src/TelltaleToolKit/T3Types/Animations/AnimationValueInterfaceBase.cs @@ -7,12 +7,20 @@ namespace TelltaleToolKit.T3Types.Animations; [MetaSerializer(typeof(MetaClassSerializer))] public class AnimationValueInterfaceBase { - // Both Symbol and a String [MetaMember("mName")] - public Symbol Name { get; set; } + public Symbol NameS { get; set; } = Symbol.Empty; + + [MetaMember("mName")] + public string Name { get; set; } = string.Empty; [MetaMember("mFlags")] public int Flags { get; set; } + [MetaMember("mExtrapolationModeBefore")] + public int ExtrapolationModeBefore { get; set; } + + [MetaMember("mExtrapolationModeAfter")] + public int ExtrapolationModeAfter { get; set; } + public short Version { get; set; } = 0; } diff --git a/src/TelltaleToolKit/T3Types/Animations/BlendEntry.cs b/src/TelltaleToolKit/T3Types/Animations/BlendEntry.cs new file mode 100644 index 0000000..378789d --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/BlendEntry.cs @@ -0,0 +1,25 @@ +using System.Numerics; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class BlendEntry +{ + [MetaMember("mParameterValues")] + public Vector3 ParameterValues { get; set; } + + [MetaMember("mAnimOrChore")] + public AnimOrChore AnimOrChore { get; set; } + + [MetaMember("mCorrespondencePoints")] + public List CorrespondencePoints { get; set; } = []; + + [MetaMember("mfAnimOrChoreLength")] + public float AnimOrChoreLength { get; set; } + + [MetaMember("mComment")] + public string Comment { get; set; } = string.Empty; +} diff --git a/src/TelltaleToolKit/T3Types/Animations/BlendGraph.cs b/src/TelltaleToolKit/T3Types/Animations/BlendGraph.cs new file mode 100644 index 0000000..8e1ef28 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/BlendGraph.cs @@ -0,0 +1,115 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Chores; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class BlendGraph +{ + public object Geometry; + + [MetaMember("mParameters")] + public List Parameters { get; set; } = []; + + [MetaMember("mFrozenParameterNames")] + public List FrozenParameterNames { get; set; } = []; + + [MetaMember("mDampeningConstants")] + public List DampeningConstants { get; set; } = []; + + [MetaMember("mEntries")] + public List Entries { get; set; } = []; + + [MetaMember("mBlendGraphType")] + public EnumBlendGraphType BlendGraphTypeT { get; set; } + + [MetaMember("mDampen")] + public bool Dampen { get; set; } + + [MetaMember("mbInvertParameters")] + public int InvertParameters { get; set; } + + [MetaMember("mfTimeScale")] + public float TimeScale { get; set; } + + [MetaMember("mComment")] + public string Comment { get; set; } = string.Empty; + + [MetaMember("mhBlendGraphAuxiliaryChore")] + public Handle BlendGraphAuxiliaryChore { get; set; } + + [MetaMember("mVersion")] + public int Version { get; set; } + + [MetaMember("mNumGeometryDimensions")] + public int NumGeometryDimensions { get; set; } + + [MetaMember("mNumDimensions")] + public int NumDimensions { get; set; } + + [MetaMember("mParameterOrder")] + public List ParameterOrder { get; set; } = []; + + + [MetaSerializer(typeof(EnumSerializer))] + public enum BlendGraphType + { + Looping = 0, + NonLooping = 1 + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumBlendGraphType + { + [MetaMember("mVal")] + public BlendGraphType Val { get; set; } + } + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void Serialize(ref BlendGraph obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + } + else if (stream.Mode is MetaStreamMode.Read) + { + bool hasGeometry = stream.ReadBoolean(); + + if (!hasGeometry) + { + return; + } + + // What the hell + + Type type1 = obj.NumDimensions switch + { + 1 => typeof(KeyframedValue), + 2 => typeof(Dictionary>), + 3 => typeof(Dictionary>>), + _ => throw new ArgumentOutOfRangeException() + }; + + obj.Geometry = obj.NumDimensions switch + { + 1 => new KeyframedValue(), + 2 => new Dictionary>(), + 3 => new Dictionary>>(), + _ => obj.Geometry + }; + + MetaSerializer typeSerializer = Toolkit.Instance.GetSerializer(type1); + typeSerializer.PreSerialize(ref obj.Geometry, stream); + typeSerializer.Serialize(ref obj.Geometry, stream); + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/BlendGraphManager.cs b/src/TelltaleToolKit/T3Types/Animations/BlendGraphManager.cs new file mode 100644 index 0000000..233d024 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/BlendGraphManager.cs @@ -0,0 +1,47 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Animations; + +// .BGM +[MetaSerializer(typeof(MetaClassSerializer))] +public class BlendGraphManager +{ + [MetaMember( "mfTransitionTime")] + public float TransitionTime { get; set; } + [MetaMember( "mIdleAnimOrChore")] + public AnimOrChore IdleAnimOrChore { get; set; } + [MetaMember( "mbUseAnimationMoverData")] + public bool UseAnimationMoverData { get; set; } + [MetaMember( "mhFreewalkStartGraph")] + public Handle FreewalkStartGraph { get; set; } + [MetaMember( "mhFreewalkLoopGraph")] + public Handle FreewalkLoopGraph { get; set; } + [MetaMember( "mhFreewalkStopGraph")] + public Handle FreewalkStopGraph { get; set; } + [MetaMember( "mhTurnToFaceGraph")] + public Handle TurnToFaceGraph { get; set; } + [MetaMember( "mhChoredMovementStartGraph")] + public Handle ChoredMovementStartGraph { get; set; } + [MetaMember( "mhChoredMovementLoopGraph")] + public Handle ChoredMovementLoopGraph { get; set; } + [MetaMember( "mhChoredMovementStopGraph")] + public Handle ChoredMovementStopGraph { get; set; } + [MetaMember( "mVersion")] + public int Version { get; set; } + [MetaMember( "mbUseAlgorithmicHeadTurn")] + public bool UseAlgorithmicHeadTurn { get; set; } + [MetaMember( "mfMaxManualSteeringVelocityInDegrees")] + public float MaxManualSteeringVelocityInDegrees { get; set; } + [MetaMember( "mfMinManualSteeringVelocityInDegrees")] + public float MinManualSteeringVelocityInDegrees { get; set; } + [MetaMember( "mfMaxLeanInPercentVelocity")] + public float MaxLeanInPercentVelocity { get; set; } + [MetaMember( "mfMinLeanInPercentVelocity")] + public float MinLeanInPercentVelocity { get; set; } + [MetaMember( "mfWalkSpeedScale")] + public float WalkSpeedScale { get; set; } + [MetaMember( "mfRunSpeedScale")] + public float RunSpeedScale { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedKeys.cs new file mode 100644 index 0000000..83af43c --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedKeys.cs @@ -0,0 +1,57 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(CompressedKeys<>.Serializer), typeof(CompressedKeys<>))] +public class CompressedKeys : IAnimationValueInterface +{ + [MetaMember("Baseclass_AnimationValueInterfaceBase")] + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); + + public List Keys { get; set; } = []; + public List Times { get; set; } = []; + public byte[] Tangents = []; + + public class Serializer : MetaSerializer> + { + public override void PreSerialize(ref CompressedKeys? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new CompressedKeys(); + } + + public override void Serialize(ref CompressedKeys obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + stream.Write((short)obj.Keys.Count); + + for (short i = 0; i < obj.Keys.Count; i++) + { + T objKey = obj.Keys[i]; + stream.Serialize(ref objKey); + stream.Write(obj.Times[i]); + } + + stream.Write(obj.Tangents); + } + else + { + int numKeys = stream.ReadInt16(); + obj.Keys = new List(numKeys); + + for (int i = 0; i < numKeys; i++) + { + var key = default(T); + stream.Serialize(ref key); + obj.Keys.Add(key); + + var time = stream.ReadSingle(); + obj.Times.Add(time); + } + + obj.Tangents = stream.ReadBytes((numKeys + 3) / 4); + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedPathBlockingValue.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedPathBlockingValue.cs new file mode 100644 index 0000000..687bdb9 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedPathBlockingValue.cs @@ -0,0 +1,42 @@ +using System.Numerics; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Skeletons; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class CompressedPathBlockingValue : IAnimationValueInterface +{ + [MetaMember("Baseclass_KeyframedValue")] + public KeyframedValue BaseclassCompressedPathBlockingValue { get; set; } = new(); + + [MetaMember("mCompressedPathInfoKeys")] + public KeyframedValue CompressedPathInfoKeys { get; set; } = new(); + + [MetaMember("mAgentName")] + public Symbol AgentName { get; set; } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class CompressedPathInfoKey + { + [MetaMember("mFocusAgentName")] + public Symbol FocusAgentName { get; set; } + + [MetaMember("mFocusAgentBoneName")] + public Symbol FocusAgentBoneName { get; set; } + + [MetaMember("mFocusAgentOffset")] + public Vector3 FocusAgentOffset { get; set; } + + [MetaMember("mfDampingFactor")] + public float DampingFactor { get; set; } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase + { + get => BaseclassCompressedPathBlockingValue.AnimationValueInterfaceBase; + set => BaseclassCompressedPathBlockingValue.AnimationValueInterfaceBase = value; + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedPhonemeKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedPhonemeKeys.cs new file mode 100644 index 0000000..d8a1bfe --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedPhonemeKeys.cs @@ -0,0 +1,43 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class CompressedPhonemeKeys : IAnimationValueInterface +{ + public byte[] Buffer { get; set; } = []; + + public CompressedTimeKeys CompressedTimeKeys { get; set; } + + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref CompressedPhonemeKeys? obj, MetaStream stream, + MetaClassType? type = null) => + obj ??= new CompressedPhonemeKeys(); + + public override void Serialize(ref CompressedPhonemeKeys obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + byte first = stream.ReadByte(); + int len; + if (first == 255) + len = stream.ReadUInt16(); + else + len = first; + + obj.Buffer = stream.ReadBytes((len * 8 + 7) / 8); + + CompressedTimeKeys compressedTimeKeys = new(); + stream.Serialize(ref compressedTimeKeys); + obj.CompressedTimeKeys = compressedTimeKeys; + } + } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys.cs index a0dfaa9..1b64ccf 100644 --- a/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys.cs +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys.cs @@ -1,3 +1,4 @@ +using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.T3Types.Animations; @@ -14,7 +15,7 @@ public class CompressedQuaternionKeys public class Serializer : MetaSerializer { - public override void Serialize(ref CompressedQuaternionKeys obj, MetaStream stream) + public override void Serialize(ref CompressedQuaternionKeys obj, MetaStream stream, MetaClassType? type = null) { // TODO: Test this type. diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys2.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys2.cs new file mode 100644 index 0000000..539a444 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedQuaternionKeys2.cs @@ -0,0 +1,43 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class CompressedQuaternionKeys2 : IAnimationValueInterface +{ + public byte[] Buffer { get; set; } = []; + + public CompressedTimeKeys CompressedTimeKeys { get; set; } + + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref CompressedQuaternionKeys2? obj, MetaStream stream, + MetaClassType? type = null) => + obj ??= new CompressedQuaternionKeys2(); + + public override void Serialize(ref CompressedQuaternionKeys2 obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + byte first = stream.ReadByte(); + int len; + if (first == 255) + len = stream.ReadUInt16(); + else + len = first; + + obj.Buffer = stream.ReadBytes((len * 8 + 7) / 8); + + CompressedTimeKeys compressedTimeKeys = new(); + stream.Serialize(ref compressedTimeKeys); + obj.CompressedTimeKeys = compressedTimeKeys; + } + } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys.cs index 2a86efc..b79ee7d 100644 --- a/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys.cs +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys.cs @@ -6,7 +6,7 @@ namespace TelltaleToolKit.T3Types.Animations; [MetaSerializer(typeof(Serializer))] -public class CompressedSkeletonPoseKeys : IAnimatedValueInterface +public class CompressedSkeletonPoseKeys : IAnimationValueInterface { public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); @@ -48,15 +48,15 @@ public Header GetHeader() public byte[] Data { get; set; } - public class Serializer : MetaSerializer + public class Serializer : MetaSerializer { - public override void PreSerialize(ref CompressedSkeletonPoseKeys2? obj, MetaStream stream, + public override void PreSerialize(ref CompressedSkeletonPoseKeys? obj, MetaStream stream, MetaClassType? type = null) { - obj ??= new CompressedSkeletonPoseKeys2(); + obj ??= new CompressedSkeletonPoseKeys(); } - public override void Serialize(ref CompressedSkeletonPoseKeys2 obj, MetaStream stream) + public override void Serialize(ref CompressedSkeletonPoseKeys obj, MetaStream stream, MetaClassType? type = null) { // TODO: Test this type. if (stream.Mode is MetaStreamMode.Write) @@ -67,6 +67,11 @@ public override void Serialize(ref CompressedSkeletonPoseKeys2 obj, MetaStream s // TODO: Try experimenting with Marshall. obj.DataSize = stream.ReadInt32(); // this is the size of struct + if (obj.DataSize > 0x1000000) + { + throw new InvalidOperationException("CompressedSkeletonPoseKeys data size is too big."); + } + obj.Data = stream.ReadBytes(obj.DataSize); } } diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys2.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys2.cs index f6c50d0..14d1e1c 100644 --- a/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys2.cs +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedSkeletonPoseKeys2.cs @@ -6,7 +6,7 @@ namespace TelltaleToolKit.T3Types.Animations; [MetaSerializer(typeof(Serializer))] -public class CompressedSkeletonPoseKeys2 : IAnimatedValueInterface +public class CompressedSkeletonPoseKeys2 : IAnimationValueInterface { public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); @@ -55,7 +55,7 @@ public override void PreSerialize(ref CompressedSkeletonPoseKeys2? obj, MetaStre obj ??= new CompressedSkeletonPoseKeys2(); } - public override void Serialize(ref CompressedSkeletonPoseKeys2 obj, MetaStream stream) + public override void Serialize(ref CompressedSkeletonPoseKeys2 obj, MetaStream stream, MetaClassType? type = null) { // TODO: Test this type. if (stream.Mode is MetaStreamMode.Write) diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedTimeKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedTimeKeys.cs new file mode 100644 index 0000000..ee62fa9 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedTimeKeys.cs @@ -0,0 +1,42 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class CompressedTimeKeys +{ + public byte[] BitBuffer { get; set; } = []; + public byte[] Buffer { get; set; } = []; + + public int CurrentSample { get; set; } = -1; + public int CurrentSampleInBlock { get; set; } = 1; + public float CurrentDelta { get; set; } = 0.033333335f; + public float CurrentTime { get; set; } = -0.033333335f; + public float PreviousTime { get; set; } = -0.033333335f; + public int NumBits { get; set; } = -1; + + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref CompressedTimeKeys? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new CompressedTimeKeys(); + + public override void Serialize(ref CompressedTimeKeys obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + byte first = stream.ReadByte(); + int len; + if (first == 0xFF) + len = stream.ReadUInt16(); + else + len = first; + + obj.Buffer = stream.ReadBytes((len * 8 + 7) / 8); + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedTransformKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedTransformKeys.cs new file mode 100644 index 0000000..6016324 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedTransformKeys.cs @@ -0,0 +1,43 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class CompressedTransformKeys : IAnimationValueInterface +{ + + public byte[] Buffer { get; set; } = []; + + public CompressedTimeKeys CompressedTimeKeys { get; set; } + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref CompressedTransformKeys? obj, MetaStream stream, + MetaClassType? type = null) => + obj ??= new CompressedTransformKeys(); + + public override void Serialize(ref CompressedTransformKeys obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + byte first = stream.ReadByte(); + int len; + if (first == 255) + len = stream.ReadUInt16(); + else + len = first; + + obj.Buffer = stream.ReadBytes((len * 8 + 7) / 8); + + CompressedTimeKeys compressedTimeKeys = new(); + stream.Serialize(ref compressedTimeKeys); + obj.CompressedTimeKeys = compressedTimeKeys; + } + } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys.cs index fd750cd..c79d5a0 100644 --- a/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys.cs +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys.cs @@ -1,4 +1,5 @@ using System.Numerics; +using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.T3Types.Animations; @@ -16,14 +17,26 @@ public class CompressedVector3Keys public class Serializer : MetaSerializer { - public override void Serialize(ref CompressedVector3Keys obj, MetaStream stream) + public override void Serialize(ref CompressedVector3Keys obj, MetaStream stream, MetaClassType? type = null) { // TODO: Test this type. - if (stream.Mode is MetaStreamMode.Write) { + stream.Write(obj.Name); + stream.Write(obj.Flags); + + stream.Write(obj.Min.X); + stream.Write(obj.Min.Y); + stream.Write(obj.Min.Z); + stream.Write(obj.Max.X); + stream.Write(obj.Max.Y); + stream.Write(obj.Max.Z); + stream.Write(obj.MinTime); + stream.Write(obj.MaxTime); + stream.Write((short)(obj.Buffer.Length / 6)); + stream.Write(obj.Buffer); } - else if (stream.Mode is MetaStreamMode.Read) + else { obj.Name = stream.ReadString(); obj.Flags = stream.ReadInt32(); diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys2.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys2.cs new file mode 100644 index 0000000..61681d4 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedVector3Keys2.cs @@ -0,0 +1,43 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class CompressedVector3Keys2 : IAnimationValueInterface +{ + public byte[] Buffer { get; set; } = []; + + public CompressedTimeKeys CompressedTimeKeys { get; set; } + + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref CompressedVector3Keys2? obj, MetaStream stream, + MetaClassType? type = null) => + obj ??= new CompressedVector3Keys2(); + + public override void Serialize(ref CompressedVector3Keys2 obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + byte first = stream.ReadByte(); + int len; + if (first == 255) + len = stream.ReadUInt16(); + else + len = first; + + obj.Buffer = stream.ReadBytes((len * 8 + 7) / 8); + + CompressedTimeKeys compressedTimeKeys = new(); + stream.Serialize(ref compressedTimeKeys); + obj.CompressedTimeKeys = compressedTimeKeys; + } + } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedVertexNormalKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedVertexNormalKeys.cs new file mode 100644 index 0000000..39bd27b --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedVertexNormalKeys.cs @@ -0,0 +1,6 @@ +namespace TelltaleToolKit.T3Types.Animations; + +public class CompressedVertexNormalKeys +{ + +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CompressedVertexPositionKeys.cs b/src/TelltaleToolKit/T3Types/Animations/CompressedVertexPositionKeys.cs new file mode 100644 index 0000000..d078f95 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CompressedVertexPositionKeys.cs @@ -0,0 +1,6 @@ +namespace TelltaleToolKit.T3Types.Animations; + +public class CompressedVertexPositionKeys +{ + +} diff --git a/src/TelltaleToolKit/T3Types/Animations/CorrespondencePoint.cs b/src/TelltaleToolKit/T3Types/Animations/CorrespondencePoint.cs new file mode 100644 index 0000000..4cf254d --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/CorrespondencePoint.cs @@ -0,0 +1,36 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class CorrespondencePoint +{ + [MetaMember("mFlags")] + public Flags Flags { get; set; } + + [MetaMember("mEaseOutStartFlags")] + public Flags EaseOutStartFlags { get; set; } + + [MetaMember("mEaseOutEndFlags")] + public Flags EaseOutEndFlags { get; set; } + + [MetaMember("mEaseInStartFlags")] + public Flags EaseInStartFlags { get; set; } + + [MetaMember("mEaseInEndFlags")] + public Flags EaseInEndFlags { get; set; } + + [MetaMember("mSteeringFlags")] + public Flags SteeringFlags { get; set; } + + [MetaMember("mTransitionFlags")] + public Flags TransitionFlags { get; set; } + + [MetaMember("mfTime")] + public float Time { get; set; } + + [MetaMember("mComment")] + public string Comment { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/IAnimatedValueInterface.cs b/src/TelltaleToolKit/T3Types/Animations/IAnimationValueInterface.cs similarity index 88% rename from src/TelltaleToolKit/T3Types/Animations/IAnimatedValueInterface.cs rename to src/TelltaleToolKit/T3Types/Animations/IAnimationValueInterface.cs index b6ef518..edea70d 100644 --- a/src/TelltaleToolKit/T3Types/Animations/IAnimatedValueInterface.cs +++ b/src/TelltaleToolKit/T3Types/Animations/IAnimationValueInterface.cs @@ -3,7 +3,7 @@ namespace TelltaleToolKit.T3Types.Animations; // C# doesn't support multiple inheritance. // So, the only place where I use inheritance for Telltale types are the Handles (since they don't have meta members) -public interface IAnimatedValueInterface +public interface IAnimationValueInterface { public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } -} \ No newline at end of file +} diff --git a/src/TelltaleToolKit/T3Types/Animations/KeyframedValue.cs b/src/TelltaleToolKit/T3Types/Animations/KeyframedValue.cs index 45d3ba3..dcdac84 100644 --- a/src/TelltaleToolKit/T3Types/Animations/KeyframedValue.cs +++ b/src/TelltaleToolKit/T3Types/Animations/KeyframedValue.cs @@ -5,15 +5,15 @@ namespace TelltaleToolKit.T3Types.Animations; [MetaSerializer(typeof(KeyframedValue<>.Serializer), typeof(KeyframedValue<>))] -public class KeyframedValue : IAnimatedValueInterface where T : notnull +public class KeyframedValue : IAnimationValueInterface where T : notnull { [MetaMember("Baseclass_AnimatedValueInterface")] - public AnimatedValueInterface BaseClassAnimatedValueInterface { get; set; } = new(); + public AnimationValueInterface BaseClassAnimationValueInterface { get; set; } = new(); public AnimationValueInterfaceBase AnimationValueInterfaceBase { - get => BaseClassAnimatedValueInterface.AnimationValueInterfaceBase; - set => BaseClassAnimatedValueInterface.AnimationValueInterfaceBase = value; + get => BaseClassAnimationValueInterface.AnimationValueInterfaceBase; + set => BaseClassAnimationValueInterface.AnimationValueInterfaceBase = value; } [MetaMember("mMinVal")] @@ -44,7 +44,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref Sample obj, MetaStream stream) + public override void Serialize(ref Sample obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); @@ -56,7 +56,12 @@ public class Serializer : MetaSerializer> { private static readonly MetaClassSerializer> s_metaClassSerializer = new(); - public override void Serialize(ref KeyframedValue obj, MetaStream stream) + public override void PreSerialize(ref KeyframedValue? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new KeyframedValue(); + } + + public override void Serialize(ref KeyframedValue obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Animations/KeyframedValueSteppedString.cs b/src/TelltaleToolKit/T3Types/Animations/KeyframedValueSteppedString.cs new file mode 100644 index 0000000..c919087 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/KeyframedValueSteppedString.cs @@ -0,0 +1,12 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class KeyframedValueSteppedString +{ + [MetaMember("Baseclass_KeyframedValue")] + public KeyframedValue BaseClassKeyframedValue { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Animations/PhonemeTable.cs b/src/TelltaleToolKit/T3Types/Animations/PhonemeTable.cs index 4cf5dcb..ddcef6d 100644 --- a/src/TelltaleToolKit/T3Types/Animations/PhonemeTable.cs +++ b/src/TelltaleToolKit/T3Types/Animations/PhonemeTable.cs @@ -18,6 +18,9 @@ public class PhonemeEntry [MetaMember("mTimeScalar")] public float TimeScalar { get; set; } = 1.0f; + + [MetaMember("mRelativePriority")] + public int RelativePriority { get; set; } } [MetaMember("mName")] diff --git a/src/TelltaleToolKit/T3Types/Animations/ProceduralEyes.cs b/src/TelltaleToolKit/T3Types/Animations/ProceduralEyes.cs new file mode 100644 index 0000000..42ea91e --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/ProceduralEyes.cs @@ -0,0 +1,25 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +// .EYES +[MetaSerializer(typeof(Serializer))] +public class ProceduralEyes +{ + [MetaMember("Baseclass_Animation")] + public Animation BaseclassAnimation { get; set; } = new(); + + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref ProceduralEyes? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new ProceduralEyes(); + } + + public override void Serialize(ref ProceduralEyes obj, MetaStream stream, MetaClassType? type = null) + { + // Eyes are not used?!? + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAt.cs b/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAt.cs index 3337258..b856b5e 100644 --- a/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAt.cs +++ b/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAt.cs @@ -5,8 +5,8 @@ namespace TelltaleToolKit.T3Types.Animations; -// TODO: .look Files -[MetaSerializer(typeof(Serializer))] +// .look Files +[MetaSerializer(typeof(MetaClassSerializer))] public class ProceduralLookAt { [MetaMember("Baseclass_Animation")] @@ -49,19 +49,24 @@ public class ProceduralLookAt public float LastUdWeight { get; set; } [MetaMember("mLookAtComputeStage")] - public EnumLookAtComputeStage LookAtComputeStage { get; set; } + public EnumLookAtComputeStage LookAtComputeStageE { get; set; } + [MetaSerializer(typeof(MetaClassSerializer))] public struct EnumLookAtComputeStage { [MetaMember("mVal")] - public int Val { get; set; } - // 0 = idle look at - // 1 = dialog chore look at - // 2 = final look at + public LookAtComputeStage Val { get; set; } } - [MetaSerializer(typeof(MetaClassSerializer))] + [MetaSerializer(typeof(EnumSerializer))] + public enum LookAtComputeStage + { + IdleLookAt = 0, + DialogChoreLookAt = 1, + FinalLookAt = 2 + } + [MetaSerializer(typeof(MetaClassSerializer))] public struct Constraint { [MetaMember("mMaxLeftRight")] @@ -83,33 +88,18 @@ public struct Constraint public float UpDownFixedOffset { get; set; } } - public class Serializer : MetaSerializer - { - public override void Serialize(ref ProceduralLookAt obj, MetaStream stream) - { - // TODO: Check with meta stream version. - if (stream.Mode is MetaStreamMode.Write) - { - if (stream.Params.StreamVersion >= 5) - { - return; - } - - Animation objAnimation = obj.Animation; - Toolkit.Instance.GetSerializer().Serialize(ref objAnimation, stream); - } - else if (stream.Mode is MetaStreamMode.Read) - { - if (stream.Params.StreamVersion >= 5) - { - return; - } - - var animation = new Animation(); - Toolkit.Instance.GetSerializer().Serialize(ref animation, stream); - - obj.Animation = animation; - } - } - } + // public class Serializer : MetaSerializer + // { + // public override void Serialize(ref ProceduralLookAt obj, MetaStream stream, MetaClassType? type = null) + // { + // if (stream.Mode is MetaStreamMode.Write) + // { + // + // } + // else if (stream.Mode is MetaStreamMode.Read) + // { + // + // } + // } + // } } diff --git a/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAtValue.cs b/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAtValue.cs index 67fa107..b34e008 100644 --- a/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAtValue.cs +++ b/src/TelltaleToolKit/T3Types/Animations/ProceduralLookAtValue.cs @@ -1,18 +1,23 @@ -using System.Numerics; using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.T3Types.Skeletons; namespace TelltaleToolKit.T3Types.Animations; [MetaSerializer(typeof(Serializer))] -public class ProceduralLookAtValue +public class ProceduralLookAtValue : IAnimationValueInterface { - [MetaMember("Baseclass_AnimatedValueInterface")] - public AnimatedValueInterface Quaternion { get; set; } = new(); + [MetaMember("Baseclass_AnimatedValueInterface")] + public AnimationValueInterface Transform { get; set; } = new(); public class Serializer : MetaSerializer { - public override void Serialize(ref ProceduralLookAtValue obj, MetaStream stream) + public override void PreSerialize(ref ProceduralLookAtValue? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new ProceduralLookAtValue(); + } + + public override void Serialize(ref ProceduralLookAtValue obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -22,4 +27,10 @@ public override void Serialize(ref ProceduralLookAtValue obj, MetaStream stream) } } } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase + { + get => Transform.AnimationValueInterfaceBase; + set => Transform.AnimationValueInterfaceBase = value; + } } diff --git a/src/TelltaleToolKit/T3Types/Animations/SingleValue.cs b/src/TelltaleToolKit/T3Types/Animations/SingleValue.cs new file mode 100644 index 0000000..ef40262 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/SingleValue.cs @@ -0,0 +1,35 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(SingleValue<>.Serializer), typeof(SingleValue<>))] +public class SingleValue : IAnimationValueInterface +{ + public T Value { get; set; } + + public class Serializer : MetaSerializer> + { + public override void PreSerialize(ref SingleValue? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new SingleValue(); + } + + public override void Serialize(ref SingleValue obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + T objValue = obj.Value; + stream.Serialize(ref objValue); + } + else + { + T value = default; + stream.Serialize(ref value!); + obj.Value = value; + } + } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Animations/SingleVector3Value.cs b/src/TelltaleToolKit/T3Types/Animations/SingleVector3Value.cs new file mode 100644 index 0000000..410fdee --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Animations/SingleVector3Value.cs @@ -0,0 +1,78 @@ +using System.Numerics; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; + +namespace TelltaleToolKit.T3Types.Animations; + +[MetaSerializer(typeof(Serializer))] +public class SingleVector3Value : IAnimationValueInterface +{ + public Vector3 DecompressedValue { get; set; } + + public class Serializer : MetaSerializer + { + public override void PreSerialize(ref SingleVector3Value? obj, MetaStream stream, + MetaClassType? type = null) => + obj ??= new SingleVector3Value(); + + public override void Serialize(ref SingleVector3Value obj, MetaStream stream, MetaClassType? type = null) + { + if (stream.Mode is MetaStreamMode.Write) + { + } + else + { + uint compressedValue = stream.ReadUInt32(); + + if ((int)compressedValue == -1) + { + Vector3 vector3 = new Vector3(); + stream.Serialize(ref vector3); + obj.DecompressedValue = vector3; + } + else + { + obj.DecompressedValue = DecompressVector3(compressedValue); + } + } + } + + private static readonly float[] s_maxBounds = { 1.0f, 1.5f, 2.0f }; + + /// + /// Decompresses a 32‑bit packed value into a Vector3. + /// + /// The packed uint. + /// Array of 4 bounds corresponding to the top 2 bits. + /// The decompressed vector. + public static Vector3 DecompressVector3(uint packed) + { + // Extract the 2‑bit index from bits 30‑31. + int boundIndex = (int)(packed >> 30); + float bound = s_maxBounds[boundIndex]; + + // Extract each 10‑bit component. + int xVal = (int)(packed & 0x3FF); + int yVal = (int)((packed >> 10) & 0x3FF); + int zVal = (int)((packed >> 20) & 0x3FF); + + float x = DecompressComponent(xVal, bound); + float y = DecompressComponent(yVal, bound); + float z = DecompressComponent(zVal, bound); + + return new Vector3(x, y, z); + } + + /// + /// Maps a 10‑bit unsigned integer (0..1023) to a float in the range [-bound, bound]. + /// + private static float DecompressComponent(int value, float bound) + { + const int maxVal = 1023; // 2¹⁰ - 1 + // Linear interpolation: -bound + (value / maxVal) * (2 * bound) + return (value / (float)maxVal) * 2f * bound - bound; + } + } + + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/AssetCollection.cs b/src/TelltaleToolKit/T3Types/AssetCollection.cs index e3c78bd..df0a8c6 100644 --- a/src/TelltaleToolKit/T3Types/AssetCollection.cs +++ b/src/TelltaleToolKit/T3Types/AssetCollection.cs @@ -5,7 +5,7 @@ namespace TelltaleToolKit.T3Types; /// -/// The base class for .acol files. +/// The base class for .acol files. /// [MetaSerializer(typeof(MetaClassSerializer))] public class AssetCollection @@ -14,7 +14,7 @@ public class AssetCollection public List IncludeMasks { get; set; } = []; [MetaMember("mExcludeMasks")] - public List ExcludeMasks { get; set; }= []; + public List ExcludeMasks { get; set; } = []; [MetaMember("mPreFilter")] public string PreFilter { get; set; } = string.Empty; diff --git a/src/TelltaleToolKit/T3Types/Audio/AudioData.cs b/src/TelltaleToolKit/T3Types/Audio/AudioData.cs index 840336e..3c59ded 100644 --- a/src/TelltaleToolKit/T3Types/Audio/AudioData.cs +++ b/src/TelltaleToolKit/T3Types/Audio/AudioData.cs @@ -52,7 +52,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref AudioData obj, MetaStream stream) + public override void Serialize(ref AudioData obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.Serialize(ref obj, stream); @@ -61,7 +61,7 @@ public override void Serialize(ref AudioData obj, MetaStream stream) } else if (stream.Mode is MetaStreamMode.Read) { - if (stream.Params.StreamVersion >= 4) + if (stream.Params.StreamVersion >= 3) { obj.NumChannels = stream.ReadInt16(); short bitDepth = stream.ReadInt16(); diff --git a/src/TelltaleToolKit/T3Types/Audio/AudioSound.cs b/src/TelltaleToolKit/T3Types/Audio/AudioSound.cs index b132fe4..7a09073 100644 --- a/src/TelltaleToolKit/T3Types/Audio/AudioSound.cs +++ b/src/TelltaleToolKit/T3Types/Audio/AudioSound.cs @@ -7,7 +7,6 @@ namespace TelltaleToolKit.T3Types.Audio; [MetaSerializer(typeof(MetaClassSerializer))] public class AudioSound { - // TODO: Check CSI Hard Evidence public struct EnumSoundMode { [MetaMember("mVal")] diff --git a/src/TelltaleToolKit/T3Types/Audio/FootSteps.cs b/src/TelltaleToolKit/T3Types/Audio/FootSteps.cs index 904916a..6abfa23 100644 --- a/src/TelltaleToolKit/T3Types/Audio/FootSteps.cs +++ b/src/TelltaleToolKit/T3Types/Audio/FootSteps.cs @@ -16,4 +16,8 @@ public class FootstepBank public Dictionary>> MaterialFootsteps { get; set; } = new(); } + + internal class FootStepMonitor + { + } } diff --git a/src/TelltaleToolKit/T3Types/Audio/FootSteps2.cs b/src/TelltaleToolKit/T3Types/Audio/FootSteps2.cs index c36cfd7..caf0104 100644 --- a/src/TelltaleToolKit/T3Types/Audio/FootSteps2.cs +++ b/src/TelltaleToolKit/T3Types/Audio/FootSteps2.cs @@ -11,9 +11,9 @@ public class FootSteps2 public class FootstepBank { [MetaMember("mEventName")] - public SoundEventName EventName { get; set; } // NT_DEFAULT is int, adjust as needed + public SoundEventName0 EventName { get; set; } // NT_DEFAULT is int, adjust as needed [MetaMember("mMaterialMap")] - public Dictionary MaterialMap { get; set; } + public Dictionary MaterialMap { get; set; } } } diff --git a/src/TelltaleToolKit/T3Types/Audio/SoundAmbience.cs b/src/TelltaleToolKit/T3Types/Audio/SoundAmbience.cs new file mode 100644 index 0000000..db97ae1 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Audio/SoundAmbience.cs @@ -0,0 +1,41 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Mathematics; +using TelltaleToolKit.T3Types.Miscellaneous; + +namespace TelltaleToolKit.T3Types.Audio; + +// SoundAmbience + +[MetaSerializer(typeof(MetaClassSerializer))] +public class AmbienceDefinition +{ + [MetaMember("mEvents")] + public List Events { get; set; } = []; +} + +[MetaSerializer(typeof(MetaClassSerializer))] +public class EventContext +{ + [MetaMember("mBaseclass_SoundEventNameBase")] + public SoundEventNameBase BaseclassSoundEventNameBase { get; set; } = new(); + + [MetaMember("mEventname")] + public SoundEventName0 Eventname { get; set; } = new(); + + [MetaMember("mPlayChance")] + public float PlayChance { get; set; } + + [MetaMember("mSilentTimeRange")] + public Range SilentTimeRange { get; set; } = new(); + + [MetaMember("mPlayTimeRange")] + public Range PlayTimeRange { get; set; } = new(); + + [MetaMember("mVolumeRangedB")] + public Range VolumeRangedB { get; set; } = new(); + + [MetaMember("mVolumeFadeTimeRange")] + public Range VolumeFadeTimeRange { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Audio/SoundBankWaveMap.cs b/src/TelltaleToolKit/T3Types/Audio/SoundBankWaveMap.cs new file mode 100644 index 0000000..74fef7f --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Audio/SoundBankWaveMap.cs @@ -0,0 +1,13 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Audio; + +//.BANKWAVEMAP FILES +[MetaSerializer(typeof(MetaClassSerializer))] +public class SoundBankWaveMap +{ + [MetaMember("mWaveMap")] + public Dictionary WaveMap { get; set; } = []; +} diff --git a/src/TelltaleToolKit/T3Types/Audio/SoundBankWaveMapEntry.cs b/src/TelltaleToolKit/T3Types/Audio/SoundBankWaveMapEntry.cs new file mode 100644 index 0000000..2341ec1 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Audio/SoundBankWaveMapEntry.cs @@ -0,0 +1,15 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Audio; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class SoundBankWaveMapEntry +{ + [MetaMember("fLengthSeconds")] + public float LengthSeconds { get; set; } + + [MetaMember("strFileName")] + public string FileName { get; set; } = string.Empty; +} diff --git a/src/TelltaleToolKit/T3Types/Audio/SoundEventBankMap.cs b/src/TelltaleToolKit/T3Types/Audio/SoundEventBankMap.cs new file mode 100644 index 0000000..685d0f4 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Audio/SoundEventBankMap.cs @@ -0,0 +1,16 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Audio; + +//.SOUNDEVENTBANKMAP FILES +[MetaSerializer(typeof(MetaClassSerializer))] +public class SoundEventBankMap +{ + [MetaMember("mbLoadAllBanksGlobally")] + public bool LoadAllBanksGlobally { get; set; } + + [MetaMember("mBankMap")] + public Dictionary> BankMap { get; set; } = []; +} diff --git a/src/TelltaleToolKit/T3Types/SoundReverbDefinition.cs b/src/TelltaleToolKit/T3Types/Audio/SoundReverbDefinition.cs similarity index 100% rename from src/TelltaleToolKit/T3Types/SoundReverbDefinition.cs rename to src/TelltaleToolKit/T3Types/Audio/SoundReverbDefinition.cs diff --git a/src/TelltaleToolKit/T3Types/BinaryBuffer.cs b/src/TelltaleToolKit/T3Types/BinaryBuffer.cs index f908fb9..f421788 100644 --- a/src/TelltaleToolKit/T3Types/BinaryBuffer.cs +++ b/src/TelltaleToolKit/T3Types/BinaryBuffer.cs @@ -6,14 +6,14 @@ namespace TelltaleToolKit.T3Types; [MetaSerializer(typeof(Serializer))] public class BinaryBuffer { + public byte[] Data { get; set; } = []; + public class Serializer : MetaSerializer { - public override void PreSerialize(ref BinaryBuffer? obj, MetaStream stream, MetaClassType? type = null) - { + public override void PreSerialize(ref BinaryBuffer? obj, MetaStream stream, MetaClassType? type = null) => obj ??= new BinaryBuffer(); - } - public override void Serialize(ref BinaryBuffer obj, MetaStream stream) + public override void Serialize(ref BinaryBuffer obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -27,6 +27,4 @@ public override void Serialize(ref BinaryBuffer obj, MetaStream stream) } } } - - public byte[] Data { get; set; } = []; } diff --git a/src/TelltaleToolKit/T3Types/BitSet.cs b/src/TelltaleToolKit/T3Types/BitSet.cs index 26a84a6..fc05be7 100644 --- a/src/TelltaleToolKit/T3Types/BitSet.cs +++ b/src/TelltaleToolKit/T3Types/BitSet.cs @@ -1,21 +1,144 @@ +using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.T3Types; -[MetaSerializer(typeof(Serializer))] +[MetaSerializer(typeof(BitSetSerializer<>), typeof(BitSet<>))] public class BitSet : BitSetBase where T : Enum { // A rare case where I actually inherit, and it makes sense to do so. - private readonly int _first; - private readonly int _count; - - public int First => _first; - public int Count => _count; public BitSet(int count, int first = 0) : base((count + 31) / 32) { - _count = count; - _first = first; + Count = count; + First = first; + } + + public int First { get; } + + public int Count { get; } + + public bool this[T enumValue] + { + get => GetBit(ConvertEnumToIndex(enumValue)); + set => SetBit(ConvertEnumToIndex(enumValue), value); + } + + private int ConvertEnumToIndex(T enumValue) + { + int rawValue = Convert.ToInt32(enumValue); + int index = rawValue - First; + + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(nameof(enumValue), + $"Enum value {rawValue} is outside range [{First}, {First + Count - 1}]"); + } + + return index; + } + + public void Set(T enumValue) => this[enumValue] = true; + + public void Clear(T enumValue) => this[enumValue] = false; + + public bool IsSet(T enumValue) => this[enumValue]; + + public void SetRange(params T[] enumValues) + { + foreach (T value in enumValues) + { + Set(value); + } + } + + public void ClearRange(params T[] enumValues) + { + foreach (T value in enumValues) + { + Clear(value); + } + } + + public IEnumerable GetSetValues() + { + for (int i = 0; i < Count; i++) + { + if (GetBit(i)) + { + int enumValue = First + i; + yield return (T)Enum.ToObject(typeof(T), enumValue); + } + } + } + + private static int CalculateRequiredWords(int bitCount) => (bitCount + 31) / 32; + + private bool GetBit(int index) + { + int wordIndex = index / 32; + int bitIndex = index % 32; + return (Values[wordIndex] & (1u << bitIndex)) != 0; + } + + private void SetBit(int index, bool value) + { + int wordIndex = index / 32; + int bitIndex = index % 32; + + if (value) + { + Values[wordIndex] |= 1u << bitIndex; + } + else + { + Values[wordIndex] &= ~(1u << bitIndex); + } + } +} + +public class BitSetSerializer : MetaSerializer> where T : Enum +{ + public override void PreSerialize(ref BitSet? obj, MetaStream stream, MetaClassType? type = null) + { + if (type is null) + { + throw new ArgumentNullException(nameof(type), "BitSet requires a metaclass type!"); + } + + int bitSetSize = type.Symbol.DebugString switch + { + "BitSetBase<1>" => 1, + "BitSetBase<2>" => 2, + "BitSetBase<3>" => 3, + "BitSetBase<4>" => 4, + "BitSetBase<5>" => 5, + "BitSetBase<6>" => 6, + "BitSetBase<7>" => 7, + "BitSetBase<8>" => 8, + "BitSetBase<9>" => 9, + _ => throw new InvalidDataException($"Unexpected BitSetBase type: {type.Symbol.DebugString}") + }; + + obj ??= new BitSet(bitSetSize); + + if (obj.Values.Length != bitSetSize) + { + BitSet newBitSet = new(bitSetSize); + + int copyLength = Math.Min(obj.Values.Length, bitSetSize); + Array.Copy(obj.Values, 0, newBitSet.Values, 0, copyLength); + + obj = newBitSet; + } + } + + public override void Serialize(ref BitSet obj, MetaStream stream, MetaClassType? type = null) + { + for (int i = 0; i < obj.Values.Length; i++) + { + stream.Serialize(ref obj.Values[i]); + } } } diff --git a/src/TelltaleToolKit/T3Types/BitSetBase.cs b/src/TelltaleToolKit/T3Types/BitSetBase.cs index da5a6ab..bdd2c28 100644 --- a/src/TelltaleToolKit/T3Types/BitSetBase.cs +++ b/src/TelltaleToolKit/T3Types/BitSetBase.cs @@ -6,12 +6,9 @@ namespace TelltaleToolKit.T3Types; [MetaSerializer(typeof(Serializer))] public class BitSetBase { - public uint[] Values { get; set; } + public BitSetBase(int numValues) => Values = new uint[numValues]; - public BitSetBase(int numValues) - { - Values = new uint[numValues]; - } + public uint[] Values { get; set; } public class Serializer : MetaSerializer { @@ -22,7 +19,7 @@ public override void PreSerialize(ref BitSetBase? obj, MetaStream stream, MetaCl throw new ArgumentNullException(nameof(type), "BitSetBase requires a metaclass type!"); } - int? bitSetSize = type.Symbol.DebugString switch + int bitSetSize = type.Symbol.DebugString switch { "BitSetBase<1>" => 1, "BitSetBase<2>" => 2, @@ -36,15 +33,22 @@ public override void PreSerialize(ref BitSetBase? obj, MetaStream stream, MetaCl _ => throw new InvalidDataException($"Unexpected BitSetBase type: {type.Symbol.DebugString}") }; - if (obj?.Values == null || obj.Values.Length != bitSetSize.Value) + obj ??= new BitSetBase(bitSetSize); + + if (obj.Values.Length != bitSetSize) { - obj = new BitSetBase(bitSetSize.Value); + BitSetBase newBitSet = new(bitSetSize); + + int copyLength = Math.Min(obj.Values.Length, bitSetSize); + Array.Copy(obj.Values, 0, newBitSet.Values, 0, copyLength); + + obj = newBitSet; } } - public override void Serialize(ref BitSetBase obj, MetaStream stream) + public override void Serialize(ref BitSetBase obj, MetaStream stream, MetaClassType? type = null) { - for (var i = 0; i < obj.Values.Length; i++) + for (int i = 0; i < obj.Values.Length; i++) { stream.Serialize(ref obj.Values[i]); } diff --git a/src/TelltaleToolKit/T3Types/Chores/ActorAgentBinding.cs b/src/TelltaleToolKit/T3Types/Chores/ActorAgentBinding.cs index d00f5db..b559034 100644 --- a/src/TelltaleToolKit/T3Types/Chores/ActorAgentBinding.cs +++ b/src/TelltaleToolKit/T3Types/Chores/ActorAgentBinding.cs @@ -9,4 +9,13 @@ public class ActorAgentBinding { [MetaMember("mActorName")] public string ActorName { get; set; } = string.Empty; + + [MetaMember("mActorName")] + public Symbol ActorNameS { get; set; } + + [MetaMember("mAgentName")] + public string AgentName { get; set; } = string.Empty; + + [MetaMember("mAgentName")] + public Symbol mAgentNameS { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Chores/AutoActStatus.cs b/src/TelltaleToolKit/T3Types/Chores/AutoActStatus.cs new file mode 100644 index 0000000..fb76689 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/AutoActStatus.cs @@ -0,0 +1,12 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class AutoActStatus +{ + [MetaMember("m_Status")] + public int Status { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Chores/CameraSelect.cs b/src/TelltaleToolKit/T3Types/Chores/CameraSelect.cs new file mode 100644 index 0000000..ff8a5cf --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/CameraSelect.cs @@ -0,0 +1,12 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class CameraSelect +{ + [MetaMember("mCameraNames")] + public List CameraNames { get; set; } = []; +} diff --git a/src/TelltaleToolKit/T3Types/Chores/Chore.cs b/src/TelltaleToolKit/T3Types/Chores/Chore.cs index 4b998fb..3872306 100644 --- a/src/TelltaleToolKit/T3Types/Chores/Chore.cs +++ b/src/TelltaleToolKit/T3Types/Chores/Chore.cs @@ -11,9 +11,6 @@ namespace TelltaleToolKit.T3Types.Chores; [MetaSerializer(typeof(Serializer))] public class Chore { - // [MetaMember("mpChore")] - // public Name { get; set; } = string.Empty; - [MetaMember("mName")] public string Name { get; set; } = string.Empty; @@ -63,60 +60,84 @@ public class Chore public List Resources { get; set; } = []; [MetaMember("mSynchronizedToLocalization")] - public LocalizeInfo SynchronizedToLocalization { get; set; } + public LocalizeInfo SynchronizedToLocalization { get; set; } = new(); + + [MetaMember("mSynchronizedToLocalization")] + public Symbol SynchronizedToLocalizationS { get; set; } = Symbol.Empty; [MetaMember("mDependencies")] - public DependencyLoader Dependencies { get; set; } + public DependencyLoader Dependencies { get; set; } = new(); [MetaMember("mToolProps")] - public ToolProps ToolProps { get; set; } + public ToolProps ToolProps { get; set; } = new(); [MetaMember("mWalkPaths")] - public Dictionary WalkPaths { get; set; } + public Dictionary WalkPaths { get; set; } = []; public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref Chore obj, MetaStream stream) + public override void Serialize(ref Chore obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + if (stream.Mode is MetaStreamMode.Write) + { + obj.NumResources = obj.ResourcesChore.Count; + obj.NumAgents = obj.Agents.Count; + } + + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); - MetaClass? choreMetaClassDescription = stream.GetMetaClass(typeof(Chore)); + // In the oldest games, they have a DCArray for each type in their metaclass descriptions. + // However, the serializers still read and write the resources. + // Which means...they are either overwritten, duplicates or being totally useless. if (stream.Mode is MetaStreamMode.Write) { + foreach (var res in obj.ResourcesChore) + { + ChoreResource choreResource = res; + stream.Serialize(ref choreResource); + } + + foreach (var agent in obj.Agents) + { + ChoreAgent agent1 = agent; + stream.Serialize(ref agent1); + } } - else if (stream.Mode is MetaStreamMode.Read) + else { - if (obj.NumResources > 0 && !choreMetaClassDescription.ContainsMember("mResourcesChore")) + obj.ResourcesChore.Clear(); + for (int i = 0; i < obj.NumResources; i++) { - // TODO: Check for Texas and Bone. They have DCArrays for Chore Resources - - for (var i = 0; i < obj.NumResources; i++) - { - var choreResource = new ChoreResource(); - stream.Serialize(ref choreResource); - obj.ResourcesChore.Add(choreResource); - } + var choreResource = new ChoreResource(); + stream.Serialize(ref choreResource); + obj.ResourcesChore.Add(choreResource); } - if (obj.NumAgents > 0 && !choreMetaClassDescription.ContainsMember("mAgents")) + obj.Agents.Clear(); + for (int i = 0; i < obj.NumAgents; i++) { - // TODO: Check for Texas and Bone. They have DCArrays for Chore Agents - - for (var i = 0; i < obj.NumAgents; i++) - { - var choreAgent = new ChoreAgent(); - Toolkit.Instance.GetSerializer().Serialize(ref choreAgent, stream); - obj.Agents.Add(choreAgent); - } + var choreAgent = new ChoreAgent(); + stream.Serialize(ref choreAgent); + obj.Agents.Add(choreAgent); } } } } - public class EnumExtentsMode + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumExtentsMode + { + [MetaMember("mVal")] + public EnumExtents Val { get; set; } + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum EnumExtents { + LangRes = 1, + Spillout = 2 } } diff --git a/src/TelltaleToolKit/T3Types/Chores/ChoreResource.cs b/src/TelltaleToolKit/T3Types/Chores/ChoreResource.cs index 0836fe9..3b83c35 100644 --- a/src/TelltaleToolKit/T3Types/Chores/ChoreResource.cs +++ b/src/TelltaleToolKit/T3Types/Chores/ChoreResource.cs @@ -66,11 +66,14 @@ public class ChoreResource [MetaMember("mResourceGroupInclude")] public Dictionary ResourceGroupIncludeSymbol { get; set; } = new(); + [MetaMember("mAAStatus")] + public AutoActStatus AaStatus { get; set; } = new(); + [MetaMember("mFlags")] public Flags Flags { get; set; } = new(); // Bone only [MetaMember("mAAStatus")] - public AutoActStatus AaStatus { get; set; } // Bone only + public AAStatus AaStatusE { get; set; } // Bone only [MetaMember("mhObject")] public HandleBase ObjectHandle { get; set; } = new(); // Bone only @@ -93,8 +96,8 @@ public class Block public float Scale { get; set; } } - [MetaSerializer(typeof(EnumSerializer))] - public enum AutoActStatus + [MetaSerializer(typeof(EnumSerializer))] + public enum AAStatus { } @@ -102,31 +105,43 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref ChoreResource obj, MetaStream stream) + public override void Serialize(ref ChoreResource obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); - MetaClass? description = stream.GetMetaClass(typeof(ChoreResource)); + if (!obj.HasEmbedded) + { + return; + } if (stream.Mode is MetaStreamMode.Write) { } - else if (stream.Mode is MetaStreamMode.Read) + else { - if (description != null && description.ContainsMember("mbEmbedded") && obj.HasEmbedded) - { - MetaClassType? embeddedClassType = stream.ReadMetaClassType(); - if (embeddedClassType is null) - throw new InvalidOperationException("[ChoreResource] Embedded type is not registered."); + MetaClassType? embeddedClassType = stream.ReadMetaClassType(); + if (embeddedClassType is null) + throw new InvalidOperationException("[ChoreResource] Embedded type is not registered."); - Symbol _ = stream.ReadSymbol(); - - object? embedded = Activator.CreateInstance(embeddedClassType.LinkingType); + MetaClassType? _ = stream.ReadMetaClassType(); // same + object? embedded; + if ((stream.GetMetaClass(typeof(ChoreResource))!.ContainsMember("mVersion") && obj.Version >= 2) || + embeddedClassType.LinkingType != typeof(ProceduralLookAt)) + { + embedded = Activator.CreateInstance(embeddedClassType.LinkingType); + Toolkit.Instance.GetSerializer(embeddedClassType.LinkingType).PreSerialize(ref embedded, stream); Toolkit.Instance.GetSerializer(embeddedClassType.LinkingType).Serialize(ref embedded, stream); - obj.Embedded = embedded; } + else + { + embedded = new Animation(); + Toolkit.Instance.GetSerializer().PreSerialize(ref embedded, stream); + Toolkit.Instance.GetSerializer().Serialize(ref embedded, stream); + } + + obj.Embedded = embedded; } } } diff --git a/src/TelltaleToolKit/T3Types/Chores/ClipResourceFilter.cs b/src/TelltaleToolKit/T3Types/Chores/ClipResourceFilter.cs new file mode 100644 index 0000000..2555cb4 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/ClipResourceFilter.cs @@ -0,0 +1,14 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class ClipResourceFilter +{ + [MetaMember("mResources")] + public HashSet Resources { get; set; } = []; + [MetaMember("mbExclusiveMode")] + public bool ExclusiveMode { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Chores/Guide.cs b/src/TelltaleToolKit/T3Types/Chores/Guide.cs new file mode 100644 index 0000000..336974c --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/Guide.cs @@ -0,0 +1,18 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class Guide +{ + [MetaMember("m_Time")] + public float Time { get; set; } + + [MetaMember("m_Bitfield")] + public int Bitfield { get; set; } + + [MetaMember("m_AutoActRole")] + public int AutoActRole { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Chores/InverseKinematicsBase.cs b/src/TelltaleToolKit/T3Types/Chores/InverseKinematicsBase.cs new file mode 100644 index 0000000..dcdbf3e --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/InverseKinematicsBase.cs @@ -0,0 +1,10 @@ +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class InverseKinematicsBase +{ + +} diff --git a/src/TelltaleToolKit/T3Types/Chores/ParticleInverseKinematics.cs b/src/TelltaleToolKit/T3Types/Chores/ParticleInverseKinematics.cs new file mode 100644 index 0000000..2977fbd --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/ParticleInverseKinematics.cs @@ -0,0 +1,12 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class ParticleInverseKinematics +{ + [MetaMember("Baseclass_InverseKinematicsBase")] + public InverseKinematicsBase Baseclass_InverseKinematicsBase { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Chores/PerAgentClipResourceFilter.cs b/src/TelltaleToolKit/T3Types/Chores/PerAgentClipResourceFilter.cs new file mode 100644 index 0000000..109817a --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/PerAgentClipResourceFilter.cs @@ -0,0 +1,17 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class PerAgentClipResourceFilter +{ + [MetaMember("mIncludedAgents")] + public Dictionary IncludedAgents { get; set; } = []; + + [MetaMember("mExcludedAgents")] + public HashSet ExcludedAgents { get; set; } = []; + [MetaMember("mbExclusiveMode")] + public bool ExclusiveMode { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Chores/PointOfInterestBlocking.cs b/src/TelltaleToolKit/T3Types/Chores/PointOfInterestBlocking.cs new file mode 100644 index 0000000..fc54728 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/PointOfInterestBlocking.cs @@ -0,0 +1,10 @@ +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class PointOfInterestBlocking +{ + +} diff --git a/src/TelltaleToolKit/T3Types/Chores/StyleIdleTransitionsRes.cs b/src/TelltaleToolKit/T3Types/Chores/StyleIdleTransitionsRes.cs new file mode 100644 index 0000000..e1d5901 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Chores/StyleIdleTransitionsRes.cs @@ -0,0 +1,15 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Chores; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class StyleIdleTransitionsRes +{ + [MetaMember("mOwningAgent")] + public string OwningAgent { get; set; } = string.Empty; + + [MetaMember("mGuideName")] + public string GuideName { get; set; } = string.Empty; +} diff --git a/src/TelltaleToolKit/T3Types/Chores/WalkPath.cs b/src/TelltaleToolKit/T3Types/Chores/WalkPath.cs index fe7d311..14d9fb5 100644 --- a/src/TelltaleToolKit/T3Types/Chores/WalkPath.cs +++ b/src/TelltaleToolKit/T3Types/Chores/WalkPath.cs @@ -8,39 +8,55 @@ namespace TelltaleToolKit.T3Types.Chores; public class WalkPath { [MetaMember("mName")] - public string Name { get; set; } + public string Name { get; set; } = string.Empty; + + public List Paths { get; set; } = []; - public List Paths { get; set; } public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref WalkPath obj, MetaStream stream) + public override void PreSerialize(ref WalkPath? obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + obj ??= new WalkPath(); + } + + public override void Serialize(ref WalkPath obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException($"There is no serializer for {SerializationType}"); - } + stream.Write(obj.Paths.Count); + foreach (var path in obj.Paths) + { + PathBase pathBase = path; + + var mcd = stream.GetMetaClass(pathBase.GetType()); + if (mcd is null) + throw new InvalidOperationException("[WalkPath] MetaClass for PathBase is not supported."); - if (stream.Mode is MetaStreamMode.Read) + stream.Write(mcd.ClassType.Symbol.Crc64); + stream.Serialize(ref pathBase); + } + } + else { int count = stream.ReadInt32(); - MetaClassType? type = stream.ReadMetaClassType(); - if (type is null) + MetaClassType? typeS = stream.ReadMetaClassType(); + if (typeS is null) throw new InvalidOperationException("[WalkPath] Type is not registered."); MetaSerializer typeSerializer = - Toolkit.Instance.GetSerializer(type.LinkingType); + Toolkit.Instance.GetSerializer(typeS.LinkingType); - for (var i = 0; i < count; i++) + for (int i = 0; i < count; i++) { object? value = null; - typeSerializer.PreSerialize(ref value, stream, type); - typeSerializer.Serialize(ref value, stream); + typeSerializer.PreSerialize(ref value!, stream, typeS); + typeSerializer.Serialize(ref value, stream, typeS); if (value is PathBase pathBase) { diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/ChildSets/DlgChildSet.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/ChildSets/DlgChildSet.cs index bc607f3..cc85545 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/ChildSets/DlgChildSet.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/ChildSets/DlgChildSet.cs @@ -16,13 +16,10 @@ public class Serializer : MetaSerializer { public override void PreSerialize(ref DlgChildSet? obj, MetaStream stream, MetaClassType? type = null) { - if (obj is null) - { - obj = new DlgChildSet(); - } + obj ??= new DlgChildSet(); } - public override void Serialize(ref DlgChildSet obj, MetaStream stream) + public override void Serialize(ref DlgChildSet obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -35,15 +32,15 @@ public override void Serialize(ref DlgChildSet obj, MetaStream stream) for (var i = 0; i < numChildren; i++) { - MetaClassType? type = stream.ReadMetaClassType(); - if (type == null) + MetaClassType? typeS = stream.ReadMetaClassType(); + if (typeS == null) throw new InvalidOperationException("[DlgChildSet] Type is not registered."); - MetaSerializer childSerializer = Toolkit.Instance.GetSerializer(type.LinkingType); + MetaSerializer childSerializer = Toolkit.Instance.GetSerializer(typeS.LinkingType); object? dlgChild = null; - childSerializer.PreSerialize(ref dlgChild, stream); - childSerializer.Serialize(ref dlgChild, stream); + childSerializer.PreSerialize(ref dlgChild, stream, typeS); + childSerializer.Serialize(ref dlgChild, stream, typeS); if (dlgChild is IDlgChild child) obj.Children.Add(child); diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Conditions/DlgConditionSet.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Conditions/DlgConditionSet.cs index 9857f96..55f697a 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Conditions/DlgConditionSet.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Conditions/DlgConditionSet.cs @@ -16,7 +16,7 @@ public override void PreSerialize(ref DlgConditionSet? obj, MetaStream stream, M } - public override void Serialize(ref DlgConditionSet obj, MetaStream stream) + public override void Serialize(ref DlgConditionSet obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -29,15 +29,15 @@ public override void Serialize(ref DlgConditionSet obj, MetaStream stream) for (var i = 0; i < numChildren; i++) { - MetaClassType? type = stream.ReadMetaClassType(); - if (type == null) + MetaClassType? typeS = stream.ReadMetaClassType(); + if (typeS == null) throw new InvalidOperationException("[DlgConditionSet] Type is not registered."); - MetaSerializer conditionSerializer = Toolkit.Instance.GetSerializer(type.LinkingType); + MetaSerializer conditionSerializer = Toolkit.Instance.GetSerializer(typeS.LinkingType); object? dlgConditionSet = null; - conditionSerializer.PreSerialize(ref dlgConditionSet, stream); - conditionSerializer.Serialize(ref dlgConditionSet, stream); + conditionSerializer.PreSerialize(ref dlgConditionSet, stream, typeS); + conditionSerializer.Serialize(ref dlgConditionSet, stream, typeS); if (dlgConditionSet is IDlgCondition condition) obj.Conditions.Add(condition); diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DepedencyLoader.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DepedencyLoader.cs index bad8e1d..3239320 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DepedencyLoader.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DepedencyLoader.cs @@ -6,18 +6,32 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg; [MetaSerializer(typeof(Serializer))] public class DependencyLoader { - public List ResourceNames { get; set; } = []; + public List? ResourceNames { get; set; } public class Serializer : MetaSerializer { - public override void Serialize(ref DependencyLoader obj, MetaStream stream) + public override void PreSerialize(ref DependencyLoader? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new DependencyLoader(); + } + + public override void Serialize(ref DependencyLoader obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException(); - } + bool hasResourceNames = obj.ResourceNames != null; + stream.Write(hasResourceNames); + + if (!hasResourceNames) + return; + + var classType = MetaClassTypeRegistry.GetByName("DCArray"); + stream.Write(classType); - if (stream.Mode is MetaStreamMode.Read) + List? objResourceNames = obj.ResourceNames; + stream.Serialize(ref objResourceNames); + } + else { bool hasResourceNames = stream.ReadBoolean(); @@ -27,16 +41,18 @@ public override void Serialize(ref DependencyLoader obj, MetaStream stream) // This is a little bit weird. // In the real serialization function, the object is base-casted to DCArray. (base-casting is casting to a parent class). // Which leads to the question - which type does inherit DCArray? It does not make any sense. - MetaClassType? type = stream.ReadMetaClassType(); + MetaClassType? typeS = stream.ReadMetaClassType(); - if (type == null) + if (typeS == null) throw new InvalidOperationException("[DependencyLoader] Type is not registered."); - if (type.Symbol.DebugString != null && !type.Symbol.DebugString.Equals("DCArray")) + if (typeS.Symbol.DebugString != null && !typeS.Symbol.DebugString.Equals("DCArray")) { - Toolkit.Instance.Logger.LogWarning($"[DependencyLoader] Unknown type `{type.Symbol.DebugString}`!"); + Toolkit.Instance.Logger.LogWarning( + $"[DependencyLoader] Unknown type `{typeS.Symbol.DebugString}`!"); } + obj.ResourceNames = []; List objResourceNames = obj.ResourceNames; stream.Serialize(ref objResourceNames); } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Dlg.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Dlg.cs index a6c659b..07957cf 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Dlg.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Dlg.cs @@ -51,6 +51,9 @@ public class Dlg : IDlgObjIdOwner, ITaskOwner [MetaMember("mbHasToolOnlyData")] public bool HasToolOnlyData { get; set; } + [MetaMember("mResourcePath")] + public string ResourcePath { get; set; } + public bool ToolFlag { get; set; } public List Folders { get; set; } = []; @@ -60,24 +63,54 @@ public class Dlg : IDlgObjIdOwner, ITaskOwner public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref Dlg obj, MetaStream stream) + + public override void Serialize(ref Dlg obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); MetaClass metaClass = stream.GetMetaClass(typeof(Dlg))!; if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException(); - } + int folderCount = obj.Folders.Count; + stream.Write(folderCount); + + foreach (var folder in obj.Folders) + { + var folderRef = folder; + stream.Serialize(ref folderRef); + } + + int nodeCount = obj.Nodes.Count; + stream.Write(nodeCount); + + foreach (var node in obj.Nodes) + { + var nodeType = stream.GetMetaClass(node.GetType()) + ?? throw new InvalidOperationException( + $"[Dlg] Type '{node.GetType()}' is not registered in params or workspace."); - if (stream.Mode is MetaStreamMode.Read) + stream.Write(nodeType.ClassType); + + MetaSerializer metaSerializer = Toolkit.Instance.GetSerializer(nodeType.ClassType.LinkingType); + + object nodeObj = node; + metaSerializer.PreSerialize(ref nodeObj!, stream, nodeType.ClassType); + metaSerializer.Serialize(ref nodeObj, stream, nodeType.ClassType); + } + + if (metaClass.ContainsMember("mbHasToolOnlyData")) + { + stream.Write(obj.HasToolOnlyData); + } + } + else { int folderCount = stream.ReadInt32(); obj.Folders.Capacity = folderCount; - for (var i = 0; i < folderCount; i++) + for (int i = 0; i < folderCount; i++) { var folder = new DlgFolder(); stream.Serialize(ref folder); @@ -86,18 +119,18 @@ public override void Serialize(ref Dlg obj, MetaStream stream) int nodeCount = stream.ReadInt32(); obj.Nodes.Capacity = nodeCount; - for (var i = 0; i < nodeCount; i++) + for (int i = 0; i < nodeCount; i++) { - MetaClassType? type = stream.ReadMetaClassType(); + MetaClassType? typeS = stream.ReadMetaClassType(); - if (type == null) + if (typeS == null) throw new InvalidOperationException("[Dlg] Type is not registered."); - MetaSerializer metaSerializer = Toolkit.Instance.GetSerializer(type.LinkingType); + MetaSerializer metaSerializer = Toolkit.Instance.GetSerializer(typeS.LinkingType); object node = null!; - metaSerializer.PreSerialize(ref node, stream); - metaSerializer.Serialize(ref node, stream); + metaSerializer.PreSerialize(ref node, stream, typeS); + metaSerializer.Serialize(ref node, stream, typeS); if (node is IDlgNode dlgNode) { @@ -105,6 +138,7 @@ public override void Serialize(ref Dlg obj, MetaStream stream) } } + // TODO: Verify if this is really true if (metaClass.ContainsMember("mbHasToolOnlyData")) { // Read runtime boolean diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgFolder.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgFolder.cs index 4b9857f..1ce1a40 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgFolder.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgFolder.cs @@ -9,22 +9,20 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg; public class DlgFolder : IDlgObjIdOwner, IDlgObjectPropsOwner, IDlgChildSet, ITaskOwner { [MetaMember("Baseclass_DlgObjIDOwner")] - public DlgObjIDOwner DlgObjIdOwner { get; set; } + public DlgObjIDOwner DlgObjIdOwner { get; set; } = new(); [MetaMember("Baseclass_DlgObjectPropsOwner")] - public DlgObjectPropsOwner DlgObjectPropsOwner { get; set; } + public DlgObjectPropsOwner DlgObjectPropsOwner { get; set; }= new(); [MetaMember("Baseclass_DlgChildSet")] - public DlgChildSet DlgChildSet { get; set; } + public DlgChildSet DlgChildSet { get; set; }= new(); [MetaMember("Baseclass_TaskOwner")] - public TaskOwner TaskOwner { get; set; } + public TaskOwner TaskOwner { get; set; }= new(); [MetaMember("mName")] - public Symbol Name { get; set; } + public Symbol Name { get; set; } = Symbol.Empty; [MetaMember("mProdReportProps")] - public PropertySet ProdReportProps { get; set; } - - + public PropertySet ProdReportProps { get; set; }= new(); } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjID.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjID.cs index 3ef2846..d0585e2 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjID.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjID.cs @@ -8,5 +8,5 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg; public class DlgObjId { [MetaMember("mID")] - public Symbol Id { get; set; } + public Symbol Id { get; set; } = Symbol.Empty; } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjIDOwner.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjIDOwner.cs index 50cb637..ff67d66 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjIDOwner.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjIDOwner.cs @@ -8,5 +8,5 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg; public class DlgObjIDOwner { [MetaMember("mDlgObjID")] - public DlgObjId DlgObjID { get; set; } + public DlgObjId DlgObjID { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjectProps.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjectProps.cs index bea413f..4705d63 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjectProps.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgObjectProps.cs @@ -24,7 +24,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref DlgObjectProps obj, MetaStream stream) + public override void Serialize(ref DlgObjectProps obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgVisibilityConditions.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgVisibilityConditions.cs index b956384..7c068e0 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgVisibilityConditions.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/DlgVisibilityConditions.cs @@ -26,7 +26,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref DlgVisibilityConditions obj, MetaStream stream) + public override void Serialize(ref DlgVisibilityConditions obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/JiraRecordManager.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/JiraRecordManager.cs index eb9887b..99862d5 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/JiraRecordManager.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/JiraRecordManager.cs @@ -2,48 +2,43 @@ using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.T3Types.Dialogs.Dlg; -// TODO: [MetaSerializer(typeof(Serializer))] public class JiraRecordManager { - public Dictionary Records = new(); + public Dictionary Records = []; public class Serializer : MetaSerializer { public override void PreSerialize(ref JiraRecordManager? obj, MetaStream stream, MetaClassType? type = null) { - if (obj == null) - { - obj = new JiraRecordManager(); - } + obj ??= new JiraRecordManager(); } - public override void Serialize(ref JiraRecordManager obj, MetaStream stream) + public override void Serialize(ref JiraRecordManager obj, MetaStream stream, MetaClassType? type = null) { - stream.BeginDebugSection(); - - if (stream.IsSectionEmpty()) - { - stream.EndDebugSection(); - return; - } - - if (stream.Mode is MetaStreamMode.Write) + if (stream.BeginDebugSection()) { - throw new NotImplementedException(); - } - - if (stream.Mode is MetaStreamMode.Read) - { - int numRecords = stream.ReadInt32(); + if (stream.Mode is MetaStreamMode.Write) + { + stream.Write(obj.Records.Count); - for (int i = 0; i < numRecords; i++) + foreach (string name in obj.Records.Keys) + { + stream.Write(name); + } + } + else { - string key = stream.ReadString(); - var record = new JiraRecord(); + int numRecords = stream.ReadInt32(); + + for (int i = 0; i < numRecords; i++) + { + string key = stream.ReadString(); + var record = new JiraRecord(); - obj.Records[key] = record; + obj.Records[key] = record; + } } } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeExchange.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeExchange.cs index f476e7e..3b4cdfc 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeExchange.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeExchange.cs @@ -44,7 +44,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref DlgNodeExchange obj, MetaStream stream) + public override void Serialize(ref DlgNodeExchange obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); @@ -52,9 +52,7 @@ public override void Serialize(ref DlgNodeExchange obj, MetaStream stream) if (stream.Mode is MetaStreamMode.Write) { throw new NotSupportedException(); - } - - if (stream.Mode is MetaStreamMode.Read) + } else { if ((obj.DlgNode.Flags.Data & 1) != 0) { diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeJump.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeJump.cs index 0ee9a28..8871733 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeJump.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeJump.cs @@ -7,51 +7,71 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg.Nodes; [MetaSerializer(typeof(MetaClassSerializer))] public class DlgNodeJump : IDlgNode { - // TODO: Not exactly the right names. - [MetaSerializer(typeof(EnumSerializer))] - public enum JumpBehaviourEnum + [MetaSerializer(typeof(EnumSerializer))] + public enum JumpBehaviour { JumpAndExecute = 1, JumpExecuteAndReturn = 2, Return = 3 } - [MetaSerializer(typeof(EnumSerializer))] - public enum JumpTargetClassEnum + [MetaSerializer(typeof(EnumSerializer))] + public enum JumpTargetClass { ToName = 1, ToParent = 2, ToNodeAfterParentWaitNode = 3 } - [MetaSerializer(typeof(EnumSerializer))] - public enum VisibilityBehaviourEnum + [MetaSerializer(typeof(EnumSerializer))] + public enum VisibilityBehaviour { IgnoreVisibility = 1, ObeyVisibility = 2, } + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumJumpBehaviour + { + [MetaMember("mVal")] + public JumpBehaviour Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumJumpTargetClass + { + [MetaMember("Val")] + public JumpTargetClass Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumVisibilityBehaviour + { + [MetaMember("mVal")] + public VisibilityBehaviour Val { get; set; } + } + [MetaMember("Baseclass_DlgNode")] - public DlgNode DlgNode { get; set; } + public DlgNode DlgNode { get; set; } = new(); [MetaMember("mJumpToLink")] - public DlgNodeLink JumpToLink { get; set; } + public DlgNodeLink JumpToLink { get; set; } = new(); [MetaMember("mJumpToName")] - public Symbol JumpToName { get; set; } + public Symbol JumpToName { get; set; } = Symbol.Empty; [MetaMember("mJumpTargetClass")] - public JumpTargetClassEnum JumpTargetClass { get; set; } + public JumpTargetClass JumpTargetClassE { get; set; } [MetaMember("mJumpBehavior")] - public JumpBehaviourEnum JumpBehaviour { get; set; } + public JumpBehaviour JumpBehaviourE { get; set; } [MetaMember("mVisibilityBehavior")] - public VisibilityBehaviourEnum VisibilityBehaviour { get; set; } + public VisibilityBehaviour VisibilityBehaviourE { get; set; } [MetaMember("mChoiceTransparency")] public int ChoiceTransparency { get; set; } [MetaMember("mhJumpToDlg")] - public Handle JumpToDlg { get; set; } + public Handle JumpToDlg { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeStart.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeStart.cs index deb205c..7117fd3 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeStart.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Nodes/DlgNodeStart.cs @@ -13,4 +13,7 @@ public class DlgNodeStart : IDlgNode [MetaMember("mProdReportProps")] public PropertySet ProdReportProps { get; set; } + + [MetaMember("m_outputIndex")] + public int OutputIndex { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Note.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Note.cs index fc0ea91..444b1d8 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Note.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/Note.cs @@ -2,6 +2,7 @@ using TelltaleToolKit.Meta.Serialization; using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Common.UID; +using TelltaleToolKit.T3Types.Miscellaneous; namespace TelltaleToolKit.T3Types.Dialogs.Dlg; @@ -9,59 +10,64 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg; public class Note : IGenerator, IOwner { [MetaMember("Baseclass_UID::Generator")] - public Generator Generator { get; set; } + public Generator Generator { get; set; } = new(); [MetaMember("Baseclass_UID::Owner")] - public Owner Owner { get; set; } + public Owner Owner { get; set; } = new(); [MetaMember("mEntries")] public List Entries { get; set; } = []; [MetaMember("mName")] - public string Name { get; set; } + public string Name { get; set; } = string.Empty; + [MetaSerializer(typeof(MetaClassSerializer))] public class Entry : IGenerator, IOwner { [MetaMember("Baseclass_UID::Generator")] - public Generator Generator { get; set; } + public Generator Generator { get; set; } = new(); [MetaMember("Baseclass_UID::Owner")] - public Owner Owner { get; set; } + public Owner Owner { get; set; } = new(); [MetaMember("mAuthor")] - public string Author { get; set; } + public string Author { get; set; } = string.Empty; [MetaMember("mStamp")] - public DateStamp Stamp { get; set; } + public DateStamp Stamp { get; set; } = new(); [MetaMember("mCategory")] - public string Category { get; set; } + public string Category { get; set; } = string.Empty; [MetaMember("mText")] - public string Text { get; set; } + public string Text { get; set; } = string.Empty; } public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref Note obj, MetaStream stream) + public override void Serialize(ref Note obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) { - throw new NotSupportedException(); - } + stream.Write(obj.Entries.Count); - if (stream.Mode is MetaStreamMode.Read) + foreach (var entry in obj.Entries) + { + Entry entry1 = entry; + stream.Serialize(ref entry1); + } + } + else { - // mEntries is not serialized. int numEntries = stream.ReadInt32(); - for (var i = 0; i < numEntries; i++) + for (int i = 0; i < numEntries; i++) { - Entry? entry = null; + Entry entry = new(); stream.Serialize(ref entry); obj.Entries.Add(entry); } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/NoteCollection.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/NoteCollection.cs index 12da838..27f5253 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlg/NoteCollection.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlg/NoteCollection.cs @@ -1,5 +1,6 @@ using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Common.UID; namespace TelltaleToolKit.T3Types.Dialogs.Dlg; @@ -8,29 +9,36 @@ namespace TelltaleToolKit.T3Types.Dialogs.Dlg; public class NoteCollection : IGenerator { [MetaMember("Baseclass_UID::Generator")] - public Generator Generator { get; set; } + public Generator Generator { get; set; } = new(); [MetaMember("mNotes")] public Dictionary Notes { get; set; } = new(); public class Serializer : MetaSerializer { - public override void Serialize(ref NoteCollection obj, MetaStream stream) + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void Serialize(ref NoteCollection obj, MetaStream stream, MetaClassType? type = null) { + s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + if (stream.Mode is MetaStreamMode.Write) { - throw new NotSupportedException(); + stream.Write(obj.Notes.Count); + foreach (var note in obj.Notes.Values) + { + Note note1 = note; + stream.Serialize(ref note1); + } } - - if (stream.Mode is MetaStreamMode.Read) + else { - // mEntries is not serialized. int numNotes = stream.ReadInt32(); - for (var i = 0; i < numNotes; i++) + for (int i = 0; i < numNotes; i++) { - Note? note = null; + Note note = new(); stream.Serialize(ref note); - // TODO: Set the correct IDs. Not a priority, I haven't seen this serialized anywhere. obj.Notes.Add(i, note); } } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/DlgSettings/DlgObjectPropsMap.cs b/src/TelltaleToolKit/T3Types/Dialogs/DlgSettings/DlgObjectPropsMap.cs index 94cb6c5..38d6b59 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/DlgSettings/DlgObjectPropsMap.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/DlgSettings/DlgObjectPropsMap.cs @@ -1,5 +1,6 @@ using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Common.UID; using TelltaleToolKit.T3Types.Properties; @@ -8,11 +9,12 @@ namespace TelltaleToolKit.T3Types.Dialogs.DlgSettings; [MetaSerializer(typeof(Serializer))] public class DlgObjectPropsMap : IGenerator { - public List GroupDefinitions { get; set; } - [MetaMember("Baseclass_UID::Generator")] public Generator Generator { get; set; } + public List GroupDefinitions { get; set; } = []; + + [MetaSerializer(typeof(MetaClassSerializer))] public class GroupDefinition : IOwner { [MetaMember("mVer")] @@ -30,7 +32,12 @@ public class GroupDefinition : IOwner public class Serializer : MetaSerializer { - public override void Serialize(ref DlgObjectPropsMap obj, MetaStream stream) + public override void PreSerialize(ref DlgObjectPropsMap? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new DlgObjectPropsMap(); + } + + public override void Serialize(ref DlgObjectPropsMap obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogBase.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogBase.cs index aee4213..29570b7 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogBase.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogBase.cs @@ -36,16 +36,30 @@ public class DialogBase public bool HasStyleGuides { get; set; } [MetaMember("mDependentVisBranch")] - public string DependentVisBranch { get; set; } = String.Empty; + public string DependentVisBranch { get; set; } = string.Empty; + + [MetaMember("mDescriptiveName")] + public string DescriptiveName { get; set; } + + [MetaMember("mFlags")] + public Flags mFlags { get; set; } + + [MetaMember("mTaskID")] + public uint mTaskID { get; set; } + public int ActualId; public List StyleGuideRefs = []; public class Serializer : MetaSerializer { - public override void Serialize(ref DialogBase obj, MetaStream stream) + + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void Serialize(ref DialogBase obj, MetaStream stream, MetaClassType? type = null) { - new MetaClassSerializer().Serialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) { diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogExchange.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogExchange.cs index 7f40449..6536773 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogExchange.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogExchange.cs @@ -2,8 +2,10 @@ using TelltaleToolKit.Meta.Serialization; using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Chores; +using TelltaleToolKit.T3Types.Dialogs.Dlg; using TelltaleToolKit.T3Types.Dialogs.Dlog; using TelltaleToolKit.T3Types.Languages.Landb; +using TelltaleToolKit.T3Types.Textures; namespace TelltaleToolKit.T3Types.Dialogs; @@ -16,6 +18,9 @@ public class DialogExchange : IDialogBase [MetaMember("mLines")] public List Lines { get; set; } = []; + [MetaMember("mElems")] + public List mElems { get; set; } = []; + [MetaMember("mBranchLink")] public string BranchLink { get; set; } = string.Empty; @@ -34,7 +39,23 @@ public class DialogExchange : IDialogBase [MetaMember("mhChore")] public Handle Chore { get; set; } = new(); - internal class ExchangeElem + [MetaMember("mDispTextProxy")] + public LanguageResourceProxy mDispTextProxy { get; set; } + + + [MetaMember("mhTexture")] + public Handle mhTexture { get; set; } + + [MetaMember("mNotes")] + public NoteCollection mNotes { get; set; } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class ExchangeElem { + [MetaMember("mID")] + public int ID { get; set; } + + [MetaMember("mType")] + public int Type { get; set; } } } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogItem.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogItem.cs index feaa5a6..e7f4798 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogItem.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogItem.cs @@ -3,6 +3,7 @@ using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Dialogs.Dlog; using TelltaleToolKit.T3Types.Languages.Landb; +using TelltaleToolKit.T3Types.Textures; namespace TelltaleToolKit.T3Types.Dialogs; @@ -22,10 +23,10 @@ public class DialogItem : IDialogBase public LanguageResProxy DispTextProxy { get; set; } = new(); [MetaMember("mPlaybackMode")] - public int PlaybackMode { get; set; } // TODO Change to PlayBackMode + public PlaybackMode PlaybackModeE { get; set; } [MetaMember("mPlaybackMode")] - public EnumPlaybackMode PlaybackModeStruct { get; set; } = new(); // TODO Change to PlayBackMode + public EnumPlaybackMode PlaybackModeStruct { get; set; } = new(); [MetaMember("mEnterScript")] public string EnterScript { get; set; } = string.Empty; @@ -57,15 +58,24 @@ public class DialogItem : IDialogBase [MetaMember("mbCutscene")] public bool Cutscene { get; set; } + [MetaMember("mDispTextProxy")] + public LanguageResourceProxy mDispTextProxy { get; set; } + + [MetaMember("mhTexture")] + public Handle mhTexture { get; set; } + + [MetaMember("mUserData")] + public Symbol mUserData { get; set; } + [MetaSerializer(typeof(MetaClassSerializer))] public struct EnumPlaybackMode { [MetaMember("mVal")] - public PlaybackModeEnum Value { get; set; } + public PlaybackMode Value { get; set; } } - [MetaSerializer(typeof(EnumSerializer))] - public enum PlaybackModeEnum + [MetaSerializer(typeof(EnumSerializer))] + public enum PlaybackMode { sequential_looping = 0x0, sequential_repeat_final = 0x1, diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogLine.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogLine.cs index ec131fb..b09ea7d 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogLine.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogLine.cs @@ -14,4 +14,7 @@ public class DialogLine : IDialogBase [MetaMember("mLangResProxy")] public LanguageResProxy LangResProxy { get; set; } = new(); + + [MetaMember("mLangResProxy")] + public LanguageResourceProxy LanguageResourceProxy { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogResource.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogResource.cs index 4e18708..8025b18 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogResource.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogResource.cs @@ -40,6 +40,10 @@ public class DialogResource [MetaMember("mProjectID")] public int ProjectId { get; set; } + [MetaMember("mTaskID")] + public uint mTaskID { get; set; } + + [MetaMember("mResourcePath")] public string ResourcePath { get; set; } = string.Empty; @@ -54,19 +58,34 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref DialogResource obj, MetaStream stream) + public override void PreSerialize(ref DialogResource? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new DialogResource(); + } + + public override void Serialize(ref DialogResource obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException($"Serializer is not implement for {SerializationType}"); + stream.Write(obj.Dialogs.Count); + stream.Write(obj.Branches.Count); + stream.Write(obj.Items.Count); + stream.Write(obj.Exchanges.Count); + stream.Write(obj.Lines.Count); + stream.Write(obj.Texts.Count); + + SerializeDialogBaseArray(obj.Dialogs, obj.Dialogs.Count, stream); + SerializeDialogBaseArray(obj.Branches, obj.Branches.Count, stream); + SerializeDialogBaseArray(obj.Items, obj.Items.Count, stream); + SerializeDialogBaseArray(obj.Exchanges, obj.Exchanges.Count, stream); + SerializeDialogBaseArray(obj.Lines, obj.Lines.Count, stream); + SerializeDialogBaseArray(obj.Texts, obj.Texts.Count, stream); } - - if (stream.Mode is MetaStreamMode.Read) + else { - // Console.WriteLine("Current position: " + stream.GetPosition()); int dialogsCount = stream.ReadInt32(); int branchesCount = stream.ReadInt32(); int itemsCount = stream.ReadInt32(); @@ -88,28 +107,33 @@ private static void SerializeDialogBaseArray(List list, int count, MetaStr { if (stream.Mode is MetaStreamMode.Write) { - } - else if (stream.Mode is MetaStreamMode.Read) - { - // Console.WriteLine(count); - if (count <= 0) + foreach (var item in list) { - return; + stream.Write(item.DialogBase.ActualId); } - var ids = new int[count]; + foreach (var item in list) + { + T dialogBase = item; + stream.Serialize(ref dialogBase); + } + } + else + { + if (count <= 0) return; + + int[] ids = new int[count]; for (int i = 0; i < count; i++) { ids[i] = stream.ReadInt32(); } - var dialog = default(T); - - for (var i = 0; i < count; i++) + for (int i = 0; i < count; i++) { - Toolkit.Instance.GetSerializer().Serialize(ref dialog, stream); - list.Add(dialog); + T dialog = new(); + stream.Serialize(ref dialog); dialog.DialogBase.ActualId = ids[i]; + list.Add(dialog); } } } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogText.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogText.cs index 7b56bec..ff80393 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogText.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/DialogText.cs @@ -18,4 +18,7 @@ public class DialogText : IDialogBase [MetaMember("mLangResProxy")] public LanguageResProxy LangResProxy { get; set; } = new(); + [MetaMember("mLangResProxy")] + public LanguageResourceProxy LangResourceProxy { get; set; } = new(); + } diff --git a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/LanguageResourceProxy.cs b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/LanguageResourceProxy.cs index 15c5f0e..b180f20 100644 --- a/src/TelltaleToolKit/T3Types/Dialogs/Dlog/LanguageResourceProxy.cs +++ b/src/TelltaleToolKit/T3Types/Dialogs/Dlog/LanguageResourceProxy.cs @@ -9,4 +9,11 @@ public class LanguageResourceProxy { [MetaMember("mID")] public uint LangId { get; set; } + + [MetaMember("mLangID")] + public int mLangID { get; set; } + + internal class ModRes + { + } } diff --git a/src/TelltaleToolKit/T3Types/Effects/ParticleLODKey.cs b/src/TelltaleToolKit/T3Types/Effects/ParticleLODKey.cs index bbdf448..8a1f55e 100644 --- a/src/TelltaleToolKit/T3Types/Effects/ParticleLODKey.cs +++ b/src/TelltaleToolKit/T3Types/Effects/ParticleLODKey.cs @@ -8,14 +8,14 @@ namespace TelltaleToolKit.T3Types.Effects; public class ParticleLODKey { [MetaMember("mCountScale")] - public float mCountScale { get; set; } + public float CountScale { get; set; } [MetaMember("mStrideScale")] - public float mStrideScale { get; set; } + public float StrideScale { get; set; } [MetaMember("mDivisionScale")] - public float mDivisionScale { get; set; } + public float DivisionScale { get; set; } [MetaMember("mLifeScale")] - public float mLifeScale { get; set; } + public float LifeScale { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Effects/ParticlePropConnect.cs b/src/TelltaleToolKit/T3Types/Effects/ParticlePropConnect.cs index ef724b2..e68c1f3 100644 --- a/src/TelltaleToolKit/T3Types/Effects/ParticlePropConnect.cs +++ b/src/TelltaleToolKit/T3Types/Effects/ParticlePropConnect.cs @@ -9,23 +9,23 @@ namespace TelltaleToolKit.T3Types.Effects; public class ParticlePropConnect { [MetaMember("mModType")] - public ParticlePropModifier mModType { get; set; } + public EnumParticlePropModifier.ParticlePropModifier ModType { get; set; } [MetaMember("mDriveType")] - public ParticlePropDriver mDriveType { get; set; } + public EnumParticlePropDriver.ParticlePropDriver DriveType { get; set; } [MetaMember("mDriveMin")] - public float mDriveMin { get; set; } + public float DriveMin { get; set; } [MetaMember("mDriveMax")] - public float mDriveMax { get; set; } + public float DriveMax { get; set; } [MetaMember("mModMin")] - public float mModMin { get; set; } + public float ModMin { get; set; } [MetaMember("mModMax")] - public float mModMax { get; set; } + public float ModMax { get; set; } [MetaMember("mInvert")] - public bool mInvert { get; set; } + public bool Invert { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Enlighten/EnlightenData.cs b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenData.cs new file mode 100644 index 0000000..766b290 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenData.cs @@ -0,0 +1,21 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Enlighten; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class EnlightenData +{ + [MetaMember("mSignature")] + public EnlightenSignature Signature { get; set; } = new(); + + [MetaMember("mName")] + public string Name { get; set; } = string.Empty; + + [MetaMember("mSystemData")] + public List SystemData { get; set; } = []; + + [MetaMember("mProbeData")] + public List ProbeData { get; set; } = []; +} diff --git a/src/TelltaleToolKit/T3Types/Enlighten/EnlightenModule.cs b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenModule.cs new file mode 100644 index 0000000..37fcd93 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenModule.cs @@ -0,0 +1,395 @@ +using System.Numerics; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Enlighten; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class EnlightenModule +{ + [MetaSerializer(typeof(MetaClassSerializer))] + public class EnlightenSystemSettings + { + [MetaMember("mDefaultQuality")] + public EnumeQuality DefaultQuality { get; set; } + + [MetaMember("mAdaptiveProbeResolution")] + public EnumeProbeResolution AdaptiveProbeResolution { get; set; } + + [MetaMember("mDisableEnlighten")] + public bool DisableEnlighten { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeProbeResolution + { + [MetaMember("mVal")] + public ProbeResolution Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class EnlightenCubemapSettings + { + [MetaMember("mFaceWidth")] + public int FaceWidth { get; set; } + + [MetaMember("mBoxOrigin")] + public Vector3 BoxOrigin { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnlightenAdaptiveProbeVolumeSettings + { + [MetaMember("mQuality")] + public EnumeQuality QualityE { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeQuality + { + [MetaMember("mVal")] + public Quality Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class EnlightenProbeVolumeSettings + { + [MetaMember("mQuality")] + public EnumeQuality QualityE { get; set; }= new(); + + [MetaMember("mLightmapType")] + public string LightmapType { get; set; } = string.Empty; + + [MetaMember("mResolution")] + public Vector3 Resolution { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnlightenAutoProbeVolumeSettings + { + [MetaMember("mQuality")] + public EnumeQuality QualityE { get; set; } + + [MetaMember("mMinProbeSetSize")] + public int MinProbeSetSize { get; set; } + + [MetaMember("mMergingThreshold")] + public float MergingThreshold { get; set; } + + [MetaMember("mMinProbeSpacing")] + public int MinProbeSpacing { get; set; } + + [MetaMember("mMaxProbeSpacing")] + public int MaxProbeSpacing { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class EnlightenLightSettings + { + [MetaMember("mEnlightenSaturation")] + public float EnlightenSaturation { get; set; } + + [MetaMember("mEnlightenOnly")] + public bool EnlightenOnly { get; set; } + + [MetaMember("mCastDynamicEnlightenShadows")] + public bool CastDynamicEnlightenShadows { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class EnlightenPrimitiveSettings + { + [MetaMember("mSystemId")] + public string SystemId { get; set; } = string.Empty; + + [MetaMember("mEnlightenLightingMode")] + public EnumeInstanceType EnlightenLightingMode { get; set; } + + [MetaMember("mEnlightenUpdateMethod")] + public EnumeUpdateMethod EnlightenUpdateMethod { get; set; } + + [MetaMember("mEnlightenQuality")] + public EnumeQualityWithDefault EnlightenQuality { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeInstanceType + { + [MetaMember("mVal")] + public InstanceType Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeUpdateMethod + { + [MetaMember("mVal")] + public UpdateMethod Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeQualityWithDefault + { + [MetaMember("mVal")] + public QualityWithDefault Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeDistributedBuildSystem + { + [MetaMember("mVal")] + public DistributedBuildSystem Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeSceneOptimisationMode + { + [MetaMember("mVal")] + public SceneOptimisationMode Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeBackfaceType + { + [MetaMember("mVal")] + public BackfaceType Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeAutoUVSimplificationMode + { + [MetaMember("mVal")] + public AutoUVSimplificationMode Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeProbeSampleMethod + { + [MetaMember("mVal")] + public ProbeSampleMethod Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeDisplayQuality + { + [MetaMember("mVal")] + public DisplayQuality Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeRadiositySampleRate + { + [MetaMember("mVal")] + public RadiositySampleRate Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeAgentUsage + { + [MetaMember("mVal")] + public AgentUsage Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeUpdateMethodWithDefault + { + [MetaMember("mVal")] + public UpdateMethodWithDefault Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeProbeResolutionWithDefault + { + [MetaMember("mVal")] + public ProbeResolutionWithDefault Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class EnlightenMeshSettings + { + [MetaMember("mEnlightenLightingMode")] + public EnumeInstanceType EnlightenLightingMode { get; set; } + + [MetaMember("mAutoUVSettings")] + public AutoUVSettings AutoUvSettings { get; set; } = new(); + + [MetaMember("mEnlightenQuality")] + public EnumeQuality EnlightenQuality { get; set; } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class AutoUVSettings + { + [MetaMember("mSimplificationMode")] + public EnumeSimplifyMode SimplificationMode { get; set; } + + [MetaMember("mMaxDistance")] + public float MaxDistance { get; set; } + + [MetaMember("mMaxInitialNormalDeviation")] + public float MaxInitialNormalDeviation { get; set; } + + [MetaMember("mMaxGeneralNormalDeviation")] + public float MaxGeneralNormalDeviation { get; set; } + + [MetaMember("mExpansionFactor")] + public float ExpansionFactor { get; set; } + + [MetaMember("mSignificantAreaRatio")] + public float SignificantAreaRatio { get; set; } + } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumeSimplifyMode + { + [MetaMember("mVal")] + public SimplifyMode Val { get; set; } + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum InstanceType + { + // InstanceType_ + Radiosity = 0x0, + StaticSetDressing_Unused = 0x1, + FullyDynamic = 0x2, + ProbeRadiosity = 0x3, + Auto = 0x4, + Disabled = 0x5, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum UpdateMethod + { + // UpdateMethod_ + Dynamic = 0x0, + Static = 0x1, + Auto = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum QualityWithDefault + { + // QualityWithDefault_ + Background = 0x0, + Low = 0x1, + Medium = 0x2, + High = 0x3, + Auto = 0x4, + UseDefault = 0x5, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum ProbeResolution + { + // ProbeResolution_ + Full = 0x0, + ProbeResolution_1_2 = 0x1, + ProbeResolution_1_4 = 0x2, + ProbeResolution_1_8 = 0x3, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum Quality + { + // Quality_ + Background = 0, + Low = 1, + Medium = 2, + High = 3, + Auto = 4, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum DistributedBuildSystem + { + None = 0x0, + SN_DBS = 0x1, + Incredibuild = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum SceneOptimisationMode + { + None = 0x0, + EqualPixelArea = 0x1, + Voxelisation = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum BackfaceType + { + EBT_Auto = 0x0, + EBT_Invalid = 0x1, + EBT_Black = 0x2, + EBT_Transparent = 0x3, + EBT_Double_Sided = 0x4, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum AutoUVSimplificationMode + { + EAUM_Automatic = 0x0, + EAUM_Override = 0x1, + EAUM_Disable = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum ProbeSampleMethod + { + UseBounds = 0x0, + ForceSingle = 0x1, + ForceMultiple = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum DisplayQuality + { + Low = 0x0, + Medium = 0x1, + High = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum RadiositySampleRate + { + Low = 0x0, + Medium = 0x1, + High = 0x2, + VeryHigh = 0x3, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum UpdateMethodWithDefault + { + Dynamic = 0x0, + Static = 0x1, + UseLevelDefault = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum ProbeResolutionWithDefault + { + Full = 0x0, + _1_2 = 0x1, + _1_4 = 0x2, + _1_8 = 0x3, + UseLevelDefault = 0x4, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum AgentUsage + { + Default = 0x0, + Aggressive = 0x1, + Conservative = 0x2, + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum SimplifyMode + { + None = 0x0, + SimplifyNoUvs = 0x1, + SimplifyUsingUvs = 0x2, + } +} diff --git a/src/TelltaleToolKit/T3Types/Enlighten/EnlightenProbeData.cs b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenProbeData.cs new file mode 100644 index 0000000..8dd6ca5 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenProbeData.cs @@ -0,0 +1,25 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Enlighten; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class EnlightenProbeData +{ + [MetaMember("mEnvTileName")] + public Symbol EnvTileName { get; set; } = Symbol.Empty; + + [MetaMember("mRadProbeSetCore")] + public BinaryBuffer RadProbeSetCore { get; set; } = new(); + // Enlighten::RadProbeSetCore mpRadProbeSetCore;//ptr but not in lib. this is the format of the data below +} + +// struct RadProbeSetCore { +// RadProbeSetMetaData m_MetaData; +// RadDataBlock m_ProbeSetPrecomp; +// RadDataBlock m_EntireProbeSetPrecomp; +// RadDataBlock m_InterpolationData; +// RadDataBlock m_VisibilityData; +// RadDataBlock m_DebugData; +// }; diff --git a/src/TelltaleToolKit/T3Types/Enlighten/EnlightenSignature.cs b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenSignature.cs new file mode 100644 index 0000000..197e1ec --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenSignature.cs @@ -0,0 +1,18 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Enlighten; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class EnlightenSignature +{ + [MetaMember("mSignature")] + public ulong Signature { get; set; } + + [MetaMember("mMagicNumber")] + public uint MagicNumber { get; set; } + + [MetaMember("mVersion")] + public uint Version { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Enlighten/EnlightenSystemData.cs b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenSystemData.cs new file mode 100644 index 0000000..6544e43 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Enlighten/EnlightenSystemData.cs @@ -0,0 +1,22 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Enlighten; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class EnlightenSystemData +{ + [MetaMember( "mName")] + public Symbol Name { get; set; } = Symbol.Empty; + [MetaMember( "mEnvTileName")] + public Symbol EnvTileName { get; set; } = Symbol.Empty; + [MetaMember( "mRadSystemCore")] + public BinaryBuffer RadSystemCore { get; set; } = new(); + [MetaMember( "mInputWorkspace")] + public BinaryBuffer InputWorkspace { get; set; } = new(); + [MetaMember( "mClusterAlbedoWorkspaceMaterial")] + public BinaryBuffer ClusterAlbedoWorkspaceMaterial { get; set; } = new(); + [MetaMember( "mPrecomputedVisibility")] + public BinaryBuffer PrecomputedVisibility { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/EnlightenModule.cs b/src/TelltaleToolKit/T3Types/EnlightenModule.cs deleted file mode 100644 index 4edcb84..0000000 --- a/src/TelltaleToolKit/T3Types/EnlightenModule.cs +++ /dev/null @@ -1,214 +0,0 @@ -using System.Numerics; -using TelltaleToolKit.Meta.Reflection; -using TelltaleToolKit.Meta.Serialization; -using TelltaleToolKit.Meta.Serialization.Serializers; - -namespace TelltaleToolKit.T3Types; - -[MetaSerializer(typeof(MetaClassSerializer))] -public class EnlightenModule -{ - [MetaSerializer(typeof(MetaClassSerializer))] - public class EnlightenSystemSettings - { - [MetaMember("mDefaultQuality")] - public EnumeQuality DefaultQuality { get; set; } - - [MetaMember("mAdaptiveProbeResolution")] - public EnumeProbeResolution AdaptiveProbeResolution { get; set; } - - [MetaMember("mDisableEnlighten")] - public bool DisableEnlighten { get; set; } - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public struct EnumeProbeResolution - { - [MetaMember("mVal")] - public ProbeResolution Val { get; set; } - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public class EnlightenCubemapSettings - { - [MetaMember("mFaceWidth")] - public int FaceWidth { get; set; } - - [MetaMember("mBoxOrigin")] - public Vector3 BoxOrigin { get; set; } - } - - public struct EnlightenAdaptiveProbeVolumeSettings - { - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public struct EnumeQuality - { - [MetaMember("mVal")] - public Quality Val { get; set; } - } - - public struct EnlightenProbeVolumeSettings - { - } - - public struct EnlightenAutoProbeVolumeSettings - { - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public struct EnlightenLightSettings - { - [MetaMember("mEnlightenSaturation")] - public float EnlightenSaturation { get; set; } - - [MetaMember("mEnlightenOnly")] - public bool EnlightenOnly { get; set; } - - [MetaMember("mCastDynamicEnlightenShadows")] - public bool CastDynamicEnlightenShadows { get; set; } - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public class EnlightenPrimitiveSettings - { - [MetaMember("mSystemId")] - public string SystemId { get; set; } = string.Empty; - - [MetaMember("mEnlightenLightingMode")] - public EnumeInstanceType EnlightenLightingMode { get; set; } - - [MetaMember("mEnlightenUpdateMethod")] - public EnumeUpdateMethod EnlightenUpdateMethod { get; set; } - - [MetaMember("mEnlightenQuality")] - public EnumeQualityWithDefault EnlightenQuality { get; set; } - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public struct EnumeInstanceType - { - [MetaMember("mVal")] - public InstanceType Val { get; set; } - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public struct EnumeUpdateMethod - { - [MetaMember("mVal")] - public UpdateMethod Val { get; set; } - } - - [MetaSerializer(typeof(MetaClassSerializer))] - public struct EnumeQualityWithDefault - { - [MetaMember("mVal")] - public QualityWithDefault Val { get; set; } - } - - public struct EnumeDistributedBuildSystem - { - } - - public struct EnumeSceneOptimisationMode - { - } - - public struct EnumeBackfaceType - { - } - - public struct EnumeAutoUVSimplificationMode - { - } - - public struct EnumeProbeSampleMethod - { - } - - public struct EnumeDisplayQuality - { - } - - public struct EnumeRadiositySampleRate - { - } - - public struct EnumeAgentUsage - { - } - - public struct EnumeUpdateMethodWithDefault - { - } - - public struct EnumeProbeResolutionWithDefault - { - } - - public struct EnlightenMeshSettings - { - public class AutoUVSettings - { - } - } - - public struct EnumeSimplifyMode - { - } - - [MetaSerializer(typeof(EnumSerializer))] - public enum InstanceType - { - // InstanceType_ - Radiosity = 0x0, - StaticSetDressing_Unused = 0x1, - FullyDynamic = 0x2, - ProbeRadiosity = 0x3, - Auto = 0x4, - Disabled = 0x5, - } - - [MetaSerializer(typeof(EnumSerializer))] - public enum UpdateMethod - { - // UpdateMethod_ - Dynamic = 0x0, - Static = 0x1, - Auto = 0x2, - } - - [MetaSerializer(typeof(EnumSerializer))] - public enum QualityWithDefault - { - // QualityWithDefault_ - Background = 0x0, - Low = 0x1, - Medium = 0x2, - High = 0x3, - Auto = 0x4, - UseDefault = 0x5, - } - - [MetaSerializer(typeof(EnumSerializer))] - public enum ProbeResolution - { - // ProbeResolution_ - Full = 0x0, - ProbeResolution_1_2 = 0x1, - ProbeResolution_1_4 = 0x2, - ProbeResolution_1_8 = 0x3, - } - - [MetaSerializer(typeof(EnumSerializer))] - public enum Quality - { - // Quality_ - Background = 0, - Low = 1, - Medium = 2, - High = 3, - Auto = 4, - } -} diff --git a/src/TelltaleToolKit/T3Types/Events/EventData.cs b/src/TelltaleToolKit/T3Types/Events/EventData.cs new file mode 100644 index 0000000..1ca1b95 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Events/EventData.cs @@ -0,0 +1,20 @@ +namespace TelltaleToolKit.T3Types.Events; + +public class EventData +{ + public EventDataType DataType { get; set; } // mDataType + + // Union members – only one is meaningful at a time + public Symbol DataSymbol { get; set; } = Symbol.Empty; // mDataSymbolMemory + public long DataInt { get; set; } // mDataInt (u64 → long/ulong) + public double DataDouble { get; set; } // mDataDouble (long double → double) + + public byte Severity { get; set; } // mSeverity (char → byte) +} + +public enum EventDataType +{ + eEventData_Symbol = 0, + eEventData_Int = 1, + eEventData_Double = 2 +} diff --git a/src/TelltaleToolKit/T3Types/Events/EventLoggerEvent.cs b/src/TelltaleToolKit/T3Types/Events/EventLoggerEvent.cs new file mode 100644 index 0000000..f886af2 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Events/EventLoggerEvent.cs @@ -0,0 +1,95 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Events; + +[MetaSerializer(typeof(Serializer))] +public class EventLoggerEvent +{ + [MetaMember("mEventID")] + public uint EventID { get; set; } + + [MetaMember("mMaxSeverity")] + public int MaxSeverity { get; set; } + + public class TypeHeader + { + [MetaMember("mType")] + public Symbol Type { get; set; } = Symbol.Empty; + + [MetaMember("mData")] + public List Data { get; set; } = []; + } + + public List EventData { get; set; } = []; + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSaveGameSerializer = new(); + + public override void Serialize(ref EventLoggerEvent obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSaveGameSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + throw new NotImplementedException(); + } + else if (stream.Mode is MetaStreamMode.Read) + { + stream.BeginBlock(); + uint dataCount = stream.ReadUInt32(); + uint childCount = stream.ReadUInt32(); + + for (uint i = 0; i < dataCount; i++) + { + TypeHeader header = new() { Type = stream.ReadSymbol() }; + + int count = stream.ReadInt32(); + + for (int j = 0; j < count; j++) + { + EventData eventData = new() { DataType = (EventDataType)stream.ReadByte() }; + header.Data.Add(eventData); + } + + obj.EventData.Add(header); + } + + foreach (var header in obj.EventData) + { + stream.BeginObject(header.Type.ToString(), true); + + foreach (var eventData in header.Data) + { + stream.BeginObject("EventData"); + switch (eventData.DataType) + { + case EventDataType.eEventData_Symbol: + eventData.DataSymbol = stream.ReadSymbol(); + break; + case EventDataType.eEventData_Int: + eventData.DataInt = stream.ReadInt64(); + break; + case EventDataType.eEventData_Double: + eventData.DataDouble = stream.ReadDouble(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + stream.EndObject("EventData"); + stream.BeginObject("EventSeverity"); + eventData.Severity = stream.ReadByte(); + stream.EndObject("EventSeverity"); + } + + stream.EndObject(header.Type.ToString()); + } + + stream.EndBlock(); + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Events/EventStorage.cs b/src/TelltaleToolKit/T3Types/Events/EventStorage.cs new file mode 100644 index 0000000..f1a0ae1 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Events/EventStorage.cs @@ -0,0 +1,67 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Events; + +[MetaSerializer(typeof(Serializer))] +public class EventStorage +{ + [MetaMember("mVersion")] + public int Version { get; set; } + + [MetaMember("mSessionID")] + public ulong SessionID { get; set; } + + [MetaMember("mPages")] + public List Pages { get; set; } = []; + + [MetaMember("mName")] + public string Name { get; set; } = string.Empty; + + [MetaMember("mLastEventID")] + public uint LastEventID { get; set; } + + [MetaMember("mEventStoragePageSize")] + public int EventStoragePageSize { get; set; } + + public EventStoragePage? CurrentPage { get; set; } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class PageEntry + { + [MetaMember("mhPage")] + public Handle Page { get; set; } = new(); + + [MetaMember("mMaxEventID")] + public uint MaxEventID { get; set; } + } + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSaveGameSerializer = new(); + + public override void Serialize(ref EventStorage obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSaveGameSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + throw new NotImplementedException(); + } + + if (stream.Mode is MetaStreamMode.Read) + { + bool hasPage = stream.ReadBoolean(); + if (!hasPage) + { + return; + } + + var page = new EventStoragePage(); + stream.Serialize(ref page); + obj.CurrentPage = page; + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Events/EventStoragePage.cs b/src/TelltaleToolKit/T3Types/Events/EventStoragePage.cs new file mode 100644 index 0000000..c927578 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Events/EventStoragePage.cs @@ -0,0 +1,54 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Events; + +//.EPAGE FILES +[MetaSerializer(typeof(Serializer))] +public class EventStoragePage +{ + [MetaMember("mVersion")] + public int Version { get; set; } + + [MetaMember("mSessionID")] + public ulong SessionID { get; set; } + + [MetaMember("mFlushedNameOnDisk")] + public string FlushedNameOnDisk { get; set; } = string.Empty; + + public List Events = []; + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSaveGameSerializer = new(); + + public override void Serialize(ref EventStoragePage obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSaveGameSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + stream.Write(obj.Events.Count); + foreach (var loggerEvent in obj.Events) + { + EventLoggerEvent eventLoggerEvent = loggerEvent; + stream.Serialize(ref eventLoggerEvent); + } + } + else + { + int eventCount = stream.ReadInt32(); + stream.BeginObject("Events", true); + for (int i = 0; i < eventCount; i++) + { + var loggerEvent = new EventLoggerEvent(); + stream.Serialize(ref loggerEvent); + obj.Events.Add(loggerEvent); + } + + stream.EndObject("Events"); + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/SaveGame.cs b/src/TelltaleToolKit/T3Types/Events/SaveGame.cs similarity index 71% rename from src/TelltaleToolKit/T3Types/SaveGame.cs rename to src/TelltaleToolKit/T3Types/Events/SaveGame.cs index ecd00a0..2cfbd7a 100644 --- a/src/TelltaleToolKit/T3Types/SaveGame.cs +++ b/src/TelltaleToolKit/T3Types/Events/SaveGame.cs @@ -4,7 +4,7 @@ using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Properties; -namespace TelltaleToolKit.T3Types; +namespace TelltaleToolKit.T3Types.Events; [MetaSerializer(typeof(Serializer))] public class SaveGame @@ -21,12 +21,27 @@ public class SaveGame [MetaMember("mAdditionalPropNames")] public HashSet AdditionalPropNames { get; set; } = []; + [MetaMember("mRuntimePropNames")] + public HashSet RuntimePropNamesS { get; set; } = []; + + [MetaMember("mEnabledDynamicSets")] + public HashSet EnabledDynamicSets { get; set; } = []; + [MetaSerializer(typeof(MetaClassSerializer))] public class AgentInfo { [MetaMember("mAgentName")] public string AgentName { get; set; } = string.Empty; + [MetaMember("mAgentName")] + public Symbol AgentNameS { get; set; } = Symbol.Empty; + + [MetaMember("mSceneName")] + public string SceneName { get; set; } = string.Empty; + + [MetaMember("mSceneName")] + public Symbol SceneNameS { get; set; } = Symbol.Empty; + [MetaMember("mPosition")] public Vector3 Position { get; set; } = new(); @@ -41,6 +56,12 @@ public class AgentInfo [MetaMember("mAttachedToNode")] public string AttachedToNode { get; set; } = string.Empty; + + [MetaMember("mAttachedToAgent")] + public Symbol AttachedToAgentS { get; set; } = Symbol.Empty; + + [MetaMember("mAttachedToNode")] + public Symbol AttachedToNodeS { get; set; } = Symbol.Empty; } @@ -48,8 +69,9 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSaveGameSerializer = new(); - public override void Serialize(ref SaveGame obj, MetaStream stream) + public override void Serialize(ref SaveGame obj, MetaStream stream, MetaClassType? type = null) { + s_metaClassSaveGameSerializer.PreSerialize(ref obj, stream); s_metaClassSaveGameSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) diff --git a/src/TelltaleToolKit/T3Types/Flags.cs b/src/TelltaleToolKit/T3Types/Flags.cs index f80cb06..ecd322d 100644 --- a/src/TelltaleToolKit/T3Types/Flags.cs +++ b/src/TelltaleToolKit/T3Types/Flags.cs @@ -19,9 +19,9 @@ public struct Flags public bool Has(int flag) => (Data & flag) == flag; public bool HasAny(int mask) => (Data & mask) != 0; - public Flags Set(int flag) => new Flags(Data | flag); - public Flags Clear(int flag) => new Flags(Data & ~flag); - public Flags Toggle(int flag) => new Flags(Data ^ flag); + public Flags Set(int flag) => new(Data | flag); + public Flags Clear(int flag) => new(Data & ~flag); + public Flags Toggle(int flag) => new(Data ^ flag); public override string ToString() => $"0x{Data:X16}"; @@ -30,10 +30,10 @@ public struct Flags public override int GetHashCode() => Data; public static implicit operator int(Flags f) => f.Data; - public static implicit operator Flags(int i) => new Flags(i); + public static implicit operator Flags(int i) => new(i); - public static Flags operator |(Flags a, Flags b) => new Flags(a.Data | b.Data); - public static Flags operator &(Flags a, Flags b) => new Flags(a.Data & b.Data); - public static Flags operator ^(Flags a, Flags b) => new Flags(a.Data ^ b.Data); - public static Flags operator ~(Flags a) => new Flags(~a.Data); + public static Flags operator |(Flags a, Flags b) => new(a.Data | b.Data); + public static Flags operator &(Flags a, Flags b) => new(a.Data & b.Data); + public static Flags operator ^(Flags a, Flags b) => new(a.Data ^ b.Data); + public static Flags operator ~(Flags a) => new(~a.Data); } diff --git a/src/TelltaleToolKit/T3Types/Fonts/Font.cs b/src/TelltaleToolKit/T3Types/Fonts/Font.cs index 3bb7391..107e9ee 100644 --- a/src/TelltaleToolKit/T3Types/Fonts/Font.cs +++ b/src/TelltaleToolKit/T3Types/Fonts/Font.cs @@ -43,13 +43,19 @@ public class Font public bool IsFiltered { get; set; } [MetaMember("mTtfData")] - public BinaryBuffer TtfData { get; set; } + public BinaryBuffer TtfData { get; set; } = new(); [MetaMember("mBasePointSize")] public float BasePointSize { get; set; } [MetaMember("mPreferredPointSizes")] - public List PreferredPointSizes { get; set; } + public List PreferredPointSizes { get; set; } = []; + + [MetaMember("mWiiScale")] + public float WiiScale { get; set; } + + [MetaMember("mFontScale")] + public float FontScale { get; set; } [MetaSerializer(typeof(MetaClassSerializer))] public class GlyphInfo diff --git a/src/TelltaleToolKit/T3Types/Handle.cs b/src/TelltaleToolKit/T3Types/Handle.cs index be5277a..8dcf0df 100644 --- a/src/TelltaleToolKit/T3Types/Handle.cs +++ b/src/TelltaleToolKit/T3Types/Handle.cs @@ -5,52 +5,40 @@ namespace TelltaleToolKit.T3Types; public class HandleObjectInfo { - public Symbol ObjectName = Symbol.Empty; public Flags Flags; - public MetaClassType Type; public object HandleObject; + public Symbol ObjectName = Symbol.Empty; + public MetaClassType Type; - public override string ToString() - { - return $"Symbol: {ObjectName}"; - } + public override string ToString() => $"Symbol: {ObjectName}"; } +[MetaSerializer(typeof(Serializer))] public class HandleBase { - // public Symbol ObjectName; public HandleObjectInfo ObjectInfo = new(); - [MetaSerializer(typeof(HandleBaseSerializer))] - public class HandleBaseSerializer : MetaSerializer + public override string ToString() => $"Handle: {ObjectInfo}"; + + public class Serializer : MetaSerializer { - public override void PreSerialize(ref HandleBase? obj, MetaStream stream, MetaClassType? type = null) - { - if (obj is null) - { - obj = new HandleBase(); - } - } + public override void PreSerialize(ref HandleBase? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new HandleBase(); - public override void Serialize(ref HandleBase obj, MetaStream stream) + public override void Serialize(ref HandleBase obj, MetaStream stream, MetaClassType? type = null) { - if (stream.Params.StreamVersion >= 4) + if (stream.Params.StreamVersion >= 5) { stream.Serialize(ref obj.ObjectInfo.ObjectName); } else { - var name = string.Empty; + string name = string.Empty; stream.Serialize(ref name); obj.ObjectInfo.ObjectName = Symbol.FromName(name); } } } - - public override string ToString() - { - return $"Handle: {ObjectInfo}"; - } } [MetaSerializer(typeof(HandleSerializer<>), typeof(Handle<>))] @@ -58,22 +46,31 @@ public class Handle : HandleBase { } +[MetaSerializer(typeof(HandleSerializer<>), typeof(HandleLock<>))] public class HandleLock : Handle { } public class HandleSerializer : MetaSerializer> { - public override void PreSerialize(ref Handle? obj, MetaStream stream, MetaClassType? type = null) + public override void PreSerialize(ref Handle? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new Handle(); + + public override void Serialize(ref Handle obj, MetaStream stream, MetaClassType? type = null) { - if (obj is null) - obj = new Handle(); + HandleBase handle = obj; + stream.Serialize(ref handle); } +} + +public class HandleLockSerializer : MetaSerializer> +{ + public override void PreSerialize(ref HandleLock? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new HandleLock(); - public override void Serialize(ref Handle obj, MetaStream stream) + public override void Serialize(ref HandleLock obj, MetaStream stream, MetaClassType? type = null) { HandleBase handle = obj; - Toolkit.Instance.GetSerializer().PreSerialize(ref handle, stream); - Toolkit.Instance.GetSerializer().Serialize(ref handle, stream); + stream.Serialize(ref handle); } } diff --git a/src/TelltaleToolKit/T3Types/ITaskOwner.cs b/src/TelltaleToolKit/T3Types/ITaskOwner.cs index a95332d..6212ccb 100644 --- a/src/TelltaleToolKit/T3Types/ITaskOwner.cs +++ b/src/TelltaleToolKit/T3Types/ITaskOwner.cs @@ -3,4 +3,4 @@ public interface ITaskOwner { public TaskOwner TaskOwner { get; set; } -} \ No newline at end of file +} diff --git a/src/TelltaleToolKit/T3Types/InputMaps/InputCode.cs b/src/TelltaleToolKit/T3Types/InputMaps/InputCode.cs index dbbe314..19139b5 100644 --- a/src/TelltaleToolKit/T3Types/InputMaps/InputCode.cs +++ b/src/TelltaleToolKit/T3Types/InputMaps/InputCode.cs @@ -6,5 +6,324 @@ namespace TelltaleToolKit.T3Types.InputMaps; [MetaSerializer(typeof(EnumSerializer))] public enum InputCode { + CommonMappingsStart = 0x0, + None = 0x0, + + Backspace = 0x8, + Tab = 0x9, + Clear = 0xC, + Return = 0xD, + Shift = 0x10, + Control = 0x11, + Alt = 0x12, + Pause = 0x13, + CapsLock = 0x14, + Escape = 0x1B, + SpaceBar = 0x20, + PageUp = 0x21, + PageDown = 0x22, + End = 0x23, + Home = 0x24, + + LeftArrow = 0x25, + UpArrow = 0x26, + RightArrow = 0x27, + DownArrow = 0x28, + + PrintScreen = 0x2A, + Snapshot = 0x2C, + Insert = 0x2D, + Delete = 0x2E, + Help = 0x2F, // 'Delp' in exe? + + Zero = 0x30, // ASCII for the numbers + One = 0x31, + Two = 0x32, + Three = 0x33, + Four = 0x34, + Five = 0x35, + Six = 0x36, + Seven = 0x37, + Eight = 0x38, + Nine = 0x39, + + // ASCII + A = 0x41, + B = 0x42, + C = 0x43, + D = 0x44, + E = 0x45, + F = 0x46, + G = 0x47, + H = 0x48, + I = 0x49, + J = 0x4A, + K = 0x4B, + L = 0x4C, + M = 0x4D, + N = 0x4E, + O = 0x4F, + P = 0x50, + Q = 0x51, + R = 0x52, + S = 0x53, + T = 0x54, + U = 0x55, + V = 0x56, + W = 0x57, + X = 0x58, + Y = 0x59, + Z = 0x5A, + + WindowsLeft = 0x5B, + WindowsRight = 0x5C, + WindowsApplication = 0x5D, // 'VK_APPS' + + Numpad0 = 0x60, + Numpad1 = 0x61, + Numpad2 = 0x62, + Numpad3 = 0x63, + Numpad4 = 0x64, + Numpad5 = 0x65, + Numpad6 = 0x66, + Numpad7 = 0x67, + Numpad8 = 0x68, + Numpad9 = 0x69, + NumpadStar = 0x6A, + NumpadPlus = 0x6B, + NumpadMinus = 0x6D, + NumpadDot = 0x6E, + NumpadSlash = 0x6F, + + F1 = 0x70, + F2 = 0x71, + F3 = 0x72, + F4 = 0x73, + F5 = 0x74, + F6 = 0x75, + F7 = 0x76, + F8 = 0x77, + F9 = 0x78, + F10 = 0x79, + F11 = 0x7A, + F12 = 0x7B, + + NumLock = 0x90, + ScrollLock = 0x91, + LeftShift = 0xA0, + RightShift = 0xA1, + LeftControl = 0xA2, + RightControl = 0xA3, + LeftMenu = 0xA4, + RightMenu = 0xA5, + + Colon = 0xBA, + Equals = 0xBB, + Comma = 0xBC, + Minus = 0xBD, + FullStop = 0xBE, + Slash = 0xBF, + Tilde = 0xC0, // ~ + LeftBracket = 0xDB, + RightBracket = 0xDD, + Backslash = 0xDC, + Quote = 0xDE, + + Enter = 0x100, + + Gamepad0 = 0x200, + Gamepad1 = 0x201, + Gamepad2 = 0x202, + Gamepad3 = 0x203, + Gamepad4 = 0x204, + Gamepad5 = 0x205, + Gamepad6 = 0x206, + Gamepad7 = 0x207, + Gamepad8 = 0x208, + Gamepad9 = 0x209, + Gamepad10 = 0x20A, + Gamepad11 = 0x20B, + GamepadDpadUp = 0x20C, + GamepadDpadDown = 0x20D, + GamepadDpadRight = 0x20E, + GamepadDpadLeft = 0x20F, + + AbstractConfirm = 0x300, // any enter, yes, etc action (left mouse mapped to this) + AbstractCancel = 0x301, // cancel buttons etc (right mouse mapped to this) + MouseMiddle = 0x302, + MouseX = 0x303, + MouseDoubleLeft = 0x304, + MouseMove = 0x310, + MouseRollover = 0x320, + MouseWheelUp = 0x321, + MouseWheelDown = 0x322, + MouseLeftButton = 0x330, + MouseRightButton = 0x331, + + LeftStickMove = 0x400, // when any stick moves + RightStickMove = 0x401, + TriggerMove = 0x402, + LeftTriggerMove = 0x403, + RightTriggerMove = 0x404, + + Gesture2TouchSingleTap = 0x500, + Gesture2TouchDoubleTap = 0x501, + Gesture1TouchSwipeLeft = 0x510, + Gesture1TouchSwipeUp = 0x511, + Gesture1TouchSwipeRight = 0x512, + Gesture1TouchSwipeDown = 0x513, + Gesture2TouchesSwitchLeft = 0x514, + Gesture2TouchesSwitchUp = 0x515, + Gesture2TouchesSwitchRight = 0x516, + Gesture2TouchesSwitchDown = 0x517, + Gesture2TouchesDown = 0x518, + Gesture3TouchesDown = 0x519, + + CommonMappingsEnd = 0x1000, + PlatformMappingsStart = 0x1000, + + // PLATFORM SPECIFICS. byte 2: 0x11 => XB360, 0x12 => WIIU, 0x13 => PS3, 0x14 => iPhone, 0x15 => Vita, 0x16 => Apple: Gamepads, tvOS + // 0x17 => PS4, 0x18 => XBOne, 0x19 => Switch + + PcMouseLeft = 0x1080, // left click. PC / mac / linux + PcMouseRight = 0x1081, + + Xb360A = 0x1100, + Xb360B = 0x1101, + Xb360X = 0x1102, + Xb360Y = 0x1103, + Xb360L = 0x1104, + Xb360R = 0x1105, + Xb360LeftTrigger = 0x1106, + Xb360RightTrigger = 0x1107, + Xb360Start = 0x1108, + Xb360Back = 0x1109, + Xb360LeftStick = 0x110A, + Xb360RightStick = 0x110B, + Xb360Left = 0x110C, + Xb360Right = 0x110D, + Xb360Up = 0x110E, + Xb360Down = 0x110F, + + WiiuA = 0x1200, + WiiuB = 0x1201, + WiiuX = 0x1202, + WiiuY = 0x1203, + WiiuL = 0x1204, + WiiuR = 0x1205, + WiiuZl = 0x1206, + WiiuZr = 0x1207, + WiiuPlus = 0x1208, + WiiuMinus = 0x1209, + WiiuLeftStick = 0x120A, + WiiuRightStick = 0x120B, + WiiuLeft = 0x120C, + WiiuRight = 0x120D, + WiiuUp = 0x120E, + WiiuDown = 0x120F, + + Ps3Square = 0x1300, + Ps3Triangle = 0x1301, + Ps3Circle = 0x1302, + Ps3Cross = 0x1303, + Ps3L1 = 0x1304, + Ps3L2 = 0x1305, + Ps3L3 = 0x1306, + Ps3R1 = 0x1307, + Ps3R2 = 0x1308, + Ps3R3 = 0x1309, + Ps3Start = 0x130A, + Ps3Select = 0x130B, + Ps3Left = 0x130C, + Ps3Right = 0x130D, + Ps3Up = 0x130E, + Ps3Down = 0x130F, + + IosDoubleTap = 0x1400, + + VitaSquare = 0x1500, + VitaTriangle = 0x1501, + VitaCircle = 0x1502, + VitaCross = 0x1503, + VitaL1 = 0x1504, + VitaL2 = 0x1505, + VitaL3 = 0x1506, + VitaR1 = 0x1507, + VitaR2 = 0x1508, + VitaR3 = 0x1509, + VitaStart = 0x150A, + VitaSelect = 0x150B, + VitaLeft = 0x150C, + VitaRight = 0x150D, + VitaUp = 0x150E, + VitaDown = 0x150F, + + AppleGamepadA = 0x1600, + AppleGamepadB = 0x1601, + AppleGamepadX = 0x1602, + AppleGamepadY = 0x1603, + AppleGamepadL = 0x1604, + AppleGamepadR = 0x1605, + AppleGamepadLeft = 0x1606, + AppleGamepadRight = 0x1607, + AppleGamepadUp = 0x1608, + AppleGamepadDown = 0x1609, + + Ps4Square = 0x1700, + Ps4Triangle = 0x1701, + Ps4Circle = 0x1702, + Ps4Cross = 0x1703, + Ps4L1 = 0x1704, + Ps4L2 = 0x1705, + Ps4L3 = 0x1706, + Ps4R1 = 0x1707, + Ps4R2 = 0x1708, + Ps4R3 = 0x1709, + Ps4Options = 0x170A, + Ps4Touchpad = 0x170B, + Ps4Left = 0x170C, + Ps4Right = 0x170D, + Ps4Up = 0x170E, + Ps4Down = 0x170F, + + XboneA = 0x1800, + XboneB = 0x1801, + XboneX = 0x1802, + XboneY = 0x1803, + XboneL = 0x1804, + XboneR = 0x1805, + XboneLeftTrigger = 0x1806, + XboneRightTrigger = 0x1807, + XboneStart = 0x1808, + XboneBack = 0x1809, + XboneLeftStick = 0x180A, + XboneRightStick = 0x180B, + XboneLeft = 0x180C, + XboneRight = 0x180D, + XboneUp = 0x180E, + XboneDown = 0x180F, + + NxA = 0x1900, + NxB = 0x1901, + NxX = 0x1902, + NxY = 0x1903, + NxL = 0x1904, // Bug in engine, they forgot to add get name for this + NxR = 0x1905, + NxZl = 0x1906, + NxZr = 0x1907, + NxPlus = 0x1908, + NxMinus = 0x1909, + NxLeftStick = 0x190A, + NxRightStick = 0x190B, + NxLeft = 0x190C, + NxRight = 0x190D, + NxUp = 0x190E, + NxDown = 0x190F, + NxLeftSl = 0x1910, + NxLeftSr = 0x1911, + NxRightSl = 0x1912, + NxRightSr = 0x1913, + + PlatformMappingsEnd = 0x2000, } diff --git a/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageDb.cs b/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageDb.cs index 258d173..b5e7f79 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageDb.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageDb.cs @@ -20,7 +20,7 @@ public class LanguageDb public Dictionary LanguageResources { get; set; } = new(); [MetaMember("mRegistry")] - public LocalizationRegistry Registry { get; set; } + public LocalizationRegistry Registry { get; set; } = new(); [MetaMember("mFlags")] public Flags Flags { get; set; } @@ -31,19 +31,93 @@ public class LanguageDb [MetaMember("mExpandedIDRanges")] public List ExpandedIdRanges { get; set; } = []; + public class DebugMapping + { + public string InternalLanguageRes = string.Empty; + public string Animation = string.Empty; + public string VoiceSoundData = string.Empty; + } + + public List? DebugFileMappings; + public List? DebugRegistrySymbolValueMappings; + public List? DebugRegistrySymbolValueMappingsReverse; + public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref LanguageDb obj, MetaStream stream) + public override void PreSerialize(ref LanguageDb? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new LanguageDb(); + } + + public override void Serialize(ref LanguageDb obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); - if (stream.Mode is MetaStreamMode.Read) + if (stream.Params.StreamVersion >= 5 && stream.BeginDebugSection()) { - // There should be things in the debug section that I would like to parse. - // It's not required, but it may contain useful information. + if (stream.Mode is MetaStreamMode.Write) + { + if (obj.DebugFileMappings != null) + { + foreach (var list in obj.DebugFileMappings) + { + stream.Write(list.InternalLanguageRes); + stream.Write(list.Animation); + stream.Write(list.VoiceSoundData); + } + } + + if (obj.DebugRegistrySymbolValueMappings != null) + { + foreach (string valueMapping in obj.DebugRegistrySymbolValueMappings) + { + stream.Write(valueMapping); + } + } + + if (obj.DebugRegistrySymbolValueMappingsReverse != null) + { + foreach (string valueMapping in obj.DebugRegistrySymbolValueMappingsReverse) + { + stream.Write(valueMapping); + } + } + } + else if (stream.Mode is MetaStreamMode.Read) + { + int num = obj.LanguageResources.Count; + + obj.DebugFileMappings = new List(num); + for (int i = 0; i < num; i++) + { + DebugMapping mapping = new() + { + InternalLanguageRes = stream.ReadString(), + Animation = stream.ReadString(), + VoiceSoundData = stream.ReadString() + }; + obj.DebugFileMappings.Add(mapping); + } + + num = obj.Registry.FlagIndexMap.Count; + obj.DebugRegistrySymbolValueMappings = new List(num); + for (int i = 0; i < num; i++) + { + obj.DebugRegistrySymbolValueMappings.Add(stream.ReadString()); + } + + num = obj.Registry.FlagIndexMapReverse.Count; + obj.DebugRegistrySymbolValueMappingsReverse = new List(num); + for (int i = 0; i < num; i++) + { + obj.DebugRegistrySymbolValueMappingsReverse.Add(stream.ReadString()); + } + } + + stream.EndDebugSection(); } } } diff --git a/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageRes.cs b/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageRes.cs index fbf536e..c9eea0b 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageRes.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Landb/LanguageRes.cs @@ -2,6 +2,7 @@ using TelltaleToolKit.Meta.Serialization; using TelltaleToolKit.Meta.Serialization.Serializers; using TelltaleToolKit.T3Types.Animations; +using TelltaleToolKit.T3Types.Miscellaneous; namespace TelltaleToolKit.T3Types.Languages.Landb; @@ -33,7 +34,7 @@ public class LanguageRes public LanguageResLocal ResolvedLocalData { get; set; } [MetaMember("mRecordingStatus")] - public RecordingUtils.EnumRecordingStatus RecordingStatus { get; set; } + public EnumRecordingStatus RecordingStatus { get; set; } [MetaMember("mFlags")] public Flags Flags { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageDatabase.cs b/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageDatabase.cs index 7b99728..568ba12 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageDatabase.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageDatabase.cs @@ -11,5 +11,5 @@ public class LanguageDatabase public string Name { get; set; } = string.Empty; [MetaMember("mLanguageResources")] - public Dictionary LanguageResources { get; set; } = new(); + public Dictionary LanguageResources { get; set; } = []; } diff --git a/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageResource.cs b/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageResource.cs index 8dab41a..d743c88 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageResource.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Langdb/LanguageResource.cs @@ -24,6 +24,10 @@ public class LanguageResource [MetaMember("mhVoiceData")] public Handle VoiceData { get; set; } = new(); + + [MetaMember("mhVoiceData")] + public Handle VoiceSoundData { get; set; } = new(); + [MetaMember("mShared")] public bool Shared { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Languages/Lanreg/LanguageRegister.cs b/src/TelltaleToolKit/T3Types/Languages/Lanreg/LanguageRegister.cs index 07cd9b6..e83d0a6 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Lanreg/LanguageRegister.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Lanreg/LanguageRegister.cs @@ -9,5 +9,5 @@ namespace TelltaleToolKit.T3Types.Languages.Lanreg; public class LanguageRegister { [MetaMember("Baseclass_UID::Generator")] - public Generator UIDGenerator { get; set; } = null!; + public Generator UIDGenerator { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/Languages/Locreg/Localization.cs b/src/TelltaleToolKit/T3Types/Languages/Locreg/Localization.cs index a8ea3c9..bb8a71d 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Locreg/Localization.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Locreg/Localization.cs @@ -10,22 +10,23 @@ public class Localization public class Language { [MetaMember("mName")] - public string Name { get; set; } + public string Name { get; set; } = string.Empty; [MetaMember("mDisplayText")] - public string DisplayText { get; set; } + public string DisplayText { get; set; } = string.Empty; [MetaMember("mAudioResourceSetName")] - public string AudioResourceSetName { get; set; } + public string AudioResourceSetName { get; set; } = string.Empty; [MetaMember("mPlatformToSyncFSLocation")] - public Dictionary PlatformToSyncFSLocation { get; set; } + public Dictionary PlatformToSyncFSLocation { get; set; } = []; [MetaMember("mPlatformToSubgroupToAudioSyncFSLocation")] - public Dictionary> PlatformToSubgroupToAudioSyncFSLocation { get; set; } + public Dictionary> + PlatformToSubgroupToAudioSyncFSLocation { get; set; } = []; [MetaMember("mSubgroupToResourceSetName")] - public Dictionary SubgroupToResourceSetName { get; set; } + public Dictionary SubgroupToResourceSetName { get; set; } = []; [MetaMember("mFlags")] public Flags Flags { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Languages/Locreg/LocalizationRegistry.cs b/src/TelltaleToolKit/T3Types/Languages/Locreg/LocalizationRegistry.cs index 7095d7e..3cde666 100644 --- a/src/TelltaleToolKit/T3Types/Languages/Locreg/LocalizationRegistry.cs +++ b/src/TelltaleToolKit/T3Types/Languages/Locreg/LocalizationRegistry.cs @@ -10,11 +10,17 @@ namespace TelltaleToolKit.T3Types.Languages.Locreg; public class LocalizationRegistry { [MetaMember("mFlagIndexMap")] - public Dictionary FlagIndexMap { get; set; } + public Dictionary FlagIndexMapS { get; set; } = []; [MetaMember("mFlagIndexMapReverse")] - public Dictionary FlagIndexMapReverse { get; set; } + public Dictionary FlagIndexMapReverseS { get; set; } = []; + + [MetaMember("mFlagIndexMap")] + public Dictionary FlagIndexMap { get; set; } = []; + + [MetaMember("mFlagIndexMapReverse")] + public Dictionary FlagIndexMapReverse { get; set; } = []; [MetaMember("mToolProps")] - public ToolProps ToolProps { get; set; } + public ToolProps ToolProps { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/LightMaps/LightType.cs b/src/TelltaleToolKit/T3Types/LightMaps/LightType.cs index 684dec5..acf207f 100644 --- a/src/TelltaleToolKit/T3Types/LightMaps/LightType.cs +++ b/src/TelltaleToolKit/T3Types/LightMaps/LightType.cs @@ -7,5 +7,6 @@ namespace TelltaleToolKit.T3Types.LightMaps; [MetaSerializer(typeof(MetaClassSerializer))] public struct LightType { - [MetaMember("mLightType")] public int Type { get; set; } + [MetaMember("mLightType")] + public int Type { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/LightMaps/MeshSceneLightmapData.cs b/src/TelltaleToolKit/T3Types/LightMaps/MeshSceneLightmapData.cs index 4743162..ea27147 100644 --- a/src/TelltaleToolKit/T3Types/LightMaps/MeshSceneLightmapData.cs +++ b/src/TelltaleToolKit/T3Types/LightMaps/MeshSceneLightmapData.cs @@ -8,41 +8,41 @@ namespace TelltaleToolKit.T3Types.LightMaps; [MetaSerializer(typeof(MetaClassSerializer))] public class MeshSceneLightmapData { + [MetaMember("mEntries")] + public List Entries { get; set; } = []; + + [MetaMember("mStationaryLightIndices")] + public List StationaryLightIndices { get; set; } = []; + + [MetaMember("mFlags")] + public Flags Flags { get; set; } + + [MetaMember("mCameraFacingType")] + public CameraFacingType CameraFacingType { get; set; } + [MetaSerializer(typeof(MetaClassSerializer))] public class Entry { [MetaMember("mMeshName")] - public Symbol MeshName{ get; set; } + public Symbol MeshName { get; set; } = Symbol.Empty; [MetaMember("mLODIndex")] - public uint LODIndex{ get; set; } + public uint LODIndex { get; set; } [MetaMember("mLightQuality")] - public int LightQuality{ get; set; } + public int LightQuality { get; set; } [MetaMember("mTextureScale")] - public Vector2 TextureScale{ get; set; } + public Vector2 TextureScale { get; set; } [MetaMember("mTextureOffset")] - public Vector2 TextureOffset{ get; set; } + public Vector2 TextureOffset { get; set; } [MetaMember("mTexturePage")] - public uint TexturePage{ get; set; } + public uint TexturePage { get; set; } } - - [MetaMember("mEntries")] - public List Entries { get; set; } - - [MetaMember("mStationaryLightIndices")] - public List StationaryLightIndices{ get; set; } - [MetaMember("mFlags")] - public Flags Flags{ get; set; } - // Explicit mapping for the camera-facing type member requested. - [MetaMember("mCameraFacingType")] - public CameraFacingType CameraFacingType{ get; set; } } -// Example enum for camera-facing type. Replace/extend as appropriate. [MetaSerializer(typeof(EnumSerializer))] public enum CameraFacingType { diff --git a/src/TelltaleToolKit/T3Types/LightMaps/T3LightSceneInternalData.cs b/src/TelltaleToolKit/T3Types/LightMaps/T3LightSceneInternalData.cs index bdeb5dc..227609f 100644 --- a/src/TelltaleToolKit/T3Types/LightMaps/T3LightSceneInternalData.cs +++ b/src/TelltaleToolKit/T3Types/LightMaps/T3LightSceneInternalData.cs @@ -8,6 +8,24 @@ namespace TelltaleToolKit.T3Types.LightMaps; [MetaSerializer(typeof(MetaClassSerializer))] public class T3LightSceneInternalData { + [MetaMember("mEntryForQuality[0]")] + public QualityEntry EntryForQuality0 { get; set; } + + [MetaMember("mEntryForQuality[1]")] + public QualityEntry EntryForQuality1 { get; set; } + + [MetaMember("mEntryForQuality[2]")] + public QualityEntry EntryForQuality2 { get; set; } + + [MetaMember("mEntryForQuality[3]")] + public QualityEntry EntryForQuality3 { get; set; } + + [MetaMember("mStationaryLightCount")] + public uint StationaryLightCount { get; set; } + + [MetaMember("mBakeVersion")] + public uint BakeVersion { get; set; } + [MetaSerializer(typeof(MetaClassSerializer))] public class QualityEntry { @@ -27,22 +45,4 @@ public class LightmapPage [MetaMember("mFlags")] public Flags Flags { get; set; } } - - [MetaMember("mEntryForQuality[0]")] - public QualityEntry EntryForQuality0 { get; set; } - - [MetaMember("mEntryForQuality[1]")] - public QualityEntry EntryForQuality1 { get; set; } - - [MetaMember("mEntryForQuality[2]")] - public QualityEntry EntryForQuality2 { get; set; } - - [MetaMember("mEntryForQuality[3]")] - public QualityEntry EntryForQuality3 { get; set; } - - [MetaMember("mStationaryLightCount")] - public uint StationaryLightCount { get; set; } - - [MetaMember("mBakeVersion")] - public uint BakeVersion { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/LocomotionDB.cs b/src/TelltaleToolKit/T3Types/LocomotionDB.cs index 659655b..08976b1 100644 --- a/src/TelltaleToolKit/T3Types/LocomotionDB.cs +++ b/src/TelltaleToolKit/T3Types/LocomotionDB.cs @@ -5,12 +5,11 @@ namespace TelltaleToolKit.T3Types; //.LDB FILES -// TODO: Verify these values. [MetaSerializer(typeof(MetaClassSerializer))] public class LocomotionDb { [MetaMember("maAnimInfoList")] - public Dictionary AnimInfoList { get; set; } + public Dictionary AnimInfoList { get; set; } = []; [MetaSerializer(typeof(MetaClassSerializer))] public class AnimationInfo @@ -19,7 +18,7 @@ public class AnimationInfo public ulong TimeStamp { get; set; } [MetaMember("mzName")] - public string Name { get; set; } + public string Name { get; set; } = string.Empty; [MetaMember("meCategory")] public Category Category { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Mathematics/BoundingBox.cs b/src/TelltaleToolKit/T3Types/Mathematics/BoundingBox.cs index db210e6..662eefa 100644 --- a/src/TelltaleToolKit/T3Types/Mathematics/BoundingBox.cs +++ b/src/TelltaleToolKit/T3Types/Mathematics/BoundingBox.cs @@ -10,9 +10,11 @@ namespace TelltaleToolKit.T3Types.Mathematics; [StructLayout(LayoutKind.Sequential, Pack = 4)] public struct BoundingBox { - [MetaMember("mMin")] public Vector3 Min {get; set;} + [MetaMember("mMin")] + public Vector3 Min { get; set; } - [MetaMember("mMax")] public Vector3 Max{get; set;} + [MetaMember("mMax")] + public Vector3 Max { get; set; } public override string ToString() => $"{Min}, {Max}"; } diff --git a/src/TelltaleToolKit/T3Types/Mathematics/Color.cs b/src/TelltaleToolKit/T3Types/Mathematics/Color.cs index e413282..e8b9cae 100644 --- a/src/TelltaleToolKit/T3Types/Mathematics/Color.cs +++ b/src/TelltaleToolKit/T3Types/Mathematics/Color.cs @@ -23,7 +23,7 @@ public struct Color public class Serializer : MetaSerializer { - public override void Serialize(ref Color obj, MetaStream stream) + public override void Serialize(ref Color obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -48,8 +48,5 @@ public override void Serialize(ref Color obj, MetaStream stream) } } - public override string ToString() - { - return $"Color: ({R}, {G}, {B}, {A})"; - } + public override string ToString() => $"Color: ({R}, {G}, {B}, {A})"; } diff --git a/src/TelltaleToolKit/T3Types/Mathematics/Rect.cs b/src/TelltaleToolKit/T3Types/Mathematics/Rect.cs index c3ab050..879fe89 100644 --- a/src/TelltaleToolKit/T3Types/Mathematics/Rect.cs +++ b/src/TelltaleToolKit/T3Types/Mathematics/Rect.cs @@ -7,8 +7,15 @@ namespace TelltaleToolKit.T3Types.Mathematics; [MetaSerializer(typeof(MetaClassSerializer))] public struct Rect { - [MetaMember("left")] public int Left { get; set; } - [MetaMember("right")] public int Right { get; set; } - [MetaMember("top")] public int Top { get; set; } - [MetaMember("bottom")] public int Bottom { get; set; } + [MetaMember("left")] + public int Left { get; set; } + + [MetaMember("right")] + public int Right { get; set; } + + [MetaMember("top")] + public int Top { get; set; } + + [MetaMember("bottom")] + public int Bottom { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Mathematics/TRange.cs b/src/TelltaleToolKit/T3Types/Mathematics/TRange.cs index 09e65b8..894b67d 100644 --- a/src/TelltaleToolKit/T3Types/Mathematics/TRange.cs +++ b/src/TelltaleToolKit/T3Types/Mathematics/TRange.cs @@ -18,19 +18,13 @@ public class RangeSerializer : MetaSerializer> { private static readonly MetaClassSerializer> s_metaClassSerializer = new(); - /// - public override void PreSerialize(ref Range? obj, MetaStream stream, MetaClassType? type = null) - { - if (stream.Mode is MetaStreamMode.Read) - { - if (obj is null) - obj = new Range(); - } - } + // TODO: Null serializer + public override void PreSerialize(ref Range? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new Range(); - public override void Serialize(ref Range obj, MetaStream stream) + public override void Serialize(ref Range obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); } } diff --git a/src/TelltaleToolKit/T3Types/Mathematics/TRect.cs b/src/TelltaleToolKit/T3Types/Mathematics/TRect.cs index a0fc2b7..5fd46b1 100644 --- a/src/TelltaleToolKit/T3Types/Mathematics/TRect.cs +++ b/src/TelltaleToolKit/T3Types/Mathematics/TRect.cs @@ -7,10 +7,17 @@ namespace TelltaleToolKit.T3Types.Mathematics; [MetaSerializer(typeof(RectSerializer<>), typeof(Rect<>))] public class Rect { - [MetaMember("left")] public T Left { get; set; } = default!; - [MetaMember("right")] public T Right { get; set; } = default!; - [MetaMember("top")] public T Top { get; set; } = default!; - [MetaMember("bottom")] public T Bottom { get; set; } = default!; + [MetaMember("left")] + public T Left { get; set; } = default!; + + [MetaMember("right")] + public T Right { get; set; } = default!; + + [MetaMember("top")] + public T Top { get; set; } = default!; + + [MetaMember("bottom")] + public T Bottom { get; set; } = default!; public override string ToString() => $"{Left}"; } @@ -19,19 +26,18 @@ public class RectSerializer : MetaSerializer> { private static readonly MetaClassSerializer> s_metaClassSerializer = new(); - /// public override void PreSerialize(ref Rect? obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Read) { if (obj is null) + { obj = new Rect(); + } } } - public override void Serialize(ref Rect obj, MetaStream stream) - { + public override void Serialize(ref Rect obj, MetaStream stream, MetaClassType? type = null) => s_metaClassSerializer.Serialize(ref obj, stream); - } } diff --git a/src/TelltaleToolKit/T3Types/Meshes/D3DMesh.cs b/src/TelltaleToolKit/T3Types/Meshes/D3DMesh.cs index 870d41d..c6e52ce 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/D3DMesh.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/D3DMesh.cs @@ -5,6 +5,7 @@ using TelltaleToolKit.T3Types.Mathematics; using TelltaleToolKit.T3Types.Meshes.T3Types; using TelltaleToolKit.T3Types.Properties; +using TelltaleToolKit.T3Types.Skeletons; using TelltaleToolKit.T3Types.Textures; namespace TelltaleToolKit.T3Types.Meshes; @@ -85,17 +86,72 @@ public class D3DMesh public bool MeshHasVertexAlpha { get; set; } [MetaMember("mSkinningData")] - public List SkinningData { get; set; } + public List SkinningData { get; set; } = []; [MetaMember("mBoneData")] - public List BoneData { get; set; } + public List BoneData { get; set; } = []; + + [MetaMember("mDiffuseTextures")] + public List mDiffuseTextures { get; set; } = []; + + [MetaMember("mDetailTextures")] + public List mDetailTextures { get; set; } = []; + + [MetaMember("mDetailBumpTextures")] + public List mDetailBumpTextures { get; set; } = []; + + [MetaMember("mLightmapTextures")] + public List mLightmapTextures { get; set; } = []; + + [MetaMember("mBumpmapTextures")] + public List mBumpmapTextures { get; set; } = []; + + + [MetaMember("mEnvironmentTextures")] + public List mEnvironmentTextures { get; set; } = []; + + [MetaMember("mSpecularTextures")] + public List mSpecularTextures { get; set; } = []; + + [MetaMember("mSSSTextures")] + public List mSSSTextures { get; set; } = []; [MetaMember("mLocalTransformPalettes")] - public List> LocalTransformPalettes { get; set; } + public List> LocalTransformPalettes { get; set; } = []; + + [MetaMember("mbMeshHasSmoothNormalsSupport")] + public bool mbMeshHasSmoothNormalsSupport { get; set; } + + [MetaMember("mDiffuseTextureNames")] + public List mDiffuseTextureNames { get; set; } = []; + + [MetaMember("mDetailTextureNames")] + public List mDetailTextureNames { get; set; } = []; + + [MetaMember("mLightmapTextureNames")] + public List mLightmapTextureNames { get; set; } = []; + + [MetaMember("mBumpmapTextureNames")] + public List mBumpmapTextureNames { get; set; } = []; + + [MetaMember("mEnvironmentTextureNames")] + public List mEnvironmentTextureNames { get; set; } = []; + + [MetaMember("mbToonRendering")] + public bool mbToonRendering { get; set; } + + [MetaMember("mbToonLighting")] + public bool mbToonLighting { get; set; } [MetaSerializer(typeof(MetaClassSerializer))] - public class LocalTransformEntry; + public class LocalTransformEntry + { + [MetaMember("mTransform")] + public Transform Transform { get; set; } = new(); + [MetaMember("mCameraFacingType")] + public T3CameraFacingType FacingType { get; set; } + } [MetaMember("mTriangleStripState")] public int TriangleStripState { get; set; } @@ -104,7 +160,7 @@ public class LocalTransformEntry; public int AnimatedVertexCount { get; set; } [MetaMember("mTextures")] - public List[] Textures { get; set; } = new List[11]; + public List[] Textures { get; set; } [MetaMember("mDiffuseScale")] public Vector2 DiffuseScale { get; set; } @@ -124,6 +180,15 @@ public class LocalTransformEntry; [MetaMember("mToolAnimatedVertexEntries")] public List ToolAnimatedVertexEntries { get; set; } = []; + [MetaMember("mToonOutlineSize")] + public float ToonOutlineSize { get; set; } + + [MetaMember("mToonMaxZConstOutlineSize")] + public float ToonMaxZConstOutlineSize { get; set; } + + [MetaMember("mToonMinZConstOutlineSize")] + public float ToonMinZConstOutlineSize { get; set; } + [MetaSerializer(typeof(MetaClassSerializer))] public class AnimatedVertexEntry; @@ -136,10 +201,13 @@ public class AnimatedVertexGroupEntry; [MetaMember("mInternalResources")] public List InternalResources { get; set; } = new(); - public T3IndexBuffer T3IndexBuffer { get; set; } - public T3VertexBuffer[] T3VertexBuffers { get; set; } + public T3IndexBuffer? T3IndexBuffer { get; set; } + public T3VertexBuffer[]? T3VertexBuffers { get; set; } - public T3OcclusionMeshData OcclusionMeshData { get; set; } + public T3OcclusionMeshData? OcclusionMeshData { get; set; } + + [MetaMember("mbManualSort")] + public bool ManualSort { get; set; } /// /// The main mesh data for version above 22. It contains LODs, bone references @@ -150,7 +218,7 @@ public class AnimatedVertexGroupEntry; /// /// This is a combination of T3MeshBatch and others for old games ( from Texas Hold'em to unknown). /// - [MetaSerializer(typeof(MetaClassSerializer))] + [MetaSerializer(typeof(Serializer))] public class TriangleSet { [MetaMember("mFlags")] @@ -192,9 +260,18 @@ public class TriangleSet [MetaMember("mPixelShaderName")] public string PixelShaderName { get; set; } = string.Empty; + [MetaMember("mVertexShaderName")] + public Symbol VertexShaderNameS { get; set; } = Symbol.Empty; + + [MetaMember("mPixelShaderName")] + public Symbol PixelShaderNameS { get; set; } = Symbol.Empty; + [MetaMember("mLightingGroup")] public string LightingGroup { get; set; } = string.Empty; + [MetaMember("mLightingGroup")] + public Symbol LightingGroupS { get; set; } = Symbol.Empty; + [MetaMember("mBoundingBox")] public BoundingBox BoundingBox { get; set; } = new(); @@ -211,11 +288,14 @@ public class TriangleSet public bool HasPixelShaderRemoveMe { get; set; } [MetaMember("mTxIndex")] - public int[] TxIndex { get; set; } = new int[11]; + public int[] TxIndex { get; set; } [MetaMember("mTriStrips")] public List TriStrips { get; set; } = []; + [MetaMember("mTriStrips")] + public List TriStripsS { get; set; } = []; + [MetaMember("mNumTotalIndices")] public int NumTotalIndices { get; set; } @@ -291,12 +371,143 @@ public class TriangleSet [MetaMember("mSubsurfaceScateringRadius")] public float SubsurfaceScateringRadius { get; set; } - [MetaSerializer(typeof(TriangleSetSerializer))] - public class TriangleSetSerializer : MetaSerializer + [MetaMember("mSpecularPower")] + public float SpecularPower { get; set; } + + [MetaMember("mBoneMatrix")] + public int BoneMatrix { get; set; } + + [MetaMember("mToonNumShades")] + public int ToonNumShades { get; set; } + + [MetaMember("mLocalTransform")] + public Transform LocalTransform { get; set; } + + [MetaMember("mCameraFacingType")] + public int CameraFacingType { get; set; } + + [MetaMember("mToonSphericalNormalBoneName")] + public Symbol ToonSphericalNormalBoneName { get; set; } = Symbol.Empty; + + + [MetaMember("mBoneMatrixIndex")] + public int BoneMatrixIndex { get; set; } = 0; + + [MetaMember("mDiffuseTextureIndex")] + public int DiffuseTextureIndex { get; set; } = 0; + + [MetaMember("mLightMapTextureIndex")] + public int LightMapTextureIndex { get; set; } = 0; + + [MetaMember("mDetailTextureIndex")] + public int DetailTextureIndex { get; set; } = 0; + + [MetaMember("mDetailBumpTextureIndex")] + public int DetailBumpTextureIndex { get; set; } = 0; + + [MetaMember("mNormalTextureIndex")] + public int NormalTextureIndex { get; set; } = 0; + + [MetaMember("mEnvTextureIndex")] + public int EnvTextureIndex { get; set; } = 0; + + [MetaMember("mSpecularTextureIndex")] + public int SpecularTextureIndex { get; set; } = 0; + + [MetaMember("mSSSTextureIndex")] + public int SSSTextureIndex { get; set; } = 0; + + [MetaMember("mhSpecularColorMap")] + public Handle SpecularColorMap { get; set; } + + [MetaMember("mhAmbientMap")] + public Handle AmbientMap { get; set; } + + [MetaMember("mhOutlineDiscontinuityMap")] + public Handle OutlineDiscontinuityMap { get; set; } + + [MetaMember("mhToonLightQuantized")] + public Handle ToonLightQuantized { get; set; } + + + [MetaMember("mbBumpAsNormalMap")] + public bool BumpAsNormalMap { get; set; } + + [MetaMember("mToonMaterialColor")] + public Color ToonMaterialColor { get; set; } + + [MetaMember("mToonOffset")] + public Vector2 ToonOffset { get; set; } + + [MetaMember("mToonEnvLighting")] + public bool mToonEnvLighting { get; set; } + + [MetaMember("mToonNoNormalDeform")] + public bool mToonNoNormalDeform { get; set; } + + [MetaMember("mNeedSWSkinning")] + public bool mNeedSWSkinning { get; set; } + + [MetaMember("mNeedComputeOutline")] + public bool mNeedComputeOutline { get; set; } + + [MetaMember("mNeedRenderOutline")] + public bool mNeedRenderOutline { get; set; } + + [MetaMember("mReceiveShadows")] + public bool mReceiveShadows { get; set; } + + [MetaMember("mCastShadows")] + public bool mCastShadows { get; set; } + + [MetaMember("mbToonRendering")] + public bool mbToonRendering { get; set; } + + [MetaMember("mUVScreenSpaceZoom")] + public bool mUVScreenSpaceZoom { get; set; } + + [MetaMember("mbHasOctree")] + public bool mbHasOctree { get; set; } + + [MetaMember("mToonSphericalNormals")] + public bool mToonSphericalNormals { get; set; } + + [MetaMember("mToonSphericalNormalBoneName")] + public string mToonSphericalNormalBoneName { get; set; } + + [MetaMember("mbVertexAlpha")] + public bool mbVertexAlpha { get; set; } + + [MetaMember("mbCameraFacing")] + public bool mbCameraFacing { get; set; } + + [MetaMember("mhSubsurfaceScateringMap")] + public Handle mhSubsurfaceScateringMap { get; set; } + + [MetaMember("mbVertexAnimation")] + public bool mbVertexAnimation { get; set; } + + [MetaMember("mbToonLighting")] + public bool mbToonLighting { get; set; } + + [MetaMember("mOverride3DAlpha")] + public bool Override3DAlpha { get; set; } + + [MetaMember("mhDetailBumpMap")] + public Handle mhDetailBumpMap { get; set; } + + [MetaMember("mbHasLocalTransform")] + public bool HasLocalTransform { get; set; } + + [MetaMember("mbDetailBumpAsNormalMap")] + public bool DetailBumpAsNormalMap { get; set; } + + + public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref TriangleSet obj, MetaStream stream) + public override void Serialize(ref TriangleSet obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); @@ -306,7 +517,7 @@ public override void Serialize(ref TriangleSet obj, MetaStream stream) } else if (stream.Mode is MetaStreamMode.Read) { - if (stream.GetMetaClass(typeof(TriangleSet)).ContainsMember("mbHasPixelShader_RemoveMe")) + if (stream.GetMetaClass(typeof(TriangleSet))!.ContainsMember("mbHasPixelShader_RemoveMe")) { string shaderName = stream.ReadString(); if (obj.HasPixelShaderRemoveMe) @@ -329,7 +540,7 @@ public class PaletteEntry public string BoneName { get; set; } = string.Empty; [MetaMember("mBoneName")] - public Symbol SymbolBoneName { get; set; } + public Symbol SymbolBoneName { get; set; } = Symbol.Empty; [MetaMember("mBoundingBox")] public BoundingBox BoundingBox { get; set; } = new(); @@ -349,19 +560,50 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref D3DMesh obj, MetaStream stream) + public override void Serialize(ref D3DMesh obj, MetaStream stream, MetaClassType? type = null) { + if (stream.Mode is MetaStreamMode.Write) + { + var vertexBufferSlots = new (MeshFlags Flag, int Index)[] + { + (MeshFlags.HasPosStream, 0), (MeshFlags.HasNormStream, 1), (MeshFlags.HasBlendWeightStream, 2), + (MeshFlags.HasBlendIdxStream, 3), (MeshFlags.HasUV1Stream, 4), (MeshFlags.HasUV2Stream, 5), + (MeshFlags.HasUV3Stream, 6), (MeshFlags.HasUV4Stream, 7), (MeshFlags.HasTangentStream, 8), + (MeshFlags.HasColorStream, 9), (MeshFlags.HasSmoothNormStream, 10), (MeshFlags.Unknown, 11), + (MeshFlags.Unknown2, 12), (MeshFlags.HasInterleavedStream, 13), (MeshFlags.Deformable, 14), + (MeshFlags.HasSoftwareSkinningStream, 15) + }; + + if (obj.T3IndexBuffer != null) + { + obj.Flags.Set((int)MeshFlags.HasIndexBuffer); + } + + if (obj.T3VertexBuffers != null) + { + for (int i = 0; i < obj.T3VertexBuffers.Length; i++) + { + obj.Flags.Set((int)vertexBufferSlots[i].Flag); + } + } + } + s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) { - if (obj.Version < 19) + if (obj.Version == 0) { SerializeOldD3DMesh(ref obj, stream); return; } + if (obj.Version < 19) + { + SerializeOldMedD3DMesh(ref obj, stream); + return; + } if (obj.Version >= 22) { @@ -378,22 +620,18 @@ public override void Serialize(ref D3DMesh obj, MetaStream stream) if (hasOcclusionData) { - // TODO: Assign this. stream.BeginBlock(); - T3OcclusionMeshData objOcclusionMeshData = obj.OcclusionMeshData; - Toolkit.Instance.GetSerializer() - .Serialize(ref objOcclusionMeshData, stream); + T3OcclusionMeshData? objOcclusionMeshData = obj.OcclusionMeshData; + stream.Serialize(ref objOcclusionMeshData); stream.EndBlock(); } } stream.BeginBlock(); T3MeshData objMeshData = obj.MeshData; - Toolkit.Instance.GetSerializer().PreSerialize(ref objMeshData, stream); - Toolkit.Instance.GetSerializer().Serialize(ref objMeshData, stream); - stream.EndBlock(); + stream.Serialize(ref objMeshData); } - else if (stream.Mode is MetaStreamMode.Read) + else { // According to Telltale, the new meshes start from version 20. if (obj.Version == 0) @@ -428,138 +666,93 @@ public override void Serialize(ref D3DMesh obj, MetaStream stream) bool hasOcclusionData = stream.ReadBoolean(); if (hasOcclusionData) { - // TODO: Assign this. stream.BeginBlock(); - T3OcclusionMeshData objOcclusionMeshData = obj.OcclusionMeshData; - Toolkit.Instance.GetSerializer() - .Serialize(ref objOcclusionMeshData, stream); + T3OcclusionMeshData objOcclusionMeshData = new(); + stream.Serialize(ref objOcclusionMeshData); + obj.OcclusionMeshData = objOcclusionMeshData; stream.EndBlock(); } } stream.BeginBlock(); - T3MeshData objMeshData = obj.MeshData; - Toolkit.Instance.GetSerializer().PreSerialize(ref objMeshData, stream); - Toolkit.Instance.GetSerializer().Serialize(ref objMeshData, stream); - stream.EndBlock(); + + T3MeshData objMeshData = new(); + stream.Serialize(ref objMeshData); + obj.MeshData = objMeshData; } + + stream.EndBlock(); } private static void SerializeOldMedD3DMesh(ref D3DMesh obj, MetaStream stream) { - if (stream.Mode is MetaStreamMode.Write) + var vertexBufferSlots = new (MeshFlags Flag, int Index)[] { - throw new NotSupportedException(); - } + (MeshFlags.HasPosStream, 0), (MeshFlags.HasNormStream, 1), (MeshFlags.HasBlendWeightStream, 2), + (MeshFlags.HasBlendIdxStream, 3), (MeshFlags.HasUV1Stream, 4), (MeshFlags.HasUV2Stream, 5), + (MeshFlags.HasUV3Stream, 6), (MeshFlags.HasUV4Stream, 7), (MeshFlags.HasTangentStream, 8), + (MeshFlags.HasColorStream, 9), (MeshFlags.HasSmoothNormStream, 10), (MeshFlags.Unknown, 11), + (MeshFlags.Unknown2, 12), (MeshFlags.HasInterleavedStream, 13), (MeshFlags.Deformable, 14), + (MeshFlags.HasSoftwareSkinningStream, 15) + }; - if (stream.Mode is MetaStreamMode.Read) + if (stream.Mode is MetaStreamMode.Write) { - obj.T3VertexBuffers = new T3VertexBuffer[15]; - if (obj.Flags.Has((int)MeshFlags.HasIndexBuffer)) { - var buffer = new T3IndexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3IndexBuffer = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasPosStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[0] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasNormStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[1] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasSmoothNormStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[2] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasBlendWeightStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[3] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasBlendIdxStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[4] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasUV1Stream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[5] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasUV2Stream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[6] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasUV3Stream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[7] = buffer; + T3IndexBuffer objT3IndexBuffer = obj.T3IndexBuffer; + stream.Serialize(ref objT3IndexBuffer); } - if (obj.Flags.Has((int)MeshFlags.HasUV4Stream)) + for (int i = 0; i < vertexBufferSlots.Length; i++) { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[8] = buffer; - } - - if (obj.Flags.Has((int)MeshFlags.HasTangentStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[9] = buffer; + stream.Serialize(ref obj.T3VertexBuffers[i]); } + } + else + { + obj.T3VertexBuffers = new T3VertexBuffer[16]; - if (obj.Flags.Has((int)MeshFlags.HasColorStream)) + if (obj.Flags.Has((int)MeshFlags.HasIndexBuffer)) { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[10] = buffer; + var buffer = new T3IndexBuffer(); + stream.Serialize(ref buffer); + obj.T3IndexBuffer = buffer; } - if (obj.Flags.Has((int)MeshFlags.Unknown)) + foreach ((MeshFlags flag, int index) in vertexBufferSlots) { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[11] = buffer; - } + if (obj.Flags.Has((int)flag)) + { + var flags = (MeshFlags)obj.Flags.Data; + var buffer = new T3VertexBuffer(); + stream.Serialize(ref buffer); + obj.T3VertexBuffers[index] = buffer; - if (obj.Flags.Has((int)MeshFlags.HasInterleavedStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[12] = buffer; + // is compressed + if (obj.T3VertexBuffers[index].Flags.Has(1)) + { + // TODO: Decompress data + if (flag is MeshFlags.HasPosStream) + { + buffer.DecompressPositions(stream); + } + else if (flag is MeshFlags.HasNormStream or MeshFlags.HasTangentStream) + { + buffer.DecompressNormals(stream); + } + else if (flag is MeshFlags.HasBlendWeightStream) + { + buffer.DecompressWeights(stream); + } + else if (flag is MeshFlags.HasUV1Stream or MeshFlags.HasUV2Stream or MeshFlags.HasUV3Stream or MeshFlags.HasUV4Stream) + { + buffer.DecompressUV(stream); + } + } + } } - if (obj.Flags.Has((int)MeshFlags.HasSoftwareSkinningStream)) - { - var buffer = new T3VertexBuffer(); - Toolkit.Instance.GetSerializer().Serialize(ref buffer, stream); - obj.T3VertexBuffers[13] = buffer; - } // Read Index Buffer // bool hasIndexBuffer = stream.ReadBoolean(); // @@ -612,7 +805,7 @@ private static void SerializeOldD3DMesh(ref D3DMesh obj, MetaStream stream) } // Read Vertex Buffer - var maxVertexBufferCount = 9; + int maxVertexBufferCount = 9; if (obj.VertexAlphaSupport) { maxVertexBufferCount++; @@ -664,25 +857,20 @@ private static void SerializeInternalResources(ref D3DMesh obj, MetaStream strea MetaSerializer serializer = Toolkit.Instance.GetSerializer(typeSymbol.LinkingType); serializer.PreSerialize(ref propertyValue, stream, typeSymbol); - - serializer.Serialize(ref propertyValue, stream); - stream.EndBlock(); } - - return; } - - if (stream.Mode is MetaStreamMode.Read) + else { + // Broken for: adv_johnsHouseInteriorUpstairsFire103_meshesE.d3dmesh in M103, TWD:DE obj.InternalResources = []; // Part of DC Array int numRes = stream.ReadInt32(); - for (var i = 0; i < numRes; i++) + for (int i = 0; i < numRes; i++) { // Handle name? Symbol symbol = stream.ReadSymbol(); @@ -692,7 +880,8 @@ private static void SerializeInternalResources(ref D3DMesh obj, MetaStream strea if (typeSymbol is null) { - Toolkit.Instance.Logger.LogError($"[D3DMesh] Internal resource '{symbol}' has no registered type."); + Toolkit.Instance.Logger.LogError( + $"[D3DMesh] Internal resource '{symbol}' has no registered type."); stream.EndBlock(); continue; } @@ -702,16 +891,11 @@ private static void SerializeInternalResources(ref D3DMesh obj, MetaStream strea Toolkit.Instance.GetSerializer(typeSymbol.LinkingType) .PreSerialize(ref propertyValue!, stream, typeSymbol); Toolkit.Instance.GetSerializer(typeSymbol.LinkingType) - .Serialize(ref propertyValue, stream); + .Serialize(ref propertyValue, stream, typeSymbol); var objHandle = new HandleBase { - ObjectInfo = - { - ObjectName = symbol, - Type = typeSymbol, - HandleObject = propertyValue - } + ObjectInfo = { ObjectName = symbol, Type = typeSymbol, HandleObject = propertyValue } }; obj.InternalResources.Add(objHandle); @@ -726,34 +910,50 @@ private static void SerializeInternalResources(ref D3DMesh obj, MetaStream strea public enum MeshFlags { HasIndexBuffer = 0x1, - HasPosStream = 0x2, - HasNormStream = 0x4, - HasSmoothNormStream = 0x8, - HasBlendWeightStream = 0x10, - HasBlendIdxStream = 0x20, - HasUV1Stream = 0x40, - HasUV2Stream = 0x80, - HasUV3Stream = 0x100, - HasUV4Stream = 0x200, - HasTangentStream = 0x400, - HasColorStream = 0x800, - Unknown = 0x1000, + HasPosStream = 0x2, // 1 + HasNormStream = 0x4, // 2 + HasSmoothNormStream = 0x8, // 11 + HasBlendWeightStream = 0x10, // 3 + HasBlendIdxStream = 0x20, // 4 + HasUV1Stream = 0x40, // 5 + HasUV2Stream = 0x80, // 6 + HasUV3Stream = 0x100, // 7 + HasUV4Stream = 0x200, // 8 + HasTangentStream = 0x400, // 9 + HasColorStream = 0x800, // 10 + Unknown = 0x1000, // 12 + Unknown2 = 0x2000, // 13 HasVertexAnimation = 0x10000, TriangleSetsFixedUp = 0x40000, HasZeroVertexAlpha = 0x80000, - HasInterleavedStream = 0x200000, - HasSoftwareSkinningStream = 0x400000, + HasInterleavedStream = 0x200000, // 14 + HasSoftwareSkinningStream = 0x400000, // 16 IsManualSort = 0x10000000, // Vector 3???!?!? - Deformable = 0x20000000, // It's a string - Interface + Deformable = 0x2000000, // It's a string - Interface // 15 ACTUALLY NOT A BUFFER } - [MetaSerializer(typeof(MetaClassSerializer))] - public class VertexAnimation; + public class VertexAnimation + { + [MetaMember("mName")] + public Symbol Name { get; set; } + + [MetaMember("mResourceGroupMembership")] + public Dictionary ResourceGroupMembership { get; set; } = []; + + [MetaMember("mStartIndex")] + public int StartIndex { get; set; } + + [MetaMember("mNumVertices")] + public int NumVertices { get; set; } + } [MetaSerializer(typeof(MetaClassSerializer))] public class Texture { + //'eFlagHasLightmap',0 + // 'eFlagHasNonLightmap',0 + // 'eFlagHasSpecular',0 [MetaMember("mName")] public Handle Name { get; set; } @@ -774,6 +974,12 @@ public class Texture [MetaMember("mAverageObjAreaPerUVArea")] public float AverageObjAreaPerUVArea { get; set; } + + [MetaMember("mbHasLightmap")] + public bool mbHasLightmap { get; set; } + + [MetaMember("mbHasNonLightmap")] + public bool mbHasNonLightmap { get; set; } } [MetaSerializer(typeof(MetaClassSerializer))] @@ -784,7 +990,7 @@ public class BoneEntry; public PropertySet? GetMaterialPropertySet(int index) { - var count = 0; + int count = 0; foreach (HandleBase? handle in InternalResources) { if (handle.ObjectInfo.HandleObject is not PropertySet pSet) diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXBuffer.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXBuffer.cs index 3c96c5d..fc294df 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXBuffer.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXBuffer.cs @@ -34,7 +34,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref T3GFXBuffer obj, MetaStream stream) + public override void Serialize(ref T3GFXBuffer obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXVertexState.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXVertexState.cs index 678e93b..be17086 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXVertexState.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3GFXVertexState.cs @@ -29,7 +29,7 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref T3GFXVertexState obj, MetaStream stream) + public override void Serialize(ref T3GFXVertexState obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3IndexBuffer.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3IndexBuffer.cs index 564107b..bf5acde 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3IndexBuffer.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3IndexBuffer.cs @@ -35,7 +35,7 @@ public class T3IndexBufferSerializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref T3IndexBuffer obj, MetaStream stream) + public override void Serialize(ref T3IndexBuffer obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.Serialize(ref obj, stream); @@ -56,12 +56,92 @@ public override void Serialize(ref T3IndexBuffer obj, MetaStream stream) obj.IndexByteSize = bufferBytes; } - obj.Buffer = stream.ReadBytes(bufferBytes * obj.NumIndices); + if (obj.Flags.Has(1)) + { + // 1. Read the base value (first index) + ushort baseValue = stream.ReadUInt16(); + uint[] indices = new uint[obj.NumIndices]; + indices[0] = baseValue; + + // 2. Read the compressed data size and raw bytes + uint compressedSize = stream.ReadUInt32(); + byte[] compressedData = stream.ReadBytes((int)compressedSize); + + // 3. Bit reader over the compressed bytes + var bitReader = new BitReader(compressedData); + + int idx = 1; // we already filled index 0 + + // 4. Decompress each run of deltas + while (idx < obj.NumIndices) + { + int numBits = bitReader.ReadBits(4); // magnitude bit width (0..15) + int runLength = bitReader.ReadBits(7); // number of deltas in this run (0..127) + + for (int i = 0; i < runLength && idx < obj.NumIndices; i++) + { + int sign = bitReader.ReadBits(1); + int magnitude = bitReader.ReadBits(numBits); + int delta = sign == 1 ? -magnitude : magnitude; + + baseValue = (ushort)(baseValue + delta); + indices[idx++] = baseValue; + } + } + } + else + { + obj.Buffer = stream.ReadBytes(bufferBytes * obj.NumIndices); + } } } } } +public class BitReader +{ + private readonly byte[] _data; + private int _bitPos; + + public BitReader(byte[] data) + { + _data = data; + _bitPos = 0; + } + + public int ReadBits(int count) + { + if (count == 0) return 0; + + int value = 0; + for (int i = 0; i < count; i++) + { + int byteIndex = _bitPos / 8; + int bitOffset = _bitPos % 8; + int bit = (_data[byteIndex] >> bitOffset) & 1; + value |= bit << i; // first bit read becomes LSB + _bitPos++; + } + + return value; + } + + public bool ReadBit() => ReadBits(1) != 0; + + public float ReadFloat() + { + int bits = ReadBits(32); + return BitConverter.ToSingle(BitConverter.GetBytes(bits), 0); + } + + /// Advances the bit pointer without reading. + public void SkipBits(int numBits) + { + if (numBits < 0) throw new ArgumentOutOfRangeException(nameof(numBits)); + _bitPos += numBits; + } +} + [MetaSerializer(typeof(MetaClassSerializer))] public class T3VertexComponent { @@ -75,16 +155,18 @@ public class T3VertexComponent public EnumType Type { get; set; } [MetaSerializer(typeof(EnumSerializer))] - public enum EnumType { + public enum EnumType + { VTypeNone = 0, VTypeFloat = 1, - VTypeS8N = 2,//N meaning normalised between -127 and 127 so when read cast to float and divide by 127 + VTypeS8N = 2, //N meaning normalised between -127 and 127 so when read cast to float and divide by 127 VTypeU8N = 3, VTypeS16N = 4, VTypeU16N = 5, + //../ VTypeS8NBones = 8, - VTypeSF16 = 11,//signed half float + VTypeSF16 = 11, //signed half float } } diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialCompiledData.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialCompiledData.cs index f4f8c71..0f7d19c 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialCompiledData.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialCompiledData.cs @@ -75,10 +75,10 @@ public class T3MaterialCompiledData public Flags Flags { get; set; } [MetaMember("mPropertyParameterIndex")] - public int[] PropertyParameterIndex { get; set; } = new int[31]; + public int[] PropertyParameterIndex { get; set; } [MetaMember("mTexturePropertyParameterIndex")] - public int[] TexturePropertyParameterIndex { get; set; } = new int[1]; + public int[] TexturePropertyParameterIndex { get; set; } [MetaMember("mParameterBufferScalarSize[0]")] public uint ParameterBufferScalarSize0 { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialData.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialData.cs index 4a1c620..20f72e9 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialData.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialData.cs @@ -9,25 +9,25 @@ namespace TelltaleToolKit.T3Types.Meshes.T3Types; public class T3MaterialData { [MetaMember("mMaterialName")] - public Symbol MaterialName { get; set; } + public Symbol MaterialName { get; set; } = Symbol.Empty; [MetaMember("mRuntimePropertiesName")] - public Symbol RuntimePropertiesName { get; set; } + public Symbol RuntimePropertiesName { get; set; } = Symbol.Empty; [MetaMember("mLegacyRenderTextureProperty")] - public Symbol LegacyBlendModeTextureProperty { get; set; } + public Symbol LegacyBlendModeTextureProperty { get; set; } = Symbol.Empty; [MetaMember("mLegacyBlendModeRuntimeProperty")] - public Symbol LegacyBlendModeRuntimeProperty { get; set; } + public Symbol LegacyBlendModeRuntimeProperty { get; set; } = Symbol.Empty; [MetaMember("mDomain")] - public T3MaterialDomainType Domain { get; set; } //wd4+ TODO: + public T3MaterialDomainType Domain { get; set; } //wd4+ [MetaMember("mLightType")] public LightType LightType { get; set; } //bat2 and below [MetaMember("mRuntimeProperties")] - public List RuntimeProperties { get; set; } + public List RuntimeProperties { get; set; } = []; [MetaMember("mFlags")] public Flags Flags { get; set; } @@ -39,7 +39,7 @@ public class T3MaterialData public float MaxDistance { get; set; } //bat2 and below, not sure if its a float/int always 0 [MetaMember("mCompiledData2")] - public List CompiledData2 { get; set; } + public List CompiledData2 { get; set; } = []; public class Serializer : MetaSerializer { @@ -47,13 +47,10 @@ public class Serializer : MetaSerializer public override void PreSerialize(ref T3MaterialData? obj, MetaStream stream, MetaClassType? type = null) { - if (obj is null) - { - obj = new T3MaterialData(); - } + obj ??= new T3MaterialData(); } - public override void Serialize(ref T3MaterialData obj, MetaStream stream) + public override void Serialize(ref T3MaterialData obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.Serialize(ref obj, stream); @@ -64,36 +61,28 @@ public override void Serialize(ref T3MaterialData obj, MetaStream stream) if (stream.Mode is MetaStreamMode.Write) { - obj.CompiledData2 ??= []; - stream.Write(obj.CompiledData2.Count); - for (var i = 0; i < obj.CompiledData2.Count; i++) + for (int i = 0; i < obj.CompiledData2.Count; i++) { stream.Write(i); T3MaterialCompiledData compiledData = obj.CompiledData2[i]; - Toolkit.Instance.GetSerializer().PreSerialize(ref compiledData, stream); - - Toolkit.Instance.GetSerializer().Serialize(ref compiledData, stream); - + stream.Serialize(ref compiledData); obj.CompiledData2[i] = compiledData; } - - return; } - - if (stream.Mode is MetaStreamMode.Read) + else { int numCompiledData = stream.ReadInt32(); obj.CompiledData2 = new List(numCompiledData); - for (var i = 0; i < numCompiledData; i++) + for (int i = 0; i < numCompiledData; i++) obj.CompiledData2.Add(new T3MaterialCompiledData()); - for (var i = 0; i < numCompiledData; i++) + for (int i = 0; i < numCompiledData; i++) { int materialIndex = stream.ReadInt32(); @@ -102,10 +91,7 @@ public override void Serialize(ref T3MaterialData obj, MetaStream stream) $"Material index {materialIndex} was outside the valid range 0..{numCompiledData - 1}."); T3MaterialCompiledData compiledData = obj.CompiledData2[materialIndex]; - - Toolkit.Instance.GetSerializer().PreSerialize(ref compiledData, stream); - - Toolkit.Instance.GetSerializer().Serialize(ref compiledData, stream); + stream.Serialize(ref compiledData); obj.CompiledData2[materialIndex] = compiledData; } diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialDomainType.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialDomainType.cs index 5ab9198..e33c54e 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialDomainType.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialDomainType.cs @@ -6,7 +6,6 @@ namespace TelltaleToolKit.T3Types.Meshes.T3Types; [MetaSerializer(typeof(EnumSerializer))] public enum T3MaterialDomainType { - // eMaterialDomain_ None = -1, Mesh = 0x0, Particle = 0x1, diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialTransform2D.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialTransform2D.cs index 2414740..a8ba1f8 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialTransform2D.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MaterialTransform2D.cs @@ -4,15 +4,11 @@ namespace TelltaleToolKit.T3Types.Meshes.T3Types; -// TODO: Handle arrays properly. -// I am probably going to add SArrays (unfortunately) -// Maybe check if the value contains "[...]"? -// Or maybe leave it as it is. [MetaSerializer(typeof(MetaClassSerializer))] public class T3MaterialTransform2D { [MetaMember("mParameterPrefix")] - public Symbol ParameterPrefix { get; set; } + public Symbol ParameterPrefix { get; set; } = Symbol.Empty; [MetaMember("mFlags")] public uint Flags { get; set; } @@ -31,16 +27,22 @@ public class T3MaterialTransform2D [MetaMember("mScalarOffset0[1]")] public int ScalarOffset01 { get; set; } + [MetaMember("mScalarOffset0[2]")] public int ScalarOffset02 { get; set; } + [MetaMember("mScalarOffset0[3]")] public int ScalarOffset03 { get; set; } + [MetaMember("mScalarOffset1[1]")] public int ScalarOffset11 { get; set; } + [MetaMember("mScalarOffset1[2]")] public int ScalarOffset12 { get; set; } + [MetaMember("mScalarOffset1[3]")] public int ScalarOffset13 { get; set; } + [MetaMember("mPreShaderScalarOffset0")] public int PreShaderScalarOffset0 { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshData.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshData.cs index f858fdd..3eb7526 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshData.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshData.cs @@ -81,8 +81,6 @@ public enum MeshFlags // Batman [MetaMember("mBonePalettes")] public List> BonePalettes { get; set; } - // TODO: - // public List MeshPreload { get; set; } = []; [MetaMember("mLocalTransformPalettes")] public List> LocalTransformPalettes { get; set; } @@ -96,7 +94,7 @@ public class Serializer : MetaSerializer private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref T3MeshData obj, MetaStream stream) + public override void Serialize(ref T3MeshData obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshTextureIndices.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshTextureIndices.cs index e30458f..b2ad29d 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshTextureIndices.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3MeshTextureIndices.cs @@ -1,3 +1,4 @@ +using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.T3Types.Meshes.T3Types; @@ -9,7 +10,7 @@ public class T3MeshTextureIndices public class Serializer : MetaSerializer { - public override void Serialize(ref T3MeshTextureIndices obj, MetaStream stream) + public override void Serialize(ref T3MeshTextureIndices obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { diff --git a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3VertexBuffer.cs b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3VertexBuffer.cs index d3b6e5b..0a188ba 100644 --- a/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3VertexBuffer.cs +++ b/src/TelltaleToolKit/T3Types/Meshes/T3Types/T3VertexBuffer.cs @@ -4,10 +4,13 @@ namespace TelltaleToolKit.T3Types.Meshes.T3Types; +// Right, so D3DVertexBuffer changes to T3VertexBuffer (probably because the engine became cross-platform at the time). +// Since most values are the same, I merged D3DVertexBuffer with T3VertexBuffer. + /// /// Old name - D3DVertexBuffer /// -[MetaSerializer(typeof(T3VertexBufferSerializer))] +[MetaSerializer(typeof(Serializer))] public class T3VertexBuffer { [MetaMember("mNumVerts")] @@ -32,29 +35,59 @@ public class T3VertexBuffer public int Usage { get; set; } [MetaMember("mVertexComponents")] - public T3VertexComponent[] VertexComponents { get; set; } = new T3VertexComponent[12]; + public T3VertexComponent[] VertexComponents { get; set; } = new T3VertexComponent[14]; + + [MetaMember("mComponents")] + public T3VertexComponent[] Components { get; set; } = new T3VertexComponent[12]; + + public float[] Positions { get; private set; } // length = NumVerts * 3 + public float[] Normals { get; private set; } // length = NumVerts * 3 + public float[] UVs { get; private set; } // length = NumVerts * 2 (or 3? adjust) + public float[] Weights { get; private set; } // length = NumVerts * 3 (or 4? adjust) [MetaMember("mbStoreCompressed")] public bool StoreCompressed { get; set; } + public float[] FBuffer = []; public byte[] Buffer = []; - [MetaSerializer(typeof(T3VertexBufferSerializer))] - public class T3VertexBufferSerializer : MetaSerializer + public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref T3VertexBuffer obj, MetaStream stream) + public override void PreSerialize(ref T3VertexBuffer? obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.Serialize(ref obj, stream); + obj ??= new T3VertexBuffer(); + } + public override void Serialize(ref T3VertexBuffer obj, MetaStream stream, MetaClassType? type = null) + { if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException($"There is no serializer for {SerializationType}"); + if (obj.Buffer.Length == obj.NumVerts * obj.VertSize) + { + obj.StoreCompressed = false; + } + else if (obj.Buffer.Length == 2 * obj.NumVerts && obj.Type is 2 or 4) + { + obj.StoreCompressed = true; + } } - if (stream.Mode is MetaStreamMode.Read) + s_metaClassSerializer.PreSerialize(ref obj!, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) { + stream.Write(obj.Buffer); + } + else + { + if (obj.Flags.Has(1)) + { + return; + } + int totalBytes = obj.StoreCompressed switch { true when obj.Type is 2 or 4 => 2 * obj.NumVerts, @@ -65,34 +98,419 @@ public override void Serialize(ref T3VertexBuffer obj, MetaStream stream) } } } -} -// Right, so D3DVertexBuffer changes to T3VertexBuffer (probably because the engine became cross-platform at the time). -// Since most values are the same, I merged D3DVertexBuffer with T3VertexBuffer. + public void DecompressPositions(MetaStream stream) + { + Positions = new float[NumVerts * 3]; + uint compressedSize = stream.ReadUInt32(); + byte[] compressedData = stream.ReadBytes((int)compressedSize); + + var bitBuffer = new BitReader(compressedData); + + // ---- Header ---- + int v92 = bitBuffer.ReadBits(4); // skip bits when flag==1 + int v93 = bitBuffer.ReadBits(3); // bits for v94 + int v94 = bitBuffer.ReadBits(3); // bits for v95 + int v95 = bitBuffer.ReadBits(3); // bits for v96 + int v96 = bitBuffer.ReadBits(4); // bits for v48 (run length) + + // Two floats are read but discarded in the original code. + // They may be scale/offset – adapt if needed. + float Float = bitBuffer.ReadFloat(); + float v104 = bitBuffer.ReadFloat(); + + float x = 0f, y = 0f, z = 0f; // accumulated position + int vertexIndex = 0; + + while (vertexIndex < NumVerts) + { + // Per‑vertex flag + bool flag = bitBuffer.ReadBit(); + float v30; + if (flag) + { + uint v29 = (uint)bitBuffer.ReadBits(v92); + uint maxVal = (1u << v92) - 1; + if (maxVal == 0) v30 = Float; + else + { + v30 = Float + (v104 - Float) * ((float)v29 / maxVal); + v30 = Math.Clamp(v30, Float, v104); + } + } + else + { + v30 = bitBuffer.ReadFloat(); + } + + // Read bit‑widths for the delta components + int v109 = bitBuffer.ReadBits(v93); + int v110 = bitBuffer.ReadBits(v94); + int v111 = bitBuffer.ReadBits(v95); + + // Number of repeated deltas + int v59 = bitBuffer.ReadBits(v96); + + for (int j = 0; j < v59; j++) + { + int flag2 = bitBuffer.ReadBits(1); + if (flag2 == 0) + { + // Read raw delta values (unsigned) + uint v106 = (uint)bitBuffer.ReadBits(v109); + uint v107 = (uint)bitBuffer.ReadBits(v110); + uint v108 = (uint)bitBuffer.ReadBits(v111); + + float dx = 0f, dy = 0f, dz = 0f; + if (v109 > 0) + { + float maxVal = (1u << v109) - 1; + dx = (v106 / maxVal) * (2f * v30) - v30; + } + + if (v110 > 0) + { + float maxVal = (1u << v110) - 1; + dy = (v107 / maxVal) * (2f * v30) - v30; + } + + if (v111 > 0) + { + float maxVal = (1u << v111) - 1; + dz = (v108 / maxVal) * (2f * v30) - v30; + } + + x += dx; + y += dy; + z += dz; + + // float deltaX = DecompressDelta(rawDx, v94, 1.0f); + // float deltaY = DecompressDelta(rawDy, v95, 1.0f); + // float deltaZ = DecompressDelta(rawDz, v96, 1.0f); + } + + if (vertexIndex >= NumVerts) break; + int baseIdx = vertexIndex * 3; + Positions[baseIdx + 0] = x; + Positions[baseIdx + 1] = y; + Positions[baseIdx + 2] = z; + vertexIndex++; + // flag2 == 1 : no delta (position unchanged) + } + } + } + + /// + /// Decompresses normals from the stream into a pre‑allocated float array. + /// + /// The input stream containing compressed normal data. + /// Output array (interleaved x,y,z) of length vertexCount * 3. + /// Bytes between consecutive vertices in the output buffer. + /// Number of vertices to decompress. + public void DecompressNormals(MetaStream stream) + { + if (NumVerts == 0) return; + + Normals = new float[NumVerts * 3]; + + // ---- Read header ---- + int w1 = stream.ReadByte(); // v75[0] (unused flag width) + int w2 = stream.ReadByte(); // v74 – bit width for phi‑delta width + int w3 = stream.ReadByte(); // v73 – bit width for theta‑delta width + int w4 = stream.ReadByte(); // v72 – bit width for run length + + // The next four floats: v71, v70, v67, v68. + // v67 and v68 are the initial spherical angles (phi, theta). + // v71 and v70 are scaling factors used elsewhere (currently ignored). + float _scale1 = stream.ReadSingle(); // v71 + float _scale2 = stream.ReadSingle(); // v70 + float initPhi = stream.ReadSingle(); // v67 + float initTheta = stream.ReadSingle(); // v68 + + // ---- Decompress the entire bit stream ---- + // In the original code the compressed payload follows the header. + // We assume the stream position is already at the start of the bit data. + // The compressed size is not read here; we read until we've produced vertexCount normals. + // You might need to read the payload size first (like in PositionDecompress). + uint compressedSize = stream.ReadUInt32(); + byte[] compressedData = stream.ReadBytes((int)compressedSize); + //byte[] compressedData = stream.ReadBytes( /* payload length */); // adjust as needed + var bitBuffer = new BitReader(compressedData); + + // ---- Process vertex 0 ---- + float currentPhi = initPhi; + float currentTheta = initTheta; + float lastPhi = initPhi; + float lastTheta = initTheta; + + SphericalToNormal(initPhi, initTheta, out float x, out float y, out float z); + int strideFloats = VertSize / 4; + Normals[0] = x; + Normals[1] = y; + Normals[2] = z; + + int vertexIndex = 1; // we have already written vertex 0 + + // ---- Process runs ---- + while (vertexIndex < NumVerts) + { + // Read flag1 + int flag1 = bitBuffer.ReadBits(1); + if (flag1 == 1) + { + // Read w1 bits and discard (DecompressBounds) + bitBuffer.ReadBits(w1); + } + else + { + // Read a float and discard + bitBuffer.ReadFloat(); + } + + // Read bit widths for this run + int phiBitWidth = bitBuffer.ReadBits(w2); // v51 + int thetaBitWidth = bitBuffer.ReadBits(w3); // v21 + int runLength = bitBuffer.ReadBits(w4); // v25 + + float deltaScale = 1.0f; + // Process the run + for (int j = 0; j < runLength && vertexIndex < NumVerts; j++) + { + int flag2 = bitBuffer.ReadBits(1); // v54 + + // Read raw deltas (unsigned) + int rawPhi = bitBuffer.ReadBits(phiBitWidth); + int rawTheta = bitBuffer.ReadBits(thetaBitWidth); -// [DataSerializerGlobal(typeof(MetaClassSerializer))] -// public class D3DVertexBuffer -// { -// [MetaMember("mNumVerts")] public int NumVerts { get; set; } -// [MetaMember("mVertFormat")] public ulong VertFormat { get; set; } -// [MetaMember("mVertSize")] public int VertSize { get; set; } -// [MetaMember("mType")] public int Type { get; set; } -// [MetaMember("mbStoreCompressed")] public bool StoreCompressed { get; set; } -// public byte[] VertexBufferData = []; -// -// [DataSerializerGlobal(typeof(D3DIndexBufferSerializer))] -// public class D3DIndexBufferSerializer : MetaSerializer -// { -// public override void Serialize(ref D3DIndexBuffer obj, MetaStream stream, MetaClass desc) -// { -// new MetaClassSerializer().Serialize(ref obj, stream, desc); -// -// if (stream.Mode is MetaStreamMode.Write) -// { -// } -// else if (stream.Mode is MetaStreamMode.Read) -// { -// } -// } -// } -// } + // Convert to floating‑point deltas. + // The original code uses scaling factors; we use 1.0 as default. + // If your format uses scaling, multiply by the appropriate factors. + float phiDelta = DecompressDelta(rawPhi, phiBitWidth, deltaScale); + float thetaDelta = DecompressDelta(rawTheta, thetaBitWidth, deltaScale); + + // Update spherical coordinates + if (flag2 == 1) + { + // Accumulate onto the current run's base + currentPhi += phiDelta; + currentTheta += thetaDelta; + } + else + { + // Use the previous vertex's angles as base + currentPhi = lastPhi + phiDelta; + currentTheta = lastTheta + thetaDelta; + } + + // Convert to unit normal + SphericalToNormal(currentPhi, currentTheta, out x, out y, out z); + + // Write to output + int baseOffset = vertexIndex * strideFloats; + Normals[baseOffset] = x; + Normals[baseOffset + 1] = y; + Normals[baseOffset + 2] = z; + + // Update "last" for the next vertex + lastPhi = currentPhi; + lastTheta = currentTheta; + + vertexIndex++; + } + } + } + + public void DecompressWeights(MetaStream stream) + { + if (NumVerts == 0) return; + Weights = new float[NumVerts * 3]; + + // ---- Header ---- + int w1 = stream.ReadByte(); // unused flag width + int w2 = stream.ReadByte(); // bit width for delta1‑width + int w3 = stream.ReadByte(); // bit width for delta2‑width + int w4 = stream.ReadByte(); // bit width for run length + + float _scale1 = stream.ReadSingle(); // v74 (ignored) + float _scale2 = stream.ReadSingle(); // v73 (ignored) + float initW0 = stream.ReadSingle(); // v67 + float initW1 = stream.ReadSingle(); // v68 + + float initW2 = 1.0f - initW0 - initW1; // v69 + + // ---- Payload ---- + uint payloadSize = stream.ReadUInt32(); + byte[] compressedData = stream.ReadBytes((int)payloadSize); + var bitBuffer = new BitReader(compressedData); + + // ---- Vertex 0 ---- + int strideFloats = VertSize / 4; + Weights[0] = initW0; + Weights[1] = initW1; + Weights[2] = initW2; + + // ---- Loop ---- + float currentW0 = initW0; + float currentW1 = initW1; + float currentW2 = initW2; + float lastW0 = initW0; + float lastW1 = initW1; + float lastW2 = initW2; + + int vertexIndex = 1; + + while (vertexIndex < NumVerts) + { + int flag1 = bitBuffer.ReadBits(1); + if (flag1 == 1) + bitBuffer.SkipBits(w1); + else + bitBuffer.ReadFloat(); + + int delta0BitWidth = bitBuffer.ReadBits(w2); // v54 + int delta1BitWidth = bitBuffer.ReadBits(w3); // v23 + int runLength = bitBuffer.ReadBits(w4); // v27 + + for (int j = 0; j < runLength && vertexIndex < NumVerts; j++) + { + int flag2 = bitBuffer.ReadBits(1); // v54 (second flag) + + int rawDelta0 = bitBuffer.ReadBits(delta0BitWidth); + int rawDelta1 = bitBuffer.ReadBits(delta1BitWidth); + + float delta0 = DecompressDelta(rawDelta0, delta0BitWidth, 1.0f); + float delta1 = DecompressDelta(rawDelta1, delta1BitWidth, 1.0f); + + if (flag2 == 1) + { + currentW0 += delta0; + currentW1 += delta1; + } + else + { + currentW0 = lastW0 + delta0; + currentW1 = lastW1 + delta1; + } + + currentW2 = 1.0f - currentW0 - currentW1; + + int baseOffset = vertexIndex * strideFloats; + Weights[baseOffset] = currentW0; + Weights[baseOffset + 1] = currentW1; + Weights[baseOffset + 2] = currentW2; + + lastW0 = currentW0; + lastW1 = currentW1; + lastW2 = currentW2; + vertexIndex++; + } + } + } + + public void DecompressUV(MetaStream stream) + { + if (NumVerts == 0) return; + UVs = new float[NumVerts * 2]; + + // ---- Read header ---- + int w1 = stream.ReadByte(); // unused flag width (v80[0]) + int w2 = stream.ReadByte(); // bit width for U‑delta width (v79) + int w3 = stream.ReadByte(); // bit width for V‑delta width (v78) + int w4 = stream.ReadByte(); // bit width for run length (v77) + + float _scaleU = stream.ReadSingle(); // v76 (ignored here) + float _scaleV = stream.ReadSingle(); // v75 (ignored) + float initU = stream.ReadSingle(); // v72 + float initV = stream.ReadSingle(); // v73 + + // ---- Read compressed payload ---- + uint payloadSize = stream.ReadUInt32(); + byte[] compressedData = stream.ReadBytes((int)payloadSize); + var bitBuffer = new BitReader(compressedData); + + // ---- Vertex 0 ---- + int strideFloats = VertSize / 4; // number of floats per UV pair + UVs[0] = initU; + UVs[1] = initV; + + // ---- Loop over remaining vertices ---- + float currentU = initU; + float currentV = initV; + + int vertexIndex = 1; + + while (vertexIndex < NumVerts) + { + // Run header + int flag1 = bitBuffer.ReadBits(1); + if (flag1 == 1) + bitBuffer.SkipBits(w1); // discard DecompressBounds data + else + bitBuffer.ReadFloat(); // discard full‑precision float + + // Read bit widths for this run (as integers) + int uBitWidth = bitBuffer.ReadBits(w2); // v63 + int vBitWidth = bitBuffer.ReadBits(w3); // v64 + int runLength = bitBuffer.ReadBits(w4); // v35 + + // Process the run + for (int j = 0; j < runLength && vertexIndex < NumVerts; j++) + { + int rawU = bitBuffer.ReadBits(uBitWidth); + int rawV = bitBuffer.ReadBits(vBitWidth); + // TODO: Delta Scales (wtf) + float deltaU = DecompressDelta(rawU, uBitWidth, 1.0f); + float deltaV = DecompressDelta(rawV, vBitWidth, 1.0f); + + currentU += deltaU; + currentV += deltaV; + + int baseOffset = vertexIndex * strideFloats; + UVs[baseOffset] = currentU; + UVs[baseOffset + 1] = currentV; + + vertexIndex++; + } + } + } + + /// + /// Converts spherical coordinates (phi, theta) to a unit normal. + /// phi: azimuth angle in radians (around Y axis? adapt to your convention). + /// theta: polar angle from Z axis (0..PI). + /// + private static void SphericalToNormal(float phi, float theta, out float x, out float y, out float z) + { + float sinTheta = (float)Math.Sin(theta); + float cosTheta = (float)Math.Cos(theta); + float sinPhi = (float)Math.Sin(phi); + float cosPhi = (float)Math.Cos(phi); + + // Typical right‑handed system: X = sin(theta)*cos(phi), Y = sin(theta)*sin(phi), Z = cos(theta) + // Adjust if your engine uses a different convention. + x = sinTheta * cosPhi; + y = sinTheta * sinPhi; + z = cosTheta; + } + + /// + /// Converts a raw unsigned integer delta to a float in the range [-scale, scale]. + /// + /// The unsigned value extracted from the bitstream (only lower 'bitWidth' bits matter). + /// Number of bits used for this delta. + /// Maximum magnitude of the delta. + /// Scaled delta as a float. + public static float DecompressDelta(int rawValue, int bitWidth, float scale) + { + if (bitWidth <= 0 || scale == 0.0f) + return 0.0f; + + int mask = (1 << bitWidth) - 1; + int val = rawValue & mask; // ensure we only use the valid bits + + // Map val from [0, mask] to [-scale, scale]: + // delta = (val / mask) * 2 * scale - scale + float normalized = (float)val / mask; + return normalized * (2.0f * scale) - scale; + } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/CameraFacingTypes.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/CameraFacingTypes.cs index 77affdc..1f3924a 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/CameraFacingTypes.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/CameraFacingTypes.cs @@ -7,14 +7,14 @@ namespace TelltaleToolKit.T3Types.Miscellaneous; [MetaSerializer(typeof(MetaClassSerializer))] public class CameraFacingTypes { + [MetaSerializer(typeof(EnumSerializer))] + public enum FacingTypes + { + Facing = 0, + FacingY = 1, + FacingLocalY = 2 + } + [MetaMember("mCameraFacingType")] public FacingTypes CameraFacingType { get; set; } } - -[MetaSerializer(typeof(EnumSerializer))] -public enum FacingTypes -{ - Facing = 0, - FacingY = 1, - FacingLocalY = 2, -} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/DateStamp.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/DateStamp.cs new file mode 100644 index 0000000..b624d35 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/DateStamp.cs @@ -0,0 +1,36 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class DateStamp +{ + [MetaMember("mSec")] + public byte Sec { get; set; } + + [MetaMember("mMin")] + public byte Min { get; set; } + + [MetaMember("mHour")] + public byte Hour { get; set; } + + [MetaMember("mMday")] + public byte Day { get; set; } + + [MetaMember("mMon")] + public byte Month { get; set; } + + [MetaMember("mYear")] + public byte Year { get; set; } + + [MetaMember("mWday")] + public byte Wday { get; set; } + + [MetaMember("mYday")] + public ushort Yday { get; set; } + + [MetaMember("mIsdst")] + public byte Isdst { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehOcclusionType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehOcclusionType.cs index 95721e5..1ccd362 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehOcclusionType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehOcclusionType.cs @@ -9,10 +9,13 @@ public struct EnumBokehOcclusionType { [MetaMember("mVal")] public BokehOcclusionType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum BokehOcclusionType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum BokehOcclusionType + { + Disabled = 0x0, + ZTestAndScaleOccluded = 0x1, + ScaleOccluded = 0x2, + ZTest = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehQualityLevel.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehQualityLevel.cs index ab60d24..df9d157 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehQualityLevel.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumBokehQualityLevel.cs @@ -9,10 +9,13 @@ public struct EnumBokehQualityLevel { [MetaMember("mVal")] public BokehQualityLevel Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum BokehQualityLevel -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum BokehQualityLevel + { + Disabled = 0x0, + Low = 0x1, + Medium = 0x2, + High = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDOFQualityLevel.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDOFQualityLevel.cs index 3a9dada..d50fd00 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDOFQualityLevel.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDOFQualityLevel.cs @@ -9,10 +9,13 @@ public struct EnumDOFQualityLevel { [MetaMember("mVal")] public DOFQualityLevel Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum DOFQualityLevel -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum DOFQualityLevel + { + Disabled = 0x0, + Low = 0x1, + Medium = 0x2, + High = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDepthOfFieldType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDepthOfFieldType.cs index b76c664..1e370ca 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDepthOfFieldType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumDepthOfFieldType.cs @@ -9,10 +9,11 @@ public struct EnumDepthOfFieldType { [MetaMember("mVal")] public DepthOfFieldType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum DepthOfFieldType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum DepthOfFieldType + { + Default = 0x1, + Brush = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterBoneSelection.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterBoneSelection.cs index 1663dbc..e6a2d8b 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterBoneSelection.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterBoneSelection.cs @@ -7,10 +7,12 @@ public struct EnumEmitterBoneSelection { [MetaMember("mVal")] public EmitterBoneSelection Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterBoneSelection -{ - // TODO: + + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterBoneSelection + { + All = 0x1, + Children = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterColorType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterColorType.cs index 5d94914..5b53602 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterColorType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterColorType.cs @@ -9,10 +9,15 @@ public struct EnumEmitterColorType { [MetaMember("mVal")] public EmitterColorType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterColorType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterColorType + { + Constant = 0x1, + Random_Lerp = 0x2, + Random_Discrete = 0x3, + BurstLife_Lerp = 0x4, + Index_Lerp = 0x5, + KeyControl01 = 0x6 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterConstraintType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterConstraintType.cs index e27c2fd..b463757 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterConstraintType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterConstraintType.cs @@ -9,10 +9,13 @@ public struct EnumEmitterConstraintType { [MetaMember("mVal")] public EmitterConstraintType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterConstraintType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterConstraintType + { + _None = 0x1, + _0Point = 0x2, + _1Point = 0x3, + _2Point = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterParticleCountType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterParticleCountType.cs index a5823d2..415c93a 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterParticleCountType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterParticleCountType.cs @@ -9,10 +9,11 @@ public struct EnumEmitterParticleCountType { [MetaMember("mVal")] public EmitterParticleCountType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterParticleCountType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterParticleCountType + { + Count = 0x1, + SpawnVolParticleCount = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpawnShape.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpawnShape.cs index c8ed266..5f13a71 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpawnShape.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpawnShape.cs @@ -9,10 +9,17 @@ public struct EnumEmitterSpawnShape { [MetaMember("mVal")] public EmitterSpawnShape Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterSpawnShape -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterSpawnShape + { + Box = 0x1, + Sphere = 0x2, + Cylinder = 0x3, + ToTarget = 0x4, + Particle = 0x5, + ParticleInterpolate = 0x6, + Bones = 0x7, + BoneBoxes = 0x8 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationSelection.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationSelection.cs index d9010fe..45ae7ea 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationSelection.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationSelection.cs @@ -9,10 +9,13 @@ public struct EnumEmitterSpriteAnimationSelection { [MetaMember("mVal")] public EmitterSpriteAnimationSelection Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterSpriteAnimationSelection -{ -// TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterSpriteAnimationSelection + { + Random = 0x1, + LinearLoop = 0x2, + LinearStretch = 0x3, + KeyControl01 = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationType.cs index a74a054..68dd918 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterSpriteAnimationType.cs @@ -9,10 +9,11 @@ public struct EnumEmitterSpriteAnimationType { [MetaMember("mVal")] public EmitterSpriteAnimationType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterSpriteAnimationType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterSpriteAnimationType + { + Linear = 0x1, + Random = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterTriggerEnable.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterTriggerEnable.cs index a2e1f30..8b8abc4 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterTriggerEnable.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmitterTriggerEnable.cs @@ -9,10 +9,13 @@ public struct EnumEmitterTriggerEnable { [MetaMember("mVal")] public EmitterTriggerEnable Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmitterTriggerEnable -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmitterTriggerEnable + { + None = 1, + AgentVis = 2, + AgentVisInvert = 3, + Default = 4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmittersEnableType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmittersEnableType.cs index 7c946f0..57fa2e7 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmittersEnableType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumEmittersEnableType.cs @@ -9,10 +9,12 @@ public struct EnumEmittersEnableType { [MetaMember("mVal")] public EmittersEnableType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum EmittersEnableType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum EmittersEnableType + { + All = 1, + Random = 2, + Sequential = 3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumGlowQualityLevel.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumGlowQualityLevel.cs index c0f552e..59253a6 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumGlowQualityLevel.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumGlowQualityLevel.cs @@ -9,10 +9,13 @@ public struct EnumGlowQualityLevel { [MetaMember("mVal")] public GlowQualityLevel Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum GlowQualityLevel -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum GlowQualityLevel + { + Old = 0x0, + Low = 0x1, + Medium = 0x2, + High = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOBlurQuality.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOBlurQuality.cs index 4d7b713..6a417c4 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOBlurQuality.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOBlurQuality.cs @@ -9,10 +9,15 @@ public struct EnumHBAOBlurQuality { [MetaMember("mVal")] public HBAOBlurQuality Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAOBlurQuality -{ - // TODO: + + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAOBlurQuality + { + None = 0x0, + Narrow = 0x1, + Medium = 0x2, + Wide = 0x3, + ExtraWide = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAODeinterleaving.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAODeinterleaving.cs index 0f998c8..ba8ccc3 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAODeinterleaving.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAODeinterleaving.cs @@ -9,10 +9,12 @@ public struct EnumHBAODeinterleaving { [MetaMember("mVal")] public HBAODeinterleaving Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAODeinterleaving -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAODeinterleaving + { + _Disabled = 0x0, + _2x = 0x1, + _4x = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOParticipationType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOParticipationType.cs index 0e1635b..481b0a3 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOParticipationType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOParticipationType.cs @@ -9,10 +9,12 @@ public struct EnumHBAOParticipationType { [MetaMember("mVal")] public HBAOParticipationType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAOParticipationType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAOParticipationType + { + Auto = 0, + ForceOn = 1, + ForceOff = 2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPerPixelNormals.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPerPixelNormals.cs index 786cd22..fb10ad2 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPerPixelNormals.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPerPixelNormals.cs @@ -9,10 +9,11 @@ public struct EnumHBAOPerPixelNormals { [MetaMember("mVal")] public HBAOPerPixelNormals Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAOPerPixelNormals -{ - //TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAOPerPixelNormals + { + GBuffer = 0x0, + Reconstructed = 0x1 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPreset.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPreset.cs index 210c4c4..faf3ad5 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPreset.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOPreset.cs @@ -9,10 +9,17 @@ public struct EnumHBAOPreset { [MetaMember("mVal")] public HBAOPreset Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAOPreset -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAOPreset + { + FromTool = 0x0, + XBone = 0x1, + PS4 = 0x2, + Disabled = 0x3, + Low = 0x4, + Medium = 0x5, + High = 0x6, + Ultra = 0x7 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOQualityLevel.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOQualityLevel.cs index 2744754..022394f 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOQualityLevel.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOQualityLevel.cs @@ -9,10 +9,14 @@ public struct EnumHBAOQualityLevel { [MetaMember("mVal")] public HBAOQualityLevel Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAOQualityLevel -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAOQualityLevel + { + Lowest = 0x0, + Low = 0x1, + Medium = 0x2, + High = 0x3, + Highest = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOResolution.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOResolution.cs index 110d341..ec08048 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOResolution.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHBAOResolution.cs @@ -9,10 +9,12 @@ public struct EnumHBAOResolution { [MetaMember("mVal")] public HBAOResolution Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HBAOResolution -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum HBAOResolution + { + Full = 0x0, + Half = 0x1, + Quarter = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHTextAlignmentType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHTextAlignmentType.cs index a33315b..2116c18 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHTextAlignmentType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumHTextAlignmentType.cs @@ -9,14 +9,13 @@ public struct EnumHTextAlignmentType { [MetaMember("mVal")] public HTextAlignmentType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum HTextAlignmentType -{ - // eHTextAlignment_ - None = 0, - LeftJustified = 1, - Centered = 2, - RightJustified = 3, + [MetaSerializer(typeof(EnumSerializer))] + public enum HTextAlignmentType + { + None = 0, + LeftJustified = 1, + Centered = 2, + RightJustified = 3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumLightCellBlendMode.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumLightCellBlendMode.cs index 8dce2b7..43078a5 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumLightCellBlendMode.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumLightCellBlendMode.cs @@ -9,10 +9,14 @@ public struct EnumLightCellBlendMode { [MetaMember("mVal")] public LightCellBlendMode Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum LightCellBlendMode -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum LightCellBlendMode + { + Normal = 0x0, + Dodge = 0x1, + Multiply = 0x2, + Screen = 0x3, + Overlay = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumMeshDebugRenderType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumMeshDebugRenderType.cs index dae2729..90d2126 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumMeshDebugRenderType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumMeshDebugRenderType.cs @@ -9,10 +9,11 @@ public struct EnumMeshDebugRenderType { [MetaMember("mVal")] public MeshDebugRenderType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum MeshDebugRenderType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum MeshDebugRenderType + { + eMeshRender_Solid = 1, + eMeshRender_Wireframe = 2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleAffectorType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleAffectorType.cs index 497bf57..a1082e1 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleAffectorType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleAffectorType.cs @@ -9,18 +9,17 @@ public struct EnumParticleAffectorType { [MetaMember("mVal")] public ParticleAffectorType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum ParticleAffectorType -{ - // eParticleAffectorType_ - Force = 1, - Attractor = 2, - KillPlane = 3, - KillBox = 4, - CollisionPlane = 5, - CollisionSphere = 6, - CollisionBox = 7, - CollisionCylinder = 8, + [MetaSerializer(typeof(EnumSerializer))] + public enum ParticleAffectorType + { + Force = 1, + Attractor = 2, + KillPlane = 3, + KillBox = 4, + CollisionPlane = 5, + CollisionSphere = 6, + CollisionBox = 7, + CollisionCylinder = 8 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleGeometryType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleGeometryType.cs index b1b0052..34e5dc5 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleGeometryType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleGeometryType.cs @@ -9,18 +9,15 @@ public struct EnumParticleGeometryType { [MetaMember("mVal")] public ParticleGeometryType Val { get; set; } -} - -[MetaSerializer(typeof(EnumSerializer))] -public enum ParticleGeometryType -{ - // eParticleGeometry_ - Sprite = 1, - Quad = 2, - Streak = 3, - Strip = 4, - StripFacing = 5, - None = 6 - // TODO: Verify if non is really number 6. I have a feeling it's 0. + [MetaSerializer(typeof(EnumSerializer))] + public enum ParticleGeometryType + { + Sprite = 1, + Quad = 2, + Streak = 3, + Strip = 4, + StripFacing = 5, + None = 6 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropDriver.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropDriver.cs index de0fbf7..581af8c 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropDriver.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropDriver.cs @@ -9,19 +9,18 @@ public struct EnumParticlePropDriver { [MetaMember("mVal")] public ParticlePropDriver Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum ParticlePropDriver -{ - // TODO: - ePartPropDriver_EmitterSpeed = 0x1, - ePartPropDriver_DistanceToTarget = 0x2, - ePartPropDriver_BurstTime = 0x3, - ePartPropDriver_CameraDot = 0x4, - ePartPropDriver_KeyControl01 = 0x5, - ePartPropDriver_KeyControl02 = 0x6, - ePartPropDriver_KeyControl03 = 0x7, - ePartPropDriver_KeyControl04 = 0x8, - ePartPropDriver_DistanceToCamera = 0x9, + [MetaSerializer(typeof(EnumSerializer))] + public enum ParticlePropDriver + { + EmitterSpeed = 0x1, + DistanceToTarget = 0x2, + BurstTime = 0x3, + CameraDot = 0x4, + KeyControl01 = 0x5, + KeyControl02 = 0x6, + KeyControl03 = 0x7, + KeyControl04 = 0x8, + DistanceToCamera = 0x9 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropModifier.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropModifier.cs index 2667826..f012308 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropModifier.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticlePropModifier.cs @@ -9,40 +9,40 @@ public struct EnumParticlePropModifier { [MetaMember("mVal")] public ParticlePropModifier Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum ParticlePropModifier -{ - // TODO: - ePartPropModifier_Constraint_Length = 0x0, - ePartPropModifier_Effect_Scale = 0x1, - ePartPropModifier_Geometry_Turbulence = 0x2, - ePartPropModifier_Global_Alpha = 0x3, - ePartPropModifier_Global_Acceleration = 0x4, - ePartPropModifier_Max_Particles = 0x5, - ePartPropModifier_PP_Scale = 0x6, - ePartPropModifier_PP_Lifespan = 0x7, - ePartPropModifier_PP_Rotation = 0x8, - ePartPropModifier_PP_RotationSpeed = 0x9, - ePartPropModifier_PP_Speed = 0xA, - ePartPropModifier_PP_Intensity = 0xB, - ePartPropModifier_Time_Scale = 0xC, - ePartPropModifier_Sprite_Animation_Rate = 0xD, - ePartPropModifier_Sprite_Animation_Cycles = 0xE, - ePartPropModifier_Spawn_Angle = 0xF, - ePartPropModifier_Spawn_Volume_Sweep = 0x10, - ePartPropModifier_Spawn_Volume_Sweep_Offset = 0x11, - ePartPropModifier_Target_Render_Lerp = 0x12, - ePartPropModifier_Velocity_Turbulence_Force = 0x13, - ePartPropModifier_Velocity_Turbulence_Speed = 0x14, - ePartPropModifier_Velocity_Timescale_Modifier = 0x15, - ePartPropModifier_KeyControl01 = 0x16, - ePartPropModifier_KeyControl02 = 0x17, - ePartPropModifier_KeyControl03 = 0x18, - ePartPropModifier_KeyControl04 = 0x19, - ePartPropModifier_PP_Alpha = 0x1A, - ePartPropModifier_Geometry_Scale = 0x1B, - ePartPropModifier_Enable = 0x1C, - ePartPropModifier_Count = 0x1D, + [MetaSerializer(typeof(EnumSerializer))] + public enum ParticlePropModifier + { + // TODO: Dynamic Flags + Constraint_Length = 0x0, + Effect_Scale = 0x1, + Geometry_Turbulence = 0x2, + Global_Alpha = 0x3, + Global_Acceleration = 0x4, + Max_Particles = 0x5, + PP_Scale = 0x6, + PP_Lifespan = 0x7, + PP_Rotation = 0x8, + PP_RotationSpeed = 0x9, + PP_Speed = 0xA, + PP_Intensity = 0xB, + Time_Scale = 0xC, + Sprite_Animation_Rate = 0xD, + Sprite_Animation_Cycles = 0xE, + Spawn_Angle = 0xF, + Spawn_Volume_Sweep = 0x10, + Spawn_Volume_Sweep_Offset = 0x11, + Target_Render_Lerp = 0x12, + Velocity_Turbulence_Force = 0x13, + Velocity_Turbulence_Speed = 0x14, + Velocity_Timescale_Modifier = 0x15, + KeyControl01 = 0x16, + KeyControl02 = 0x17, + KeyControl03 = 0x18, + KeyControl04 = 0x19, + PP_Alpha = 0x1A, + Geometry_Scale = 0x1B, + Enable = 0x1C, + Count = 0x1D + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleSortMode.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleSortMode.cs index b7d4a13..8048c37 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleSortMode.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumParticleSortMode.cs @@ -9,14 +9,13 @@ public struct EnumParticleSortMode { [MetaMember("mVal")] public ParticleSortMode Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum ParticleSortMode -{ - // eParticleSortMode_ - None = 0x1, - ByDistance = 0x2, - YoungestFirst = 0x3, - OldestFirst = 0x4, + [MetaSerializer(typeof(EnumSerializer))] + public enum ParticleSortMode + { + None = 0x1, + ByDistance = 0x2, + YoungestFirst = 0x3, + OldestFirst = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRecordingStatus.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRecordingStatus.cs new file mode 100644 index 0000000..95980ad --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRecordingStatus.cs @@ -0,0 +1,21 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous; + +[MetaSerializer(typeof(MetaClassSerializer))] +public struct EnumRecordingStatus +{ + [MetaMember("mVal")] + public RecordingStatus Val { get; set; } + + [MetaSerializer(typeof(EnumSerializer))] + public enum RecordingStatus + { + None = 0, + AtStudio = 1, + Recorded = 2, + Delivered = 3 + } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderAntialiasType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderAntialiasType.cs index 4d55ab7..199da42 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderAntialiasType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderAntialiasType.cs @@ -9,10 +9,19 @@ public struct EnumRenderAntialiasType { [MetaMember("mVal")] public RenderAntialiasType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum RenderAntialiasType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum RenderAntialiasType + { + None = 0x0, + FXAA = 0x1, + SMAA = 0x2, + MSAA_2x = 0x3, + MSAA_4x = 0x4, + MSAA_8x = 0x5, + TAA_MSAA_2x = 0x6, + TAA_MSAA_4x = 0x7, + TAA_MSAA_8x = 0x8, + TAA = 0x9 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderLightmapUVGenerationType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderLightmapUVGenerationType.cs index b87dcfb..9ad631b 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderLightmapUVGenerationType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderLightmapUVGenerationType.cs @@ -7,10 +7,15 @@ public struct EnumRenderLightmapUVGenerationType { [MetaMember("mVal")] public RenderLightmapUVGenerationType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum RenderLightmapUVGenerationType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum RenderLightmapUVGenerationType + { + Default = 0, + Auto = 1, + UV0 = 2, + UV1 = 3, + UV2 = 4, + UV3 = 5 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskTest.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskTest.cs index 1570518..631bd56 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskTest.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskTest.cs @@ -9,13 +9,12 @@ public struct EnumRenderMaskTest { [MetaMember("mVal")] public RenderMaskTest Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum RenderMaskTest -{ - // eRenderMaskTest_ - None = 0x1, - Set = 0x2, - Clear = 0x3, + [MetaSerializer(typeof(EnumSerializer))] + public enum RenderMaskTest + { + None = 0x1, + Set = 0x2, + Clear = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskWrite.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskWrite.cs index 52b6c93..20c165e 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskWrite.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderMaskWrite.cs @@ -9,13 +9,12 @@ public struct EnumRenderMaskWrite { [MetaMember("mVal")] public RenderMaskWrite Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum RenderMaskWrite -{ - // eRenderMaskWrite_ - None = 0x1, - Set = 0x2, - Clear = 0x3, + [MetaSerializer(typeof(EnumSerializer))] + public enum RenderMaskWrite + { + None = 0x1, + Set = 0x2, + Clear = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTAAJitterType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTAAJitterType.cs index ff2436c..ccaf7c6 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTAAJitterType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTAAJitterType.cs @@ -9,10 +9,13 @@ public struct EnumRenderTAAJitterType { [MetaMember("mVal")] public RenderTAAJitterType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum RenderTAAJitterType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum RenderTAAJitterType + { + None = 0x1, + Uniform2x = 0x2, + Hammersley4x = 0x3, + Hammersley8x = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTextureResolution.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTextureResolution.cs index 98f07a1..96b428e 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTextureResolution.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumRenderTextureResolution.cs @@ -9,10 +9,13 @@ public struct EnumRenderTextureResolution { [MetaMember("mVal")] public RenderTextureResolution Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum RenderTextureResolution -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum RenderTextureResolution + { + Small = 0x1, + Medium = 0x2, + Default = 0x3, + Ultra = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3DetailShadingType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3DetailShadingType.cs index a6e2aed..176eff9 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3DetailShadingType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3DetailShadingType.cs @@ -9,10 +9,16 @@ public struct EnumT3DetailShadingType { [MetaMember("mVal")] public T3DetailShadingType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3DetailShadingType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum T3DetailShadingType + { + No_Detail_Map = 0x0, + Old_Toon = 0x1, + Sharp_Detail = 0x2, + Packed_Detail_And_Tiled_Packed_Detail = 0x3, + Packed_Detail = 0x4, + Single_Channel_Detail = 0x5, + Animated_Detail = 0x6 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvBakeOnStatic.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvBakeOnStatic.cs index e704d8b..5488e98 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvBakeOnStatic.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvBakeOnStatic.cs @@ -9,10 +9,12 @@ public struct EnumT3LightEnvBakeOnStatic { [MetaMember("mVal")] public T3LightEnvBakeOnStatic Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvBakeOnStatic -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvBakeOnStatic + { + Default = 0x0, + AlwaysAllow = 0x1, + NeverAllow = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvEnlightenBakeBehavior.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvEnlightenBakeBehavior.cs index f0735fc..5c73f67 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvEnlightenBakeBehavior.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvEnlightenBakeBehavior.cs @@ -9,10 +9,12 @@ public struct EnumT3LightEnvEnlightenBakeBehavior { [MetaMember("mVal")] public T3LightEnvEnlightenBakeBehavior Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvEnlightenBakeBehavior -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvEnlightenBakeBehavior + { + Auto = 0x0, + Enable = 0x1, + Disable = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvGroup.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvGroup.cs index 3b57d79..f3d165e 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvGroup.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvGroup.cs @@ -9,33 +9,32 @@ public struct EnumT3LightEnvGroup { [MetaMember("mVal")] public T3LightEnvGroup Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvGroup -{ - // eLightEnvGroup_ - None = -2, - Default = -1, - Group0 = 0x0, - Group1 = 0x1, - Group2 = 0x2, - Group3 = 0x3, - Group4 = 0x4, - Group5 = 0x5, - Group6 = 0x6, - Group7 = 0x7, - CountWithNoAmbient = 0x8, - Group8_Unused = 0x8, - Group9_Unused = 0x9, - Group10_Unused = 0xA, - Group11_Unused = 0xB, - Group12_Unused = 0xC, - Group13_Unused = 0xD, - Group14_Unused = 0xE, - Group15_Unused = 0xF, - AmbientGroup0 = 0x10, - AmbientGroup1 = 0x11, - AmbientGroup2 = 0x12, - AmbientGroup3 = 0x13, + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvGroup + { + None = -2, + Default = -1, + Group0 = 0x0, + Group1 = 0x1, + Group2 = 0x2, + Group3 = 0x3, + Group4 = 0x4, + Group5 = 0x5, + Group6 = 0x6, + Group7 = 0x7, + CountWithNoAmbient = 0x8, + Group8_Unused = 0x8, + Group9_Unused = 0x9, + Group10_Unused = 0xA, + Group11_Unused = 0xB, + Group12_Unused = 0xC, + Group13_Unused = 0xD, + Group14_Unused = 0xE, + Group15_Unused = 0xF, + AmbientGroup0 = 0x10, + AmbientGroup1 = 0x11, + AmbientGroup2 = 0x12, + AmbientGroup3 = 0x13 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvLODBehavior.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvLODBehavior.cs index ae05293..f9d1441 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvLODBehavior.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvLODBehavior.cs @@ -9,12 +9,11 @@ public struct EnumT3LightEnvLodBehavior { [MetaMember("mVal")] public T3LightEnvLODBehavior Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvLODBehavior -{ - // eLightEnvLOD_ - Disable = 0x0, - BakeOnly = 0x1, + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvLODBehavior + { + Disable = 0x0, + BakeOnly = 0x1 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvMobility.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvMobility.cs index b3658f2..f4d6df5 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvMobility.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvMobility.cs @@ -9,13 +9,12 @@ public struct EnumT3LightEnvMobility { [MetaMember("mVal")] public T3LightEnvMobility Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvMobility -{ - // eLightEnvMobility_ - Static = 0, - Stationary = 1, - Moveable = 2, + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvMobility + { + Static = 0, + Stationary = 1, + Moveable = 2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowQuality.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowQuality.cs index bbbdb72..bef34f1 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowQuality.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowQuality.cs @@ -9,13 +9,12 @@ public struct EnumT3LightEnvShadowQuality { [MetaMember("mVal")] public T3LightEnvShadowQuality Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvShadowQuality -{ - // eLightEnvShadowQuality_ - Low = 0, - Medium = 1, - High = 2, + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvShadowQuality + { + Low = 0, + Medium = 1, + High = 2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowType.cs index 450c561..b70af48 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvShadowType.cs @@ -9,13 +9,12 @@ public struct EnumT3LightEnvShadowType { [MetaMember("mVal")] public T3LightEnvShadowType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvShadowType -{ - // eLightEnvShadowType_ - None = 0, - PerLight = 2, - Modulated = 3, + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvShadowType + { + None = 0, + PerLight = 2, + Modulated = 3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvType.cs index 55cc17a..84ad9a3 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3LightEnvType.cs @@ -9,15 +9,14 @@ public struct EnumT3LightEnvType { [MetaMember("mVal")] public T3LightEnvType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3LightEnvType -{ - // eLightEnvType_ - Point = 0x0, - Spot = 0x1, - DirectionalKey = 0x2, - Ambient = 0x3, - DirectionalAmbient = 0x4, + [MetaSerializer(typeof(EnumSerializer))] + public enum T3LightEnvType + { + Point = 0x0, + Spot = 0x1, + DirectionalKey = 0x2, + Ambient = 0x3, + DirectionalAmbient = 0x4 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialLODFullyRough.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialLODFullyRough.cs index 82768a7..aef43b7 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialLODFullyRough.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialLODFullyRough.cs @@ -9,10 +9,13 @@ public struct EnumT3MaterialLODFullyRough { [MetaMember("mVal")] public T3MaterialLODFullyRough Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3MaterialLODFullyRough -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum T3MaterialLODFullyRough + { + Never = 0x0, + OnLowestQuality = 0x1, + OnLowQuality = 0x2, + Always = 0x3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialSwizzleType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialSwizzleType.cs index c5e896c..188b7f3 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialSwizzleType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3MaterialSwizzleType.cs @@ -9,10 +9,18 @@ public struct EnumT3MaterialSwizzleType { [MetaMember("mVal")] public T3MaterialSwizzleType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3MaterialSwizzleType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum T3MaterialSwizzleType + { + None = 0x0, + X = 0x1, + Y = 0x2, + Z = 0x3, + W = 0x4, + Zero = 0x5, + One = 0x6, + FirstComponent = 0x1, + FirstNumeric = 0x5 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3NPRSpecularType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3NPRSpecularType.cs index e947d4b..41395d3 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3NPRSpecularType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumT3NPRSpecularType.cs @@ -9,10 +9,12 @@ public struct EnumT3NPRSpecularType { [MetaMember("mVal")] public T3NPRSpecularType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum T3NPRSpecularType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum T3NPRSpecularType + { + None = 0x0, + Isotropic = 0x1, + Anisotropic = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTextOrientationType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTextOrientationType.cs index 078ffd5..b37fc0e 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTextOrientationType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTextOrientationType.cs @@ -9,13 +9,12 @@ public struct EnumTextOrientationType { [MetaMember("mVal")] public TextOrientationType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum TextOrientationType -{ - // eTextOrientation_ - Screen = 0x0, - WorldZ = 0x1, - WorldXYZ = 0x2, + [MetaSerializer(typeof(EnumSerializer))] + public enum TextOrientationType + { + Screen = 0x0, + WorldZ = 0x1, + WorldXYZ = 0x2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTonemapType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTonemapType.cs index b6de33a..1ba9d1b 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTonemapType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumTonemapType.cs @@ -7,10 +7,11 @@ public struct EnumTonemapType { [MetaMember("mVal")] public TonemapType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum TonemapType -{ - // TODO: + [MetaSerializer(typeof(EnumSerializer))] + public enum TonemapType + { + Default = 1, + Filmic = 2 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumVTextAlignmentType.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumVTextAlignmentType.cs index e2ff586..ef05a51 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumVTextAlignmentType.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumVTextAlignmentType.cs @@ -9,14 +9,13 @@ public struct EnumVTextAlignmentType { [MetaMember("mVal")] public VTextAlignmentType Val { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum VTextAlignmentType -{ - // eVTextAlignment_ - None = 0, - Top = 1, - Middle = 2, - Bottom = 3, + [MetaSerializer(typeof(EnumSerializer))] + public enum VTextAlignmentType + { + None = 0, + Top = 1, + Middle = 2, + Bottom = 3 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/EnumeTangentModes.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumeTangentModes.cs new file mode 100644 index 0000000..9b5b76b --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/EnumeTangentModes.cs @@ -0,0 +1,22 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous; + +[MetaSerializer(typeof(MetaClassSerializer))] +public struct EnumeTangentModes +{ + [MetaMember("mVal")] + public TangentModes Val { get; set; } + + [MetaSerializer(typeof(EnumSerializer))] + public enum TangentModes + { + eTangentUnknown, + eTangentStepped, + eTangentKnot, + eTangentSmooth, + eTangentFlat + } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/FileNameBase.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/FileNameBase.cs index 4049a59..353b23a 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/FileNameBase.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/FileNameBase.cs @@ -8,7 +8,7 @@ namespace TelltaleToolKit.T3Types.Miscellaneous; public class FileNameBase { [MetaMember("mFileName")] - public Symbol FileName { get; set; } + public Symbol FileName { get; set; } = Symbol.Empty; } [MetaSerializer(typeof(FileName<>.Serializer), typeof(FileName<>))] @@ -21,17 +21,12 @@ public class Serializer : MetaSerializer> { private static readonly MetaClassSerializer> s_metaClassSerializer = new(); - public override void PreSerialize(ref FileName? obj, MetaStream stream, MetaClassType? type = null) - { - if (obj is null) - { - obj = new FileName(); - } - } + public override void PreSerialize(ref FileName? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new FileName(); - public override void Serialize(ref FileName obj, MetaStream stream) + public override void Serialize(ref FileName obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/PhysicsObject.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/PhysicsObject.cs new file mode 100644 index 0000000..cd52e96 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/PhysicsObject.cs @@ -0,0 +1,50 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class PhysicsObject +{ + [MetaSerializer(typeof(EnumSerializer))] + public enum PhysicsBoundingVolumeType + { + Cylinder = 0, + Box = 1, + Sphere = 2 + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum PhysicsCollisionType + { + InterAgent = 0, + Raycast = 1 + } + + [MetaMember("mbEnabledPropertyOn")] + public bool EnabledPropertyOn { get; set; } + + [MetaMember("mCollisionType")] + public PhysicsCollisionType CollisionType { get; set; } + + [MetaMember("mBoundingVolumeType")] + public PhysicsBoundingVolumeType BoundingVolumeType { get; set; } + + [MetaMember("mfBoundingVolumeScalingFactor")] + public float BoundingVolumeScalingFactor { get; set; } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumePhysicsBoundingVolumeType + { + [MetaMember("mVal")] + public PhysicsBoundingVolumeType Val { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumePhysicsCollisionType + { + [MetaMember("mVal")] + public PhysicsCollisionType Val { get; set; } + } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/ResourceKey.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/ResourceKey.cs new file mode 100644 index 0000000..2424eab --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/ResourceKey.cs @@ -0,0 +1,41 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous.PreloadPackage; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class ResourceKey +{ + [MetaMember("mResourceName")] + public Symbol ResourceName { get; set; } = Symbol.Empty; + + [MetaMember("mMetaClassDescriptionCrc")] + public ulong MetaClassDescriptionCrc { get; set; } + + //NEWER GAMES + [MetaMember("mRenderQualities")] + public BitSet RenderQualities { get; set; } = new(5); + + //EVEN NEWER GAMES + [MetaMember("mVisible")] + public bool Visible { get; set; } + + [MetaMember("mPrefix")] + public string Prefix { get; set; } = string.Empty; +} + +[MetaSerializer(typeof(EnumSerializer))] +public enum RenderQualityType +{ + Default = -2, + None = -1, + High = 0, + Mid = 1, + LowPlus = 2, + Mid2_Legacy = 2, + Low = 3, + Low_Legacy = 3, + Lowest = 4, + Count = 5 +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/ResourceSeenTimes.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/ResourceSeenTimes.cs new file mode 100644 index 0000000..8430718 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/ResourceSeenTimes.cs @@ -0,0 +1,18 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous.PreloadPackage; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class ResourceSeenTimes +{ + [MetaMember("mfEarliest")] + public float Earliest { get; set; } + + [MetaMember("mfLatest")] + public float Latest { get; set; } + + [MetaMember("mAdditionalScenes")] + public HashSet AdditionalScenes { get; set; } = []; +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/RuntimeDataDialog.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/RuntimeDataDialog.cs new file mode 100644 index 0000000..713c32d --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/RuntimeDataDialog.cs @@ -0,0 +1,46 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Dialogs.Dlg; + +namespace TelltaleToolKit.T3Types.Miscellaneous.PreloadPackage; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class RuntimeDataDialog +{ + [MetaMember("mDialogResourceVectors")] + public List DialogResourceVectors { get; set; } = []; + + [MetaMember("mStartNodeOffsets")] + public List StartNodeOffsets { get; set; } = []; + + [MetaSerializer(typeof(MetaClassSerializer))] + public class DialogResourceInfo + { + [MetaMember("mResourceSeenTimes")] + public ResourceSeenTimes ResourceSeenTimes { get; set; } = new(); + + [MetaMember("mResourceKey")] + public ResourceKey ResourceKey { get; set; } = new(); + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class DlgObjIdAndResourceVector + { + [MetaMember("mVector")] + public List Vector { get; set; } = []; + + [MetaMember("mID")] + public DlgObjId ID { get; set; } = new(); + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class DlgObjIdAndStartNodeOffset + { + [MetaMember("mOffset")] + public StartNodeOffset Offset { get; set; } = new(); + + [MetaMember("mID")] + public DlgObjId ID { get; set; } + } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/RuntimeDataScene.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/RuntimeDataScene.cs new file mode 100644 index 0000000..d845b13 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/RuntimeDataScene.cs @@ -0,0 +1,12 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Miscellaneous.PreloadPackage; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class RuntimeDataScene +{ + [MetaMember("mResources")] + public List Resources { get; set; } = []; +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/StartNodeOffset.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/StartNodeOffset.cs new file mode 100644 index 0000000..ea50130 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/PreloadPackage/StartNodeOffset.cs @@ -0,0 +1,19 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Dialogs.Dlg; + +namespace TelltaleToolKit.T3Types.Miscellaneous.PreloadPackage; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class StartNodeOffset +{ + [MetaMember("mStartNodeChain")] + public DlgObjId StartNodeChain { get; set; } = new(); + + [MetaMember("fStartTimeSeconds")] + public float StartTimeSeconds { get; set; } + + [MetaMember("mfMinDurationToPreload")] + public float MinDurationToPreload { get; set; } +} diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/SoundEventName.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/SoundEventName.cs index 1bc2159..f8e1814 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/SoundEventName.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/SoundEventName.cs @@ -7,64 +7,47 @@ namespace TelltaleToolKit.T3Types.Miscellaneous; [MetaSerializer(typeof(MetaClassSerializer))] public class SoundEventNameBase { - [MetaMember("mEventGuid")] - public Symbol EventGuid { get; set; } - - - [MetaMember("mEventDisplayName")] - public Symbol EventDisplayName { get; set; } - public enum NameType { Default = 0, Snapshot = 1, Dialog = 2 } -} -[MetaSerializer(typeof(Serializer))] + [MetaMember("mEventGuid")] + public Symbol EventGuid { get; set; } + + + [MetaMember("mEventDisplayName")] + public Symbol EventDisplayName { get; set; } +} -public class SoundEventName +// Small hack +// In C++ this is a compile-time type from an enum. +// In C# that is not possible - so we create the fixed classes. +[MetaSerializer(typeof(MetaClassSerializer))] +public class SoundEventName0 { [MetaMember("Baseclass_SoundEventNameBase")] public SoundEventNameBase BaseclassSoundEventNameBase { get; set; } = new(); - public SoundEventNameBase.NameType Type { get; set; } - - public SoundEventName(SoundEventNameBase.NameType type) - { - Type = type; - } - - public SoundEventName() - { - Type = SoundEventNameBase.NameType.Default; - } + public static SoundEventNameBase.NameType Type => SoundEventNameBase.NameType.Default; +} - public class Serializer : MetaSerializer - { - private static readonly MetaClassSerializer s_metaClassSerializer = new(); +[MetaSerializer(typeof(MetaClassSerializer))] +public class SoundEventName1 +{ + [MetaMember("Baseclass_SoundEventNameBase")] + public SoundEventNameBase BaseclassSoundEventNameBase { get; set; } = new(); - public override void PreSerialize(ref SoundEventName? obj, MetaStream stream, MetaClassType? type = null) - { - if (type is null) - { - throw new NullReferenceException($"{nameof(SoundEventName)} cannot be null."); - } + public static SoundEventNameBase.NameType Type => SoundEventNameBase.NameType.Snapshot; +} - obj = type.Symbol.DebugString switch - { - "SoundEventName<0>" => new SoundEventName(SoundEventNameBase.NameType.Default), - "SoundEventName<1>" => new SoundEventName(SoundEventNameBase.NameType.Snapshot), - "SoundEventName<2>" => new SoundEventName(SoundEventNameBase.NameType.Dialog), - _ => obj - }; - } +[MetaSerializer(typeof(MetaClassSerializer))] +public class SoundEventName2 +{ + [MetaMember("Baseclass_SoundEventNameBase")] + public SoundEventNameBase BaseclassSoundEventNameBase { get; set; } = new(); - public override void Serialize(ref SoundEventName obj, MetaStream stream) - { - s_metaClassSerializer.PreSerialize(ref obj, stream); - s_metaClassSerializer.Serialize(ref obj, stream); - } - } + public static SoundEventNameBase.NameType Type => SoundEventNameBase.NameType.Dialog; } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvInternalData.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvInternalData.cs index ec5893f..f0bcf06 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvInternalData.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvInternalData.cs @@ -8,16 +8,16 @@ namespace TelltaleToolKit.T3Types.Miscellaneous; public class T3LightEnvInternalData { [MetaMember("mEntryForQuality[0]")] - public QualityEntry EntryForQuality0 { get; set; } + public QualityEntry EntryForQuality0 { get; set; } = new(); [MetaMember("mEntryForQuality[1]")] - public QualityEntry EntryForQuality1 { get; set; } + public QualityEntry EntryForQuality1 { get; set; } = new(); [MetaMember("mEntryForQuality[2]")] - public QualityEntry EntryForQuality2 { get; set; } + public QualityEntry EntryForQuality2 { get; set; } = new(); [MetaMember("mEntryForQuality[3]")] - public QualityEntry EntryForQuality3 { get; set; } + public QualityEntry EntryForQuality3 { get; set; } = new(); [MetaMember("mStationaryLightIndex")] public int StationaryLightIndex { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvLOD.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvLOD.cs index 4f59676..63f4012 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvLOD.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightEnvLOD.cs @@ -9,13 +9,14 @@ public struct T3LightEnvLOD { [MetaMember("mFlags")] public Flags Flags { get; set; } -} -// TODO: -[Flags] -public enum T3LightEnvLODFlags { - // eLOD - High = 0x10000, - Medium = 0x20000, - Low = 0x40000, + // TODO: + [Flags] + public enum T3LightEnvLODFlags + { + // eLOD + High = 0x10000, + Medium = 0x20000, + Low = 0x40000 + } } diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightProbeInternalData.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightProbeInternalData.cs index 47bf785..712ed26 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightProbeInternalData.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/T3LightProbeInternalData.cs @@ -9,16 +9,16 @@ namespace TelltaleToolKit.T3Types.Miscellaneous; public class T3LightProbeInternalData { [MetaMember("mEntryForQuality[0]")] - public QualityEntry EntryForQuality0 { get; set; } + public QualityEntry EntryForQuality0 { get; set; } = new(); [MetaMember("mEntryForQuality[1]")] - public QualityEntry EntryForQuality1 { get; set; } + public QualityEntry EntryForQuality1 { get; set; } = new(); [MetaMember("mEntryForQuality[2]")] - public QualityEntry EntryForQuality2 { get; set; } + public QualityEntry EntryForQuality2 { get; set; } = new(); [MetaMember("mEntryForQuality[3]")] - public QualityEntry EntryForQuality3 { get; set; } + public QualityEntry EntryForQuality3 { get; set; } = new(); [MetaSerializer(typeof(MetaClassSerializer))] public class QualityEntry diff --git a/src/TelltaleToolKit/T3Types/Miscellaneous/ZTestFunction.cs b/src/TelltaleToolKit/T3Types/Miscellaneous/ZTestFunction.cs index 5911ccb..4e43f84 100644 --- a/src/TelltaleToolKit/T3Types/Miscellaneous/ZTestFunction.cs +++ b/src/TelltaleToolKit/T3Types/Miscellaneous/ZTestFunction.cs @@ -10,17 +10,17 @@ public struct ZTestFunction [MetaMember("mZTestType")] public FuncTypes ZTestType { get; set; } -} -[MetaSerializer(typeof(EnumSerializer))] -public enum FuncTypes -{ - Never = 0x1, - Less = 0x2, - Equal = 0x3, - LessEqual = 0x4, - Greater = 0x5, - NotEqual = 0x6, - GreaterEqual = 0x7, - Always = 0x8, + [MetaSerializer(typeof(EnumSerializer))] + public enum FuncTypes + { + Never = 0x1, + Less = 0x2, + Equal = 0x3, + LessEqual = 0x4, + Greater = 0x5, + NotEqual = 0x6, + GreaterEqual = 0x7, + Always = 0x8 + } } diff --git a/src/TelltaleToolKit/T3Types/Movie.cs b/src/TelltaleToolKit/T3Types/Movie.cs index 1be62fb..4a61ee5 100644 --- a/src/TelltaleToolKit/T3Types/Movie.cs +++ b/src/TelltaleToolKit/T3Types/Movie.cs @@ -7,19 +7,26 @@ namespace TelltaleToolKit.T3Types; [MetaSerializer(typeof(MetaClassSerializer))] public class MovieCaptureInfo { + [MetaSerializer(typeof(EnumSerializer))] + public enum CompressorType + { + IV50 = 5, + MSVC = 4, + IV32 = 3, + CVID = 2, + Uncompressed = 1 + } + [MetaMember("mFPS")] public int Fps { get; set; } [MetaMember("mCType")] public EnumCompressorType CType { get; set; } = new(); - [MetaSerializer(typeof(MetaClassSerializer))] public struct EnumCompressorType { [MetaMember("mVal")] public CompressorType Val { get; set; } } - [MetaSerializer(typeof(EnumSerializer))] - public enum CompressorType{} } diff --git a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayData.cs b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayData.cs index 0f7214c..4558c63 100644 --- a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayData.cs +++ b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayData.cs @@ -5,7 +5,7 @@ namespace TelltaleToolKit.T3Types.Overlays; /// -/// Main class for .overlay files. +/// Main class for .overlay files. /// [MetaSerializer(typeof(MetaClassSerializer))] public class T3OverlayData diff --git a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Sprite.cs b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Sprite.cs index 62dbe8b..d3621af 100644 --- a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Sprite.cs +++ b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Sprite.cs @@ -8,8 +8,8 @@ namespace TelltaleToolKit.T3Types.Overlays; public class T3OverlayObjectDataSprite { [MetaMember("mName")] - public Symbol Name { get; set; } + public Symbol Name { get; set; } = Symbol.Empty; [MetaMember("mParams")] - public T3OverlaySpriteParams Parameters { get; set; } + public T3OverlaySpriteParams Parameters { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Text.cs b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Text.cs index d6fd7ea..d4b53ea 100644 --- a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Text.cs +++ b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayObjectData_Text.cs @@ -8,7 +8,7 @@ namespace TelltaleToolKit.T3Types.Overlays; public class T3OverlayObjectDataText { [MetaMember("mName")] - public Symbol Name { get; set; } + public Symbol Name { get; set; } = Symbol.Empty; [MetaMember("mParams")] public T3OverlayTextParams Parameters { get; set; } = new(); diff --git a/src/TelltaleToolKit/T3Types/Overlays/T3OverlaySpriteParams.cs b/src/TelltaleToolKit/T3Types/Overlays/T3OverlaySpriteParams.cs index 81cd1e8..849d034 100644 --- a/src/TelltaleToolKit/T3Types/Overlays/T3OverlaySpriteParams.cs +++ b/src/TelltaleToolKit/T3Types/Overlays/T3OverlaySpriteParams.cs @@ -2,6 +2,7 @@ using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Particles; namespace TelltaleToolKit.T3Types.Overlays; @@ -9,7 +10,7 @@ namespace TelltaleToolKit.T3Types.Overlays; public class T3OverlaySpriteParams { [MetaMember("mhSprite")] - public Handle Sprite { get; set; } + public Handle Sprite { get; set; } = new(); [MetaMember("mInitialPosition")] public Vector2 InitialPosition { get; set; } @@ -18,7 +19,7 @@ public class T3OverlaySpriteParams public Vector2 Size { get; set; } [MetaMember("mAnimation")] - public Symbol Animation { get; set; } + public Symbol Animation { get; set; } = Symbol.Empty; [MetaMember("mAnimationSpeed")] public float AnimationSpeed { get; set; } diff --git a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayTextParams.cs b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayTextParams.cs index 161f91d..7e4af0a 100644 --- a/src/TelltaleToolKit/T3Types/Overlays/T3OverlayTextParams.cs +++ b/src/TelltaleToolKit/T3Types/Overlays/T3OverlayTextParams.cs @@ -17,7 +17,7 @@ public class T3OverlayTextParams public Handle Dlg { get; set; } = new(); [MetaMember("mDlgNodeName")] - public Symbol DlgNodeName { get; set; } + public Symbol DlgNodeName { get; set; } = Symbol.Empty; [MetaMember("mText")] public string Text { get; set; } = string.Empty; diff --git a/src/TelltaleToolKit/T3Types/Particles/ParticleProperties.cs b/src/TelltaleToolKit/T3Types/Particles/ParticleProperties.cs new file mode 100644 index 0000000..e08448b --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Particles/ParticleProperties.cs @@ -0,0 +1,180 @@ +using System.Numerics; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Chores; +using TelltaleToolKit.T3Types.Textures; + +namespace TelltaleToolKit.T3Types.Particles; + +[MetaSerializer(typeof(Serializer))] +public class ParticleProperties +{ + [Flags] + public enum AnimationDataFlags + { + Chore = 1, //Animation::mpChore must not be null! + Samples = 2 //Animation::mpSamples must not be null! + } + + [MetaMember("mName")] + public string Name { get; set; } = string.Empty; + + [MetaMember("mTextureFlags")] + public Flags TextureFlags { get; set; } + + [MetaMember("mTextureCount")] + public int TextureCount { get; set; } + + [MetaMember("mAnimations")] + public List Animations { get; set; } = []; + + public T3Texture[] Texture { get; set; } = new T3Texture[4]; + + [MetaSerializer(typeof(MetaClassSerializer))] + public class Animation + { + [MetaMember("mName")] + public Symbol Name { get; set; } = Symbol.Empty; + + [MetaMember("mParams")] + public AnimationParams Params { get; set; } = new(); + + [MetaMember("mDataFlags")] + public Flags DataFlags { get; set; } + + public Chore? Chore { get; set; } + public ParticlePropertySamples Samples { get; set; } = new(); + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class AnimationParams + { + [MetaMember("mPositionMin")] + public Vector3 PositionMin { get; set; } + + [MetaMember("mPositionMax")] + public Vector3 PositionMax { get; set; } + } + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void PreSerialize(ref ParticleProperties? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new ParticleProperties(); + + public override void Serialize(ref ParticleProperties obj, MetaStream stream, MetaClassType? type = null) + { + int enumCount = Enum.GetValues(typeof(ParticlePropertiesTexture)).Length; + + if (stream.Mode is MetaStreamMode.Write) + { + obj.TextureCount = 0; + obj.TextureFlags &= 0xF; + + for (int i = 0; i < enumCount; i++) + { + if (obj.Texture[i] is not null) + { + obj.TextureFlags |= 1 << i; + } + else + { + obj.TextureFlags &= ~(1 << i); + } + + if ((obj.TextureFlags.Data & (1 << i)) != 0) + { + obj.TextureCount++; + } + } + } + + s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + foreach (Animation animation in obj.Animations) + { + if (animation.DataFlags.Has((int)AnimationDataFlags.Chore)) + { + // Chore must exist - serialize it + Chore? animationChore = animation.Chore; + if (animationChore == null) + { + throw new InvalidOperationException( + $"Animation '{animation.Name}' has Chore flag but Chore is null"); + } + + stream.Serialize(ref animationChore); + } + else if (animation.DataFlags.Has((int)AnimationDataFlags.Samples)) + { + // Samples must exist - serialize it + ParticlePropertySamples particlePropertySamples = animation.Samples; + stream.Serialize(ref particlePropertySamples); + } + } + + // WRITE: Textures based on flags + if (obj.TextureCount <= 0) + { + return; + } + + for (int i = 0; i < enumCount; i++) + { + if ((obj.TextureFlags & (1 << i)) != 0) + { + T3Texture? texture = obj.Texture[i]; + if (texture == null) + { + throw new InvalidOperationException( + $"Texture at index {i} is marked as present but is null"); + } + + stream.Serialize(ref texture); + } + } + } + else + { + foreach (Animation animation in obj.Animations) + { + if (animation.DataFlags.Has((int)AnimationDataFlags.Chore)) + { + Chore chore = new(); + stream.Serialize(ref chore); + animation.Chore = chore; + } + else if (animation.DataFlags.Has((int)AnimationDataFlags.Samples)) + { + ParticlePropertySamples samples = new(); + stream.Serialize(ref samples); + animation.Samples = samples; + } + } + + for (int i = 0; i < obj.TextureCount; i++) + { + if ((obj.TextureFlags & (1 << i)) != 0) + { + T3Texture texture = new(); + stream.Serialize(ref texture); + obj.Texture[i] = texture; + } + } + } + } + } +} + +public enum ParticlePropertiesTexture +{ + Position = 0, + Orientation = 1, + Color = 2, + Rotation3D = 3 +} diff --git a/src/TelltaleToolKit/T3Types/Particles/ParticlePropertySamples.cs b/src/TelltaleToolKit/T3Types/Particles/ParticlePropertySamples.cs new file mode 100644 index 0000000..7055c1e --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Particles/ParticlePropertySamples.cs @@ -0,0 +1,68 @@ +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Particles; + +[MetaSerializer(typeof(Serializer))] +public class ParticlePropertySamples +{ + [MetaMember("mSampleCount")] + public int SampleCount { get; set; } + + public List Samples { get; set; } = []; + + [StructLayout(LayoutKind.Sequential)] + public struct Sample + { + public Vector4 Position; + public Vector4 Orientation; + public Vector4 Color; + } + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void PreSerialize(ref ParticlePropertySamples? obj, MetaStream stream, + MetaClassType? type = null) => + obj ??= new ParticlePropertySamples(); + + public override void Serialize(ref ParticlePropertySamples obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSerializer.PreSerialize(ref obj!, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + int sampleCount = obj.SampleCount; + + if (stream.Mode is MetaStreamMode.Write) + { + if (sampleCount == 0) + { + return; + } + + Sample[] samplesArray = obj.Samples.ToArray(); + Span rawBytes = MemoryMarshal.AsBytes(samplesArray.AsSpan()); + stream.WriteBytes(rawBytes); + } + else + { + if (sampleCount == 0) + { + obj.Samples = []; + return; + } + + int byteCount = sampleCount * Unsafe.SizeOf(); + byte[] rawBytes = new byte[byteCount]; + stream.ReadBytes(rawBytes); + Span samplesSpan = MemoryMarshal.Cast(rawBytes.AsSpan()); + obj.Samples = new List(samplesSpan.ToArray()); + } + } + } +} diff --git a/src/TelltaleToolKit/T3Types/Particles/ParticleSprite.cs b/src/TelltaleToolKit/T3Types/Particles/ParticleSprite.cs new file mode 100644 index 0000000..f06516d --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Particles/ParticleSprite.cs @@ -0,0 +1,46 @@ +using System.Numerics; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Meshes.T3Types; +using TelltaleToolKit.T3Types.Textures; + +namespace TelltaleToolKit.T3Types.Particles; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class ParticleSprite +{ + [MetaMember("mName")] + public string Name { get; set; } = string.Empty; + + [MetaMember("mhTexture")] + public Handle[] Texture { get; set; } = []; + + [MetaMember("mTextureX")] + public int TextureX { get; set; } + + [MetaMember("mTextureY")] + public int TextureY { get; set; } + + [MetaMember("mSpriteSize")] + public Vector2 SpriteSize { get; set; } + + [MetaMember("mBlendMode")] + public BlendMode BlendMode { get; set; } + + [MetaMember("mAnimations")] + public List Animations { get; set; } = []; + + [MetaSerializer(typeof(MetaClassSerializer))] + public class Animation + { + [MetaMember("mName")] + public Symbol Name { get; set; } = Symbol.Empty; + + [MetaMember("mStartFrame")] + public int StartFrame { get; set; } + + [MetaMember("mFrameCount")] + public int FrameCount { get; set; } + } +} diff --git a/src/TelltaleToolKit/T3Types/Particles/PhysicsData.cs b/src/TelltaleToolKit/T3Types/Particles/PhysicsData.cs new file mode 100644 index 0000000..ddd4af4 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Particles/PhysicsData.cs @@ -0,0 +1,13 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Particles; + +// .t3bullet +[MetaSerializer(typeof(MetaClassSerializer))] +public class PhysicsData +{ + [MetaMember("mDataBuffer")] + public BinaryBuffer DataBuffer { get; set; } = new(); +} diff --git a/src/TelltaleToolKit/T3Types/Properties/PropertySet.cs b/src/TelltaleToolKit/T3Types/Properties/PropertySet.cs index 98a5c98..33f105c 100644 --- a/src/TelltaleToolKit/T3Types/Properties/PropertySet.cs +++ b/src/TelltaleToolKit/T3Types/Properties/PropertySet.cs @@ -47,13 +47,20 @@ public override void PreSerialize(ref PropertySet? obj, MetaStream stream, MetaC } } - public override void Serialize(ref PropertySet obj, MetaStream stream) + public override void Serialize(ref PropertySet obj, MetaStream stream, MetaClassType? type = null) { s_metaClassSerializer.PreSerialize(ref obj, stream); s_metaClassSerializer.Serialize(ref obj, stream); stream.BeginBlock(); + // Attempt 1 + if (obj.PropertyFlags.Has(0x4000000)) + { + stream.EndBlock(); + return; + } + if (stream.Mode is MetaStreamMode.Write) { // Write ParentList when PropVersion > 0 @@ -102,7 +109,8 @@ public override void Serialize(ref PropertySet obj, MetaStream stream) groups[typeSymbol] = list; } - list.Add(new KeyValuePair(key, new PropertyEntry(entry.Value, typeSymbol))); + list.Add(new KeyValuePair(key, + new PropertyEntry(entry.Value, typeSymbol))); } // Write number of distinct meta types @@ -157,7 +165,8 @@ public override void Serialize(ref PropertySet obj, MetaStream stream) } } - if (obj.PropVersion == 1 && !stream.GetMetaClass(typeof(PropertySet))!.ContainsMember("mParentList")) + if (obj.PropVersion == 1 && + !stream.GetMetaClass(typeof(PropertySet))!.ContainsMember("mParentList")) { stream.EndBlock(); stream.BeginBlock(); @@ -168,6 +177,8 @@ public override void Serialize(ref PropertySet obj, MetaStream stream) { // The type of the class MetaClassType? typeSymbol = stream.ReadMetaClassType(); + if (typeSymbol?.Symbol.Crc64 == 0) + continue; // The number of times that type has been serialized int numOfType = stream.ReadInt32(); @@ -184,7 +195,7 @@ public override void Serialize(ref PropertySet obj, MetaStream stream) object? propertyValue = null; typeSerializer.PreSerialize(ref propertyValue, stream, typeSymbol); - typeSerializer.Serialize(ref propertyValue, stream); + typeSerializer.Serialize(ref propertyValue, stream, typeSymbol); obj.Properties[propertyKey] = new PropertyEntry(propertyValue, typeSymbol); } } @@ -251,4 +262,8 @@ public void EmbedParentProperties() { return GetProperty(symbol.Crc64); } + + internal class KeyInfo + { + } } diff --git a/src/TelltaleToolKit/T3Types/Properties/ToolProps.cs b/src/TelltaleToolKit/T3Types/Properties/ToolProps.cs index 9f96af8..59a58c0 100644 --- a/src/TelltaleToolKit/T3Types/Properties/ToolProps.cs +++ b/src/TelltaleToolKit/T3Types/Properties/ToolProps.cs @@ -9,17 +9,16 @@ public class ToolProps [MetaMember("mbHasProps")] public bool HasProps { get; set; } + public PropertySet Properties { get; set; } = new(); + public class Serializer : MetaSerializer { public override void PreSerialize(ref ToolProps? obj, MetaStream stream, MetaClassType? type = null) { - if (obj is null) - { - obj = new ToolProps(); - } + obj ??= new ToolProps(); } - public override void Serialize(ref ToolProps obj, MetaStream stream) + public override void Serialize(ref ToolProps obj, MetaStream stream, MetaClassType? type = null) { if (stream.Mode is MetaStreamMode.Write) { @@ -27,16 +26,16 @@ public override void Serialize(ref ToolProps obj, MetaStream stream) obj.HasProps = false; stream.Write(obj.HasProps); } - else if (stream.Mode is MetaStreamMode.Read) + else { obj.HasProps = stream.ReadBoolean(); if (!obj.HasProps) return; - var runtimeProperties = new PropertySet(); - Toolkit.Instance.GetSerializer().Serialize(ref runtimeProperties, stream); - throw new InvalidDataException("This type has tool properties. Please report this to the author!"); + var properties = new PropertySet(); + stream.Serialize(ref properties); + obj.Properties = properties; } } } diff --git a/src/TelltaleToolKit/T3Types/Rules/LogicGroup.cs b/src/TelltaleToolKit/T3Types/Rules/LogicGroup.cs index 60693a7..5b54e60 100644 --- a/src/TelltaleToolKit/T3Types/Rules/LogicGroup.cs +++ b/src/TelltaleToolKit/T3Types/Rules/LogicGroup.cs @@ -36,15 +36,20 @@ public class LogicItem public string Name { get; set; } = string.Empty; [MetaMember("mKeyNegateList")] - public Dictionary GroupOperator { get; set; } = new(); // also a string/symbol + public Dictionary GroupOperatorS { get; set; } = new(); + + // also a string/symbol + + [MetaMember("mKeyNegateList")] + public Dictionary GroupOperator { get; set; } = new(); [MetaMember("mKeyComparisonList")] - public Dictionary KeyComparisonList { get; set; } = new(); // also a string/symbol + public Dictionary KeyComparisonList { get; set; } = new(); [MetaMember("mKeyActionList")] - public Dictionary KeyActionList { get; set; } = new(); // also a string/symbol + public Dictionary KeyActionList { get; set; } = new(); [MetaMember("mReferenceKeyList")] - public List ReferenceKeyList { get; set; } = []; // also a string/symbol + public List ReferenceKeyList { get; set; } = []; } } diff --git a/src/TelltaleToolKit/T3Types/Rules/Rule.cs b/src/TelltaleToolKit/T3Types/Rules/Rule.cs index c338ba7..f449029 100644 --- a/src/TelltaleToolKit/T3Types/Rules/Rule.cs +++ b/src/TelltaleToolKit/T3Types/Rules/Rule.cs @@ -57,17 +57,12 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void PreSerialize(ref Rule? obj, MetaStream stream, MetaClassType? type = null) - { - if (obj is null) - { - obj = new Rule(); - } - } + public override void PreSerialize(ref Rule? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new Rule(); - public override void Serialize(ref Rule obj, MetaStream stream) + public override void Serialize(ref Rule obj, MetaStream stream, MetaClassType? type = null) { - PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); if (!obj.VersionHasAgents) @@ -75,28 +70,32 @@ public override void Serialize(ref Rule obj, MetaStream stream) return; } + if (!stream.GetMetaClass(typeof(Rule))!.ContainsMember("mbVersionHasAgents")) + return; + stream.BeginBlock(); if (stream.Mode is MetaStreamMode.Write) { + stream.Write(obj.AgentInformation.Count); + + foreach (var agentInfo in obj.AgentInformation) + { + AgentInfo info = agentInfo; + stream.Serialize(ref info); + } } - else if (stream.Mode is MetaStreamMode.Read) + else { - // var numAgents = stream.ReadInt32(); - - List agents = obj.AgentInformation; - Toolkit.Instance.GetSerializer>().Serialize(ref agents, stream); - - // for (int i = 0; i < numAgents; i++) - // { - // var agent = new Rule.AgentInfo(); - // MetaClass? ruleDesc = stream.GetMetaClass(typeof(Rule)); - // - // - // } - // - // - // - // obj.RuleMap = rulesDic; + int numAgents = stream.ReadInt32(); + + obj.AgentInformation = []; + obj.AgentInformation.Capacity = numAgents; + for (int i = 0; i < numAgents; i++) + { + var agent = new AgentInfo(); + stream.Serialize(ref agent); + obj.AgentInformation.Add(agent); + } } stream.EndBlock(); diff --git a/src/TelltaleToolKit/T3Types/Rules/Rules.cs b/src/TelltaleToolKit/T3Types/Rules/Rules.cs index 4fa15dd..ae8570a 100644 --- a/src/TelltaleToolKit/T3Types/Rules/Rules.cs +++ b/src/TelltaleToolKit/T3Types/Rules/Rules.cs @@ -14,42 +14,55 @@ public class Rules [MetaMember("mhLogicProps")] public Handle LogicProps { get; set; } = new(); - public HashSet RulesSet { get; set; } = []; - [MetaMember("mRuleMap")] - public Dictionary RuleMap { get; set; } = new(); + public Dictionary RuleMap { get; set; } = []; public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref Rules obj, MetaStream stream) + public override void PreSerialize(ref Rules? obj, MetaStream stream, MetaClassType? type = null) => + obj ??= new Rules(); + + public override void Serialize(ref Rules obj, MetaStream stream, MetaClassType? type = null) { - PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); + stream.BeginBlock(); if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException(); - } - - if (stream.Mode is MetaStreamMode.Read) - { - HashSet rulesSet = obj.RulesSet; + stream.Write(obj.RuleMap.Count); - stream.Serialize(ref rulesSet); + foreach (string ruleName in obj.RuleMap.Keys) + { + stream.Write(ruleName); + } - //// + foreach (Rule? ruleValue in obj.RuleMap.Values) + { + Rule rule = ruleValue; + stream.Serialize(ref rule); + } + } + else + { + obj.RuleMap.Clear(); + int numRules = stream.ReadInt32(); - obj.RuleMap = new Dictionary(); + List keys = new(numRules); + for (int i = 0; i < numRules; i++) + { + string ruleName = stream.ReadString(); + keys.Add(ruleName); + } - foreach (string t in obj.RulesSet) + for (int i = 0; i < numRules; i++) { - var rule = new Rule(); + Rule rule = new(); stream.Serialize(ref rule); - - obj.RuleMap.Add(t, rule); + obj.RuleMap[keys[i]] = rule; } } diff --git a/src/TelltaleToolKit/T3Types/Scenes/MeshSceneEnlightenData.cs b/src/TelltaleToolKit/T3Types/Scenes/MeshSceneEnlightenData.cs index 3167733..4da4078 100644 --- a/src/TelltaleToolKit/T3Types/Scenes/MeshSceneEnlightenData.cs +++ b/src/TelltaleToolKit/T3Types/Scenes/MeshSceneEnlightenData.cs @@ -9,11 +9,11 @@ namespace TelltaleToolKit.T3Types.Scenes; public class MeshSceneEnlightenData { [MetaMember("mSystemName")] - public Symbol SystemName { get; set; } + public Symbol SystemName { get; set; } = Symbol.Empty; [MetaMember("mUVTransform")] - public Vector4 UVTransform { get; set; } + public Vector4 UvTransform { get; set; } [MetaMember("mFlags")] - public Flags Flags { get; set; } + public Flags Flags { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Scenes/Scene.cs b/src/TelltaleToolKit/T3Types/Scenes/Scene.cs index 3c93816..1014b15 100644 --- a/src/TelltaleToolKit/T3Types/Scenes/Scene.cs +++ b/src/TelltaleToolKit/T3Types/Scenes/Scene.cs @@ -2,6 +2,7 @@ using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Mathematics; using TelltaleToolKit.T3Types.Properties; namespace TelltaleToolKit.T3Types.Scenes; @@ -12,9 +13,54 @@ public class Scene [MetaMember("mbHidden")] public bool Hidden { get; set; } + [MetaMember("mbAfterEffectEnabled")] + public bool AfterEffectEnabled { get; set; } + + [MetaMember("mb2DShadowEnabled")] + public bool _2DShadowEnabled { get; set; } + + [MetaMember("m2DShadowSize")] + public float _2DShadowSize { get; set; } + + [MetaMember("m2DShadowCIntensity")] + public float m2DShadowCIntensity { get; set; } + + [MetaMember("m2DShadowBIntensity")] + public float m2DShadowBIntensity { get; set; } + + [MetaMember("m2DShadowZMin")] + public float m2DShadowZMin { get; set; } + + [MetaMember("m2DShadowZMax")] + public float m2DShadowZMax { get; set; } + + [MetaMember("mFXColorActive")] + public bool FXColorActive { get; set; } + + [MetaMember("mFXColor")] + public Color FXColor { get; set; } = new(); + + [MetaMember("mFXColorOpacity")] + public float FXColorOpacity { get; set; } + + [MetaMember("mFXLevelsActive")] + public bool mFXLevelsActive { get; set; } + + [MetaMember("mFXLevelsBlack")] + public float FXLevelsBlack { get; set; } + + [MetaMember("mFXLevelsWhite")] + public float FXLevelsWhite { get; set; } + + [MetaMember("mFXLevelsIntensity")] + public float FXLevelsIntensity { get; set; } + [MetaMember("mName")] public string Name { get; set; } = string.Empty; + [MetaMember("mGlowClearColor")] + public Color GlowClearColor { get; set; } = new(); + [MetaMember("mReferencedScenes")] public List> ReferencedScenes { get; set; } = []; @@ -24,16 +70,22 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSceneSerializer = new(); - public override void Serialize(ref Scene obj, MetaStream stream) + public override void Serialize(ref Scene obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSceneSerializer.PreSerialize(ref obj, stream); + s_metaClassSceneSerializer.PreSerialize(ref obj!, stream); s_metaClassSceneSerializer.Serialize(ref obj, stream); stream.BeginBlock(); if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException(); + stream.Write(obj.Agents.Count); + + foreach (AgentInfo? agent in obj.Agents) + { + AgentInfo agentInfo = agent; + stream.Serialize(ref agentInfo); + } } if (stream.Mode is MetaStreamMode.Read) @@ -41,10 +93,10 @@ public override void Serialize(ref Scene obj, MetaStream stream) int numAgents = stream.ReadInt32(); obj.Agents.Capacity = numAgents; - for (var i = 0; i < numAgents; i++) + for (int i = 0; i < numAgents; i++) { - var agentInfo = new AgentInfo(); - Toolkit.Instance.GetSerializer().Serialize(ref agentInfo, stream); + AgentInfo agentInfo = new(); + stream.Serialize(ref agentInfo); obj.Agents.Add(agentInfo); } } @@ -63,7 +115,7 @@ public class AgentInfo public PropertySet AgentSceneProps { get; set; } = new(); // Below the members are for the original games. - // In newer games, hey have been moved to the properties. + // In newer games, they have been moved to the properties. [MetaMember("mStartPos")] public Vector3 StartPos { get; set; } = new(); @@ -96,4 +148,8 @@ public class AgentQualitySettings [MetaMember("mFlags")] public Flags Flags { get; set; } } + + internal class AddSceneInfo + { + } } diff --git a/src/TelltaleToolKit/T3Types/Skeletons/BallJointKey.cs b/src/TelltaleToolKit/T3Types/Skeletons/BallJointKey.cs index d46a5f7..f00be28 100644 --- a/src/TelltaleToolKit/T3Types/Skeletons/BallJointKey.cs +++ b/src/TelltaleToolKit/T3Types/Skeletons/BallJointKey.cs @@ -8,44 +8,44 @@ namespace TelltaleToolKit.T3Types.Skeletons; public class BallJointKey { [MetaMember("mBoneLengthConstraint__Enabled")] - public bool mBoneLengthConstraint__Enabled { get; set; } + public bool BoneLengthConstraintEnabled { get; set; } [MetaMember("mBoneLengthConstraint_RestRelative")] - public bool mBoneLengthConstraint_RestRelative { get; set; } + public bool BoneLengthConstraintRestRelative { get; set; } [MetaMember("mBoneLengthConstraint_NodeMobility")] - public float mBoneLengthConstraint_NodeMobility { get; set; } + public float BoneLengthConstraintNodeMobility { get; set; } [MetaMember("mBoneLengthConstraint_ParentMobility")] - public float mBoneLengthConstraint_ParentMobility { get; set; } + public float BoneLengthConstraintParentMobility { get; set; } [MetaMember("mAngleConstraint__Enabled")] - public bool mAngleConstraint__Enabled { get; set; } + public bool AngleConstraintEnabled { get; set; } [MetaMember("mAngleConstraint_MaxBendAngle")] - public float mAngleConstraint_MaxBendAngle { get; set; } + public float AngleConstraintMaxBendAngle { get; set; } [MetaMember("mTranslationConstraint__Enabled")] - public bool mTranslationConstraint__Enabled { get; set; } + public bool TranslationConstraintEnabled { get; set; } [MetaMember("mTranslationConstraint_ReferenceFrame")] - public ConstraintReferenceFrame mTranslationConstraint_ReferenceFrame { get; set; } + public ConstraintReferenceFrame TranslationConstraintReferenceFrame { get; set; } [MetaMember("mTranslationConstraint_MaxVelocity")] - public float mTranslationConstraint_MaxVelocity { get; set; } + public float TranslationConstraintMaxVelocity { get; set; } [MetaMember("mTranslationConstraint_MaxAcceleration")] - public float mTranslationConstraint_MaxAcceleration { get; set; } + public float TranslationConstraintMaxAcceleration { get; set; } [MetaMember("mRotationConstraint__Enabled")] - public bool mRotationConstraint__Enabled { get; set; } + public bool RotationConstraintEnabled { get; set; } [MetaMember("mRotationConstraint_ReferenceFrame")] - public ConstraintReferenceFrame mRotationConstraint_ReferenceFrame { get; set; } + public ConstraintReferenceFrame RotationConstraintReferenceFrame { get; set; } [MetaMember("mRotationConstraint_MaxBendAngularVelocity")] - public float mRotationConstraint_MaxBendAngularVelocity { get; set; } + public float RotationConstraintMaxBendAngularVelocity { get; set; } [MetaMember("mRotationConstraint_MaxBendAngularAcceleration")] - public float mRotationConstraint_MaxBendAngularAcceleration { get; set; } + public float RotationConstraintMaxBendAngularAcceleration { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Skeletons/BallTwistJointKey.cs b/src/TelltaleToolKit/T3Types/Skeletons/BallTwistJointKey.cs index 47fc15e..e31278a 100644 --- a/src/TelltaleToolKit/T3Types/Skeletons/BallTwistJointKey.cs +++ b/src/TelltaleToolKit/T3Types/Skeletons/BallTwistJointKey.cs @@ -8,56 +8,56 @@ namespace TelltaleToolKit.T3Types.Skeletons; public class BallTwistJointKey { [MetaMember("mBoneLengthConstraint__Enabled")] - public bool mBoneLengthConstraint__Enabled { get; set; } + public bool BoneLengthConstraintEnabled { get; set; } [MetaMember("mBoneLengthConstraint_RestRelative")] - public bool mBoneLengthConstraint_RestRelative { get; set; } + public bool BoneLengthConstraintRestRelative { get; set; } [MetaMember("mBoneLengthConstraint_NodeMobility")] - public float mBoneLengthConstraint_NodeMobility { get; set; } + public float BoneLengthConstraintNodeMobility { get; set; } [MetaMember("mBoneLengthConstraint_ParentMobility")] - public float mBoneLengthConstraint_ParentMobility { get; set; } + public float BoneLengthConstraintParentMobility { get; set; } [MetaMember("mAngleConstraint__Enabled")] - public bool mAngleConstraint__Enabled { get; set; } + public bool AngleConstraintEnabled { get; set; } [MetaMember("mAngleConstraint_MaxBendAngle")] - public float mAngleConstraint_MaxBendAngle { get; set; } + public float AngleConstraintMaxBendAngle { get; set; } [MetaMember("mAngleConstraint_MinTwistAngle")] - public float mAngleConstraint_MinTwistAngle { get; set; } + public float AngleConstraintMinTwistAngle { get; set; } [MetaMember("mAngleConstraint_MaxTwistAngle")] - public float mAngleConstraint_MaxTwistAngle { get; set; } + public float AngleConstraintMaxTwistAngle { get; set; } [MetaMember("mTranslationConstraint__Enabled")] - public bool mTranslationConstraint__Enabled { get; set; } + public bool TranslationConstraintEnabled { get; set; } [MetaMember("mTranslationConstraint_ReferenceFrame")] - public ConstraintReferenceFrame mTranslationConstraint_ReferenceFrame { get; set; } + public ConstraintReferenceFrame TranslationConstraintReferenceFrame { get; set; } [MetaMember("mTranslationConstraint_MaxVelocity")] - public float mTranslationConstraint_MaxVelocity { get; set; } + public float TranslationConstraintMaxVelocity { get; set; } [MetaMember("mTranslationConstraint_MaxAcceleration")] - public float mTranslationConstraint_MaxAcceleration { get; set; } + public float TranslationConstraintMaxAcceleration { get; set; } [MetaMember("mRotationConstraint__Enabled")] - public bool mRotationConstraint__Enabled { get; set; } + public bool RotationConstraintEnabled { get; set; } [MetaMember("mRotationConstraint_ReferenceFrame")] - public ConstraintReferenceFrame mRotationConstraint_ReferenceFrame { get; set; } + public ConstraintReferenceFrame RotationConstraintReferenceFrame { get; set; } [MetaMember("mRotationConstraint_MaxBendAngularVelocity")] - public float mRotationConstraint_MaxBendAngularVelocity { get; set; } + public float RotationConstraintMaxBendAngularVelocity { get; set; } [MetaMember("mRotationConstraint_MaxBendAngularAcceleration")] - public float mRotationConstraint_MaxBendAngularAcceleration { get; set; } + public float RotationConstraintMaxBendAngularAcceleration { get; set; } [MetaMember("mRotationConstraint_MaxTwistAngularVelocity")] - public float mRotationConstraint_MaxTwistAngularVelocity { get; set; } + public float RotationConstraintMaxTwistAngularVelocity { get; set; } [MetaMember("mRotationConstraint_MaxTwistAngularAcceleration")] - public float mRotationConstraint_MaxTwistAngularAcceleration { get; set; } + public float RotationConstraintMaxTwistAngularAcceleration { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Skeletons/BlendCameraResource.cs b/src/TelltaleToolKit/T3Types/Skeletons/BlendCameraResource.cs new file mode 100644 index 0000000..00e2675 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Skeletons/BlendCameraResource.cs @@ -0,0 +1,9 @@ +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; + +namespace TelltaleToolKit.T3Types.Skeletons; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class BlendCameraResource +{ +} diff --git a/src/TelltaleToolKit/T3Types/Skeletons/ConstraintReferenceFrame.cs b/src/TelltaleToolKit/T3Types/Skeletons/ConstraintReferenceFrame.cs index 55199d7..f453dd6 100644 --- a/src/TelltaleToolKit/T3Types/Skeletons/ConstraintReferenceFrame.cs +++ b/src/TelltaleToolKit/T3Types/Skeletons/ConstraintReferenceFrame.cs @@ -4,8 +4,9 @@ namespace TelltaleToolKit.T3Types.Skeletons; [MetaSerializer(typeof(EnumSerializer))] -public enum ConstraintReferenceFrame { +public enum ConstraintReferenceFrame +{ World = 0, Root = 1, - Parent = 2, + Parent = 2 } diff --git a/src/TelltaleToolKit/T3Types/Skeletons/LinkedBallTwistJointKey.cs b/src/TelltaleToolKit/T3Types/Skeletons/LinkedBallTwistJointKey.cs index d484931..2e0e4eb 100644 --- a/src/TelltaleToolKit/T3Types/Skeletons/LinkedBallTwistJointKey.cs +++ b/src/TelltaleToolKit/T3Types/Skeletons/LinkedBallTwistJointKey.cs @@ -8,74 +8,74 @@ namespace TelltaleToolKit.T3Types.Skeletons; public class LinkedBallTwistJointKey { [MetaMember("mBoneLengthConstraint__Enabled")] - public bool mBoneLengthConstraint__Enabled{get;set;} + public bool mBoneLengthConstraint__Enabled { get; set; } [MetaMember("mBoneLengthConstraint_RestRelative")] - public bool mBoneLengthConstraint_RestRelative{get;set;} + public bool mBoneLengthConstraint_RestRelative { get; set; } [MetaMember("mBoneLengthConstraint_NodeMobility")] - public float mBoneLengthConstraint_NodeMobility{get;set;} + public float mBoneLengthConstraint_NodeMobility { get; set; } [MetaMember("mBoneLengthConstraint_ParentMobility")] - public float mBoneLengthConstraint_ParentMobility{get;set;} + public float mBoneLengthConstraint_ParentMobility { get; set; } [MetaMember("mAngleConstraint__Enabled")] - public bool mAngleConstraint__Enabled{get;set;} + public bool mAngleConstraint__Enabled { get; set; } [MetaMember("mAngleConstraint_MaxBendAngle")] - public float mAngleConstraint_MaxBendAngle{get;set;} + public float mAngleConstraint_MaxBendAngle { get; set; } [MetaMember("mAngleConstraint_MinTwistAngle")] - public float mAngleConstraint_MinTwistAngle{get;set;} + public float mAngleConstraint_MinTwistAngle { get; set; } [MetaMember("mAngleConstraint_MaxTwistAngle")] - public float mAngleConstraint_MaxTwistAngle{get;set;} + public float mAngleConstraint_MaxTwistAngle { get; set; } [MetaMember("mTranslationConstraint__Enabled")] - public bool mTranslationConstraint__Enabled{get;set;} + public bool mTranslationConstraint__Enabled { get; set; } [MetaMember("mTranslationConstraint_ReferenceFrame")] - public ConstraintReferenceFrame mTranslationConstraint_ReferenceFrame{get;set;} + public ConstraintReferenceFrame mTranslationConstraint_ReferenceFrame { get; set; } [MetaMember("mTranslationConstraint_MaxVelocity")] - public float mTranslationConstraint_MaxVelocity{get;set;} + public float mTranslationConstraint_MaxVelocity { get; set; } [MetaMember("mTranslationConstraint_MaxAcceleration")] - public float mTranslationConstraint_MaxAcceleration{get;set;} + public float mTranslationConstraint_MaxAcceleration { get; set; } [MetaMember("mRotationConstraint__Enabled")] - public bool mRotationConstraint__Enabled{get;set;} + public bool mRotationConstraint__Enabled { get; set; } [MetaMember("mRotationConstraint_ReferenceFrame")] - public ConstraintReferenceFrame mRotationConstraint_ReferenceFrame{get;set;} + public ConstraintReferenceFrame mRotationConstraint_ReferenceFrame { get; set; } [MetaMember("mRotationConstraint_MaxBendAngularVelocity")] - public float mRotationConstraint_MaxBendAngularVelocity{get;set;} + public float mRotationConstraint_MaxBendAngularVelocity { get; set; } [MetaMember("mRotationConstraint_MaxBendAngularAcceleration")] - public float mRotationConstraint_MaxBendAngularAcceleration{get;set;} + public float mRotationConstraint_MaxBendAngularAcceleration { get; set; } [MetaMember("mRotationConstraint_MaxTwistAngularVelocity")] - public float mRotationConstraint_MaxTwistAngularVelocity{get;set;} + public float mRotationConstraint_MaxTwistAngularVelocity { get; set; } [MetaMember("mRotationConstraint_MaxTwistAngularAcceleration")] - public float mRotationConstraint_MaxTwistAngularAcceleration{get;set;} + public float mRotationConstraint_MaxTwistAngularAcceleration { get; set; } [MetaMember("mLinkBendConstraint__Enabled")] - public bool mLinkBendConstraint__Enabled{get;set;} + public bool mLinkBendConstraint__Enabled { get; set; } [MetaMember("mLinkBendConstraint_Strength")] - public float mLinkBendConstraint_Strength{get;set;} + public float mLinkBendConstraint_Strength { get; set; } [MetaMember("mLinkBendConstraint_EchoDelay")] - public float mLinkBendConstraint_EchoDelay{get;set;} + public float mLinkBendConstraint_EchoDelay { get; set; } [MetaMember("mLinkTwistConstraint__Enabled")] - public bool mLinkTwistConstraint__Enabled{get;set;} + public bool mLinkTwistConstraint__Enabled { get; set; } [MetaMember("mLinkTwistConstraint_Strength")] - public float mLinkTwistConstraint_Strength{get;set;} + public float mLinkTwistConstraint_Strength { get; set; } [MetaMember("mLinkTwistConstraint_EchoDelay")] - public float mLinkTwistConstraint_EchoDelay{get;set;} + public float mLinkTwistConstraint_EchoDelay { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/Skeletons/PlaceableBallTwistJointKey.cs b/src/TelltaleToolKit/T3Types/Skeletons/PlaceableBallTwistJointKey.cs index ac62daf..7666d11 100644 --- a/src/TelltaleToolKit/T3Types/Skeletons/PlaceableBallTwistJointKey.cs +++ b/src/TelltaleToolKit/T3Types/Skeletons/PlaceableBallTwistJointKey.cs @@ -90,7 +90,7 @@ public enum LockMode { eTrafoMode = 0, /*pos and rot*/ ePosMode = 1, /*pos*/ - eOriMode = 2, /*rot*/ + eOriMode = 2 /*rot*/ } [MetaSerializer(typeof(EnumSerializer))] @@ -152,6 +152,6 @@ public enum Node eLeg_R = 0x35, eKnee_R = 0x36, eAnkle_R = 0x37, - eNumNodes = 0x38, + eNumNodes = 0x38 } } diff --git a/src/TelltaleToolKit/T3Types/Skeletons/Skeleton.cs b/src/TelltaleToolKit/T3Types/Skeletons/Skeleton.cs index e863084..169ea09 100644 --- a/src/TelltaleToolKit/T3Types/Skeletons/Skeleton.cs +++ b/src/TelltaleToolKit/T3Types/Skeletons/Skeleton.cs @@ -16,18 +16,27 @@ public class Entry { // This is a string and a symbol at the same time [MetaMember("mJointName")] - public Symbol JointName { get; set; } + public Symbol JointNameS { get; set; } + + [MetaMember("mJointName")] + public string JointName { get; set; } // This is a string and a symbol at the same time [MetaMember("mParentName")] - public Symbol ParentName { get; set; } + public Symbol ParentNameS { get; set; } + + [MetaMember("mParentName")] + public string ParentName { get; set; } [MetaMember("mParentIndex")] public int ParentIndex { get; set; } // This is a string and a symbol at the same time [MetaMember("mMirrorBoneName")] - public Symbol MirrorBoneName { get; set; } + public Symbol MirrorBoneNameS { get; set; } + + [MetaMember("mMirrorBoneName")] + public string MirrorBoneName { get; set; } [MetaMember("mMirrorBoneIndex")] public int MirrorBoneIndex { get; set; } @@ -59,7 +68,6 @@ public class Entry [MetaMember("mAnimTranslationScale")] public Vector3 AnimTranslationScale { get; set; } = new(); - // This is a string and a symbol at the same time [MetaMember("mResourceGroupMembership")] public Dictionary ResourceGroupMembership { get; set; } = new(); diff --git a/src/TelltaleToolKit/T3Types/Skeletons/SkeletonPoseValue.cs b/src/TelltaleToolKit/T3Types/Skeletons/SkeletonPoseValue.cs new file mode 100644 index 0000000..9ea9713 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/Skeletons/SkeletonPoseValue.cs @@ -0,0 +1,64 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Animations; + +namespace TelltaleToolKit.T3Types.Skeletons; + +[MetaSerializer(typeof(MetaClassSerializer))] +public class SkeletonPoseValue : IAnimationValueInterface +{ + [MetaMember("mBones")] + public List Bones { get; set; } = []; + + [MetaMember("mSamples")] + public List Samples { get; set; } = []; + + [MetaMember("mFastBoneCount")] + public int FastBoneCount { get; set; } + + [MetaMember("Baseclass_AnimationValueInterfaceBase")] + public AnimationValueInterfaceBase AnimationValueInterfaceBase { get; set; } = new(); + + [MetaSerializer(typeof(MetaClassSerializer))] + public class Sample + { + [MetaMember("mTime")] + public float Time { get; set; } + + [MetaMember("mRecipTimeToNextSample")] + public float RecipTimeToNextSample { get; set; } + + [MetaMember("mValues")] + public List Values { get; set; } = []; + + [MetaMember("mFastValues")] + public List FastValues { get; set; } = []; + + [MetaMember("mTangents")] + public List Tangents { get; set; } = []; + + [MetaMember("mValues")] + public List ValuesS { get; set; } = []; + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class BoneEntry + { + [MetaMember("mName")] + public Symbol Name { get; set; } = Symbol.Empty; + + [MetaMember("mFlags")] + public uint Flags { get; set; } + } + + [MetaSerializer(typeof(MetaClassSerializer))] + public class ValueEntry + { + [MetaMember("mValue")] + public Transform Value { get; set; } = new(); + + [MetaMember("mTangentMode")] + public int TangentMode { get; set; } + } +} diff --git a/src/TelltaleToolKit/T3Types/StyleGuides/ActingAccentPalette.cs b/src/TelltaleToolKit/T3Types/StyleGuides/ActingAccentPalette.cs new file mode 100644 index 0000000..658ac26 --- /dev/null +++ b/src/TelltaleToolKit/T3Types/StyleGuides/ActingAccentPalette.cs @@ -0,0 +1,114 @@ +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Common; +using TelltaleToolKit.T3Types.Common.UID; +using TelltaleToolKit.T3Types.Mathematics; + +namespace TelltaleToolKit.T3Types.StyleGuides; + +[MetaSerializer(typeof(Serializer))] +public class ActingAccentPalette +{ + [MetaSerializer(typeof(EnumSerializer))] + public enum EnumTrackID + { + body = 0x1, + face = 0x2, + head1 = 0x3, + head2 = 0x4 + } + + [MetaSerializer(typeof(EnumSerializer))] + public enum Overrun + { + Disallowed = 0, + Allowed = 1 + } + + [MetaMember("Baseclass_ActingOverridablePropOwner")] + public ActingOverridablePropOwner BaseClassActingOverridablePropOwner { get; set; } + + [MetaMember("Baseclass_UID::Owner")] + public Owner BaseClassOwner { get; set; } + + [MetaMember("mName")] + public string Name { get; set; } = string.Empty; + + [MetaMember("mStartOffsetRange")] + public Range StartOffsetRange { get; set; } = new(); + + [MetaMember("mMoodOverrunAllowed")] + public EnumOverrun MoodOverrunAllowed { get; set; } + + [MetaMember("mDisableAct")] + public bool DisableAct { get; set; } + + [MetaMember("mValidIntensityRange")] + public Range ValidIntensityRange { get; set; } = new(); + + [MetaMember("mSpilloutBufPostRange")] + public Range SpilloutBufPostRange { get; set; } = new(); + + [MetaMember("mRandomChance")] + public float RandomChance { get; set; } + + [MetaMember("mTrackID")] + public EnumTrackID TrackID { get; set; } + + [MetaMember("mGroupMembershipUID")] + public int GroupMembershipUID { get; set; } + + [MetaMember("mFlags")] + public Flags Flags { get; set; } + + [MetaMember("mVersion")] + public int Version { get; set; } + + public List Resources { get; set; } = []; + + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumOverrun + { + [MetaMember("mVal")] + public Overrun Val { get; set; } + } + + public class Serializer : MetaSerializer + { + private static readonly MetaClassSerializer s_metaClassSerializer = new(); + + public override void Serialize(ref ActingAccentPalette obj, MetaStream stream, MetaClassType? type = null) + { + s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + if (stream.Mode is MetaStreamMode.Write) + { + stream.Write(obj.Resources.Count); + + foreach (ActingResource resource in obj.Resources) + { + ActingResource actingResource = resource; + stream.Serialize(ref actingResource); + } + } + else if (stream.Mode is MetaStreamMode.Read) + { + int numResources = stream.ReadInt32(); + obj.Resources.Clear(); + for (int i = 0; i < numResources; i++) + { + MetaClass? mcd = stream.GetMetaClass(typeof(ActingResource)); + ActingResource resource = new(); + stream.Serialize(ref resource); + obj.Resources.Add(resource); + } + } + } + } + + public class PaletteClassStatus + { + } +} diff --git a/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteClass.cs b/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteClass.cs index 7846a2f..f65d90f 100644 --- a/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteClass.cs +++ b/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteClass.cs @@ -9,14 +9,19 @@ namespace TelltaleToolKit.T3Types.StyleGuides; [MetaSerializer(typeof(Serializer))] public class ActingPaletteClass { + public List AccentPalettePtrs = []; + public List PaletteGroupPtrs = []; + + public List PalletePtrs = []; + [MetaMember("Baseclass_UID::Owner")] - public Owner BaseClassOwner { get; set; } + public Owner BaseClassOwner { get; set; } = new(); [MetaMember("Baseclass_UID::Generator")] - public Generator BaseClassGenerator { get; set; } + public Generator BaseClassGenerator { get; set; } = new(); [MetaMember("Baseclass_ActingOverridablePropOwner")] - public ActingOverridablePropOwner BaseClassActingOverridablePropOwner { get; set; } + public ActingOverridablePropOwner BaseClassActingOverridablePropOwner { get; set; } = new(); [MetaMember("mName")] public string Name { get; set; } = string.Empty; @@ -24,6 +29,12 @@ public class ActingPaletteClass [MetaMember("mKeywords")] public List Keywords { get; set; } = []; + [MetaMember("mFlags")] + public Flags Flags { get; set; } + + [MetaMember("mInstantChange")] + public bool InstantChange { get; set; } + [MetaMember("mPalettes")] public List Palettes { get; set; } = []; @@ -34,33 +45,90 @@ public class ActingPaletteClass public List AlternateNames { get; set; } = []; [MetaMember("mDefaultPaletteGroupID")] - public int DefaultPaletteGroupID { get; set; } + public int DefaultPaletteGroupId { get; set; } [MetaMember("mIdle")] - public AnimOrChore Idle { get; set; } + public AnimOrChore Idle { get; set; } = new(); public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref ActingPaletteClass obj, MetaStream stream) + public override void Serialize(ref ActingPaletteClass obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + if (stream.Mode is MetaStreamMode.Write && obj.AccentPalettePtrs.Count > 0) + { + obj.Flags.Set(3); + } + + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); - // TODO: + // Enable? + obj.Flags.Set(1); + MetaClass? classDescription = stream.GetMetaClass(typeof(ActingPaletteClass)); if (classDescription is not null && classDescription.ContainsMember("mFlags")) { if (stream.Mode is MetaStreamMode.Write) { - throw new NotImplementedException(); + stream.Write(obj.PalletePtrs.Count); + foreach (ActingPalette palette in obj.PalletePtrs) + { + ActingPalette actingPalette = palette; + stream.Serialize(ref actingPalette); + } + + if (obj.Flags.Has(2)) + { + stream.Write(obj.AccentPalettePtrs.Count); + foreach (ActingAccentPalette accentPalette in obj.AccentPalettePtrs) + { + ActingAccentPalette actingAccentPalette = accentPalette; + stream.Serialize(ref actingAccentPalette); + } + } + + stream.Write(obj.PaletteGroupPtrs.Count); + foreach (ActingPaletteGroup paletteGroup in obj.PaletteGroupPtrs) + { + ActingPaletteGroup actingPaletteGroup = paletteGroup; + stream.Serialize(ref actingPaletteGroup); + } } - - if (stream.Mode is MetaStreamMode.Read) + else { - throw new NotImplementedException(); + int count = stream.ReadInt32(); + for (int i = 0; i < count; i++) + { + ActingPalette palette = new(); + // Generate Unique ID + stream.Serialize(ref palette); + obj.PalletePtrs.Add(palette); + } + + if (obj.Flags.Has(2)) + { + int accentPaletteCount = stream.ReadInt32(); + for (int i = 0; i < accentPaletteCount; i++) + { + ActingAccentPalette palette = new(); + // Generate Unique ID + stream.Serialize(ref palette); + obj.AccentPalettePtrs.Add(palette); + } + } + + int groupCount = stream.ReadInt32(); + + for (int i = 0; i < groupCount; i++) + { + ActingPaletteGroup group = new(); + // Generate Unique ID + stream.Serialize(ref group); + obj.PaletteGroupPtrs.Add(group); + } } } } diff --git a/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteGroup.cs b/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteGroup.cs index 30d7ae6..7a0c05c 100644 --- a/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteGroup.cs +++ b/src/TelltaleToolKit/T3Types/StyleGuides/ActingPaletteGroup.cs @@ -8,14 +8,22 @@ namespace TelltaleToolKit.T3Types.StyleGuides; [MetaSerializer(typeof(MetaClassSerializer))] public class ActingPaletteGroup { + [MetaSerializer(typeof(EnumSerializer))] + public enum IdleTransition + { + transitionLinear = 1, + transitionEaseInOut = 2, + transitionUnused = 3 + } + [MetaMember("Baseclass_UID::Owner")] - public Owner BaseClassOwner { get; set; } + public Owner BaseClassOwner { get; set; } = new(); [MetaMember("mName")] - public string Name { get; set; } + public string Name { get; set; } = string.Empty; [MetaMember("mIdle")] - public AnimOrChore Idle { get; set; } + public AnimOrChore Idle { get; set; } = new(); [MetaMember("mWeight")] public float Weight { get; set; } @@ -24,13 +32,286 @@ public class ActingPaletteGroup public AnimOrChore TransitionIn { get; set; } = new(); [MetaMember("mTransitionOut")] - public AnimOrChore TransitionOut { get; set; } + public AnimOrChore TransitionOut { get; set; } = new(); + + [MetaMember("mTalkingIdle")] + public AnimOrChore TalkingIdle { get; set; } = new(); + + [MetaMember("mMumbleMouth")] + public AnimOrChore MumbleMouth { get; set; } = new(); + + [MetaMember("mTransitions")] + public List Transitions { get; set; } = []; + [MetaMember("mIdleTransitionTimeOverride")] + public float IdleTransitionTimeOverride { get; set; } + + [MetaMember("mhIdleTransitionMap")] + public Handle IdleTransitionMap { get; set; } = new(); + + [MetaMember("mIdleTransitionKind")] + public EnumIdleTransition IdleTransitionKind { get; set; } + + [MetaMember("mRandomAutoMin")] + public float RandomAutoMin { get; set; } + + [MetaMember("mRandomAutoMax")] + public float RandomAutoMax { get; set; } + + [MetaSerializer(typeof(MetaClassSerializer))] public class ActingPaletteTransition { + [MetaMember("mTransition")] + public string Transition { get; set; } = string.Empty; + + [MetaMember("mTransitionIn")] + public AnimOrChore TransitionIn { get; set; } = new(); + + [MetaMember("mCenterOffset")] + public float CenterOffset { get; set; } + + [MetaMember("mPreDelay")] + public float PreDelay { get; set; } + + [MetaMember("mPostDelay")] + public float PostDelay { get; set; } + + [MetaMember("mFadeTime")] + public float FadeTime { get; set; } } - public class EnumIdleTransition + [MetaSerializer(typeof(MetaClassSerializer))] + public struct EnumIdleTransition { + [MetaMember("mVal")] + public IdleTransition Val { get; set; } } + + // Yes, this is actually how Telltale describes this class. + + + [MetaMember("mTransition1")] + public string Transition1 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn1")] + public AnimOrChore TransitionIn1 { get; set; } = new(); + + [MetaMember("mCenterOffset1")] + public float CenterOffset1 { get; set; } + + [MetaMember("mPreDelay1")] + public float PreDelay1 { get; set; } + + [MetaMember("mPostDelay1")] + public float PostDelay1 { get; set; } + + [MetaMember("mTransition2")] + public string Transition2 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn2")] + public AnimOrChore TransitionIn2 { get; set; } = new(); + + [MetaMember("mCenterOffset2")] + public float CenterOffset2 { get; set; } + + [MetaMember("mPreDelay2")] + public float PreDelay2 { get; set; } + + [MetaMember("mPostDelay2")] + public float PostDelay2 { get; set; } + + [MetaMember("mTransition3")] + public string Transition3 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn3")] + public AnimOrChore TransitionIn3 { get; set; } = new(); + + [MetaMember("mCenterOffset3")] + public float CenterOffset3 { get; set; } + + [MetaMember("mPreDelay3")] + public float PreDelay3 { get; set; } + + [MetaMember("mPostDelay3")] + public float PostDelay3 { get; set; } + + [MetaMember("mTransition4")] + public string Transition4 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn4")] + public AnimOrChore TransitionIn4 { get; set; } = new(); + + [MetaMember("mCenterOffset4")] + public float CenterOffset4 { get; set; } + + [MetaMember("mPreDelay4")] + public float PreDelay4 { get; set; } + + [MetaMember("mPostDelay4")] + public float PostDelay4 { get; set; } + + [MetaMember("mTransition5")] + public string Transition5 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn5")] + public AnimOrChore TransitionIn5 { get; set; } = new(); + + [MetaMember("mCenterOffset5")] + public float CenterOffset5 { get; set; } + + [MetaMember("mPreDelay5")] + public float PreDelay5 { get; set; } + + [MetaMember("mPostDelay5")] + public float PostDelay5 { get; set; } + + [MetaMember("mTransition6")] + public string Transition6 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn6")] + public AnimOrChore TransitionIn6 { get; set; } = new(); + + [MetaMember("mCenterOffset6")] + public float CenterOffset6 { get; set; } + + [MetaMember("mPreDelay6")] + public float PreDelay6 { get; set; } + + [MetaMember("mPostDelay6")] + public float PostDelay6 { get; set; } + + [MetaMember("mTransition7")] + public string Transition7 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn7")] + public AnimOrChore TransitionIn7 { get; set; } = new(); + + [MetaMember("mCenterOffset7")] + public float CenterOffset7 { get; set; } + + [MetaMember("mPreDelay7")] + public float PreDelay7 { get; set; } + + [MetaMember("mPostDelay7")] + public float PostDelay7 { get; set; } + + [MetaMember("mTransition8")] + public string Transition8 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn8")] + public AnimOrChore TransitionIn8 { get; set; } = new(); + + [MetaMember("mCenterOffset8")] + public float CenterOffset8 { get; set; } + + [MetaMember("mPreDelay8")] + public float PreDelay8 { get; set; } + + [MetaMember("mPostDelay8")] + public float PostDelay8 { get; set; } + + [MetaMember("mTransition9")] + public string Transition9 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn9")] + public AnimOrChore TransitionIn9 { get; set; } = new(); + + [MetaMember("mCenterOffset9")] + public float CenterOffset9 { get; set; } + + [MetaMember("mPreDelay9")] + public float PreDelay9 { get; set; } + + [MetaMember("mPostDelay9")] + public float PostDelay9 { get; set; } + + [MetaMember("mTransition10")] + public string Transition10 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn10")] + public AnimOrChore TransitionIn10 { get; set; } = new(); + + [MetaMember("mCenterOffset10")] + public float CenterOffset10 { get; set; } + + [MetaMember("mPreDelay10")] + public float PreDelay10 { get; set; } + + [MetaMember("mPostDelay10")] + public float PostDelay10 { get; set; } + + [MetaMember("mTransition11")] + public string Transition11 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn11")] + public AnimOrChore TransitionIn11 { get; set; } = new(); + + [MetaMember("mCenterOffset11")] + public float CenterOffset11 { get; set; } + + [MetaMember("mPreDelay11")] + public float PreDelay11 { get; set; } + + [MetaMember("mPostDelay11")] + public float PostDelay11 { get; set; } + + [MetaMember("mTransition12")] + public string Transition12 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn12")] + public AnimOrChore TransitionIn12 { get; set; } = new(); + + [MetaMember("mCenterOffset12")] + public float CenterOffset12 { get; set; } + + [MetaMember("mPreDelay12")] + public float PreDelay12 { get; set; } + + [MetaMember("mPostDelay12")] + public float PostDelay12 { get; set; } + + [MetaMember("mTransition13")] + public string Transition13 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn13")] + public AnimOrChore TransitionIn13 { get; set; } = new(); + + [MetaMember("mCenterOffset13")] + public float CenterOffset13 { get; set; } + + [MetaMember("mPreDelay13")] + public float PreDelay13 { get; set; } + + [MetaMember("mPostDelay13")] + public float PostDelay13 { get; set; } + + [MetaMember("mTransition14")] + public string Transition14 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn14")] + public AnimOrChore TransitionIn14 { get; set; } = new(); + + [MetaMember("mCenterOffset14")] + public float CenterOffset14 { get; set; } + + [MetaMember("mPreDelay14")] + public float PreDelay14 { get; set; } + + [MetaMember("mPostDelay14")] + public float PostDelay14 { get; set; } + + [MetaMember("mTransition15")] + public string Transition15 { get; set; } = string.Empty; + + [MetaMember("mTransitionIn15")] + public AnimOrChore TransitionIn15 { get; set; } = new(); + + [MetaMember("mCenterOffset15")] + public float CenterOffset15 { get; set; } + + [MetaMember("mPreDelay15")] + public float PreDelay15 { get; set; } + + [MetaMember("mPostDelay15")] + public float PostDelay15 { get; set; } } diff --git a/src/TelltaleToolKit/T3Types/StyleGuides/ActingPallete.cs b/src/TelltaleToolKit/T3Types/StyleGuides/ActingPallete.cs index 29b384a..0cede8f 100644 --- a/src/TelltaleToolKit/T3Types/StyleGuides/ActingPallete.cs +++ b/src/TelltaleToolKit/T3Types/StyleGuides/ActingPallete.cs @@ -13,6 +13,9 @@ public class ActingPalette [MetaSerializer(typeof(EnumSerializer))] public enum ActiveDuring { + always = 1, + talking = 2, + listening = 3 } [MetaMember("mName")] @@ -48,7 +51,6 @@ public enum ActiveDuring [MetaMember("mGroupMembershipUID")] public int GroupMembershipUID { get; set; } - [MetaMember("mAnimFadeInOut")] public float AnimFadeInOut { get; set; } @@ -58,13 +60,11 @@ public enum ActiveDuring [MetaMember("mAnimPostDelay")] public float AnimPostDelay { get; set; } - [MetaMember("mScaleRange")] public Range ScaleRange { get; set; } [MetaMember("mPaletteResourceGroups")] - public Dictionary PaletteResourceGroups { get; set; } - + public Dictionary PaletteResourceGroups { get; set; } = []; [MetaSerializer(typeof(MetaClassSerializer))] public struct EnumActiveDuring diff --git a/src/TelltaleToolKit/T3Types/StyleGuides/ResourceGroups.cs b/src/TelltaleToolKit/T3Types/StyleGuides/ResourceGroups.cs index 3f25a1e..ed19340 100644 --- a/src/TelltaleToolKit/T3Types/StyleGuides/ResourceGroups.cs +++ b/src/TelltaleToolKit/T3Types/StyleGuides/ResourceGroups.cs @@ -7,7 +7,9 @@ namespace TelltaleToolKit.T3Types.StyleGuides; [MetaSerializer(typeof(MetaClassSerializer))] public class ResourceGroups { - // String and symbol at the same time [MetaMember("mGroups")] - public Dictionary Groups { get; set; } = new(); + public Dictionary GroupsS { get; set; } = []; + + [MetaMember("mGroups")] + public Dictionary Groups { get; set; } = []; } diff --git a/src/TelltaleToolKit/T3Types/StyleGuides/StyleGuide.cs b/src/TelltaleToolKit/T3Types/StyleGuides/StyleGuide.cs index 3e44ecb..fa2f38c 100644 --- a/src/TelltaleToolKit/T3Types/StyleGuides/StyleGuide.cs +++ b/src/TelltaleToolKit/T3Types/StyleGuides/StyleGuide.cs @@ -27,43 +27,50 @@ public class StyleGuide [MetaMember("mbGeneratesLookAts")] public bool GeneratesLookAts { get; set; } = false; + [MetaMember("mbDisallowOverrun")] + public bool DisallowOverrun { get; set; } = false; + [MetaMember("mFlags")] public Flags Flags { get; set; } - - // It's a metamember, but not serialized by default. TODO: + [MetaMember("mPaletteClassPtrs")] public List PaletteClassesPtrs { get; set; } = []; - - [MetaSerializer(typeof(ActingOverridablePropOwnerSerializer))] public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref StyleGuide obj, MetaStream stream) + public override void Serialize(ref StyleGuide obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); MetaClass? classDescription = stream.GetMetaClass(typeof(StyleGuide)); - if (classDescription is not null && classDescription.ContainsMember("mFlags")) + if (classDescription is null || !classDescription.ContainsMember("mFlags")) + { + return; + } + + if (stream.Mode is MetaStreamMode.Write) { - if (stream.Mode is MetaStreamMode.Write) + stream.Write(obj.PaletteClassesPtrs.Count); + foreach (ActingPaletteClass paletteClass in obj.PaletteClassesPtrs) { - throw new NotImplementedException(); + ActingPaletteClass actingPaletteClass = paletteClass; + stream.Serialize(ref actingPaletteClass); } + } + else + { + obj.PaletteClassesPtrs = []; - if (stream.Mode is MetaStreamMode.Read) + int values = stream.ReadInt32(); + for (int i = 0; i < values; i++) { - int values = stream.ReadInt32(); - - for (var i = 0; i < values; i++) - { - var child = new ActingPaletteClass(); - stream.Serialize(ref child); - obj.PaletteClassesPtrs.Add(child); - } + ActingPaletteClass child = new(); + stream.Serialize(ref child); + obj.PaletteClassesPtrs.Add(child); } } } diff --git a/src/TelltaleToolKit/T3Types/Symbol.cs b/src/TelltaleToolKit/T3Types/Symbol.cs index b10c932..eb775a3 100644 --- a/src/TelltaleToolKit/T3Types/Symbol.cs +++ b/src/TelltaleToolKit/T3Types/Symbol.cs @@ -3,13 +3,19 @@ namespace TelltaleToolKit.T3Types; /// -/// Represents a Telltale Tool symbol, identified by a CRC64 hash of its lowercase name. -/// Symbols can be in one of three states: -/// -/// Resolved: Both CRC64 and DebugString are known. DebugString can be overwritten. -/// Unresolved: Only CRC64 is known (DebugString is null). -/// Empty: CRC64 is 0, DebugString is empty. -/// +/// Represents a Telltale Tool symbol, identified by a CRC64 hash of its lowercase name. +/// Symbols can be in one of three states: +/// +/// +/// Resolved: Both CRC64 and DebugString are known. DebugString can be overwritten. +/// +/// +/// Unresolved: Only CRC64 is known (DebugString is null). +/// +/// +/// Empty: CRC64 is 0, DebugString is empty. +/// +/// /// public sealed class Symbol : IEquatable { @@ -31,19 +37,24 @@ private Symbol(string name, ulong crc64) Crc64 = crc64; } + public Symbol() : this(string.Empty) + { + + } + /// - /// Gets the empty symbol (CRC64 = 0, empty debug string). + /// Gets the empty symbol (CRC64 = 0, empty debug string). /// public static Symbol Empty { get; } = new(string.Empty, 0); /// - /// Gets the CRC64 hash that uniquely identifies this symbol. - /// This value never changes after construction. + /// Gets the CRC64 hash that uniquely identifies this symbol. + /// This value never changes after construction. /// public ulong Crc64 { get; } /// - /// Gets the human-readable name of this symbol, or null if unresolved. + /// Gets the human-readable name of this symbol, or null if unresolved. /// public string? DebugString { get; private set; } @@ -54,41 +65,44 @@ private Symbol(string name, ulong crc64) public bool IsUnresolved => DebugString is null; /// - /// Gets whether this is the canonical empty symbol (CRC64 = 0). + /// Gets whether this is the canonical empty symbol (CRC64 = 0). /// /// - /// Both and any symbol created via (0) - /// are considered empty, because CRC64 alone defines symbol identity. + /// Both and any symbol created via (0) + /// are considered empty, because CRC64 alone defines symbol identity. /// public bool IsEmpty => Crc64 == 0; /// - /// Gets whether the attached (if any) is consistent with . - /// Always returns false for unresolved symbols. + /// Gets whether the attached (if any) is consistent with . + /// Always returns false for unresolved symbols. /// public bool IsDebugStringConsistent => DebugString is not null && Crc64 == Hashing.Crc64.Compute(DebugString); - /// Creates a resolved symbol by computing CRC64 from . + /// + public bool Equals(Symbol? other) => other is not null && Crc64 == other.Crc64; + + /// Creates a resolved symbol by computing CRC64 from . /// The name is lowercased before hashing, making symbols case-insensitive. public static Symbol FromName(string name) => new(name); /// Creates an unresolved symbol from a raw CRC64 value. - /// Use later to attach a debug string. + /// Use later to attach a debug string. public static Symbol FromCrc64(ulong crc64) => crc64 == 0 ? Empty : new Symbol(crc64); /// - /// Creates a symbol with an explicitly provided name and CRC64, bypassing normal calculation. + /// Creates a symbol with an explicitly provided name and CRC64, bypassing normal calculation. /// /// - /// Intended for existing data that may have inconsistencies. - /// Use to verify consistency after construction. + /// Intended for existing data that may have inconsistencies. + /// Use to verify consistency after construction. /// public static Symbol FromExplicit(string name, ulong crc64) { - var symbol = new Symbol(name, crc64); + Symbol symbol = new(name, crc64); Debug.Assert( symbol.IsDebugStringConsistent, $"Symbol CRC mismatch: '{name}' hashes to 0x{Hashing.Crc64.Compute(name):X16}, but 0x{crc64:X16} was provided."); @@ -96,13 +110,13 @@ public static Symbol FromExplicit(string name, ulong crc64) } /// - /// Returns true if would hash to this symbol's . + /// Returns true if would hash to this symbol's . /// public bool MatchesName(string name) => Crc64 == Hashing.Crc64.Compute(name); /// - /// Attaches a debug string to an unresolved symbol. + /// Attaches a debug string to an unresolved symbol. /// /// The resolved name. public void Resolve(string name) @@ -113,24 +127,29 @@ public void Resolve(string name) } /// - /// Returns the debug string if resolved; otherwise the CRC64 in hex (e.g. 1A2B3C4D5E6F7890). + /// Returns the debug string if resolved; otherwise the CRC64 in hex (e.g. 1A2B3C4D5E6F7890). /// public override string ToString() => DebugString ?? $"0x{Crc64:X16}"; - /// - public bool Equals(Symbol? other) => other is not null && Crc64 == other.Crc64; - - /// + /// public override bool Equals(object? obj) => obj is Symbol other && Crc64 == other.Crc64; - /// - /// Based solely on , which is immutable. + /// + /// Based solely on , which is immutable. public override int GetHashCode() => Crc64.GetHashCode(); public static bool operator ==(Symbol? left, Symbol? right) { - if (ReferenceEquals(left, right)) return true; - if (left is null || right is null) return false; + if (ReferenceEquals(left, right)) + { + return true; + } + + if (left is null || right is null) + { + return false; + } + return left.Crc64 == right.Crc64; } diff --git a/src/TelltaleToolKit/T3Types/Textures/AlphaMode.cs b/src/TelltaleToolKit/T3Types/Textures/AlphaMode.cs index 0395dbb..46352c9 100644 --- a/src/TelltaleToolKit/T3Types/Textures/AlphaMode.cs +++ b/src/TelltaleToolKit/T3Types/Textures/AlphaMode.cs @@ -9,5 +9,5 @@ public enum AlphaMode Unknown = -1, NoAlpha = 0, AlphaTest = 1, - AlphaBlend = 2, + AlphaBlend = 2 } diff --git a/src/TelltaleToolKit/T3Types/Textures/AuxilaryData.cs b/src/TelltaleToolKit/T3Types/Textures/AuxilaryData.cs deleted file mode 100644 index 2c4ebab..0000000 --- a/src/TelltaleToolKit/T3Types/Textures/AuxilaryData.cs +++ /dev/null @@ -1 +0,0 @@ -namespace TelltaleToolKit.T3Types.Textures; diff --git a/src/TelltaleToolKit/T3Types/Textures/ColorMode.cs b/src/TelltaleToolKit/T3Types/Textures/ColorMode.cs index 5ffd0b2..0d9bc2c 100644 --- a/src/TelltaleToolKit/T3Types/Textures/ColorMode.cs +++ b/src/TelltaleToolKit/T3Types/Textures/ColorMode.cs @@ -4,12 +4,12 @@ namespace TelltaleToolKit.T3Types.Textures; [MetaSerializer(typeof(EnumSerializer))] - public enum ColorMode { - eTxColorUnknown = -1, - eTxColorFull = 0, - eTxColorBlack = 1, - eTxColorGrayscale = 2, - eTxColorGrayscaleAlpha = 3, + // eTxColor + Unknown = -1, + Full = 0, + Black = 1, + Grayscale = 2, + GrayscaleAlpha = 3 } diff --git a/src/TelltaleToolKit/T3Types/Textures/D3DTexture.cs b/src/TelltaleToolKit/T3Types/Textures/D3DTexture.cs deleted file mode 100644 index 611447d..0000000 --- a/src/TelltaleToolKit/T3Types/Textures/D3DTexture.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace TelltaleToolKit.T3Types.Textures; - - -// TODO: Merge with T3Texture -// [DataSerializerGlobal(typeof(D3DTextureClassSerializer))] -// public class D3DTexture -// { -// [MetaMember("mName")] public string Name { get; set; } = string.Empty; -// -// [MetaMember("mImportName")] public string ImportName { get; set; } = string.Empty; -// [MetaMember("mbHasTextureData")] public bool HasTextureData { get; set; } = false; -// -// [MetaMember("mbIsMipMapped")] public bool IsMipMapped { get; set; } = false; -// -// [MetaMember("mbIsWrapU")] public bool IsWrapU { get; set; } = false; -// -// [MetaMember("mbIsWrapV")] public bool IsWrapV { get; set; } = false; -// -// [MetaMember("mbIsFiltered")] public bool IsFiltered { get; set; } = false; -// -// [MetaMember("mNumMipLevels")] public uint NumMipLevels { get; set; } = 0; -// -// [MetaMember("mD3DFormat")] public uint D3DFormat { get; set; } = 0; -// -// [MetaMember("mWidth")] public uint Width { get; set; } = 0; -// -// [MetaMember("mHeight")] public uint Height { get; set; } = 0; -// -// [MetaMember("mType")] public int Type { get; set; } = 0; -// -// [MetaMember("mbAlphaHDR")] public bool AlphaHdr { get; set; } = false; -// -// [MetaMember("mbEncrypted")] public bool IsEncrypted { get; set; } = false; -// -// [MetaMember("mbUsedAsBumpmap")] public bool UsedAsBumpmap { get; set; } = false; -// -// [MetaMember("mbUsedAsDetailMap")] public bool UsedAsDetailMap { get; set; } = false; -// -// [MetaMember("mDetailMapBrightness")] public float DetailMapBrightness { get; set; } -// -// public byte[] DdsTextureData { get; set; } = []; -// -// public class D3DTextureClassSerializer : MetaSerializer -// { -// public override void Serialize(ref D3DTexture obj, MetaStream stream, MetaClass desc) -// { -// // Default Serializer -// new MetaClassSerializer().Serialize(ref obj, stream, desc); -// -// if (stream.Mode is MetaStreamMode.Write) -// { -// stream.Write(obj.DdsTextureData.Length); -// stream.Write(obj.DdsTextureData); -// } -// else if (stream.Mode is MetaStreamMode.Read) -// { -// if (!obj.HasTextureData) -// { -// return; -// } -// -// // T3MetaStream.SerializeByteArray(ref texture.DdsTextureData, stream); -// var bufferSize = stream.ReadInt32(); -// obj.DdsTextureData = stream.ReadBytes(bufferSize); -// } -// } -// } -// } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Texture.cs b/src/TelltaleToolKit/T3Types/Textures/T3Texture.cs index 3c4fc8a..9b54e4f 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Texture.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Texture.cs @@ -8,18 +8,21 @@ namespace TelltaleToolKit.T3Types.Textures; +/// +/// Main class for .d3dtx textures. (It is merged with D3DTexture) +/// [MetaSerializer(typeof(Serializer))] public class T3Texture { // Most members here are before Poker Night 2 /// - /// The name of the texture. + /// The name of the texture. /// [MetaMember("mName")] public string Name { get; set; } = string.Empty; /// - /// The import name of the texture. (The original file used for this texture.) + /// The import name of the texture. (The original file used for this texture.) /// [MetaMember("mImportName")] public string ImportName { get; set; } = string.Empty; @@ -43,22 +46,25 @@ public class T3Texture public bool EmbedMipMaps { get; set; } = false; /// - /// The number of mip map levels in the texture. + /// The number of mip map levels in the texture. /// [MetaMember("mNumMipLevels")] public uint NumMipLevels { get; set; } = 1; [MetaMember("mD3DFormat")] - public uint D3DFormat { get; set; } = 0; + public uint D3DFormatU { get; set; } = 0; + + [MetaMember("mD3DFormat")] + public int D3DFormatI { get; set; } = 0; /// - /// The pixel width of the texture. + /// The pixel width of the texture. /// [MetaMember("mWidth")] public uint Width { get; set; } = 1; /// - /// The pixel height of the texture. + /// The pixel height of the texture. /// [MetaMember("mHeight")] public uint Height { get; set; } = 1; @@ -67,14 +73,41 @@ public class T3Texture public int Type { get; set; } = 0; [MetaMember("mTextureDataFormats")] - public Flags TextureDataFormats { get; set; } = new Flags(); + public Flags TextureDataFormats { get; set; } = new(); + + [MetaMember("mFlags")] + public Flags Flags { get; set; } = new(); + + [MetaMember("mWiiTextureFormat")] + public int WiiTextureFormat { get; set; } + + [MetaMember("mWiiForceWidth")] + public uint WiiForceWidth { get; set; } + + [MetaMember("mWiiForceHeight")] + public uint WiiForceHeight { get; set; } + + [MetaMember("mbWiiForceUncompressed")] + public bool WiiForceUncompressed { get; set; } [MetaMember("mTplTexutreDataSize")] - public int TplTextureDataSize { get; set; } = 0; + public int TplTextureDataSize { get; set; } + + [MetaMember("mTplAlphaDataSize")] + public int TplAlphaDataSize { get; set; } + + [MetaMember("mJPEGTextureDataSize")] + public int JPEGTextureDataSize { get; set; } [MetaMember("mAlphaMode")] public int AlphaMode { get; set; } = 0; + [MetaMember("mExactAlphaMode")] + public int ExactAlphaMode { get; set; } = 0; + + [MetaMember("mNormalMapFmt")] + public uint NormalMapFmt { get; set; } = 0; + [MetaMember("mbAlphaHDR")] public bool AlphaHdr { get; set; } = false; @@ -99,165 +132,162 @@ public class T3Texture // =================================================== /// - /// The meta version of this texture. + /// The meta version of this texture. /// [MetaMember("mVersion")] public int Version { get; set; } /// - /// The sampler state, bitflag value that contains values from T3SamplerStateValue. + /// The sampler state, bitflag value that contains values from T3SamplerStateValue. /// [MetaMember("mSamplerState")] public T3SamplerStateBlock SamplerStateBlock { get; set; } = new(); /// - /// The platform type for this texture. + /// The platform type for this texture. /// [MetaMember("mPlatform")] - public EnumPlatformType PlatformType { get; set; } = new EnumPlatformType { Value = T3Types.PlatformType.None }; + public EnumPlatformType PlatformType { get; set; } = new() { Value = T3Types.PlatformType.None }; /// - /// The import scale of the texture file. + /// The import scale of the texture file. /// [MetaMember("mImportScale")] public float ImportScale { get; set; } = 1.0f; /// - /// The import specular power of the texture; + /// The import specular power of the texture; /// [MetaMember("mImportSpecularPower")] public float ImportSpecularPower { get; set; } /// - /// Whether or not the d3dtx texture contains properties. This was used for their runtime editor. (Always false) + /// Whether or not the d3dtx texture contains properties. This was used for their runtime editor. (Always false) /// [MetaMember("mToolProps")] public ToolProps ToolProps { get; set; } = new(); /// - /// The depth of a volume texture. + /// The depth of a volume texture. /// [MetaMember("mDepth")] public uint Depth { get; set; } = 1; /// - /// The array size of this texture. + /// The array size of this texture. /// [MetaMember("mArraySize")] public uint ArraySize { get; set; } = 1; /// - /// The pixel format for this texture. + /// The pixel format for this texture. /// [MetaMember("mSurfaceFormat")] public T3SurfaceFormat SurfaceFormat { get; set; } = T3SurfaceFormat.Unknown; /// - /// The texture layout for this texture. + /// The texture layout for this texture. /// [MetaMember("mTextureLayout")] public T3TextureLayout TextureLayout { get; set; } = T3TextureLayout.Texture2D; /// - /// The gamma of the texture. + /// The gamma of the texture. /// [MetaMember("mSurfaceGamma")] public T3SurfaceGamma SurfaceGamma { get; set; } = T3SurfaceGamma.Unknown; /// - /// The multisample (anisotropic) level of the texture. + /// The multisample (anisotropic) level of the texture. /// [MetaMember("mSurfaceMultisample")] public T3SurfaceMultisample SurfaceMultisample { get; set; } = T3SurfaceMultisample.None; /// - /// The resource usage of the texture. + /// The resource usage of the texture. /// [MetaMember("mResourceUsage")] public T3ResourceUsage ResourceUsage { get; set; } /// - /// The type of the texture. The enum version is for modern games. + /// The type of the texture. The enum version is for modern games. /// [MetaMember("mType")] public TextureType TypeEnum { get; set; } = TextureType.Standard; /// - /// [4 bytes] Defines the format of the normal map. + /// [4 bytes] Defines the format of the normal map. /// [MetaMember("mNormalMapFormat")] public int NormalMapFormat { get; set; } /// - /// Describes if the color channels were switched. (Usually used for normal maps, console textures and others.) + /// Describes if the color channels were switched. (Usually used for normal maps, console textures and others.) /// [MetaMember("mSwizzle")] - public RenderSwizzleParams Swizzle { get; set; } = new RenderSwizzleParams { Channel0 = 0, Channel1 = 1, Channel2 = 2, Channel3 = 3 }; + public RenderSwizzleParams Swizzle { get; set; } = new() { Channel0 = 0, Channel1 = 1, Channel2 = 2, Channel3 = 3 }; /// - /// The glossiness of the texture. + /// The glossiness of the texture. /// [MetaMember("mSpecularGlossExponent")] public float SpecularGlossExponent { get; set; } = 8.0f; /// - /// The brightness scale of the texture. (used for lightmaps) + /// The brightness scale of the texture. (used for lightmaps) /// [MetaMember("mHDRLightmapScale")] public float HdrLightmapScale { get; set; } = 6.0f; /// - /// The toon cutoff gradient of the texture. + /// The toon cutoff gradient of the texture. /// [MetaMember("mToonGradientCutoff")] public float ToonGradientCutoff { get; set; } = -1.0f; /// - /// The alpha type of the texture. (or what will have). + /// The alpha type of the texture. (or what will have). /// [MetaMember("mAlphaMode")] public AlphaMode AlphaModeEnum { get; set; } = Textures.AlphaMode.Unknown; /// - /// The color range of the texture. + /// The color range of the texture. /// [MetaMember("mColorMode")] - public ColorMode ColorMode { get; set; } = ColorMode.eTxColorUnknown; + public ColorMode ColorMode { get; set; } = ColorMode.Unknown; /// - /// A vector, defines the UV offset values when the shader on a material samples the texture. + /// A vector, defines the UV offset values when the shader on a material samples the texture. /// [MetaMember("mUVOffset")] public Vector2 UvOffset { get; set; } = Vector2.Zero; /// - /// A vector, defines the UV scale values when the shader on a material samples the texture. + /// A vector, defines the UV scale values when the shader on a material samples the texture. /// [MetaMember("mUVScale")] public Vector2 UvScale { get; set; } = Vector2.One; /// - /// An array containing frame names. (Usually unused) + /// An array containing frame names. (Usually unused) /// [MetaMember("mArrayFrameNames")] public List ArrayFrameNames { get; set; } = []; /// - /// An array containing a toon gradient region. (Usually unused) + /// An array containing a toon gradient region. (Usually unused) /// [MetaMember("mToonRegions")] public List ToonRegions { get; set; } = []; - public StreamHeader RegionMainHeader { get; set; } - /// - /// An array containing each pixel region in the texture. + /// An array containing each pixel region in the texture. /// public List RegionHeaders { get; set; } = []; - public List AuxilaryData { get; set; } = []; private byte[] ConsoleData { get; set; } = []; // PVR, PS3, Xbox 360, etc. @@ -265,6 +295,11 @@ public class T3Texture private byte[] WiiAlphaData { get; set; } = []; // Wii alpha data. private byte[] JpegData { get; set; } = []; // JPEG data. This is always nill. + + public T3Texture? Texture0x8; + public T3Texture? Texture0x10; + public T3Texture? Texture0x20; + // public ClassInstance? T3Texture { get; set; } // The main header of d3dtx. // public ClassInstance? StreamHeader { get; set; } // The stream header (appears after Poker Night 2). // List? Regions { get; set; } // The regions of the texture (appears after Poker Night 2). @@ -275,7 +310,9 @@ public class T3Texture public void Decrypt(Blowfish blowfish) { if (!IsEncrypted) + { return; + } const int maxEncryptedTextureBufferSize = 2048; int bytesToDecipher = Math.Min(maxEncryptedTextureBufferSize, DdsTextureData.Length); @@ -286,7 +323,9 @@ public void Decrypt(Blowfish blowfish) public void Encrypt(Blowfish blowfish) { if (IsEncrypted) + { return; + } const int maxEncryptedTextureBufferSize = 2048; int bytesToDecipher = Math.Min(maxEncryptedTextureBufferSize, DdsTextureData.Length); @@ -294,6 +333,35 @@ public void Encrypt(Blowfish blowfish) IsEncrypted = true; } + /// + /// Determines if the texture layout represents a cubemap or a cubemap array. + /// + /// True if the texture is a cubemap or cubemap array; otherwise, false. + public bool IsCubemap() + => TextureLayout is T3TextureLayout.TextureCubemap or T3TextureLayout.TextureCubemapArray; + + /// + /// Determines if the texture layout represents a volumetric (3D) texture. + /// + /// True if the texture is a 3D volumemap; otherwise, false. + public bool IsVolumemap() + => TextureLayout == T3TextureLayout.Texture3D; + + /// + /// Determines if the texture layout represents an array texture (2D array or cubemap array). + /// + /// True if the texture is a 2D array or cubemap array; otherwise, false. + public bool IsArrayTexture() + => TextureLayout is T3TextureLayout.Texture2DArray or T3TextureLayout.TextureCubemapArray; + + /// + /// Indicates whether this texture uses the legacy D3DTX format. + /// The first version to not use this format is version 3, assuming version 1 and 2 do not exist. + /// + /// True if the texture version is 2 or below; otherwise, false. + public bool IsLegacyD3DTX() + => Version <= 2; + [MetaSerializer(typeof(MetaClassSerializer))] public struct StreamHeader { @@ -342,14 +410,16 @@ public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassT3TextureSerializer = new(); - public override void PreSerialize(ref T3Texture? obj, MetaStream stream, MetaClassType? type = null) - { + public override void PreSerialize(ref T3Texture? obj, MetaStream stream, MetaClassType? type = null) => obj ??= new T3Texture(); - } - public override void Serialize(ref T3Texture obj, MetaStream stream) + public override void Serialize(ref T3Texture obj, MetaStream stream, MetaClassType? type = null) { + // Don't forget for other textures... + obj.TplTextureDataSize = obj.TplTextureData.Length; + // Default Serializer + s_metaClassT3TextureSerializer.PreSerialize(ref obj!, stream); s_metaClassT3TextureSerializer.Serialize(ref obj, stream); // The default serializer will throw if there is no serialized T3Texture. @@ -370,13 +440,12 @@ public override void Serialize(ref T3Texture obj, MetaStream stream) }; StreamHeader streamHeader = obj.RegionMainHeader; - Toolkit.Instance.GetSerializer().Serialize(ref streamHeader, stream); + stream.Serialize(ref streamHeader); foreach (RegionStreamHeader region in obj.RegionHeaders) { RegionStreamHeader regionStreamHeader = region; - Toolkit.Instance.GetSerializer() - .Serialize(ref regionStreamHeader, stream); + stream.Serialize(ref regionStreamHeader); } // One would assume that we can combine the loops into one. @@ -407,22 +476,21 @@ public override void Serialize(ref T3Texture obj, MetaStream stream) } } } - else if (stream.Mode is MetaStreamMode.Read) + else { // This is easier than checking for region stream headers. That can also work. if (classDescription.ContainsMember("mVersion")) { StreamHeader streamHeader = obj.RegionMainHeader; - Toolkit.Instance.GetSerializer()?.Serialize(ref streamHeader, stream); + stream.Serialize(ref streamHeader); obj.RegionMainHeader = streamHeader; obj.RegionHeaders = new List(streamHeader.RegionCount); - for (var i = 0; i < streamHeader.RegionCount; i++) + for (int i = 0; i < streamHeader.RegionCount; i++) { - var regionStreamHeader = new RegionStreamHeader(); - Toolkit.Instance.GetSerializer() - .Serialize(ref regionStreamHeader, stream); + RegionStreamHeader regionStreamHeader = new(); + stream.Serialize(ref regionStreamHeader); obj.RegionHeaders.Add(regionStreamHeader); } @@ -432,10 +500,10 @@ public override void Serialize(ref T3Texture obj, MetaStream stream) obj.AuxilaryData = new List(streamHeader.AuxDataCount); stream.BeginBlock(); - for (var i = 0; i < obj.RegionMainHeader.AuxDataCount; i++) + for (int i = 0; i < obj.RegionMainHeader.AuxDataCount; i++) { - var aux = new AuxiliaryData(); - Toolkit.Instance.GetSerializer().Serialize(ref aux, stream); + AuxiliaryData aux = new(); + stream.Serialize(ref aux); obj.AuxilaryData.Add(aux); } @@ -462,20 +530,42 @@ public override void Serialize(ref T3Texture obj, MetaStream stream) } else { - if (!obj.HasTextureData) + if (obj.HasTextureData) { - return; + int bufferSize = stream.ReadInt32(); + obj.DdsTextureData = stream.ReadBytes(bufferSize); } - int bufferSize = stream.ReadInt32(); - obj.DdsTextureData = stream.ReadBytes(bufferSize); + // TODO: Add suport Xbox, PS3, Wii, etc. + // TODO: Verify if this is correct - if (obj.TplTextureDataSize > 0) + if (obj.TplTextureDataSize > 0 && obj.TextureDataFormats.Has(0x4)) { obj.TplTextureData = new byte[obj.TplTextureDataSize]; obj.TplTextureData = stream.ReadBytes(obj.TplTextureDataSize); } + + // what the fuck + if (obj.TextureDataFormats.Has(0x8)) + { + stream.Serialize(ref obj.Texture0x8); + } + if (obj.TextureDataFormats.Has(0x10)) + { + stream.Serialize(ref obj.Texture0x10); + } + if (obj.TextureDataFormats.Has(0x20)) + { + stream.Serialize(ref obj.Texture0x20); + } + + if (obj.TextureDataFormats.Has(0x40)) + { + obj.WiiColorData = new byte[obj.WiiForceHeight * obj.WiiForceWidth * 3]; + stream.ReadBytes(obj.WiiColorData); + } + // 0x40 is raw RGB data buffer } } } @@ -504,33 +594,4 @@ public class AuxiliaryData [MetaMember("mData")] public BinaryBuffer Data { get; set; } = new(); } - - /// - /// Determines if the texture layout represents a cubemap or a cubemap array. - /// - /// True if the texture is a cubemap or cubemap array; otherwise, false. - public bool IsCubemap() - => TextureLayout is T3TextureLayout.TextureCubemap or T3TextureLayout.TextureCubemapArray; - - /// - /// Determines if the texture layout represents a volumetric (3D) texture. - /// - /// True if the texture is a 3D volumemap; otherwise, false. - public bool IsVolumemap() - => TextureLayout == T3TextureLayout.Texture3D; - - /// - /// Determines if the texture layout represents an array texture (2D array or cubemap array). - /// - /// True if the texture is a 2D array or cubemap array; otherwise, false. - public bool IsArrayTexture() - => TextureLayout is T3TextureLayout.Texture2DArray or T3TextureLayout.TextureCubemapArray; - - /// - /// Indicates whether this texture uses the legacy D3DTX format. - /// The first version to not use this format is version 3, assuming version 1 and 2 do not exist. - /// - /// True if the texture version is 2 or below; otherwise, false. - public bool IsLegacyD3DTX() - => Version <= 2; } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3PlatformType.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3PlatformType.cs index 712dc0d..6e57731 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3PlatformType.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3PlatformType.cs @@ -70,5 +70,5 @@ public enum PlatformType [Display(Name = "Nintendo Switch")] NX = 15, - Count = 16, + Count = 16 } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3ResourceUsage.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3ResourceUsage.cs index a010909..0607e83 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3ResourceUsage.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3ResourceUsage.cs @@ -11,5 +11,5 @@ public enum T3ResourceUsage Dynamic = 1, System = 2, RenderTarget = 3, - ShaderWrite = 4, + ShaderWrite = 4 } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateBlock.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateBlock.cs index 5c3cfbd..0a15bd6 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateBlock.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateBlock.cs @@ -5,36 +5,64 @@ namespace TelltaleToolKit.T3Types.Textures.T3Types; /// -/// Compact sampler state packed into a single 32-bit unsigned integer. -/// Bit layout (inclusive): -/// bits 0..3 : WrapU (4 bits) -/// bits 4..7 : WrapV (4 bits) -/// bit 8 : Filtered (1 bit) -/// bits 9..12 : Border Color (4 bits) -/// bit 13 : Gamma Correct (1 bit) -/// bits 14..21 : Mip Bias (8 bits) -/// Remaining bits unused/reserved. -/// -/// This class provides typed accessors and several utility functions. +/// Compact sampler state packed into a single 32-bit unsigned integer. +/// Bit layout (inclusive): +/// bits 0..3 : WrapU (4 bits) +/// bits 4..7 : WrapV (4 bits) +/// bit 8 : Filtered (1 bit) +/// bits 9..12 : Border Color (4 bits) +/// bit 13 : Gamma Correct (1 bit) +/// bits 14..21 : Mip Bias (8 bits) +/// Remaining bits unused/reserved. +/// This class provides typed accessors and several utility functions. /// [MetaSerializer(typeof(MetaClassSerializer))] public class T3SamplerStateBlock { - [MetaMember("mData")] - public uint Data { get; set; } + public enum T3SamplerStateValue + { + // eSamplerState_..._Value + WrapU = 0x0, // TextureWrapMode. + WrapV = 0x1, // TextureWrapMode. + Filtered = 0x2, // bool + BorderColor = 0x3, // TextureBorderColor + GammaCorrect = 0x4, // bool + MipBias = 0x5 // char + } - private struct Entry + public enum TextureBorderColor { - public int Shift; - public uint Mask; + // TEXTURE_BORDER_COLOR_ + Black = 0, // Color(0,0,0,0) + White = 1 // Color(1,1,1,1) + } - public Entry(int shift, int width) - { - Shift = shift; - Mask = (1u << width) - 1u << shift; - } + public enum TextureWrapMode + { + // Texture_Wrap + Clamp = 0, + Wrap = 1, + Border = 2 } + private static readonly Entry[] Entries = + [ + new(0, 4), // WrapU + + new(4, 4), // WrapV + + new(8, 1), // Filter + + new(9, 4), // Border + + new(13, 1), // Gamma + + new(14, 8) // MipBias + ]; + + [MetaMember("mData")] + public uint Data { get; set; } + [MetaMember("Wrap U")] public TextureWrapMode WrapU { @@ -92,45 +120,15 @@ private void InternalSet(T3SamplerStateValue state, uint value) Data = (Data & ~e.Mask) | ((value << e.Shift) & e.Mask); } - private static readonly Entry[] Entries = - [ - new Entry(0, 4), // WrapU - - new Entry(4, 4), // WrapV - - new Entry(8, 1), // Filter - - new Entry(9, 4), // Border - - new Entry(13, 1), // Gamma - - new Entry(14, 8) // MipBias - ]; - - - public enum T3SamplerStateValue - { - // eSamplerState_..._Value - WrapU = 0x0, // TextureWrapMode. - WrapV = 0x1, // TextureWrapMode. - Filtered = 0x2, // bool - BorderColor = 0x3, // TextureBorderColor - GammaCorrect = 0x4, // bool - MipBias = 0x5, // char - } - - public enum TextureWrapMode + private struct Entry { - // Texture_Wrap - Clamp = 0, - Wrap = 1, - Border = 2, - } + public readonly int Shift; + public readonly uint Mask; - public enum TextureBorderColor - { - // TEXTURE_BORDER_COLOR_ - Black = 0, // Color(0,0,0,0) - White = 1, // Color(1,1,1,1) + public Entry(int shift, int width) + { + Shift = shift; + Mask = ((1u << width) - 1u) << shift; + } } } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateValues.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateValues.cs index 8483e7a..639c95b 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateValues.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SamplerStateValues.cs @@ -9,5 +9,5 @@ public enum T3SamplerStateValue BorderColor = 0x1E00, // 7680 GammaCorrect = 0x2000, // 8192 MipBias = 0x3FC000, // 4177920 - Count = 0x6, -} \ No newline at end of file + Count = 0x6 +} diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceFormat.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceFormat.cs index 2dc23fc..4329b0d 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceFormat.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceFormat.cs @@ -7,6 +7,7 @@ namespace TelltaleToolKit.T3Types.Textures.T3Types; public enum T3SurfaceFormat { // Note: Apparently, some of these formats are equivalent to each other. It's just that some are used for Direct3D9, while others are used for Direct3D11. + #region DXGI_FORMATS / D3DFMT // I am using DXGI channel ordering. @@ -121,6 +122,7 @@ public enum T3SurfaceFormat #endregion #region Depth/Stencil Formats + /* PCF probably stands for percentage-closer filtering, which is used for shadow mapping. No idea why it's different than Depth16 and Depth24. https://github.com/bkaradzic/bimg/blob/master/src/image.cpp @@ -210,8 +212,10 @@ public enum T3SurfaceFormat // ETC2 EAC RGBA ETC2_RGBA = 0x73, //73h + // ETC2 EAC R11 ETC2_R = 0x74, //74h + // ETC2 EAC RG11 ETC2_RG = 0x75, //75h @@ -219,8 +223,9 @@ public enum T3SurfaceFormat ASTC_RGBA_4x4 = 0x80, //80h #endregion + FrontBuffer = 0x90, //90h Count = 0x91, //91h - Unknown = unchecked((int)0xFFFFFFFF), //0FFFFFFFFh + Unknown = unchecked((int)0xFFFFFFFF) //0FFFFFFFFh } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceGamma.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceGamma.cs index 631104a..07b00dc 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceGamma.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceGamma.cs @@ -4,12 +4,12 @@ namespace TelltaleToolKit.T3Types.Textures.T3Types; /// -/// The gamma of the surface. In Telltale Tool it is represented as eSurfaceGamma. +/// The gamma of the surface. In Telltale Tool it is represented as eSurfaceGamma. /// [MetaSerializer(typeof(EnumSerializer))] public enum T3SurfaceGamma { Unknown = -1, Linear = 0, - sRGB = 1, + sRGB = 1 } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceMultisample.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceMultisample.cs index ccb7863..b6b027f 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceMultisample.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3SurfaceMultisample.cs @@ -11,5 +11,5 @@ public enum T3SurfaceMultisample X2 = 1, // X2 X4 = 2, // X4 X8 = 3, // X8 - X16 = 4, // X16 + X16 = 4 // X16 } diff --git a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3TextureLayout.cs b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3TextureLayout.cs index 85327c2..9787cda 100644 --- a/src/TelltaleToolKit/T3Types/Textures/T3Types/T3TextureLayout.cs +++ b/src/TelltaleToolKit/T3Types/Textures/T3Types/T3TextureLayout.cs @@ -4,7 +4,6 @@ namespace TelltaleToolKit.T3Types.Textures.T3Types; [MetaSerializer(typeof(EnumSerializer))] - public enum T3TextureLayout { Unknown = -1, @@ -13,5 +12,5 @@ public enum T3TextureLayout Texture3D = 2, Texture2DArray = 3, TextureCubemapArray = 4, - TextureCount = 5, + TextureCount = 5 } diff --git a/src/TelltaleToolKit/T3Types/Textures/TextureType.cs b/src/TelltaleToolKit/T3Types/Textures/TextureType.cs index ae562fb..6e85987 100644 --- a/src/TelltaleToolKit/T3Types/Textures/TextureType.cs +++ b/src/TelltaleToolKit/T3Types/Textures/TextureType.cs @@ -47,5 +47,5 @@ public enum TextureType NormalXyMap = 38, LightmapFlatAtlas = 39, LookupXy = 40, - ObjectNormalMap = 41, + ObjectNormalMap = 41 } diff --git a/src/TelltaleToolKit/T3Types/Textures/WiiTextureFormat.cs b/src/TelltaleToolKit/T3Types/Textures/WiiTextureFormat.cs index 1289f4f..a6ad5ea 100644 --- a/src/TelltaleToolKit/T3Types/Textures/WiiTextureFormat.cs +++ b/src/TelltaleToolKit/T3Types/Textures/WiiTextureFormat.cs @@ -2,7 +2,8 @@ namespace TelltaleToolKit.T3Types.Textures; public enum WiiTextureFormat { - eTxWiiFormatDefault, - eTxWiiFormatAlphaOnly, - eTxWiiFormatRGBA24, -} \ No newline at end of file + // eTxWiiFormat + Default, + AlphaOnly, + RGBA24 +} diff --git a/src/TelltaleToolKit/T3Types/TransitionMap.cs b/src/TelltaleToolKit/T3Types/TransitionMap.cs index c37094f..1ae5b27 100644 --- a/src/TelltaleToolKit/T3Types/TransitionMap.cs +++ b/src/TelltaleToolKit/T3Types/TransitionMap.cs @@ -5,19 +5,22 @@ namespace TelltaleToolKit.T3Types; /// -/// Main class for .tmap files. +/// Main class for .tmap files. /// [MetaSerializer(typeof(MetaClassSerializer))] public class TransitionMap { // Symbols can be both strings and crc64s. - [MetaMember("mRemapper")] - public Dictionary TransitionRemappers = new(); + [MetaMember("mTransitionRemappers")] + public Dictionary TransitionRemappersS { get; set; } = []; + + [MetaMember("mTransitionRemappers")] + public Dictionary TransitionRemappers { get; set; } = []; [MetaSerializer(typeof(MetaClassSerializer))] public class TransitionMapInfo { [MetaMember("mRemapper")] - public TransitionRemapper Remapper = new(); + public TransitionRemapper Remapper { get; set; } = new(); } } diff --git a/src/TelltaleToolKit/T3Types/TransitionRemapper.cs b/src/TelltaleToolKit/T3Types/TransitionRemapper.cs index bce5aab..7de0d00 100644 --- a/src/TelltaleToolKit/T3Types/TransitionRemapper.cs +++ b/src/TelltaleToolKit/T3Types/TransitionRemapper.cs @@ -9,5 +9,5 @@ namespace TelltaleToolKit.T3Types; public class TransitionRemapper { [MetaMember("mRemapKeys")] - public KeyframedValue RemapKeys = new(); + public KeyframedValue RemapKeys { get; set; } = new(); } diff --git a/src/TelltaleToolKit/T3Types/UID.cs b/src/TelltaleToolKit/T3Types/UID.cs index 2075bbe..1743e67 100644 --- a/src/TelltaleToolKit/T3Types/UID.cs +++ b/src/TelltaleToolKit/T3Types/UID.cs @@ -33,7 +33,7 @@ public interface IOwner } } - + [MetaSerializer(typeof(Serializer))] public class ActingOverridablePropOwner { // I prefer chicken. @@ -43,55 +43,78 @@ public class ActingOverridablePropOwner public Flags SerializationFlags { get; set; } [MetaMember("mpOverridableValues")] - public PropertySet OverridableValues { get; set; } = new(); + public PropertySet? OverridableValues { get; set; } = new(); [MetaMember("mhParent")] public Handle Parent { get; set; } = new(); - // TODO: Add helper functions - // TODO: Add a proper serializer - } - - [MetaSerializer(typeof(ActingOverridablePropOwnerSerializer))] - public class ActingOverridablePropOwnerSerializer : MetaSerializer - { - private static readonly MetaClassSerializer s_metaClassSerializer = new(); + public uint Header { get; set; } - public override void PreSerialize(ref ActingOverridablePropOwner? obj, MetaStream stream, - MetaClassType? type = null) + public class Serializer : MetaSerializer { - if (obj is null) - { - obj = new ActingOverridablePropOwner(); - } - } + private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref ActingOverridablePropOwner obj, MetaStream stream) - { - if (stream.Mode is MetaStreamMode.Write) + public override void PreSerialize(ref ActingOverridablePropOwner? obj, MetaStream stream, + MetaClassType? type = null) { - throw new NotImplementedException(); + obj ??= new ActingOverridablePropOwner(); } - if (stream.Mode is MetaStreamMode.Read) + public override void Serialize(ref ActingOverridablePropOwner obj, MetaStream stream, + MetaClassType? type = null) { - long currPos = stream.GetPosition(); - uint value = stream.ReadUInt32(); - - if (value == ActingOverridablePropOwner.kHeader) + if (stream.Mode is MetaStreamMode.Write) { - s_metaClassSerializer.PreSerialize(ref obj, stream); - s_metaClassSerializer.Serialize(ref obj, stream); - return; + bool hasValues = obj.OverridableValues is { Properties.Count: > 0 }; + if (hasValues) + obj.SerializationFlags.Clear(1); // clear bit 0 + else + obj.SerializationFlags.Set(1); + + if (obj.Header == kHeader) + { + stream.Write(kHeader); + s_metaClassSerializer.PreSerialize(ref obj!, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + } + + if (hasValues) + { + PropertySet? propertySet = obj.OverridableValues; + stream.Serialize(ref propertySet); + } + } + else + { + long startPos = stream.GetPosition(); + uint header = stream.ReadUInt32(); + + if (header == kHeader) + { + s_metaClassSerializer.PreSerialize(ref obj!, stream); + s_metaClassSerializer.Serialize(ref obj, stream); + + if ((obj.SerializationFlags.Data & 1) == 0) // has values + { + PropertySet propertySet = new(); + stream.Serialize(ref propertySet); + obj.OverridableValues = propertySet; + } + else + { + obj.OverridableValues = null; // or empty PropertySet, as needed + } + } + else + { + stream.SetPosition(startPos); + PropertySet propertySet = new(); + stream.Serialize(ref propertySet); + obj.OverridableValues = propertySet; + } } - - stream.SetPosition(currPos); - if ((obj.SerializationFlags.Data & 1) == 0) - return; - - PropertySet propertySet = obj.OverridableValues; - stream.Serialize(ref propertySet); } } + // TODO: Add helper functions } } diff --git a/src/TelltaleToolKit/T3Types/Vers.cs b/src/TelltaleToolKit/T3Types/Vers.cs index 9f1edee..28b39b5 100644 --- a/src/TelltaleToolKit/T3Types/Vers.cs +++ b/src/TelltaleToolKit/T3Types/Vers.cs @@ -1,4 +1,5 @@ -using TelltaleToolKit.Meta.Serialization; +using TelltaleToolKit.Meta.Reflection; +using TelltaleToolKit.Meta.Serialization; namespace TelltaleToolKit.T3Types; @@ -29,7 +30,7 @@ public override string ToString() => [MetaSerializer(typeof(VersSerializer))] public class VersSerializer : MetaSerializer { - public override void Serialize(ref Vers obj, MetaStream stream) + public override void Serialize(ref Vers obj, MetaStream stream, MetaClassType? type = null) { PreSerialize(ref obj, stream); diff --git a/src/TelltaleToolKit/T3Types/Voice/VoiceData.cs b/src/TelltaleToolKit/T3Types/Voice/VoiceData.cs index 998b967..121de82 100644 --- a/src/TelltaleToolKit/T3Types/Voice/VoiceData.cs +++ b/src/TelltaleToolKit/T3Types/Voice/VoiceData.cs @@ -4,6 +4,9 @@ namespace TelltaleToolKit.T3Types.Voice; +/// +/// Represents the class for .vox files. +/// [MetaSerializer(typeof(Serializer))] public class VoiceData { @@ -14,7 +17,7 @@ public class VoiceData public float Length { get; set; } = 0.0f; [MetaMember("mAllPacketsSize")] - public int AllPacketsSize => VoiceDataBuffer.Length; + public int AllPacketsSize { get; set; } [MetaMember("mPacketSamples")] public int PacketSamples { get; set; } = 0; @@ -28,16 +31,20 @@ public class VoiceData [MetaMember("mPacketPositions")] public List PacketPositions { get; set; } = []; - public byte[] VoiceDataBuffer { get; set; } - + public byte[] VoiceDataBuffer { get; set; } = []; public class Serializer : MetaSerializer { private static readonly MetaClassSerializer s_metaClassSerializer = new(); - public override void Serialize(ref VoiceData obj, MetaStream stream) + public override void PreSerialize(ref VoiceData? obj, MetaStream stream, MetaClassType? type = null) + { + obj ??= new VoiceData(); + } + + public override void Serialize(ref VoiceData obj, MetaStream stream, MetaClassType? type = null) { - s_metaClassSerializer.PreSerialize(ref obj, stream); + s_metaClassSerializer.PreSerialize(ref obj!, stream); s_metaClassSerializer.Serialize(ref obj, stream); if (stream.Mode is MetaStreamMode.Write) diff --git a/src/TelltaleToolKit/T3Types/WalkBoxes/WalkBoxes.cs b/src/TelltaleToolKit/T3Types/WalkBoxes/WalkBoxes.cs index c79a47e..48977e4 100644 --- a/src/TelltaleToolKit/T3Types/WalkBoxes/WalkBoxes.cs +++ b/src/TelltaleToolKit/T3Types/WalkBoxes/WalkBoxes.cs @@ -2,11 +2,12 @@ using TelltaleToolKit.Meta.Reflection; using TelltaleToolKit.Meta.Serialization; using TelltaleToolKit.Meta.Serialization.Serializers; +using TelltaleToolKit.T3Types.Audio; namespace TelltaleToolKit.T3Types.WalkBoxes; /// -/// Represents the class for .wbox files. +/// Represents the class for .wbox (Walkbox) files. /// [MetaSerializer(typeof(MetaClassSerializer))] public class WalkBoxes @@ -74,6 +75,9 @@ public class Tri [MetaMember("mVertScales")] public float[] VertScales { get; set; } = new float[3]; + + [MetaMember("mFootstepMaterial")] + public SoundFootsteps.EnumMaterial FootstepMaterial { get; set; } } [MetaSerializer(typeof(MetaClassSerializer))] diff --git a/src/TelltaleToolKit/Toolkit.cs b/src/TelltaleToolKit/Toolkit.cs index 3b7077a..79b4636 100644 --- a/src/TelltaleToolKit/Toolkit.cs +++ b/src/TelltaleToolKit/Toolkit.cs @@ -505,8 +505,7 @@ public static bool IsMetaFile(Stream stream) /// /// Returns the typed serializer for . /// - public MetaSerializer GetSerializer() where T : new() - => SerializerSelector.GetSerializer(); + public MetaSerializer GetSerializer() => SerializerSelector.GetSerializer(); /// /// Returns the serializer for the given runtime . @@ -539,7 +538,7 @@ private void LoadGameProfiles(string dataFolder) if (!Directory.Exists(profilesPath)) { ToolkitLogger.ConsoleLoggerInstance.LogError($"Game profiles directory not found: {profilesPath}, from config data folder: {dataFolder}"); - + return; }