1. Architectural Role & Engine Purpose
The OLM (Covert Strike Hierarchical Object Layout Map) format defines world entity placement, interactive objectives, dynamic alarm sensors, and multi-tier visibility layers in I.G.I. 2: Covert Strike.
In IGI 2, OLM was upgraded to version v0.16. Descriptors expanded from 16 bytes to
24 bytes per entity (olm_item_igi2_s), adding 32-bit mission layer bitmasks
and unique entity script UIDs (linking world objects directly to DefineMagicObj script instances).
2. Binary File Layout & Memory Map Diagram
An IGI 2 OLM file contains version 0.16 headers, 24-byte entity descriptors, and orientation matrices:
3. Difficulty & Layer Filtering Pipeline Diagram
The world streaming manager filters entity spawning based on difficulty settings and mission phases:
4. C++ Struct Definitions
#pragma pack(push, 1)
struct OlmHeaderIgi2 {
char magic[4]; // "OLM "
uint16_t ver_major; // 0
uint16_t ver_minor; // 16 (v0.16)
uint32_t object_count; // Total world entities
float world_min[3]; // Valley bounding box minimum
float world_max[3]; // Valley bounding box maximum
};
static_assert(sizeof(OlmHeaderIgi2) == 32, "OlmHeaderIgi2 must be 32 bytes");
// IGI 2 24-Byte Entity Descriptor
struct olm_item_igi2_s {
uint16_t model_id; // 3D MEF model index
uint16_t flags; // Visibility & collision flags
uint32_t layer_mask; // Difficulty / objective layer filter
float pos_x; // World coordinate X
float pos_y; // World height Y
float pos_z; // World coordinate Z
uint32_t entity_uid; // Unique script entity handle
};
static_assert(sizeof(olm_item_igi2_s) == 24, "olm_item_igi2_s must be 24 bytes");
#pragma pack(pop)