World-pick targeting: 0x388 = whatever is downrange -- mech, terrain, or nothing (task #41)
User video evidence (lasers firing at nothing) + the colleague's
torso-locked report + the binary all reconcile into one model:
The boresight pick hits the WORLD, and the target slot mech+0x388 holds
whatever entity is downrange:
- enemy mech under the boresight -> aimed target (hull point -> STEP-6
zone under the boresight, hotbox + lock ring, damage);
- else the TERRAIN downrange (BTGroundRayHit to 1200) -> the beam and
missiles fire at the scenery ("firing at nothing", as in the pod
videos), range caret reads the ground distance (authentic :5639), no
damage;
- else (sky) -> no target, and the weapon's own double 0x388 gate
refuses the discharge.
Binary evidence for non-mech targets: HudSimulation :5620 explicitly
handles a target WITHOUT damage zones (target->0x120 == 0) -- dead code
if only mechs were ever targeted. The pick is automatic every frame
(0x388: 11 reads / 0 direct stores in CODE).
Implementation: gBTTerrainEntity captured in MakeEntityRenderables
(Terrain::GetClassDerivations); mech4 pick = enemy PickRayHit else
ground ray -> terrain entity + ground point; damage/hotbox/lock only
for the mech pick; the task-40 enemy auto-converge REMOVED (facing away
now fires at the scenery, not magically at the enemy -- the user's
complaint). Verified all three states headless (BT_AIM 0,0 / .6,.5 /
0,-.8): aimed zone hits / terrain beams + 0 damage / no discharge.
Fourth (and evidence-complete) targeting model iteration; KB updated.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
60ed54e008
commit
e30a61a62f
@@ -58,11 +58,19 @@
|
||||
#if !defined(APP_HPP)
|
||||
# include <app.hpp>
|
||||
#endif
|
||||
#if !defined(TERRAIN_HPP)
|
||||
# include <terrain.hpp> // Terrain::GetClassDerivations (world-pick target, task #41)
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <time.h> // clock() -- the threat-trail ages (task #37)
|
||||
|
||||
// WORLD-PICK TARGET (task #41): a live Terrain entity mech4 cites in
|
||||
// mech+0x388 when the boresight pick lands on the ground (the binary's target
|
||||
// slot holds non-mech world entities). Captured in MakeEntityRenderables.
|
||||
Entity *gBTTerrainEntity = 0;
|
||||
|
||||
|
||||
//
|
||||
// Material-name substitution placeholders. Mirrors RPL4VideoRenderer's
|
||||
@@ -205,6 +213,19 @@ void
|
||||
// `this_instance` in the CulturalIcon/Landmark arm has been fixed in
|
||||
// L4VIDEO.cpp.
|
||||
//
|
||||
// WORLD-PICK TARGET support (task #41): the boresight pick can hit
|
||||
// TERRAIN (the binary's target slot holds non-mech world entities --
|
||||
// HudSimulation part_013.c:5620 explicitly handles a target without
|
||||
// damage zones). Capture a live Terrain entity for mech4's ground
|
||||
// pick to cite in mech+0x388 (the pick POINT carries the geometry;
|
||||
// which specific instance matters only to damage, which never routes
|
||||
// to terrain).
|
||||
{
|
||||
extern Entity *gBTTerrainEntity;
|
||||
if (gBTTerrainEntity == 0
|
||||
&& entity->IsDerivedFrom(*Terrain::GetClassDerivations()))
|
||||
gBTTerrainEntity = entity;
|
||||
}
|
||||
DPLRenderer::MakeEntityRenderables(
|
||||
entity, model_resource, view_type);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user