Run 12: knowledge system, mortality, and the North's generational soul
SPEC §5 built: three skill domains (forage/woodcraft/masonry) that pay off and grow by practice; proximity diffusion soul-calibrated by absorption x teaching-drive; and mortality - the piece that makes knowledge generational. Elders die (~150-230 days), everything unshared dies with them, a youth comes of age near knowing nothing. North soul (absorption 1.6, teaching 0.9) vs South (1.0, 0.3); East teaches no one. Two findings: (1) headless soaks were contaminated by orphaned child processes writing later runs' CSVs - fixed with StopAfterDays clean self-terminate; (2) passive diffusion barely helped - the North's real culture is the young seeking elders on purpose, so added deliberate teacher-seeking and youths now cradle beside the wisest elder. North now leads knowledge at every checkpoint, but a stable town approaches the ceiling regardless, so teaching is a recovery advantage not an equilibrium one. The crisis-recovery experiment is the real test, noted in FINDINGS as next. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
using Godot;
|
||||
|
||||
namespace WorldSim;
|
||||
|
||||
/// <summary>Domains of practical knowledge (SPEC §5 — deliberately few).</summary>
|
||||
public enum KnowledgeDomain { Forage, Woodcraft, Masonry }
|
||||
|
||||
/// <summary>
|
||||
/// What a person knows how to do (SPEC §5). Not an object in the world —
|
||||
/// it lives in people, spreads by proximity, grows by practice, and dies
|
||||
/// with its holder unless it was passed on. Every death is a small library
|
||||
/// burning; a teaching culture is a culture of copies.
|
||||
///
|
||||
/// Capacity is personal and randomized: some people can hold more than
|
||||
/// others, and what fills first is what they lived.
|
||||
/// </summary>
|
||||
public class Knowledge
|
||||
{
|
||||
public const int DomainCount = 3;
|
||||
|
||||
/// <summary>0–1 per domain.</summary>
|
||||
public float[] Skill = new float[DomainCount];
|
||||
|
||||
/// <summary>Total learning this mind can hold, across all domains.</summary>
|
||||
public float Capacity = 1.5f;
|
||||
|
||||
public float Total => Skill[0] + Skill[1] + Skill[2];
|
||||
public float Headroom => Mathf.Max(0f, Capacity - Total);
|
||||
|
||||
public float this[KnowledgeDomain d] => Skill[(int)d];
|
||||
|
||||
/// <summary>Learn, limited by personal capacity.</summary>
|
||||
public void Gain(KnowledgeDomain d, float amount)
|
||||
{
|
||||
if (amount <= 0f || Headroom <= 0f) return;
|
||||
float a = Mathf.Min(amount, Headroom);
|
||||
Skill[(int)d] = Mathf.Clamp(Skill[(int)d] + a, 0f, 1f);
|
||||
}
|
||||
|
||||
/// <summary>Which domain a material teaches and benefits from.</summary>
|
||||
public static KnowledgeDomain DomainFor(MaterialKind kind) => kind switch
|
||||
{
|
||||
MaterialKind.Food => KnowledgeDomain.Forage,
|
||||
MaterialKind.Wood => KnowledgeDomain.Woodcraft,
|
||||
_ => KnowledgeDomain.Masonry, // stone, clay — builder's craft
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user