Add 4th level type, completing section 5.17
This commit is contained in:
parent
022a7921ce
commit
a3fdba4fe5
108
raws/spawns.json
108
raws/spawns.json
@ -4,14 +4,13 @@
|
|||||||
"name": "Goblin",
|
"name": "Goblin",
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
"min_depth": 3,
|
"min_depth": 3,
|
||||||
"max_depth": 100
|
"max_depth": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Orc",
|
"name": "Orc",
|
||||||
"weight": 1,
|
"weight": 1,
|
||||||
"min_depth": 3,
|
"min_depth": 4,
|
||||||
"max_depth": 100,
|
"max_depth": 100
|
||||||
"add_map_depth_to_weight": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Health Potion",
|
"name": "Health Potion",
|
||||||
@ -63,6 +62,30 @@
|
|||||||
"min_depth": 3,
|
"min_depth": 3,
|
||||||
"max_depth": 100
|
"max_depth": 100
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Leather Armor",
|
||||||
|
"weight": 1,
|
||||||
|
"min_depth": 2,
|
||||||
|
"max_depth": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Leather Boots",
|
||||||
|
"weight": 1,
|
||||||
|
"min_depth": 2,
|
||||||
|
"max_depth": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chainmail Armor",
|
||||||
|
"weight": 1,
|
||||||
|
"min_depth": 4,
|
||||||
|
"max_depth": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chain Coif",
|
||||||
|
"weight": 1,
|
||||||
|
"min_depth": 4,
|
||||||
|
"max_depth": 100
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Rations",
|
"name": "Rations",
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
@ -91,7 +114,7 @@
|
|||||||
"name": "Kobold",
|
"name": "Kobold",
|
||||||
"weight": 15,
|
"weight": 15,
|
||||||
"min_depth": 3,
|
"min_depth": 3,
|
||||||
"max_depth": 5
|
"max_depth": 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Rat",
|
"name": "Rat",
|
||||||
@ -641,6 +664,40 @@
|
|||||||
"initiative_penalty": 0.5,
|
"initiative_penalty": 0.5,
|
||||||
"vendor_category": "clothes"
|
"vendor_category": "clothes"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Chainmail Armor",
|
||||||
|
"renderable": {
|
||||||
|
"glyph": "[",
|
||||||
|
"fg": "#00FF00",
|
||||||
|
"bg": "#000000",
|
||||||
|
"order": 2
|
||||||
|
},
|
||||||
|
"wearable": {
|
||||||
|
"slot": "Torso",
|
||||||
|
"armor_class": 2.0
|
||||||
|
},
|
||||||
|
"weight_lbs": 20.0,
|
||||||
|
"base_value": 50.0,
|
||||||
|
"initiative_penalty": 1.0,
|
||||||
|
"vendor_category": "armor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chain Coif",
|
||||||
|
"renderable": {
|
||||||
|
"glyph": "[",
|
||||||
|
"fg": "#00FF00",
|
||||||
|
"bg": "#000000",
|
||||||
|
"order": 2
|
||||||
|
},
|
||||||
|
"wearable": {
|
||||||
|
"slot": "Head",
|
||||||
|
"armor_class": 1.0
|
||||||
|
},
|
||||||
|
"weight_lbs": 5.0,
|
||||||
|
"base_value": 20.0,
|
||||||
|
"initiative_penalty": 0.5,
|
||||||
|
"vendor_category": "armor"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Leather Boots",
|
"name": "Leather Boots",
|
||||||
"renderable": {
|
"renderable": {
|
||||||
@ -1185,6 +1242,28 @@
|
|||||||
"faction": "Cave Goblins",
|
"faction": "Cave Goblins",
|
||||||
"gold": "1d8"
|
"gold": "1d8"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Orc Leader",
|
||||||
|
"renderable": {
|
||||||
|
"glyph": "O",
|
||||||
|
"fg": "#FF0000",
|
||||||
|
"bg": "#000000",
|
||||||
|
"order": 1
|
||||||
|
},
|
||||||
|
"blocks_tile": true,
|
||||||
|
"vision_range": 8,
|
||||||
|
"movement": "static",
|
||||||
|
"attributes": {},
|
||||||
|
"faction": "Cave Goblins",
|
||||||
|
"gold": "3d8",
|
||||||
|
"equipped": [
|
||||||
|
"Battleaxe",
|
||||||
|
"Tower Shield",
|
||||||
|
"Leather Armor",
|
||||||
|
"Leather Boots"
|
||||||
|
],
|
||||||
|
"level": 2
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Goblin",
|
"name": "Goblin",
|
||||||
"renderable": {
|
"renderable": {
|
||||||
@ -1469,6 +1548,25 @@
|
|||||||
"order": 2
|
"order": 2
|
||||||
},
|
},
|
||||||
"hidden": false
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Watch Fire",
|
||||||
|
"renderable": {
|
||||||
|
"glyph": "☼",
|
||||||
|
"fg": "#FFFF55",
|
||||||
|
"bg": "#000000",
|
||||||
|
"order": 2
|
||||||
|
},
|
||||||
|
"hidden": false,
|
||||||
|
"light": {
|
||||||
|
"range": 6,
|
||||||
|
"color": "#FFFF55"
|
||||||
|
},
|
||||||
|
"entry_trigger": {
|
||||||
|
"effects": {
|
||||||
|
"damage": "6"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ use super::{Map, TileType};
|
|||||||
|
|
||||||
pub fn tile_glyph(idx: usize, map: &Map) -> (FontCharType, RGB, RGB) {
|
pub fn tile_glyph(idx: usize, map: &Map) -> (FontCharType, RGB, RGB) {
|
||||||
let (glyph, mut fg, mut bg) = match map.depth {
|
let (glyph, mut fg, mut bg) = match map.depth {
|
||||||
3 => get_limestone_cavern_glyph(idx, map),
|
3 | 4 => get_limestone_cavern_glyph(idx, map),
|
||||||
2 => get_forest_glyph(idx, map),
|
2 => get_forest_glyph(idx, map),
|
||||||
_ => get_tile_glyph_default(idx, map),
|
_ => get_tile_glyph_default(idx, map),
|
||||||
};
|
};
|
||||||
@ -33,7 +33,7 @@ fn get_limestone_cavern_glyph(idx: usize, map: &Map) -> (FontCharType, RGB, RGB)
|
|||||||
TileType::Road => (to_cp437('≡'), RGB::named(rltk::YELLOW)),
|
TileType::Road => (to_cp437('≡'), RGB::named(rltk::YELLOW)),
|
||||||
TileType::Grass => (to_cp437('"'), RGB::named(rltk::GREEN)),
|
TileType::Grass => (to_cp437('"'), RGB::named(rltk::GREEN)),
|
||||||
TileType::ShallowWater => (to_cp437('░'), RGB::named(rltk::CYAN)),
|
TileType::ShallowWater => (to_cp437('░'), RGB::named(rltk::CYAN)),
|
||||||
TileType::DeepWater => (to_cp437('▓'), RGB::named(rltk::BLUE)),
|
TileType::DeepWater => (to_cp437('▓'), RGB::from_f32(0.2, 0.2, 1.0)),
|
||||||
TileType::Gravel => (to_cp437(';'), RGB::from_f32(0.5, 0.5, 0.5)),
|
TileType::Gravel => (to_cp437(';'), RGB::from_f32(0.5, 0.5, 0.5)),
|
||||||
TileType::DownStairs => (to_cp437('>'), RGB::from_f32(0., 1.0, 1.0)),
|
TileType::DownStairs => (to_cp437('>'), RGB::from_f32(0., 1.0, 1.0)),
|
||||||
TileType::UpStairs => (to_cp437('<'), RGB::from_f32(0., 1.0, 1.0)),
|
TileType::UpStairs => (to_cp437('<'), RGB::from_f32(0., 1.0, 1.0)),
|
||||||
|
@ -42,7 +42,7 @@ use dla::DLABuilder;
|
|||||||
use door_placement::DoorPlacement;
|
use door_placement::DoorPlacement;
|
||||||
use drunkard::DrunkardsWalkBuilder;
|
use drunkard::DrunkardsWalkBuilder;
|
||||||
use forest::forest_builder;
|
use forest::forest_builder;
|
||||||
use limestone_cavern::limestone_cavern_builder;
|
use limestone_cavern::{limestone_cavern_builder, limestone_deep_cavern_builder};
|
||||||
use maze::MazeBuilder;
|
use maze::MazeBuilder;
|
||||||
use prefab_builder::PrefabBuilder;
|
use prefab_builder::PrefabBuilder;
|
||||||
use room_based_spawner::RoomBasedSpawner;
|
use room_based_spawner::RoomBasedSpawner;
|
||||||
@ -348,6 +348,7 @@ pub fn level_builder(
|
|||||||
1 => town_builder(new_depth, rng, width, height),
|
1 => town_builder(new_depth, rng, width, height),
|
||||||
2 => forest_builder(new_depth, rng, width, height),
|
2 => forest_builder(new_depth, rng, width, height),
|
||||||
3 => limestone_cavern_builder(new_depth, rng, width, height),
|
3 => limestone_cavern_builder(new_depth, rng, width, height),
|
||||||
|
4 => limestone_deep_cavern_builder(new_depth, rng, width, height),
|
||||||
_ => random_builder(new_depth, rng, width, height),
|
_ => random_builder(new_depth, rng, width, height),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ use super::{
|
|||||||
DrunkardsWalkBuilder, MetaMapBuilder, VoronoiSpawning, XStart, YStart,
|
DrunkardsWalkBuilder, MetaMapBuilder, VoronoiSpawning, XStart, YStart,
|
||||||
};
|
};
|
||||||
use crate::map::TileType;
|
use crate::map::TileType;
|
||||||
|
use crate::map_builders::dla::DLABuilder;
|
||||||
|
use crate::map_builders::prefab_builder::{prefab_sections, PrefabBuilder};
|
||||||
|
|
||||||
pub fn limestone_cavern_builder(
|
pub fn limestone_cavern_builder(
|
||||||
new_depth: i32,
|
new_depth: i32,
|
||||||
@ -25,6 +27,24 @@ pub fn limestone_cavern_builder(
|
|||||||
chain
|
chain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn limestone_deep_cavern_builder(
|
||||||
|
new_depth: i32,
|
||||||
|
_rng: &mut RandomNumberGenerator,
|
||||||
|
width: i32,
|
||||||
|
height: i32,
|
||||||
|
) -> BuilderChain {
|
||||||
|
let mut chain = BuilderChain::new(new_depth, width, height, "Deep Limestone Caverns");
|
||||||
|
chain
|
||||||
|
.start_with(DLABuilder::central_attractor())
|
||||||
|
.with(AreaStartingPosition::new(XStart::Left, YStart::Top))
|
||||||
|
.with(VoronoiSpawning::new())
|
||||||
|
.with(DistantExit::new())
|
||||||
|
.with(CaveDecorator::new())
|
||||||
|
.with(PrefabBuilder::sectional(prefab_sections::ORC_CAMP));
|
||||||
|
|
||||||
|
chain
|
||||||
|
}
|
||||||
|
|
||||||
pub struct CaveDecorator {}
|
pub struct CaveDecorator {}
|
||||||
|
|
||||||
impl MetaMapBuilder for CaveDecorator {
|
impl MetaMapBuilder for CaveDecorator {
|
||||||
|
@ -123,6 +123,15 @@ impl PrefabBuilder {
|
|||||||
.spawn_list
|
.spawn_list
|
||||||
.push((idx, "Health Potion".to_string()));
|
.push((idx, "Health Potion".to_string()));
|
||||||
}
|
}
|
||||||
|
'≈' => build_data.map.tiles[idx] = TileType::DeepWater,
|
||||||
|
'O' => {
|
||||||
|
build_data.map.tiles[idx] = TileType::Floor;
|
||||||
|
build_data.spawn_list.push((idx, "Orc Leader".to_string()));
|
||||||
|
}
|
||||||
|
'☼' => {
|
||||||
|
build_data.map.tiles[idx] = TileType::Floor;
|
||||||
|
build_data.spawn_list.push((idx, "Watch Fire".to_string()));
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
rltk::console::log(format!("Unknown glyph loading map: {}", (ch as u8) as char));
|
rltk::console::log(format!("Unknown glyph loading map: {}", (ch as u8) as char));
|
||||||
}
|
}
|
||||||
|
@ -78,3 +78,28 @@ const RIGHT_FORT: &str = "
|
|||||||
#######
|
#######
|
||||||
#
|
#
|
||||||
";
|
";
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub const ORC_CAMP: PrefabSection = PrefabSection {
|
||||||
|
template: ORC_CAMP_TXT,
|
||||||
|
width: 12,
|
||||||
|
height: 12,
|
||||||
|
placement: (HorizontalPlacement::Center, VerticalPlacement::Center),
|
||||||
|
};
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
const ORC_CAMP_TXT: &str = "
|
||||||
|
|
||||||
|
≈≈≈≈o≈≈≈≈≈
|
||||||
|
≈☼ ☼≈
|
||||||
|
≈ g ≈
|
||||||
|
≈ ≈
|
||||||
|
≈ g ≈
|
||||||
|
o O o
|
||||||
|
≈ ≈
|
||||||
|
≈ g ≈
|
||||||
|
≈ g ≈
|
||||||
|
≈☼ ☼≈
|
||||||
|
≈≈≈≈o≈≈≈≈≈
|
||||||
|
|
||||||
|
";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use ::serde::Deserialize;
|
use super::mob_structs::MobLight;
|
||||||
|
|
||||||
use super::Renderable;
|
use super::Renderable;
|
||||||
|
use ::serde::Deserialize;
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
pub struct Prop {
|
pub struct Prop {
|
||||||
@ -13,6 +13,7 @@ pub struct Prop {
|
|||||||
pub blocks_visibility: Option<bool>,
|
pub blocks_visibility: Option<bool>,
|
||||||
pub door_open: Option<bool>,
|
pub door_open: Option<bool>,
|
||||||
pub entry_trigger: Option<EntryTrigger>,
|
pub entry_trigger: Option<EntryTrigger>,
|
||||||
|
pub light: Option<MobLight>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
@ -570,6 +570,18 @@ pub fn spawn_named_prop(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if let Some(light) = &prop_template.light {
|
||||||
|
eb = eb
|
||||||
|
.with(LightSource {
|
||||||
|
range: light.range,
|
||||||
|
color: RGB::from_hex(&light.color).expect("Invalid color"),
|
||||||
|
})
|
||||||
|
.with(Viewshed {
|
||||||
|
range: light.range,
|
||||||
|
dirty: true,
|
||||||
|
visible_tiles: Vec::new(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return Some(eb.build());
|
return Some(eb.build());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user