feat: QOS (007: Quantum of Solace) support#894
Conversation
| if (potentialTextureDefs.size() == 1) | ||
| return GetImageFromTextureDef(*potentialTextureDefs[0]); | ||
|
|
||
| #ifdef FEATURE_QOS |
There was a problem hiding this comment.
This feels hacky, you can probably find a better solution than me
| @@ -0,0 +1,142 @@ | |||
| #include "ZoneLoaderFactoryQOS.h" | |||
There was a problem hiding this comment.
QoS seems to be the odd one out here because its fastfile header does not have the usual ASCII magic string. The first 4 bytes of ZoneHeader::m_magic are the zone version (470), while ZoneHeader::m_version is actually the first xblock size. The remaining xblock sizes follow directly after the normal header.
That is why this factory does not use the usual StepLoadZoneSizes/StepAllocXBlocks sequence and has a small QoS-specific allocation step instead.
Feel free to refactor it
| XAsset* assets; | ||
| }; | ||
|
|
||
| using AssetXModelPieces = Asset<ASSET_TYPE_XMODELPIECES, XModelPieces>; |
There was a problem hiding this comment.
Sorry I did not clean these up, I will leave that to you 😛
|
|
||
| namespace | ||
| { | ||
| constexpr const char* ASSET_TYPE_NAMES[]{ |
There was a problem hiding this comment.
Sorry I forgot to normalise these
|
Tested and confirmed working on QoS PC version 1.1, via @ProjectConsolation . |

Summary
Adds initial support for
QOS/007: Quantum of SolacePC fastfiles.Closes #349.
The current goal is not to claim that every QoS struct is fully understood. It is to make the retail PC fastfiles loadable, unlinkable, and inspectable while keeping the inferred parts of the layouts obvious for future work.
Notes
QoS is close to the IW3/T4 engine family. The structs in this PR are mostly inferred from the QoS PC and Wii loader/decomp, with IW3/T4 used as a guide where the code paths clearly line up.
Some details that may be useful while reviewing:
temp,runtime,virtual,large, andphysical.Unknown fields are intentionally left as unknown/padding rather than given confident names too early. The current names can be tightened as more QoS-specific code paths are reversed.
Current coverage
Added a few easy wins for dumpers and loaders and fleshed out the zone writing as well.
QoS is also wired into ModMan; images and xmodels can be inspected there.
Validation
.zonefiles.--load-referenced existing assets, then listed/unlinked the result as a basic roundtrip check.One known dump-time filename collision can happen with
ui_mp.ff:This happens because the dump output can contain a nested
ui_mpdirectory and a trailing rawfile asset also namedui_mp.I guess this can happen with any game in OAT.
Useful Resources