A utility to compile & decompile IW engine game scripts.
- IW5 (Call of Duty: Modern Warfare 3)
PCPS3Xbox 360 - IW6 (Call of Duty: Ghosts)
PCPS3PS4Xbox 360Xbox One - IW7 (Call of Duty: Infinite Warfare)
PCPS4Xbox One - IW8 (Call of Duty: Modern Warfare (2019) / Warzone)
PCPS4PS5Xbox OneXbox Series X|S - IW9 (Call of Duty: Modern Warfare II (2022) / Warzone 2)
PCPS4PS5Xbox OneXbox Series X|S - S1 (Call of Duty: Advanced Warfare)
PCPS3PS4Xbox 360Xbox One - S2 (Call of Duty: WWII)
PCPS4Xbox One - S4 (Call of Duty: Vanguard)
PCPS4PS5Xbox OneXbox Series X|S - H1 (Call of Duty: Modern Warfare Remastered)
PCPS4Xbox One - H2 (Call of Duty: Modern Warfare 2 Campaign Remastered)
PCPS4PS5Xbox OneXbox Series X|S - T6 (Call of Duty: Black Ops II)
PCPS3Xbox 360Wii U - T7 (Call of Duty: Black Ops III)
PC(Decompiler) - T8 (Call of Duty: Black Ops 4) *WIP*
- T9 (Call of Duty: Black Ops Cold War) *WIP*
- T10 (Call of Duty: Black Ops 6) *WIP*
- JUP (Call of Duty: Modern Warfare III (2023) *WIP*
gsc-tool [OPTIONS..] <path>
-
path: file or directory to process
-
options:
-m, --mode <mode>[REQUIRED] one of:asm,disasm,comp,decomp,parse-g, --game <game>[REQUIRED] one of:iw5,iw6,iw7,iw8,iw9,s1,s2,s4,h1,h2,t6t7t8t9jup-s, --system <system>[REQUIRED] one of:pc,ps3,ps4,ps5,xb2(360),xb3(One),xb4(Series X|S),wiiu-i, --instance <instance>Instance to use on games with .gsc/.csc (server, client). (default: server)-w, --workdir <path>Working directory for includes or headers. (default: .)-y, --dryDry run (do not write files).-d, --devEnable developer mode (dev blocks & generate bytecode map).-z, --zonetoolEnable zonetool mode (use .cgsc files).--t6fixupDecompile t6 files from broken compilers.-h, --helpDisplay help.-v, --versionDisplay version.
Example: gsc-tool -m comp -g iw5 -s pc ./data/iw5/my_fancy_script.gsc
| Mode | Description | Output |
|---|---|---|
asm |
assemble a file.gscasm |
file.gscbin |
disasm |
dissasemble a file.gscbin |
file.gscasm |
comp |
compile a file.gsc |
file.gscbin |
decomp |
decompile a file.gscbin |
file.gsc |
parse |
parse a file.gsc |
file.gsc |
If you need to extract scripts from fastfiles or game memory, use Zonetool or Jekyll.
-
gsc-tool
.gscbinbinary format is a serialized ScriptFile struct:- magic:
"GSC\0"4 byte - compressedLen: 4 byte usigned integer
- len: 4 byte usigned integer
- bytecodeLen: 4 byte usigned integer
- buffer: byte array[compressedLen]
- bytecode: byte array[bytecodeLen]
- magic:
note: for PS3 & Xbox 360 .gscbin files (compressedLen, len, bytecodeLen) are saved as little-endian!!
-
zonetool (IW5) format made of bytecode file
.cgscand decompressed stack buffer.cgsc.stack. -
treyarch (T6) format is a single buffer with gscobj data
.gscor.csc.
- install premake5 on your system PATH
- clone this repository
- update the submodules
git submodule update --init --recursive - run prebuild script
premake5 vs2022(windows) orpremake5 gmake2(linux/macos)
If you like my work, consider sponsoring/donating! Would allow me to spend more time adding new features & fixing bugs.
BTC: bc1qky7x9kpjlt6nsvt7pckc3wwzk8rk9pgtnmw98u
This project is based on RektInator's gsc-asm. Special thanks to RektInator, JTAG & Dasfonia.
This software has been created purely for the purposes of academic research. Project maintainers are not responsible or liable for misuse of the software. Use responsibly.