Run 13: the full world - four towns, resources, bonds, spatial grid

World scaled 3x (768x768) with all four towns at compass points, each
running its own soul culture: North generational, South nature, West
materialist (new profile), East selfish. Two new resources: Ore (metal
tier) and Herb (medicine - mends health, reason to forage, trade good).
Spatial hash grid replaces O(n^2) proximity scans (soul pressure,
neighbor, teacher) - 3.6x headless speedup at ~80 NPCs. First social
verb beyond work: pair-bonds - settled adults who keep warm company pair
up; warmth now accrues from proximity not only gifts; bonds break at
death. Reproduction deferred (bonds-first per plan).

The four-town thesis fully realized on one engine (240-day run):
North know 1.27 clean, South nourish 0.85 clean, West prosperous but
debris 0.23, East hungriest 0.60 and lowest knowledge 1.08. Positive
cultures stay soul-clean, negative ones carry real debris, all from
behavior weights - nothing scripted. 99 bonds, 80 deaths, four living
societies.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 17:04:19 -04:00
parent 3e4e44c623
commit f9e22e872f
12 changed files with 21725 additions and 6819 deletions
+10 -7
View File
@@ -4,7 +4,7 @@ using Godot;
namespace WorldSim;
public enum MaterialKind { Wood, Stone, Clay, Water, Food }
public enum MaterialKind { Wood, Stone, Clay, Water, Food, Ore, Herb }
/// <summary>
/// A harvestable resource node on the grid (SPEC §6).
@@ -28,7 +28,7 @@ public class ResourceNode
/// </summary>
public class World
{
public const int GridSize = 256;
public const int GridSize = 768;
public List<ResourceNode> Nodes { get; } = new();
@@ -49,11 +49,14 @@ public class World
/// </summary>
public void Generate()
{
PlaceMany(MaterialKind.Water, count: 6, amount: float.PositiveInfinity, regen: 0f);
PlaceMany(MaterialKind.Clay, count: 10, amount: 40f, regen: 0.5f); // TODO: constrain near water
PlaceMany(MaterialKind.Wood, count: 60, amount: 30f, regen: 2f);
PlaceMany(MaterialKind.Stone, count: 12, amount: 80f, regen: 0f);
PlaceMany(MaterialKind.Food, count: 40, amount: 20f, regen: 4f); // South: flora most abundant
// Resource counts scale ~9× with the 3× larger world so density holds.
PlaceMany(MaterialKind.Water, count: 40, amount: float.PositiveInfinity, regen: 0f);
PlaceMany(MaterialKind.Clay, count: 80, amount: 40f, regen: 0.5f);
PlaceMany(MaterialKind.Wood, count: 480, amount: 30f, regen: 2f);
PlaceMany(MaterialKind.Stone, count: 140, amount: 80f, regen: 0f); // more deposits — housing was stone-capped
PlaceMany(MaterialKind.Food, count: 360, amount: 20f, regen: 4f);
PlaceMany(MaterialKind.Ore, count: 40, amount: 60f, regen: 0f); // metal source (post-MVP tier)
PlaceMany(MaterialKind.Herb, count: 120, amount: 15f, regen: 3f); // medicine / trade good
}
private void PlaceMany(MaterialKind kind, int count, float amount, float regen)