Files
BT411/scratchpad/night6/file_73impl.py
T

27 lines
2.9 KiB
Python

"""#73 implementation comment -- retry until the road internet cooperates."""
import base64, json, subprocess, urllib.request
BASE="https://gitea.mysticmachines.com/api/v1/repos/VWE/BT411"
o=subprocess.run(["git","credential","fill"],input="protocol=https\nhost=gitea.mysticmachines.com\n\n",
capture_output=True,text=True,cwd=r"C:\git\bt411")
c=dict(l.split("=",1) for l in o.stdout.strip().splitlines() if "=" in l)
A="Basic "+base64.b64encode((c["username"]+":"+c["password"]).encode()).decode()
BODY = """**FIX LANDED 2026-07-30** (`8a99972`, build 4.11.628) -- aimed fire now strikes the part under the crosshair. Staying open for field confirmation.
Implementation of the recovered model: at render-tree build, each segment's draw geometry + its authored `PrimaryDamageZone` (carried per segment in the skeleton stream) are recorded; the pick ray-tests the per-segment bounding spheres on the live posed skeleton. Selection is **specificity-first** -- among pierced spheres the smallest radius wins -- because the torso mesh's sphere (r~4.1) envelops the whole mech and defeats both nearest-entry and normalized-distance rules (measured). Limb spheres nest inside it; smallest-pierced picks the most specific part on the aim line, the per-part semantic of the pod's mesh intersection.
The winner's zone dispatches as a REAL aimed zone (`MECH_TARGET_SUBIDX` -> `SendDamageMessage`); the whole-mech box + zone -1 lottery survives only as the fallback (no tree, wrecked, structure occlusion). Bursts 2+ still re-lottery per the recovered handler -- authentic.
**Bench, the same sweep that exposed the bug:** aiming left = **36/41 hits on `jointlshoulder`'s zone** (a 6-way lottery spray before). The MadCat's authored map: shoulders 2/9, guns 6/17, hip 1, six leg zones, torso 0.
**Field protocol -- the exact night-6 test:** stationary mechs, short range, fire ONLY at one arm. The paper doll should now damage THAT arm, deterministically (crits on it will still roll probabilistically per the #80 curve). Known approximations to watch: sphere bounds (not triangles), and a shot grazing the torso's silhouette edge credits the torso where the pod would have missed into air.
Diag for any weirdness: `BT_PICK_LOG` -> `[segpick]` (the mech's segment->zone map at spawn) + `[pickwin]` (zone/score per pick; score ~0 = threading a part's core, ~1 = envelope graze)."""
marker=BODY.strip().splitlines()[0][:60]
req=urllib.request.Request(BASE+"/issues/73/comments"); req.add_header("Authorization",A)
for cm in json.load(urllib.request.urlopen(req, timeout=30)):
if marker in cm.get("body",""): print("already posted"); raise SystemExit
d=json.dumps({"body":BODY}).encode()
req=urllib.request.Request(BASE+"/issues/73/comments",data=d,method="POST")
req.add_header("Authorization",A); req.add_header("Content-Type","application/json")
json.load(urllib.request.urlopen(req, timeout=30)); print("commented on #73")