Town-colored homes, split diagonally for mixed-culture households
Shelters now wear their town's culture color on the map (North cool-blue, South green, West gold, East red), dimmed by wear; granaries stay green, ruins dark. And bonds can now cross town lines: usually you pair within your own people (that's who you're near), but a wanderer who warms to someone from another town shacks up across cultures - the first quiet thread of contact between two peoples. When two towns share a roof, the house is drawn split diagonally, half each culture, visible across the map. Mechanics: buildings track their top-two resident home-towns (recomputed with occupancy, throttled to every 30 ticks since it's map-only); the bonding rule dropped its same-town requirement. A 240-day run produced 126 bonds, 40 of them cross-town (East+North, West+South, all combos), with populations still balanced - inter-cultural contact without destabilizing the towns. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+9
-4
@@ -950,15 +950,20 @@ public class Npc
|
||||
nearest = found;
|
||||
|
||||
// Consider bonding: an unbonded adult who keeps warm company with a
|
||||
// compatible, unbonded neighbor may pair with them. Same town, real
|
||||
// warmth, both grown — companionship chosen, not assigned.
|
||||
// compatible, unbonded neighbor may pair with them — real warmth,
|
||||
// both grown, companionship chosen not assigned. Town is NOT a
|
||||
// requirement: usually you bond within your own people (that's who
|
||||
// you're near), but a wanderer who warms to someone from another
|
||||
// town can shack up across cultures — the first quiet thread of
|
||||
// contact between two peoples.
|
||||
if (!IsBonded && IsAdult && nearest is { IsBonded: false, IsAdult: true } n &&
|
||||
n.HomeTown == HomeTown && Position.DistanceTo(n.Position) < 4f &&
|
||||
Position.DistanceTo(n.Position) < 4f &&
|
||||
GetWarmth(n.Name) > 0.4f && n.GetWarmth(Name) > 0.4f)
|
||||
{
|
||||
Partner = n;
|
||||
n.Partner = this;
|
||||
Godot.GD.Print($"[Bond] day {gm.Day}: {Name} and {n.Name} ({HomeTown}) pair up.");
|
||||
string kind = n.HomeTown == HomeTown ? HomeTown : $"{HomeTown}+{n.HomeTown}";
|
||||
Godot.GD.Print($"[Bond] day {gm.Day}: {Name} and {n.Name} ({kind}) pair up.");
|
||||
}
|
||||
if (nearest != null && Position.DistanceTo(nearest.Position) > 3f)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user