Rename rural-zone-spec.ron → krenn-rural-zone.ron and industrial-zone-spec.ron → krenn-industrial-zone.ron to reflect that these are culture×zone specific content, not reusable templates. Add ~108 new typical_behaviors across all roles: - Rural: farmer +20 (incl tavern/off-duty), mechanic +15 (incl tavern), trader +10 (observable stage directions), militia +5 - Industrial: dock_worker +20 (incl break room), technician +19 (incl break room), foreman +14 (person-beneath-the-role), security +5 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
187 lines
11 KiB
Plaintext
187 lines
11 KiB
Plaintext
// Krenn Industrial Zone — location-specific zone content
|
||
//
|
||
// Schema: server/src/npc/blueprint.rs :: ZoneSpec
|
||
// Ticket: #609, #630 (copy team)
|
||
// Validate: tooling/validate-ron content/global/krenn-industrial-zone.ron zone
|
||
//
|
||
// This is content for a specific location: a Krenn industrial district.
|
||
// Behaviors, roles, and social sites are culture×zone specific — not reusable
|
||
// templates. See Q-057 for the composable behavior generation design that
|
||
// will replace hand-authored pools with assembled primitives.
|
||
//
|
||
// Character: freight handling, manufacturing, maintenance. High throughput.
|
||
// Shift rhythms. Functional over comfortable. Nobody lingers — unless they're on break.
|
||
|
||
(
|
||
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",
|
||
// on-shift
|
||
"drags a heavy case along the deck plating one-handed, leaning hard into the weight",
|
||
"re-checks a seal on a container door after a colleague already checked it",
|
||
"flags a damaged pallet to the foreman without stopping the line",
|
||
"shoulders a cargo rig harness and clips in without looking down",
|
||
"sweeps debris off the loading apron with a long push broom",
|
||
"braces a container with a boot while reaching for the locking pin",
|
||
"reads the load ticket twice, then flips the handheld over to check the back",
|
||
"waves off a crane operator when the angle is wrong, holds up a fist",
|
||
"steps over a bundled cable run without breaking stride",
|
||
"peels off a work glove with his teeth to check a handheld display",
|
||
"trades a quick look with a colleague when the foreman walks by",
|
||
// off-shift / break room
|
||
"unwraps a meal packet in the break room and eats standing at the counter",
|
||
"passes a drink to the person next to her without being asked",
|
||
"leans back in a break room chair with eyes closed, boots crossed at the ankle",
|
||
"laughs at something across the break room table, loud enough to carry",
|
||
"shows something on a handheld to a colleague and both of them look at it for a moment",
|
||
"sits with elbows on knees, turning an empty cup in both hands",
|
||
"splashes water on his face at the sink and stands there a moment before turning off the tap",
|
||
"talks over the break room noise at volume, gesturing with a fork",
|
||
"falls asleep in a break room chair, chin on chest, arms folded",
|
||
],
|
||
),
|
||
(
|
||
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",
|
||
// on-shift
|
||
"taps a wrench against a junction box lid to test for rattle",
|
||
"pulls a burnt relay from a panel and holds it up to the light",
|
||
"clips a sensor lead to two terminals and watches the readout settle",
|
||
"photographs a fault site with a handheld before touching anything",
|
||
"threads a cable through a conduit run without looking, hands working by feel",
|
||
"checks a pressure gauge by putting a thumb on the dial housing and reading the needle",
|
||
"labels a repaired junction with tape and a marker, block letters",
|
||
"reads a service manual on a battered datapad, scrolling with one finger",
|
||
"kneels under a raised floor panel with a light between her teeth",
|
||
"closes a maintenance hatch and shoulder-checks it twice",
|
||
"stands on the second rung of a ladder and reaches without climbing higher",
|
||
// off-shift / break room
|
||
"sits sideways in a break room chair, back against the wall, feet on the seat beside her",
|
||
"pulls up a schematic on a personal handheld and looks at it between bites",
|
||
"refills someone else's cup from the urn without commenting on it",
|
||
"puts her boots on the break room table and doesn't move them when the foreman walks in",
|
||
"describes a problem to a dock worker who doesn't follow it but nods anyway",
|
||
"argues a point at the break room table, tapping the surface for emphasis",
|
||
"reads something on a personal device with his head tipped back and the screen held at arm's length",
|
||
"laughs until he has to set down his drink",
|
||
],
|
||
),
|
||
(
|
||
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",
|
||
// the person beneath the role
|
||
"covers a worker's absence from the shift log by redistributing the bay assignments",
|
||
"eats lunch standing at a wall terminal so she can watch the floor at the same time",
|
||
"takes the call herself instead of forwarding it, one hand pressed to her other ear against the noise",
|
||
"corrects a dock worker's form on the cargo rig harness without making it a lesson",
|
||
"walks a new hire through the handover checklist once, point by point, no shortcuts",
|
||
"keeps a junior worker between herself and the inspection team as the inspectors pass through",
|
||
"finds a reason to be nearby when a new worker makes her first solo lift",
|
||
"absorbs a production shortfall report without passing the frustration down the line",
|
||
"hands a dock worker an extra meal packet and walks away without explaining it",
|
||
"sits next to a technician in the break room and doesn't talk, just sits",
|
||
"makes a note in the shift log that takes longer to write than it takes to read",
|
||
"tells a bad joke to nobody in particular while marking off the production board",
|
||
"signs off on a repair she didn't inspect, because she knows who did it",
|
||
"stands at the edge of the loading floor for a long moment before walking back",
|
||
],
|
||
),
|
||
(
|
||
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",
|
||
"stops at a junction, looks both ways, and picks the longer route",
|
||
"runs an ID check on someone whose face she recognizes, procedure is procedure",
|
||
"stands with her back to a structural column where both exits are visible",
|
||
"glances at a badge without stopping the person wearing it",
|
||
"checks the restricted bay door seal before settling in to watch the corridor",
|
||
],
|
||
),
|
||
],
|
||
|
||
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,
|
||
),
|
||
],
|
||
)
|