2026-04-30 20:40:51 -07:00
|
|
|
using System.Text.Json.Serialization;
|
|
|
|
|
|
|
|
|
|
namespace Theriapolis.Core.Data;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 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.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed record CladeDef
|
|
|
|
|
{
|
|
|
|
|
[JsonPropertyName("id")]
|
|
|
|
|
public string Id { get; init; } = "";
|
|
|
|
|
|
|
|
|
|
[JsonPropertyName("name")]
|
|
|
|
|
public string Name { get; init; } = "";
|
|
|
|
|
|
2026-05-04 21:47:00 -07:00
|
|
|
/// <summary>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.</summary>
|
|
|
|
|
[JsonPropertyName("description")]
|
|
|
|
|
public string Description { get; init; } = "";
|
|
|
|
|
|
2026-04-30 20:40:51 -07:00
|
|
|
/// <summary>STR/DEX/CON/INT/WIS/CHA → modifier (typically +1 each on two abilities).</summary>
|
|
|
|
|
[JsonPropertyName("ability_mods")]
|
|
|
|
|
public Dictionary<string, int> AbilityMods { get; init; } = new();
|
|
|
|
|
|
|
|
|
|
[JsonPropertyName("traits")]
|
|
|
|
|
public TraitDef[] Traits { get; init; } = Array.Empty<TraitDef>();
|
|
|
|
|
|
|
|
|
|
[JsonPropertyName("detriments")]
|
|
|
|
|
public TraitDef[] Detriments { get; init; } = Array.Empty<TraitDef>();
|
|
|
|
|
|
|
|
|
|
[JsonPropertyName("languages")]
|
|
|
|
|
public string[] Languages { get; init; } = Array.Empty<string>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// "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).
|
|
|
|
|
/// </summary>
|
|
|
|
|
[JsonPropertyName("kind")]
|
|
|
|
|
public string Kind { get; init; } = "predator";
|
|
|
|
|
}
|