# Browsing models

The browser groups records using their stored next-LOD links. It does not merge models because they have the same name. The A10 chain is **3 → 5 → 6 → 1213**; the C130 chain is **34 → 35 → 36 → 37**.

A family starts at a record that no other model names as its next LOD. Some distinct models converge on a shared distant model. Those families remain separate, and the detail view links the shared record back to each family. The reference archive has 1,314 records, 699 families and eight records shared by more than one chain.

Choose **Individual records** to browse every record separately. Existing numeric links still open the exact record requested. Switching models or detail levels preserves zoom and viewing angle; **Reset view** restores the defaults. Search examines all records in a family, so searching for a lower-detail record number finds its family too.

## Categories and evidence

Categories describe roles established in the original game data and analysis. Names and visual resemblance are not used as classification rules.

| Category | Evidence |
| --- | --- |
| Aircraft | Original drone class 2 |
| Helicopters | Original drone class 1 |
| Ground vehicles | Original drone classes 3 and 4 |
| Artillery & launchers | Original drone class 5, including fixed emplacements |
| Scenery & infrastructure | Original drone class 6, or placements in the terrain archives |
| Ships & boats | Original drone class 7 |
| Trains | Original drone class 8 |
| Buildings & installations | Structure radar symbol 4 in the executable's object-properties table, after accounting for actor roles |
| Weapons & ammunition | Model references in weapon definitions, or missile radar symbols in the original properties table |
| Wreckage & effects | Destruction replacements for placed scenery and direct crater/splash routines |
| Attached components | Fixed model attachments, captured mission attachment trees, or projectile auxiliary-model references |
| Other archive models | No category established by the records above |

A registered actor or weapon retains its role even when another model carries it as an attachment. Buildings and scenery can include inactive structures. **Other archive models** holds records whose role still needs tracing. Each family's detail panel states the evidence used to place it.

The header field at `0xb0` has different uses in different callers. Scenery destruction reads it as a replacement model; projectiles and weapon mounts can read it as an exhaust or muzzle-flash model. The catalogue follows those uses rather than treating every reference as wreckage.

The mission and scenery filters apply to the complete LOD family. Usage links and counts combine its records. Attached components have links to their parent models, including slots populated by the original mission loader.

## Thumbnails

Thumbnails use the same geometry and renderer as the main preview, with attached parts enabled and drawing flags at zero. They keep a fixed camera angle when the main model rotates. One reusable off-screen renderer produces previews as cards scroll into view, and the browser caches them for the session. There is no separate WebGL context for every card.

An empty default drawing state is labelled **No default geometry**. The main viewer's state controls remain available for those records.

## Rebuilding and checking

Run `PYTHONDONTWRITEBYTECODE=1 .venv/bin/python tools/build_model_catalogue.py` from the project directory after updating the underlying analysis exports. It reads the original executable's object-properties table at `0x44ec00`, the model archive, the existing actor and weapon exports, terrain usage and captured mission attachments. It writes [catalogue.json](catalogue.json).

The generator validates LOD coverage and cycles, the A10 and C130 chains, and the distinct infantry families sharing the same distant geometry. Browser checks exercise grouping, categories, exact-record links, detail selection, thumbnails and pagination.
