Merge branch 'randomized-npc-names' into 'master'

Added randomized NPC names veloren/veloren#133

Closes #133

See merge request veloren/veloren!207
This commit is contained in:
Forest Anderson 2019-06-04 05:23:25 +00:00
commit 4548ec3bf9
7 changed files with 395 additions and 6 deletions

26
Cargo.lock generated
View File

@ -1207,6 +1207,11 @@ dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "itoa"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "jpeg-decoder"
version = "0.1.15"
@ -2158,6 +2163,11 @@ dependencies = [
"stb_truetype 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ryu"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "same-file"
version = "1.0.4"
@ -2236,6 +2246,16 @@ dependencies = [
"syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_json"
version = "1.0.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "shared_library"
version = "0.1.9"
@ -2567,10 +2587,11 @@ dependencies = [
"lz4-compress 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"mio 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
"mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"specs 0.14.3 (registry+https://github.com/rust-lang/crates.io-index)",
"sphynx 0.1.0 (git+https://gitlab.com/veloren/sphynx.git)",
"threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2968,6 +2989,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
"checksum instant 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d6706e8fb9de9be6143801a75747fa2209855b13d74ee994e30d86b38afdf77f"
"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08"
"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
"checksum jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c8b7d43206b34b3f94ea9445174bda196e772049b9bddbc620c9d29b2d20110d"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
"checksum khronos_api 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "037ab472c33f67b5fbd3e9163a2645319e5356fcd355efa6d4eb7fff4bbcb554"
@ -3077,6 +3099,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum rusttype 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "25951e85bb2647960969f72c559392245a5bd07446a589390bf427dda31cdc4a"
"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f"
"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267"
"checksum scan_fmt 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8b87497427f9fbe539ee6b9626f5a5e899331fdf1c1d62f14c637a462969db30"
"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
@ -3087,6 +3110,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)" = "a72e9b96fa45ce22a4bc23da3858dfccfd60acd28a25bcd328a98fdd6bea43fd"
"checksum serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)" = "101b495b109a3e3ca8c4cbe44cf62391527cdfb6ba15821c5ce80bcd5ea23f9f"
"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d"
"checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
"checksum shred 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6ea122e6133568144fcfb5888737d4ac776ebc959f989dd65b907136ac22bfed"
"checksum shred-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fcf34e5e5302d3024aba7afc291f6d1ca7573ed035d3c0796976ba3f10691a1"

View File

@ -0,0 +1,310 @@
{
"humanoid" : [
"Adon",
"Agro",
"Arlo",
"Azamarr",
"Baashar",
"Barak",
"Barton",
"Baske",
"Baxar",
"Blaiz",
"Caelan",
"Cassian",
"Clawsen",
"Colborn",
"Dagfinn",
"Dagrod",
"Dimian",
"Domnhar",
"Ebraheim",
"Eldermar",
"Embre",
"Esdel",
"Eune",
"Fangar",
"Favroe",
"Feron",
"Feston",
"Fintis",
"Gatlen",
"Gatlin",
"Gentar",
"Gethrod",
"Graff",
"Gunnar",
"Hagalbar",
"Hawke",
"Hemm",
"Henndar",
"Hezra",
"Hodus",
"Ishmael",
"Jakrin",
"Jareth",
"Jaris",
"Jather",
"Jerrick",
"Jessop",
"Jinto",
"Joz",
"Kadric",
"Kagran",
"Kent",
"Khron",
"Kontas",
"Krinn",
"Lassrin",
"Lenox",
"Lothe",
"Lustros",
"Lydan",
"Mavrek",
"Moki",
"Nazim",
"Nesso",
"Ophni",
"Pakker",
"Paquin",
"Paskel",
"Pike",
"Ptorik",
"Quintis",
"Rankar",
"Renham",
"Revvyn",
"Riordan",
"Rivik",
"Rourke",
"Roux",
"Ryven",
"Sarkin",
"Straus",
"Syrin",
"Talon",
"Tekren",
"Tez",
"Turrek",
"Tyvrik",
"Vadim",
"Vale",
"Varog",
"Verssek",
"Weston",
"Whit",
"Wulfe",
"Yorjan",
"Zaden",
"Zagaroth",
"Zenner"
],
"wolf": [
"Achak",
"Adalwolf",
"Akela",
"Alaska",
"Aleu",
"Amarok",
"Apisi",
"Archer",
"Ares",
"Arrax",
"Artic",
"Aspen",
"Aura",
"Axel",
"Balto",
"Barwolf",
"Basil",
"Beja",
"Beowulf",
"Borris",
"Brassa",
"Bruno",
"Chronos",
"Colt",
"Comet",
"Cronus",
"Czar",
"Dakota",
"Dash",
"Diego",
"Dire",
"Duke",
"Echo",
"Elda",
"Eskimo",
"Essos",
"Frey",
"Gabu",
"Ghost",
"Giro",
"Grey Wind",
"Gunner",
"Harou",
"Havoc",
"Hera",
"Hunter",
"Inuit",
"Jacob",
"Jenna",
"Juno",
"Kar",
"Khal",
"Kiba",
"Kimbra",
"Kodi",
"Lady",
"Lakota",
"Larka",
"Leah",
"Leto",
"Lobo",
"Loki",
"Lotus",
"Louve",
"Lupa",
"Major",
"Mathias",
"Moro",
"Murdock",
"Nomad",
"Okami",
"Orbit",
"Palla",
"Pyro",
"Radolf",
"Raven",
"Rhea",
"Rider",
"Rollo",
"Rune",
"Sable",
"Saga",
"Sarge",
"Shiro",
"Siku",
"Sky",
"Stark",
"Storm",
"Suki",
"Tala",
"Thor",
"Tiva",
"Tyr",
"Ubba",
"Ulva",
"Valor",
"Wolf",
"Wolfgang",
"Yara",
"Zeus",
"Ziva",
"Zylo"
],
"pig": [
"Acorn",
"Adeline",
"Ajna",
"Athena",
"Avacado",
"Babe",
"Bella",
"Buddy",
"Buttons",
"Charlie",
"Charlotte",
"Chubbs",
"Cinnamon",
"Clarence",
"Clover",
"Cookie",
"Corky",
"Cupcake",
"Daisy",
"Dani",
"Delilah",
"Dexter",
"Dolly",
"Dottie",
"Dudley",
"Ellie",
"Erwin",
"Evie",
"Gertrude",
"Gilly",
"Ginger",
"Gizmo",
"Gwenivere",
"Hagrid",
"Hazel",
"Hector",
"Herman",
"Hermione",
"Hoover",
"Huck",
"Iggy",
"Jake",
"Josie",
"Leonardo",
"Lily",
"Lola",
"Lottie",
"Lucy",
"Lulu",
"Mabel",
"Madeline",
"Maisie",
"Millie",
"Mimzy",
"Nooch",
"Nutmeg",
"Oinkers",
"Okja",
"Oliver",
"Olivia",
"Panda",
"Pasley",
"Peanut",
"Penelope",
"Peppa",
"Petunia",
"Phoebe",
"Piggie Smalls",
"Piggles",
"Piglet",
"Pinto Bean",
"Piper",
"Poly",
"Popcorn",
"Poppy",
"Punky",
"Rey",
"Rooter",
"Rosie",
"Ruby",
"Sadie",
"Scouter",
"Skittles",
"Snowball",
"Snuffles",
"Sonny",
"Sprout",
"Squiggles",
"Sweetie Pie",
"Theo",
"Toffuti",
"Trixie",
"Violet",
"Vishnu",
"Wee Wee",
"Wilbur",
"Willow",
"Winnie",
"Wrinkles",
"Ziggy",
"Zoe",
"Zoinks"
]
}

View File

@ -16,9 +16,10 @@ mio = "0.6"
mio-extras = "2.0"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0.39"
bincode = "1.1"
log = "0.4"
rand = "0.5"
rand = "0.6.5"
rayon = "1.0"
lazy_static = "1.3"
lz4-compress = "0.1"

View File

@ -1,6 +1,7 @@
use dot_vox::DotVoxData;
use image::DynamicImage;
use lazy_static::lazy_static;
use serde_json::Value;
use std::{
any::Any,
collections::HashMap,
@ -106,6 +107,12 @@ impl Asset for DotVoxData {
}
}
impl Asset for Value {
fn load(specifier: &str) -> Result<Self, Error> {
Ok(serde_json::from_reader(File::open(specifier)?).unwrap())
}
}
// TODO: System to load file from specifiers (e.g.: "core.ui.backgrounds.city").
fn try_open_with_path(name: &str) -> Option<File> {
debug!("Trying to access \"{}\"", name);

View File

@ -18,6 +18,7 @@ pub mod comp;
pub mod figure;
pub mod inventory;
pub mod msg;
pub mod npc;
pub mod ray;
pub mod state;
pub mod sys;

42
common/src/npc.rs Normal file
View File

@ -0,0 +1,42 @@
use crate::assets;
use lazy_static::lazy_static;
use rand::seq::SliceRandom;
use serde_json;
use std::fs::File;
use std::io::Error;
use std::sync::Arc;
pub enum NpcKind {
Humanoid,
Wolf,
Pig,
}
impl NpcKind {
fn as_str(&self) -> &'static str {
match *self {
NpcKind::Humanoid => "humanoid",
NpcKind::Wolf => "wolf",
NpcKind::Pig => "pig",
}
}
}
lazy_static! {
static ref NPC_NAMES_JSON: Arc<serde_json::Value> =
assets::load_expect("assets/common/npc_names.json");
}
pub fn get_npc_name(npc_type: NpcKind) -> String {
let npc_names = NPC_NAMES_JSON
.get(npc_type.as_str())
.expect("accessing json using NPC type provided as key")
.as_array()
.expect("parsing accessed json value into an array");
let npc_name = npc_names
.choose(&mut rand::thread_rng())
.expect("getting a random NPC name")
.as_str()
.expect("parsing NPC name json value into a &str");
String::from(npc_name)
}

View File

@ -3,7 +3,11 @@
//! and provide a handler function.
use crate::Server;
use common::{comp, msg::ServerMsg};
use common::{
comp,
msg::ServerMsg,
npc::{get_npc_name, NpcKind},
};
use specs::{Builder, Entity as EcsEntity, Join};
use vek::*;
@ -228,7 +232,7 @@ fn handle_pet_pig(server: &mut Server, entity: EcsEntity, args: String, action:
server
.create_npc(
pos,
"Bungo".to_owned(),
get_npc_name(NpcKind::Pig),
comp::Body::Quadruped(comp::QuadrupedBody::random()),
)
.with(comp::Agent::Pet {
@ -256,7 +260,7 @@ fn handle_pet_wolf(server: &mut Server, entity: EcsEntity, args: String, action:
server
.create_npc(
pos,
"Tobermory".to_owned(),
get_npc_name(NpcKind::Wolf),
comp::Body::QuadrupedMedium(comp::QuadrupedMediumBody::random()),
)
.with(comp::Agent::Pet {
@ -284,7 +288,7 @@ fn handle_enemy(server: &mut Server, entity: EcsEntity, args: String, action: &C
server
.create_npc(
pos,
"Tobermory".to_owned(),
get_npc_name(NpcKind::Humanoid),
comp::Body::Humanoid(comp::HumanoidBody::random()),
)
.with(comp::Agent::Enemy { target: None })