+ rogues, rapiers, and grammar fixes

This commit is contained in:
Llywelwyn 2023-08-21 00:45:58 +01:00
parent 40f9d117f3
commit 91c2972935
4 changed files with 50 additions and 12 deletions

View file

@ -137,6 +137,15 @@
"flags": ["EQUIP_MELEE", "STRENGTH"], "flags": ["EQUIP_MELEE", "STRENGTH"],
"effects": { "base_damage": "1d6" } "effects": { "base_damage": "1d6" }
}, },
{
"id": "equip_rapier",
"name": { "name": "rapier", "plural": "rapiers" },
"renderable": { "glyph": ")", "fg": "#C0C0C0", "bg": "#000000", "order": 2 },
"weight": 2,
"value": 10,
"flags": ["EQUIP_MELEE", "FINESSE"],
"effects": { "base_damage": "1d8" }
},
{ {
"id": "equip_pitchfork", "id": "equip_pitchfork",
"name": { "name": "pitchfork", "plural": "pitchforks" }, "name": { "name": "pitchfork", "plural": "pitchforks" },

View file

@ -77,15 +77,17 @@ pub fn roll_4d6(rng: &mut rltk::RandomNumberGenerator) -> i32 {
/// Handles stat distribution for a player character. /// Handles stat distribution for a player character.
pub fn get_attribute_rolls(rng: &mut RandomNumberGenerator, class: Classes) -> (i32, i32, i32, i32, i32, i32) { pub fn get_attribute_rolls(rng: &mut RandomNumberGenerator, class: Classes) -> (i32, i32, i32, i32, i32, i32) {
let (mut str, mut dex, mut con, mut int, mut wis, mut cha) = match class { let (mut str, mut dex, mut con, mut int, mut wis, mut cha) = match class {
Classes::Fighter => (10, 10, 10, 10, 10, 10), Classes::Fighter => (10, 8, 10, 6, 6, 8),
Classes::Wizard => (10, 10, 10, 10, 10, 10), Classes::Rogue => (8, 12, 8, 6, 8, 10),
Classes::Villager => (10, 10, 10, 10, 10, 10), Classes::Wizard => (6, 8, 6, 12, 10, 8),
Classes::Villager => (6, 6, 6, 6, 6, 6),
}; };
let remaining_points = 75 - (str + dex + con + int + wis + cha); let remaining_points = 75 - (str + dex + con + int + wis + cha);
let improve_chance: [i32; 6] = match class { let improve_chance: [i32; 6] = match class {
Classes::Fighter => [30, 20, 30, 6, 7, 7], Classes::Fighter => [30, 20, 30, 6, 7, 7],
Classes::Rogue => [18, 30, 20, 9, 8, 15],
Classes::Wizard => [10, 20, 20, 30, 10, 10], Classes::Wizard => [10, 20, 20, 30, 10, 10],
Classes::Villager => [15, 15, 40, 10, 10, 10], Classes::Villager => [15, 15, 25, 15, 15, 15],
}; };
let improve_table = crate::random_table::RandomTable::new() let improve_table = crate::random_table::RandomTable::new()
.add("Strength", improve_chance[0]) .add("Strength", improve_chance[0])

View file

@ -1,5 +1,8 @@
use super::{gamesystem::attr_bonus, gamesystem::get_attribute_rolls, Attributes, Pools, Renderable, RunState, State}; use super::{gamesystem::attr_bonus, gamesystem::get_attribute_rolls, Attributes, Pools, Renderable, RunState, State};
use crate::{ai::NORMAL_SPEED, raws, Attribute, Energy, Pool, Skill, Skills, Telepath}; use crate::{
ai::NORMAL_SPEED, raws, spawner::potion_table, spawner::scroll_table, Attribute, Energy, Pool, Skill, Skills,
Telepath,
};
use rltk::prelude::*; use rltk::prelude::*;
use specs::prelude::*; use specs::prelude::*;
use std::collections::HashMap; use std::collections::HashMap;
@ -15,6 +18,7 @@ pub enum Races {
#[derive(PartialEq, Copy, Clone)] #[derive(PartialEq, Copy, Clone)]
pub enum Classes { pub enum Classes {
Fighter, Fighter,
Rogue,
Wizard, Wizard,
Villager, Villager,
} }
@ -69,18 +73,24 @@ pub fn character_creation(gs: &mut State, ctx: &mut Rltk) -> CharCreateResult {
fg = unselected_fg; fg = unselected_fg;
} }
ctx.print_color(x, y, fg, bg, "f. Fighter"); ctx.print_color(x, y, fg, bg, "f. Fighter");
if class == Classes::Rogue {
fg = selected_fg;
} else {
fg = unselected_fg;
}
ctx.print_color(x, y + 1, fg, bg, "r. Rogue");
if class == Classes::Wizard { if class == Classes::Wizard {
fg = selected_fg; fg = selected_fg;
} else { } else {
fg = unselected_fg; fg = unselected_fg;
} }
ctx.print_color(x, y + 1, fg, bg, "w. Wizard"); ctx.print_color(x, y + 2, fg, bg, "w. Wizard");
if class == Classes::Villager { if class == Classes::Villager {
fg = selected_fg; fg = selected_fg;
} else { } else {
fg = unselected_fg; fg = unselected_fg;
} }
ctx.print_color(x, y + 2, fg, bg, "v. Villager"); ctx.print_color(x, y + 3, fg, bg, "v. Villager");
match ctx.key { match ctx.key {
None => return CharCreateResult::NoSelection { race, class }, None => return CharCreateResult::NoSelection { race, class },
@ -91,6 +101,7 @@ pub fn character_creation(gs: &mut State, ctx: &mut Rltk) -> CharCreateResult {
VirtualKeyCode::E => return CharCreateResult::NoSelection { race: Races::Elf, class }, VirtualKeyCode::E => return CharCreateResult::NoSelection { race: Races::Elf, class },
VirtualKeyCode::D => return CharCreateResult::NoSelection { race: Races::Dwarf, class }, VirtualKeyCode::D => return CharCreateResult::NoSelection { race: Races::Dwarf, class },
VirtualKeyCode::F => return CharCreateResult::NoSelection { race, class: Classes::Fighter }, VirtualKeyCode::F => return CharCreateResult::NoSelection { race, class: Classes::Fighter },
VirtualKeyCode::R => return CharCreateResult::NoSelection { race, class: Classes::Rogue },
VirtualKeyCode::W => return CharCreateResult::NoSelection { race, class: Classes::Wizard }, VirtualKeyCode::W => return CharCreateResult::NoSelection { race, class: Classes::Wizard },
VirtualKeyCode::V => return CharCreateResult::NoSelection { race, class: Classes::Villager }, VirtualKeyCode::V => return CharCreateResult::NoSelection { race, class: Classes::Villager },
_ => return CharCreateResult::NoSelection { race, class }, _ => return CharCreateResult::NoSelection { race, class },
@ -216,8 +227,24 @@ fn get_starting_inventory(class: Classes, rng: &mut RandomNumberGenerator) -> (V
]; ];
carried = vec!["food_rations".to_string()]; carried = vec!["food_rations".to_string()];
} }
Classes::Rogue => {
equipped = vec!["equip_rapier".to_string(), "equip_body_leather".to_string()];
carried = vec![
"equip_dagger".to_string(),
"equip_dagger".to_string(),
"food_rations".to_string(),
"food_apple".to_string(),
];
}
Classes::Wizard => { Classes::Wizard => {
equipped = vec!["equip_dagger".to_string(), "equip_back_protection".to_string()]; equipped = vec!["equip_dagger".to_string(), "equip_back_protection".to_string()];
carried = vec!["food_rations".to_string()];
for _i in 0..rng.roll_dice(1, 3) {
carried.push(scroll_table(3).roll(rng));
}
for _i in 0..rng.roll_dice(1, 2) - 1 {
carried.push(potion_table(3).roll(rng));
}
} }
Classes::Villager => { Classes::Villager => {
let rolled_weapon = raws::table_by_name(&raws::RAWS.lock().unwrap(), "villager_equipment", 1).roll(rng); let rolled_weapon = raws::table_by_name(&raws::RAWS.lock().unwrap(), "villager_equipment", 1).roll(rng);

View file

@ -90,7 +90,7 @@ impl<'a> System<'a> for HungerSystem {
HungerState::Satiated => gamelog::Logger::new() HungerState::Satiated => gamelog::Logger::new()
.append("You feel") .append("You feel")
.colour(get_hunger_colour(hunger_clock.state)) .colour(get_hunger_colour(hunger_clock.state))
.append("satiated") .append_n("satiated")
.colour(WHITE) .colour(WHITE)
.period() .period()
.log(), .log(),
@ -98,27 +98,27 @@ impl<'a> System<'a> for HungerSystem {
HungerState::Hungry => gamelog::Logger::new() HungerState::Hungry => gamelog::Logger::new()
.append("You feel") .append("You feel")
.colour(get_hunger_colour(hunger_clock.state)) .colour(get_hunger_colour(hunger_clock.state))
.append("hungry") .append_n("hungry")
.colour(WHITE) .colour(WHITE)
.period() .period()
.log(), .log(),
HungerState::Weak => gamelog::Logger::new() HungerState::Weak => gamelog::Logger::new()
.append("You feel") .append("You feel")
.colour(get_hunger_colour(hunger_clock.state)) .colour(get_hunger_colour(hunger_clock.state))
.append("weak with hunger") .append_n("weak with hunger")
.colour(WHITE) .colour(WHITE)
.period() .period()
.log(), .log(),
HungerState::Fainting => gamelog::Logger::new() HungerState::Fainting => gamelog::Logger::new()
.append("You feel") .append("You feel")
.colour(get_hunger_colour(hunger_clock.state)) .colour(get_hunger_colour(hunger_clock.state))
.append("hungry enough to faint") .append_n("hungry enough to faint")
.colour(WHITE) .colour(WHITE)
.period() .period()
.log(), .log(),
_ => gamelog::Logger::new() _ => gamelog::Logger::new()
.colour(get_hunger_colour(hunger_clock.state)) .colour(get_hunger_colour(hunger_clock.state))
.append("You can't go on without food!") .append_n("You can't go on without food!")
.log(), .log(),
} }
} }