2022-09-20 10:47:02 -04:00
[![build ](https://ci.appveyor.com/api/projects/status/defmhg4753c1ap1o?svg=true )](https://ci.appveyor.com/project/xensik/gsc-tool)
2023-01-10 06:49:05 -05:00
[![build ](https://github.com/xensik/gsc-tool/workflows/Build/badge.svg )](https://github.com/xensik/gsc-tool/actions)
2020-05-21 07:32:38 -04:00
![license ](https://img.shields.io/github/license/xensik/gsc-tool.svg )
2022-09-20 10:47:02 -04:00
[![issues ](https://img.shields.io/github/issues/xensik/gsc-tool )](https://github.com/xensik/gsc-tool/issues)
[![releases ](https://img.shields.io/github/v/release/xensik/gsc-tool )](https://github.com/xensik/gsc-tool/releases)
[![paypal ](https://img.shields.io/badge/PayPal-support-blue.svg?logo=paypal )](https://www.paypal.me/xensik)
2022-07-16 13:55:31 -04:00
2020-05-21 07:32:38 -04:00
# GSC Tool
A utility to compile & decompile IW engine game scripts.
2022-07-16 13:55:31 -04:00
2022-01-19 14:01:12 -05:00
## Supported Games
2022-08-23 09:59:29 -04:00
- **IW5** *(Call of Duty: Modern Warfare 3)* `PC` `PS3` `Xbox 360`
2022-09-20 10:47:02 -04:00
- **IW6** *(Call of Duty: Ghosts)* `PC` `PS3` `PS4` `Xbox 360` `Xbox One`
2022-08-23 09:59:29 -04:00
- **IW7** *(Call of Duty: Infinite Warfare)* `PC` `PS4` `Xbox One`
- **IW8** *(Call of Duty: Modern Warfare (2019) / Warzone)* `PC` `PS4` `PS5` `Xbox One` `Xbox Series X|S`
2022-11-16 17:42:58 -05:00
- **IW9** *(Call of Duty: Modern Warfare II (2022) / Warzone 2.0)* `PC` `PS4` `PS5` `Xbox One` `Xbox Series X|S`
2022-09-20 10:47:02 -04:00
- **S1** *(Call of Duty: Advanced Warfare)* `PC` `PS3` `PS4` `Xbox 360` `Xbox One`
2022-08-23 09:59:29 -04:00
- **S2** *(Call of Duty: WWII)* `PC` `PS4` `Xbox One`
- **S4** *(Call of Duty: Vanguard)* `PC` `PS4` `PS5` `Xbox One` `Xbox Series X|S`
- **H1** *(Call of Duty: Modern Warfare Remastered)* `PC` `PS4` `Xbox One`
- **H2** *(Call of Duty: Modern Warfare 2 Campaign Remastered)* `PC` `PS4` `PS5` `Xbox One` `Xbox Series X|S`
- **T6** *(Call of Duty: Black Ops II)* `PC`
2022-03-21 11:40:05 -04:00
- **T7** *(Call of Duty: Black Ops III)* ** *\*WIP\****
2022-08-23 09:59:29 -04:00
- **T8** *(Call of Duty: Black Ops 4)* ** *\*WIP\****
- **T9** *(Call of Duty: Black Ops Cold War)* ** *\*WIP\****
2022-07-16 13:55:31 -04:00
2020-05-21 07:32:38 -04:00
## Usage
2021-11-15 11:35:00 -05:00
``./gsc-tool.exe < mode > < game > < path > ``
2022-01-19 14:01:12 -05:00
**modes**: `asm` , `disasm` , `comp` , `decomp`
2022-09-20 10:47:02 -04:00
- *note:* zonetool files (*.cgsc*, *.cgsc.stack* ) use: `zasm` , `zdisasm` , `zcomp` , `zdecomp` modes
2021-11-15 11:35:00 -05:00
2022-09-20 10:47:02 -04:00
**games**: `iw5` , `iw6` , `iw7` , `iw8` , `s1` , `s2` , `s4` , `h1` , `h2` , `t6`
- *note:* PS3 & Xbox 360 use `iw5c` , `iw6c` , `s1c` games
2021-11-15 11:35:00 -05:00
2022-09-20 10:47:02 -04:00
**paths**: `file` , `directory` (recursive process all files inside the directory)
2020-05-21 07:32:38 -04:00
2022-07-16 13:55:31 -04:00
Example: ``./gsc-tool.exe comp iw5 ./data/iw5/my_fancy_script.gsc``
2020-05-21 07:32:38 -04:00
| Mode |Description | Output |
|:---------|:--------------------------|:------------|
2021-11-15 11:35:00 -05:00
|`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` |
2020-05-21 07:32:38 -04:00
2022-02-19 10:22:11 -05:00
## File Format
2022-05-01 07:52:25 -04:00
If you need to extract scripts from fastfiles or game memory, use [Zonetool ](https://github.com/ZoneTool/zonetool ) or [Jekyll ](https://github.com/EthanC/Jekyll ).
2022-09-20 10:47:02 -04:00
- gsc-tool `.gscbin` format is a serialized ScriptFile struct: < br />
2022-07-16 13:55:31 -04:00
***name***: null-terminated string < br / >
***compressedLen***: 4 byte uint < br / >
***len***: 4 byte uint < br / >
***bytecodeLen***: 4 byte uint < br / >
***buffer***: byte array[compressedLen] < br / >
***bytecode***: byte array[bytecodeLen] < br / >
2020-05-21 07:32:38 -04:00
2022-09-20 10:47:02 -04:00
note: for PS3 & Xbox 360 `.gscbin` files *(compressedLen, len, bytecodeLen)* are saved as little-endian!!
- zonetool (IW5) format made of bytecode file `.cgsc` and decompressed stack buffer `.cgsc.stack` .
- treyarch (T6) format is a single buffer with gscobj data `.gsc` or `.csc` .
## Contribute
If you like my work, feel free to contribute! Would allow me to spend more time adding new features & fixing bugs.
2022-02-19 10:22:11 -05:00
2022-09-20 10:47:02 -04:00
BTC: bc1qky7x9kpjlt6nsvt7pckc3wwzk8rk9pgtnmw98u\
ETH: 0x6261BBE1a33F6Fec4b722DbCe2c28B4CC02c9C7B\
[![pypl ](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white )](https://www.paypal.me/xensik) [![kofi ](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white )](https://ko-fi.com/xensik)
2022-05-01 07:52:25 -04:00
2020-05-21 07:32:38 -04:00
## Credits
2022-09-20 10:47:02 -04:00
This project is based on [*RektInator's* gsc-asm ](https://github.com/ZoneTool/gsc-asm ). Special thanks to **RektInator** , **JTAG** & **Dasfonia** .
2022-07-16 13:55:31 -04:00
2020-05-21 07:32:38 -04:00
## Disclaimer
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.