Files
BT411/scratchpad/night6/file_zombie.py
T

43 lines
2.8 KiB
Python

"""File the flaming-wreckage zombie respawn bug."""
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))
TITLE = "Zombie wreck on respawn: player respawns as sliding flaming wreckage, no mech redraw (peer view, intermittent)"
BODY = """**Field report (2026-07-29 night session, build 4.11.641, Steam MP, reported by SAURON):**
PoorImpulse's mech respawned as **flaming wreckage that kept moving around** -- the wreck slid along the ground under player control, with no mech redraw on the respawn. Intermittent: he died 3x that stretch and looked proper after at least one of the subsequent respawns.
**Observed from a PEER's viewpoint** (SAURON watching PoorImpulse), which points at the replicant-side respawn path: the death graphic (burning wreck state) not being cleared/rebuilt on the remote mech when the respawn record arrives -- the local player presumably looked fine to himself.
**Suspect chain (to dig):**
- The wreck STAYS by design on death (no DestroyEntityMessage -- house rule), so respawn must explicitly reset the replicant's visual state: graphicAlarm 9 -> 0, the burning-state flag (id 0x17/0x18 Set/ClearBurningState messages), and the render tree rebuild.
- A respawn record racing/loss on the peer would leave the old wreck visuals welded to the newly-repositioned entity -- "wreckage sliding around" is exactly a live mover wearing the death graphic.
- Related prior art: the task-#52 wreck-graphic bug (graphicAlarm 9 corrupted to 3/4 by the leg branch -- fixed at source); the respawn/re-arm plan ledger (docs/RESPAWN_REARM_PLAN.md).
**Repro:** unknown odds, roughly 1-in-3 respawns that session. Multiplayer with peers observing a respawn; watch the respawning player from another pod.
**Next actions:** grep the respawn path for the replicant-side ClearBurningState + graphicAlarm reset; check whether the respawn update record carries the visual-state reset or relies on a message type that can be dropped."""
r = call("POST", "/issues", {"title": TITLE, "body": BODY})
print("filed #%s: %s" % (r.get("number"), r.get("title")))