Add more NPCs + announce moves to room.

This commit is contained in:
Condorra 2023-01-12 23:12:50 +11:00
parent c5c78763a2
commit cf8ceb1351
6 changed files with 152 additions and 82 deletions

View File

@ -15,6 +15,7 @@ mod regular_tasks;
mod models;
mod static_content;
mod language;
mod services;
pub type DResult<T> = Result<T, Box<dyn Error + Send + Sync>>;

View File

@ -5,15 +5,44 @@ use super::{
};
use async_trait::async_trait;
use crate::{
DResult,
regular_tasks::queued_command::{
QueueCommandHandler,
QueueCommand,
queue_command
},
static_content::room::{self, Direction, ExitType}
static_content::room::{self, Direction, ExitType},
db::DBTrans,
models::item::Item,
services::broadcast_to_room,
};
use std::time;
pub async fn announce_move(trans: &DBTrans, character: &Item, leaving: &Item, arriving: &Item) -> DResult<()> {
let msg_leaving_exp = format!("{} departs towards {}\n", &character.display, &leaving.display);
let msg_leaving_nonexp = format!("{} departs towards {}\n",
character.display_less_explicit
.as_ref()
.unwrap_or(&character.display),
arriving.display_less_explicit
.as_ref()
.unwrap_or(&arriving.display));
broadcast_to_room(trans, &format!("{}/{}", &leaving.item_type, &leaving.item_code),
None, &msg_leaving_exp, Some(&msg_leaving_nonexp)).await?;
let msg_arriving_exp = format!("{} arrives from {}\n", &character.display, &leaving.display);
let msg_arriving_nonexp = format!("{} arrives from {}\n",
character.display_less_explicit
.as_ref()
.unwrap_or(&character.display),
leaving.display_less_explicit
.as_ref()
.unwrap_or(&leaving.display));
broadcast_to_room(trans, &format!("{}/{}", &arriving.item_type, &arriving.item_code),
None, &msg_arriving_exp, Some(&msg_arriving_nonexp)).await?;
Ok(())
}
pub struct QueueHandler;
#[async_trait]
impl QueueCommandHandler for QueueHandler {
@ -40,7 +69,6 @@ impl QueueCommandHandler for QueueHandler {
let exit = room.exits.iter().find(|ex| ex.direction == *direction)
.ok_or_else(|| UserError("There is nothing in that direction".to_owned()))?;
// Ideally we would queue if we were already moving rather than insta-move.
match exit.exit_type {
ExitType::Free => {}
ExitType::Blocked(blocker) => {
@ -55,7 +83,16 @@ impl QueueCommandHandler for QueueHandler {
let mut new_player_item = (*player_item).clone();
new_player_item.location = format!("{}/{}", "room", new_room.code);
ctx.trans.save_item_model(&new_player_item).await?;
look::VERB.handle(ctx, "look", "").await?;
if let Some(old_room_item) = ctx.trans.find_item_by_type_code("room", room.code).await? {
if let Some(new_room_item) = ctx.trans.find_item_by_type_code("room", new_room.code).await? {
announce_move(&ctx.trans, &new_player_item, &old_room_item, &new_room_item).await?;
}
}
Ok(())
}
}

View File

@ -1,8 +1,11 @@
use super::{VerbContext, UserVerb, UserVerbRef, UResult, UserError,
user_error,
get_player_item_or_fail, is_likely_explicit};
use crate::models::item::{Item, ItemFlag};
use crate::db::DBTrans;
use crate::{
models::item::{Item, ItemFlag},
services::broadcast_to_room,
db::DBTrans
};
use async_trait::async_trait;
use ansi::{ignore_special_characters, ansi};
@ -21,21 +24,24 @@ pub async fn say_to_room<'l>(
user_error("Your wristpad vibrates and flashes up an error - apparently it has \
been programmed to block your voice from working here.".to_owned())?
}
for item in trans.find_items_by_location(location).await? {
if item.item_type != "player" {
continue;
}
if let Some((session, session_dat)) = trans.find_session_for_player(&item.item_code).await? {
if session_dat.less_explicit_mode && is_explicit && from_item.item_code != item.item_code {
continue;
}
trans.queue_for_session(&session, Some(&format!(
ansi!("<yellow>{} says: <reset><bold>\"{}\"<reset>\n"),
from_item.display_for_session(&session_dat),
say_what
))).await?;
}
}
let msg_exp = format!(
ansi!("<yellow>{} says: <reset><bold>\"{}\"<reset>\n"),
from_item.display,
say_what
);
let msg_lessexp = format!(
ansi!("<yellow>{} says: <reset><bold>\"{}\"<reset>\n"),
from_item.display_less_explicit.as_ref().unwrap_or(&from_item.display),
say_what
);
broadcast_to_room(
trans,
location,
Some(from_item),
&msg_exp,
if is_explicit { None } else { Some(&msg_lessexp) }
).await?;
Ok(())
}

View File

@ -0,0 +1,24 @@
use crate::{
models::item::Item,
db::DBTrans,
DResult
};
pub async fn broadcast_to_room(trans: &DBTrans, location: &str, from_item: Option<&Item>,
message_explicit_ok: &str, message_nonexplicit: Option<&str>) -> DResult<()> {
for item in trans.find_items_by_location(location).await? {
if item.item_type != "player" {
continue;
}
if let Some((session, session_dat)) = trans.find_session_for_player(&item.item_code).await? {
if session_dat.less_explicit_mode && Some(&item.item_code) != from_item.map(|i| &i.item_code) {
if let Some(msg) = message_nonexplicit {
trans.queue_for_session(&session, Some(msg)).await?;
}
return Ok(());
}
trans.queue_for_session(&session, Some(message_explicit_ok)).await?;
}
}
Ok(())
}

View File

@ -1,6 +1,6 @@
use super::{StaticItem, StaticTask};
use crate::models::{
item::Item,
item::{Item, Pronouns},
task::{Task, TaskMeta, TaskRecurrence, TaskDetails}
};
use once_cell::sync::OnceCell;
@ -48,7 +48,7 @@ pub struct NPCSayInfo {
pub struct NPC {
pub code: &'static str,
pub name: &'static str,
pub proper_noun: bool,
pub pronouns: Pronouns,
pub description: &'static str,
pub spawn_location: &'static str,
pub message_handler: Option<&'static (dyn NPCMessageHandler + Sync + Send)>,
@ -60,7 +60,7 @@ impl Default for NPC {
Self {
code: "DEFAULT",
name: "default",
proper_noun: true,
pronouns: Pronouns::default_animate(),
description: "default",
spawn_location: "default",
message_handler: None,
@ -120,6 +120,7 @@ pub fn npc_static_items() -> Box<dyn Iterator<Item = StaticItem>> {
details: Some(c.description.to_owned()),
location: c.spawn_location.to_owned(),
is_static: true,
pronouns: c.pronouns.clone(),
..Item::default()
})
}))

View File

@ -1,11 +1,12 @@
use super::NPC;
use crate::models::item::Pronouns;
pub fn npc_list() -> Vec<NPC> {
vec!(
NPC {
code: "melbs_dog_1",
name: "feral black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_collinsst",
..Default::default()
@ -13,7 +14,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_2",
name: "howling black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_collinsst_100",
..Default::default()
@ -21,7 +22,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_3",
name: "ferocious white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_lonsdalest",
..Default::default()
@ -29,7 +30,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_4",
name: "mangy grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_collinsst_160",
..Default::default()
@ -37,7 +38,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_5",
name: "howling grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_100",
..Default::default()
@ -45,7 +46,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_6",
name: "reeking black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_120",
..Default::default()
@ -53,7 +54,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_7",
name: "growling grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_20",
..Default::default()
@ -61,7 +62,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_8",
name: "mangy black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_bourkest_120",
..Default::default()
@ -69,7 +70,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_9",
name: "howling black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_collinsst_100",
..Default::default()
@ -77,7 +78,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_10",
name: "howling brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_flindersst_130",
..Default::default()
@ -85,7 +86,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_11",
name: "ferocious black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_flindersst_100",
..Default::default()
@ -93,7 +94,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_12",
name: "mangy grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_90",
..Default::default()
@ -101,7 +102,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_13",
name: "reeking light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_140",
..Default::default()
@ -109,7 +110,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_14",
name: "smelly black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_20",
..Default::default()
@ -117,7 +118,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_15",
name: "growling light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_10",
..Default::default()
@ -125,7 +126,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_16",
name: "howling brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_swanstonst_flindersst",
..Default::default()
@ -133,7 +134,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_17",
name: "feral brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_kingst_latrobest",
..Default::default()
@ -141,7 +142,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_18",
name: "smelly grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_kingst_40",
..Default::default()
@ -149,7 +150,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_19",
name: "feral black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_60",
..Default::default()
@ -157,7 +158,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_20",
name: "smelly white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_swanstonst_120",
..Default::default()
@ -165,7 +166,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_21",
name: "growling white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_90",
..Default::default()
@ -173,7 +174,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_22",
name: "feral light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_150",
..Default::default()
@ -181,7 +182,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_23",
name: "mangy grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_150",
..Default::default()
@ -189,7 +190,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_24",
name: "reeking grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_100",
..Default::default()
@ -197,7 +198,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_25",
name: "smelly grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_bourkest_180",
..Default::default()
@ -205,7 +206,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_26",
name: "growling light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_100",
..Default::default()
@ -213,7 +214,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_27",
name: "feral light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_10",
..Default::default()
@ -221,7 +222,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_28",
name: "feral grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_160",
..Default::default()
@ -229,7 +230,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_29",
name: "reeking brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_bourkest_110",
..Default::default()
@ -237,7 +238,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_30",
name: "howling grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_80",
..Default::default()
@ -245,7 +246,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_31",
name: "howling brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_bourkest_160",
..Default::default()
@ -253,7 +254,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_32",
name: "feral black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_swanstonst_collinsst",
..Default::default()
@ -261,7 +262,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_33",
name: "reeking brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_kingst_flinderst",
..Default::default()
@ -269,7 +270,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_34",
name: "reeking white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_100",
..Default::default()
@ -277,7 +278,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_35",
name: "growling light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_110",
..Default::default()
@ -285,7 +286,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_36",
name: "reeking black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_90",
..Default::default()
@ -293,7 +294,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_37",
name: "growling black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_latrobesst_200",
..Default::default()
@ -301,7 +302,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_38",
name: "feral black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_90",
..Default::default()
@ -309,7 +310,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_39",
name: "mangy black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_40",
..Default::default()
@ -317,7 +318,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_40",
name: "growling white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_40",
..Default::default()
@ -325,7 +326,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_41",
name: "reeking grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_latrobest",
..Default::default()
@ -333,7 +334,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_42",
name: "mangy grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_flindersst_210",
..Default::default()
@ -341,7 +342,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_43",
name: "ferocious brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_kingst_latrobest",
..Default::default()
@ -349,7 +350,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_44",
name: "ferocious light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_collinsst_120",
..Default::default()
@ -357,7 +358,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_45",
name: "ferocious light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_swanstonst_lonsdalest",
..Default::default()
@ -365,7 +366,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_46",
name: "smelly grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_30",
..Default::default()
@ -373,7 +374,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_47",
name: "growling grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_lonsdalest_100",
..Default::default()
@ -381,7 +382,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_48",
name: "ferocious brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_latrobest_210",
..Default::default()
@ -389,7 +390,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_49",
name: "reeking brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_latrobest_140",
..Default::default()
@ -397,7 +398,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_50",
name: "howling grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_swanstonst_110",
..Default::default()
@ -405,7 +406,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_51",
name: "howling black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_elizabethst_flindersst",
..Default::default()
@ -413,7 +414,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_52",
name: "growling light brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_flindersst_120",
..Default::default()
@ -421,7 +422,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_53",
name: "ferocious black dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_110",
..Default::default()
@ -429,7 +430,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_54",
name: "growling grey dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_flindersst_210",
..Default::default()
@ -437,7 +438,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_55",
name: "reeking brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_60",
..Default::default()
@ -445,7 +446,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_56",
name: "ferocious white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_queenst_lonsdalest",
..Default::default()
@ -453,7 +454,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_57",
name: "smelly brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_swanstonst_lonsdalest",
..Default::default()
@ -461,7 +462,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_58",
name: "mangy white dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_bourkest",
..Default::default()
@ -469,7 +470,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_59",
name: "mangy brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_latrobest_170",
..Default::default()
@ -477,7 +478,7 @@ pub fn npc_list() -> Vec<NPC> {
NPC {
code: "melbs_dog_60",
name: "growling brown dog",
proper_noun: false,
pronouns: Pronouns { is_proper: false, ..Pronouns::default_inanimate() },
description: "A malnourished looking dog. Its skeleton is visible through its thin and patchy fur. It smells terrible, and certainly doesn't look tame.",
spawn_location: "room/melbs_williamsst_110",
..Default::default()