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
4.4 KiB
4.4 KiB
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 |
|
|
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.MODphysics (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 rollradians 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 rootjointlocal, KeyJointPos.y = the gait vertical bob;[RootTranslation]per-keyframex y zwhere.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/wrrjointhip ~7-12°) +bmpstagger (~25°) clips (2026-07-13 sweep of all 331 source ANIs). [T1]
Materials / textures
.BMF—DIV-BIZ2(FILETYPE=1) material+texture LIBRARY (no pixels). Material → DIFFUSE colorMATERIAL_TEXTURE→texture→TEXTURE_MAPimage basename. Tags:0x18 BITSLICE(BSL slice select),0x28ramp ref,0x26emissive,0x30/0x31ramp 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 BMF0x18 BITSLICEtag 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] .VMF—DIV-VIZ2material SOURCE. Carries theSCROLLanimation +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
.SLDcollision 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 listingmaterial=<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'sdamageLevelruns 0→1. Loaded by MUNGA'sDamageZonestream ctor intomaterialTable(GetMaterialList(skl_type)); full chain in rendering. [T1].DMG/.TBLdamage zones/tables,.SUBsubsystems (weapon params — DischargeTime/RechargeRate/WeaponRange),.CTLcontrol maps. [T1]
Cockpit HUD assets (gauges-hud)
.GIMvector MFD/radar line maps +.GATcolor table;.PCCZSoft PCX 8-bit gauge rasters (fonts helv15/helv42, label strips, dials). [T1]
Key Relationships
- Geometry detail: bgf-format; pixel/material spec:
docs/ASSET_PIPELINE.md. - Consumed by: rendering, locomotion (SKL/ANI), combat-damage (SLD/DZM/SUB), gauges-hud (GIM/PCC).