Merge remote-tracking branch 'origin/server'
# Conflicts: # CHANGELOG.md
This commit is contained in:
@@ -202,6 +202,29 @@ pub struct OccasionalInjection {
|
||||
// NPC blueprint (output — generator produces these)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Internal motive/state driving an NPC's micro-behavior (#632).
|
||||
///
|
||||
/// The player never sees this directly — it leaks through the observable
|
||||
/// behavior as a tell. The gap between what an NPC is doing and WHY is
|
||||
/// the asymmetric information mechanic (D-010 principle 2).
|
||||
///
|
||||
/// `Neutral` means no notable motive — the NPC is simply doing their job.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
||||
pub enum NpcWant {
|
||||
/// Nothing stands out; routine work mode.
|
||||
Neutral,
|
||||
/// Disengaged from current task; attention elsewhere.
|
||||
Bored,
|
||||
/// Heightened attention to the environment; scanning, tracking.
|
||||
Alert,
|
||||
/// Something is wrong or off; watching without being obvious about it.
|
||||
Suspicious,
|
||||
/// Steering clear of a specific person in the zone.
|
||||
AvoidingSomeone,
|
||||
/// Actively trying to pick up information by proximity or conversation.
|
||||
LookingForInfo,
|
||||
}
|
||||
|
||||
/// Generator output for a single NPC.
|
||||
///
|
||||
/// Maps to the 10-axis model (D-024) but as a serializable data record,
|
||||
@@ -215,7 +238,12 @@ pub struct NpcBlueprint {
|
||||
pub role: String,
|
||||
/// Personality traits (2-3, no contradictory pairs).
|
||||
pub traits: Vec<PersonalityTrait>,
|
||||
/// Internal motive that biases observable behavior (#632).
|
||||
/// The player never sees this label — they infer it from the behavior.
|
||||
pub want: NpcWant,
|
||||
/// Observable behaviors the player can witness.
|
||||
/// Index 0 is the primary role/relationship-driven action.
|
||||
/// Index 1 (if present) is the Want tell — the leak of the internal state.
|
||||
pub observable_behaviors: Vec<String>,
|
||||
/// Cultural markers derived from the culture profile.
|
||||
pub cultural_markers: CulturalMarkers,
|
||||
@@ -370,6 +398,7 @@ mod tests {
|
||||
name: "Kael".into(),
|
||||
role: "dock_worker".into(),
|
||||
traits: vec![PersonalityTrait::Bold, PersonalityTrait::Honest],
|
||||
want: NpcWant::Alert,
|
||||
observable_behaviors: vec!["works efficiently".into()],
|
||||
cultural_markers: CulturalMarkers {
|
||||
speech_register: "direct".into(),
|
||||
|
||||
Reference in New Issue
Block a user