A decompiler for reverse engineering qvm files of Quake 3 game.
This is an experimental project; development is currently stopped.
Requirements:
sudo apt install libtinyxml-dev
Build decompiler:
cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug && cmake --build build -t BigIndian
Run:
-
Edit ./config/game.xml
-
Execute:
./build/BigIndian ./configs/game.xml
- See ./full.c
...
int vmMain (int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11)
{
int tmp1;
int tmp2;
int tmp3;
int tmp4;
int tmp5;
stack_14 = stack_2c; /* Address : 0x1 */
if (stack_14 >= 0)/* jump to 0x54 */ /* Address : 0x5 */
{
if (stack_14 <= 0x5)/* jump to 0x54 */ /* Address : 0x9 */
{
Jump to *(((stack_14 << 0x2) + 0x4)); /* Address : 0xd */
function_0x9d0(stack_30, stack_34); /* Address : 0x1b */
return 0; /* Address : 0x1e */
return; /* Address : 0x20 */
function_0xac3(); /* Address : 0x22 */
return 0; /* Address : 0x25 */
return; /* Address : 0x27 */
stack_18 = function_0xbbe(); /* Address : 0x29 */
return stack_18; /* Address : 0x2d */
return; /* Address : 0x30 */
function_0xa16f(stack_30, stack_34, stack_38); /* Address : 0x3b */
return 0; /* Address : 0x3e */
return; /* Address : 0x40 */
stack_1c = function_0xcb(); /* Address : 0x42 */
return stack_1c; /* Address : 0x46 */
return; /* Address : 0x49 */
stack_20 = function_0xdc(); /* Address : 0x4b */
return stack_20; /* Address : 0x4f */
return; /* Address : 0x52 */
}
}
function_0x106(0x32c7, stack_2c); /* Address : 0x59 */
return 0xffffffff; /* Address : 0x5c */
return; /* Address : 0x5e */
}
...Requirements:
sudo apt install catch2
Build tests:
cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug && cmake --build build -t BigIndianTests
Run tests:
./build/BigIndianTests
