Merge remote-tracking branch 'origin/copy'
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
// Krenn Culture Profile
|
||||
//
|
||||
// Schema: server/src/npc/blueprint.rs :: CultureProfile
|
||||
// Ticket: #610 (copy team)
|
||||
// Validate: tooling/validate-ron content/global/culture-krenn.ron culture
|
||||
//
|
||||
// Sources: D-036 (Sova Transit District / Krenn System setting, amended post-workshop),
|
||||
// D-121 (voice is culture-driven, job as modifier),
|
||||
// D-128 (culture implicit in starting location).
|
||||
//
|
||||
// Krenn: ~180 years settled. Mid-Reach G3V system. Working-class pragmatic.
|
||||
// Community-oriented, suspicious of distant authority. Competence earns respect.
|
||||
// Showing up and doing the work matters more than rank or credentials.
|
||||
// First-name-primary in social contexts — family names are institutional.
|
||||
|
||||
(
|
||||
id: "krenn",
|
||||
name: "Krenn System Culture",
|
||||
description: "Working-class pragmatic culture. ~180 years settled, mid-Reach G3V system. Community-oriented, suspicious of distant authority, values competence and reliability over credentials. Atmosphere: quotidian-with-undertow — comfortable enough to be complacent, tight enough that extra income is tempting.",
|
||||
|
||||
naming: (
|
||||
style: "compact, consonant-heavy, first-name-primary in social contexts",
|
||||
// Pool the generator draws from. More names = more variety across runs.
|
||||
// Source: D-036 canonical examples + extended set following same phoneme rules.
|
||||
// Rule: compact (1-2 syllables), consonant clusters welcome, hard endings preferred.
|
||||
given_names: [
|
||||
// D-036 canonical set
|
||||
"Kael", "Voss", "Lera", "Torek", "Drin",
|
||||
"Maret", "Naia", "Sera", "Nils", "Pael",
|
||||
"Tev", "Ren", "Sess", "Renn", "Olin",
|
||||
"Tav", "Resha", "Harek", "Sabel", "Pell",
|
||||
// Extended — same phoneme pattern
|
||||
"Dav", "Tork", "Ness", "Pren", "Vel",
|
||||
"Orin", "Mael", "Torra", "Sorek", "Sev",
|
||||
"Bren", "Linn", "Vrek", "Darek", "Pess",
|
||||
"Nell", "Kren", "Sorel", "Tavek", "Rask",
|
||||
],
|
||||
family_names: [
|
||||
// D-036 canonical + extended
|
||||
"Davan", "Sessik", "Korr", "Tamm", "Venn",
|
||||
"Lintar", "Darvo", "Kosse",
|
||||
// Extended
|
||||
"Pellan", "Sorren", "Tessik", "Morek", "Brav",
|
||||
"Ossel", "Rennick", "Harven", "Tollek", "Dass",
|
||||
],
|
||||
// Krenn culture is first-name-primary.
|
||||
// Family names exist but belong to institutional contexts: contracts, registrations, arrest records.
|
||||
family_name_used_socially: false,
|
||||
),
|
||||
|
||||
speech: (
|
||||
// Direct. Minimal pleasantries. Gets to the point — not because they're rude,
|
||||
// but because time is real and everyone's short of it.
|
||||
register: "direct, minimal pleasantries, gets to the point",
|
||||
filler_words: [
|
||||
"look",
|
||||
"right",
|
||||
"yeah",
|
||||
"so",
|
||||
"listen",
|
||||
"well",
|
||||
],
|
||||
greetings: [
|
||||
"hey",
|
||||
"morning",
|
||||
"shift treating you alright?",
|
||||
"all good?",
|
||||
"what's the word?",
|
||||
"all in one piece?",
|
||||
],
|
||||
farewells: [
|
||||
"shift's calling",
|
||||
"gotta move",
|
||||
"catch you later",
|
||||
"take it easy",
|
||||
"see you around",
|
||||
"stay out of trouble",
|
||||
],
|
||||
// Krenn oaths are void-adjacent — space is real here, and hostile.
|
||||
// They don't swear by gods or governments. They swear by what kills you.
|
||||
exclamations: [
|
||||
"void take it",
|
||||
"stars",
|
||||
"blood and void",
|
||||
"void's sake",
|
||||
"damn all",
|
||||
"cold vacuum",
|
||||
],
|
||||
),
|
||||
|
||||
values: (
|
||||
description: "Pragmatic, community-oriented, suspicious of authority. Competence earns respect. Showing up and doing the work matters more than rank or credentials. Outsiders are tolerated but watched. Loyalty runs narrow and deep — to your crew, your shift, your street.",
|
||||
// Traits more common in Krenn culture — generator biases toward these.
|
||||
// Bold: Krenn people speak their mind. Honest: community trust is load-bearing.
|
||||
// Curious: 180 years of problem-solving breeds intellectual appetite.
|
||||
// Social: community-oriented culture; isolation is a warning sign.
|
||||
favored_traits: [Bold, Honest, Curious, Social],
|
||||
// Traits less common — generator biases away from these.
|
||||
// Reclusive: red flag in a community that depends on showing up.
|
||||
// Deceptive: betrayal of trust is the worst thing you can do here.
|
||||
disfavored_traits: [Reclusive, Deceptive],
|
||||
),
|
||||
)
|
||||
@@ -0,0 +1,124 @@
|
||||
// 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,
|
||||
),
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,119 @@
|
||||
// Zone Identity Spec — Rural
|
||||
//
|
||||
// Schema: server/src/npc/blueprint.rs :: ZoneSpec
|
||||
// Ticket: #609 (copy team)
|
||||
// Validate: tooling/validate-ron content/global/rural-zone-spec.ron zone
|
||||
//
|
||||
// Character: scattered homesteads and small workshops. Unhurried. Community-bound.
|
||||
// Low throughput, high familiarity. Everyone knows who belongs here.
|
||||
//
|
||||
// Generator contrast target: rural vs industrial (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: "rural",
|
||||
label: "Rural Settlement",
|
||||
description: "Scattered homesteads, small workshops, and communal gathering points. Low population density, strong community bonds, subsistence-plus economy. Work is seasonal and visible — everyone knows what everyone else is doing.",
|
||||
|
||||
// 1-10. Rural Krenn: self-sufficient, low cash flow, barter supplements credits.
|
||||
economic_level: 3,
|
||||
// 1-10. Sparse. Faces are familiar. Strangers stand out.
|
||||
population_density: 2,
|
||||
|
||||
roles: [
|
||||
(
|
||||
id: "farmer",
|
||||
label: "Farmer",
|
||||
// Most common. The settlement runs on food production.
|
||||
weight: 5,
|
||||
skill_focus: ["technical"],
|
||||
combat_eligible: false,
|
||||
typical_behaviors: [
|
||||
"tends rows of low-growing crops with a long-handled hoe",
|
||||
"lifts a crate of produce onto a flatbed with practiced ease",
|
||||
"checks the section's light cycle timer before deciding whether to water",
|
||||
"patches a cracked irrigation pipe with strips of bonding tape",
|
||||
"calls across a field to a neighbor without looking up from work",
|
||||
"hauls produce to the market stall before the morning exchange opens",
|
||||
"checks seedling trays in a low prefab greenhouse",
|
||||
],
|
||||
),
|
||||
(
|
||||
id: "mechanic",
|
||||
label: "Settlement Mechanic",
|
||||
// One or two per settlement. Everyone knows who to call.
|
||||
weight: 3,
|
||||
skill_focus: ["technical"],
|
||||
combat_eligible: false,
|
||||
typical_behaviors: [
|
||||
"pulls a drive unit from a tiller and examines the worn housing",
|
||||
"wipes grease on the thigh of her coveralls between jobs",
|
||||
"explains a repair in clipped shorthand without looking up",
|
||||
"lines up salvaged parts on a workbench and assesses them",
|
||||
"welds a seam on a cracked water tank with slow, careful strokes",
|
||||
"borrows a tool from a neighbor and returns it without being asked",
|
||||
],
|
||||
),
|
||||
(
|
||||
id: "trader",
|
||||
label: "Itinerant Trader",
|
||||
// Passes through. Outsider-familiar — not local, not stranger.
|
||||
weight: 2,
|
||||
skill_focus: ["persuasion", "observation"],
|
||||
combat_eligible: false,
|
||||
typical_behaviors: [
|
||||
"squares goods on a fold-out portable display with deliberate care",
|
||||
"leans back on a stool and watches the foot traffic",
|
||||
"flicks credit chits across the counter with one thumb, barely glancing down",
|
||||
"holds eye contact through a long pause, waiting for the price to land",
|
||||
"watches a regular browse the same shelf as last time and says nothing",
|
||||
"packs unsold goods with no visible frustration",
|
||||
],
|
||||
),
|
||||
(
|
||||
id: "militia",
|
||||
label: "Settlement Militia",
|
||||
// Rare. Part-time. Knows everyone, trusted because of it.
|
||||
weight: 1,
|
||||
skill_focus: ["combat", "observation"],
|
||||
combat_eligible: true,
|
||||
typical_behaviors: [
|
||||
"walks the fence line at a measured, unhurried pace",
|
||||
"leans on the gate post with rifle slung, watching the road",
|
||||
"waves a familiar face through without checking credentials",
|
||||
"sits in the shade of the gatehouse with a local newsline",
|
||||
"stops to talk with a passing farmer, eyes still scanning the perimeter",
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
social_sites: [
|
||||
(
|
||||
site_type: "tavern",
|
||||
label: "Local Tavern",
|
||||
// The Last Shift equivalent for rural Krenn: functional, familiar, slow.
|
||||
roles: ["farmer", "mechanic", "trader", "militia"],
|
||||
min_npcs: 3,
|
||||
max_npcs: 6,
|
||||
),
|
||||
(
|
||||
site_type: "workshop",
|
||||
label: "Community Workshop",
|
||||
// Shared space. People fix things together.
|
||||
roles: ["mechanic", "farmer"],
|
||||
min_npcs: 2,
|
||||
max_npcs: 4,
|
||||
),
|
||||
(
|
||||
site_type: "market_stall",
|
||||
label: "Settlement Market",
|
||||
// Weekly or daily trading post. Commerce and gossip combined.
|
||||
roles: ["trader", "farmer"],
|
||||
min_npcs: 1,
|
||||
max_npcs: 3,
|
||||
),
|
||||
],
|
||||
)
|
||||
Reference in New Issue
Block a user