fix(client): restore retail interaction parity
All checks were successful
CI / linux-portable (push) Successful in 3m27s
CI / windows-gate (push) Successful in 6m42s
CI / release (push) Successful in 2m12s

Harden keyboard and camera routing, inventory and vendor interactions, chat/emotes, relog portal flow, and paperdoll rendering. Add retail research, connected gate coverage, and release-gate validation.
This commit is contained in:
Erik 2026-08-26 20:45:11 +02:00
parent 0c699240e0
commit f6fe0f2a4f
151 changed files with 10162 additions and 1211 deletions

View file

@ -54,9 +54,8 @@ public sealed class RetailKeyNamesTests
[Fact]
public void SelfModifier_ShowsOnlyTheKeyName_NeverShiftPlusShiftLeft()
{
// acdream's wire-side chord for retail's bare DIK_LSHIFT walk-mode row
// carries the self-modifier bit; retail's QualifiedControl has
// meta-mode 0 and displays just the key.
// Also accept a legacy self-modifier bit while migrated JSON is read;
// retail's exact row has meta-mode 0 and displays just the key.
var names = new RetailKeyNames(
NoStrings,
osKeyName: (scan, _) => scan == 0x2A ? "SKIFT" : null);
@ -130,15 +129,37 @@ public sealed class RetailKeyNamesTests
}
[Fact]
public void ControlsOutsideTheDikTable_KeepTheEnumSpelling()
public void KeymapInterchangeControls_UseTheirRetailDikNames()
{
var names = new RetailKeyNames(NoStrings, osKeyName: (_, _) => null);
// Key.F13 never appears in the DAT's 84 observed scan codes.
Assert.Equal("F13", names.Describe(new KeyChord(Key.F13, ModifierMask.None)));
Assert.Equal(
"Shift+F13",
"LSHIFT+F13",
names.Describe(new KeyChord(Key.F13, ModifierMask.Shift)));
Assert.Equal(
"LWIN+F13",
names.Describe(new KeyChord(Key.F13, ModifierMask.Win)));
}
[Fact]
public void MouseButtonUsesRetailSemanticTableThenReadableFallback()
{
var authored = new RetailKeyNames(
Table((RetailKeyNames.KeyNameTableId, "DIMOFS_BUTTON0", "Primary Mouse")),
osKeyName: (_, _) => null);
var fallback = new RetailKeyNames(NoStrings, osKeyName: (_, _) => null);
var left = new KeyChord(
InputDispatcher.MouseButtonToKey(MouseButton.Left),
ModifierMask.None,
Device: 1);
var rightWithCtrl = new KeyChord(
InputDispatcher.MouseButtonToKey(MouseButton.Right),
ModifierMask.Ctrl,
Device: 1);
Assert.Equal("Primary Mouse", authored.Describe(left));
Assert.Equal("LCONTROL+Mouse Button 2", fallback.Describe(rightWithCtrl));
}
[Fact]