From c8d9a8deb7b39493e3a44150bba1a4ff069ec5ae Mon Sep 17 00:00:00 2001 From: Dexrn ZacAttack <60078656+DexrnZacAttack@users.noreply.github.com> Date: Sun, 17 Nov 2024 04:59:44 -0800 Subject: [PATCH] patterns: Added Minecraft LCE LOC file pattern (#311) * create LOC hexpat * loc to list --- README.md | 1 + patterns/loc.hexpat | 46 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 patterns/loc.hexpat diff --git a/README.md b/README.md index f1b61b3..f377f2f 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ Everything will immediately show up in ImHex's Content Store and gets bundled wi | ISO | | [`patterns/iso.hexpat`](patterns/iso.hexpat) | ISO 9660 file system | | Java Class | `application/x-java-applet` | [`patterns/java_class.hexpat`](patterns/java_class.hexpat) | Java Class files | | JPEG | `image/jpeg` | [`patterns/jpeg.hexpat`](patterns/jpeg.hexpat) | JPEG Image Format | +| LOC | | [`patterns/loc.hexpat`](patterns/loc.hexpat) | Minecraft Legacy Console Edition Language file | | Lua 5.1 | | [`patterns/lua51.hexpat`](patterns/lua51.hexpat) | Lua 5.1 bytecode | | Lua 5.2 | | [`patterns/lua52.hexpat`](patterns/lua52.hexpat) | Lua 5.2 bytecode | | Lua 5.3 | | [`patterns/lua53.hexpat`](patterns/lua53.hexpat) | Lua 5.3 bytecode | diff --git a/patterns/loc.hexpat b/patterns/loc.hexpat new file mode 100644 index 0000000..3b5a8ae --- /dev/null +++ b/patterns/loc.hexpat @@ -0,0 +1,46 @@ +#pragma author DexrnZacAttack +#pragma description Minecraft LCE LOC file + +#pragma endian big +#pragma array_limit 739845729834 +#pragma pattern_limit 34893726894 + +import std.string; + +struct Keys { + bool useUniqueIDs; + u32 count; + u32 key[count]; +}; + +struct LangIds { + u16 len; + char id[len]; + u32 unk; +} [[name(id)]]; + +struct LocString { + u16 keySize; + char key[keySize]; +} [[name(std::string::to_string(key))]]; + +struct Language { + u32 read; + if (read > 0) + u8 unk; + u16 len; + char id[len]; + u32 count; + LocString strings[count]; +} [[name(id)]]; + +struct Loc { + u32 version; + u32 count; + if (version == 2) + Keys keys; + LangIds ids[count]; + Language language[count]; +}; + +Loc loc @ 0x00;