Make the sewers dangerous

This commit is contained in:
Condorra 2024-01-27 18:17:56 +11:00
parent 169e56dc84
commit 72c48b44c5
5 changed files with 343 additions and 10 deletions

View File

@ -38,6 +38,7 @@ pub mod computer_museum_npcs;
mod melbs_citizen; mod melbs_citizen;
mod melbs_dog; mod melbs_dog;
mod roboporter; mod roboporter;
mod sewer_npcs;
pub mod statbot; pub mod statbot;
#[async_trait] #[async_trait]
@ -192,6 +193,7 @@ pub fn npc_list() -> &'static Vec<NPC> {
npcs.append(&mut melbs_dog::npc_list()); npcs.append(&mut melbs_dog::npc_list());
npcs.append(&mut roboporter::npc_list()); npcs.append(&mut roboporter::npc_list());
npcs.append(&mut computer_museum_npcs::npc_list()); npcs.append(&mut computer_museum_npcs::npc_list());
npcs.append(&mut sewer_npcs::npc_list());
npcs npcs
}) })
} }

View File

@ -0,0 +1,104 @@
use super::{NPCPronounType, NPCSayInfo, NPCSayType, NPCSpawnPossession, NPC};
use crate::{
models::{
consent::ConsentType,
item::{LocationActionType, Pronouns, SkillType},
},
static_content::{
npc::{npc_pronoun_type_to_pronouns, KillBonus},
possession_type::PossessionType,
},
};
use serde::Deserialize;
use serde_yaml::from_str as from_yaml_str;
#[derive(Deserialize)]
enum SewerNPC {
RadiantPredator {
code: String,
name: String,
spawn_loc: String,
gender: NPCPronounType,
},
}
pub fn npc_list() -> Vec<NPC> {
use NPCSayType::FromFixedList;
let radiant_predator_stdsay = NPCSayInfo {
say_code: "babble",
frequency_secs: 120,
talk_type: FromFixedList(vec![
"I hunger for flesh.",
"The darkness is my ally.",
"Step closer please, prey.",
"My stomach rumbles for human flesh.",
"Survival is a predator's only law.",
"The scent of fear is intoxicating.",
"I am the shadow in the sewer.",
"In the dark, I thrive.",
"Flesh is my sustenance.",
"My predator knife is fantastic for hunting unsuspecting prey.",
"In the depths, I reign supreme.",
"The hunt begins.",
"No mercy for the intruders.",
"I love visitors to the sewers, they taste great!",
"The echoes reveal your presence.",
"My hunger knows no bounds.",
"The predator way is to be silent, deadly, and relentless.",
"The sewer is my kingdom.",
"Prey that comes my way doesn't get away.",
"Do I smell a human... in my sewer? Yum.",
"I know you are there, prey! Give up, we might as well get this over with!",
]),
};
from_yaml_str::<Vec<SewerNPC>>(include_str!("sewer_npcs.yaml"))
.unwrap()
.into_iter()
.map(|c| match c {
SewerNPC::RadiantPredator { code, name, spawn_loc, gender } =>
NPC {
code: format!("sewer_{}", &code),
name,
pronouns: Pronouns {
is_proper: false,
..npc_pronoun_type_to_pronouns(&gender)
},
aliases: vec!["predator".to_owned(), "radiant".to_owned(),
"radiant predator".to_owned()],
aggression: 12,
description: "A creature, vicious in demeanour, but uncannily human like, but also a bit... off, in a grotesquely mutant way. Discoloured flesh hangs loosely around the disproportionate frame, while a horrific grin reveals phosphorescent yellowish teeth, sharper than those of a normal human. You catch a whiff of a putrid odour, and notice fragments of meat caught between the teeth of this hideous humanoid. Coarse brown matted hair over the body gives it an ape-like appearance. The eyes are larger than those of a normal human and gleam, leading you to suspect this creature is well adapted to low light levels".to_owned(),
spawn_location: format!("room/melbs_sewers_{}", &spawn_loc),
spawn_possessions: vec![
NPCSpawnPossession {
what: PossessionType::Dagger,
action_type: LocationActionType::Wielded,
wear_layer: 0,
},
],
kill_bonus: Some(KillBonus {
msg: "On your wristpad: You are doing a great job removing hazards from the sewer! Let me toss a few credits your way.",
payment: 200,
}),
aggro_pc_only: true,
total_xp: 10000,
total_skills: SkillType::values()
.into_iter()
.map(|sk| {
(
sk.clone(),
match sk {
SkillType::Dodge => 14.0,
SkillType::Blades => 18.0,
_ => 8.0
}
)
}).collect(),
player_consents: vec!(ConsentType::Fight),
message_handler: None,
wander_zones: vec!["melbs_sewers".to_owned()],
says: vec!(radiant_predator_stdsay.clone()),
..Default::default()
}
}).collect()
}

