1. CRITICAL: spawn_template_npcs now inserts NpcVisionState, NpcMemory, PlayerAwareness on template-spawned NPCs — matches spawn_npc() pattern from PR #66. Without these, template NPCs were invisible to vision and awareness systems. 2. WARNING: generate_intra_template_triangles now calls validate_triangle_def before generating TriangleState — mirrors cross-template path. Updates test TriangleDefs and logistics-hub.yaml to pass all three quality checks (conflict viability, relationship coherence, interest divergence). 3. WARNING: state_hash in compute_observer_snapshot now uses FNV-1a instead of DefaultHasher — consistent with D-010 principle 4 and the pattern in TemplateId/TriangleId. Updates golden file for new hash value. 4. WARNING: TriangleCrisisEventWire.role_assignments now filtered against observer KnowledgeGraph — unknown NPCs redacted from wire event per D-010 principle 2 (information boundaries). 5. WARNING: ActiveTemplateInstances::insert now despawns previous instance entities before overwriting — prevents orphaned ECS entities. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
203 lines
5.1 KiB
YAML
203 lines
5.1 KiB
YAML
# Sova Station Logistics Hub — Tier 2 social site template (#159).
|
||
#
|
||
# Spec refs: D-023 (three-tier content model), D-024 (10-axis NPC model),
|
||
# D-025 (social site as atomic template unit), D-028 (dialogue pools),
|
||
# D-087 (v0.1 triangle configuration), D-089 (self-contained forks)
|
||
#
|
||
# Tile scale (D-066): tile_count_* are SIM tiles (0.5m each).
|
||
# 15–40 visual tiles (D-025) = 30–80 sim tiles.
|
||
#
|
||
# triangle_id values are authoring placeholders (0).
|
||
# The instantiation engine overwrites them with
|
||
# TriangleId::from_seed_and_roles(world_seed, &roles) at runtime.
|
||
|
||
slug: "logistics-hub"
|
||
display_name: "Sova Station Logistics Hub"
|
||
description: >
|
||
The terminal's operational core — cargo processing, documentation,
|
||
and the informal relationships that keep goods moving off-manifest.
|
||
A functional cluster of four NPCs controlling access to the station's
|
||
primary freight throughput.
|
||
|
||
roles:
|
||
- role_id: "logistics-manager"
|
||
required_traits:
|
||
- Bold
|
||
- Cautious
|
||
skill_focus:
|
||
- Persuasion
|
||
- Observation
|
||
relationship_constraints:
|
||
- with_role: "dock-worker"
|
||
kind: Superior
|
||
required_trust:
|
||
min: 0
|
||
max: 5
|
||
- with_role: "ring-contact"
|
||
kind: Colleague
|
||
required_trust:
|
||
min: -5
|
||
max: 2
|
||
- with_role: "security-guard"
|
||
kind: Superior
|
||
required_trust:
|
||
min: 1
|
||
max: 5
|
||
routine_template:
|
||
- phase: morning
|
||
location: "terminal-office"
|
||
activity: "documentation-review"
|
||
- phase: afternoon
|
||
location: "terminal-cargo-bay"
|
||
activity: "cargo-inspection"
|
||
- phase: evening
|
||
location: "terminal-office"
|
||
activity: "end-of-day-reports"
|
||
|
||
- role_id: "dock-worker"
|
||
required_traits:
|
||
- Honest
|
||
- Social
|
||
skill_focus:
|
||
- Technical
|
||
- Observation
|
||
relationship_constraints:
|
||
- with_role: "logistics-manager"
|
||
kind: Subordinate
|
||
required_trust:
|
||
min: -2
|
||
max: 4
|
||
- with_role: "ring-contact"
|
||
kind: Colleague
|
||
required_trust:
|
||
min: -4
|
||
max: 0
|
||
routine_template:
|
||
- phase: morning
|
||
location: "terminal-cargo-bay"
|
||
activity: "freight-handling"
|
||
- phase: afternoon
|
||
location: "terminal-cargo-bay"
|
||
activity: "freight-handling"
|
||
- phase: evening
|
||
location: "bar-last-shift"
|
||
|
||
- role_id: "ring-contact"
|
||
required_traits:
|
||
- Deceptive
|
||
- Social
|
||
skill_focus:
|
||
- Stealth
|
||
- Persuasion
|
||
relationship_constraints:
|
||
- with_role: "logistics-manager"
|
||
kind: Colleague
|
||
required_trust:
|
||
min: -5
|
||
max: 2
|
||
- with_role: "dock-worker"
|
||
kind: Colleague
|
||
required_trust:
|
||
min: -4
|
||
max: 0
|
||
routine_template:
|
||
- phase: morning
|
||
location: "terminal-cargo-bay"
|
||
activity: "oversight"
|
||
- phase: afternoon
|
||
location: "maintenance-corridor"
|
||
- phase: evening
|
||
location: "bar-last-shift"
|
||
|
||
- role_id: "security-guard"
|
||
required_traits:
|
||
- Cautious
|
||
- Honest
|
||
skill_focus:
|
||
- Combat
|
||
- Observation
|
||
relationship_constraints:
|
||
- with_role: "logistics-manager"
|
||
kind: Subordinate
|
||
required_trust:
|
||
min: 1
|
||
max: 5
|
||
routine_template:
|
||
- phase: morning
|
||
location: "terminal-entrance"
|
||
activity: "access-control"
|
||
- phase: afternoon
|
||
location: "terminal-cargo-bay"
|
||
activity: "patrol"
|
||
- phase: evening
|
||
location: "terminal-entrance"
|
||
activity: "access-control"
|
||
|
||
space:
|
||
tile_count_min: 30
|
||
tile_count_max: 80
|
||
sightline_zones:
|
||
- name: "loading-floor"
|
||
radius: 8 # 4m clear sightline across the loading area
|
||
- name: "reception-desk"
|
||
radius: 4 # 2m clear sightline at the desk
|
||
- name: "cargo-staging"
|
||
radius: 6 # 3m clear sightline in staging area
|
||
privacy_level: SemiPrivate
|
||
traffic_pattern: Destination
|
||
|
||
triangles:
|
||
- triangle_id: 0
|
||
roles:
|
||
- "ring-contact"
|
||
- "dock-worker"
|
||
- "logistics-manager"
|
||
conflict_type: ResourceCompetition
|
||
interest_axes:
|
||
- Want
|
||
- Secret
|
||
- Relationships
|
||
relationship_constraints:
|
||
- with_role: "dock-worker"
|
||
kind: Subordinate
|
||
required_trust:
|
||
min: -2
|
||
max: 2
|
||
|
||
- triangle_id: 0
|
||
roles:
|
||
- "logistics-manager"
|
||
- "security-guard"
|
||
- "ring-contact"
|
||
conflict_type: AuthorityChallenge
|
||
interest_axes:
|
||
- Want
|
||
- Tolerance
|
||
- Secret
|
||
relationship_constraints:
|
||
- with_role: "security-guard"
|
||
kind: Superior
|
||
required_trust:
|
||
min: 0
|
||
max: 5
|
||
|
||
dialogue_pools:
|
||
- location: "the-terminal"
|
||
roles:
|
||
- "logistics-manager"
|
||
- "dock-worker"
|
||
- "ring-contact"
|
||
- "security-guard"
|
||
- location: "terminal-cargo-bay"
|
||
roles:
|
||
- "dock-worker"
|
||
- "ring-contact"
|
||
|
||
cross_template_links:
|
||
- from_role: "dock-worker"
|
||
to_template_slug: "last-shift-bar"
|
||
relationship: Colleague
|
||
- from_role: "ring-contact"
|
||
to_template_slug: "last-shift-bar"
|
||
relationship: Colleague
|