From 27721754da7ef91b9e2bc90d085de98027e7678c Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Fri, 7 Aug 2026 08:15:22 -0500 Subject: [PATCH] scoring: restore the type-0 INTERCEPTOR -- per-hit inflicted credit was live all along Players reported scoring and K/D going screwy on 4.11.817. Cause: build 787 (#45/#134) retired the port's per-hit inflicted crediting as an "invention", on the strength of a KB claim that the type-0 score handler was dead code. That claim was wrong. BTPlayer overrides Dispatch -- vtable @00513300 slot 3 = FUN_004bffa0 -- and splits type 0 off BEFORE base dispatch: if (msg->id == 0x16 && msg->type == 0) FUN_004c0200(...); // ScoreInflicted else base dispatch; @004c0200 names itself in its own Verify string ("BTPlayer::ScoreInflictedMessageHandler") and computes CalcInflicted(basis) -> negate if target==self -> x (targetTonnage/ownTonnage) -> accumulate into +0x278. ScoreMessageHandler's type-0 arm Verify-rejects precisely BECAUSE this interceptor guarantees type 0 never reaches it. The port had the handler, faithfully reconstructed, and no interceptor -- so Block B's inflicted reports all landed in the rejecting arm and banked 0. Per-hit damage credit was silently deleted. Independently corroborated by the ORIGINAL MANUAL'S SCORING CHART (filed as reference/manual/scoring_chart.webp, from Lynx): "+1 each damage point scored on opponent's armor" and "-1 each self-inflicted point of armor damage" -- the negate-if-target-is-self arm exactly. Without that chart the dead-code note would probably have stood. Verified (scratchpad/night13/scoreverify.sh, cross-node kill, 2 nodes): type-0 Verify rejections 0 (was firing on every non-lethal hit) inflicted score rows 83 awards 0.98..25.00, all positive, tracking damage kill path un-regressed type=2 award=4.88 kills=1, victim respawn x1 KB: combat-damage.md report B and the score-model paragraph rewritten, with the full chart and THREE unreconciled rows flagged [T4] -- flat +500 kill vs the benched 4.88, +1000 at game start, and -1000 eject / -500 ammo (which would live in ScenarioRole::specialCaseDeathPenalty @role+0x20, read by the port but authored nowhere in shipped content). KNOWN, NOT FIXED HERE: in MP the running total does not persist -- currentScore is flushed to the operator console and ZEROED (btplayer.cpp ~1219) because the binary treats it as a console DELTA. Restoring the credit makes that very visible (bench: totals climb to ~35 then reset). Needs its own decision; the chart's "+1000 starting the game" implies a persistent total lives somewhere. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01NCJQkvq6G2JNrpVbA75tVZ --- context/combat-damage.md | 47 ++++++++++++-- game/reconstructed/btplayer.cpp | 52 ++++++++++++++- game/reconstructed/btplayer.hpp | 17 +++++ reference/manual/scoring_chart.webp | Bin 0 -> 67464 bytes scratchpad/night13/ghost108.py | 91 ++++++++++++++++++++++++++ scratchpad/night13/scoreverify.sh | 95 ++++++++++++++++++++++++++++ 6 files changed, 292 insertions(+), 10 deletions(-) create mode 100644 reference/manual/scoring_chart.webp create mode 100644 scratchpad/night13/ghost108.py create mode 100644 scratchpad/night13/scoreverify.sh diff --git a/context/combat-damage.md b/context/combat-damage.md index 10b7b85..d42d56c 100644 --- a/context/combat-damage.md +++ b/context/combat-damage.md @@ -606,10 +606,21 @@ btplayer.hpp, static_assert-locked; `scoreAward`=APPLIED tally in all three): the VICTIM role's `killBonus` (role+0x1c). senderMechID = the victim. Suicide (eject charge, self-damage) IS dispatched — the handler negates the award (@0x4c03ab `fchs`) and skips `killCount++`: **the #134 panic penalty, live** (bench: `type=2 award=-39.00 kills=0`). -- **B @0x4a05d9, not newly killed && tally≠0** → type 0 to the shooter. The ONLY registered 0x16 - receiver Verify-rejects type 0 → 1995 folded an UNINITIALIZED stack float into the shooter's - score on every non-lethal hit (real 1995 bug — @0x4c0200, the handler that accepts type 0, is - in NO table entry: dead code). Port sends it for wire fidelity, banks award 0. +- **B @0x4a05d9, not newly killed && tally≠0** → type 0 to the shooter: the **per-hit INFLICTED + credit**, and it is LIVE. ⚠ **CORRECTED 2026-08-07** — this entry previously read "the ONLY + registered 0x16 receiver Verify-rejects type 0 → 1995 folded an UNINITIALIZED stack float into + the shooter's score on every non-lethal hit (real 1995 bug — @0x4c0200 … is in NO table entry: + dead code)". **That was wrong**, and build 787 retired the port's per-hit crediting on the + strength of it (the scoring regression players reported on 4.11.817). `BTPlayer` overrides + **`Dispatch` — vtable `@00513300` slot 3 = `FUN_004bffa0`** — and splits type 0 off BEFORE base + dispatch: `if (id==0x16 && type==0) FUN_004c0200(...); else base;`. `@004c0200` names itself in + its own Verify string (`BTPlayer::ScoreInflictedMessageHandler`) and computes + `CalcInflicted(basis) → negate if target==self → × (targetTonnage/ownTonnage) → += +0x278`. + `ScoreMessageHandler`'s type-0 arm Verify-rejects precisely BECAUSE the interceptor guarantees + type 0 never reaches it. Independently corroborated by the original manual's SCORING CHART + (`reference/manual/scoring_chart.webp`, via Lynx): "+1 each damage point scored on opponent's armor" and "-1 each + self-inflicted point of armor damage" — the negate-if-self arm exactly. Interceptor restored; + benched 83 inflicted rows, awards 0.98–25.00, zero type-0 Verify rejections. [T1] - **C @0x4a06c0, tally>0 (kills included)** → type 1 DamageReceivedScore to the VICTIM's player. Basis = INTENDED damage (burstCount×amount). senderMechID = the INFLICTOR. Feeds the received penalty (`CalcDamageReceivedScore` returns the NEGATIVE) + the operator-console VTVDamaged line @@ -617,9 +628,31 @@ btplayer.hpp, static_assert-locked; `scoreAward`=APPLIED tally in all three): Reports carry the LOOP-ENTRY zone (msg+0x24, never rewritten mid-loop), the vital-wreck flag, and `inflictingSubsystemID` (msg+0x5c, engine T0 name). -**Score model consequence** [T1]: 1995 pod scoring = **kill awards + received-damage penalties + -death costs. No per-hit inflicted credit** (the port's old per-hit crediting — and the #95 salvo -fix on top of it — were inventions riding the dead @0x4c0200 channel; both retired). +**Score model consequence** [T1, ⚠ REWRITTEN 2026-08-07]: 1995 pod scoring = **per-hit inflicted +credit + kill awards + received-damage penalties + death costs**. The previous text here claimed +"No per-hit inflicted credit … inventions riding the dead @0x4c0200 channel; both retired" — that +followed from the dead-code misreading corrected in report B above, and retiring the credit IS the +scoring regression reported on 4.11.817. The **original manual's SCORING CHART** (`reference/manual/scoring_chart.webp`) +is the cross-check for every row and should be consulted before touching this path again: + +| Points | Event | +|---|---| +| +1000 | Starting the game | +| +1 | Each damage point scored on opponent's armor | +| +10..+30 | Destroying an opponent's internal system | +| +500 | Destroying an opponent's 'Mech | +| −1 | Each self-inflicted point of armor damage | +| −10..−30 | Knocking out one of your own internal systems | +| −500 | Destroying your own 'Mech by an ammo explosion | +| −1000 | Destroying your own 'Mech by ejecting | + +⚠ **Three chart rows are NOT yet reconciled with the reconstruction** — treat as open [T4]: +(a) a kill benches at `award=4.88`, two orders off the chart's flat **+500**; (b) **+1000 at +game start** has no known implementation; (c) **−1000 eject / −500 ammo** would live in +`ScenarioRole::specialCaseDeathPenalty` (role+0x20), which the port reads +(`GetSpecialCaseDeathPenalty`, the death-cost block) but which **shipped content authors +nowhere**, so it is 0 in the field — the #134 symptom by another route. Do not "fix" these by +hard-coding chart numbers; find where the binary sources them. Kill award = `(victimKillBonus + tally) × killerRole.damageInflictedModifier × (victimAvgZoneDamage@0x354 × damageBias + 1.0) × (victimTonnage/killerTonnage)`; same-team kill in a non-FFA game = `-friendlyFirePenalty` basis (inline strcmp of `teamName@0x20c`, gate diff --git a/game/reconstructed/btplayer.cpp b/game/reconstructed/btplayer.cpp index a81e074..06e9fb4 100644 --- a/game/reconstructed/btplayer.cpp +++ b/game/reconstructed/btplayer.cpp @@ -731,6 +731,47 @@ void suppressConsole = 0; // this+0x258 } +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Dispatch (@004bffa0, vtable @00513300 slot 3) +// +// THE TYPE-0 INTERCEPTOR. Restored 2026-08-07 -- it was missing, and its +// absence silently deleted per-hit inflicted scoring: +// +// * the binary carries all three score reports under ONE id (0x16) and +// splits type 0 off here, BEFORE base dispatch, straight into +// ScoreInflictedMessageHandler (@004c0200 -- which names itself in its own +// Verify string, "BTPlayer::ScoreInflictedMessageHandler"); +// * ScoreMessageHandler's type-0 arm Verify-rejects ON PURPOSE, because this +// interceptor guarantees type 0 never gets that far; +// * the port had the handler, faithfully reconstructed, and NO interceptor. +// Block B sends its inflicted report under Player::ScoreMessageID, so every +// one of them landed in the rejecting arm and banked 0. +// +// The KB previously recorded @004c0200 as "in NO table entry: dead code" and +// concluded 1995 folded an uninitialised stack float into the shooter's score +// on every non-lethal hit -- and the port's per-hit crediting was retired as an +// "invention" on that basis (#45/#134, build 787, the build players report +// scoring regressed in). That reading was wrong: the handler is live through +// THIS vtable slot, and the original manual's SCORING CHART independently +// corroborates what it computes -- "+1 each damage point scored on opponent's +// armor" and "-1 each self-inflicted point of armor damage", which is exactly +// this handler's negate-if-target-is-self arm. combat-damage.md is corrected. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +void + BTPlayer::Dispatch(Receiver::Message *what) +{ + if (what != 0 + && what->messageID == Player::ScoreMessageID + && ((BTPlayer::ScoreMessage *)what)->scoreType + == BTPlayer::ScoreMessage::DamageInflictedScore) + { + ScoreInflictedMessageHandler((BTPlayer::ScoreMessage *)what); + return; + } + Player::Dispatch(what); +} + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ScoreInflictedMessageHandler // @@ -2351,9 +2392,14 @@ void BTMechPostCombatReports( else if (damage_tally != 0.0f && shooter_player != 0) { // - // Block B: the plain inflicted report. Wire fidelity only -- the 0x16 - // handler Verify-rejects type 0 and banks award 0 (1995 banked an - // uninitialized stack float; see the handler's type-0 arm note). + // Block B: the inflicted report -- "+1 each damage point scored on + // opponent's armor" (original manual scoring chart). Goes out under + // Player::ScoreMessageID with type 0, exactly as the binary does; the + // Dispatch override (@004bffa0) intercepts it into + // ScoreInflictedMessageHandler. It is NOT wire-fidelity-only -- the + // old note here claimed the handler banks 0 because @004c0200 was + // "dead code", which was a misreading of the vtable; corrected + // 2026-08-07 and the interceptor restored. // BTPlayer::ScoreMessage inflicted( Player::ScoreMessageID, diff --git a/game/reconstructed/btplayer.hpp b/game/reconstructed/btplayer.hpp index 1b97a90..1f56c9f 100644 --- a/game/reconstructed/btplayer.hpp +++ b/game/reconstructed/btplayer.hpp @@ -288,6 +288,23 @@ class DropZone__ReplyMessage; private: static const HandlerEntry MessageHandlerEntries[]; + public: + // + // @004bffa0 -- the DISPATCH OVERRIDE (vtable @00513300 slot 3). The + // binary uses ONE message id (0x16) for all three score reports and + // splits type 0 off HERE, before base dispatch: + // + // if (msg->id == 0x16 && msg->type == 0) ScoreInflicted(msg); + // else base dispatch; + // + // which is why ScoreMessageHandler's own type-0 arm can Verify-reject: + // the interceptor guarantees type 0 never reaches it. Without this + // override every inflicted report lands in the rejecting arm and scores + // nothing -- see the note in btplayer.cpp. + // + virtual void + Dispatch(Receiver::Message *what); // @004bffa0 + protected: static MessageHandlerSet& GetMessageHandlers(); diff --git a/reference/manual/scoring_chart.webp b/reference/manual/scoring_chart.webp new file mode 100644 index 0000000000000000000000000000000000000000..a475a4323985ecb34fe922a50c2e8d34f2fa3dd4 GIT binary patch literal 67464 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 literal 0 HcmV?d00001 diff --git a/scratchpad/night13/ghost108.py b/scratchpad/night13/ghost108.py new file mode 100644 index 0000000..27e456e --- /dev/null +++ b/scratchpad/night13/ghost108.py @@ -0,0 +1,91 @@ +"""Night 13: post the ghost/eject findings to #108 and settle #144. ASCII only.""" +import sys +sys.path.insert(0, r"C:\git\bt411\scratchpad\night7") +import gitea + +gitea.comment(108, """Night 13 (2026-08-06, build **4.11.817**) -- eject-ghosts, and why the logs barely saw them. + +## Field finding + +Testers reported MANY ghost mechs, all from panic-button self-destructs, none respawning +properly -- and the operator has seen eject-respawn work every time before this night, so this is a +REGRESSION, not a gap (night 12 = build 774). + +The logs show it happening, on three independent witnesses. Dave punch-ejected; on HIS machine the +whole death path ran (`DeathWithoutHonor`, `PUNCH-OUT`, death transition, wreck, explosion), he +respawned, took a drop-zone slot, and drove another 193 logged frames **in the same round**, which +then ended normally -- no crash, no disconnect. On BOTH peers his mech's history ends at the wreck +and never resumes; host 2 vanishes from santo's world for the remaining ~4300 lines of that round. + +The discriminator is clean: the SAME mech's NORMAL deaths replicated their respawns 4-6 times in +that same session. Only the eject failed. + +## Why the ghost detector said almost nothing + +One `[ghost]` line all night, for an unrelated live mech. The gate is + + && !owner->WreckBuried() // "buried wrecks are expected-silent" + WreckBuried() { return collisionVolumeCount == 0; } + +An eject-ghost IS a wreck that stopped receiving records, so the detector files it under +expected-silent. It can only ever catch a LIVE replicant going quiet -- structurally blind to this +failure. + +## Why the census said "one" when testers saw many + +Counting ghosts meant pairing the un-wreck receipt against +`[BTrender] wreck: 'thrdbr.bgf' missing -> gendbr.bgf fallback` -- a MISSING-ASSET warning, not a +death, which only prints for chassis whose wreck model is absent. Fixed in `4642129`: every +replicant entering the wreck state now emits an ungated + + [wreck] replicant H:E entered wreck state (mode X->9) at (x,z) + +symmetric with the existing un-wreck line, so the count is exactly (enters - un-wrecks) per entity. +Verified 2-node: 5 enters / 5 exits, exactly paired -- **while the old marker printed ZERO times in +the same run**. Five real deaths, invisible to what the census was reading. Treat the "one ghost on +night 13" number as a floor, not a count. + +Census tooling: `scratchpad/night13/ghostcensus.py` (NB: filter the log owner's OWN mech -- an +owner's own wreck can never pair, since `un-wrecked` only logs for replicants; not doing so +manufactures false positives in every log). + +## NOT reproduced by bench -- five rigs failed to trigger a punch-out at all + +`BT_BTNTEST` never reached the mapper for the panic button (0x3D) or the searchlight (0x14): no +`[eject]`, no `PUNCH-OUT`, not even a lamp change -- so it is the SEAM, not the address. +`BT_EJECT_AT` (mech4.cpp:3310, the purpose-built hook) did not fire either. Benches are staged +(`ejectghost.sh`, `ejectlight.sh`, `ejectat.sh`) with their failure modes in the headers. + +What the benches DID establish: **normal death replication is healthy on 817** -- 9 force-kill +deaths, 8 peer un-wrecks, 0 ghost lines. So an eject-only shortfall is the defect, not a broken rig. + +## Open lead + +The operator observed that the ghost mechs all had their SEARCHLIGHTS ON. Untested -- there is +currently no key or env that toggles the searchlight headlessly, so it needs a small bench hook. +Mechanically plausible: the searchlight is the only thing that attaches extra geometry into a peer's +mech render tree (btl4vid.cpp builds a `spot.bgf` cone as a `DPLStaticChildRenderable` parented to +the lamp's mount-segment renderable), and the death path does a wreck swap while respawn does +"rebuilt intact model (N segs restored, hulk dropped)" -- a child renderable held across those two +rebuilds is a lifetime hazard, and it would only bite mechs whose lamp was ON. + +## Regression window + +Commits 775-817. Two touch the death path: `91bd286` (787) rewrote the VehicleDead dispatch -- +the message that drives the respawn cycle -- including the `killer == victim` eject case and the +filter that had blocked the panic-eject path; and `297127d` (784, death blast). Unverified.""") + +gitea.close(144, """**NOT A BUG -- authentic. Closing.** + +The eject sets `suppressConsole` (+0x258, `BTPlayerEjectBookkeeping`), and the #89 death-blast gate +reads it: + + gates : owning player's advancedDamageOn (+0x264) AND + NOT suppressConsole (+0x258 -- eject sets it: punch-outs never blast) + [T1 @0x4a0aa8-0x4a0ad6] + +So a mech that punches out does not splash its neighbourhood, by design, in the 1995 binary. SAURON's +observation ("splash worked on mechs that died close, but no splash on a panic / eject / suicide +death") is a correct reading of authentic behaviour. + +Closing so nobody "fixes" it. Found while investigating the night-13 eject ghosts (#108).""") diff --git a/scratchpad/night13/scoreverify.sh b/scratchpad/night13/scoreverify.sh new file mode 100644 index 0000000..65e7161 --- /dev/null +++ b/scratchpad/night13/scoreverify.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +# ========================================================================= +# SCORING verify -- the type-0 interceptor (@004bffa0) restored. +# +# Composition lifted from night12/scorekill.sh, which is known to produce a +# clean cross-node kill: A (madcat, shooter) zone-walk-hammers B (loki, +# spinner) at 90u until B dies. +# +# THE A/B IS READABLE IN ONE RUN, because the old behaviour left a receipt: +# BEFORE every inflicted report hit ScoreMessageHandler's type-0 arm and +# tripped Verify "ScoreMessageHandler should not be given +# DamageInflictedScoreMessages!" -- night12's bench listed those +# Verify prints as an expected PASS signal. +# AFTER the interceptor routes type 0 to ScoreInflictedMessageHandler, so +# those Verify prints must be GONE and matchlog SCORE type=0 rows +# with non-zero awards must appear instead. +# +# Chart cross-check (original manual, via Lynx): "+1 each damage point scored +# on opponent's armor". The handler scales by tonnage ratio and the role's +# damageInflictedModifier, so award != damage exactly -- but it must TRACK +# damage, not sit at zero, and must be NEGATIVE for self-damage. +# ========================================================================= +set -x +. /c/git/bt411/scratchpad/night6/bench_common.sh +cd /c/git/bt411/content || exit 1 +bt_assert_player_env +taskkill //F //IM btl4.exe > /dev/null 2>&1 +sleep 2 +rm -f sv_a.log sv_b.log sv_relay.log matchlog_*.txt +bt_expert_egg MP.EGG SV.EGG +sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/" SV.EGG +python - << 'EOF' +lines = open('SV.EGG').read().splitlines(True) +n = 0 +for i, l in enumerate(lines): + if l.startswith('vehicle='): + n += 1 + lines[i] = 'vehicle=madcat\n' if n == 1 else 'vehicle=loki\n' +open('SV.EGG', 'w').writelines(lines) +print('vehicles set:', n) +EOF + +( export BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 BT_MATCHLOG=1 BT_SCORE_LOG=1 + bt_launch sv_b.log SV.EGG 0x0C -net 1601 ) +sleep 2 +( export BT_ZONE_WALK=8 BT_WALK_ZONES=dz_ldleg + export BT_GOTO=enemy BT_GOTO_STOP=90 BT_KEY_NOFOCUS=1 + export BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 BT_MATCHLOG=1 BT_SCORE_LOG=1 + bt_launch sv_a.log SV.EGG 0x03 -net 1501 ) +sleep 5 +python ../tools/btconsole.py SV.EGG 127.0.0.1:1501 127.0.0.1:1601 > sv_relay.log 2>&1 & +RELAY=$! +sleep 260 +kill $RELAY 2>/dev/null +sleep 3 +bt_kill_ours +sleep 2 +taskkill //F //IM btl4.exe > /dev/null 2>&1 +sleep 3 + +echo "=================== SCORING VERIFY ===================" +echo "--- 0. did combat happen at all? (if 0 hits the run is VOID) ---" +echo -n "damage rows on victim B : "; grep -ac "dmghit\|DMG" sv_b.log +echo +echo "--- 1. THE OLD SYMPTOM: type-0 rejections (must be ZERO now) ---" +echo -n "'should not be given DamageInflictedScore' Verify prints: " +cat sv_a.log sv_b.log | grep -ac "should not be given DamageInflictedScore" +echo +echo "--- 2. THE FIX: inflicted score rows (matchlog SCORE type=0) ---" +echo -n "type=0 rows: "; cat matchlog_*.txt 2>/dev/null | grep -ac "type=0" +cat matchlog_*.txt 2>/dev/null | grep -a "type=0" | head -8 +echo +echo "--- 3. award vs damage: does the credit TRACK damage? ---" +python - << 'EOF' +import glob, re +aw = [] +for fn in glob.glob('matchlog_*.txt'): + for line in open(fn, errors='replace'): + m = re.search(r'type=0 award=(-?[\d.]+) total=(-?[\d.]+)', line) + if m: + aw.append((float(m.group(1)), float(m.group(2)))) +if not aw: + print(' NO type=0 rows -- interceptor did not fire') +else: + pos = [a for a, t in aw if a > 0] + neg = [a for a, t in aw if a < 0] + print(' rows=%d positive=%d negative(self)=%d' % (len(aw), len(pos), len(neg))) + print(' award range: %.2f .. %.2f running total ends at %.2f' + % (min(a for a, t in aw), max(a for a, t in aw), aw[-1][1])) +EOF +echo +echo "--- 4. kill path un-regressed (type=2) + respawn ---" +echo -n "type=2 kill rows: "; cat matchlog_*.txt 2>/dev/null | grep -ac "type=2" +cat matchlog_*.txt 2>/dev/null | grep -a "type=2" | head -3 +echo -n "victim death cycles: "; grep -ac "death cycle START" sv_b.log