using System.Text.Json.Serialization; namespace Theriapolis.Core.Data; /// /// Definition record for a named faction, loaded from factions.json. /// public sealed class FactionDef { /// Machine-readable id matching FactionId enum (e.g. "covenant_enforcers"). public string Id { get; set; } = ""; /// Display name shown in UI. public string Name { get; set; } = ""; /// Abbreviated name for tight spaces. public string ShortName { get; set; } = ""; /// Hex color string for map overlay (e.g. "#4455AA"). public string Color { get; set; } = "#FFFFFF"; /// Brief description used in tooltips/codex. public string Description { get; set; } = ""; /// /// Phase 6 M2 — opposition multipliers per reputation.md §I-2. /// When the player gains +N with this faction, every entry /// { otherFactionId: m } here applies +N × m to that other /// faction's standing. Multipliers are negative for rivals (helping /// Inheritors hurts you with Enforcers), positive for allies, 0 for /// neutrals. Asymmetry is by design — see the design doc. /// [JsonPropertyName("opposition")] public Dictionary Opposition { get; set; } = new(); /// /// Phase 6 M2 — when true, this faction is hidden from the reputation /// screen until the player learns it exists (the Maw, in Act I climax). /// The faction still exists internally and accumulates standing. /// [JsonPropertyName("hidden")] public bool Hidden { get; set; } = false; }