View File

@ -0,0 +1,230 @@
- !RadiantPredator
code: radiant_1
name: ugly gnashing radiant predator
gender: Male
spawn_loc: 1a
- !RadiantPredator
code: radiant_2
name: fetid abhorrent radiant predator
gender: Female
spawn_loc: 3a
- !RadiantPredator
code: radiant_3
name: vicious sickening radiant predator
gender: Male
spawn_loc: 5a
- !RadiantPredator
code: radiant_4
name: scary fluorescent radiant predator
gender: Male
spawn_loc: 7a
- !RadiantPredator
code: radiant_5
name: putrid flabby radiant predator
gender: Female
spawn_loc: 9a
- !RadiantPredator
code: radiant_6
name: aggressive grinning radiant predator
gender: Female
spawn_loc: 11a
- !RadiantPredator
code: radiant_7
name: growling smelly radiant predator
gender: Male
spawn_loc: 13a
- !RadiantPredator
code: radiant_8
name: berserk filthy radiant predator
gender: Male
spawn_loc: 15a
- !RadiantPredator
code: radiant_9
name: unkempt scowling radiant predator
gender: Female
spawn_loc: 17a
- !RadiantPredator
code: radiant_10
name: snarling albino radiant predator
gender: Female
spawn_loc: 1c
- !RadiantPredator
code: radiant_11
name: fierce dreadlocked radiant predator
gender: Male
spawn_loc: 9c
- !RadiantPredator
code: radiant_12
name: grotesque mad radiant predator
gender: Female
spawn_loc: 11c
- !RadiantPredator
code: radiant_13
name: belicose reeking radiant predator
gender: Female
spawn_loc: 13c
- !RadiantPredator
code: radiant_14
name: impertinent repulsive radiant predator
gender: Male
spawn_loc: 15c
- !RadiantPredator
code: radiant_15
name: impatient matted radiant predator
gender: Female
spawn_loc: 17c
- !RadiantPredator
code: radiant_16
name: stroppy dreadlocked radiant predator
gender: Male
spawn_loc: 2e
- !RadiantPredator
code: radiant_17
name: aggressive repugnant radiant predator
gender: Female
spawn_loc: 4e
- !RadiantPredator
code: radiant_18
name: lurching vile radiant predator
gender: Male
spawn_loc: 6e
- !RadiantPredator
code: radiant_19
name: malodourous radiant predator
gender: Female
spawn_loc: 8e
- !RadiantPredator
code: radiant_20
name: grumbling unpleasant radiant predator
gender: Male
spawn_loc: 10e
- !RadiantPredator
code: radiant_21
name: horrible mutated radiant predator
gender: Female
spawn_loc: 12e
- !RadiantPredator
code: radiant_22
name: lunging foul radiant predator
gender: Male
spawn_loc: 17e
- !RadiantPredator
code: radiant_23
name: fearsome repugnant radiant predator
gender: Female
spawn_loc: 1f
- !RadiantPredator
code: radiant_24
name: fearsome repugnant radiant predator
gender: Male
spawn_loc: 5f
- !RadiantPredator
code: radiant_25
name: sickening sadistic radiant predator
gender: Female
spawn_loc: 13g
- !RadiantPredator
code: radiant_26
name: hideous noxious radiant predator
gender: Male
spawn_loc: 15g
- !RadiantPredator
code: radiant_27
name: pugnacious odiferous radiant predator
gender: Female
spawn_loc: 1j
- !RadiantPredator
code: radiant_28
name: snarling smelly radiant predator
gender: Male
spawn_loc: 15j
- !RadiantPredator
code: radiant_28b
name: fierce gruesome radiant predator
gender: Male
spawn_loc: 3j
- !RadiantPredator
code: radiant_29
name: fearsome musty radiant predator
gender: Female
spawn_loc: 17j
- !RadiantPredator
code: radiant_30
name: repugnant lurching radiant predator
gender: Male
spawn_loc: 1l
- !RadiantPredator
code: radiant_31
name: insolent stenchful radiant predator
gender: Female
spawn_loc: 3l
- !RadiantPredator
code: radiant_32
name: cantankerous ponging radiant predator
gender: Male
spawn_loc: 11l
- !RadiantPredator
code: radiant_33
name: grouchy unwashed radiant predator
gender: Female
spawn_loc: 15l
- !RadiantPredator
code: radiant_34
name: crotchety sharp-toothed radiant predator
gender: Male
spawn_loc: 17l
- !RadiantPredator
code: radiant_35
name: grumbling insane radiant predator
gender: Female
spawn_loc: 1n
- !RadiantPredator
code: radiant_36
name: fierce whiffy radiant predator
gender: Male
spawn_loc: 5n
- !RadiantPredator
code: radiant_37
name: unclean stabby radiant predator
gender: Female
spawn_loc: 11n
- !RadiantPredator
code: radiant_38
name: snarling repugnant radiant predator
gender: Female
spawn_loc: 15n
- !RadiantPredator
code: radiant_39
name: matted bellicose radiant predator
gender: Male
spawn_loc: 17n
- !RadiantPredator
code: radiant_40
name: petulant snapping radiant predator
gender: Female
spawn_loc: 7o
- !RadiantPredator
code: radiant_41
name: meat-seeking fetid radiant predator
gender: Male
spawn_loc: 1p
- !RadiantPredator
code: radiant_42
name: flesheating sickening radiant predator
gender: Female
spawn_loc: 5p
- !RadiantPredator
code: radiant_43
name: grotesque scowling radiant predator
gender: Male
spawn_loc: 9p
- !RadiantPredator
code: radiant_44
name: fearsome disgusting radiant predator
gender: Female
spawn_loc: 17p
- !RadiantPredator
code: radiant_45
name: repulsive foul radiant predator
gender: Male
spawn_loc: 14q

