// 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"); }