Posted by Loshadh on Sunday, 28 June 1998, at 9:48 p.m. The 'geom' tag: The geometry tag handles the actual shape of a model in Myth. It contains the vertices, facets, and surfaces used to create the model. The structure for the geometry tag data is as follows (all offsets are from the end of the header unless otherwise specified). Once again, everything is in a structure format. Data of type "long" is 4 bytes, data of type "short" is 2 bytes, and data of type "char" is one byte long. I was rather surprised that the geomerty data was not more complex that it turned out to be: --geom tag header: typedef long 256TAG; struct geomHeader { long unk01; // No idea. 256TAG 256TagID; // The four letter .256 tag to use // to apply textures to the object short surfaceCount; // Number of surfaces. short vertexCount; // Number of vertices in the model short facetCount; // Number of facets in the model short unknownCount; // Number of items in the unknown // section. short unk02; // No idea. short unk03; // No idea. short unk04; // No idea. short unk05; // No idea. short unk06; // No idea. short unk07; // No idea. long surfaceOffset // Offset to the surfaces section long surfaceLength; // Length of the surfaces section long unk08; // No idea. long vertexOffset; // Offset to the vertex section long vertexLength; // Length of the vertex section long unk09; // No idea. long facetOffset; // Offset to the facet section long facetLength; // Length of the facet section long unk10; // No idea. long unknownOffset; // Offset to the unknown section long unknownLength; // Length of the unknown section long unk11; // No idea. long dataStart; // Offset from beginning of header // to the start of the tag data. long dataLength; // Length of the tag data. long unk12; // No idea. long unk13; // No idea. long unk14; // No idea. }; // 96 bytes --geom tag surface section struct geomSurfaceSection { char surfaceName[32]; // Name of the surface char unknown[32]; // Surface data not figured out yet. } // 64 bytes per surface entry --geom tag vertex section struct geomVertexSection { short vertexX; // X coordinate of vertex short vertexY; // Y coordinate of vertex short vertexZ; // Z coordinate of vertex } // 6 bytes per vertex entry I believe the values for the coordinates to be in 1024ths of a mesh unit, just like the positional data for troops. --geom tag facet section struct geomFacetSection { long unk01; // No idea. long unk02; // No idea. long unk03; // No idea. short vector01X; // X coordinate for one adjacent vertex short vector01Y; // Y coordinate for one adjacent vertex short vector01Z; // Z coordinate for one adjacent vertex short vector02X; // X coordinate for other adjacent vertex short vector02Y; // Y coordinate for other adjacent vertex short vector02Z; // Z coordinate for other adjacent vertex long surfaceID; // Which surface this facet belongs to short vertex01Unk01; // No idea; short vertex01Unk02; // No idea; short vertex01; // Pointer to first vertex. short vertex01Unk03; // No idea; short vertex02Unk01; // No idea; short vertex02Unk02; // No idea; short vertex02; // Pointer to second vertex. short vertex02Unk03; // No idea; short vertex03Unk01; // No idea; short vertex03Unk02; // No idea; short vertex03; // Pointer to third vertex. short vertex03Unk03; // No idea; short unk04; // No idea; short unk05; // No idea; short unk06; // No idea; short unk07; // No idea; short unk08; // No idea; short unk09; // No idea; } // 64 bytes per facet entry Vector01X, vector01Y, vector01Z, vector02X, vector02Y, and vector02Z might be used to determine the slope of the facet. Vertex01, vertex02, and vertex03 are pointers to the vertex entries. For example, suppose vertex01 = 32, vertex02 = 64, and vertex03 = 96. To get the X, Y, and Z coordinates for these three vertices, one must look at the 32nd, 64th, and 96th entries in the vertex list. So one would be looking at the following in the geomVertexSection: for Vertex01: vertexX(32) vertexY(32) vertexZ(32) for Vertex02: vertexX(64) vertexY(64) vertexZ(64) for Vertex03: vertexX(96) vertexY(96) vertexZ(96) I hope that all made sense. ;) --geom unknown section structure geomUnknownSection { short unknownData; } // 2 bytes per entry I have no idea what this data is used for at the moment. That should conclude the entire geometry tag description. Loshadh.