From 084e5e6f7b8d84f879641f074222a6c9bacf82eb Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Tue, 15 Aug 2023 20:28:21 +0100 Subject: [PATCH] cleans up mobs.json, adds MoveModes --- raws/mobs.json | 80 +++++++++++++++++++++--------------------- src/components.rs | 11 ++++++ src/main.rs | 1 + src/raws/rawmaster.rs | 15 +++++++- src/saveload_system.rs | 2 ++ 5 files changed, 68 insertions(+), 41 deletions(-) diff --git a/raws/mobs.json b/raws/mobs.json index 22d912c..1e403c8 100644 --- a/raws/mobs.json +++ b/raws/mobs.json @@ -3,7 +3,7 @@ "id": "npc_barkeep", "name": "barkeep", "renderable": { "glyph": "@", "fg": "#EE82EE", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "quips": ["Drink?", "Something to eat?", "Don't go out on an empty stomach."] }, @@ -11,7 +11,7 @@ "id": "npc_townsperson", "name": "townsperson", "renderable": { "glyph": "@", "fg": "#9fa86c", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "quips": ["Hello!", "Good morning.", ""] }, @@ -19,7 +19,7 @@ "id": "npc_drunk", "name": "drunk", "renderable": { "glyph": "@", "fg": "#a0a83c", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "quips": ["Hic!", "H-Hic'.", "Get me 'nother, would you?"] }, @@ -27,7 +27,7 @@ "id": "npc_fisher", "name": "fisher", "renderable": { "glyph": "@", "fg": "#3ca3a8", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "quips": ["Hey."] }, @@ -35,7 +35,7 @@ "id": "npc_dockworker", "name": "dock worker", "renderable": { "glyph": "@", "fg": "#68d8de", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "quips": ["No boat for a few days.", "Not much for us to do."] }, @@ -43,7 +43,7 @@ "id": "npc_priest", "name": "priest", "renderable": { "glyph": "@", "fg": "#FFFFFF", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "quips": ["Light's givings.", "", "Bless you."] }, @@ -51,7 +51,7 @@ "id": "npc_miner", "name": "miner", "renderable": { "glyph": "@", "fg": "#946123", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "vision_range": 4, "attacks": [{ "name": "hits", "hit_bonus": 0, "damage": "1d8" }], "quips": ["You're not borrowing my pick."] @@ -60,7 +60,7 @@ "id": "npc_guard", "name": "smalltown guard", "renderable": { "glyph": "@", "fg": "#034efc", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "level": 2, "vision_range": 4, "attacks": [{ "name": "hits", "hit_bonus": 0, "damage": "1d8" }], @@ -71,7 +71,7 @@ "id": "rat", "name": "rat", "renderable": { "glyph": "r", "fg": "#aa6000", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": ["MONSTER"], "bac": 6, "vision_range": 8, "attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d2" }], @@ -81,7 +81,7 @@ "id": "chicken", "name": "chicken", "renderable": { "glyph": "c", "fg": "#BB6000", "bg": "#000000", "order": 1 }, - "flags": ["HERBIVORE", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["HERBIVORE"], "bac": 8, "vision_range": 4, "attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d3" }] @@ -90,7 +90,7 @@ "id": "deer_little", "name": "fawn", "renderable": { "glyph": "q", "fg": "#a57037", "bg": "#000000", "order": 1 }, - "flags": ["HERBIVORE", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["HERBIVORE"], "bac": 8, "vision_range": 8, "attacks": [{ "name": "kicks", "hit_bonus": 0, "damage": "1d2" }] @@ -99,7 +99,7 @@ "id": "sheep_little", "name": "lamb", "renderable": { "glyph": "q", "fg": "#e7e7e7", "bg": "#000000", "order": 1 }, - "flags": ["HERBIVORE", "BYSTANDER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["HERBIVORE", "SMALL_GROUP"], "bac": 10, "vision_range": 4, "attacks": [{ "name": "kicks", "hit_bonus": 0, "damage": "1d2" }] @@ -108,7 +108,7 @@ "id": "chicken_little", "name": "chick", "renderable": { "glyph": "c", "fg": "#fae478", "bg": "#000000", "order": 1 }, - "flags": ["HERBIVORE", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["HERBIVORE"], "bac": 10, "vision_range": 4, "attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d2" }] @@ -117,7 +117,7 @@ "id": "horse_little", "name": "pony", "renderable": { "glyph": "u", "fg": "#b36c29", "bg": "#000000", "order": 1 }, - "flags": ["HERBIVORE", "BYSTANDER", "BLOCKS_TILE", "MULTIATTACK"], + "flags": ["HERBIVORE", "MULTIATTACK"], "level": 3, "bac": 6, "speed": 16, @@ -132,7 +132,7 @@ "id": "horse", "name": "horse", "renderable": { "glyph": "u", "fg": "#744d29", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "MULTIATTACK"], + "flags": ["MULTIATTACK"], "level": 5, "bac": 5, "speed": 20, @@ -146,7 +146,7 @@ "id": "horse_large", "name": "warhorse", "renderable": { "glyph": "u", "fg": "#8a3520", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "MULTIATTACK"], + "flags": ["MULTIATTACK"], "level": 7, "bac": 4, "speed": 24, @@ -160,7 +160,7 @@ "id": "rat_giant", "name": "giant rat", "renderable": { "glyph": "r", "fg": "#bb8000", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["SMALL_GROUP"], "level": 1, "bac": 7, "vision_range": 8, @@ -171,7 +171,7 @@ "id": "dog_little", "name": "little dog", "renderable": { "glyph": "d", "fg": "#FFFFFF", "bg": "#000000", "order": 1 }, - "flags": ["NEUTRAL", "BYSTANDER", "BLOCKS_TILE"], + "flags": ["NEUTRAL"], "level": 2, "bac": 6, "speed": 18, @@ -183,7 +183,7 @@ "id": "dog", "name": "dog", "renderable": { "glyph": "d", "fg": "#EEEEEE", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 4, "bac": 5, "speed": 16, @@ -194,7 +194,7 @@ "id": "dog_large", "name": "large dog", "renderable": { "glyph": "d", "fg": "#DDDDDD", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 6, "bac": 4, "speed": 15, @@ -205,7 +205,7 @@ "id": "gnome", "name": "gnome", "renderable": { "glyph": "G", "fg": "#AA5500", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["SMALL_GROUP"], "level": 1, "speed": 6, "vision_range": 12, @@ -216,7 +216,7 @@ "id": "zombie_gnome", "name": "gnome zombie", "renderable": { "glyph": "G", "fg": "#AA5500", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": ["MINDLESS"], "level": 1, "speed": 6, "vision_range": 7, @@ -227,7 +227,7 @@ "id": "goblin", "name": "goblin", "renderable": { "glyph": "g", "fg": "#00FF00", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 1, "speed": 9, "vision_range": 12, @@ -237,7 +237,7 @@ "id": "kobold", "name": "kobold", "renderable": { "glyph": "k", "fg": "#AA5500", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 1, "speed": 6, "vision_range": 7, @@ -248,7 +248,7 @@ "id": "zombie_kobold", "name": "kobold zombie", "renderable": { "glyph": "z", "fg": "#AA5500", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": ["MINDLESS"], "level": 1, "speed": 6, "vision_range": 7, @@ -259,7 +259,7 @@ "id": "kobold_large", "name": "large kobold", "renderable": { "glyph": "k", "fg": "#70461b", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 1, "speed": 6, "vision_range": 8, @@ -270,7 +270,7 @@ "id": "zombie_orc", "name": "orc zombie", "renderable": { "glyph": "z", "fg": "#dbd830", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": ["MINDLESS"], "level": 2, "bac": 9, "speed": 6, @@ -282,7 +282,7 @@ "id": "dwarf", "name": "dwarf", "renderable": { "glyph": "h", "fg": "#d61b1b", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 2, "bac": 10, "speed": 6, @@ -295,7 +295,7 @@ "id": "zombie_dwarf", "name": "dwarf zombie", "renderable": { "glyph": "z", "fg": "#d61b1b", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": ["MINDLESS"], "level": 2, "bac": 9, "speed": 6, @@ -307,7 +307,7 @@ "id": "kobold_captain", "name": "kobold captain", "renderable": { "glyph": "k", "fg": "#9331ac", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 2, "speed": 6, "vision_range": 7, @@ -318,7 +318,7 @@ "id": "spider_cave", "name": "cave spider", "renderable": { "glyph": "s", "fg": "#6b6b6b", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["SMALL_GROUP"], "level": 1, "bac": 3, "speed": 12, @@ -330,7 +330,7 @@ "id": "jackal", "name": "jackal", "renderable": { "glyph": "d", "fg": "#AA5500", "bg": "#000000", "order": 1 }, - "flags": ["CARNIVORE", "MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["CARNIVORE", "SMALL_GROUP"], "bac": 7, "vision_range": 12, "attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d2" }] @@ -339,7 +339,7 @@ "id": "fox", "name": "fox", "renderable": { "glyph": "d", "fg": "#FF0000", "bg": "#000000", "order": 1 }, - "flags": ["CARNIVORE", "MONSTER", "BLOCKS_TILE"], + "flags": ["CARNIVORE"], "bac": 7, "vision_range": 12, "attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d3" }] @@ -348,7 +348,7 @@ "id": "coyote", "name": "coyote", "renderable": { "glyph": "d", "fg": "#6E3215", "bg": "#000000", "order": 1 }, - "flags": ["CARNIVORE", "MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["CARNIVORE", "SMALL_GROUP"], "level": 1, "bac": 7, "vision_range": 12, @@ -358,7 +358,7 @@ "id": "wolf", "name": "wolf", "renderable": { "glyph": "d", "fg": "#5E4225", "bg": "#000000", "order": 1 }, - "flags": ["CARNIVORE", "MONSTER", "BLOCKS_TILE"], + "flags": ["CARNIVORE"], "level": 5, "bac": 4, "vision_range": 12, @@ -368,7 +368,7 @@ "id": "goblin_chieftain", "name": "goblin chieftain", "renderable": { "glyph": "G", "fg": "#00FF00", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE"], + "flags": [], "level": 2, "speed": 9, "vision_range": 12, @@ -379,7 +379,7 @@ "id": "orc", "name": "orc", "renderable": { "glyph": "o", "fg": "#00FF00", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["SMALL_GROUP"], "level": 1, "speed": 9, "vision_range": 12, @@ -390,7 +390,7 @@ "id": "orc_hill", "name": "hill orc", "renderable": { "glyph": "o", "fg": "#dbd830", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "LARGE_GROUP"], + "flags": ["LARGE_GROUP"], "level": 2, "speed": 9, "vision_range": 11, @@ -401,7 +401,7 @@ "id": "orc_captain", "name": "orc captain", "renderable": { "glyph": "o", "fg": "#9331ac", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "MULTIATTACK"], + "flags": ["MULTIATTACK"], "level": 5, "speed": 5, "vision_range": 12, @@ -415,7 +415,7 @@ "id": "ogre", "name": "ogre", "renderable": { "glyph": "O", "fg": "#00FF00", "bg": "#000000", "order": 1 }, - "flags": ["MONSTER", "BLOCKS_TILE", "SMALL_GROUP"], + "flags": ["SMALL_GROUP"], "level": 5, "bac": 5, "speed": 10, diff --git a/src/components.rs b/src/components.rs index d7f3c3f..e83168b 100644 --- a/src/components.rs +++ b/src/components.rs @@ -51,6 +51,17 @@ pub struct Faction { pub name: String, } +#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, Hash)] +pub enum Movement { + Static, + Random, +} + +#[derive(Component, Debug, Serialize, Deserialize, Clone)] +pub struct MoveMode { + pub mode: Movement, +} + #[derive(Component, Debug, Serialize, Deserialize, Clone)] pub struct Prop {} diff --git a/src/main.rs b/src/main.rs index 4de5d62..7e87882 100644 --- a/src/main.rs +++ b/src/main.rs @@ -559,6 +559,7 @@ fn main() -> rltk::BError { gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); + gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); diff --git a/src/raws/rawmaster.rs b/src/raws/rawmaster.rs index 67d3a4e..123cd01 100644 --- a/src/raws/rawmaster.rs +++ b/src/raws/rawmaster.rs @@ -291,10 +291,16 @@ pub fn spawn_named_mob( } let mut has_mind = true; let mut has_faction = false; + let mut blocks_tile = true; + let mut has_move_mode = false; if let Some(flags) = &mob_template.flags { for flag in flags.iter() { match flag.as_str() { - "BLOCKS_TILE" => eb = eb.with(BlocksTile {}), + "PASSABLE" => blocks_tile = false, + "STATIC" => { + eb = eb.with(MoveMode { mode: Movement::Static }); + has_move_mode = true; + } "MINDLESS" => { eb = eb.with(Faction { name: "mindless".to_string() }); has_faction = true; @@ -322,6 +328,13 @@ pub fn spawn_named_mob( } } } + if blocks_tile { + eb = eb.with(BlocksTile {}); + } + // If we didn't already add one, just move randomly. + if !has_move_mode { + eb = eb.with(MoveMode { mode: Movement::Random }); + } // If we're anything other than MINDLESS, add a mind. if has_mind { eb = eb.with(Mind {}); diff --git a/src/saveload_system.rs b/src/saveload_system.rs index 4647b23..daf1541 100644 --- a/src/saveload_system.rs +++ b/src/saveload_system.rs @@ -83,6 +83,7 @@ pub fn save_game(ecs: &mut World) { MagicMapper, MeleeWeapon, Mind, + MoveMode, MultiAttack, NaturalAttacks, Name, @@ -200,6 +201,7 @@ pub fn load_game(ecs: &mut World) { MagicMapper, MeleeWeapon, Mind, + MoveMode, MultiAttack, NaturalAttacks, Name,