My set of tools. The code is more important than the features, so feel free to reuse it. 🙂
Table of contents
Supported features
Name | Revision | Decompiler | Compiler | Source* |
---|---|---|---|---|
Black Ops 3 (T7) | 1B | Partial | ✅ | ate47/bo3-source |
Black Ops 3 (T7) | 1C | ✅ | ✅ | ate47/bo3-source |
Black Ops 4 (T8) | 36 | ✅ | ✅ | ate47/bo4-source |
Black Ops Cold War (T9) | 37 | DEC | ✅ | ate47/bocw-source |
Black Ops Cold War (T9) | 38 | DEC | ✅ | ate47/bocw-source |
Modern Warfare III (JUP) | 8A | ✅ | ✅ | ate47/mwiii-source |
Modern Warfare III (JUP) | 8B | DEC | ✅ | ate47/mwiii-source |
Black Ops 6 (T10) | 06 | DEC & EXT | ✅ | ate47/bo6-source |
Black Ops 6 (T10) | 07 | DEC & EXT | EXT | ate47/bo6-source |
Black Ops 6 (T10) | 0B | DEC & EXT | EXT | ate47/bo6-source |
Black Ops 6 (T10) | 0C | DEC & EXT | EXT | ate47/bo6-source |
- * : Some source repositories might not be public yet.
- DEC: With pre-decode, see the GSC Decrypter section.
- EXT: With extensions, The extensions aren't provided publicly, at least not by me.
Commands
# Compile gsc file
acts gscc <input.gsc> -g <game>
# Example
acts gscc my_script.gsc -g cw # Compile my_script.gsc into a cold war script
# Decompile gsc file
acts gscd file.gscc -g
# Example
acts gscd compiled.gscc -g # Decompile the script compiled.gscc
Supported pools
-
Black Ops 3:
scriptbundle
,stringtable
,structuredtable
,rawfile
,scriptparsetree
. -
Black Ops 4:
weapon
,customizationtable
,rawfile
,stringtable
,structuredtable
,ddl
,scriptparsetree
,scriptparsetreeforced
,scriptbundle
,scriptbundlelist
,ttf
,bgcache
,maptable
,maptablelist
,maptableloadingimages
,maptablepreviewimages
,playerrolecategory
,playerrolecategorytable
,gametypetable
,unlockableitem
,unlockableitemtable
,playlists
,hierarchicaltasknetwork
,storagefile
,storagefilelist
,storeproduct
,storecategory
,storecategorylist
,rank
,ranktable
,prestige
,prestigetable
,labelstore
,labelstorelist
,rawstring
. -
Black Ops Cold War (Dec):
rawfile
,rawfilepreproc
,rawtextfile
,stringtable
,scriptparsetree
,scriptbundle
. -
Modern Warfare III (COR):
gscobj
,scriptbundle
,stringtable
,localize
,luafile
,ddl
. -
Black Ops 6 (COR):
gscobj
. -
DEC: Requires pre-decode
-
COR: Using Cordycep.
Commands
# Command
acts dp <pool>
# Example
acts dp stringtable
Some dumpers are writing to Compiled Files (.cf), the command cfd (cf dump) can extract them.
# Command
acts cfd <files>
# Example
acts cfd output_dump
For the games after cw, the function to decrypt the strings isn't integrated inside acts. The scripts should be decrypted before giving them to the decompiler.
This method requires a dumped exe of the game and will execute it.
# Decrypt the scripts
acts scripts_decrypt <dumped game executable> <game> <encrypted dump> <output dir>
# Example with a cw dump
acts scripts_decrypt BlackOpsColdWar_dump.exe cw gsc_dump gsc_dump_dec
Prototype libary for random stuff, probably not linked to Call of Duty.
This tool is using and providing
- ANTLR-4 - BSD-3-Clause license.
- Detours - MIT license.
- Madler/zlib - Custom license.
- asmjit - ZLib license.
- ladislav-zezula/CascLib - MIT license.
- lz4/lz4 - Custom license.
- curl/curl - Custom license.
- vimpunk/mio - MIT license.
- JustasMasiulis/xorstr - Apache License 2.0
- ocornut/imgui - MIT license
- biocomp/hw_break - MIT license
- Tencent/rapidjson - MIT and JSON license
- glfw/glfw - zlib/libpng license
- bshoshany/thread-pool - MIT license
- nothings/stb - MIT license
You can download the latest release here:
- Latest Release
- Latest Dev Build (Might be unstable)
- ate47/t8-atian-menu : All the notes and dump generated by this tool. (All games)
- ate47/BOHashTool : Tool to test hashes with error (en/de)coder for Black Ops games
To have a lookup over the extracted hashes, you can use a file named strings.txt
when using the process, it will be loaded automatically, one string per line.
You can also use .wni compiled files, create a directory with the name package_index
and put the .wni files in it.
- Serious's t8-compiler for some opcodes for Black Ops 4, it fasted up the process of understanding the internal game functions. Also for the childthread operator syntax.
- JariKCoding's CoDLuaDecompiler to understand the Lua HK scripting format.