fix(paperdoll): port quest-gated Aetheria slots

Add the three authored blue, yellow, and red sigil backgrounds and drive their visibility from player PropertyInt.AetheriaBitfield bits 1/2/4 at login and on live updates, matching gmPaperDollUI::UpdateAetheria. Include the sigil equip masks in the shared slot table and narrow AP-108.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-13 09:55:20 +02:00
parent 1be18cc4db
commit edc9be3008
11 changed files with 208 additions and 16 deletions

View file

@ -0,0 +1,33 @@
using System;
namespace AcDream.Core.Items;
/// <summary>
/// Player <c>PropertyInt.AetheriaBitfield (322 / 0x142)</c>. Each bit independently
/// unlocks one paperdoll sigil location after its corresponding retail quest.
/// </summary>
/// <remarks>
/// Retail: <c>gmPaperDollUI::UpdateAetheria @ 0x004A3E50</c>.
/// ACE: <c>PropertyInt.AetheriaBitfield</c> + <c>AetheriaBitfield</c>.
/// </remarks>
[Flags]
public enum AetheriaUnlockState : uint
{
None = 0x0,
Blue = 0x1,
Yellow = 0x2,
Red = 0x4,
All = Blue | Yellow | Red,
}
public static class AetheriaUnlocks
{
public const uint PropertyId = 0x142u;
public static AetheriaUnlockState Read(ClientObject? player)
{
if (player?.Properties.Ints.TryGetValue(PropertyId, out int value) != true)
return AetheriaUnlockState.None;
return (AetheriaUnlockState)(uint)value;
}
}