Name pool fixes: - Remove "Korr" from given_names (duplicate with family_names), replace with "Tork" - Replace "Narek" with "Sorek" (real-world Armenian name, IP concern) - Replace soft "-ael" endings (Vael→Vrek, Rael→Rask) to match naming rules - Update comment: "no soft endings" → "hard endings preferred" - Add 2 family names (Tollek, Dass) to balance pool ratio (now 40/18) Voice fixes: - Replace "same drill" (not an exclamation) with "cold vacuum" - Rewrite 3 trader behaviors as observable stage directions - Add 2 foreman off-duty behaviors (person beneath the role) - Add break room behaviors to dock_worker, technician, foreman Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
125 lines
5.7 KiB
Plaintext
125 lines
5.7 KiB
Plaintext
// Zone Identity Spec — Industrial
|
|
//
|
|
// Schema: server/src/npc/blueprint.rs :: ZoneSpec
|
|
// Ticket: #609 (copy team)
|
|
// Validate: tooling/validate-ron content/global/industrial-zone-spec.ron zone
|
|
//
|
|
// Character: freight handling, manufacturing, maintenance. High throughput.
|
|
// Shift rhythms. Functional over comfortable. Nobody lingers — unless they're on break.
|
|
//
|
|
// Generator contrast target: industrial vs rural (Sprint 25 proof).
|
|
// If these produce NPCs that look the same, something is wrong.
|
|
//
|
|
// Heritage roots (D-104/D-105) overlay these base specs at generation time,
|
|
// modifying role weights, social site composition, and behavioral flavoring.
|
|
|
|
(
|
|
zone_type: "industrial",
|
|
label: "Industrial Zone",
|
|
description: "Freight handling, manufacturing, and maintenance. High throughput, shift-based work rhythms, functional over comfortable. Faces are known by role and bay number more than name. The work doesn't stop between shifts — people do.",
|
|
|
|
// 1-10. Industrial Krenn: steady credit flow, but it all goes somewhere.
|
|
economic_level: 7,
|
|
// 1-10. Dense. Multiple shifts overlap. Crowds at handover.
|
|
population_density: 6,
|
|
|
|
roles: [
|
|
(
|
|
id: "dock_worker",
|
|
label: "Dock Worker",
|
|
// Most common. The zone runs on their backs.
|
|
weight: 5,
|
|
skill_focus: ["technical"],
|
|
combat_eligible: false,
|
|
typical_behaviors: [
|
|
"guides a freight container into position with hand signals",
|
|
"checks a manifest against a handheld scanner, lips moving",
|
|
"waits at the loading bay apron with arms crossed, watching the clock",
|
|
"calls bay numbers to a colleague across the noise of the floor",
|
|
"hooks a cargo sling and steps clear before signaling the lift",
|
|
"stacks empty pallets against a wall with mechanical efficiency",
|
|
"wipes sweat from her face with a forearm and keeps moving",
|
|
"slumps into a break room chair and stares at nothing for a full minute before reaching for a drink",
|
|
],
|
|
),
|
|
(
|
|
id: "technician",
|
|
label: "Systems Technician",
|
|
// Keeps the infrastructure running. Never enough of them.
|
|
weight: 4,
|
|
skill_focus: ["technical"],
|
|
combat_eligible: false,
|
|
typical_behaviors: [
|
|
"runs a diagnostic routine on a floor console, eyes on the readout",
|
|
"traces a conduit run along the ceiling with a handheld light",
|
|
"swaps a panel module with practiced speed and no wasted motion",
|
|
"logs a fault code into a datapad before moving on",
|
|
"presses an ear to a vibrating duct and listens",
|
|
"argues quietly with a display that isn't giving the right numbers",
|
|
"queries a fault log through her insert without touching the terminal, eyes briefly unfocused",
|
|
"stretches both arms overhead in the break room doorway, blocking it without noticing",
|
|
],
|
|
),
|
|
(
|
|
id: "foreman",
|
|
label: "Shift Foreman",
|
|
// Fewer of them. High visibility. Everyone knows where they are.
|
|
weight: 2,
|
|
skill_focus: ["observation", "persuasion"],
|
|
combat_eligible: false,
|
|
typical_behaviors: [
|
|
"walks the floor with a datapad under one arm and says nothing",
|
|
"pulls a worker aside for a quiet word near the far wall",
|
|
"marks a line off a production board and moves to the next one",
|
|
"stands at the mezzanine rail watching throughput without expression",
|
|
"reviews shift handover notes and circles something with a stylus",
|
|
"speaks to a dock crew in a low voice — they listen without nodding",
|
|
"sits alone in the break room rubbing the back of her neck, datapad face-down on the table",
|
|
"laughs at something a technician says, then catches herself and goes quiet",
|
|
],
|
|
),
|
|
(
|
|
id: "security",
|
|
label: "Facility Security",
|
|
// Present, watchful. Not looking for trouble — cataloguing it.
|
|
weight: 2,
|
|
skill_focus: ["combat", "observation"],
|
|
combat_eligible: true,
|
|
typical_behaviors: [
|
|
"sweeps the access corridor on a timed circuit, same path each time",
|
|
"waves a regular through the checkpoint on sight — scans the one behind them out of procedure",
|
|
"leans at the restricted bay entrance, arms folded — been watching this corridor since the shift started",
|
|
"notes something in a shift log without reacting to it outwardly",
|
|
"watches a handover between crews from across the loading floor",
|
|
],
|
|
),
|
|
],
|
|
|
|
social_sites: [
|
|
(
|
|
site_type: "break_room",
|
|
label: "Worker Break Room",
|
|
// Between shifts. Decompression. People stop performing for a moment.
|
|
roles: ["dock_worker", "technician", "foreman"],
|
|
min_npcs: 2,
|
|
max_npcs: 5,
|
|
),
|
|
(
|
|
site_type: "maintenance_bay",
|
|
label: "Maintenance Bay",
|
|
// Active work site. Technicians and dock workers cross paths here.
|
|
roles: ["technician", "dock_worker"],
|
|
min_npcs: 2,
|
|
max_npcs: 4,
|
|
),
|
|
(
|
|
site_type: "loading_platform",
|
|
label: "Loading Platform",
|
|
// The operational center. Busy, loud, coordinated.
|
|
roles: ["dock_worker", "foreman", "security"],
|
|
min_npcs: 3,
|
|
max_npcs: 8,
|
|
),
|
|
],
|
|
)
|