43 lines
2.8 KiB
Python
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")))
|