2026-01-11 12:10:58 -05:00
|
|
|
// GML Script Format - THQ Australia Engine
|
|
|
|
|
// Magic: "0lmg" (gml0 reversed)
|
|
|
|
|
// Used by Avatar, SpongeBob, Jimmy Neutron, etc.
|
|
|
|
|
|
2026-01-11 16:08:46 -05:00
|
|
|
// Big-endian root dispatcher (Xbox 360, Wii)
|
|
|
|
|
type thqa_gml ui("GML Script", root) byteorder BE
|
2026-01-11 12:10:58 -05:00
|
|
|
{
|
|
|
|
|
criteria {
|
|
|
|
|
require ascii(bytesat(0, 4)) == "0lmg";
|
|
|
|
|
}
|
2026-01-11 16:08:46 -05:00
|
|
|
parse_here("thqa_gml_impl");
|
2026-01-11 12:10:58 -05:00
|
|
|
}
|
|
|
|
|
|
2026-01-11 16:08:46 -05:00
|
|
|
// Little-endian root dispatcher (Original Xbox, GameCube)
|
|
|
|
|
type thqa_gml_le ui("GML Script", root) byteorder LE
|
2026-01-11 12:10:58 -05:00
|
|
|
{
|
|
|
|
|
criteria {
|
|
|
|
|
require ascii(bytesat(0, 4)) == "0lmg";
|
|
|
|
|
}
|
2026-01-11 16:08:46 -05:00
|
|
|
parse_here("thqa_gml_impl");
|
|
|
|
|
}
|
2026-01-11 12:10:58 -05:00
|
|
|
|
2026-01-11 16:08:46 -05:00
|
|
|
// Shared implementation - inherits byteorder from caller
|
|
|
|
|
type thqa_gml_impl ui("GML Script")
|
|
|
|
|
{
|
2026-01-11 12:10:58 -05:00
|
|
|
set_name(_basename);
|
|
|
|
|
|
2026-01-11 16:08:46 -05:00
|
|
|
magic = ascii(read(4)) ui("Magic");
|
|
|
|
|
u32 version ui("Version");
|
|
|
|
|
u32 header_size ui("Header Size");
|
|
|
|
|
u32 unknown_0c ui("Unknown 0x0C");
|
|
|
|
|
u32 data_size ui("Data Size");
|
|
|
|
|
u32 string_table_size ui("String Table Size");
|
2026-01-11 12:10:58 -05:00
|
|
|
|
|
|
|
|
// Get function count for display
|
|
|
|
|
_saved_pos = pos();
|
|
|
|
|
skip(string_table_size);
|
|
|
|
|
if (pos() + 4 <= size()) {
|
2026-01-11 16:08:46 -05:00
|
|
|
u32 function_count ui("Function Count");
|
2026-01-11 12:10:58 -05:00
|
|
|
}
|
|
|
|
|
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");
|
|
|
|
|
}
|