namespace Theriapolis.Core.Rules.Reputation; /// /// Phase 6 M2 — coarse-grain banding of an integer disposition score. /// Per reputation.md §I-2 the bands gate dialogue tone, prices, /// service refusal, and combat-on-sight behaviour. /// public enum DispositionLabel : byte { Nemesis = 0, // -100..-76 kill on sight Hostile = 1, // -75..-51 attacked if recognised Antagonistic = 2, // -50..-26 refused service Unfriendly = 3, // -25.. -1 cold reception Neutral = 4, // 0 Favorable = 5, // +1..+25 Friendly = 6, // +26..+50 Allied = 7, // +51..+75 Champion = 8, // +76..+100 } /// /// Phase 6 M2 — trust ladder accumulated through repeated personal /// interaction. Distinct from — trust is /// earned, disposition is felt. /// public enum TrustLevel : byte { Stranger = 0, Acquaintance = 1, Familiar = 2, Trusted = 3, Bonded = 4, } public static class DispositionLabels { /// Map an integer disposition score (clamped to ±100) to its label. public static DispositionLabel For(int score) { if (score >= C.REP_CHAMPION_THRESHOLD) return DispositionLabel.Champion; if (score >= C.REP_ALLIED_THRESHOLD) return DispositionLabel.Allied; if (score >= C.REP_FRIENDLY_THRESHOLD) return DispositionLabel.Friendly; if (score >= C.REP_FAVORABLE_THRESHOLD) return DispositionLabel.Favorable; if (score == 0) return DispositionLabel.Neutral; if (score >= C.REP_UNFRIENDLY_THRESHOLD) return DispositionLabel.Unfriendly; if (score >= C.REP_ANTAGONISTIC_THRESHOLD) return DispositionLabel.Antagonistic; if (score >= C.REP_HOSTILE_THRESHOLD) return DispositionLabel.Hostile; return DispositionLabel.Nemesis; } /// Display string ("Nemesis", "Friendly", etc.) for the reputation screen + tooltip. public static string DisplayName(DispositionLabel l) => l switch { DispositionLabel.Nemesis => "Nemesis", DispositionLabel.Hostile => "Hostile", DispositionLabel.Antagonistic => "Antagonistic", DispositionLabel.Unfriendly => "Unfriendly", DispositionLabel.Neutral => "Neutral", DispositionLabel.Favorable => "Favorable", DispositionLabel.Friendly => "Friendly", DispositionLabel.Allied => "Allied", DispositionLabel.Champion => "Champion", _ => "Unknown", }; }