View File

@ -665,6 +665,7 @@
code: melbs_sewers_9e code: melbs_sewers_9e
name: Dank sewerpipe intersection name: Dank sewerpipe intersection
short: <yellow>==<reset> short: <yellow>==<reset>
repel_npc: true
grid_coords: grid_coords:
x: 9 x: 9
y: -1 y: -1
@ -1070,6 +1071,7 @@
code: melbs_sewers_5i code: melbs_sewers_5i
name: Wide fetid sewerpipe name: Wide fetid sewerpipe
short: <blue>==<reset> short: <blue>==<reset>
repel_npc: true
grid_coords: grid_coords:
x: 5 x: 5
y: 3 y: 3
@ -1206,6 +1208,7 @@
code: melbs_sewers_13i code: melbs_sewers_13i
name: Widening fetid sewer bend name: Widening fetid sewer bend
short: <blue>##<reset> short: <blue>##<reset>
repel_npc: true
grid_coords: grid_coords:
x: 13 x: 13
y: 3 y: 3
@ -1612,6 +1615,7 @@
x: 9 x: 9
y: 7 y: 7
z: -1 z: -1
repel_npc: true
description: A sewer bend that connects a broad pipe to a comparatively narrow one. It smells like sewage in here. Foul smelling gloop, presumably sewage, flows rapidly along the bottom of the pipe. Fearsome howls and screams echo off the walls. This sewer is a veritable ecosystem of its own; every now and then, you feel something living brush against you description: A sewer bend that connects a broad pipe to a comparatively narrow one. It smells like sewage in here. Foul smelling gloop, presumably sewage, flows rapidly along the bottom of the pipe. Fearsome howls and screams echo off the walls. This sewer is a veritable ecosystem of its own; every now and then, you feel something living brush against you
exits: exits:
- direction: north - direction: north

View File

@ -36,21 +36,14 @@ pub enum BodyPart {
} }
impl BodyPart { impl BodyPart {
pub fn display(&self, sex: Option<Sex>) -> &'static str { pub fn display(&self, _sex: Option<Sex>) -> &'static str {
use BodyPart::*; use BodyPart::*;
match self { match self {
Head => "head", Head => "head",
Face => "face", Face => "face",
Chest => match sex { Chest => "chest",
Some(Sex::Female) => "breasts",
_ => "chest",
},
Back => "back", Back => "back",
Groin => match sex { Groin => "groin",
Some(Sex::Male) => "penis",
Some(Sex::Female) => "vagina",
_ => "groin",
},
Arms => "arms", Arms => "arms",
Hands => "hands", Hands => "hands",
Legs => "legs", Legs => "legs",