Run 14: reproduction from bonds, and towns anchored to the compass

Children from bonds (Phase B): death no longer auto-spawns a replacement;
bonded, fed, adult pairs conceive, logistic-damped toward a per-town
carrying capacity. Population is now dynamic - births vs deaths, a band
not a fixed count. Towns anchored to their cardinal seeds (build-centroid
70% weighted to the fixed compass point) so settlements stay planted
instead of drifting to map-center - North now founds at ~(388,139) by its
(384,130) seed vs West's prior 100+ cell drift.

Tuning took three passes (logged in FINDINGS): explosion, then die-out,
then a generational-gap bug where founders aged out of fertility before
their children matured. Fix: wide fertility window + generous rate.
Result: births 108 ~= deaths 104, healthy population band, and the
four-town thesis sharpened into demographics - North/South thrive
soul-clean, West shrinks with debris, East collapses to a starving
remnant. Selfishness now literally fails to sustain a population.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 19:03:01 -04:00
parent d7448c497d
commit 6cbe4bcf83
3 changed files with 129 additions and 46 deletions
+5 -2
View File
@@ -21,7 +21,7 @@ public static class StatsLogger
"avg_fatigue,avg_nourish,avg_health,carried," +
"gather_ticks,build_ticks,trade_ticks,rest_ticks,social_ticks," +
"shelters_done,ruins,avg_cond,upkeep_stock,burn_per_day,modules,granary_food," +
"avg_debris,refusals,incomplete_sites,avg_knowledge,deaths";
"avg_debris,refusals,incomplete_sites,avg_knowledge,deaths,births,population";
private const string NpcHeader =
"day,npc,name,soul,town,dominant,gather_ticks,build_ticks,trade_ticks,rest_ticks,social_ticks," +
@@ -153,7 +153,9 @@ public static class StatsLogger
float knowSum = 0f;
foreach (var npc in gm.Npcs) knowSum += npc.Know.Total;
row.Append((knowSum / count).ToString("0.000", ci)).Append(',');
row.Append(gm.DeathsToday);
row.Append(gm.DeathsToday).Append(',');
row.Append(gm.BirthsToday).Append(',');
row.Append(gm.Npcs.Count);
File.AppendAllText(_path, row + "\n");
@@ -194,5 +196,6 @@ public static class StatsLogger
TradeSystem.TradesToday = 0;
TradeSystem.RefusalsToday = 0;
gm.DeathsToday = 0;
gm.BirthsToday = 0;
}
}