the level turrets are scenery: TurretClassID is a red herring, 0xBDE is ThermalSight
Playtest question: "many levels have turrets/cannons that don't fire, aren't those supposed to shoot at players?" Chased it properly because the enum really does look like a smoking gun. engine/MUNGA/VDATA.h:209 declares TurretClassID as the LAST entry of the BT block -- right after MechTechClassID, immediately before the ND section -- which is exactly where a real BattleTech class would live. And the mech factory has a live `case 0xbde:` for it (part_012.c:10186). Both of those point the wrong way. That enum slot computes to 3038 = 0xBDE, and 0xBDE in the shipped runtime is ThermalSight: ctor @4b8718, already reconstructed and done in thermalsight.cpp. Same enum-vs-runtime label drift CLASSMAP already records for HUD and MechTech at 0xBD6/0xBDC, which is why the rule is to resolve the ctor address and never trust the factory case label. The case is also in the mech SUBSYSTEM factory (roster param_1[0x4a]), not an entity factory, so it could not spawn a world object even if the label were right. Everything else agrees. There is no `class Turret` anywhere in the engine or the port. BTL4OPT.EXE contains zero occurrences of turret, sentry, emplac, brain, patrol, aggro, hostile or npc (the apparent "ai"/"bot" hits are substrings of failureheat and verticallimitbottom). jointturret, which looked promising, is a skeleton joint on OWN/PGN/STI with own_tur.bgf -- a mech turret-torso, not a world gun. And the destructible world classes in CULTURAL.h -- Landmark, CulturalIcon, UnscalableTerrain -- have no weapon, fire or target members at all; they take damage and break, and that is the whole of it. So the turret and cannon models in the maps (TT1/TT2/TWR/TK1/APC, each with a D damaged variant) are scenery. They did not fire in 1995. Making them fire would be inventing a feature rather than reconstructing one, and it would need an entity class, a targeting model and a threat model that the binary has no trace of -- which is consistent with the standing T1 finding that BT shipped no AI at all and is PvP-only by design. Written up in combat-damage.md next to the No-AI section, since the enum is convincing enough that someone will find it again. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
1af2dfc769
commit
0534e93eec
@@ -14,6 +14,22 @@ open_questions:
|
||||
The drive→target→fire→damage→destroy loop. Full detail: `docs/PROGRESS_LOG.md §10c`; the death/
|
||||
teardown forensics: `docs/HARD_PROBLEMS.md` (P5).
|
||||
|
||||
## ⚠ `TurretClassID` is a RED HERRING — there is no turret code (2026-07-28) [T1]
|
||||
`engine/MUNGA/VDATA.h:209` really does declare `TurretClassID`, as the **last entry of the BT block**
|
||||
(right after `MechTechClassID`, before the ND section), which makes it look like a BattleTech class.
|
||||
It is not one. That enum position computes to **3038 = 0xBDE**, and 0xBDE in the shipped runtime is
|
||||
**ThermalSight** (ctor `@4b8718`, `thermalsight.cpp`, already DONE) — the same enum-vs-runtime label
|
||||
drift `CLASSMAP.md` records for HUD/MechTech at 0xBD6/0xBDC. The `case 0xbde:` in the mech factory
|
||||
(`part_012.c:10186`) is a **mech SUBSYSTEM** slot (roster `param_1[0x4a]`), not a world entity.
|
||||
Corroborating: there is **no `class Turret`** anywhere in the engine or the port, and `BTL4OPT.EXE`
|
||||
contains **zero** occurrences of `turret`/`sentry`/`emplac`/`brain`/`patrol`/`aggro`/`hostile`/`npc`.
|
||||
`jointturret` (in `OWN`/`PGN`/`STI` skeletons + `own_tur.bgf`) is a **mech** turret-torso joint, not a
|
||||
world gun. The destructible world objects (`Landmark`, `CulturalIcon`, `UnscalableTerrain` —
|
||||
`CULTURAL.h`) have no weapon/fire/target members of any kind: they take damage and break, nothing more.
|
||||
⇒ **Turret/cannon models in the maps (`TT1`/`TT2`/`TWR`/`TK1`/`APC` + their `D` damaged variants) are
|
||||
SCENERY.** They never fired in 1995. Making them fire would be inventing a feature, not reconstructing
|
||||
one — and it would need an entity class, targeting, and a threat model that the binary has no trace of.
|
||||
|
||||
## No AI — BT is PvP-only (verified, not a recovery gap)
|
||||
The mission system is NETWORKED and BT never had NPCs/AI. Every mech is driven by a `BTPlayer` (or a
|
||||
`BTCameraDirector` spectator). The BT registry knows only Mech/Projectile/Missile/BTPlayer/BTTeam; no
|
||||
|
||||
Reference in New Issue
Block a user