From 807a9612fd319ca16f7834ea89f6e782d94f1c34 Mon Sep 17 00:00:00 2001 From: Condorra Date: Sun, 8 Oct 2023 16:34:55 +1100 Subject: [PATCH] Split most room data to YAML for faster compile times. --- Cargo.lock | 10 + Cargo.toml | 1 + ansi/Cargo.toml | 1 + ansi_macro/Cargo.toml | 1 + ansi_macro/src/lib.rs | 60 +- ansi_markup/Cargo.toml | 7 + ansi_markup/src/lib.rs | 62 + blastmud_game/Cargo.toml | 9 + blastmud_game/src/main.rs | 7 + .../src/message_handler/user_commands/look.rs | 4 +- .../src/message_handler/user_commands/map.rs | 20 +- .../message_handler/user_commands/movement.rs | 2 +- .../src/message_handler/user_commands/rent.rs | 2 +- .../message_handler/user_commands/vacate.rs | 2 +- blastmud_game/src/services/spawn.rs | 10 +- blastmud_game/src/static_content.rs | 3 + blastmud_game/src/static_content/dumper.rs | 64 + blastmud_game/src/static_content/dynzone.rs | 3 +- .../src/static_content/fixed_item.rs | 56 +- blastmud_game/src/static_content/npc.rs | 4 +- blastmud_game/src/static_content/room.rs | 232 +- .../src/static_content/room/chonkers.rs | 92 +- .../src/static_content/room/chonkers.yaml | 52 + .../src/static_content/room/cok_murl.rs | 126 +- .../src/static_content/room/cok_murl.yaml | 45 + .../static_content/room/computer_museum.rs | 205 +- .../static_content/room/computer_museum.yaml | 107 + .../static_content/room/general_hospital.rs | 18 +- .../src/static_content/room/melbs.rs | 3965 +---------------- .../src/static_content/room/melbs.yaml | 2361 ++++++++++ .../src/static_content/room/repro_xv.rs | 48 +- .../src/static_content/room/special.rs | 156 +- .../src/static_content/room/special.yaml | 130 + blastmud_game/src/static_content/scavtable.rs | 33 + 34 files changed, 3219 insertions(+), 4679 deletions(-) create mode 100644 ansi_markup/Cargo.toml create mode 100644 ansi_markup/src/lib.rs create mode 100644 blastmud_game/src/static_content/dumper.rs create mode 100644 blastmud_game/src/static_content/room/chonkers.yaml create mode 100644 blastmud_game/src/static_content/room/cok_murl.yaml create mode 100644 blastmud_game/src/static_content/room/computer_museum.yaml create mode 100644 blastmud_game/src/static_content/room/melbs.yaml create mode 100644 blastmud_game/src/static_content/room/special.yaml create mode 100644 blastmud_game/src/static_content/scavtable.rs diff --git a/Cargo.lock b/Cargo.lock index d22400e7..3ab4585b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -80,17 +80,26 @@ name = "ansi" version = "0.1.0" dependencies = [ "ansi_macro", + "nom", ] [[package]] name = "ansi_macro" version = "0.1.0" dependencies = [ + "ansi_markup", "nom", "quote", "syn 1.0.109", ] +[[package]] +name = "ansi_markup" +version = "0.1.0" +dependencies = [ + "nom", +] + [[package]] name = "arrayvec" version = "0.7.4" @@ -221,6 +230,7 @@ name = "blastmud_game" version = "0.1.0" dependencies = [ "ansi", + "ansi_markup", "async-recursion", "async-trait", "base64 0.20.0", diff --git a/Cargo.toml b/Cargo.toml index 8cc7a559..a54bd45f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "blastmud_listener", "blastmud_interfaces", "blastmud_game", + "ansi_markup", "ansi_macro", "ansi", ] diff --git a/ansi/Cargo.toml b/ansi/Cargo.toml index 3ad12337..d6a3cf34 100644 --- a/ansi/Cargo.toml +++ b/ansi/Cargo.toml @@ -5,3 +5,4 @@ edition = "2021" [dependencies] ansi_macro = { path = "../ansi_macro" } +nom = "7.1.1" diff --git a/ansi_macro/Cargo.toml b/ansi_macro/Cargo.toml index 0d06eba5..6d08e15a 100644 --- a/ansi_macro/Cargo.toml +++ b/ansi_macro/Cargo.toml @@ -10,3 +10,4 @@ proc-macro = true nom = "7.1.1" quote = "1.0.23" syn = "1.0.107" +ansi_markup = { path = "../ansi_markup" } diff --git a/ansi_macro/src/lib.rs b/ansi_macro/src/lib.rs index 4b514209..b2222138 100644 --- a/ansi_macro/src/lib.rs +++ b/ansi_macro/src/lib.rs @@ -1,72 +1,16 @@ -use nom::{ - branch::alt, - bytes::complete::{tag, take_till, take_till1}, - combinator::eof, - error::Error, - multi::fold_many0, - sequence::{pair, tuple}, - Err, Parser, -}; +use ansi_markup::parse_ansi_markup; use proc_macro::TokenStream; use quote::ToTokens; use syn::{parse_macro_input, Lit}; -enum AnsiFrag<'l> { - Lit(&'l str), - Special(&'l str), -} -use AnsiFrag::Special; - #[proc_macro] pub fn ansi(input: TokenStream) -> TokenStream { let raw = match parse_macro_input!(input as Lit) { Lit::Str(lit_str) => lit_str.value(), _ => panic!("Expected a string literal"), }; - fn parser(i: &str) -> Result>> { - pair( - fold_many0( - alt(( - take_till1(|c| c == '<').map(AnsiFrag::Lit), - tuple((tag("<"), take_till(|c| c == '>'), tag(">"))) - .map(|t| AnsiFrag::Special(t.1)), - )), - || "".to_owned(), - |a, r| { - a + match r { - AnsiFrag::Lit(s) => &s, - Special(s) if s == "reset" => "\x1b[0m", - Special(s) if s == "bold" => "\x1b[1m", - Special(s) if s == "under" => "\x1b[4m", - Special(s) if s == "strike" => "\x1b[9m", - Special(s) if s == "nounder" => "\x1b[24m", - Special(s) if s == "black" => "\x1b[30m", - Special(s) if s == "red" => "\x1b[31m", - Special(s) if s == "green" => "\x1b[32m", - Special(s) if s == "yellow" => "\x1b[33m", - Special(s) if s == "blue" => "\x1b[34m", - Special(s) if s == "magenta" => "\x1b[35m", - Special(s) if s == "cyan" => "\x1b[36m", - Special(s) if s == "white" => "\x1b[37m", - Special(s) if s == "bgblack" => "\x1b[40m", - Special(s) if s == "bgred" => "\x1b[41m", - Special(s) if s == "bggreen" => "\x1b[42m", - Special(s) if s == "bgyellow" => "\x1b[43m", - Special(s) if s == "bgblue" => "\x1b[44m", - Special(s) if s == "bgmagenta" => "\x1b[45m", - Special(s) if s == "bgcyan" => "\x1b[46m", - Special(s) if s == "bgwhite" => "\x1b[47m", - Special(s) if s == "lt" => "<", - Special(r) => panic!("Unknown ansi type {}", r), - } - }, - ), - eof, - )(i) - .map(|(_, (r, _))| r) - } TokenStream::from( - parser(&raw) + parse_ansi_markup(&raw) .unwrap_or_else(|e| panic!("Bad ansi literal: {}", e)) .into_token_stream(), ) diff --git a/ansi_markup/Cargo.toml b/ansi_markup/Cargo.toml new file mode 100644 index 00000000..6177e0ba --- /dev/null +++ b/ansi_markup/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "ansi_markup" +version = "0.1.0" +edition = "2021" + +[dependencies] +nom = "7.1.1" diff --git a/ansi_markup/src/lib.rs b/ansi_markup/src/lib.rs new file mode 100644 index 00000000..20c4ed3f --- /dev/null +++ b/ansi_markup/src/lib.rs @@ -0,0 +1,62 @@ +use nom::{ + branch::alt, + bytes::complete::{tag, take_till, take_till1}, + combinator::eof, + error::Error, + multi::fold_many0, + sequence::{pair, tuple}, + Err, Parser, +}; + +enum AnsiFrag<'l> { + Lit(&'l str), + Special(&'l str), +} +use AnsiFrag::Special; + +pub fn parse_ansi_markup(i: &str) -> Result>> { + pair( + fold_many0( + alt(( + take_till1(|c| c == '<').map(AnsiFrag::Lit), + tuple((tag("<"), take_till(|c| c == '>'), tag(">"))) + .map(|t| AnsiFrag::Special(t.1)), + )), + || "".to_owned(), + |a, r| { + a + match r { + AnsiFrag::Lit(s) => &s, + Special(s) if s == "reset" => "\x1b[0m", + Special(s) if s == "bold" => "\x1b[1m", + Special(s) if s == "under" => "\x1b[4m", + Special(s) if s == "strike" => "\x1b[9m", + Special(s) if s == "nounder" => "\x1b[24m", + Special(s) if s == "black" => "\x1b[30m", + Special(s) if s == "red" => "\x1b[31m", + Special(s) if s == "green" => "\x1b[32m", + Special(s) if s == "yellow" => "\x1b[33m", + Special(s) if s == "blue" => "\x1b[34m", + Special(s) if s == "magenta" => "\x1b[35m", + Special(s) if s == "cyan" => "\x1b[36m", + Special(s) if s == "white" => "\x1b[37m", + Special(s) if s == "bgblack" => "\x1b[40m", + Special(s) if s == "bgred" => "\x1b[41m", + Special(s) if s == "bggreen" => "\x1b[42m", + Special(s) if s == "bgyellow" => "\x1b[43m", + Special(s) if s == "bgblue" => "\x1b[44m", + Special(s) if s == "bgmagenta" => "\x1b[45m", + Special(s) if s == "bgcyan" => "\x1b[46m", + Special(s) if s == "bgwhite" => "\x1b[47m", + Special(s) if s == "lt" => "<", + Special(r) => panic!("Unknown ansi type {}", r), + } + }, + ), + eof, + )(i) + .map(|(_, (r, _))| r) +} + +pub fn parse_ansi_markup_escape(i: &str) -> Result>> { + parse_ansi_markup(i).map(|o| o.replace('\x1b', "\\e")) +} diff --git a/blastmud_game/Cargo.toml b/blastmud_game/Cargo.toml index 6a5b78ff..891cb924 100644 --- a/blastmud_game/Cargo.toml +++ b/blastmud_game/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" base64 = "0.20.0" blastmud_interfaces = { path = "../blastmud_interfaces" } ansi = { path = "../ansi" } +ansi_markup = { path = "../ansi_markup" } deadpool = "0.9.5" deadpool-postgres = { version = "0.10.3", features = ["serde"] } futures = "0.3.25" @@ -44,3 +45,11 @@ mockall_double = "0.3.0" [dev-dependencies] tokio-test = "0.4.2" + +[features] +default = [] +# Export data to YAML files in /tmp on startup +yamldump = [] + +[profile.dev] +lto = false diff --git a/blastmud_game/src/main.rs b/blastmud_game/src/main.rs index b0474819..5c557869 100644 --- a/blastmud_game/src/main.rs +++ b/blastmud_game/src/main.rs @@ -7,6 +7,9 @@ use std::error::Error; use std::fs; use tokio::signal::unix::{signal, SignalKind}; +#[cfg(feature = "yamldump")] +use static_content::dumper::dump_static_content; + mod av; mod db; mod language; @@ -44,6 +47,10 @@ async fn main() -> DResult<()> { error!("Couldn't verify age-verification.yml - this is not a complete game. Check README.md: {}", e); Err(e) })?; + + #[cfg(feature = "yamldump")] + dump_static_content()?; + let config = read_latest_config()?; let pool = DBPool::start(&config.database_conn_string)?; diff --git a/blastmud_game/src/message_handler/user_commands/look.rs b/blastmud_game/src/message_handler/user_commands/look.rs index 5b2ce78c..7a82a8ef 100644 --- a/blastmud_game/src/message_handler/user_commands/look.rs +++ b/blastmud_game/src/message_handler/user_commands/look.rs @@ -407,7 +407,7 @@ pub async fn describe_room( contents: &str, ) -> UResult<()> { let zone = room::zone_details() - .get(room.zone) + .get(room.zone.as_str()) .map(|z| z.display) .unwrap_or("Outside of time"); ctx.trans @@ -694,7 +694,7 @@ pub async fn direction_to_item( .ok_or_else(|| UserError("There is nothing in that direction".to_owned()))?; let new_room = room::resolve_exit(room, exit) .ok_or_else(|| UserError("Can't find that room".to_owned()))?; - Ok(trans.find_item_by_type_code("room", new_room.code).await?) + Ok(trans.find_item_by_type_code("room", &new_room.code).await?) } pub struct Verb; diff --git a/blastmud_game/src/message_handler/user_commands/map.rs b/blastmud_game/src/message_handler/user_commands/map.rs index 9eb827ee..37b2c929 100644 --- a/blastmud_game/src/message_handler/user_commands/map.rs +++ b/blastmud_game/src/message_handler/user_commands/map.rs @@ -25,16 +25,16 @@ pub fn render_map(room: &room::Room, width: usize, height: usize) -> String { buf.push_str(ansi!("()")) } else { buf.push_str( - room::room_map_by_zloc() + &room::room_map_by_zloc() .get(&(&room.zone, &room::GridCoords { x, y, z: my_loc.z })) .map(|r| { if room.zone == r.zone { - r.short + r.short.as_str() } else { r.secondary_zones .iter() .find(|sz| sz.zone == room.zone) - .map(|sz| sz.short) + .map(|sz| sz.short.as_str()) .expect("Secondary zone missing") } }) @@ -129,10 +129,10 @@ pub fn render_lmap( let code_capt_opt = coord_room.map(|r| { if room.zone == r.zone { ( - r.short, + r.short.as_str(), if r.should_caption { Some(( - r.name, + r.name.as_str(), ((my_loc.x as i64 - r.grid_coords.x).abs() + (my_loc.y as i64 - r.grid_coords.y).abs()) as usize, @@ -147,10 +147,10 @@ pub fn render_lmap( .find(|sz| sz.zone == room.zone) .map(|sz| { ( - sz.short, - sz.caption.map(|c| { + sz.short.as_str(), + sz.caption.as_ref().map(|c| { ( - c, + c.as_str(), ((my_loc.x as i64 - r.grid_coords.x).abs() + (my_loc.y as i64 - r.grid_coords.y).abs()) as usize, @@ -165,10 +165,10 @@ pub fn render_lmap( None => buf.push_str(" "), Some((code, capt_opt)) => { if let Some((capt, closeness)) = capt_opt { - captions_needed.push((closeness, code, capt)); + captions_needed.push((closeness, &code, &capt)); } buf.push('['); - buf.push_str(code); + buf.push_str(&code); buf.push(']'); } } diff --git a/blastmud_game/src/message_handler/user_commands/movement.rs b/blastmud_game/src/message_handler/user_commands/movement.rs index c52ed2b3..404a5c97 100644 --- a/blastmud_game/src/message_handler/user_commands/movement.rs +++ b/blastmud_game/src/message_handler/user_commands/movement.rs @@ -301,7 +301,7 @@ pub async fn handle_fall(trans: &DBTrans, faller: &mut Item, fall_dist: u64) -> MaterialType::WaterSurface | MaterialType::Underwater => { return Ok("lands with a splash".to_owned()); } - MaterialType::Soft { damage_modifier } => damage_modifier, + MaterialType::Soft { damage_modifier } => damage_modifier as f64 / 100.0, MaterialType::Normal => 1.0, }, }, diff --git a/blastmud_game/src/message_handler/user_commands/rent.rs b/blastmud_game/src/message_handler/user_commands/rent.rs index 7bc69368..8ae5c5df 100644 --- a/blastmud_game/src/message_handler/user_commands/rent.rs +++ b/blastmud_game/src/message_handler/user_commands/rent.rs @@ -329,7 +329,7 @@ impl UserVerb for Verb { "Rent must be followed by the specific thing you want to rent: {}", room.rentable_dynzone .iter() - .map(|ri| ri.rent_what) + .map(|ri| ri.rent_what.as_str()) .join(", ") ))?, Some(v) => v, diff --git a/blastmud_game/src/message_handler/user_commands/vacate.rs b/blastmud_game/src/message_handler/user_commands/vacate.rs index 80b6aef3..96b3caab 100644 --- a/blastmud_game/src/message_handler/user_commands/vacate.rs +++ b/blastmud_game/src/message_handler/user_commands/vacate.rs @@ -53,7 +53,7 @@ impl UserVerb for Verb { "Vacate must be followed by the specific thing you want to vacate: {}", room.rentable_dynzone .iter() - .map(|ri| ri.rent_what) + .map(|ri| ri.rent_what.as_str()) .join(", ") ))?, Some(v) => v, diff --git a/blastmud_game/src/services/spawn.rs b/blastmud_game/src/services/spawn.rs index b0c3ac65..7fd46d71 100644 --- a/blastmud_game/src/services/spawn.rs +++ b/blastmud_game/src/services/spawn.rs @@ -8,7 +8,9 @@ use crate::{ }, regular_tasks::{TaskHandler, TaskRunContext}, services::Item, - static_content::{possession_type::PossessionType, room::room_list, StaticTask}, + static_content::{ + possession_type::PossessionType, room::room_list, scavtable::scavtable_map, StaticTask, + }, DResult, }; use async_recursion::async_recursion; @@ -172,8 +174,12 @@ pub async fn refresh_all_spawn_points(trans: &DBTrans) -> DResult<()> { // Also all scav spawns... trans.clean_scavhidden().await?; + let empty_vec = vec![]; for room in room_list().iter() { - for scav in &room.scavtable { + for scav in scavtable_map() + .get(&room.scavtable) + .unwrap_or_else(|| &empty_vec) + { if thread_rng().gen_bool(scav.p_present) { let difflevel = { let mut rng = thread_rng(); diff --git a/blastmud_game/src/static_content.rs b/blastmud_game/src/static_content.rs index 8f1281d8..cb8cb342 100644 --- a/blastmud_game/src/static_content.rs +++ b/blastmud_game/src/static_content.rs @@ -8,12 +8,15 @@ use log::info; use room::refresh_room_exits; use std::collections::{BTreeMap, BTreeSet}; +#[cfg(feature = "yamldump")] +pub mod dumper; pub mod dynzone; pub mod fixed_item; pub mod journals; pub mod npc; pub mod possession_type; pub mod room; +pub mod scavtable; pub mod species; pub struct StaticItem { diff --git a/blastmud_game/src/static_content/dumper.rs b/blastmud_game/src/static_content/dumper.rs new file mode 100644 index 00000000..93be5dfd --- /dev/null +++ b/blastmud_game/src/static_content/dumper.rs @@ -0,0 +1,64 @@ +use crate::DResult; + +use super::room::{room_list, Exit, ExitType, Room, SimpleExit, SimpleRoom}; +use serde_yaml::to_writer; +use std::fs::File; + +fn exit_to_simple_exit(exit: &Exit) -> Option { + match exit.exit_type { + ExitType::Free => {} + _ => return None, + } + Some(SimpleExit { + direction: exit.direction.clone(), + target: exit.target.clone(), + exit_climb: exit.exit_climb.clone(), + }) +} + +fn room_to_simpleroom(room: &Room) -> Option> { + if room.enter_trigger.is_some() { + return None; + } + let mut simple_exits = vec![]; + for ex in &room.exits { + match exit_to_simple_exit(&ex) { + None => return None, + Some(simp_ex) => simple_exits.push(simp_ex), + } + } + Some(SimpleRoom { + zone: room.zone.clone(), + secondary_zones: room.secondary_zones.clone(), + code: room.code.clone(), + name: room.name.clone(), + short: room.short.clone(), + grid_coords: room.grid_coords.clone(), + description: room.description.clone(), + description_less_explicit: room.description_less_explicit.clone(), + exits: simple_exits, + should_caption: room.should_caption.clone(), + repel_npc: room.repel_npc.clone(), + item_flags: room.item_flags.clone(), + stock_list: room.stock_list.clone(), + rentable_dynzone: room.rentable_dynzone.clone(), + material_type: room.material_type.clone(), + has_power: room.has_power.clone(), + door_states: room.door_states.clone(), + wristpad_hack_allowed: room.wristpad_hack_allowed.clone(), + journal: room.journal.clone(), + scavtable: room.scavtable.clone(), + extra: (), + }) +} + +pub fn dump_static_content() -> DResult<()> { + let rooms: Vec> = room_list() + .iter() + .filter_map(|r| room_to_simpleroom(r)) + .collect(); + + let mut file = File::create("/tmp/rooms.yaml")?; + to_writer(&mut file, &rooms)?; + Ok(()) +} diff --git a/blastmud_game/src/static_content/dynzone.rs b/blastmud_game/src/static_content/dynzone.rs index 738bc638..fa8f375e 100644 --- a/blastmud_game/src/static_content/dynzone.rs +++ b/blastmud_game/src/static_content/dynzone.rs @@ -11,12 +11,13 @@ use crate::{ }; use mockall_double::double; use once_cell::sync::OnceCell; +use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; mod cokmurl_apartment; mod murl_deluxe_corporate; -#[derive(Eq, Clone, PartialEq, Ord, PartialOrd, Debug)] +#[derive(Eq, Clone, PartialEq, Ord, PartialOrd, Debug, Serialize, Deserialize)] pub enum DynzoneType { CokMurlApartment, MurlDeluxeCorporate, diff --git a/blastmud_game/src/static_content/fixed_item.rs b/blastmud_game/src/static_content/fixed_item.rs index 48af7c25..11ff1364 100644 --- a/blastmud_game/src/static_content/fixed_item.rs +++ b/blastmud_game/src/static_content/fixed_item.rs @@ -6,27 +6,29 @@ use crate::{ }; use ansi::ansi; use once_cell::sync::OnceCell; +use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; +#[derive(Serialize, Deserialize)] pub struct FixedItem { - pub code: &'static str, - pub name: &'static str, - pub description: &'static str, - pub description_less_explicit: Option<&'static str>, - pub location: &'static str, + pub code: String, + pub name: String, + pub description: String, + pub description_less_explicit: Option, + pub location: String, pub proper_noun: bool, - pub aliases: Vec<&'static str>, + pub aliases: Vec, pub action_type: LocationActionType, } impl Default for FixedItem { fn default() -> Self { Self { - code: "default", - name: "default", - description: "A thingy", + code: "default".to_owned(), + name: "default".to_owned(), + description: "A thingy".to_owned(), description_less_explicit: None, - location: "unset", + location: "unset".to_owned(), proper_noun: true, aliases: vec![], action_type: LocationActionType::Normal, @@ -39,8 +41,8 @@ fn fixed_item_list() -> &'static Vec { FIXED_ITEM_LIST.get_or_init(|| { vec![ FixedItem { - code: "repro_xv_updates_red_poster", - name: ansi!("red poster"), + code: "repro_xv_updates_red_poster".to_owned(), + name: ansi!("red poster").to_owned(), description: "A larger faded poster with a thick red border. It says:\n\ \t\"Dear newly memory wiped citizen! Welcome to Melbs! A lot \ has changed since the memories your implant is based on were \ @@ -52,27 +54,27 @@ fn fixed_item_list() -> &'static Vec { Melbs as the King. I have gotten all the fallout out from the inner city, \ and I have a robot police force to keep you safe from the worst baddies, \ but be warned - there still are some dangers near by, and the world \ - further out, outside my realm, is a dangerous and radioactive place.\"", + further out, outside my realm, is a dangerous and radioactive place.\"".to_owned(), description_less_explicit: None, - location: "room/repro_xv_updates", + location: "room/repro_xv_updates".to_owned(), proper_noun: false, - aliases: vec!["poster"], + aliases: vec!["poster".to_owned()], ..Default::default() }, FixedItem { - code: "melbs_king_st_spring_fed_fountain", - name: "spring fed fountain", + code: "melbs_king_st_spring_fed_fountain".to_owned(), + name: "spring fed fountain".to_owned(), description: ansi!("A stainless steel fountain, clearly old, but in surprisingly good \ condition. A discoloured bronze plaque attached to it proudly declares \ that it is fed by a natural spring underneath it. It was designed so that \ unused water runs off it into a dog bowl - presumably in a time long past when \ dogs were friendly companions and not the menace they are today. It smells \ faintly of iron. [Try drink from fountain or, if you have a suitable \ - container, fill container from fountain]."), + container, fill container from fountain].").to_owned(), description_less_explicit: None, - location: "room/melbs_kingst_40", + location: "room/melbs_kingst_40".to_owned(), proper_noun: false, - aliases: vec!["fountain"], + aliases: vec!["fountain".to_owned()], ..Default::default() }, ].into_iter().chain(computer_museum::fixed_items().into_iter()).collect() @@ -101,16 +103,16 @@ pub fn fixed_item_properties() -> &'static BTreeMap<&'static str, PossessionData pub fn static_items() -> Box> { Box::new(fixed_item_list().iter().map(|r| StaticItem { - item_code: r.code, + item_code: &r.code, initial_item: Box::new(|| Item { - item_code: r.code.to_owned(), + item_code: r.code.clone(), item_type: "fixed_item".to_owned(), - display: r.name.to_owned(), - details: Some(r.description.to_owned()), - details_less_explicit: r.description_less_explicit.map(|d| d.to_owned()), - location: r.location.to_owned(), + display: r.name.clone(), + details: Some(r.description.clone()), + details_less_explicit: r.description_less_explicit.as_ref().map(|d| d.clone()), + location: r.location.clone(), is_static: true, - aliases: r.aliases.iter().map(|s| (*s).to_owned()).collect(), + aliases: r.aliases.iter().map(|s| (*s).clone()).collect(), pronouns: Pronouns { is_proper: r.proper_noun, ..Pronouns::default_inanimate() diff --git a/blastmud_game/src/static_content/npc.rs b/blastmud_game/src/static_content/npc.rs index 0dea6d47..758c8d7b 100644 --- a/blastmud_game/src/static_content/npc.rs +++ b/blastmud_game/src/static_content/npc.rs @@ -462,7 +462,9 @@ impl TaskHandler for NPCWanderTaskHandler { } let ex_iter = room.exits.iter().filter(|ex| { resolve_exit(room, ex) - .map(|new_room| npc.wander_zones.contains(&new_room.zone) && !new_room.repel_npc) + .map(|new_room| { + npc.wander_zones.contains(&new_room.zone.as_str()) && !new_room.repel_npc + }) .unwrap_or(false) }); let dir_opt = ex_iter diff --git a/blastmud_game/src/static_content/room.rs b/blastmud_game/src/static_content/room.rs index 74a847c7..c5890af9 100644 --- a/blastmud_game/src/static_content/room.rs +++ b/blastmud_game/src/static_content/room.rs @@ -1,16 +1,20 @@ -use super::{journals::award_journal_if_needed, possession_type::PossessionType, StaticItem}; +use super::{ + journals::award_journal_if_needed, possession_type::PossessionType, scavtable::ScavtableType, + StaticItem, +}; #[double] use crate::db::DBTrans; use crate::{ message_handler::user_commands::UResult, models::{ - item::{DoorState, Item, ItemFlag, Scavtype}, + item::{DoorState, Item, ItemFlag}, journal::JournalType, user::WristpadHack, }, regular_tasks::queued_command::QueuedCommandContext, DResult, }; +use ansi_markup::parse_ansi_markup; use async_trait::async_trait; use mockall_double::double; use once_cell::sync::OnceCell; @@ -21,7 +25,7 @@ mod chonkers; mod cok_murl; pub mod computer_museum; pub mod general_hospital; -mod melbs; +pub mod melbs; mod repro_xv; mod special; @@ -77,7 +81,7 @@ pub fn zone_details() -> &'static BTreeMap<&'static str, Zone> { }) } -#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Debug)] +#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Debug, Serialize, Deserialize)] pub struct GridCoords { pub x: i64, pub y: i64, @@ -256,12 +260,13 @@ impl Direction { } } -#[derive(Eq, Ord, Debug, PartialEq, PartialOrd, Clone)] +#[derive(Eq, Ord, Debug, PartialEq, PartialOrd, Clone, Serialize, Deserialize)] pub enum ExitTarget { UseGPS, - Custom(&'static str), + Custom(String), } +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct ExitClimb { // Negative if it is down. pub height: i64, @@ -286,13 +291,44 @@ impl Default for Exit { } } -pub struct SecondaryZoneRecord { - pub zone: &'static str, - pub short: &'static str, - pub grid_coords: GridCoords, - pub caption: Option<&'static str>, +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +#[serde(default)] +pub struct SimpleExit { + pub direction: Direction, + pub target: ExitTarget, + pub exit_climb: Option, } +impl Default for SimpleExit { + fn default() -> Self { + Self { + direction: Direction::NORTH, + target: ExitTarget::UseGPS, + exit_climb: None, + } + } +} + +impl Into for SimpleExit { + fn into(self: SimpleExit) -> Exit { + Exit { + direction: self.direction, + target: self.target, + exit_type: ExitType::Free, + exit_climb: self.exit_climb, + } + } +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct SecondaryZoneRecord { + pub zone: String, + pub short: String, + pub grid_coords: GridCoords, + pub caption: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct RoomStock { pub possession_type: PossessionType, pub list_price: u64, @@ -309,13 +345,15 @@ impl Default for RoomStock { } } +#[derive(Serialize, Deserialize, Clone)] pub enum RentSuiteType { Residential, Commercial, } +#[derive(Serialize, Deserialize, Clone)] pub struct RentInfo { - pub rent_what: &'static str, + pub rent_what: String, pub suite_type: RentSuiteType, pub dynzone: super::dynzone::DynzoneType, pub daily_price: u64, @@ -323,11 +361,12 @@ pub struct RentInfo { } #[allow(unused)] +#[derive(Serialize, Deserialize, Clone)] pub enum MaterialType { Normal, WaterSurface, Underwater, - Soft { damage_modifier: f64 }, + Soft { damage_modifier: u64 }, } #[async_trait] @@ -335,24 +374,16 @@ pub trait RoomEnterTrigger { async fn handle_enter(self: &Self, ctx: &mut QueuedCommandContext, room: &Room) -> UResult<()>; } -pub struct Scavinfo { - pub possession_type: PossessionType, - pub p_present: f64, // probability it is there. - pub difficulty_mean: f64, - pub difficulty_stdev: f64, - pub scavtype: Scavtype, -} - pub struct Room { - pub zone: &'static str, + pub zone: String, // Other zones where it can be seen on the map and accessed. pub secondary_zones: Vec, - pub code: &'static str, - pub name: &'static str, - pub short: &'static str, + pub code: String, + pub name: String, + pub short: String, pub grid_coords: GridCoords, - pub description: &'static str, - pub description_less_explicit: Option<&'static str>, + pub description: String, + pub description_less_explicit: Option, pub exits: Vec, pub should_caption: bool, pub repel_npc: bool, @@ -367,19 +398,19 @@ pub struct Room { pub wristpad_hack_allowed: Option, pub journal: Option, pub enter_trigger: Option<&'static (dyn RoomEnterTrigger + Sync + Send)>, - pub scavtable: Vec, + pub scavtable: ScavtableType, } impl Default for Room { fn default() -> Self { Self { - zone: "default", + zone: "default".to_owned(), secondary_zones: vec![], - code: "default", - name: "default", - short: "DF", + code: "default".to_owned(), + name: "default".to_owned(), + short: "DF".to_owned(), grid_coords: GridCoords { x: 0, y: 0, z: 0 }, - description: "default", + description: "default".to_owned(), description_less_explicit: None, exits: vec![], should_caption: true, @@ -393,7 +424,101 @@ impl Default for Room { wristpad_hack_allowed: None, journal: None, enter_trigger: None, - scavtable: vec![], + scavtable: ScavtableType::Nothing, + } + } +} + +#[derive(Serialize, Deserialize)] +#[serde(default)] +pub struct SimpleRoom { + pub zone: String, + // Other zones where it can be seen on the map and accessed. + pub secondary_zones: Vec, + pub code: String, + pub name: String, + pub short: String, + pub grid_coords: GridCoords, + pub description: String, + pub description_less_explicit: Option, + pub exits: Vec, + pub should_caption: bool, + pub repel_npc: bool, + pub item_flags: Vec, + // Empty means not a shop. + pub stock_list: Vec, + // What can be rented here... + pub rentable_dynzone: Vec, + pub material_type: MaterialType, + pub has_power: bool, + pub door_states: Option>, + pub wristpad_hack_allowed: Option, + pub journal: Option, + pub scavtable: ScavtableType, + pub extra: T, +} + +impl Into for SimpleRoom { + fn into(self: SimpleRoom) -> Room { + Room { + zone: parse_ansi_markup(&self.zone).unwrap(), + secondary_zones: self + .secondary_zones + .into_iter() + .map(|sz| SecondaryZoneRecord { + zone: sz.zone, + short: parse_ansi_markup(&sz.short).unwrap(), + grid_coords: sz.grid_coords, + caption: sz.caption, + }) + .collect(), + code: self.code, + name: parse_ansi_markup(&self.name).unwrap(), + short: parse_ansi_markup(&self.short).unwrap(), + grid_coords: self.grid_coords, + description: parse_ansi_markup(&self.description).unwrap(), + description_less_explicit: self.description_less_explicit, + exits: self.exits.into_iter().map(|e| e.into()).collect(), + should_caption: self.should_caption, + repel_npc: self.repel_npc, + item_flags: self.item_flags, + stock_list: self.stock_list, + rentable_dynzone: self.rentable_dynzone, + material_type: self.material_type, + has_power: self.has_power, + door_states: self.door_states, + wristpad_hack_allowed: self.wristpad_hack_allowed, + journal: self.journal, + enter_trigger: None, + scavtable: self.scavtable, + } + } +} + +impl<'a, T: Default> Default for SimpleRoom { + fn default() -> Self { + Self { + zone: "default".to_owned(), + secondary_zones: vec![], + code: "default".to_owned(), + name: "default".to_owned(), + short: "DF".to_owned(), + grid_coords: GridCoords { x: 0, y: 0, z: 0 }, + description: "default".to_owned(), + description_less_explicit: None, + exits: vec![], + should_caption: true, + repel_npc: false, + item_flags: vec![], + stock_list: vec![], + rentable_dynzone: vec![], + material_type: MaterialType::Normal, + has_power: false, + door_states: None, + wristpad_hack_allowed: None, + journal: None, + scavtable: ScavtableType::Nothing, + extra: Default::default(), } } } @@ -414,7 +539,8 @@ pub fn room_list() -> &'static Vec { static STATIC_ROOM_MAP_BY_CODE: OnceCell> = OnceCell::new(); pub fn room_map_by_code() -> &'static BTreeMap<&'static str, &'static Room> { - STATIC_ROOM_MAP_BY_CODE.get_or_init(|| room_list().iter().map(|r| (r.code, r)).collect()) + STATIC_ROOM_MAP_BY_CODE + .get_or_init(|| room_list().iter().map(|r| (r.code.as_str(), r)).collect()) } static STATIC_ROOM_MAP_BY_ZLOC: OnceCell< @@ -424,11 +550,11 @@ pub fn room_map_by_zloc() -> &'static BTreeMap<(&'static str, &'static GridCoord STATIC_ROOM_MAP_BY_ZLOC.get_or_init(|| { room_list() .iter() - .map(|r| ((r.zone, &r.grid_coords), r)) + .map(|r| ((r.zone.as_str(), &r.grid_coords), r)) .chain(room_list().iter().flat_map(|r| { r.secondary_zones .iter() - .map(|sz| ((sz.zone, &sz.grid_coords), r)) + .map(|sz| ((sz.zone.as_str(), &sz.grid_coords), r)) .collect::>() })) .collect() @@ -437,13 +563,13 @@ pub fn room_map_by_zloc() -> &'static BTreeMap<(&'static str, &'static GridCoord pub fn room_static_items() -> Box> { Box::new(room_list().iter().map(|r| StaticItem { - item_code: r.code, + item_code: &r.code, initial_item: Box::new(|| Item { item_code: r.code.to_owned(), item_type: "room".to_owned(), display: r.name.to_owned(), details: Some(r.description.to_owned()), - details_less_explicit: r.description_less_explicit.map(|d| d.to_owned()), + details_less_explicit: r.description_less_explicit.as_ref().map(|d| d.to_owned()), location: format!("zone/{}", r.zone), is_static: true, flags: r.item_flags.clone(), @@ -456,7 +582,7 @@ pub fn room_static_items() -> Box> { pub fn resolve_exit(room: &Room, exit: &Exit) -> Option<&'static Room> { match exit.target { - ExitTarget::Custom(t) => t.split_once("/").and_then(|(t, c)| { + ExitTarget::Custom(ref t) => t.split_once("/").and_then(|(t, c)| { if t != "room" { None } else { @@ -464,7 +590,7 @@ pub fn resolve_exit(room: &Room, exit: &Exit) -> Option<&'static Room> { } }), ExitTarget::UseGPS => room_map_by_zloc() - .get(&(room.zone, &room.grid_coords.apply(&exit.direction))) + .get(&(&room.zone, &room.grid_coords.apply(&exit.direction))) .map(|r| *r), } } @@ -552,13 +678,14 @@ pub async fn check_for_enter_action(ctx: &mut QueuedCommandContext<'_>) -> UResu #[cfg(test)] mod test { + use super::super::scavtable::scavtable_map; use super::*; use itertools::Itertools; #[test] fn room_zones_should_exist() { for room in room_list() { - zone_details().get(room.zone).expect(&format!( + zone_details().get(room.zone.as_str()).expect(&format!( "zone {} for room {} should exist", room.zone, room.code )); @@ -570,7 +697,10 @@ mod test { assert_eq!( room_list() .iter() - .map(|r| (r.code, ansi::strip_special_characters(r.short))) + .map(|r| ( + r.code.as_str(), + ansi::strip_special_characters(r.short.as_str()) + )) .filter(|(_c, s)| s.len() != 2) .collect::>(), vec![] @@ -595,10 +725,10 @@ mod test { .sort_unstable_by(|a, b| a.grid_coords.cmp(&b.grid_coords).then(a.zone.cmp(&b.zone))); let dups: Vec> = roomlist .iter() - .group_by(|x| (&x.grid_coords, x.zone)) + .group_by(|x| (&x.grid_coords, x.zone.as_str())) .into_iter() .map(|((coord, zone), rg)| { - rg.map(|r| (r.name, coord, zone)) + rg.map(|r| (r.name.as_str(), coord, zone)) .collect::>() }) .filter(|x| x.len() > 1) @@ -633,4 +763,16 @@ mod test { ); } } + + #[test] + fn rooms_reference_valid_scavtables() { + let bad_scav_rooms: Vec = room_list() + .iter() + .filter_map(|r| match scavtable_map().get(&r.scavtable) { + Some(_) => None, + None => Some(r.code.clone()), + }) + .collect::>(); + assert_eq!(bad_scav_rooms, Vec::::new()); + } } diff --git a/blastmud_game/src/static_content/room/chonkers.rs b/blastmud_game/src/static_content/room/chonkers.rs index 6f3d3e86..624b3762 100644 --- a/blastmud_game/src/static_content/room/chonkers.rs +++ b/blastmud_game/src/static_content/room/chonkers.rs @@ -1,86 +1,10 @@ -use super::{ - Direction, Exit, ExitClimb, ExitTarget, GridCoords, MaterialType, Room, SecondaryZoneRecord, -}; -use ansi::ansi; +use super::{Room, SimpleRoom}; +use serde_yaml::from_str as from_yaml_str; + pub fn room_list() -> Vec { - vec!( - Room { - zone: "chonkers", - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "melbs", - short: ansi!("CG"), - grid_coords: GridCoords { x: 8, y: 2, z: 0 }, - caption: Some("Chonker's Gym") - } - ), - code: "chonkers_strength_hall", - name: "Strength Hall", - short: ansi!("SH"), - description: ansi!("The first of several adjoined rooms making up Chonker's Gym, this space seems to be focused on strength training, and it exudes energy, filled with the invigorating scent of sweat and determination. The proprietor, Chonkers, stands at the center, a fitness enthusiast with a chiseled physique. Mirrors line the walls, reflecting the efforts of gym-goers as they push their limits. The atmosphere is charged with determination and camaraderie, accompanied by the rhythmic beat of energetic music. To the north, you notice a climbing wall towering over another room"), - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - target: ExitTarget::Custom("room/melbs_bourkest_160"), - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - ), - should_caption: true, - ..Default::default() - }, - Room { - zone: "chonkers", - code: "chonkers_endurance_hall", - name: "Endurance Hall", - short: ansi!("EH"), - description: ansi!("A room that appears to be dedicated to endurance training. This space exudes a sense of purpose, with its focus on building stamina and resilience. At the northern edge of the room stands a towering climbing wall, inviting enthusiasts to conquer its challenging heights. The walls are adorned with motivational posters, inspiring climbers to push beyond their limits and embrace the thrill of conquering obstacles. Surrounding the climbing wall, a variety of endurance-focused machines beckon, ready to test and strengthen the resolve of those who dare to challenge themselves. The air hums with the sounds of exertion and determination, creating an atmosphere charged with the energy of individuals striving to improve their endurance and surpass their previous achievements"), - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::UP, - exit_climb: Some(ExitClimb { - height: 5, - difficulty: 11 - }), - ..Default::default() - }, - ), - material_type: MaterialType::Soft { damage_modifier: 0.5 }, - should_caption: true, - ..Default::default() - }, - Room { - zone: "chonkers", - code: "chonkers_climbing_top", - name: "Top of the Climbing Wall", - short: ansi!("CW"), - description: ansi!("Congratulations, you made it to the top! It is quite snug up here in a little alcove at the top of the wall, but the view from the top of the wall is amazing; you have a 180 degree view of buff men and women pumping iron and keeping themselves fit"), - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: -1, z: 1 }, - exits: vec!( - Exit { - direction: Direction::DOWN, - exit_climb: Some(ExitClimb { - height: -5, - difficulty: 11 - }), - ..Default::default() - }, - ), - material_type: MaterialType::Soft { damage_modifier: 0.5 }, - should_caption: true, - ..Default::default() - }, - ) + from_yaml_str::>>(include_str!("chonkers.yaml")) + .unwrap() + .into_iter() + .map(|r| r.into()) + .collect() } diff --git a/blastmud_game/src/static_content/room/chonkers.yaml b/blastmud_game/src/static_content/room/chonkers.yaml new file mode 100644 index 00000000..939be2ae --- /dev/null +++ b/blastmud_game/src/static_content/room/chonkers.yaml @@ -0,0 +1,52 @@ +- zone: chonkers + secondary_zones: + - zone: melbs + short: CG + grid_coords: + x: 8 + y: 2 + z: 0 + caption: Chonker's Gym + code: chonkers_strength_hall + name: Strength Hall + short: SH + grid_coords: + x: 0 + y: 0 + z: 0 + description: The first of several adjoined rooms making up Chonker's Gym, this space seems to be focused on strength training, and it exudes energy, filled with the invigorating scent of sweat and determination. The proprietor, Chonkers, stands at the center, a fitness enthusiast with a chiseled physique. Mirrors line the walls, reflecting the efforts of gym-goers as they push their limits. The atmosphere is charged with determination and camaraderie, accompanied by the rhythmic beat of energetic music. To the north, you notice a climbing wall towering over another room + exits: + - direction: south + target: !Custom room/melbs_bourkest_160 + - direction: north +- zone: chonkers + code: chonkers_endurance_hall + name: Endurance Hall + short: EH + grid_coords: + x: 0 + y: -1 + z: 0 + description: A room that appears to be dedicated to endurance training. This space exudes a sense of purpose, with its focus on building stamina and resilience. At the northern edge of the room stands a towering climbing wall, inviting enthusiasts to conquer its challenging heights. The walls are adorned with motivational posters, inspiring climbers to push beyond their limits and embrace the thrill of conquering obstacles. Surrounding the climbing wall, a variety of endurance-focused machines beckon, ready to test and strengthen the resolve of those who dare to challenge themselves. The air hums with the sounds of exertion and determination, creating an atmosphere charged with the energy of individuals striving to improve their endurance and surpass their previous achievements + exits: + - direction: south + - direction: up + exit_climb: + height: 5 + difficulty: 11 + material_type: !Soft + damage_modifier: 50 +- zone: chonkers + code: chonkers_climbing_top + name: Top of the Climbing Wall + short: CW + grid_coords: + x: 0 + y: -1 + z: 1 + description: Congratulations, you made it to the top! It is quite snug up here in a little alcove at the top of the wall, but the view from the top of the wall is amazing; you have a 180 degree view of buff men and women pumping iron and keeping themselves fit + exits: + - direction: down + exit_climb: + height: -5 + difficulty: 11 diff --git a/blastmud_game/src/static_content/room/cok_murl.rs b/blastmud_game/src/static_content/room/cok_murl.rs index 6b14b0f8..a151f130 100644 --- a/blastmud_game/src/static_content/room/cok_murl.rs +++ b/blastmud_game/src/static_content/room/cok_murl.rs @@ -1,120 +1,10 @@ -use super::{ - Direction, Exit, ExitTarget, GridCoords, RentInfo, RentSuiteType, Room, SecondaryZoneRecord, -}; -use crate::static_content::dynzone::DynzoneType; -use ansi::ansi; -pub fn room_list() -> Vec { - vec!( - // Residential - Room { - zone: "cok_murl", - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "melbs", - short: ansi!("CK"), - grid_coords: GridCoords { x: 2, y: 5, z: 0 }, - caption: Some("Condos on King") - } - ), - code: "cok_lobby", - name: "Residential Lobby", - short: ansi!("RE"), - description: ansi!("A sizeable lobby that looks like it is serves the dual purpose as the entrance to the residential condos and as a grand entrance to the linked Murlison Suites commercial building. It is tiled with sparkling clean bluestone tiles. Light green tinted tempered glass panels line the walls. You notice a set of sleek lifts, supervised by a friendly robot, and a passage to the attached Murlison commercial building to the east.\n\n\"Welcome to Condos on King!\", intones the bot, \"say in name\" with the name of the person you are here to see, and I'll guide you to their apartment. Or try rent studio to rent a studio apartment for $20 a day ($40 setup fee), and vacate studio to give notice to vacate"), - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - target: ExitTarget::Custom("room/melbs_kingst_80"), - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: true, - rentable_dynzone: vec!(RentInfo { - rent_what: "studio", - suite_type: RentSuiteType::Residential, - dynzone: DynzoneType::CokMurlApartment, - daily_price: 20, - setup_fee: 40, - }), - ..Default::default() - }, +use super::{Room, SimpleRoom}; +use serde_yaml::from_str as from_yaml_str; - // Commercial - Room { - zone: "cok_murl", - code: "murl_lobby", - name: "Murlison Suites Commercial Lobby", - short: ansi!("ML"), - description: ansi!( - "A sleek reception that could have been the bridge of a 2000s era sci-fi spaceship. Linished metal plates are lit up by ambient blue LEDs, while stone tiles cover the floor. You see a white android, complete with elegant rounded corners and glowing blue eyes.\n\n\ - \"Welcome to Murlison Suites - the best a business can rent\", purs the bot pleasantly. \"Just say in corpname\" and I'll guide you to the suite for that corp before you \ - can blink! Or if you hold a corp and would like to rent the best suite money can \ - buy for it, just say rent deluxe for corpname, and I'll set you up\"" - ), - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 0, z: 0 }, - rentable_dynzone: vec!(RentInfo { - rent_what: "deluxe", - suite_type: RentSuiteType::Commercial, - dynzone: DynzoneType::MurlDeluxeCorporate, - daily_price: 200, - setup_fee: 400, - }), - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - } - ), - should_caption: true, - ..Default::default() - }, - Room { - zone: "cok_murl", - code: "murl_gf_lift", - name: "Commercial Lifts", - short: ansi!("LI"), - description: "A set of lifts leading up to various floors", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: true, - ..Default::default() - }, - Room { - zone: "cok_murl", - code: "murl_gf_stair", - name: "Commercial Stairs", - short: ansi!(">>"), - description: "A set of stairs leading up to various floors", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - ), - should_caption: true, - ..Default::default() - }, - ) +pub fn room_list() -> Vec { + from_yaml_str::>>(include_str!("cok_murl.yaml")) + .unwrap() + .into_iter() + .map(|r| r.into()) + .collect() } diff --git a/blastmud_game/src/static_content/room/cok_murl.yaml b/blastmud_game/src/static_content/room/cok_murl.yaml new file mode 100644 index 00000000..d59b47f4 --- /dev/null +++ b/blastmud_game/src/static_content/room/cok_murl.yaml @@ -0,0 +1,45 @@ +- zone: cok_murl + secondary_zones: + - zone: melbs + short: "CK" + grid_coords: + x: 2 + y: 5 + z: 0 + caption: Condos on King + code: cok_lobby + name: Residential Lobby + short: "RE" + grid_coords: + x: 0 + y: 0 + z: 0 + description: "A sizeable lobby that looks like it is serves the dual purpose as the entrance to the residential condos and as a grand entrance to the linked Murlison Suites commercial building. It is tiled with sparkling clean bluestone tiles. Light green tinted tempered glass panels line the walls. You notice a set of sleek lifts, supervised by a friendly robot, and a passage to the attached Murlison commercial building to the east.\n\n\"Welcome to Condos on King!\", intones the bot, \"say in name\" with the name of the person you are here to see, and I'll guide you to their apartment. Or try rent studio to rent a studio apartment for $20 a day ($40 setup fee), and vacate studio to give notice to vacate" + exits: + - direction: west + target: !Custom room/melbs_kingst_80 + - direction: east + rentable_dynzone: + - rent_what: studio + suite_type: Residential + dynzone: CokMurlApartment + daily_price: 20 + setup_fee: 40 +- zone: cok_murl + code: murl_lobby + name: Murlison Suites Commercial Lobby + short: "ML" + grid_coords: + x: 1 + y: 0 + z: 0 + description: "A sleek reception that could have been the bridge of a 2000s era sci-fi spaceship. Linished metal plates are lit up by ambient blue LEDs, while stone tiles cover the floor. You see a white android, complete with elegant rounded corners and glowing blue eyes.\n\n\"Welcome to Murlison Suites - the best a business can rent\", purs the bot pleasantly. \"Just say in corpname\" and I'll guide you to the suite for that corp before you can blink! Or if you hold a corp and would like to rent the best suite money can buy for it, just say rent deluxe for corpname, and I'll set you up\"" + exits: + - direction: west + - direction: south + rentable_dynzone: + - rent_what: deluxe + suite_type: Commercial + dynzone: MurlDeluxeCorporate + daily_price: 200 + setup_fee: 400 diff --git a/blastmud_game/src/static_content/room/computer_museum.rs b/blastmud_game/src/static_content/room/computer_museum.rs index faa2a7cd..c9e15760 100644 --- a/blastmud_game/src/static_content/room/computer_museum.rs +++ b/blastmud_game/src/static_content/room/computer_museum.rs @@ -1,208 +1,31 @@ use crate::{ - models::{ - item::{DoorState, LocationActionType}, - journal::JournalType, - user::WristpadHack, - }, + models::item::LocationActionType, static_content::{ fixed_item::FixedItem, possession_type::{possession_data, PossessionData, PossessionType}, }, }; -use super::{Direction, Exit, ExitTarget, GridCoords, Room, SecondaryZoneRecord}; -use ansi::ansi; +use super::{Direction, Room, SimpleRoom}; +use serde_yaml::from_str as from_yaml_str; + pub fn room_list() -> Vec { - vec!( - Room { - zone: "computer_museum", - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "melbs", - short: ansi!("CM"), - grid_coords: GridCoords { x: 2, y: -3, z: 0 }, - caption: Some("Computer Museum") - } - ), - code: "computer_museum_lobby", - name: "Lobby", - short: ansi!("="), - description: ansi!("A large room, full of glass cases containing computer equipment from various eras, from ancient dusty looking machines, to miniturised modern equipment. Some of the computer equipment is even powered up, showing scrolling text and various demonstration images. A dusty staircase, above which is hung a faded sign saying 'Danger, robots in use, do not enter', leads down"), - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - target: ExitTarget::Custom("room/melbs_kingst_20"), - ..Default::default() - }, - Exit { - direction: Direction::DOWN, - ..Default::default() - }, - ), - should_caption: true, - ..Default::default() - }, - Room { - zone: "computer_museum", - secondary_zones: vec![], - code: "computer_museum_club_stairwell", - name: "Stairwell", - short: ansi!(">="), - description: ansi!("This appears to be the start of a long corridor. Floor, walls, and ceiling are all made of concrete. A plain concrete staircase leads up. Painted on the floor to the east is a red line adorned with the text DANGER ROBOTS DO NOT CROSS. The corridor echoes with screams of torment and the sound of metal cutting into flesh. You can just make out a door at the east end of the corridor"), - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 0, z: -1 }, - exits: vec!( - Exit { - direction: Direction::UP, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - repel_npc: true, - should_caption: true, - ..Default::default() - }, - Room { - zone: "computer_museum", - secondary_zones: vec![], - code: "computer_museum_hw_1", - name: "Corridor Segment 1", - short: ansi!("=="), - description: ansi!("This appears to be part of a long corridor. Floor, walls, and ceiling are all made of concrete. Painted on the ground to the west is the text DANGER ROBOTS DO NOT CROSS. The corridor continues to the east. To the east, you see some kind of marking on the concrete wall. The corridor echoes with screams of torment and the sound of metal cutting into flesh. You can make out a door at the east end of the corridor, with some kind of electronic screen on it. A plaque on the wall tells you this is Corridor Segment 1"), - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 0, z: -1 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - ..Default::default() - }, - Room { - zone: "computer_museum", - secondary_zones: vec![], - code: "computer_museum_hw_2", - name: "Corridor Segment 2", - short: ansi!("=="), - description: ansi!("This appears to be part of a long corridor. Floor, walls, and ceiling are all made of concrete. The corridor continues to the east and west. The corridor echoes with screams of torment and the sound of metal cutting into flesh. A stain, apparently done in blood, says in scrawled, panicked looking writing: Beware Robots! Discs to third tower. You can see a door at the east end of the corridor, with some kind of electronic screen on it, showing some kind of towers. A plaque on the wall tells you this is Corridor Segment 2"), - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 0, z: -1 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - ..Default::default() - }, - Room { - zone: "computer_museum", - secondary_zones: vec![], - code: "computer_museum_hw_3", - name: "Corridor Segment 3", - short: ansi!("=="), - description: ansi!("This appears to be part of a long corridor. Floor, walls, and ceiling are all made of concrete. Painted on the ground to the west is the text DANGER ROBOTS DO NOT CROSS. The corridor continues to the east and west. To the west, you see some kind of marking on the concrete wall. The corridor echoes with screams of torment and the sound of metal cutting into flesh. You can make out a door at the east end of the corridor, with some kind of electronic screen on it, showing some kind of towers. A plaque on the wall tells you this is Corridor Segment 3"), - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 0, z: -1 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - ..Default::default() - }, - Room { - zone: "computer_museum", - secondary_zones: vec![], - code: "computer_museum_club_door", - name: "Doorwell", - short: ansi!("/\\"), - description: ansi!("This appears to be a security zone protecting access to a door to the north. A long corridor stretches to the west. The corridor echoes with screams of torment and the sound of metal cutting into flesh.\n\ - Mounted on the door is a large screen, labelled as \"Doorbot\", showing \ - primative ASCII art of some towers, \ - with with some kind of electronic screen on it, showing some kind of towers with \ - coloured discs stacked on them.\n\ - [Hint: try -doorbot move from 1 to 2 to ask Doorbot \ - to move the top disc from tower 1 to tower 2]\n\ - The discs are arranged as follows:\n"), - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: 0, z: -1 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: true, - ..Default::default() - }, - Room { - zone: "computer_museum", - secondary_zones: vec![], - code: "computer_museum_hackers_club", - name: "Hackers' Club", - short: ansi!("HC"), - description: ansi!("A room full of beeping and whirring equipment. One shiny stainless steel piece of equipment really catches your eye. It has a large plaque on it saying: Wristpad hacking unit - intelligence upgrade program. [You realise you can hack your wristpad here, if you have a free wristpad hack slot, to make yourself a superdork; it will increase your brains by 3, but decrease your cool by 1. To do it, type hack superdork]"), - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: -1, z: -1 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - door_states: Some(vec![ - ( - Direction::SOUTH, - DoorState { - open: false, - description: "a very heavy-duty looking solid steel door, with black and yellow warning stripes painted on the surface, and an LCD-style screen afixed to the middle a bit over a metre up".to_owned() - } - ) - ].into_iter().collect()), - should_caption: true, - journal: Some(JournalType::JoinedHackerClub), - wristpad_hack_allowed: Some(WristpadHack::Superdork), - ..Default::default() - }, - ) + from_yaml_str::>>(include_str!("computer_museum.yaml")) + .unwrap() + .into_iter() + .map(|r| r.into()) + .collect() } pub fn fixed_items() -> Vec { vec![FixedItem { - code: "computer_museum_club_door_lock", - name: ansi!("basic keyed lock"), - description: ansi!("A basic lock that looks like it needs a key to open"), + code: "computer_museum_club_door_lock".to_owned(), + name: "basic keyed lock".to_owned(), + description: "A basic lock that looks like it needs a key to open".to_owned(), description_less_explicit: None, - location: "room/computer_museum_hackers_club", + location: "room/computer_museum_hackers_club".to_owned(), proper_noun: false, - aliases: vec!["lock"], + aliases: vec!["lock".to_owned()], action_type: LocationActionType::InstalledOnDoorAsLock(Direction::SOUTH), ..Default::default() }] diff --git a/blastmud_game/src/static_content/room/computer_museum.yaml b/blastmud_game/src/static_content/room/computer_museum.yaml new file mode 100644 index 00000000..bedcd9b0 --- /dev/null +++ b/blastmud_game/src/static_content/room/computer_museum.yaml @@ -0,0 +1,107 @@ +- zone: computer_museum + secondary_zones: + - zone: melbs + short: CM + grid_coords: + x: 2 + y: -3 + z: 0 + caption: Computer Museum + code: computer_museum_lobby + name: Lobby + short: = + grid_coords: + x: 0 + y: 0 + z: 0 + description: A large room, full of glass cases containing computer equipment from various eras, from ancient dusty looking machines, to miniturised modern equipment. Some of the computer equipment is even powered up, showing scrolling text and various demonstration images. A dusty staircase, above which is hung a faded sign saying 'Danger, robots in use, do not enter', leads down + exits: + - direction: west + target: !Custom room/melbs_kingst_20 + - direction: down + extra: null +- zone: computer_museum + code: computer_museum_club_stairwell + name: Stairwell + short: >= + grid_coords: + x: 0 + y: 0 + z: -1 + description: This appears to be the start of a long corridor. Floor, walls, and ceiling are all made of concrete. A plain concrete staircase leads up. Painted on the floor to the east is a red line adorned with the text DANGER ROBOTS DO NOT CROSS. The corridor echoes with screams of torment and the sound of metal cutting into flesh. You can just make out a door at the east end of the corridor + exits: + - direction: up + - direction: east + repel_npc: true +- zone: computer_museum + code: computer_museum_hw_1 + name: Corridor Segment 1 + short: == + grid_coords: + x: 1 + y: 0 + z: -1 + description: This appears to be part of a long corridor. Floor, walls, and ceiling are all made of concrete. Painted on the ground to the west is the text DANGER ROBOTS DO NOT CROSS. The corridor continues to the east. To the east, you see some kind of marking on the concrete wall. The corridor echoes with screams of torment and the sound of metal cutting into flesh. You can make out a door at the east end of the corridor, with some kind of electronic screen on it. A plaque on the wall tells you this is Corridor Segment 1 + exits: + - direction: west + - direction: east + should_caption: false +- zone: computer_museum + code: computer_museum_hw_2 + name: Corridor Segment 2 + short: == + grid_coords: + x: 2 + y: 0 + z: -1 + description: 'This appears to be part of a long corridor. Floor, walls, and ceiling are all made of concrete. The corridor continues to the east and west. The corridor echoes with screams of torment and the sound of metal cutting into flesh. A stain, apparently done in blood, says in scrawled, panicked looking writing: Beware Robots! Discs to third tower. You can see a door at the east end of the corridor, with some kind of electronic screen on it, showing some kind of towers. A plaque on the wall tells you this is Corridor Segment 2' + exits: + - direction: west + - direction: east + should_caption: false +- zone: computer_museum + code: computer_museum_hw_3 + name: Corridor Segment 3 + short: == + grid_coords: + x: 3 + y: 0 + z: -1 + description: This appears to be part of a long corridor. Floor, walls, and ceiling are all made of concrete. Painted on the ground to the west is the text DANGER ROBOTS DO NOT CROSS. The corridor continues to the east and west. To the west, you see some kind of marking on the concrete wall. The corridor echoes with screams of torment and the sound of metal cutting into flesh. You can make out a door at the east end of the corridor, with some kind of electronic screen on it, showing some kind of towers. A plaque on the wall tells you this is Corridor Segment 3 + exits: + - direction: west + - direction: east + should_caption: false +- zone: computer_museum + code: computer_museum_club_door + name: Doorwell + short: /\ + grid_coords: + x: 4 + y: 0 + z: -1 + description: | + This appears to be a security zone protecting access to a door to the north. A long corridor stretches to the west. The corridor echoes with screams of torment and the sound of metal cutting into flesh. + Mounted on the door is a large screen, labelled as "Doorbot".to_owned(), showing primative ASCII art of some towers, with with some kind of electronic screen on it, showing some kind of towers with coloured discs stacked on them. + [Hint: try -doorbot move from 1 to 2 to ask Doorbot to move the top disc from tower 1 to tower 2] + The discs are arranged as follows: + exits: + - direction: north + - direction: west +- zone: computer_museum + code: computer_museum_hackers_club + name: Hackers' Club + short: HC + grid_coords: + x: 4 + y: -1 + z: -1 + description: 'A room full of beeping and whirring equipment. One shiny stainless steel piece of equipment really catches your eye. It has a large plaque on it saying: Wristpad hacking unit - intelligence upgrade program. [You realise you can hack your wristpad here, if you have a free wristpad hack slot, to make yourself a superdork; it will increase your brains by 3, but decrease your cool by 1. To do it, type hack superdork]' + exits: + - direction: south + door_states: + south: + open: false + description: a very heavy-duty looking solid steel door, with black and yellow warning stripes painted on the surface, and an LCD-style screen afixed to the middle a bit over a metre up + wristpad_hack_allowed: Superdork + journal: JoinedHackerClub diff --git a/blastmud_game/src/static_content/room/general_hospital.rs b/blastmud_game/src/static_content/room/general_hospital.rs index 1c551cdf..93e2c95d 100644 --- a/blastmud_game/src/static_content/room/general_hospital.rs +++ b/blastmud_game/src/static_content/room/general_hospital.rs @@ -178,31 +178,31 @@ pub static SEE_PATIENT_TASK: &'static (dyn TaskHandler + Sync + Send) = &SeePati pub fn room_list() -> Vec { vec!( Room { - zone: "general_hospital", + zone: "general_hospital".to_owned(), secondary_zones: vec!( SecondaryZoneRecord { - zone: "melbs", - short: ansi!("++"), + zone: "melbs".to_owned(), + short: ansi!("++").to_owned(), grid_coords: GridCoords { x: 2, y: 10, z: 0 }, - caption: Some("General Hospital") + caption: Some("General Hospital".to_owned()) } ), - code: "general_hospital_waiting_room", - name: "Emergency Waiting Room", - short: ansi!("WR"), + code: "general_hospital_waiting_room".to_owned(), + name: "Emergency Waiting Room".to_owned(), + short: ansi!("WR").to_owned(), description: ansi!("A room apparently designed for patients to wait to seen by doctors. \ Heavy-duty grey linoleum lines the floors, and even the tops of the walls, \ while stainless steel metal strips cover the bottom of the walls. A line on \ floor reserves an area of the floor for sick patients to be rushed past on \ stretchers. It smells strongly of phenolic cleaners. At the front of the room \ a triage nurse assures everyone coming in they will be assessed by doctors \ - a minute after arriving. Doctors pace the floor treating patients"), + a minute after arriving. Doctors pace the floor treating patients").to_owned(), description_less_explicit: None, grid_coords: GridCoords { x: 0, y: 0, z: 0 }, exits: vec!( Exit { direction: Direction::WEST, - target: ExitTarget::Custom("room/melbs_kingst_120"), + target: ExitTarget::Custom("room/melbs_kingst_120".to_owned()), ..Default::default() }, ), diff --git a/blastmud_game/src/static_content/room/melbs.rs b/blastmud_game/src/static_content/room/melbs.rs index 2c1d0c0a..dde5cec7 100644 --- a/blastmud_game/src/static_content/room/melbs.rs +++ b/blastmud_game/src/static_content/room/melbs.rs @@ -1,14 +1,11 @@ -use super::{ - Direction, Exit, ExitClimb, ExitTarget, GridCoords, Room, RoomStock, Scavinfo, - SecondaryZoneRecord, -}; +use super::{Room, SimpleRoom}; use crate::{ - models::item::{ItemFlag, Scavtype}, - static_content::possession_type::PossessionType, + models::item::Scavtype, + static_content::{possession_type::PossessionType, scavtable::Scavinfo}, }; -use ansi::ansi; +use serde_yaml::from_str as from_yaml_str; -fn street_scavtable() -> Vec { +pub fn street_scavtable() -> Vec { vec![Scavinfo { possession_type: PossessionType::RustySpike, p_present: 1.0, @@ -19,3951 +16,9 @@ fn street_scavtable() -> Vec { } pub fn room_list() -> Vec { - vec!( - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_latrobest", - name: "King Street & Latrobe St", - short: ansi!("##"), - description: "A wide road (5 lanes each way) intersects a narrower 3 lane road. Both have been rather poorly maintained. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_10", - name: "King Street - 10 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: -4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - scavtable: street_scavtable(), - should_caption: false, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "computer_museum", - short: ansi!("EX"), - grid_coords: GridCoords { x: -1, y: 0, z: 0 }, - caption: Some("Melbs"), - } - ), - code: "melbs_kingst_20", - name: "King Street - 20 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: -3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - target: ExitTarget::Custom("room/computer_museum_lobby"), - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_30", - name: "King Street - 30 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: -2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_jills_diner", - name: "Jill's Diner", - short: ansi!("JD"), - description: "A dated looking eatery that looks like it has existed long before the collapse. Inside the diner is speckled white linoleum floors that run up to the walls. The smell of bacon grease pervades the air, reminding you of the purpose of this venue with every breath you take. Tables of various sizes are set out for diners to sit at, and at the back is a kitchen. The kitchen whirs with stainless steel exhaust pans, as cooks appear to do nothing but frying. Separating the kitchen from the dining area, and running the width of the restaurant, runs a counter. Hanging signs convey a menu in hand-painted black on white. A middle-aged woman sits behind the counter, looking eager to take your order.", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: -2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - stock_list: vec![ - RoomStock { - possession_type: PossessionType::GreasyBurger, - list_price: 5, - poverty_discount: true, - ..Default::default() - } - ], - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_lonsdalest", - name: "King Street & Lonsdale St", - short: ansi!("##"), - description: "A wide road (5 lanes each way) intersects a narrower 2 lane each way road. Both have been rather poorly maintained. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_40", - name: ansi!("King Street - 40 block"), - short: ansi!("||"), - description: ansi!( - "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side"), - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_homelessshelter", - name: ansi!("Homeless Shelter"), - short: ansi!("HS"), - description: ansi!( - "A spartan room with row after row of plain beds. A thick mist from a fog machine means you can't see or hear much going on here, and no one can attack anyone. It looks like a safe place to log off if you have no better choice"), - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: true, - item_flags: vec!(ItemFlag::NoSay, ItemFlag::NoSeeContents), - repel_npc: true, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "repro_xv", - short: ansi!("EX"), - grid_coords: GridCoords { x: 1, y: 0, z: 0 }, - caption: Some("Melbs"), - } - ), - code: "melbs_kingst_50", - name: ansi!("King Street - 50 block"), - short: ansi!("||"), - description: ansi!( - "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side"), - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::EAST, - target: ExitTarget::Custom("room/repro_xv_lobby"), - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_60", - name: "King Street - 60 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_bourkest", - name: "King Street & Bourke St", - short: ansi!("##"), - description: "A wide road (5 lanes each way) intersects a slightly narrower 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_70", - name: "King Street - 70 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "cok_murl", - short: ansi!("||"), - grid_coords: GridCoords { x: -1, y: 0, z: 0 }, - caption: Some("King Street") - } - ), - code: "melbs_kingst_80", - name: "King Street - 80 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - target: ExitTarget::Custom("room/cok_lobby"), - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_90", - name: "King Street - 90 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 6, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_collinsst", - name: "King Street & Collins St", - short: ansi!("##"), - description: "A wide road (5 lanes each way) intersects another wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_100", - name: "King Street - 100 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_roboporter_rentals", - name: "Roboporter Rentals", - short: ansi!("RP"), - description: ansi!("A spacious room with metal walls and a faint smell of oil. The room is filled with rows of charging stations and maintenance bays for massive robots designed to carry heavy things. At the centre of the room stands a counter where you can rent Roboporters. A large sign overhead reads 'Roboporter Rentals - Your Heavy Lifting Solution!'. [You can use the hire roboporter command, to hire a Roboporter (if any are available) for $100 / 10 minute block]"), - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - stock_list: vec!(), - should_caption: true, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_110", - name: "King Street - 110 block", - short: ansi!("##"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 9, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kings_110_laneway", - name: "110 Kings Laneway", - short: ansi!("=="), - description: "A narrow grotty and dingy laneway between concrete walls, both covered with layer upon layer of graffiti. The concrete path has long cracks on its surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 9, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec![], - code: "melbs_rustic_furnishings", - name: "Rustic Furnishings", - short: ansi!("RF"), - description: "The Rustic Furnishings unveils a captivating sight as you enter. Bathed in soft, natural light that filters through large windows, the furniture store reveals a world of comfort and nostalgia.\n\nA warm and inviting atmosphere surrounds you as you explore the meticulously arranged space. Rich, reclaimed hardwood floors stretch out beneath your feet, bearing the echoes of countless stories from the past. Worn yet sturdy, the wooden furniture exudes an enduring charm that captivates the eye, while the kitchen and bathroom sections of the store harbour more modern furniture.\n\nA seasoned storekeeper stands ready to assist shoppers", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 9, z: 0 }, - exits: vec![ - Exit { - direction: Direction::WEST, - ..Default::default() - } - ], - stock_list: vec![ - RoomStock { - possession_type: PossessionType::KitchenStove, - list_price: 1000, - ..Default::default() - } - ], - should_caption: true, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec![ - SecondaryZoneRecord { - zone: "general_hospital", - short: ansi!("EX"), - grid_coords: GridCoords { x: -1, y: 0, z: 0 }, - caption: Some("Melbs"), - } - ], - code: "melbs_kingst_120", - name: "King Street - 120 block", - short: ansi!("||"), - description: "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 10, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - target: ExitTarget::Custom("room/general_hospital_waiting_room"), - ..Default::default() - }, - ), - should_caption: false, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_kingst_flinderst", - name: "King Street & Flinders St", - short: ansi!("##"), - description: "A wide road (5 lanes each way) intersects a wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_210", - name: "Flinders St - 210 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_200", - name: "Flinders St - 200 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_190", - name: "Flinders St - 190 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_flindersst", - name: "Williams St & Flinders St", - short: ansi!("##"), - description: "An intersection of a steep asphalt road with a wide road with rusted tram tracks in the middle. Potholes dot the road surfaces", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_180", - name: "Flinders St - 180 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_170", - name: "Flinders St - 170 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 7, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_160", - name: "Flinders St - 160 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 8, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_flindersst", - name: "Queen St & Flinders St", - short: ansi!("##"), - description: "A wide road with rusted tram tracks in the middle intersects another wide road. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_150", - name: "Flinders St - 150 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 10, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_140", - name: "Flinders St - 140 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 11, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_130", - name: "Flinders St - 130 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 12, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_flindersst", - name: "Elizabeth St & Flinders St", - short: ansi!("##"), - description: "A wide road with rusted tram tracks in the middle intersects a wide road stained from years of neglect. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_120", - name: "Flinders St - 120 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 14, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_110", - name: "Flinders St - 110 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 15, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_flindersst_100", - name: "Flinders St - 100 block", - short: ansi!("=="), - description: "A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 16, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_flindersst", - name: "Swanston St & Flinders St", - short: ansi!("##"), - description: "The intersection of two wide roads, with rusted tram tracks and infrastructure in the middle. Crumbling bollards line all corners of the intersection, and potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 11, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_latrobest", - name: "Swanston Street & Latrobe St", - short: ansi!("##"), - description: "A dilapidated major tram thoroughfare intersects a narrower 3 lane road. Both have been rather poorly maintained. Potholes dot the ashphalt road", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swansonst_10", - name: "Swanston Street - 10 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: -4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_20", - name: "Swanston Street - 20 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: -3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_30", - name: "Swanston Street - 30 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: -2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_lonsdalest", - name: "Swanston Street & Lonsdale St", - short: ansi!("##"), - description: "A dilapidated major tram thoroughfare intersects a narrower 2 lane each way road. Both have been rather poorly maintained. Potholes dot the ashphalt and weeds poke out from cracks in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_40", - name: ansi!("Swanston Street - 40 block"), - short: ansi!("||"), - description: ansi!( - "A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side"), - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_50", - name: ansi!("Swanston Street - 50 block"), - short: ansi!("||"), - description: ansi!( - "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete"), - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_60", - name: "Swanston Street - 60 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_bourkest", - name: "Swanston Street & Bourke St", - short: ansi!("##"), - description: "A dilapidated major tram thoroughfare intersects a slightly narrower 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt and weeds poke out from cracks in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_70", - name: "Swanston Street - 70 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_80", - name: "Swanston Street - 80 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_90", - name: "Swanston Street - 90 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 6, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_collinsst", - name: "Swanston Street & Collins St", - short: ansi!("##"), - description: "A dilapidated major tram thoroughfare intersects another wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_100", - name: "Swanston Street - 100 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_110", - name: "Swanston Street - 110 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 9, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_swanstonst_120", - name: "Swanston Street - 120 block", - short: ansi!("||"), - description: "A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete", - description_less_explicit: None, - grid_coords: GridCoords { x: 17, y: 10, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_210", - name: "La Trobe St - 210 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobesst_200", - name: "La Trobe St - 200 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_190", - name: "La Trobe St - 190 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamstlatrobest", - name: "Williams St & La Trobe St", - short: ansi!("##"), - description: "An intersection of an overgrown weedy road with a wide road with rusted tram tracks in the middle. Potholes dot the visible road surfaces", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_180", - name: "La Trobe St - 180 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_170", - name: "La Trobe St - 170 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 7, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_160", - name: "La Trobe St - 160 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 8, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_latrobest", - name: "Queen St & La Trobe St", - short: ansi!("##"), - description: "Two relatively wide roads intersects; the road running east to west is overgrown with weeds, while the road running to the south has been kept slightly clearer", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_150", - name: "La Trobe St - 150 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 10, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_140", - name: "La Trobe St - 140 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 11, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_130", - name: "La Trobe St - 130 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 12, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_latrobest", - name: "Elizabeth St & La Trobe St", - short: ansi!("##"), - description: "A moderately wide road that is now overgrown and completely covered in weeds intersects a wide road stained from years of neglect", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_120", - name: "La Trobe St - 120 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 14, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_110", - name: "La Trobe St - 110 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 15, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_latrobest_100", - name: "La Trobe St - 100 block", - short: ansi!("=="), - description: "A moderately wide road that is now overgrown and completely covered in weeds", - description_less_explicit: None, - grid_coords: GridCoords { x: 16, y: -5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_210", - name: "Lonsdale St - 210 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_200", - name: "Lonsdale St - 200 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_mckillocks_self_defence", - name: "McKillock's Self Defence", - short: ansi!("MS"), - description: ansi!("A neatly painted shop with bars covering the window, and a mean looking shop-keeper sitting behind a desk. [Use list to see stock for sale here]"), - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - ), - should_caption: true, - stock_list: vec!( - RoomStock { - possession_type: PossessionType::AntennaWhip, - list_price: 100, - ..Default::default() - }, - RoomStock { - possession_type: PossessionType::Dagger, - list_price: 90, - ..Default::default() - }, - ), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_190", - name: "Lonsdale St - 190 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamstlonsdalest", - name: "Williams St & Lonsdale St", - short: ansi!("##"), - description: "An intersection of two moderately wide roads, both poorly maintained", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_180", - name: "Lonsdale St - 180 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_170", - name: "Lonsdale St - 170 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 7, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_160", - name: "Lonsdale St - 160 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 8, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_lonsdalest", - name: "Queen St & Lonsdale St", - short: ansi!("##"), - description: "A relatively wide roads intersects a narrower road; both roads are littered with potholes in which weeds have set root", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_150", - name: "Lonsdale St - 150 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 10, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_140", - name: "Lonsdale St - 140 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 11, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_130", - name: "Lonsdale St - 130 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 12, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_lonsdalest", - name: "Elizabeth St & Lonsdale St", - short: ansi!("##"), - description: "A pot-holded two-lane each way road intersects a wide road stained from years of neglect", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_120", - name: "Lonsdale St - 120 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 14, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_110", - name: "Lonsdale St - 110 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 15, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lonsdalest_100", - name: "Lonsdale St - 100 block", - short: ansi!("=="), - description: "A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 16, y: -1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_10", - name: "Williams St - 10 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: -4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_20", - name: "Williams St - 20 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: -3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_30", - name: "Williams St - 30 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: -2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_40", - name: ansi!("Williams St - 40 block"), - short: ansi!("||"), - description: ansi!( - "A moderately wide road with a long crack in the asphalt running along its length"), - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_50", - name: ansi!("Williams St - 50 block"), - short: ansi!("||"), - description: ansi!( - "A moderately wide road with a long crack in the asphalt running along its length"), - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_60", - name: "Williams St - 60 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - target: ExitTarget::Custom("room/melbs_atopboardedup"), - exit_climb: Some(ExitClimb { - height: 10, - difficulty: 10 - }), - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_boardedup", - name: "Boarded Up Building", - short: ansi!("BB"), - description: "It seems abandoned here - everything is boarded up", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 2, z: 0 }, - exits: vec!( - ), - should_caption: false, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_atopboardedup", - name: "Atop the Boarded Up Building", - short: ansi!("BB"), - description: "A flat concrete rooftop above an abandoned building. What was apparently once a rooftop garden in concrete planter boxes is now mostly a tangled mess of weeds and rubbish", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 2, z: 1 }, - exits: vec!( - Exit { - direction: Direction::WEST, - target: ExitTarget::Custom("room/melbs_williamsst_60"), - exit_climb: Some(ExitClimb { - height: -10, - difficulty: 1 - }), - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_bourkest", - name: "Williams St & Bourke St", - short: ansi!("##"), - description: "A moderately wide road with a long crack in the asphalt running along its length intersects a 4-lane road with wide but heavily cracked concrete footpaths", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_70", - name: "Williams St - 70 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_dustypages", - name: "The Dusty Pages", - short: ansi!("DP"), - description: "Beneath a large hand-carved wooden sign reading \"The Dusty Pages\" lies a small oasis of knowledge. The room is dimly lit, with flickering candles and shafts of sunlight piercing through cracked windows. The air is heavy with the scent of decaying books and the lingering memories of a bygone era.\n\nShelves made of salvaged wood stand defiantly against the crumbling walls, bearing the weight of books that have miraculously survived the ravages of time and nuclear fallout. The covers are worn and the pages yellowed, but the knowledge contained within remains invaluable.\n\nThe inhabitants of this forsaken land gather here, seeking solace and hope within the forgotten stories and practical guides that line the shelves.\n\nThe Dusty Pages stands as a beacon of intellectual survival, a sanctuary where survivors can momentarily escape the harsh realities of their existence", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: true, - stock_list: vec!( - RoomStock { - possession_type: PossessionType::CulinaryEssentials, - list_price: 200, - ..Default::default() - } - ), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_80", - name: "Williams St - 80 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "kings_office", - name: "Kings Office", - short: ansi!("KO"), - description: ansi!("A dilapidated office that clearly was once a grand governor's office under the empire. It is now barely maintained. The self-styled king slouches behind a desk in the corner, shuffling paperwork around his desk. [Use list to see contracts for sale here]"), - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: true, - stock_list: vec!( - RoomStock { - possession_type: PossessionType::NewCorpLicence, - list_price: 5000, - ..Default::default() - } - ), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_90", - name: "Williams St - 90 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 6, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_collinsst", - name: "Williams St & Collins St", - short: ansi!("##"), - description: "A moderately wide road with a long crack in the asphalt running along its length intersects a wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_100", - name: "Williams St - 100 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_110", - name: "Williams St - 110 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 9, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_williamsst_120", - name: "Williams St - 120 block", - short: ansi!("||"), - description: "A moderately wide road with a long crack in the asphalt running along its length", - description_less_explicit: None, - grid_coords: GridCoords { x: 5, y: 10, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_210", - name: "Bourke St - 210 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_riotready", - name: "Riot Ready", - short: ansi!("RR"), - description: ansi!("A small shop filled with shelves, racks, and hangers that seem to hold all kinds of safety and tactical defensive equipment that one might need to survive in a post-apocalyptic world. A weary looking middle aged lady stands on the display floor, herself clad in black tactical helmets and vests, making you wonder if it is to showcase the wares, or protect herself from looters. Across her right breast is a name tag reading \"Sharon\" with a logo featuring a smiley face below it. [Type list to see what's for sale]"), - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: true, - stock_list: vec!( - RoomStock { - possession_type: PossessionType::HockeyMask, - list_price: 1000, - ..Default::default() - }, - RoomStock { - possession_type: PossessionType::LeatherJacket, - list_price: 500, - ..Default::default() - }, - RoomStock { - possession_type: PossessionType::LeatherPants, - list_price: 500, - ..Default::default() - }, - ), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_200", - name: "Bourke St - 200 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_healthtech", - name: "Healthtech", - short: ansi!("HT"), - description: "A store full of beeping gadgets locked in glass display cabinets, all of which seem to be focused around health and medicine. A tall male technician in a white lab coat stands behind a counter, his eyes following you hoping that you are going to buy something", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - stock_list: vec!( - RoomStock { - possession_type: PossessionType::MediumTraumaKit, - list_price: 80, - ..Default::default() - } - ), - should_caption: true, - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_grande_outdoors", - name: "Grande Outdoors", - short: ansi!("GO"), - description: "A shop that looks like it once helped people camp for fun, its clientele now days are probably more focused on just surviving! A weary looking woman with calloused, grease covered hands paces the shop floor, prepared to spring on you and hype up whatever merchandise you look at as the best thing ever", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - ), - stock_list: vec!( - RoomStock { - possession_type: PossessionType::ButcherKnife, - list_price: 120, - ..Default::default() - }, - RoomStock { - possession_type: PossessionType::RustyMetalPot, - list_price: 400, - ..Default::default() - }, - RoomStock { - possession_type: PossessionType::DuffelBag, - list_price: 250, - ..Default::default() - }, - RoomStock { - possession_type: PossessionType::DrinkBottle, - list_price: 80, - ..Default::default() - }, - ), - should_caption: true, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_190", - name: "Bourke St - 190 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_180", - name: "Bourke St - 180 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_170", - name: "Bourke St - 170 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 7, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - code: "melbs_bourkest_160", - name: "Bourke St - 160 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 8, y: 3, z: 0 }, - secondary_zones: vec!( - SecondaryZoneRecord { - zone: "chonkers", - short: ansi!("=="), - grid_coords: GridCoords { x: 0, y: 1, z: 0 }, - caption: Some("Melbs") - } - ), - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - target: ExitTarget::Custom("room/chonkers_strength_hall"), - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_bourkest", - name: "Queen St & Bourke St", - short: ansi!("##"), - description: "A relatively wide roads intersects a narrower road; both roads are littered with potholes in which weeds have set root", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_150", - name: "Bourke St - 150 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 10, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_140", - name: "Bourke St - 140 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 11, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_130", - name: "Bourke St - 130 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 12, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_bourkest", - name: "Elizabeth St & Bourke St", - short: ansi!("##"), - description: "A pot-holded two-lane each way road intersects a wide road stained from years of neglect", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_120", - name: "Bourke St - 120 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 14, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_110", - name: "Bourke St - 110 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 15, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_bourkest_100", - name: "Bourke St - 100 block", - short: ansi!("=="), - description: "A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt", - description_less_explicit: None, - grid_coords: GridCoords { x: 16, y: 3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_10", - name: "Queen St - 10 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: -4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_20", - name: "Queen St - 20 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: -3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_30", - name: "Queen St - 30 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: -2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_40", - name: ansi!("Queen St - 40 block"), - short: ansi!("||"), - description: ansi!( - "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic"), - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_50", - name: ansi!("Queen St - 50 block"), - short: ansi!("||"), - description: ansi!( - "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic"), - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_60", - name: "Queen St - 60 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_70", - name: "Queen St - 70 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_80", - name: "Queen St - 80 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_90", - name: "Queen St - 90 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 6, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_collinsst", - name: "Queen St & Collins St", - short: ansi!("##"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic intersects a wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::WEST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_100", - name: "Queen St - 100 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_110", - name: "Queen St - 110 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 9, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_queenst_120", - name: "Queen St - 120 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 9, y: 10, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_210", - name: "Collins St - 210 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_200", - name: "Collins St - 200 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_190", - name: "Collins St - 190 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 4, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_180", - name: "Collins St - 180 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 6, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::SOUTHEAST, - ..Default::default() - } - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_lockedandloaded", - name: "Locked & Loaded", - short: ansi!("LL"), - description: "This seems to be some kind of security shop, selling locks from super high-tech to primitive. Behind a counter sits a grizzled old man, who appears eager to sell you something", - description_less_explicit: None, - grid_coords: GridCoords { x: 7, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTHWEST, - ..Default::default() - }, - ), - stock_list: vec!( - RoomStock { - possession_type: PossessionType::Scanlock, - list_price: 200, - ..Default::default() - } - ), - should_caption: true, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_170", - name: "Collins St - 170 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 7, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_160", - name: "Collins St - 160 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 8, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_150", - name: "Collins St - 150 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 10, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_140", - name: "Collins St - 140 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 11, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_130", - name: "Collins St - 130 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 12, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_collinsst", - name: "Elizabeth St & Collins St", - short: ansi!("##"), - description: "A 4-lane road with round muddy potholes intersects a wide road stained from years of neglect", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_120", - name: "Collins St - 120 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 14, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_110", - name: "Collins St - 110 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 15, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_collinsst_100", - name: "Collins St - 100 block", - short: ansi!("=="), - description: "A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 16, y: 7, z: 0 }, - exits: vec!( - Exit { - direction: Direction::WEST, - ..Default::default() - }, - Exit { - direction: Direction::EAST, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_10", - name: "Elizabeth St - 10 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: -4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_20", - name: "Elizabeth St - 20 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: -3, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_30", - name: "Elizabeth St - 30 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: -2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_40", - name: ansi!("Elizabeth St - 40 block"), - short: ansi!("||"), - description: ansi!( - "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface"), - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 0, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_50", - name: ansi!("Elizabeth St - 50 block"), - short: ansi!("||"), - description: ansi!( - "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface"), - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 1, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_60", - name: "Elizabeth St - 60 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 2, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_70", - name: "Elizabeth St - 70 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 4, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_80", - name: "Elizabeth St - 80 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 5, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_90", - name: "Elizabeth St - 90 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 6, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_100", - name: "Elizabeth St - 100 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 8, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_110", - name: "Elizabeth St - 110 block", - short: ansi!("||"), - description: "A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 9, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - }, - Room { - zone: "melbs", - secondary_zones: vec!(), - code: "melbs_elizabethst_120", - name: "Elizabeth St - 120 block", - short: ansi!("||"), - description: "A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic", - description_less_explicit: None, - grid_coords: GridCoords { x: 13, y: 10, z: 0 }, - exits: vec!( - Exit { - direction: Direction::NORTH, - ..Default::default() - }, - Exit { - direction: Direction::SOUTH, - ..Default::default() - }, - ), - should_caption: false, - scavtable: street_scavtable(), - ..Default::default() - } - ) + from_yaml_str::>>(include_str!("melbs.yaml")) + .unwrap() + .into_iter() + .map(|r| r.into()) + .collect() } diff --git a/blastmud_game/src/static_content/room/melbs.yaml b/blastmud_game/src/static_content/room/melbs.yaml new file mode 100644 index 00000000..2c393d6b --- /dev/null +++ b/blastmud_game/src/static_content/room/melbs.yaml @@ -0,0 +1,2361 @@ +- zone: melbs + code: melbs_kingst_latrobest + name: King Street & Latrobe St + short: ## + grid_coords: + x: 1 + y: -5 + z: 0 + description: A wide road (5 lanes each way) intersects a narrower 3 lane road. Both have been rather poorly maintained. Potholes dot the ashphalt road + exits: + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_10 + name: King Street - 10 block + short: || + grid_coords: + x: 1 + y: -4 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + secondary_zones: + - zone: computer_museum + short: EX + grid_coords: + x: -1 + y: 0 + z: 0 + caption: Melbs + code: melbs_kingst_20 + name: King Street - 20 block + short: || + grid_coords: + x: 1 + y: -3 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + target: !Custom room/computer_museum_lobby + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_30 + name: King Street - 30 block + short: || + grid_coords: + x: 1 + y: -2 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_jills_diner + name: Jill's Diner + short: JD + grid_coords: + x: 2 + y: -2 + z: 0 + description: A dated looking eatery that looks like it has existed long before the collapse. Inside the diner is speckled white linoleum floors that run up to the walls. The smell of bacon grease pervades the air, reminding you of the purpose of this venue with every breath you take. Tables of various sizes are set out for diners to sit at, and at the back is a kitchen. The kitchen whirs with stainless steel exhaust pans, as cooks appear to do nothing but frying. Separating the kitchen from the dining area, and running the width of the restaurant, runs a counter. Hanging signs convey a menu in hand-painted black on white. A middle-aged woman sits behind the counter, looking eager to take your order. + exits: + - direction: west + should_caption: false + stock_list: + - possession_type: GreasyBurger + list_price: 5 + poverty_discount: true + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_lonsdalest + name: King Street & Lonsdale St + short: ## + grid_coords: + x: 1 + y: -1 + z: 0 + description: A wide road (5 lanes each way) intersects a narrower 2 lane each way road. Both have been rather poorly maintained. Potholes dot the ashphalt road + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_40 + name: King Street - 40 block + short: || + grid_coords: + x: 1 + y: 0 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_homelessshelter + name: Homeless Shelter + short: HS + grid_coords: + x: 2 + y: 0 + z: 0 + description: A spartan room with row after row of plain beds. A thick mist from a fog machine means you can't see or hear much going on here, and no one can attack anyone. It looks like a safe place to log off if you have no better choice + exits: + - direction: west + repel_npc: true + item_flags: + - NoSay + - NoSeeContents +- zone: melbs + secondary_zones: + - zone: repro_xv + short: EX + grid_coords: + x: 1 + y: 0 + z: 0 + caption: Melbs + code: melbs_kingst_50 + name: King Street - 50 block + short: || + grid_coords: + x: 1 + y: 1 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: east + target: !Custom room/repro_xv_lobby + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_60 + name: King Street - 60 block + short: || + grid_coords: + x: 1 + y: 2 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_bourkest + name: King Street & Bourke St + short: ## + grid_coords: + x: 1 + y: 3 + z: 0 + description: A wide road (5 lanes each way) intersects a slightly narrower 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt road + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_70 + name: King Street - 70 block + short: || + grid_coords: + x: 1 + y: 4 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + secondary_zones: + - zone: cok_murl + short: || + grid_coords: + x: -1 + y: 0 + z: 0 + caption: King Street + code: melbs_kingst_80 + name: King Street - 80 block + short: || + grid_coords: + x: 1 + y: 5 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + target: !Custom room/cok_lobby + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_90 + name: King Street - 90 block + short: || + grid_coords: + x: 1 + y: 6 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_collinsst + name: King Street & Collins St + short: ## + grid_coords: + x: 1 + y: 7 + z: 0 + description: A wide road (5 lanes each way) intersects another wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kingst_100 + name: King Street - 100 block + short: || + grid_coords: + x: 1 + y: 8 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_roboporter_rentals + name: Roboporter Rentals + short: RP + grid_coords: + x: 2 + y: 8 + z: 0 + description: A spacious room with metal walls and a faint smell of oil. The room is filled with rows of charging stations and maintenance bays for massive robots designed to carry heavy things. At the centre of the room stands a counter where you can rent Roboporters. A large sign overhead reads 'Roboporter Rentals - Your Heavy Lifting Solution!'. [You can use the hire roboporter command, to hire a Roboporter (if any are available) for $100 / 10 minute block] + exits: + - direction: west +- zone: melbs + code: melbs_kingst_110 + name: King Street - 110 block + short: ## + grid_coords: + x: 1 + y: 9 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_kings_110_laneway + name: 110 Kings Laneway + short: == + grid_coords: + x: 2 + y: 9 + z: 0 + description: A narrow grotty and dingy laneway between concrete walls, both covered with layer upon layer of graffiti. The concrete path has long cracks on its surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_rustic_furnishings + name: Rustic Furnishings + short: RF + grid_coords: + x: 3 + y: 9 + z: 0 + description: |- + The Rustic Furnishings unveils a captivating sight as you enter. Bathed in soft, natural light that filters through large windows, the furniture store reveals a world of comfort and nostalgia. + + A warm and inviting atmosphere surrounds you as you explore the meticulously arranged space. Rich, reclaimed hardwood floors stretch out beneath your feet, bearing the echoes of countless stories from the past. Worn yet sturdy, the wooden furniture exudes an enduring charm that captivates the eye, while the kitchen and bathroom sections of the store harbour more modern furniture. + + A seasoned storekeeper stands ready to assist shoppers + exits: + - direction: west + stock_list: + - possession_type: KitchenStove + list_price: 1000 + poverty_discount: false +- zone: melbs + secondary_zones: + - zone: general_hospital + short: EX + grid_coords: + x: -1 + y: 0 + z: 0 + caption: Melbs + code: melbs_kingst_120 + name: King Street - 120 block + short: || + grid_coords: + x: 1 + y: 10 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + target: !Custom room/general_hospital_waiting_room + should_caption: false +- zone: melbs + code: melbs_kingst_flinderst + name: King Street & Flinders St + short: ## + grid_coords: + x: 1 + y: 11 + z: 0 + description: A wide road (5 lanes each way) intersects a wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: north + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_210 + name: Flinders St - 210 block + short: == + grid_coords: + x: 2 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_200 + name: Flinders St - 200 block + short: == + grid_coords: + x: 3 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_190 + name: Flinders St - 190 block + short: == + grid_coords: + x: 4 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_flindersst + name: Williams St & Flinders St + short: ## + grid_coords: + x: 5 + y: 11 + z: 0 + description: An intersection of a steep asphalt road with a wide road with rusted tram tracks in the middle. Potholes dot the road surfaces + exits: + - direction: north + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_180 + name: Flinders St - 180 block + short: == + grid_coords: + x: 6 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false +- zone: melbs + code: melbs_flindersst_170 + name: Flinders St - 170 block + short: == + grid_coords: + x: 7 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_160 + name: Flinders St - 160 block + short: == + grid_coords: + x: 8 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_flindersst + name: Queen St & Flinders St + short: ## + grid_coords: + x: 9 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle intersects another wide road. Potholes dot the ashphalt + exits: + - direction: north + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_150 + name: Flinders St - 150 block + short: == + grid_coords: + x: 10 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_140 + name: Flinders St - 140 block + short: == + grid_coords: + x: 11 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_130 + name: Flinders St - 130 block + short: == + grid_coords: + x: 12 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_flindersst + name: Elizabeth St & Flinders St + short: ## + grid_coords: + x: 13 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle intersects a wide road stained from years of neglect. Potholes dot the ashphalt + exits: + - direction: north + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_120 + name: Flinders St - 120 block + short: == + grid_coords: + x: 14 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_110 + name: Flinders St - 110 block + short: == + grid_coords: + x: 15 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_flindersst_100 + name: Flinders St - 100 block + short: == + grid_coords: + x: 16 + y: 11 + z: 0 + description: A wide road with rusted tram tracks in the middle. Potholes dot the ashphalt road + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_flindersst + name: Swanston St & Flinders St + short: ## + grid_coords: + x: 17 + y: 11 + z: 0 + description: The intersection of two wide roads, with rusted tram tracks and infrastructure in the middle. Crumbling bollards line all corners of the intersection, and potholes dot the ashphalt road + exits: + - direction: west + - direction: north + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_latrobest + name: Swanston Street & Latrobe St + short: ## + grid_coords: + x: 17 + y: -5 + z: 0 + description: A dilapidated major tram thoroughfare intersects a narrower 3 lane road. Both have been rather poorly maintained. Potholes dot the ashphalt road + exits: + - direction: south + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swansonst_10 + name: Swanston Street - 10 block + short: || + grid_coords: + x: 17 + y: -4 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_20 + name: Swanston Street - 20 block + short: || + grid_coords: + x: 17 + y: -3 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_30 + name: Swanston Street - 30 block + short: || + grid_coords: + x: 17 + y: -2 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_lonsdalest + name: Swanston Street & Lonsdale St + short: ## + grid_coords: + x: 17 + y: -1 + z: 0 + description: A dilapidated major tram thoroughfare intersects a narrower 2 lane each way road. Both have been rather poorly maintained. Potholes dot the ashphalt and weeds poke out from cracks in the concrete + exits: + - direction: north + - direction: south + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_40 + name: Swanston Street - 40 block + short: || + grid_coords: + x: 17 + y: 0 + z: 0 + description: A wide road (5 lanes each way) that has been rather poorly maintained. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_50 + name: Swanston Street - 50 block + short: || + grid_coords: + x: 17 + y: 1 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_60 + name: Swanston Street - 60 block + short: || + grid_coords: + x: 17 + y: 2 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_bourkest + name: Swanston Street & Bourke St + short: ## + grid_coords: + x: 17 + y: 3 + z: 0 + description: A dilapidated major tram thoroughfare intersects a slightly narrower 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt and weeds poke out from cracks in the concrete + exits: + - direction: north + - direction: south + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_70 + name: Swanston Street - 70 block + short: || + grid_coords: + x: 17 + y: 4 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_80 + name: Swanston Street - 80 block + short: || + grid_coords: + x: 17 + y: 5 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_90 + name: Swanston Street - 90 block + short: || + grid_coords: + x: 17 + y: 6 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_collinsst + name: Swanston Street & Collins St + short: ## + grid_coords: + x: 17 + y: 7 + z: 0 + description: A dilapidated major tram thoroughfare intersects another wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_100 + name: Swanston Street - 100 block + short: || + grid_coords: + x: 17 + y: 8 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_110 + name: Swanston Street - 110 block + short: || + grid_coords: + x: 17 + y: 9 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_swanstonst_120 + name: Swanston Street - 120 block + short: || + grid_coords: + x: 17 + y: 10 + z: 0 + description: A road that looks to have been a major tram thoroughfare before the collapse. Cracks line the filthy concrete footpaths and rusted tram tracks, and weeds poke out from holes in the concrete + exits: + - direction: west + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_210 + name: La Trobe St - 210 block + short: == + grid_coords: + x: 2 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobesst_200 + name: La Trobe St - 200 block + short: == + grid_coords: + x: 3 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_190 + name: La Trobe St - 190 block + short: == + grid_coords: + x: 4 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamstlatrobest + name: Williams St & La Trobe St + short: ## + grid_coords: + x: 5 + y: -5 + z: 0 + description: An intersection of an overgrown weedy road with a wide road with rusted tram tracks in the middle. Potholes dot the visible road surfaces + exits: + - direction: west + - direction: east + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_180 + name: La Trobe St - 180 block + short: == + grid_coords: + x: 6 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_170 + name: La Trobe St - 170 block + short: == + grid_coords: + x: 7 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_160 + name: La Trobe St - 160 block + short: == + grid_coords: + x: 8 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_latrobest + name: Queen St & La Trobe St + short: ## + grid_coords: + x: 9 + y: -5 + z: 0 + description: Two relatively wide roads intersects; the road running east to west is overgrown with weeds, while the road running to the south has been kept slightly clearer + exits: + - direction: south + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_150 + name: La Trobe St - 150 block + short: == + grid_coords: + x: 10 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_140 + name: La Trobe St - 140 block + short: == + grid_coords: + x: 11 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_130 + name: La Trobe St - 130 block + short: == + grid_coords: + x: 12 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_latrobest + name: Elizabeth St & La Trobe St + short: ## + grid_coords: + x: 13 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds intersects a wide road stained from years of neglect + exits: + - direction: south + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_120 + name: La Trobe St - 120 block + short: == + grid_coords: + x: 14 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_110 + name: La Trobe St - 110 block + short: == + grid_coords: + x: 15 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_latrobest_100 + name: La Trobe St - 100 block + short: == + grid_coords: + x: 16 + y: -5 + z: 0 + description: A moderately wide road that is now overgrown and completely covered in weeds + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_210 + name: Lonsdale St - 210 block + short: == + grid_coords: + x: 2 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_200 + name: Lonsdale St - 200 block + short: == + grid_coords: + x: 3 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_mckillocks_self_defence + name: McKillock's Self Defence + short: MS + grid_coords: + x: 3 + y: 0 + z: 0 + description: A neatly painted shop with bars covering the window, and a mean looking shop-keeper sitting behind a desk. [Use list to see stock for sale here] + exits: + - direction: north + stock_list: + - possession_type: AntennaWhip + list_price: 100 + poverty_discount: false + - possession_type: Dagger + list_price: 90 + poverty_discount: false +- zone: melbs + code: melbs_lonsdalest_190 + name: Lonsdale St - 190 block + short: == + grid_coords: + x: 4 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamstlonsdalest + name: Williams St & Lonsdale St + short: ## + grid_coords: + x: 5 + y: -1 + z: 0 + description: An intersection of two moderately wide roads, both poorly maintained + exits: + - direction: west + - direction: east + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_180 + name: Lonsdale St - 180 block + short: == + grid_coords: + x: 6 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_170 + name: Lonsdale St - 170 block + short: == + grid_coords: + x: 7 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_160 + name: Lonsdale St - 160 block + short: == + grid_coords: + x: 8 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_lonsdalest + name: Queen St & Lonsdale St + short: ## + grid_coords: + x: 9 + y: -1 + z: 0 + description: A relatively wide roads intersects a narrower road; both roads are littered with potholes in which weeds have set root + exits: + - direction: north + - direction: south + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_150 + name: Lonsdale St - 150 block + short: == + grid_coords: + x: 10 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_140 + name: Lonsdale St - 140 block + short: == + grid_coords: + x: 11 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_130 + name: Lonsdale St - 130 block + short: == + grid_coords: + x: 12 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_lonsdalest + name: Elizabeth St & Lonsdale St + short: ## + grid_coords: + x: 13 + y: -1 + z: 0 + description: A pot-holded two-lane each way road intersects a wide road stained from years of neglect + exits: + - direction: west + - direction: east + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_120 + name: Lonsdale St - 120 block + short: == + grid_coords: + x: 14 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_110 + name: Lonsdale St - 110 block + short: == + grid_coords: + x: 15 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lonsdalest_100 + name: Lonsdale St - 100 block + short: == + grid_coords: + x: 16 + y: -1 + z: 0 + description: A two-lane each way road that has been rather poorly maintained. Potholes dot the ashphalt and cracks line the footpaths + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_10 + name: Williams St - 10 block + short: || + grid_coords: + x: 5 + y: -4 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_20 + name: Williams St - 20 block + short: || + grid_coords: + x: 5 + y: -3 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_30 + name: Williams St - 30 block + short: || + grid_coords: + x: 5 + y: -2 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_40 + name: Williams St - 40 block + short: || + grid_coords: + x: 5 + y: 0 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_50 + name: Williams St - 50 block + short: || + grid_coords: + x: 5 + y: 1 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_60 + name: Williams St - 60 block + short: || + grid_coords: + x: 5 + y: 2 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + - direction: east + target: !Custom room/melbs_atopboardedup + exit_climb: + height: 10 + difficulty: 10 + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_boardedup + name: Boarded Up Building + short: BB + grid_coords: + x: 6 + y: 2 + z: 0 + description: It seems abandoned here - everything is boarded up + exits: [] + should_caption: false +- zone: melbs + code: melbs_atopboardedup + name: Atop the Boarded Up Building + short: BB + grid_coords: + x: 6 + y: 2 + z: 1 + description: A flat concrete rooftop above an abandoned building. What was apparently once a rooftop garden in concrete planter boxes is now mostly a tangled mess of weeds and rubbish + exits: + - direction: west + target: !Custom room/melbs_williamsst_60 + exit_climb: + height: -10 + difficulty: 1 + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_bourkest + name: Williams St & Bourke St + short: ## + grid_coords: + x: 5 + y: 3 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length intersects a 4-lane road with wide but heavily cracked concrete footpaths + exits: + - direction: north + - direction: south + - direction: east + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_70 + name: Williams St - 70 block + short: || + grid_coords: + x: 5 + y: 4 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_dustypages + name: The Dusty Pages + short: DP + grid_coords: + x: 6 + y: 4 + z: 0 + description: |- + Beneath a large hand-carved wooden sign reading "The Dusty Pages" lies a small oasis of knowledge. The room is dimly lit, with flickering candles and shafts of sunlight piercing through cracked windows. The air is heavy with the scent of decaying books and the lingering memories of a bygone era. + + Shelves made of salvaged wood stand defiantly against the crumbling walls, bearing the weight of books that have miraculously survived the ravages of time and nuclear fallout. The covers are worn and the pages yellowed, but the knowledge contained within remains invaluable. + + The inhabitants of this forsaken land gather here, seeking solace and hope within the forgotten stories and practical guides that line the shelves. + + The Dusty Pages stands as a beacon of intellectual survival, a sanctuary where survivors can momentarily escape the harsh realities of their existence + exits: + - direction: west + stock_list: + - possession_type: CulinaryEssentials + list_price: 200 + poverty_discount: false +- zone: melbs + code: melbs_williamsst_80 + name: Williams St - 80 block + short: || + grid_coords: + x: 5 + y: 5 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: kings_office + name: Kings Office + short: KO + grid_coords: + x: 6 + y: 5 + z: 0 + description: A dilapidated office that clearly was once a grand governor's office under the empire. It is now barely maintained. The self-styled king slouches behind a desk in the corner, shuffling paperwork around his desk. [Use list to see contracts for sale here] + exits: + - direction: west + stock_list: + - possession_type: NewCorpLicence + list_price: 5000 + poverty_discount: false +- zone: melbs + code: melbs_williamsst_90 + name: Williams St - 90 block + short: || + grid_coords: + x: 5 + y: 6 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_collinsst + name: Williams St & Collins St + short: ## + grid_coords: + x: 5 + y: 7 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length intersects a wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_100 + name: Williams St - 100 block + short: || + grid_coords: + x: 5 + y: 8 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_110 + name: Williams St - 110 block + short: || + grid_coords: + x: 5 + y: 9 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_williamsst_120 + name: Williams St - 120 block + short: || + grid_coords: + x: 5 + y: 10 + z: 0 + description: A moderately wide road with a long crack in the asphalt running along its length + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_210 + name: Bourke St - 210 block + short: == + grid_coords: + x: 2 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: north + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_riotready + name: Riot Ready + short: RR + grid_coords: + x: 2 + y: 2 + z: 0 + description: A small shop filled with shelves, racks, and hangers that seem to hold all kinds of safety and tactical defensive equipment that one might need to survive in a post-apocalyptic world. A weary looking middle aged lady stands on the display floor, herself clad in black tactical helmets and vests, making you wonder if it is to showcase the wares, or protect herself from looters. Across her right breast is a name tag reading "Sharon" with a logo featuring a smiley face below it. [Type list to see what's for sale] + exits: + - direction: south + stock_list: + - possession_type: HockeyMask + list_price: 1000 + poverty_discount: false + - possession_type: LeatherJacket + list_price: 500 + poverty_discount: false + - possession_type: LeatherPants + list_price: 500 + poverty_discount: false +- zone: melbs + code: melbs_bourkest_200 + name: Bourke St - 200 block + short: == + grid_coords: + x: 3 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_healthtech + name: Healthtech + short: HT + grid_coords: + x: 3 + y: 2 + z: 0 + description: A store full of beeping gadgets locked in glass display cabinets, all of which seem to be focused around health and medicine. A tall male technician in a white lab coat stands behind a counter, his eyes following you hoping that you are going to buy something + exits: + - direction: south + stock_list: + - possession_type: MediumTraumaKit + list_price: 80 + poverty_discount: false +- zone: melbs + code: melbs_grande_outdoors + name: Grande Outdoors + short: GO + grid_coords: + x: 3 + y: 4 + z: 0 + description: A shop that looks like it once helped people camp for fun, its clientele now days are probably more focused on just surviving! A weary looking woman with calloused, grease covered hands paces the shop floor, prepared to spring on you and hype up whatever merchandise you look at as the best thing ever + exits: + - direction: north + stock_list: + - possession_type: ButcherKnife + list_price: 120 + poverty_discount: false + - possession_type: RustyMetalPot + list_price: 400 + poverty_discount: false + - possession_type: DuffelBag + list_price: 250 + poverty_discount: false + - possession_type: DrinkBottle + list_price: 80 + poverty_discount: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_190 + name: Bourke St - 190 block + short: == + grid_coords: + x: 4 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_180 + name: Bourke St - 180 block + short: == + grid_coords: + x: 6 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_170 + name: Bourke St - 170 block + short: == + grid_coords: + x: 7 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + secondary_zones: + - zone: chonkers + short: == + grid_coords: + x: 0 + y: 1 + z: 0 + caption: Melbs + code: melbs_bourkest_160 + name: Bourke St - 160 block + short: == + grid_coords: + x: 8 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + - direction: north + target: !Custom room/chonkers_strength_hall + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_bourkest + name: Queen St & Bourke St + short: ## + grid_coords: + x: 9 + y: 3 + z: 0 + description: A relatively wide roads intersects a narrower road; both roads are littered with potholes in which weeds have set root + exits: + - direction: north + - direction: south + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_150 + name: Bourke St - 150 block + short: == + grid_coords: + x: 10 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_140 + name: Bourke St - 140 block + short: == + grid_coords: + x: 11 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_130 + name: Bourke St - 130 block + short: == + grid_coords: + x: 12 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_bourkest + name: Elizabeth St & Bourke St + short: ## + grid_coords: + x: 13 + y: 3 + z: 0 + description: A pot-holded two-lane each way road intersects a wide road stained from years of neglect + exits: + - direction: west + - direction: east + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_120 + name: Bourke St - 120 block + short: == + grid_coords: + x: 14 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_110 + name: Bourke St - 110 block + short: == + grid_coords: + x: 15 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_bourkest_100 + name: Bourke St - 100 block + short: == + grid_coords: + x: 16 + y: 3 + z: 0 + description: A 4-lane road with wide but heavily cracked concrete footpaths. Potholes dot the ashphalt + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_10 + name: Queen St - 10 block + short: || + grid_coords: + x: 9 + y: -4 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_20 + name: Queen St - 20 block + short: || + grid_coords: + x: 9 + y: -3 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_30 + name: Queen St - 30 block + short: || + grid_coords: + x: 9 + y: -2 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_40 + name: Queen St - 40 block + short: || + grid_coords: + x: 9 + y: 0 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_50 + name: Queen St - 50 block + short: || + grid_coords: + x: 9 + y: 1 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_60 + name: Queen St - 60 block + short: || + grid_coords: + x: 9 + y: 2 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_70 + name: Queen St - 70 block + short: || + grid_coords: + x: 9 + y: 4 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_80 + name: Queen St - 80 block + short: || + grid_coords: + x: 9 + y: 5 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_90 + name: Queen St - 90 block + short: || + grid_coords: + x: 9 + y: 6 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_collinsst + name: Queen St & Collins St + short: ## + grid_coords: + x: 9 + y: 7 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic intersects a wide 4-lane road. Potholes dot the ashphalt road, while cracks line the footpaths on either side + exits: + - direction: north + - direction: south + - direction: east + - direction: west + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_100 + name: Queen St - 100 block + short: || + grid_coords: + x: 9 + y: 8 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_110 + name: Queen St - 110 block + short: || + grid_coords: + x: 9 + y: 9 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_queenst_120 + name: Queen St - 120 block + short: || + grid_coords: + x: 9 + y: 10 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_210 + name: Collins St - 210 block + short: == + grid_coords: + x: 2 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_200 + name: Collins St - 200 block + short: == + grid_coords: + x: 3 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_190 + name: Collins St - 190 block + short: == + grid_coords: + x: 4 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_180 + name: Collins St - 180 block + short: == + grid_coords: + x: 6 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + - direction: southeast + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_lockedandloaded + name: Locked & Loaded + short: LL + grid_coords: + x: 7 + y: 8 + z: 0 + description: This seems to be some kind of security shop, selling locks from super high-tech to primitive. Behind a counter sits a grizzled old man, who appears eager to sell you something + exits: + - direction: northwest + stock_list: + - possession_type: Scanlock + list_price: 200 + poverty_discount: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_170 + name: Collins St - 170 block + short: == + grid_coords: + x: 7 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_160 + name: Collins St - 160 block + short: == + grid_coords: + x: 8 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_150 + name: Collins St - 150 block + short: == + grid_coords: + x: 10 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_140 + name: Collins St - 140 block + short: == + grid_coords: + x: 11 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_130 + name: Collins St - 130 block + short: == + grid_coords: + x: 12 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_collinsst + name: Elizabeth St & Collins St + short: ## + grid_coords: + x: 13 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes intersects a wide road stained from years of neglect + exits: + - direction: west + - direction: east + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_120 + name: Collins St - 120 block + short: == + grid_coords: + x: 14 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_110 + name: Collins St - 110 block + short: == + grid_coords: + x: 15 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_collinsst_100 + name: Collins St - 100 block + short: == + grid_coords: + x: 16 + y: 7 + z: 0 + description: A 4-lane road with round muddy potholes marring the poorly maintained asphalt surface + exits: + - direction: west + - direction: east + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_10 + name: Elizabeth St - 10 block + short: || + grid_coords: + x: 13 + y: -4 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_20 + name: Elizabeth St - 20 block + short: || + grid_coords: + x: 13 + y: -3 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_30 + name: Elizabeth St - 30 block + short: || + grid_coords: + x: 13 + y: -2 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_40 + name: Elizabeth St - 40 block + short: || + grid_coords: + x: 13 + y: 0 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_50 + name: Elizabeth St - 50 block + short: || + grid_coords: + x: 13 + y: 1 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_60 + name: Elizabeth St - 60 block + short: || + grid_coords: + x: 13 + y: 2 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_70 + name: Elizabeth St - 70 block + short: || + grid_coords: + x: 13 + y: 4 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_80 + name: Elizabeth St - 80 block + short: || + grid_coords: + x: 13 + y: 5 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_90 + name: Elizabeth St - 90 block + short: || + grid_coords: + x: 13 + y: 6 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_100 + name: Elizabeth St - 100 block + short: || + grid_coords: + x: 13 + y: 8 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_110 + name: Elizabeth St - 110 block + short: || + grid_coords: + x: 13 + y: 9 + z: 0 + description: A wide road stained from years of neglect. The road smells foul, and you can make out brown, white, red, and even grey stains, as well as the occasional slick from ancient oil spilled on the surface + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet +- zone: melbs + code: melbs_elizabethst_120 + name: Elizabeth St - 120 block + short: || + grid_coords: + x: 13 + y: 10 + z: 0 + description: A fairly wide road where the surface has broken down but has been kept clear by regular foot traffic + exits: + - direction: north + - direction: south + should_caption: false + scavtable: CityStreet diff --git a/blastmud_game/src/static_content/room/repro_xv.rs b/blastmud_game/src/static_content/room/repro_xv.rs index 07e0ebb5..a71a47f9 100644 --- a/blastmud_game/src/static_content/room/repro_xv.rs +++ b/blastmud_game/src/static_content/room/repro_xv.rs @@ -5,10 +5,10 @@ use ansi::ansi; pub fn room_list() -> Vec { vec!( Room { - zone: "repro_xv", - code: "repro_xv_chargen", - name: ansi!("Choice Room"), - short: ansi!("CR"), + zone: "repro_xv".to_owned(), + code: "repro_xv_chargen".to_owned(), + name: ansi!("Choice Room").to_owned(), + short: ansi!("CR").to_owned(), description: ansi!( "A room brightly lit in unnaturally white light, covered in sparkling \ white tiles from floor to ceiling. A loudspeaker plays a message on \ @@ -21,7 +21,7 @@ pub fn room_list() -> Vec { wipe your brain again to change them. Talk to Statbot to spend your \ 14 points and create your body.\"\n\ [Try -statbot hi, to send hi to statbot - the - means \ - to whisper to a particular person in the room]"), + to whisper to a particular person in the room]").to_owned(), grid_coords: GridCoords { x: 0, y: 0, z: -1 }, exits: vec!(Exit { direction: Direction::EAST, @@ -33,15 +33,15 @@ pub fn room_list() -> Vec { ..Default::default() }, Room { - zone: "repro_xv", - code: "repro_xv_updates", - name: ansi!("Update Centre"), - short: ansi!("UC"), + zone: "repro_xv".to_owned(), + code: "repro_xv_updates".to_owned(), + name: ansi!("Update Centre").to_owned(), + short: ansi!("UC").to_owned(), description: ansi!( "A room covered in posters, evidently meant to help newly wiped individuals \ get up to speed on what has happened in the world since their memory implant was \ created. A one-way opens to the east - you have a feeling that once you go through, \ - there will be no coming back in here. [Hint: Try reading the posters here.]"), + there will be no coming back in here. [Hint: Try reading the posters here.]").to_owned(), grid_coords: GridCoords { x: 1, y: 0, z: -1 }, exits: vec!(Exit { direction: Direction::EAST, @@ -51,17 +51,17 @@ pub fn room_list() -> Vec { ..Default::default() }, Room { - zone: "repro_xv", + zone: "repro_xv".to_owned(), secondary_zones: vec!(), - code: "repro_xv_respawn", - name: ansi!("Body Factory"), - short: ansi!("BF"), + code: "repro_xv_respawn".to_owned(), + name: ansi!("Body Factory").to_owned(), + short: ansi!("BF").to_owned(), description: ansi!( "A room filled with glass vats full of clear fluids, with bodies of \ various stages of development floating in them. It smells like bleach. \ Being here makes you realise you aren't exactly alive right now... you \ have no body. But you sense you could go up and attach \ - your memories to a body matching your current stats"), + your memories to a body matching your current stats").to_owned(), grid_coords: GridCoords { x: 2, y: 0, z: -1 }, exits: vec!(Exit { direction: Direction::UP, @@ -71,16 +71,16 @@ pub fn room_list() -> Vec { ..Default::default() }, Room { - zone: "repro_xv", + zone: "repro_xv".to_owned(), secondary_zones: vec!(SecondaryZoneRecord { - zone: "melbs", - short: ansi!("RL"), + zone: "melbs".to_owned(), + short: ansi!("RL").to_owned(), grid_coords: GridCoords { x: 2, y: 1, z: 0 }, - caption: Some("ReproLabs") + caption: Some("ReproLabs".to_owned()) }), - code: "repro_xv_lobby", - name: "Lobby", - short: "<=", + code: "repro_xv_lobby".to_owned(), + name: "Lobby".to_owned(), + short: "<=".to_owned(), description: ansi!( "An entrance for an establishment called ReproLabs XV. \ It looks like they make bodies and attach peoples memories to \ @@ -88,12 +88,12 @@ pub fn room_list() -> Vec { unattended reception desk, with chrome-plated letters reading \ ReproLabs XV stuck to the wall behind it. A pipe down to into the ground \ opens up here, but the airflow is so strong, it looks like it is out \ - only - it seems to be how newly re-cloned bodies get back into the world"), + only - it seems to be how newly re-cloned bodies get back into the world").to_owned(), grid_coords: GridCoords { x: 2, y: 0, z: 0 }, exits: vec!( Exit { direction: Direction::WEST, - target: ExitTarget::Custom("room/melbs_kingst_50"), + target: ExitTarget::Custom("room/melbs_kingst_50".to_owned()), ..Default::default() }), should_caption: true, diff --git a/blastmud_game/src/static_content/room/special.rs b/blastmud_game/src/static_content/room/special.rs index 8d90bf7c..fdb11137 100644 --- a/blastmud_game/src/static_content/room/special.rs +++ b/blastmud_game/src/static_content/room/special.rs @@ -1,152 +1,10 @@ -use super::{GridCoords, Room}; -use ansi::ansi; +use super::{Room, SimpleRoom}; +use serde_yaml::from_str as from_yaml_str; -// None of these are reachable except when the game or an admin puts something there. pub fn room_list() -> Vec { - let holding_desc: &'static str = "The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]"; - vec![ - Room { - zone: "special", - code: "valhalla", - name: "Valhalla", - short: ansi!("VH"), - description: "Where the valiant dead NPCs go to wait recloning", - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 0, z: 0 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding0", - name: "Holding Pen #0", - short: ansi!("H0"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 0, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding1", - name: "Holding Pen #1", - short: ansi!("H1"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 0, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding2", - name: "Holding Pen #2", - short: ansi!("H2"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 0, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding3", - name: "Holding Pen #3", - short: ansi!("H3"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 0, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding4", - name: "Holding Pen #4", - short: ansi!("H4"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 1, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding5", - name: "Holding Pen #5", - short: ansi!("H5"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 1, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding6", - name: "Holding Pen #6", - short: ansi!("H6"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 1, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding7", - name: "Holding Pen #7", - short: ansi!("H7"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 1, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding8", - name: "Holding Pen #8", - short: ansi!("H8"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 0, y: 2, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holding9", - name: "Holding Pen #9", - short: ansi!("H9"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 1, y: 2, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holdinga", - name: "Holding Pen A", - short: ansi!("HA"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 2, y: 2, z: -1 }, - exits: vec![], - ..Default::default() - }, - Room { - zone: "special", - code: "holdingb", - name: "Holding Pen B", - short: ansi!("HB"), - description: holding_desc, - description_less_explicit: None, - grid_coords: GridCoords { x: 3, y: 2, z: -1 }, - exits: vec![], - ..Default::default() - }, - ] + from_yaml_str::>>(include_str!("special.yaml")) + .unwrap() + .into_iter() + .map(|r| r.into()) + .collect() } diff --git a/blastmud_game/src/static_content/room/special.yaml b/blastmud_game/src/static_content/room/special.yaml new file mode 100644 index 00000000..4412327a --- /dev/null +++ b/blastmud_game/src/static_content/room/special.yaml @@ -0,0 +1,130 @@ +- zone: special + code: valhalla + name: Valhalla + short: "VH" + grid_coords: + x: 0 + y: 0 + z: 0 + description: Where the valiant dead NPCs go to wait recloning + exits: [] +- zone: special + code: holding0 + name: 'Holding Pen #0' + short: "H0" + grid_coords: + x: 0 + y: 0 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding1 + name: 'Holding Pen #1' + short: "H1" + grid_coords: + x: 1 + y: 0 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding2 + name: 'Holding Pen #2' + short: "H2" + grid_coords: + x: 2 + y: 0 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding3 + name: 'Holding Pen #3' + short: "H3" + grid_coords: + x: 3 + y: 0 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding4 + name: 'Holding Pen #4' + short: "H4" + grid_coords: + x: 0 + y: 1 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding5 + name: 'Holding Pen #5' + short: "H5" + grid_coords: + x: 1 + y: 1 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding6 + name: 'Holding Pen #6' + short: "H6" + grid_coords: + x: 2 + y: 1 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding7 + name: 'Holding Pen #7' + short: "H7" + grid_coords: + x: 3 + y: 1 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding8 + name: 'Holding Pen #8' + short: "H8" + grid_coords: + x: 0 + y: 2 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holding9 + name: 'Holding Pen #9' + short: "H9" + grid_coords: + x: 1 + y: 2 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holdinga + name: Holding Pen A + short: "HA" + grid_coords: + x: 2 + y: 2 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] +- zone: special + code: holdingb + name: Holding Pen B + short: "HB" + grid_coords: + x: 3 + y: 2 + z: -1 + description: 'The inside of a small pen or cage, with thick steel bars, suitable for holding an animal - or a person - securely, with no chance of escape. It is dimly lit and smells like urine, and is very cramped and indignifying. It looks like the only way out would be with the help of whoever locked you in here. [OOC: consider emailing staff@blastmud.org to discuss your situation]' + exits: [] diff --git a/blastmud_game/src/static_content/scavtable.rs b/blastmud_game/src/static_content/scavtable.rs new file mode 100644 index 00000000..8a662139 --- /dev/null +++ b/blastmud_game/src/static_content/scavtable.rs @@ -0,0 +1,33 @@ +use crate::models::item::Scavtype; + +use super::{possession_type::PossessionType, room::melbs::street_scavtable}; +use std::collections::BTreeMap; + +use once_cell::sync::OnceCell; +use serde::{Deserialize, Serialize}; + +pub struct Scavinfo { + pub possession_type: PossessionType, + pub p_present: f64, // probability it is there. + pub difficulty_mean: f64, + pub difficulty_stdev: f64, + pub scavtype: Scavtype, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Ord, PartialOrd, Eq, PartialEq)] +pub enum ScavtableType { + Nothing, + CityStreet, +} + +pub fn scavtable_map() -> &'static BTreeMap> { + static MAP: OnceCell>> = OnceCell::new(); + MAP.get_or_init(|| { + vec![ + (ScavtableType::Nothing, vec![]), + (ScavtableType::CityStreet, street_scavtable()), + ] + .into_iter() + .collect() + }) +}