namespace AcDream.Core.Ui;
///
/// Verbatim ports of retail UI message strings. Centralised here so
/// future retail-faithful refinements only need to touch one file —
/// and so the call sites stay readable at the interaction layer.
///
///
/// String text is byte-identical with retail. Each helper cites the
/// retail DAT data address + the runtime use site in the named decomp
/// at docs/research/named-retail/acclient_2013_pseudo_c.txt.
///
///
///
/// Pattern mirrors — typed port of a
/// retail-UI primitive (gmRadarUI::GetBlipColor at
/// 0x004d76f0). Add new strings here as we encounter them.
///
///
///
/// Members may be added BEFORE their first call site exists — retail
/// strings are a fixed inventory we know we'll need as we port more
/// features. Each member's doc-comment cites its retail anchor +
/// describes the scenario that'll consume it. Removing dead members
/// without a port is fine; we re-grep the decomp.
///
///
public static class RetailMessages
{
///
/// Retail: "The %s cannot be used".
/// Data: 0x007e2a70 (line 1033115). Runtime sprintf at
/// 0x00588ea4 (line 403095) inside ItemHolder::UseObject's
/// IsUseable==0 fallthrough branch. Shown when the player triggers
/// Use on an entity whose useability is USEABLE_UNDEF/USEABLE_NO.
///
public static string CannotBeUsed(string entityName)
=> $"The {entityName} cannot be used";
///
/// Retail: "The %s can't be picked up!".
/// Runtime sprintf at 0x00587353 (line 401589) inside the
/// pickup-flow handler. Shown when the player triggers a pickup on
/// an entity that lacks USEABLE_REMOTE / isn't a small-item type.
///
public static string CantBePickedUp(string entityName)
=> $"The {entityName} can't be picked up!";
///
/// Retail: "You cannot pick up creatures!".
/// Data: 0x007e22b4 (line 1033034). Runtime use at
/// 0x005871f4 (line 401642) inside the same pickup-flow
/// handler. Shown when the player triggers a pickup on a Creature
/// ItemType (NPCs, monsters, other players).
///
public const string CannotPickUpCreatures = "You cannot pick up creatures!";
///
/// Retail: "Cannot be used with %s".
/// Data: 0x007cc834 (line 1024669). Runtime sprintf at
/// 0x0055ee0e (line 363413). Shown when the player tries
/// a two-target Use (e.g., key on lock, lockpick on chest) and
/// the combination is invalid for the source item. The %s
/// is the TARGET entity name. No call site yet — wired in when
/// the two-target Use flow ships.
///
public static string CannotBeUsedWith(string targetName)
=> $"Cannot be used with {targetName}";
///
/// Retail: "The %s cannot be picked up!". FORMAL variant.
/// Data: 0x007e227c (line 1033033). Runtime sprintf at
/// 0x00587264 (line 401623). Distinct from
/// — retail has TWO pickup-
/// reject strings (formal "cannot" + informal "can't"); they
/// fire from different code paths inside the pickup handler.
/// Use whichever the corresponding caller's retail path uses.
/// No call site yet — wired in when the formal-pickup-reject
/// path ships (probably a server-side rejection message).
///
public static string CannotBePickedUp(string entityName)
=> $"The {entityName} cannot be picked up!";
///
/// Retail: "The %s cannot be used while on a hook, use the
/// '@house hooks on' command to make the hook openable.\n".
/// Data: 0x007d1f68 (line 1029591). Shown when the player
/// tries to Use a hooked-up item with the house's "hooks off"
/// preference set. Trailing newline matches retail. No call
/// site yet — wired in when the housing system ships.
///
public static string CannotBeUsedWhileOnHook_HooksOff(string entityName)
=> $"The {entityName} cannot be used while on a hook, use the '@house hooks on' command to make the hook openable.\n";
///
/// Retail: "The %s cannot be used while on a hook and only
/// the owner may open the hook.\n".
/// Data: 0x007d5f30 (line 1030063). Shown when a non-owner
/// tries to Use a hooked-up item in someone else's house.
/// Trailing newline matches retail. No call site yet — wired in
/// when the housing system ships.
///
public static string CannotBeUsedWhileOnHook_NotOwner(string entityName)
=> $"The {entityName} cannot be used while on a hook and only the owner may open the hook.\n";
}