fix(chat): display retail's text for WeenieError 0x0504 and three PK siblings
User saw "[System] WeenieError 0x0504" on login after a PK Lite reversion. 0x0504 is YouAreNonPKAgain; only ~56 of 378 codes had strings, so the raw hex fallback fired. Retail's source is ClientCommunicationSystem::HandleFailureEvent @0x00571990 — a switch with per-case literal UTF-16 strings, not a DAT string-table lookup, so hardcoding them is retail-faithful. The decomp could not be trusted for the text. Its dump of data_7d32c0 declares [0x5f] and shows 95 characters ending mid-word at "...protection of the Lig". The real string is 139 characters. The 0x5f is Binary Ninja's PREVIEW TRUNCATION LENGTH, not the array size — worth remembering for the rest of the switch, since a copy-paste from the dump would have shipped a truncated sentence. Recovered by PE byte read (VA 0x007D32C0 -> RVA -> .rdata file offset), cross-confirmed against the raw hex the pseudo-C carries immediately after the preview. Mapped 0x0504, 0x0505, 0x04EC, 0x04ED, each byte-verified and cited with its case address. Retail's trailing newline is dropped deliberately (documented in-comment): acdream renders one ChatEntry per system message where retail has a single scrolling buffer. Adjacent codes are deliberately left unmapped with a test pinning that 0x04EE still falls back to hex — a wrong message is worse than a raw code. Files #306 for the full port, with three findings that make it more than a string table: the switch is SIX compiler-lowered blocks spanning 339 distinct case values from 0x17 to 0x593, not one contiguous band; retail passes a colour argument with three values in use (0 x162, 0x1a x113, 7 x59) and acdream's chat has no colour concept; and HandleFailureEvent aborts an in-progress automatic attack on 0x43/0x3f7/0x3e/0x23/0x36 — verified against the decomp, with the nuance that 0x43 has no display case at all and is abort-only, so that one is a pure gameplay gap. Gates: complete Release solution 10,909 passed / 4 skipped / 0 failed (baseline 10,904; +5 = the five new tests). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
2f0c26c8a4
commit
b633b10967
3 changed files with 211 additions and 0 deletions
|
|
@ -121,6 +121,26 @@ public static class WeenieErrorMessages
|
|||
|
||||
// Player flavour
|
||||
[0x0526] = "You chicken out.", // YouChickenOut
|
||||
|
||||
// PK status (retail: ClientCommunicationSystem::HandleFailureEvent
|
||||
// @0x00571990, decompiled at
|
||||
// docs/research/named-retail/acclient_2013_pseudo_c.txt:382900+.
|
||||
// Strings recovered from the PDB-paired
|
||||
// C:\Users\erikn\Downloads\acclient.exe (imagebase 0x400000) via
|
||||
// VA -> RVA -> file-offset mapping per
|
||||
// claude-memory/reference_pe_byte_decode.md, because the pseudo-C
|
||||
// dump for data_7d32c0 truncates at its declared array bound
|
||||
// (0x5f wchar16) mid-sentence. Retail's literal ends with a
|
||||
// trailing "\n" that we drop here — acdream's ChatEntry already
|
||||
// renders one line per system message, unlike retail's single
|
||||
// scrolling text buffer.
|
||||
[0x0504] = "You are enveloped in a feeling of warmth as you are brought back into the protection of the Light. You are once again a Non-Player Killer.",
|
||||
// YouAreNonPKAgain, case 0x504 @0x005745cd, data_7d32c0
|
||||
[0x0505] = "You're too close to your sanctuary!", // YoureTooCloseToYourSanctuary, case 0x505 @0x00574c65, data_7d2640
|
||||
[0x04EC] = "You cannot modify your player killer status while you are recovering from a PK death.",
|
||||
// CannotChangePKStatusWhileRecovering, case 0x4ec @0x0057446f, data_7d3820
|
||||
[0x04ED] = "Advocates may not change their player killer status!",
|
||||
// AdvocatesCannotChangePKStatus, case 0x4ed @0x005744a1, data_7d37b0
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue