Difference between revisions of "INST"
Dummiesman (talk | contribs) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 15: | Line 15: | ||
INSTComponentHeader | INSTComponentHeader | ||
{ | { | ||
− | unsigned short blockIndex; // Index +1 of the block this package is placed on | + | unsigned short blockIndex; // Index +1 of the block this |
− | unsigned short modifiers; // Modifies the appearance of the object, see below | + | // package is placed on |
− | unsigned char type; // Highest bit indicates component type, the rest is length of "packageName" | + | unsigned short modifiers; // Modifies the appearance of |
− | unsigned char[type & 0x7f] packageName; // Zero-terminated name-part of the PKG filename | + | // the object, see below |
+ | unsigned char type; // Highest bit indicates | ||
+ | // component type, the rest is | ||
+ | // length of "packageName" | ||
+ | unsigned char[type & 0x7f] packageName; // Zero-terminated name-part of | ||
+ | // the PKG filename | ||
} | } | ||
Line 32: | Line 37: | ||
INSTSimpleComponent | INSTSimpleComponent | ||
{ | { | ||
− | INSTComponentHeader header; // The type field has the top bit set (type >= 0x80) | + | INSTComponentHeader header; // The type field has the top bit set |
− | float | + | // (type >= 0x80) |
− | float | + | float xDelta; |
+ | float zDelta; | ||
Vector location; | Vector location; | ||
} | } | ||
Line 44: | Line 50: | ||
float z; | float z; | ||
} | } | ||
+ | |||
The ''modifiers'' define what ''paint job'' should be used for the object, among other things. The least significant bits of this field, currently I use the lowest eight bits, but I have a feeling that 256 paint jobs are not possible. Maybe this should be the least four bits instead. Other bits are still unknown. It seems as if bit 8, 0x100, is set for most monuments that are visible from every direction. Monuments doesn't appear to have more than one paint job, but facades generally do. | The ''modifiers'' define what ''paint job'' should be used for the object, among other things. The least significant bits of this field, currently I use the lowest eight bits, but I have a feeling that 256 paint jobs are not possible. Maybe this should be the least four bits instead. Other bits are still unknown. It seems as if bit 8, 0x100, is set for most monuments that are visible from every direction. Monuments doesn't appear to have more than one paint job, but facades generally do. | ||
Line 49: | Line 56: | ||
''INSTCoordinateComponents'' define a complete coordinate system used by MM2 to convert each vertex in the PKG to city-coordinates. This is done by defining the locations for (1, 0, 0), (0, 1, 0), (0, 0, 1) and (0, 0, 0) of PKG coordinates in city coordinates. | ''INSTCoordinateComponents'' define a complete coordinate system used by MM2 to convert each vertex in the PKG to city-coordinates. This is done by defining the locations for (1, 0, 0), (0, 1, 0), (0, 0, 1) and (0, 0, 0) of PKG coordinates in city coordinates. | ||
− | INSTSimpleComponents use a more compact, less flexible method of placing geometry. The vector named ''location'' is the coordinate for (0, 0, 0) of PKG coordinates in city-coordinates. | + | INSTSimpleComponents use a more compact, less flexible method of placing geometry. The vector named ''location'' is the coordinate for (0, 0, 0) of PKG coordinates in city-coordinates. These objects face the the direction given by xDelta and zDelta. The scale is determined by the magnitude of the rotation vector. |
Latest revision as of 16:50, 20 February 2017
Each city can have one INST file, the INST file describes where to place monuments and other objects modeled in a PKG model file. Each placement allows a selection of paint job, scale and orientation as well as location of a PKG.
Format description
The format is simply a list of components placing one PKG object each. There are two types of components:
- Coordinate component
- Gives you complete freedom in placing the object - the component includes a complete coordinate system definition that allows for arbitrary rotation and scaling of the object.
- Simple component
- A shorter component that offers limited options for scaling and rotating the placed object.
Structure
INST { INSTComponent[] components; }
INSTComponentHeader { unsigned short blockIndex; // Index +1 of the block this // package is placed on unsigned short modifiers; // Modifies the appearance of // the object, see below unsigned char type; // Highest bit indicates // component type, the rest is // length of "packageName" unsigned char[type & 0x7f] packageName; // Zero-terminated name-part of // the PKG filename }
INSTCoordinateComponent { INSTComponentHeader header; // The type field has the top bit cleared Vector xAxis; Vector yAxis; Vector zAxis; Vector origo; }
INSTSimpleComponent { INSTComponentHeader header; // The type field has the top bit set // (type >= 0x80) float xDelta; float zDelta; Vector location; }
Vector { float x; float y; float z; }
The modifiers define what paint job should be used for the object, among other things. The least significant bits of this field, currently I use the lowest eight bits, but I have a feeling that 256 paint jobs are not possible. Maybe this should be the least four bits instead. Other bits are still unknown. It seems as if bit 8, 0x100, is set for most monuments that are visible from every direction. Monuments doesn't appear to have more than one paint job, but facades generally do.
INSTCoordinateComponents define a complete coordinate system used by MM2 to convert each vertex in the PKG to city-coordinates. This is done by defining the locations for (1, 0, 0), (0, 1, 0), (0, 0, 1) and (0, 0, 0) of PKG coordinates in city coordinates.
INSTSimpleComponents use a more compact, less flexible method of placing geometry. The vector named location is the coordinate for (0, 0, 0) of PKG coordinates in city-coordinates. These objects face the the direction given by xDelta and zDelta. The scale is determined by the magnitude of the rotation vector.