using System.Text.Json.Serialization; namespace Theriapolis.Core.Data; /// /// Immutable clade (race-equivalent) record loaded from clades.json. /// Defines the broad biological family — Canidae, Felidae, etc. — /// plus the ability mods, traits, and detriments shared by all member /// species. See clades.md for the authoritative content. /// public sealed record CladeDef { [JsonPropertyName("id")] public string Id { get; init; } = ""; [JsonPropertyName("name")] public string Name { get; init; } = ""; /// Codex-voice clade description: usually the doc's italicized /// blockquote followed by a one-sentence summary. Surfaced on the /// Step 0 card to establish the world's tone before mechanics. [JsonPropertyName("description")] public string Description { get; init; } = ""; /// STR/DEX/CON/INT/WIS/CHA → modifier (typically +1 each on two abilities). [JsonPropertyName("ability_mods")] public Dictionary AbilityMods { get; init; } = new(); [JsonPropertyName("traits")] public TraitDef[] Traits { get; init; } = Array.Empty(); [JsonPropertyName("detriments")] public TraitDef[] Detriments { get; init; } = Array.Empty(); [JsonPropertyName("languages")] public string[] Languages { get; init; } = Array.Empty(); /// /// "Predator" / "Prey" — surfaces in dialogue + faction-affinity logic /// (Phase 6) and gates a few class features in Phase 5 (e.g. Feral /// level-20 Apex Predator vs Apex Prey). /// [JsonPropertyName("kind")] public string Kind { get; init; } = "predator"; }