37 lines
3.6 KiB
Python
37 lines
3.6 KiB
Python
"""#75 fix-landed + #78 progress comments."""
|
|
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()
|
|
def post(n, body):
|
|
marker=body.strip().splitlines()[0][:60]
|
|
req=urllib.request.Request(BASE+"/issues/%d/comments"%n); req.add_header("Authorization",A)
|
|
for cm in json.load(urllib.request.urlopen(req, timeout=30)):
|
|
if marker in cm.get("body",""): print("#%d already posted"%n); return
|
|
d=json.dumps({"body":body}).encode()
|
|
req=urllib.request.Request(BASE+"/issues/%d/comments"%n,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 #%d"%n)
|
|
|
|
post(75, """**FIX LANDED 2026-07-30** (`520f6ee`, build 4.11.629) -- myomer damage now affects mech speed. Staying open for field confirmation.
|
|
|
|
The speed-demand site applies the drive scale the mover's feed roster applied in 1995: `speedDemand *= myomers.speedEffect` -- the wrapper's live 0..1 output (gear ratio, thermal curve, `1 - zone damage`). A crit-destroyed myomers = no drive.
|
|
|
|
Bench, arithmetically exact: during a leg-ramp test the demand went `44.837 -> 6.726 = 44.837 x 0.5 (gimp, see #78) x 0.3` -- the 0.3 being a myomers the #80 crit system had chewed to 70%% damage during the same run. Two of tonight's systems composing unprompted.
|
|
|
|
**Field test:** take myomer damage (crits on any torso zone can reach it), watch the ENG-page myomer power curve drop AND your top speed drop with it. `BT_DRIVE_LOG` prints the live factor.
|
|
|
|
The chain to the mover's ANIMATION (the gait visibly slowing / the gimp clips) is #78's remaining work.""")
|
|
|
|
post(78, """**CORE IMPLEMENTED 2026-07-30** (`520f6ee`, build 4.11.629) -- the research question is answered and the mechanical half is live. VGL Lynx was right.
|
|
|
|
**What the binary/content shows:** leg zones are authored (`LegDamageZone` = LeftLeg/RightLeg per zone; MadCat: 3/5/8 left, 10/16/19 right); a leg zone crossing **half structure** (0.5, `_DAT_0049c9a0`) raises the mech's movement state to **3 (left) / 4 (right)** -- the LIMP states; and the full **Gimp animation clip family is authored** (`Left/RightGimpAnimation`, `WalkToGimp`, `GimpToStand` -- named "Gimp", which is why every "limp" search missed it). Leg DESTROYED while already limping = the fall/death path. So: leg damaged = limp, leg destroyed = down -- both sides of the night-6 dispute were right.
|
|
|
|
**Now live:** the threshold -> mode transition (was being raised and instantly ignored); while gimped the speed demand halves (**0.5 is [T3] -- VGL Lynx's "roughly 50%%", `BT_GIMP_SPEED` overrides -- the binary's own factor not yet located**) and **reverse input is refused** ("reverse disabled"). Bench: a deterministic right-leg ramp crosses 0.5 and demand drops exactly by the composed factors.
|
|
|
|
**Still open here:** (1) the Gimp CLIPS -- the animation state enum (mech2) and a prior reverse-bug fix (mech3) disagree about slots 0x12-0x17; reconcile before wiring the limp animation; (2) the audio cue -- the pod's warning rode the alarm's audio watchers; whether an authored voice/beep row exists for levels 3/4 needs the audiostate table check; (3) the binary's true gimp speed factor.
|
|
|
|
**Field test:** get a leg chewed past half (the paper doll leg zones), then: top speed should halve, and holding reverse should do nothing.""")
|