From 72c48b44c5ac77414687c1f48bc1735a60439e63 Mon Sep 17 00:00:00 2001 From: Condorra Date: Sat, 27 Jan 2024 18:17:56 +1100 Subject: [PATCH] Make the sewers dangerous --- blastmud_game/src/static_content/npc.rs | 2 + .../src/static_content/npc/sewer_npcs.rs | 104 ++++++++ .../src/static_content/npc/sewer_npcs.yaml | 230 ++++++++++++++++++ .../src/static_content/room/melbs_sewers.yaml | 4 + blastmud_game/src/static_content/species.rs | 13 +- 5 files changed, 343 insertions(+), 10 deletions(-) create mode 100644 blastmud_game/src/static_content/npc/sewer_npcs.rs create mode 100644 blastmud_game/src/static_content/npc/sewer_npcs.yaml diff --git a/blastmud_game/src/static_content/npc.rs b/blastmud_game/src/static_content/npc.rs index 695be86..13af64a 100644 --- a/blastmud_game/src/static_content/npc.rs +++ b/blastmud_game/src/static_content/npc.rs @@ -38,6 +38,7 @@ pub mod computer_museum_npcs; mod melbs_citizen; mod melbs_dog; mod roboporter; +mod sewer_npcs; pub mod statbot; #[async_trait] @@ -192,6 +193,7 @@ pub fn npc_list() -> &'static Vec { npcs.append(&mut melbs_dog::npc_list()); npcs.append(&mut roboporter::npc_list()); npcs.append(&mut computer_museum_npcs::npc_list()); + npcs.append(&mut sewer_npcs::npc_list()); npcs }) } diff --git a/blastmud_game/src/static_content/npc/sewer_npcs.rs b/blastmud_game/src/static_content/npc/sewer_npcs.rs new file mode 100644 index 0000000..036d91b --- /dev/null +++ b/blastmud_game/src/static_content/npc/sewer_npcs.rs @@ -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 { + 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::>(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() +} diff --git a/blastmud_game/src/static_content/npc/sewer_npcs.yaml b/blastmud_game/src/static_content/npc/sewer_npcs.yaml new file mode 100644 index 0000000..d0225e2 --- /dev/null +++ b/blastmud_game/src/static_content/npc/sewer_npcs.yaml @@ -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 diff --git a/blastmud_game/src/static_content/room/melbs_sewers.yaml b/blastmud_game/src/static_content/room/melbs_sewers.yaml index a12cfd0..b3998b0 100644 --- a/blastmud_game/src/static_content/room/melbs_sewers.yaml +++ b/blastmud_game/src/static_content/room/melbs_sewers.yaml @@ -665,6 +665,7 @@ code: melbs_sewers_9e name: Dank sewerpipe intersection short: == + repel_npc: true grid_coords: x: 9 y: -1 @@ -1070,6 +1071,7 @@ code: melbs_sewers_5i name: Wide fetid sewerpipe short: == + repel_npc: true grid_coords: x: 5 y: 3 @@ -1206,6 +1208,7 @@ code: melbs_sewers_13i name: Widening fetid sewer bend short: ## + repel_npc: true grid_coords: x: 13 y: 3 @@ -1612,6 +1615,7 @@ x: 9 y: 7 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 exits: - direction: north diff --git a/blastmud_game/src/static_content/species.rs b/blastmud_game/src/static_content/species.rs index 4e40454..23fa35a 100644 --- a/blastmud_game/src/static_content/species.rs +++ b/blastmud_game/src/static_content/species.rs @@ -36,21 +36,14 @@ pub enum BodyPart { } impl BodyPart { - pub fn display(&self, sex: Option) -> &'static str { + pub fn display(&self, _sex: Option) -> &'static str { use BodyPart::*; match self { Head => "head", Face => "face", - Chest => match sex { - Some(Sex::Female) => "breasts", - _ => "chest", - }, + Chest => "chest", Back => "back", - Groin => match sex { - Some(Sex::Male) => "penis", - Some(Sex::Female) => "vagina", - _ => "groin", - }, + Groin => "groin", Arms => "arms", Hands => "hands", Legs => "legs",