-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[UNLINKER] Add Support to Fastfile for PS3 and Xbox 360 #298
Comments
Adding support for console versions is not trivial as OAT is not currently endian aware. |
I understand, but would it be possible to help me understand the file based on your experience with PC so that I can at least create an extractor and inserter for the .str? |
No matter how small the change you want to make, everything Jezuz said needs to happen. You can't just say, let me insert a string into a fastfile because OAT does not even know how to open the file. A lot of work needs to be done to make OAT endian aware and then at the end, treat the console counter parts for each PC game like a completely separate game because the assets changed. Not to mention that to test anything to even confirm OAT works you need to rely of incomplete emulation tools or a modded console. |
Hey, thanks for the suggestion. I guess there is a bunch of reasons to support console fastfiles, it would be nice to be able to dump for example beta builds and also release builds. The issue I see with what you are saying though is the following: Idk if that also applies to consoles so whether they are also signed. If they are though, it will not be possible to load custom fastfiles without a modified game. Other than that supporting console fastfiles requires a lot of work to be done as the others mentioned above.
As it stands currently it doesn't have a very high priority i'm afraid since it requires rewriting large chunks of the zone code generator and other load/write components. |
Thank you for the clarifications! Yes, the MP has this verification hash, which was exploited for consoles years ago, but I'm not sure if it's valid in the latest versions of the game. What I found out about the console's FF is that it's in zlib format, and I managed to decompress the various chunks of the .ff file. However, my knowledge stops there because what I'd like to understand at this point is how the .zone file is unpacked, as it’s possible to view plain text via hex for strings and gcs/scripts. Understanding the extraction logic behind the .zone would likely make it easier to insert modified data for testing. |
I've been researching tools regarding console FF's lately. I'd love to see some console support in OAT! Some info might be of use to someone: IW3PS3Both the SP and MP FFs are unsigned. Python code to extract zone from FF
Xbox 360
Build 328 and Retail MP FFs are signed but the executable can be patched to ignore the signature. Python code to extract zone from FF
I'd love to learn more about zone files and how they work. Could OAT add some technical docs or a markdown file explaining how zone files and OAT work? It’d be a helpful resource for newcomers, giving them a quick overview of the architecture and internals without having to dive straight into the code. |
A technical documentation of both, how fastfiles are structured/how they work, and the design of OAT would be helpful, you are right. While the exact details on how fastfiles work of course depend on the game, the rough concept is that are more or less a memory dump of the asset structs of the game with pointers being replaced by offsets to the beginning of the memory they will be loaded in. So to be able to parse the data correctly you have to know the structs of the game assets and how they generally refer to another. Like for example the struct for an image (GfxImage) being X bytes big, having a string (its name) in offset 0 and a pointer to an array of texture definitions at offset Y with the amount of textures being defined in an uint16 at offset Z. After a preamble of headers, the root of that logic is a struct "XAssetList" that contains a list of all assets inside the fastfile. Since the loading code is heavily based on the game structs, the original devs very obviously generated the code which is what I also did with OAT. It outputs code for loading and writing the respective assets from and to fastfiles. So all in all it's unfortunately not a very easy format to parse, while I must definitely overengineered a bit since this started as a fun project I experimented on, trying to parse fastfiles does come with a good amount of complexity. Since you cannot skip forward in the file really, it is also not very easy to make something reliable that only implements a subset of the assets of the game since there are no markers to where an asset starts and where it ends (some other tools can dump rawfiles and stringtables though by searching for recognizable ASCII sequences). I hope that gives a rough idea of how these files work and why big endian and code duplication are challenges that need tackling to be able to implement console files as well 😅 |
ALL T6 fastfiles from the earliest known build onwards for all platforms, and binaries are signed. Technically the T6 console (debug only?) builds can load unsigned fastfiles under certain circumstances so it might be possible to use OAT to generate an unsigned fastfile that one of those builds could load. Depending on the build however, it may be required to implement XCompress to handle Xbox 360 fastfiles that used it, instead of zlib. T6 PC builds cannot load unsigned fastfiles under any circumstances without modifying the binary, even for SP, primarily due to CEG being utilized to protect fastfile authentication. |
There is more reason to look into this now that there are console exclusive maps that could be ported to PC. |
Hello, how are you? Thank you for the project!
I would like to translate the games in the franchise for PS3 and Xbox 360 into Brazilian Portuguese, since only BO2 and later games originally came with a translation. Would it be possible to add support for PS3 and Xbox 360 fastfile, or guide me on how I can extract the ff files from these consoles to access the .str files for this purpose?
I'll leave a sample of the code_post where the subtitles are supposedly located.
code_post_gfx.zip
The text was updated successfully, but these errors were encountered: