Files
TheriapolisV3/Theriapolis.Core/Data/CladeDef.cs
T
Christopher Wiebe b451f83174 Initial commit: Theriapolis baseline at port/godot branch point
Captures the pre-Godot-port state of the codebase. This is the rollback
anchor for the Godot port (M0 of theriapolis-rpg-implementation-plan-godot-port.md).
All Phase 0 through Phase 6.5 work is included; Phase 7 is in flight.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 20:40:51 -07:00

40 lines
1.4 KiB
C#

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; } = "";
/// <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";
}