fix(net): sign-extend retail capacity bytes

Mirror PublicWeenieDesc::UnPack MOVSX behavior so ACE's FF capacity sentinels remain -1 instead of becoming 255. This suppresses non-container capacity prose through the normal retail appraisal checks, with raw-wire and formatter regression coverage.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-23 18:25:17 +02:00
parent d3c5e06fdd
commit 2c00d53db2
7 changed files with 101 additions and 41 deletions

View file

@ -808,9 +808,11 @@ public static class ItemAppraisalTextFormatter
AppraiseInfoParser.Parsed appraisal)
{
PropertyBundle properties = appraisal.Properties;
// Appraisal_ShowCapacity @ 0x004B2680 suppresses the hook object's
// own container capacity while a HookProfile describes the item
// mounted on it. This is the Black Phyntos Hive 255/255 case.
// Appraisal_ShowCapacity @ 0x004B2680 suppresses a hook object's own
// capacity while a HookProfile describes the item mounted on it.
// Non-container sentinels are independently preserved as -1 by
// PublicWeenieDesc::UnPack's signed-byte loads, so they fail the
// positive-capacity tests below exactly as they do in retail.
if (!obj.IsHook || appraisal.HookProfile is null)
{
if (obj.ItemsCapacity > 0 && obj.ContainersCapacity > 0)