45 lines
2.7 KiB
Python
45 lines
2.7 KiB
Python
"""#78 gimp audio verdict comment."""
|
|
import base64
|
|
import json
|
|
import subprocess
|
|
import urllib.request
|
|
|
|
REPO = r"C:\git\bt411"
|
|
BASE = "https://gitea.mysticmachines.com/api/v1/repos/VWE/BT411"
|
|
|
|
out = subprocess.run(["git", "credential", "fill"],
|
|
input="protocol=https\nhost=gitea.mysticmachines.com\n\n",
|
|
capture_output=True, text=True, cwd=REPO)
|
|
cred = dict(l.split("=", 1) for l in out.stdout.strip().splitlines() if "=" in l)
|
|
AUTH = "Basic " + base64.b64encode(
|
|
(cred["username"] + ":" + cred["password"]).encode()).decode()
|
|
|
|
|
|
def call(method, path, payload=None):
|
|
data = json.dumps(payload).encode() if payload is not None else None
|
|
r = urllib.request.Request(BASE + path, data=data, method=method)
|
|
r.add_header("Authorization", AUTH)
|
|
r.add_header("Content-Type", "application/json")
|
|
return json.load(urllib.request.urlopen(r))
|
|
|
|
|
|
def comment(n, body):
|
|
marker = body.strip().splitlines()[0][:60]
|
|
for c in call("GET", "/issues/%d/comments" % n):
|
|
if marker in c.get("body", ""):
|
|
print(" #%d already has this comment - skipped" % n)
|
|
return
|
|
call("POST", "/issues/%d/comments" % n, {"body": body})
|
|
print(" #%d commented" % n)
|
|
|
|
|
|
BODY = """**The gimp audio question, settled** (`ed84445`): dug for the remembered "reverse disabled" voice warning through every layer of the 1995 game -- it doesn't exist. The binary's control mapper has NO gimp check (the reverse refusal is purely structural: the limp gait machines simply have no reverse path), there is no REVERSE/DISABLED text anywhere in BTL4.RES for an MFD message, and the mech's authored audio stream has no voice trigger. The five voice samples in the soundbank (WRNVOC etc.) belong to the mission shell. The remembered Betty line is most likely later-MechWarrior folklore.
|
|
|
|
What the pod ACTUALLY authored for the limp -- and what you get now: a **strained-servo loop**. The mech's audio object has `Entity.AnimationState` watchers on the limp entry states (22/23) and limp stops (26/27) that start a servo component whose gain rides `Entity.LocalVelocity` -- a wounded mechanical whine that tracks how fast you're dragging the bad leg. It became reachable for the first time when the limp landed; verified end-to-end on the bench: `[statefire] trigState=23 old=7 new=23 ctl=Start` at the exact phase-correct wgr entry.
|
|
|
|
One watch item: a single bench session produced zero AnimationState watcher fires under identical conditions -- suspected watcher rebind miss around the initial mission respawn. If a tester reports a SILENT limp, that's the lead (noted in locomotion.md).
|
|
|
|
Port keeps the silent reverse refusal (authentic) + the `[gimp] REVERSE DISABLED` log line for bench visibility."""
|
|
|
|
comment(78, BODY)
|