Combat: THE AUTHENTIC DAMAGE ECONOMY -- authored per-weapon amounts through the real fire chain (task #8)
Three root causes, all fixed: 1. kDamageScale was 1.0 -- _DAT_004bafbc is an x87 float80 = 1e-7, cancelling the ctor's x1e7: damagePortion = authored DamageAmount x (charge/seekV)^2 (closed form at fire time; madcat AC=25/LRM=50/ERLL=6, bhk1 PPC=12/SRM=35). The observed "0.25" was the degenerate EC=1 fallback, never authored data. 2. CheckFireEdge NaN latch: TriggerState carries ControlsButton INTS; the release value (-65) is a negative NaN. The binary's x87 unordered compare read it as "released"; IEEE-correct float compares latched the edge detector shut after the first release -- the reason the emitter discharge chain NEVER fired in-game. Fixed with bit-pattern sign compares. 3. The weapon-side submission LIVE: Emitter::FireWeapon fills damageData (amount + damageForce=target-muzzle [the gyro directional-bounce feed] + impact) -> MechWeapon::SendDamageMessage (@004b9728 real body) -> messmgr consolidation with per-weapon records + explosion bundling. The mech4 bring-up damage block + flat kShotDamage retired to diag hooks. Bonus: LODReuseHysteresis 0.82 -> 0.33 (double misread). Zone model verified byte-exact (no change). Solo end-to-end: 5-record volleys (2 PPC + 3 ERML with authored amounts), per-weapon zone granularity, explosions, kill. Heat stays bring-up scale pending the heat-calibration audit [T3]. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
77190c93e5
commit
fd055281a8
@@ -131,8 +131,9 @@ authentic path scoped.
|
||||
the binary's; full binary attr-table dump in the task #5 scan) + an input feed. Keyboard now
|
||||
pushes press/release edges into the buttonGroups (SPACE→Trigger, '2'→ThumbLow, '3'/CTRL→
|
||||
ThumbHigh; BT_AUTOFIRE pulses the Trigger); the gBT*Trigger bypasses + pulse hack are retired.
|
||||
VERIFIED 2-node: full kill through the authentic chain (12 hits vs ~36 pre-groups = the
|
||||
4-weapon trigger volley + crit cascade). **Remaining (the config-mode session):** handlers
|
||||
VERIFIED 2-node at the BINDING level (⚠ honest correction, task #8: those kills still flowed
|
||||
through the retired mech4 bring-up block -- the emitter DISCHARGE chain was latched shut by
|
||||
the NaN edge bug below until 2026-07-11; the full weapon-fire chain is now verified solo). **Remaining (the config-mode session):** handlers
|
||||
id 9/10 (@4b9550/@4b95b8 — corrected: they were mislabeled as Myomers fns), the L4 mapper
|
||||
Enter/ExitConfiguration completion (StartMappableButtonsConfigure + mode 0x8000), the
|
||||
ConfigMapGauge unguard — the pod's in-cockpit REGROUPING UI (pilot heat-management choice);
|
||||
@@ -144,6 +145,26 @@ authentic path scoped.
|
||||
into the LIVE JointedMover (must be reconciled with the gait cutover first).
|
||||
- **SeekVoltageGraph** — 4 Seek* attrs unpublished (a cluster-child, not config-called; non-blocking).
|
||||
|
||||
- **✅ DAMAGE ECONOMY — AUTHENTIC (task #8, 2026-07-11) [T1/T2].** The whole economy closes:
|
||||
`_DAT_004bafbc` is an x87 float80 = **1e-7** (the port's kDamageScale=1.0 was the mystery) --
|
||||
it cancels the ctor's ×1e7 energy bookkeeping, so **damagePortion = authored DamageAmount ×
|
||||
(charge/seekV[rec])²** (port: the closed form at fire time; the bring-up charge cycle keeps
|
||||
the degenerate EC=1 electrical model). Authored values (BTL4.RES type-0x11, +0x19C; scanner
|
||||
scratchpad/scan_weapsub.py): madcat AC=25/LRM15 salvo=50/ERLL=6/ERSL=2; bhk1 PPC=12/SRM6=35/
|
||||
ERML=3.5. Zone model already byte-exact (Δlevel = amount/armorPoints, legs ×0.5; armor dump
|
||||
in the task #8 synthesis) → the pod's 4-8-hit heavy-weapon pacing. The weapon-side
|
||||
SendDamageMessage (@004b9728) is LIVE from Emitter::FireWeapon (damageData filled incl.
|
||||
**damageForce = target−muzzle → the gyro's directional hit-bounce feed**); the mech4
|
||||
bring-up damage block + flat kShotDamage are retired to diag hooks. **ROOT-CAUSE find: the
|
||||
CheckFireEdge NaN latch** -- TriggerState carries ControlsButton INTS (release −65 = a
|
||||
negative NaN); the binary's x87 unordered-compare treated it as "released" but an
|
||||
IEEE-correct float compare latched the detector shut after the first release (why the
|
||||
emitters never discharged in-game until now); fixed with bit-pattern sign compares
|
||||
(@004b9608). Residues [T3]: heat stays on the bring-up scale (authentic = heatCost×1e7
|
||||
energy units, the missile path already feeds it -- the HEAT-CALIBRATION audit);
|
||||
LODReuseHysteresis corrected 0.82→0.33 (a double); the MP beam-kill live-verify awaits a
|
||||
clear-sightline spawn (mechanism identical to solo; force-dmg cross-pod cycles verified).
|
||||
|
||||
## Locomotion / combat polish (non-gating)
|
||||
- Authentic per-mech TURN-RATE constant (currently a bring-up constant rate).
|
||||
- Body-callback gimp handlers (states 16-19, targets 0x70b2/0x7161 undecoded → fall back to stand);
|
||||
|
||||
@@ -123,17 +123,30 @@ void
|
||||
ControlsInstance
|
||||
*controls_instance;
|
||||
|
||||
int walked = 0, matched = 0; // BT diag (task #8)
|
||||
while ((controls_instance=i.ReadAndNext()) != NULL)
|
||||
{
|
||||
//------------------------------------------------
|
||||
// Process only if at least one mode bit matches
|
||||
//------------------------------------------------
|
||||
Check(controls_instance);
|
||||
++walked;
|
||||
if (controls_instance->modeMask & mode_mask)
|
||||
{
|
||||
++matched;
|
||||
controls_instance->Update(data_source);
|
||||
}
|
||||
}
|
||||
// BT diag (task #8): trace the fire-button delivery counts.
|
||||
if (getenv("BT_FIRE_LOG"))
|
||||
{
|
||||
static int s_gwalk = 0;
|
||||
if ((++s_gwalk % 40) == 1)
|
||||
DEBUG_STREAM << "[group-upd] grp=" << (void *)this
|
||||
<< " walked=" << walked << " matched=" << matched
|
||||
<< " mode=0x" << std::hex << (int)mode_mask << std::dec
|
||||
<< std::endl;
|
||||
}
|
||||
Check_Fpu();
|
||||
}
|
||||
|
||||
|
||||
@@ -630,12 +630,20 @@ BTL4Application::SharedData
|
||||
if (resource_description != NULL)
|
||||
{
|
||||
resource_description->Lock(); // FUN_00406cd0
|
||||
DEBUG_STREAM << "[ctrlmap] installing '" << primary_mapping_name
|
||||
<< "' table: " << *(int *)resource_description->resourceAddress
|
||||
<< " mappings on entity " << (void *)viewing_entity << std::endl;
|
||||
controls->CreateStreamedMappings( // FUN_0047703c
|
||||
viewing_entity,
|
||||
(int*)resource_description->resourceAddress
|
||||
);
|
||||
resource_description->Unlock();
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << "[ctrlmap] NO '" << primary_mapping_name
|
||||
<< "' sub-table for this mech" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +85,14 @@ extern BTDriveInput gBTDrive;
|
||||
//#############################################################################
|
||||
// Reconstruction support: artifact constants, globals and helper stand-ins.
|
||||
//
|
||||
static const Scalar kDamageScale = 1.0f; // _DAT_004bafbc firing-physics scale (best-effort)
|
||||
static const Scalar kDamageScale = 1.0e-7f; // _DAT_004bafbc -- an x87 80-bit constant
|
||||
// (bytes bc427ae5d594bfd6e73f @0x4bafbc)
|
||||
// = 1e-7 EXACTLY: it cancels the ctor's
|
||||
// energyTotal x1e7, so at recommended
|
||||
// charge damagePortion == the AUTHORED
|
||||
// DamageAmount verbatim (task #8; the old
|
||||
// 1.0f "best-effort" was the whole
|
||||
// damage-economy mystery)
|
||||
static const Vector3D DAT_004e0fa4(0.0f, 0.0f, 0.0f); // zero vector
|
||||
static char DAT_00522524[4] = { 0 }; // default colour tag
|
||||
static int PTR_LAB_00511e6c, DAT_00511e70, DAT_00511e74; // beam-keepalive message template
|
||||
@@ -178,9 +185,27 @@ void
|
||||
|
||||
// E = 1/2 * currentLevel^2 * energyCoefficient
|
||||
Scalar energy = 0.5f * currentLevel * currentLevel * energyCoefficient; // _DAT_004bafb8
|
||||
damagePortion = damageFraction * energy; // 0x44c
|
||||
heatPortion = energy - damagePortion; // 0x450
|
||||
damagePortion = kDamageScale * damagePortion; // firing-physics scale (best-effort)
|
||||
|
||||
// THE AUTHENTIC PER-SHOT DAMAGE (task #8) -- the closed form of the
|
||||
// binary's energy algebra (@004bb120 ctor x @004bace8 fire):
|
||||
// damagePortion = dF x (0.5 V^2 EC) x 1e-7
|
||||
// = authored DamageAmount x (charge / seekV[rec])^2
|
||||
// (kDamageScale = _DAT_004bafbc = 1e-7 EXACTLY cancels the ctor's x1e7;
|
||||
// derived here from the STORED damageFraction/energyTotal so the authored
|
||||
// base never degrades, and the bring-up charge cycle -- calibrated to the
|
||||
// degenerate EC=1 electrical model -- stays untouched. At full charge:
|
||||
// the authored value verbatim; madcat ERLLaser=6, bhk1 PPC=12.)
|
||||
{
|
||||
Scalar vRec = seekVoltage[seekVoltageRecommendedIndex];
|
||||
Scalar chargeRatio = (vRec > 0.0f) ? (currentLevel / vRec) : 1.0f;
|
||||
damagePortion = (damageFraction * energyTotal * kDamageScale)
|
||||
* chargeRatio * chargeRatio; // 0x44c
|
||||
}
|
||||
// Heat stays on the bring-up scale until the heat-calibration audit [T3]:
|
||||
// the authentic heatPortion is heatCostToFire x 1e7 energy units (the
|
||||
// missile path already feeds that scale raw); switching the emitters too
|
||||
// is the heat audit's call, not the damage economy's.
|
||||
heatPortion = energy - damageFraction * energy; // 0x450
|
||||
|
||||
// dump the heat portion into our INHERITED thermal accumulator if heatable/online.
|
||||
// E5: pendingHeat (HeatSink @0x1C8) is the field the heat sim absorbs each frame
|
||||
@@ -223,10 +248,20 @@ void
|
||||
|
||||
if (dist <= effectiveRange) // this+0x328
|
||||
{
|
||||
// The binary writes the impact point/delta/energy into the inherited Damage
|
||||
// damageData (0x3C8/0x3B0/0x3AC); the recon's beamHitPoint/beamImpact/
|
||||
// beamImpactScalar copies were dead (no readers) -> removed. Register the pip.
|
||||
DrawWeaponPip(aimTransform); // FUN_004b9728
|
||||
// THE AUTHENTIC DAMAGE SUBMISSION (task #8; binary @004bace8:7758-7764):
|
||||
// fill the inherited Damage record -- amount = this shot's
|
||||
// damagePortion (== authored DamageAmount at full charge),
|
||||
// damageForce = target - muzzle (ALSO the gyro's directional
|
||||
// hit-bounce source, retiring its random fallback), impactPoint =
|
||||
// the target point -- then submit through SendDamageMessage
|
||||
// (@004b9728) into the owner's SubsystemMessageManager.
|
||||
damageData.damageAmount = damagePortion; // @0x3AC
|
||||
damageData.damageForce.Subtract(targetPoint, muzzlePoint); // @0x3B0
|
||||
damageData.impactPoint = targetPoint; // @0x3C8
|
||||
damageData.burstCount = 1;
|
||||
Entity *submitTarget = (owner != 0)
|
||||
? *(Entity **)((char *)owner + 0x388) : 0; // mech target slot
|
||||
SendDamageMessage(submitTarget); // FUN_004b9728
|
||||
}
|
||||
|
||||
// stash the beam endpoint for replication (world hit point) + the beam's
|
||||
@@ -275,6 +310,21 @@ void
|
||||
// per-type keyboard split are retired -- weapons sharing a button now fire
|
||||
// TOGETHER (the pod's authored groups: e.g. madcat Trigger = 4 weapons).
|
||||
Logical fireEdge = CheckFireEdge(); // @004b9608
|
||||
// task #8 diag: the discharge-chain probe (button->TriggerState->edge->FSM)
|
||||
if (getenv("BT_FIRE_LOG"))
|
||||
{
|
||||
static int s_fp = 0;
|
||||
if ((++s_fp % 97) == 0 || fireEdge) // 97 prime: rotates through all weapons
|
||||
DEBUG_STREAM << "[fire-probe] " << GetName()
|
||||
<< " owner=" << (void *)owner
|
||||
<< " trigState=" << (float)fireImpulse
|
||||
<< " edge=" << (int)fireEdge
|
||||
<< " alarm=" << (int)weaponAlarm.GetState()
|
||||
<< " level=" << (float)currentLevel
|
||||
<< " tgt=" << (void *)((owner != 0)
|
||||
? *(Entity **)((char *)owner + 0x388) : 0)
|
||||
<< std::endl;
|
||||
}
|
||||
targetWithinRange = UpdateTargeting(); // @004b9bdc -> this+0x34c
|
||||
|
||||
// hard failure: powered-off, faulted, or the OWNING MECH destroyed (@004baa88
|
||||
@@ -791,6 +841,10 @@ Emitter::Emitter(
|
||||
(void)energyRampTime;
|
||||
}
|
||||
|
||||
// (task #8 note: energyCoefficient deliberately stays on the bring-up
|
||||
// electrical model -- the charge cycle is calibrated to it; the AUTHENTIC
|
||||
// damage algebra is applied as a closed form at fire time instead.)
|
||||
|
||||
// damageFraction = damageAmount / (damageAmount + heatCostToFire)
|
||||
damageFraction = damageData.damageAmount /
|
||||
(damageData.damageAmount + heatCostToFire); // 0x444
|
||||
|
||||
@@ -672,6 +672,13 @@ extern void BTPostKillScore(Entity *victim, Scalar damage); // KILL (+ MP death
|
||||
#define MECH_TARGET_ENTITY(m) (*(Entity **)((char *)(m) + 0x388))
|
||||
#define MECH_TARGET_SUBIDX(m) (*(int *)((char *)(m) + 0x38c))
|
||||
|
||||
// task #8 bridge: the weapon-side damage submission (mechweap.cpp) reads the
|
||||
// owner's designated-zone slot; the raw target-slot block lives in this TU.
|
||||
int BTMechTargetZone(void *mech)
|
||||
{
|
||||
return MECH_TARGET_SUBIDX(mech);
|
||||
}
|
||||
|
||||
// Bring-up body-animation player (file scope so OnBodyAnimFinished can re-arm it).
|
||||
// The engine AnimationInstance walks the mech's joint subsystem from a baked .ani
|
||||
// clip in btl4.res; we advance it each moving frame so the legs CYCLE.
|
||||
@@ -3042,7 +3049,19 @@ void
|
||||
s_prevBtn[b] = want[b];
|
||||
ControlsButton v = (ControlsButton)(want[b]
|
||||
? (buttons[b] + 1) : -(buttons[b] + 1));
|
||||
cm->buttonGroup[buttons[b]].Update(&v, modeMask);
|
||||
cm->buttonGroup[buttons[b]].ForceUpdate(&v, modeMask); // diag: bypass the prev-diff gate
|
||||
if (getenv("BT_FIRE_LOG"))
|
||||
{
|
||||
static int s_pushN = 0;
|
||||
if ((++s_pushN % 60) == 1)
|
||||
DEBUG_STREAM << "[push] btn=0x" << std::hex
|
||||
<< buttons[b] << std::dec << " v=" << (int)v
|
||||
<< " mode=0x" << std::hex << (int)modeMask
|
||||
<< std::dec << " #" << s_pushN
|
||||
<< " thisMech=" << (void *)this
|
||||
<< " viewpoint=" << (void *)application->GetViewpointEntity()
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3170,53 +3189,23 @@ void
|
||||
// routes it to Mech__DamageZone::TakeDamage. Dispatch on a
|
||||
// REPLICANT is rerouted by Entity::Dispatch to the owning
|
||||
// master over the wire -- the cross-pod damage path.
|
||||
if (((Mech *)victim)->damageZoneCount > 0)
|
||||
// DAMAGE DELIVERY MOVED (task #8): the AUTHENTIC submitter is
|
||||
// each firing weapon's own SendDamageMessage (@004b9728, called
|
||||
// from Emitter::FireWeapon with the authored per-shot
|
||||
// damagePortion + damageForce + impact) into the
|
||||
// SubsystemMessageManager. This block keeps only the
|
||||
// presentation roles: the boresight pick feeds the target
|
||||
// slots the weapons read (mech+0x388/0x37C/0x38C), the [fire]
|
||||
// beam-entry explosion visual above, and the shot log. The
|
||||
// flat kShotDamage build + shooter-side score moved with the
|
||||
// submission (mechweap.cpp).
|
||||
if (getenv("BT_FIRE_LOG") && ((Mech *)victim)->damageZoneCount > 0)
|
||||
{
|
||||
Damage dmg;
|
||||
dmg.damageType = Damage::ExplosiveDamageType;
|
||||
dmg.damageAmount = kShotDamage;
|
||||
dmg.burstCount = 1;
|
||||
dmg.impactPoint = impact;
|
||||
|
||||
Entity::TakeDamageMessage take_damage(
|
||||
Entity::TakeDamageMessageID,
|
||||
sizeof(Entity::TakeDamageMessage),
|
||||
GetEntityID(), // inflicting = this (shooter)
|
||||
-1, // UNAIMED -> receiver's cylinder resolves
|
||||
dmg);
|
||||
// AUTHENTIC DELIVERY (task #7 tail): submit through the
|
||||
// SubsystemMessageManager -- per-frame consolidation into
|
||||
// ONE TakeDamageStream (id 0x13) dispatched at the victim,
|
||||
// whose T0 handler re-splits it (ENTITY.cpp:817).
|
||||
// Replicant victims reroute cross-pod as before. [T3:
|
||||
// the inflicting subsystemID is not threaded through this
|
||||
// bring-up fire block -- the authentic submitter is the
|
||||
// weapon's own SendDamageMessage @004b9728, pending the
|
||||
// damage-economy reconciliation (authored 0.25-scale
|
||||
// amounts vs the bring-up kShotDamage=12); until then the
|
||||
// messmgr's weapon-explosion bundling stays dormant.]
|
||||
if (messageManager != 0)
|
||||
((SubsystemMessageManager *)messageManager)
|
||||
->AddDamageMessage(victim, &take_damage);
|
||||
else
|
||||
victim->Dispatch(&take_damage);
|
||||
|
||||
// SCORE the damage (skip once the victim is dead).
|
||||
if (!((Mech *)victim)->IsMechDestroyed())
|
||||
BTPostDamageScore(victim, kShotDamage);
|
||||
|
||||
int zone = take_damage.damageZone;
|
||||
if (zone >= 0 && zone < ((Mech *)victim)->damageZoneCount)
|
||||
{
|
||||
Scalar s = ((Mech *)victim)->Zone(zone)->damageLevel;
|
||||
DEBUG_STREAM << "[damage] " << (void*)victim << " zone " << zone
|
||||
<< "/" << ((Mech *)victim)->damageZoneCount
|
||||
<< " structure=" << s
|
||||
DEBUG_STREAM << "[damage] beam hit " << (void*)victim
|
||||
<< (((Mech *)victim)->GetInstance() == ReplicantInstance
|
||||
? " (REPLICANT -> cross-pod)" : "")
|
||||
? " (REPLICANT -> cross-pod via the weapon submit)" : "")
|
||||
<< "\n" << std::flush;
|
||||
}
|
||||
}
|
||||
// DEATH effects fire at the VICTIM's own death transition
|
||||
// (UpdateDeathState, task #42) -- MP-correct: the master runs it.
|
||||
}
|
||||
|
||||
@@ -143,7 +143,10 @@ static const Scalar CriticalDamageMax = 1.0f; // _DAT_0049ce4c
|
||||
// Probability of re-using the previous child zone inside the reuse window.
|
||||
// (Ghidra read the operand at @0049c514; exact value not cleanly recoverable
|
||||
// from the pseudo-C -- it behaves as a high "stay on the same spot" bias.)
|
||||
static const Scalar LODReuseHysteresis = 0.82f; // _DAT_0049c514 (TODO: verify)
|
||||
static const Scalar LODReuseHysteresis = 0.33f; // _DAT_0049c514 -- a DOUBLE in the
|
||||
// binary (bytes 1f85eb51b81ed53f =
|
||||
// 0.33); the old 0.82 was a misread
|
||||
// (task #8 audit)
|
||||
|
||||
|
||||
//###########################################################################
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
//
|
||||
|
||||
#include <bt.hpp>
|
||||
#include <messmgr.hpp> // SubsystemMessageManager (task #8 damage submission)
|
||||
#pragma hdrstop
|
||||
|
||||
#if !defined(MECHWEAP_HPP)
|
||||
@@ -376,13 +377,25 @@ Logical
|
||||
// @004b9608 -- rising-edge detector on fireImpulse (threshold _DAT_004b9648 == 0.0f).
|
||||
// Returns True the frame fireImpulse becomes positive while the previous sample
|
||||
// was non-positive, then stores the current sample for next time.
|
||||
// TODO: confirm exact role (discharge vs. recharge-ready edge).
|
||||
//
|
||||
// ⚠ BIT-PATTERN COMPARE (task #8 root-cause): TriggerState carries the raw
|
||||
// ControlsButton INT bit-copied by the streamed direct mapping (+(button+1)
|
||||
// press / -(button+1) release) -- the release value (e.g. -65 = 0xFFFFFFBF)
|
||||
// reads as a NEGATIVE NaN in float terms. The binary's x87 compare (FNSTSW/
|
||||
// SAHF + JBE: unordered sets CF|ZF => branch TAKEN) effectively treated the
|
||||
// NaN as "released", so its edge re-armed; an IEEE-correct float compare
|
||||
// makes NaN<=0 FALSE and the detector LATCHES SHUT after the first release
|
||||
// (observed live: one startup edge, then never again). Compare the BIT
|
||||
// PATTERNS as signed ints instead -- sign-correct for the button ints AND
|
||||
// for genuine float values (0.0f = 0x0, positives > 0, negatives/NaNs < 0),
|
||||
// reproducing the binary's effective behavior exactly.
|
||||
//
|
||||
Logical
|
||||
MechWeapon::CheckFireEdge()
|
||||
{
|
||||
Logical edge =
|
||||
(fireImpulse > 0.0f && previousFireImpulse <= 0.0f) ? True : False;
|
||||
int current = *(int *)&fireImpulse;
|
||||
int previous = *(int *)&previousFireImpulse;
|
||||
Logical edge = (current > 0 && previous <= 0) ? True : False;
|
||||
previousFireImpulse = fireImpulse;
|
||||
return edge;
|
||||
}
|
||||
@@ -465,23 +478,57 @@ void
|
||||
// routing through AddDamageMessage. This body stays dormant meanwhile.
|
||||
//
|
||||
void
|
||||
MechWeapon::DrawWeaponPip(const LinearMatrix &transform)
|
||||
MechWeapon::SendDamageMessage(Entity *target)
|
||||
{
|
||||
// @004b9728 -- register the targeting "pip" with the owning Mech's cockpit
|
||||
// HUD manager. Skipped for non-pip weapons (pipSegment == -1). The HUD
|
||||
// element record {priority 100, kind 0x12, enabled, team colour, pipPosition,
|
||||
// pipExtendedRange, transform, pipSegment} is submitted to the cockpit HUD.
|
||||
//
|
||||
// CROSS-FAMILY (hud): the cockpit HUD manager AddElement entry point lives in
|
||||
// the HUD module; the submission is wired there. We retain the gating and
|
||||
// transform reference here.
|
||||
if (useConfiguredPip) // this+0x3E0 (weapon draws a configured pip)
|
||||
// @004b9728 -- package this weapon's just-fired damageData as an
|
||||
// Entity::TakeDamageMessage and submit it to the owning mech's
|
||||
// SubsystemMessageManager for per-frame consolidation (AddDamageMessage
|
||||
// @0049b6d8) -- the authentic beam damage delivery (task #8; the caller
|
||||
// Emitter::FireWeapon fills damageAmount/damageForce/impactPoint first).
|
||||
//
|
||||
// Binary gate (part_013.c:6746): a Mech victim with NO designated zone
|
||||
// (owner+0x38C == -1) is SKIPPED. The port PASSES -1 through [T3
|
||||
// divergence]: our Mech::TakeDamageMessageHandler cylinder-resolves the
|
||||
// unaimed zone (STEP 6), preserving the verified aiming model.
|
||||
//
|
||||
Mech *mech = (Mech *)GetEntity(); // weapon+0xD0
|
||||
if (mech == 0 || target == 0)
|
||||
{
|
||||
(void)transform;
|
||||
(void)pipPosition;
|
||||
(void)pipExtendedRange;
|
||||
(void)pipColor;
|
||||
// owningHud->AddElement( ...pip record... ); // FUN_0049b6d8(entity+0x434, ..)
|
||||
return;
|
||||
}
|
||||
|
||||
extern int BTMechTargetZone(void *mech); // mech+0x38C (mech4 TU)
|
||||
int zone = BTMechTargetZone(mech);
|
||||
|
||||
Entity::TakeDamageMessage message(
|
||||
Entity::TakeDamageMessageID,
|
||||
sizeof(Entity::TakeDamageMessage),
|
||||
mech->GetEntityID(), // inflicting = owner (+0x184)
|
||||
zone, // designated zone (or -1 -> cylinder)
|
||||
damageData, // the 12-dword Damage @0x3A8
|
||||
subsystemID); // inflictingSubsystemID (+0xD8) --
|
||||
// lights up the messmgr's per-weapon
|
||||
// explosion bundling (weapon+0x3E4)
|
||||
SubsystemMessageManager *manager =
|
||||
(SubsystemMessageManager *)mech->GetMessageManager(); // mech+0x434
|
||||
if (manager != 0)
|
||||
{
|
||||
manager->AddDamageMessage(target, &message); // FUN_0049b6d8
|
||||
}
|
||||
else
|
||||
{
|
||||
target->Dispatch(&message); // no manager: direct (bring-up)
|
||||
}
|
||||
|
||||
// PORT bookkeeping (score lived in the retired mech4 fire block): credit
|
||||
// the delivered amount to the shooter-side score exactly as before.
|
||||
extern void BTPostDamageScore(Entity *victim, Scalar damage);
|
||||
extern Logical BTIsRegisteredMech(Entity *e);
|
||||
if (BTIsRegisteredMech(target)
|
||||
&& !((Mech *)target)->IsMechDestroyed())
|
||||
{
|
||||
BTPostDamageScore(target, damageData.damageAmount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -285,7 +285,9 @@ class CockpitHud;
|
||||
// @004b9728 -- register the targeting "pip" / fire marker with the
|
||||
// owning Mech's cockpit HUD manager.
|
||||
void
|
||||
DrawWeaponPip(const LinearMatrix &transform);
|
||||
SendDamageMessage(Entity *target); // @004b9728 (ex "DrawWeaponPip" -- the
|
||||
// weapon-fire damage submission into the
|
||||
// owner's SubsystemMessageManager, task #8)
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Construction and Destruction
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import capstone, struct, sys
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
data=open(r"C:/git/bt411/content/BTL4OPT.EXE","rb").read()
|
||||
CODE_VA=0x401000; CODE_RA=0xE00
|
||||
md=capstone.Cs(capstone.CS_ARCH_X86, capstone.CS_MODE_32)
|
||||
def dump(start,end):
|
||||
code=data[CODE_RA+(start-CODE_VA):CODE_RA+(end-CODE_VA)]
|
||||
for ins in md.disasm(code,start):
|
||||
print(f"{ins.address:08x}: {ins.mnemonic} {ins.op_str}")
|
||||
print("---")
|
||||
dump(0x4bac90,0x4bacf0)
|
||||
dump(0x4bae80,0x4baef0)
|
||||
dump(0x4a1d10,0x4a1d40)
|
||||
dump(0x4a2290,0x4a22c0)
|
||||
dump(0x4b9830,0x4b9870)
|
||||
@@ -0,0 +1,13 @@
|
||||
import capstone, struct, sys
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
data=open(r"C:/git/bt411/content/BTL4OPT.EXE","rb").read()
|
||||
CODE_VA=0x401000; CODE_RA=0xE00
|
||||
md=capstone.Cs(capstone.CS_ARCH_X86, capstone.CS_MODE_32)
|
||||
def dump(start,end,lo,hi):
|
||||
code=data[CODE_RA+(start-CODE_VA):CODE_RA+(end-CODE_VA)]
|
||||
for ins in md.disasm(code,start):
|
||||
if lo <= ins.address <= hi:
|
||||
print(f"{ins.address:08x}: {ins.mnemonic} {ins.op_str}")
|
||||
print("---")
|
||||
dump(0x4baa88,0x4bad10,0x4bac90,0x4bacf5)
|
||||
dump(0x4bace8,0x4baf20,0x4bae70,0x4baef5)
|
||||
@@ -0,0 +1,12 @@
|
||||
import capstone, struct, sys
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
data=open(r"C:/git/bt411/content/BTL4OPT.EXE","rb").read()
|
||||
CODE_VA=0x401000; CODE_RA=0xE00
|
||||
md=capstone.Cs(capstone.CS_ARCH_X86, capstone.CS_MODE_32)
|
||||
code=data[CODE_RA+(0x4baa88-CODE_VA):CODE_RA+(0x4bace8-CODE_VA)]
|
||||
prev_ret=None
|
||||
for ins in md.disasm(code,0x4baa88):
|
||||
if ins.mnemonic=="ret":
|
||||
print(f"ret at {ins.address:08x}")
|
||||
if ins.mnemonic=="push" and ins.op_str=="ebp":
|
||||
print(f"push ebp at {ins.address:08x}")
|
||||
@@ -0,0 +1,14 @@
|
||||
import capstone, sys
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
data=open(r"C:/git/bt411/content/BTL4OPT.EXE","rb").read()
|
||||
CODE_VA=0x401000; CODE_RA=0xE00
|
||||
md=capstone.Cs(capstone.CS_ARCH_X86, capstone.CS_MODE_32)
|
||||
for start in (0x4bac04,0x4bac08,0x4bac0c,0x4bac10):
|
||||
code=data[CODE_RA+(start-CODE_VA):CODE_RA+(start-CODE_VA)+48]
|
||||
insns=list(md.disasm(code,start))
|
||||
if insns and insns[0].mnemonic=="push" and insns[0].op_str=="ebp":
|
||||
print(f"FUNCTION START {start:08x}")
|
||||
code=data[CODE_RA+(start-CODE_VA):CODE_RA+(0x4bace6-CODE_VA)]
|
||||
for ins in md.disasm(code,start):
|
||||
print(f"{ins.address:08x}: {ins.mnemonic} {ins.op_str}")
|
||||
break
|
||||
@@ -0,0 +1,70 @@
|
||||
import struct, sys
|
||||
data = open(r'C:\git\bt411\content\BTL4.RES', 'rb').read()
|
||||
labOnly, maxID = struct.unpack_from('<ii', data, 4)
|
||||
offs = struct.unpack_from('<%dI' % maxID, data, 12)
|
||||
|
||||
# ResourcePhysicalFormat: id i32, type i32, name[32], prio i32, flags i32, offset i32, length i32
|
||||
recs = []
|
||||
for o in offs:
|
||||
if o == 0: continue
|
||||
rid, rt = struct.unpack_from('<ii', data, o)
|
||||
nm = data[o+8:o+40].split(b'\0')[0].decode('ascii','replace')
|
||||
prio, flags, roff, rlen = struct.unpack_from('<iiII', data, o+40)
|
||||
recs.append((rid, rt, nm, roff, rlen))
|
||||
|
||||
DZ = [r for r in recs if r[1] == 20]
|
||||
print('type-0x14 DamageZoneStream resources:')
|
||||
for r in DZ:
|
||||
print(' id=%d name=%r off=0x%x len=%d' % (r[0], r[2], r[3], r[4]))
|
||||
|
||||
def parse_zone_stream(buf, tag):
|
||||
p = 0
|
||||
def i32():
|
||||
nonlocal p
|
||||
v = struct.unpack_from('<i', buf, p)[0]; p += 4; return v
|
||||
def f32():
|
||||
nonlocal p
|
||||
v = struct.unpack_from('<f', buf, p)[0]; p += 4; return v
|
||||
def cstr():
|
||||
nonlocal p
|
||||
n = i32()
|
||||
s = buf[p:p+n].decode('ascii','replace'); p += n + 1
|
||||
return s
|
||||
count = i32()
|
||||
print('\n===== %s: zoneCount=%d streamLen=%d =====' % (tag, count, len(buf)))
|
||||
for z in range(count):
|
||||
name = cstr()
|
||||
sites = []
|
||||
for j in range(5):
|
||||
c = i32()
|
||||
sites.append([i32() for _ in range(c)])
|
||||
dap = f32()
|
||||
scales = [f32() for _ in range(5)]
|
||||
sklcount = i32()
|
||||
mats = []
|
||||
for s in range(sklcount):
|
||||
styp = i32()
|
||||
mc = i32()
|
||||
names = [cstr() for _ in range(mc)]
|
||||
mats.append((styp, names))
|
||||
descend = i32(); sibs = i32(); segidx = i32()
|
||||
lleg = i32(); rleg = i32(); vital = i32(); ncrit = i32()
|
||||
crits = []
|
||||
for c in range(ncrit):
|
||||
w = f32(); pct = f32(); sidx = i32()
|
||||
crits.append((w, pct, sidx))
|
||||
nred = i32()
|
||||
redirects = [i32() for _ in range(nred)]
|
||||
# implied per-type armor points: scale = 1/points -> points = 1/scale
|
||||
pts = ['%g' % (1.0/s if s else 0) for s in scales]
|
||||
print('zone %2d %-24s armor(default)=%g scale=[%s] -> points=[%s]' %
|
||||
(z, name, dap, ' '.join('%.6g' % s for s in scales), ' '.join(pts)))
|
||||
print(' seg=%d vital=%d legs(L%d,R%d) descend=%d sibs=%d mats=%d crits=%s redirects=%s' %
|
||||
(segidx, vital, lleg, rleg, descend, sibs, sklcount,
|
||||
[(round(w,3), round(pc,3), si) for (w,pc,si) in crits], redirects))
|
||||
print('consumed %d of %d bytes' % (p, len(buf)))
|
||||
|
||||
want = [n.lower() for n in (sys.argv[1:] or ['madcat','bhk1'])]
|
||||
for (rid, rt, nm, roff, rlen) in DZ:
|
||||
if any(w in nm.lower() for w in want):
|
||||
parse_zone_stream(data[roff:roff+rlen], 'id=%d %s' % (rid, nm))
|
||||
@@ -0,0 +1,39 @@
|
||||
import capstone, struct, sys
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
data = open(r"C:/git/bt411/content/BTL4OPT.EXE","rb").read()
|
||||
CODE_VA=0x401000; CODE_RA=0xE00
|
||||
# scan whole CODE section but report region; disp32 0x434 pattern
|
||||
pat = b"\x34\x04\x00\x00"
|
||||
md = capstone.Cs(capstone.CS_ARCH_X86, capstone.CS_MODE_32); md.detail=False
|
||||
# find CODE section size
|
||||
pe = struct.unpack_from("<I", data, 0x3c)[0]
|
||||
nsec = struct.unpack_from("<H", data, pe+6)[0]
|
||||
opt=pe+24; szopt=struct.unpack_from("<H",data,pe+20)[0]; sec0=opt+szopt
|
||||
for i in range(nsec):
|
||||
off=sec0+i*40
|
||||
name=data[off:off+8].rstrip(b"\0").decode()
|
||||
vsz,va,rsz,ra=struct.unpack_from("<IIII",data,off+8)
|
||||
if name=="CODE": code_rsz=rsz
|
||||
start=0
|
||||
hits=[]
|
||||
while True:
|
||||
idx = data.find(pat, start)
|
||||
if idx<0: break
|
||||
start=idx+1
|
||||
if not (CODE_RA <= idx < CODE_RA+code_rsz): continue
|
||||
va = CODE_VA + (idx - CODE_RA)
|
||||
# try disassembling from a few candidate starts before the disp
|
||||
for back in range(2,9):
|
||||
chunk = data[idx-back: idx-back+16]
|
||||
insns = list(md.disasm(chunk, va-back))
|
||||
if insns:
|
||||
i0 = insns[0]
|
||||
if "0x434" in i0.op_str and i0.address+i0.size >= va+4 and i0.address+i0.size <= va+4+4:
|
||||
hits.append((i0.address, f"{i0.mnemonic} {i0.op_str}", i0.size))
|
||||
break
|
||||
seen=set()
|
||||
for a,s,sz in sorted(hits):
|
||||
if a in seen: continue
|
||||
seen.add(a)
|
||||
region = "MECH" if 0x49e000<=a<0x4c0000 else ""
|
||||
print(f"{a:08x} {region:5s} {s}")
|
||||
@@ -0,0 +1,31 @@
|
||||
import capstone, struct, sys
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
data = open(r"C:/git/bt411/content/BTL4OPT.EXE","rb").read()
|
||||
CODE_VA=0x401000; CODE_RA=0xE00
|
||||
pe = struct.unpack_from("<I", data, 0x3c)[0]
|
||||
nsec = struct.unpack_from("<H", data, pe+6)[0]
|
||||
opt=pe+24; szopt=struct.unpack_from("<H",data,pe+20)[0]; sec0=opt+szopt
|
||||
for i in range(nsec):
|
||||
off=sec0+i*40
|
||||
name=data[off:off+8].rstrip(b"\0").decode()
|
||||
vsz,va,rsz,ra=struct.unpack_from("<IIII",data,off+8)
|
||||
if name=="CODE": code_rsz=rsz
|
||||
pat=b"\x34\x04\x00\x00"
|
||||
md=capstone.Cs(capstone.CS_ARCH_X86, capstone.CS_MODE_32)
|
||||
start=0; matched={0x4a1d2d,0x4a22ad,0x4b984b,0x4bacc7,0x4baeb4}
|
||||
while True:
|
||||
idx=data.find(pat,start)
|
||||
if idx<0: break
|
||||
start=idx+1
|
||||
if not (CODE_RA<=idx<CODE_RA+code_rsz): continue
|
||||
va=CODE_VA+(idx-CODE_RA)
|
||||
ok=False
|
||||
for back in range(2,9):
|
||||
for ins in md.disasm(data[idx-back:idx-back+16], va-back):
|
||||
if "0x434" in ins.op_str and va+4 <= ins.address+ins.size <= va+8:
|
||||
ok=True; break
|
||||
if ok: break
|
||||
if not ok:
|
||||
# show raw bytes context for manual inspection
|
||||
print(f"UNMATCHED at va {va:08x}: {data[idx-8:idx+8].hex()}")
|
||||
print("done")
|
||||
@@ -0,0 +1,91 @@
|
||||
import struct
|
||||
data = open(r'C:/git/bt411/content/BTL4.RES','rb').read()
|
||||
n = len(data)
|
||||
|
||||
def cstr(off, maxlen=32):
|
||||
s = data[off:off+maxlen].split(b'\0')[0]
|
||||
try: return s.decode('ascii')
|
||||
except: return None
|
||||
|
||||
def f32(off): return struct.unpack_from('<f', data, off)[0]
|
||||
def i32(off): return struct.unpack_from('<i', data, off)[0]
|
||||
|
||||
DMGTYPE = {0:'Collision',1:'Ballistic',2:'Explosive',3:'Laser',4:'Energy'}
|
||||
|
||||
# find ALL subsystem records: printable name @+0, classID @+0x20 in 0xBB0..0xBE0, size @+0x24 plausible
|
||||
recs = []
|
||||
i = 0
|
||||
while i < n - 0x28:
|
||||
cid = struct.unpack_from('<I', data, i+0x20)[0]
|
||||
if 0xBB0 <= cid <= 0xBE5:
|
||||
sz = struct.unpack_from('<I', data, i+0x24)[0]
|
||||
if 0xE0 <= sz <= 0x300:
|
||||
name = cstr(i)
|
||||
if name and 2 <= len(name) <= 31 and all(32 < ord(c) < 127 for c in name):
|
||||
# name buffer should be null-padded to 32
|
||||
pad = data[i+len(name):i+0x20]
|
||||
if pad.count(0) >= len(pad) - 2:
|
||||
recs.append((i, name, cid, sz))
|
||||
i += 0x28
|
||||
continue
|
||||
i += 1
|
||||
|
||||
print(f'total subsystem records: {len(recs)}')
|
||||
|
||||
# group into chains (consecutive: next record at p+sz)
|
||||
chains = []
|
||||
cur = []
|
||||
for k,(p,name,cid,sz) in enumerate(recs):
|
||||
if cur and cur[-1][0] + cur[-1][3] == p:
|
||||
cur.append(recs[k])
|
||||
else:
|
||||
if cur: chains.append(cur)
|
||||
cur = [recs[k]]
|
||||
if cur: chains.append(cur)
|
||||
|
||||
# mech-name strings for labeling
|
||||
mechnames = [b'madcat', b'bhk', b'vulture', b'thor', b'blackhawk', b'blh', b'owens', b'strider', b'sunder', b'cauldron', b'avatar', b'mdc']
|
||||
low = data.lower()
|
||||
namepos = []
|
||||
for m in mechnames:
|
||||
j = 0
|
||||
while True:
|
||||
j = low.find(m, j)
|
||||
if j < 0: break
|
||||
namepos.append((j, m.decode()))
|
||||
j += 1
|
||||
namepos.sort()
|
||||
|
||||
def nearest_label(p):
|
||||
best = None
|
||||
for pos, name in namepos:
|
||||
if pos < p: best = (pos, name)
|
||||
else: break
|
||||
return best
|
||||
|
||||
WEAP = {0xBC8:'Emitter', 0xBD4:'PPC', 0xBCD:'MechWeapon/Projectile', 0xBCE:'GaussRifle?', 0xBD0:'MissileLauncher'}
|
||||
|
||||
for ci, ch in enumerate(chains):
|
||||
lbl = nearest_label(ch[0][0])
|
||||
has_weap = any(c[2] in WEAP for c in ch)
|
||||
print(f'--- chain {ci} @0x{ch[0][0]:x} n={len(ch)} nearest-name={lbl} roster={[c[1] for c in ch]}')
|
||||
for (p,name,cid,sz) in ch:
|
||||
if cid not in WEAP: continue
|
||||
rr, wr = f32(p+0x190), f32(p+0x194)
|
||||
dmg = f32(p+0x19C); dt = i32(p+0x1A0); heat = f32(p+0x1A4)
|
||||
pip = i32(p+0x1A8); pc = (f32(p+0x1AC), f32(p+0x1B0), f32(p+0x1B4)); per = i32(p+0x1B8)
|
||||
line = (f' {name:24s} cid=0x{cid:X}({WEAP[cid]}) sz=0x{sz:X} Recharge={rr:g} Range={wr:g} '
|
||||
f'Damage={dmg:g} Type={dt}({DMGTYPE.get(dt,"?")}) Heat={heat:g} Pip={pip} PipColor={pc} PipExt={per}')
|
||||
if cid in (0xBC8, 0xBD4) and sz >= 0x1DC:
|
||||
gl, dtm = f32(p+0x1BC), f32(p+0x1C0)
|
||||
sv = [f32(p+0x1C4+4*k) for k in range(5)]
|
||||
ri = i32(p+0x1D8)
|
||||
line += f' | GraphicLen={gl:g} DischargeTime={dtm:g} SeekV={["%g"%v for v in sv]} RecIdx={ri}'
|
||||
if cid in (0xBCD, 0xBD0) and sz >= 0x1D0:
|
||||
ti, abi = i32(p+0x1BC), i32(p+0x1C0)
|
||||
mtof, mvp, mjc = f32(p+0x1C4), f32(p+0x1C8), f32(p+0x1CC)
|
||||
line += f' | TracerInt={ti} AmmoBin={abi} MinTOF={mtof:g} MinVolt%={mvp:g} MinJam={mjc:g}'
|
||||
if cid == 0xBD0 and sz >= 0x1E0:
|
||||
mc = i32(p+0x1D0); mv = (f32(p+0x1D4), f32(p+0x1D8), f32(p+0x1DC))
|
||||
line += f' | MissileCount={mc} MuzzleVel={mv}'
|
||||
print(line)
|
||||
@@ -0,0 +1,157 @@
|
||||
total subsystem records: 528
|
||||
--- chain 0 @0x2f741 n=28 nearest-name=(194317, 'madcat') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC100', 'AFC100', 'ERLLaser', 'ERSLaser_1', 'ERSLaser_2', 'AmmoBinLRM15_1', 'LRM15_1', 'AmmoBinLRM15_2', 'LRM15_2']
|
||||
AFC100 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=8 Range=400 Damage=25 Type=1(Ballistic) Heat=6.5e+07 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERLLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=750 Damage=6 Type=3(Laser) Heat=8.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM15_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=6 Range=6000 Damage=50 Type=2(Explosive) Heat=6.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=26 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=15 MuzzleVel=(0.0, 0.0, 30.0)
|
||||
LRM15_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=6 Range=6000 Damage=50 Type=2(Explosive) Heat=6.5e+07 Pip=2 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=28 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=15 MuzzleVel=(0.0, 0.0, 30.0)
|
||||
--- chain 1 @0x5ae8b n=31 nearest-name=(341319, 'madcat') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC25_1', 'AFC25_1', 'AmmoBinAFC25_2', 'AFC25_2', 'MLaser1', 'MLaser2', 'MLaser3', 'MLaser4', 'AmmoBinLRM10_1', 'LRM10_1', 'AmmoBinLRM10_2', 'LRM10_2']
|
||||
AFC25_1 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
AFC25_2 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=2 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=23 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
MLaser1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser3 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser4 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=4 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM10_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=4 Range=6000 Damage=20 Type=2(Explosive) Heat=4.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=10 MuzzleVel=(0.0, 0.0, 30.0)
|
||||
LRM10_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=4 Range=6000 Damage=20 Type=2(Explosive) Heat=4.5e+07 Pip=2 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=31 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=10 MuzzleVel=(0.0, 0.0, 30.0)
|
||||
--- chain 2 @0x86d56 n=30 nearest-name=(393720, 'blh') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'ERPPC', 'AmmoBinAFC50', 'AFC50', 'ERMLaser_1', 'ERMLaser_2', 'AmmoBinLRM15', 'LRM15', 'AmmoBinSRM6_1', 'SRM6_1', 'AmmoBinSRM6_2', 'SRM6_2']
|
||||
ERPPC cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=950 Damage=16 Type=4(Energy) Heat=16 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
AFC50 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=4 Range=750 Damage=13 Type=1(Ballistic) Heat=2e+07 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=22 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM15 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=6 Range=6000 Damage=35 Type=2(Explosive) Heat=6.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=26 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=15 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
SRM6_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=3 Range=800 Damage=20 Type=2(Explosive) Heat=3e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=28 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=4 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
SRM6_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=3 Range=800 Damage=20 Type=2(Explosive) Heat=3e+07 Pip=2 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=30 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=4 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 3 @0xb2525 n=29 nearest-name=(393720, 'blh') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC50_1', 'AFC50_1', 'AmmoBinAFC50_2', 'AFC50_2', 'ERMLaser_1', 'ERMLaser_2', 'ERSLaser_1', 'ERSLaser_2', 'AmmoBinSRM4', 'SRM4']
|
||||
AFC50_1 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=4 Range=750 Damage=13 Type=1(Ballistic) Heat=2e+07 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
AFC50_2 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=4 Range=750 Damage=13 Type=1(Ballistic) Heat=2e+07 Pip=2 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=23 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SRM4 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=3 Range=800 Damage=35 Type=2(Explosive) Heat=3e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=4 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 4 @0xd0d9a n=29 nearest-name=(393720, 'blh') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'PPC_1', 'PPC_2', 'LLaser_1', 'LLaser_2', 'MLaser_1', 'MLaser_2', 'SLaser_1', 'SLaser_2', 'AmmoBinSRM4', 'SRM4']
|
||||
PPC_1 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
PPC_2 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=2 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=150 Damage=1.5 Type=3(Laser) Heat=0.75 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=150 Damage=1.5 Type=3(Laser) Heat=0.75 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SRM4 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=3 Range=800 Damage=20 Type=2(Explosive) Heat=3e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=4 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 5 @0xefe32 n=31 nearest-name=(393720, 'blh') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'PPC', 'AmmoBinGAUSS', 'GAUSS', 'AmmoBinAFC25', 'AFC25', 'MLaser_1', 'MLaser_2', 'MLaser_3', 'SLaser_1', 'SLaser_2', 'AmmoBinSRM4', 'SRM4']
|
||||
PPC cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
GAUSS cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=8 Range=900 Damage=20 Type=1(Ballistic) Heat=1e+06 Pip=2 PipColor=(1.0, 1.0, 0.0) PipExt=0 | TracerInt=1 AmmoBin=22 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
AFC25 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=3 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=24 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
MLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=150 Damage=1.5 Type=3(Laser) Heat=0.75 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=150 Damage=1.5 Type=3(Laser) Heat=0.75 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SRM4 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=2 Range=800 Damage=10 Type=2(Explosive) Heat=1.5e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=31 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=2 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 6 @0x10e2a5 n=27 nearest-name=(1106545, 'thor') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'ERPPC_1', 'ERPPC_2', 'LLaser', 'ERMLaser', 'ERSLaser_1', 'ERSLaser_2', 'AmmoBinLRM15', 'LRM15']
|
||||
ERPPC_1 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=950 Damage=16 Type=4(Energy) Heat=16 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERPPC_2 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=950 Damage=16 Type=4(Energy) Heat=16 Pip=2 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM15 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=6 Range=6000 Damage=50 Type=2(Explosive) Heat=6.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=15 MuzzleVel=(0.0, 0.0, 30.0)
|
||||
--- chain 7 @0x12d01f n=31 nearest-name=(1199851, 'thor') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC25_1', 'AFC25_1', 'AmmoBinAFC25_2', 'AFC25_2', 'LLaser_1', 'LLaser_2', 'ERSLaser_1', 'ERSLaser_2', 'ERSLaser_3', 'ERSLaser_4', 'AmmoBinLRM10', 'LRM10']
|
||||
AFC25_1 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
AFC25_2 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=2 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=23 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
LLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_4 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=4 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM10 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=4 Range=6000 Damage=20 Type=2(Explosive) Heat=4.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=31 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=10 MuzzleVel=(0.0, 0.0, 30.0)
|
||||
--- chain 8 @0x14c7f9 n=32 nearest-name=(1361717, 'blh') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'Searchlight2', 'ERLLaser', 'ERMLaser_1', 'ERMLaser_2', 'ERMLaser_3', 'ERMLaser_4', 'ERMLaser_5', 'ERSLaser_1', 'ERSLaser_2', 'AmmoBinSRM6_1', 'SRM6_1', 'AmmoBinSRM6_2', 'SRM6_2']
|
||||
ERLLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=750 Damage=6 Type=3(Laser) Heat=8.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_4 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_5 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SRM6_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=5 Range=800 Damage=50 Type=2(Explosive) Heat=5e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=30 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=6 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
SRM6_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=5 Range=800 Damage=50 Type=2(Explosive) Heat=5e+07 Pip=2 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=32 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=6 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 9 @0x173682 n=29 nearest-name=(1521230, 'bhk') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'Searchlight2', 'PPC_1', 'PPC_2', 'ERMLaser_1', 'ERMLaser_2', 'ERMLaser_3', 'AmmoBinSRM6_1', 'SRM6_1', 'AmmoBinSRM6_2', 'SRM6_2']
|
||||
PPC_1 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
PPC_2 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=2 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SRM6_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=5 Range=800 Damage=35 Type=2(Explosive) Heat=5e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=6 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
SRM6_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=5 Range=800 Damage=35 Type=2(Explosive) Heat=5e+07 Pip=2 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=6 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 10 @0x19a1a4 n=29 nearest-name=(1679728, 'owens') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'ERMLaser_1', 'ERMLaser_2', 'ERSLaser_1', 'ERSLaser_2', 'ERSLaser_3', 'ERSLaser_4', 'AmmoBinSRM6_1', 'SRM6_1', 'AmmoBinSRM6_2', 'SRM6_2']
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_4 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=4 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
SRM6_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=5 Range=800 Damage=50 Type=2(Explosive) Heat=5e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=6 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
SRM6_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=5 Range=800 Damage=50 Type=2(Explosive) Heat=5e+07 Pip=2 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=6 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 11 @0x1ba20d n=27 nearest-name=(1783489, 'owens') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC25', 'AFC25', 'ERMLaser', 'ERSLaser', 'AmmoBinNRK5_1', 'NRK5_1', 'AmmoBinNRK5_2', 'NRK5_2']
|
||||
AFC25 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERMLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
NRK5_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=2.5 Range=6000 Damage=10 Type=2(Explosive) Heat=1.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=25 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=5 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
NRK5_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=2.5 Range=6000 Damage=10 Type=2(Explosive) Heat=1.5e+07 Pip=2 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=5 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
--- chain 12 @0x1da7f8 n=29 nearest-name=(1943492, 'vulture') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'LLaser_1', 'LLaser_2', 'ERSLaser_1', 'ERSLaser_2', 'ERMLaser_1', 'ERMLaser_2', 'AmmoBinLRM20_1', 'LRM20_1', 'AmmoBinLRM20_2', 'LRM20_2']
|
||||
LLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=600 Damage=5 Type=3(Laser) Heat=6 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM20_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=9 Range=6000 Damage=65 Type=2(Explosive) Heat=9.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=20 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
LRM20_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=9 Range=6000 Damage=65 Type=2(Explosive) Heat=9.5e+07 Pip=2 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=20 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
--- chain 13 @0x206207 n=29 nearest-name=(2092273, 'vulture') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'PPC_1', 'PPC_2', 'ERSLaser_1', 'ERSLaser_2', 'ERSLaser_3', 'ERSLaser_4', 'AmmoBinLRM15_1', 'LRM15_1', 'AmmoBinLRM15_2', 'LRM15_2']
|
||||
PPC_1 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
PPC_2 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=2 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_4 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=4 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM15_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=6 Range=6000 Damage=35 Type=2(Explosive) Heat=6.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=15 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
LRM15_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=6 Range=6000 Damage=35 Type=2(Explosive) Heat=6.5e+07 Pip=2 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=15 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
--- chain 14 @0x232962 n=31 nearest-name=(2304302, 'avatar') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC50', 'AFC50', 'ERLLaser_1', 'ERLLaser_2', 'ERMLaser_1', 'ERMLaser_2', 'ERMLaser_3', 'ERMLaser_4', 'AmmoBinLRM10_1', 'LRM10_1', 'AmmoBinLRM10_2', 'LRM10_2']
|
||||
AFC50 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=4 Range=750 Damage=13 Type=1(Ballistic) Heat=2e+07 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERLLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=750 Damage=6 Type=3(Laser) Heat=8.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERLLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=4 Range=750 Damage=6 Type=3(Laser) Heat=8.5 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_3 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=3 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_4 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=4 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM10_1 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=4 Range=6000 Damage=35 Type=2(Explosive) Heat=4.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=29 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=10 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
LRM10_2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=4 Range=6000 Damage=35 Type=2(Explosive) Heat=4.5e+07 Pip=2 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=31 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=10 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
--- chain 15 @0x25eb7a n=28 nearest-name=(2455601, 'avatar') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC100', 'AFC100', 'PPC', 'ERMLaser_1', 'ERMLaser_2', 'AmmoBinLRM5', 'LRM5', 'AmmoBinSRM2', 'SRM2']
|
||||
AFC100 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=8 Range=400 Damage=25 Type=1(Ballistic) Heat=6.5e+07 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
PPC cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM5 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=2.5 Range=6000 Damage=10 Type=2(Explosive) Heat=1.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=26 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=5 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
SRM2 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=2 Range=800 Damage=10 Type=2(Explosive) Heat=1.5e+07 Pip=1 PipColor=(0.6000000238418579, 0.4000000059604645, 0.0) PipExt=0 | TracerInt=1 AmmoBin=28 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=2 MuzzleVel=(0.0, 0.0, 100.0)
|
||||
--- chain 16 @0x28b7f7 n=31 nearest-name=(2668483, 'sunder') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'AmmoBinAFC25', 'AFC25', 'AmmoBinAFC100', 'AFC100', 'ERMLaser_1', 'ERMLaser_2', 'ERSLaser_1', 'ERSLaser_2', 'MLaser_1', 'MLaser_2', 'AmmoBinLRM10', 'LRM10']
|
||||
AFC25 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=21 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
AFC100 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=8 Range=400 Damage=25 Type=1(Ballistic) Heat=6.5e+07 Pip=1 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=23 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERMLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERMLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=500 Damage=3.5 Type=3(Laser) Heat=3.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
ERSLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser_1 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
MLaser_2 cid=0xBC8(Emitter) sz=0x1DC Recharge=2 Range=350 Damage=2.5 Type=3(Laser) Heat=2 Pip=2 PipColor=(1.0, 0.0, 0.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM10 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=4 Range=6000 Damage=35 Type=2(Explosive) Heat=4.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=31 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=10 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
--- chain 17 @0x2a9d65 n=27 nearest-name=(2764479, 'sunder') roster=['HeatSink', 'Reservoir', 'Condenser1', 'Condenser2', 'Condenser3', 'Condenser4', 'Condenser5', 'Condenser6', 'GeneratorA', 'GeneratorB', 'GeneratorC', 'GeneratorD', 'Avionics', 'Myomers', 'Gyroscope', 'Torso', 'HUD', 'Searchlight', 'ThermalSight', 'PPC_1', 'PPC_2', 'PPC_3', 'AmmoBinAFC25', 'AFC25', 'ERSLaser', 'AmmoBinLRM5', 'LRM5']
|
||||
PPC_1 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=1 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
PPC_2 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=2 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
PPC_3 cid=0xBD4(PPC) sz=0x1DC Recharge=5 Range=900 Damage=12 Type=4(Energy) Heat=11 Pip=3 PipColor=(0.0, 0.0, 1.0) PipExt=0 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
AFC25 cid=0xBCD(MechWeapon/Projectile) sz=0x1D0 Recharge=2 Range=900 Damage=7 Type=1(Ballistic) Heat=1.5e+06 Pip=4 PipColor=(1.0, 0.5, 0.0) PipExt=0 | TracerInt=1 AmmoBin=24 MinTOF=1e+06 MinVolt%=0.3 MinJam=0.05
|
||||
ERSLaser cid=0xBC8(Emitter) sz=0x1DC Recharge=1 Range=225 Damage=2 Type=3(Laser) Heat=1.5 Pip=1 PipColor=(1.0, 0.0, 0.0) PipExt=1 | GraphicLen=2000 DischargeTime=0.2 SeekV=['0.6', '0.7', '0.8', '0.99', '-1'] RecIdx=2
|
||||
LRM5 cid=0xBD0(MissileLauncher) sz=0x1E0 Recharge=2.5 Range=6000 Damage=10 Type=2(Explosive) Heat=1.5e+07 Pip=1 PipColor=(0.0, 1.0, 0.0) PipExt=1 | TracerInt=1 AmmoBin=27 MinTOF=0.5 MinVolt%=0.3 MinJam=0.05 | MissileCount=5 MuzzleVel=(0.0, 5.0, 30.0)
|
||||
Reference in New Issue
Block a user