build-small-hackathon/aube-nova
1
1"""2Trait inheritance for the generational mechanic.3Pure math — no LLM.4"""5 6import random7 8from simulation.colonist import ALL_TRAITS, Colonist9 10 11def inherit_traits(12 parent_a: Colonist, parent_b: Colonist, cultural_bias: list[str] | None = None13) -> list[str]:14 """15 Child inherits from both parents with mutation.16 cultural_bias: traits common in the colony get slight preference.17 """18 pool = parent_a.traits + parent_b.traits19 inherited = random.sample(pool, k=min(3, len(pool)))20 21 # Mutation: 15% chance to add a colony-culture trait22 if random.random() < 0.15:23 if cultural_bias:24 inherited.append(random.choice(cultural_bias))25 else:26 inherited.append(random.choice(ALL_TRAITS))27 28 return list(set(inherited))[:3]29 30 31def spawn_child(32 parent_a: Colonist, parent_b: Colonist, child_id: str, cultural_bias: list[str]33) -> Colonist:34 traits = inherit_traits(parent_a, parent_b, cultural_bias)35 return Colonist(36 id=child_id,37 name=f"{parent_a.name[:2]}{parent_b.name[:2]}", # merged name38 age=0,39 job=random.choice(["farmer", "researcher", "engineer", "medic"]),40 traits=traits,41 generation=max(parent_a.generation, parent_b.generation) + 1,42 parent_ids=[parent_a.id, parent_b.id],43 )44 