Files
BT411/context/asset-formats.md
T
Joe DiPrima 137c151951 #87: mech armour PANELS now darken with damage -- the .DZM material system was loaded and unused
Players: "the actual enemy mech in external view is not showing darkened armor
panels".  We swapped destroyed LIMB meshes but never darkened a panel.

The 1995 game darkens armour through the MATERIALS.  MakeMechRenderables
(FUN_004cef28) built, per (damage zone, material), a watcher
FUN_004573e4(material, &zone->damageLevel, 0.1f) that snapshotted the materials
2026-07-31 19:52:55 -05:00

4.4 KiB
Raw Blame History

id, title, status, source_sections, related_topics, key_terms
id title status source_sections related_topics key_terms
asset-formats Asset Formats — MOD/SKL/ANI/BMF/BSL/textures/gauges/collision established PROGRESS_LOG.md §5; docs/ASSET_PIPELINE.md; docs/BGF_FORMAT.md
bgf-format
rendering
locomotion
combat-damage
gauges-hud
MOD
SKL
ANI
BMF
BSL
VTX
SLD
DZM
PCC
GIM
material-ramp

Asset Formats

All reverse-engineered. Geometry (BGF) has its own topic (bgf-format); the full pixel/material spec is docs/ASSET_PIPELINE.md. Full list: docs/PROGRESS_LOG.md §5.

Definition / skeleton / animation

  • .MOD — INI mech/object definition: skeleton, skins, collision, gauges, physics, animations, class. The .MOD physics (MoverMass/drag/MaxAcceleration) governed thrust VEHICLES + collisions, NOT walk gait (locomotion). [T1]
  • .SKL — INI joint skeleton. [joint] parent=, Type=(hingex/y/z|ball|balltranslate), Object=part.bgf, dzone=, tranx/y/z, pitch/yaw/roll. Build a DCS tree; neutral pose ≈ translations (pyr≈0). [T1]
  • .ANI — INI keyframe animation. [HEADER] framecount/framerate(30)/skeletonfile; [frameN] joint→pitch yaw roll radians for EVERY joint type (ANIMTOOL.cpp:140-142 parses the triple as EulerAngles unconditionally — the old "balltranslate→translate" note was wrong [T0]); a balltranslate joint ADDITIONALLY gets a per-frame translation from the separate [KeyJointPos] section (ANIMTOOL.cpp:478-483 packs EulerAngles+Vector3D; JMOVER/seqctl apply SetRotation + SetTranslation). For the root jointlocal, KeyJointPos.y = the gait vertical bob; [RootTranslation] per-keyframe x y z where .z = forward root SPEED (units/s). Walk anims have no baked root translation — forward motion is animation-driven from .z (locomotion). Walk/run CYCLE clips author NO body pitch — root keys are a ≤1.5° roll sway only; the authored LEAN lives in the transition (rwl/rwr/wrl/wrr jointhip ~7-12°) + bmp stagger (~25°) clips (2026-07-13 sweep of all 331 source ANIs). [T1]

Materials / textures

  • .BMFDIV-BIZ2 (FILETYPE=1) material+texture LIBRARY (no pixels). Material → DIFFUSE color
    • MATERIAL_TEXTURE→texture→TEXTURE_MAP image basename. Tags: 0x18 BITSLICE (BSL slice select), 0x28 ramp ref, 0x26 emissive, 0x30/0x31 ramp def. [T1]
  • Texture pixels: .tga (Truevision), .vtx (DIV-VTX2, trailing RGB), and .bsl (DIV-BSL2 — a BIT-SLICED container: w*h 32-bit texel words holding SIX independent 4-bit GRAYSCALE sub-images (nibble pair-swapped, byte 0 pad) OR RGB444/RGBA4444 (sliceType 7/8). The BMF 0x18 BITSLICE tag picks the slice, absent=0). Decoding BSL as RGB = the "rainbow/graffiti mech" bug. Reference reader: DivLoader/VGCDivLoader.cpp:323-410; archive-only — in-repo reimplementation: engine/MUNGA_L4/image.cpp. [T2]
  • .VMFDIV-VIZ2 material SOURCE. Carries the SCROLL animation + MAP{} image binding for effects (beams/muzzle/smoke/sky). THE key effects asset (rendering). [T2]
  • material-ramp — the IG board colours no-normal geometry by a 2-endpoint RAMP; details in bgf-format + rendering. [T2]

Collision / damage / subsystems

  • .SLD collision solids (Block/YCyl/Cone/Ramp/Wedge). Terrain is modeled AS collision volumes; see locomotion ground model + combat-damage. [T1]
  • .DZM = INI damage-zone→material map (mech skin damage states) — [dz_<zone>] sections each listing material=<lib>:<name>_mtl. One file per SKIN VARIANT (dzm/dzms/dzmt/dzmo/dzma/ dzmb/dzmc/dzmd). This is the ARMOUR-DARKENING registry: the renderer lerps every listed material toward 0.1× as that zone's damageLevel runs 0→1. Loaded by MUNGA's DamageZone stream ctor into materialTable (GetMaterialList(skl_type)); full chain in rendering. [T1] .DMG/.TBL damage zones/tables, .SUB subsystems (weapon params — DischargeTime/RechargeRate/WeaponRange), .CTL control maps. [T1]

Cockpit HUD assets (gauges-hud)

  • .GIM vector MFD/radar line maps + .GAT color table; .PCC ZSoft PCX 8-bit gauge rasters (fonts helv15/helv42, label strips, dials). [T1]

Key Relationships