b451f83174
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>
45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
using System.Text.Json.Serialization;
|
|
|
|
namespace Theriapolis.Core.Data;
|
|
|
|
/// <summary>
|
|
/// Phase 6 M1 — pre-meeting prejudice template per
|
|
/// <c>theriapolis-rpg-reputation.md §I-1</c>. Each NPC carries a
|
|
/// <c>BiasProfileId</c> that points at one of these; the runtime
|
|
/// disposition formula adds <see cref="CladeBias"/>[pc.clade] (plus the
|
|
/// universal size-differential modifier) to the personal/faction
|
|
/// components when computing how an NPC reacts to the player.
|
|
///
|
|
/// 12 profiles ship with the game: pack-loyal Canid traditionalists,
|
|
/// herd-cautious Cervids, urban progressives, hybrid survivors, etc.
|
|
/// Adding new profiles is a content-only edit.
|
|
/// </summary>
|
|
public sealed record BiasProfileDef
|
|
{
|
|
[JsonPropertyName("id")]
|
|
public string Id { get; init; } = "";
|
|
|
|
[JsonPropertyName("name")]
|
|
public string Name { get; init; } = "";
|
|
|
|
[JsonPropertyName("description")]
|
|
public string Description { get; init; } = "";
|
|
|
|
/// <summary>Modifier for the player's clade. Keys are clade ids ("canidae", "felidae", ...).</summary>
|
|
[JsonPropertyName("clade_bias")]
|
|
public Dictionary<string, int> CladeBias { get; init; } = new();
|
|
|
|
/// <summary>Modifier when the player is detected as hybrid. Negative = stigma, positive = solidarity.</summary>
|
|
[JsonPropertyName("hybrid_bias")]
|
|
public int HybridBias { get; init; } = 0;
|
|
|
|
/// <summary>
|
|
/// Optional faction-affinity hints. Map of faction id → +integer (faction
|
|
/// the NPC favours) or -integer (faction the NPC distrusts). Phase 6 M5
|
|
/// uses these to decide how an NPC reacts to the player's faction
|
|
/// standing; M1/M2 only display them in the disposition tooltip.
|
|
/// </summary>
|
|
[JsonPropertyName("faction_affinity")]
|
|
public Dictionary<string, int> FactionAffinity { get; init; } = new();
|
|
}
|