minor fixes, altars can heal
This commit is contained in:
parent
fe19a449e3
commit
397aa07d60
7 changed files with 18 additions and 9 deletions
|
|
@ -9,7 +9,8 @@
|
||||||
"id": "prop_altar",
|
"id": "prop_altar",
|
||||||
"name": "altar",
|
"name": "altar",
|
||||||
"renderable": { "glyph": "_", "fg": "#FFFFFF", "bg": "#000000", "order": 2 },
|
"renderable": { "glyph": "_", "fg": "#FFFFFF", "bg": "#000000", "order": 2 },
|
||||||
"flags": []
|
"flags": ["ENTRY_TRIGGER"],
|
||||||
|
"effects": { "heal": "8d8" }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "prop_keg",
|
"id": "prop_keg",
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ use crate::{
|
||||||
raws::Reaction, Chasing, Faction, HasAncestry, Map, Mind, Position, TakingTurn, Telepath, Viewshed,
|
raws::Reaction, Chasing, Faction, HasAncestry, Map, Mind, Position, TakingTurn, Telepath, Viewshed,
|
||||||
WantsToApproach, WantsToFlee,
|
WantsToApproach, WantsToFlee,
|
||||||
};
|
};
|
||||||
|
use rltk::prelude::*;
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ use super::{EffectSpawner, EffectType};
|
||||||
use crate::{HungerClock, BUC};
|
use crate::{HungerClock, BUC};
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
|
|
||||||
pub fn restore_food(ecs: &mut World, effect: &EffectSpawner, target: Entity) {
|
pub fn modify_nutrition(ecs: &mut World, effect: &EffectSpawner, target: Entity) {
|
||||||
if let EffectType::RestoreNutrition { amount } = &effect.effect_type {
|
if let EffectType::ModifyNutrition { amount } = &effect.effect_type {
|
||||||
if let Some(hc) = ecs.write_storage::<HungerClock>().get_mut(target) {
|
if let Some(hc) = ecs.write_storage::<HungerClock>().get_mut(target) {
|
||||||
hc.duration += amount;
|
hc.duration += amount;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ pub enum EffectType {
|
||||||
Particle { glyph: FontCharType, fg: RGB, bg: RGB, lifespan: f32, delay: f32 },
|
Particle { glyph: FontCharType, fg: RGB, bg: RGB, lifespan: f32, delay: f32 },
|
||||||
EntityDeath,
|
EntityDeath,
|
||||||
ItemUse { item: Entity },
|
ItemUse { item: Entity },
|
||||||
RestoreNutrition { amount: i32 },
|
ModifyNutrition { amount: i32 },
|
||||||
TriggerFire { trigger: Entity },
|
TriggerFire { trigger: Entity },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,7 +116,7 @@ fn tile_effect_hits_entities(effect: &EffectType) -> bool {
|
||||||
match effect {
|
match effect {
|
||||||
EffectType::Damage { .. } => true,
|
EffectType::Damage { .. } => true,
|
||||||
EffectType::Healing { .. } => true,
|
EffectType::Healing { .. } => true,
|
||||||
EffectType::RestoreNutrition { .. } => true,
|
EffectType::ModifyNutrition { .. } => true,
|
||||||
EffectType::Confusion { .. } => true,
|
EffectType::Confusion { .. } => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
|
|
@ -139,7 +139,7 @@ fn affect_entity(ecs: &mut World, effect: &EffectSpawner, target: Entity) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EffectType::EntityDeath => damage::entity_death(ecs, effect, target),
|
EffectType::EntityDeath => damage::entity_death(ecs, effect, target),
|
||||||
EffectType::RestoreNutrition { .. } => hunger::restore_food(ecs, effect, target),
|
EffectType::ModifyNutrition { .. } => hunger::modify_nutrition(ecs, effect, target),
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ fn handle_restore_nutrition(
|
||||||
BUC::Uncursed => 400,
|
BUC::Uncursed => 400,
|
||||||
BUC::Cursed => 200,
|
BUC::Cursed => 200,
|
||||||
};
|
};
|
||||||
add_effect(event.source, EffectType::RestoreNutrition { amount }, event.target.clone());
|
add_effect(event.source, EffectType::ModifyNutrition { amount }, event.target.clone());
|
||||||
logger = logger
|
logger = logger
|
||||||
.append("You eat the")
|
.append("You eat the")
|
||||||
.colour(item_colour_ecs(ecs, event.entity))
|
.colour(item_colour_ecs(ecs, event.entity))
|
||||||
|
|
|
||||||
|
|
@ -309,9 +309,12 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) -> RunState
|
||||||
result = crate::spatial::for_each_tile_content_with_runstate(destination_idx, |potential_target| {
|
result = crate::spatial::for_each_tile_content_with_runstate(destination_idx, |potential_target| {
|
||||||
let mut hostile = true;
|
let mut hostile = true;
|
||||||
if pools.get(potential_target).is_some() {
|
if pools.get(potential_target).is_some() {
|
||||||
|
// We get the reaction of the target to this entity --
|
||||||
|
// i.e. in reverse to usual. We want to know if the target
|
||||||
|
// is hostile to us. If it isn't, we can swap places.
|
||||||
let result = crate::raws::get_reactions(
|
let result = crate::raws::get_reactions(
|
||||||
entity,
|
|
||||||
potential_target,
|
potential_target,
|
||||||
|
entity,
|
||||||
&factions,
|
&factions,
|
||||||
&ancestries,
|
&ancestries,
|
||||||
&crate::raws::RAWS.lock().unwrap(),
|
&crate::raws::RAWS.lock().unwrap(),
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,11 @@ macro_rules! apply_flags {
|
||||||
"BLOCKS_VISIBILITY" => $eb = $eb.with(BlocksVisibility {}),
|
"BLOCKS_VISIBILITY" => $eb = $eb.with(BlocksVisibility {}),
|
||||||
"ENTRY_TRIGGER" => $eb = $eb.with(EntryTrigger {}),
|
"ENTRY_TRIGGER" => $eb = $eb.with(EntryTrigger {}),
|
||||||
"SINGLE_ACTIVATION" => $eb = $eb.with(SingleActivation {}),
|
"SINGLE_ACTIVATION" => $eb = $eb.with(SingleActivation {}),
|
||||||
"DOOR" => $eb = $eb.with(Door { open: false }),
|
"DOOR" => {
|
||||||
|
$eb = $eb.with(Door { open: false });
|
||||||
|
$eb = $eb.with(BlocksVisibility {});
|
||||||
|
$eb = $eb.with(BlocksTile {});
|
||||||
|
}
|
||||||
// RESTORES NUTRITION
|
// RESTORES NUTRITION
|
||||||
"FOOD" => $eb = $eb.with(ProvidesNutrition {}),
|
"FOOD" => $eb = $eb.with(ProvidesNutrition {}),
|
||||||
// IS DELETED ON USE
|
// IS DELETED ON USE
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue