2 hours ago2 hr Localization To answer your question directly: there is currently no public 3D/texture tool (like Noesis or G1Tool) that can open this .g1e file, because it does not contain models or textures.In Koei Tecmo's KTGL engine, the G1 container family is modular. While G1M holds meshes and G1T holds textures, .g1e files are G1FX effect/particle emitter definitions.I reverse engineered your sample (CE1_0101_ZOR_360POND.g1e) down to the byte. Here is the complete container layout and a Python tool to parse and dump its structure.1. Header Layout (24 Bytes)The header confirms the internal identity of the format:OffsetTypeValueDescription0x00char[4]XF1GStored magic (little-endian uint32 0x47314658 = logical FourCC G1FX)0x04char[4]5200Format version (ASCII representation)0x08u3226416Declared file size (strictly matches the actual 26 KB file size)0x0Cu329Section count0x10u321Engine sub-version / constant flag0x14u3224Header length (0x18 = body start)2. Block Grammar & The 9 SectionsEach chunk in the file follows a uniform 16-byte header:u32 size // Declared chunk size u32 tag // Chunk type ID u32 paramX u32 paramY Alignment Rule: Every block occupies stride = round_up(size, 16) bytes, with trailing null bytes acting as alignment padding.Using this grammar, the file tiles 100% continuously with zero gaps: 24 (Header) + 1,720 (Root Object) + 24,672 (9 Sections) = 26,416 bytes.SectionOffsetStrideTagPurpose / ContentsRoot0x0181720 B-Transform root: contains two 4x4 identity matrices (0x18 & 0x2E0)00x6D0736 B1Setup block & index tables10x9B096 B9Field descriptor table (typed 16-byte parameter schema)20xA1048 B14Particle state flags30xA40128 B480Emitter configuration A40xAC0128 B481Emitter configuration B50xB40672 B0Sub-block parameter tree60xDE0848 B0Nested timeline nodes70x113014032 B3Primary payload (53% of file): Emitter layers 1-380x48007984 B3Secondary payload (30% of file): Emitter layer 4Notice that over 83% of the entire file is located inside the two tag=3 sections (0x1130 and 0x4800).3. What is Actually Inside This File?An asset scan reveals:No embedded textures: 0 G1T_, 0 DDS, and 0 PNG signatures. Textures for the water particles/ripples live in a companion .g1t file and are referenced strictly by index/ID.No embedded meshes: 0 G1M_ blocks.4 Emitter Instances: There are four distinct emitter definitions (0x2E40, 0x3440, 0x3A70, 0x40B0) defining the visual layers of the 360POND effect (water body, rim shimmer, splashes, and foam).Color Parameters: Decoded RGBA float32 curves:3 identical emitter tints: #7F0D7EFF (RGBA: 0.4994, 0.0493, 0.4949, 1.0)1 secondary tint: #726378FF (RGBA: 0.4478, 0.3887, 0.4720, 1.0)UV Sub-rect Clamps: Explicit [0.01, 0.99] UV coordinate bounds in sections 7 and 8, confirming the particles use sub-rects of an external sprite atlas with 1% edge inset to avoid texture bleeding.4. Inspection & Extraction Tool (g1e_parser.py)I wrote a standalone Python 3 script (g1e_parser.py) that parses any G1FX .g1e file, extracts the root and 9 raw chunks into individual files, and outputs a complete JSON description of all vectors, colors, matrices, and descriptor tables.Usage:python g1e_parser.py CE1_0101_ZOR_360POND.g1e Outputs:CE1_0101_ZOR_360POND.dump.json (Full hierarchical breakdown)CE1_0101_ZOR_360POND.report.txt (Structured text summary)extracted/CE1_0101_ZOR_360POND/ (All 10 extracted .bin chunk payloads)(Script is attached to this post). G1FX_tool.zip
Create an account or sign in to comment