84 lines
2.0 KiB
Plaintext
84 lines
2.0 KiB
Plaintext
|
|
// GML Script Format - THQ Australia Engine
|
||
|
|
// Magic: "0lmg" (gml0 reversed)
|
||
|
|
// Used by Avatar, SpongeBob, Jimmy Neutron, etc.
|
||
|
|
|
||
|
|
// Big-endian version (Xbox 360, Wii)
|
||
|
|
type thqa_gml [root, display="GML Script"] byteorder BE
|
||
|
|
{
|
||
|
|
criteria {
|
||
|
|
require ascii(bytesat(0, 4)) == "0lmg";
|
||
|
|
}
|
||
|
|
|
||
|
|
set_name(_basename);
|
||
|
|
|
||
|
|
magic = ascii(read(4));
|
||
|
|
ui("magic", "Magic");
|
||
|
|
u32 version;
|
||
|
|
ui("version", "Version");
|
||
|
|
u32 header_size;
|
||
|
|
ui("header_size", "Header Size");
|
||
|
|
u32 unknown_0c;
|
||
|
|
ui("unknown_0c", "Unknown 0x0C");
|
||
|
|
u32 data_size;
|
||
|
|
ui("data_size", "Data Size");
|
||
|
|
u32 string_table_size;
|
||
|
|
ui("string_table_size", "String Table Size");
|
||
|
|
|
||
|
|
// Get function count for display
|
||
|
|
_saved_pos = pos();
|
||
|
|
skip(string_table_size);
|
||
|
|
if (pos() + 4 <= size()) {
|
||
|
|
u32 function_count;
|
||
|
|
ui("function_count", "Function Count");
|
||
|
|
}
|
||
|
|
seek(0);
|
||
|
|
|
||
|
|
// Run Python decompiler on entire file
|
||
|
|
_all_data = read(size());
|
||
|
|
_code = run_script("gml_decompile.py", _all_data);
|
||
|
|
|
||
|
|
write_file("decompiled.gml", _code);
|
||
|
|
set_preview("decompiled.txt", _code);
|
||
|
|
set_viewer("text");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Little-endian version (Original Xbox, GameCube)
|
||
|
|
type thqa_gml_le [root, display="GML Script"] byteorder LE
|
||
|
|
{
|
||
|
|
criteria {
|
||
|
|
require ascii(bytesat(0, 4)) == "0lmg";
|
||
|
|
}
|
||
|
|
|
||
|
|
set_name(_basename);
|
||
|
|
|
||
|
|
magic = ascii(read(4));
|
||
|
|
ui("magic", "Magic");
|
||
|
|
u32 version;
|
||
|
|
ui("version", "Version");
|
||
|
|
u32 header_size;
|
||
|
|
ui("header_size", "Header Size");
|
||
|
|
u32 unknown_0c;
|
||
|
|
ui("unknown_0c", "Unknown 0x0C");
|
||
|
|
u32 data_size;
|
||
|
|
ui("data_size", "Data Size");
|
||
|
|
u32 string_table_size;
|
||
|
|
ui("string_table_size", "String Table Size");
|
||
|
|
|
||
|
|
// Get function count for display
|
||
|
|
_saved_pos = pos();
|
||
|
|
skip(string_table_size);
|
||
|
|
if (pos() + 4 <= size()) {
|
||
|
|
u32 function_count;
|
||
|
|
ui("function_count", "Function Count");
|
||
|
|
}
|
||
|
|
seek(0);
|
||
|
|
|
||
|
|
// Run Python decompiler on entire file
|
||
|
|
_all_data = read(size());
|
||
|
|
_code = run_script("gml_decompile.py", _all_data);
|
||
|
|
|
||
|
|
write_file("decompiled.gml", _code);
|
||
|
|
set_preview("decompiled.txt", _code);
|
||
|
|
set_viewer("text");
|
||
|
|
}
|