hatred wip
This commit is contained in:
parent
24767b9c86
commit
b13c0e22d6
@ -16,6 +16,7 @@
|
|||||||
# WORK WORK
|
# WORK WORK
|
||||||
## NOW
|
## NOW
|
||||||
cryp vbox
|
cryp vbox
|
||||||
|
update defensives in skill.rs
|
||||||
|
|
||||||
ensure all skills impl
|
ensure all skills impl
|
||||||
ez
|
ez
|
||||||
@ -27,6 +28,7 @@ siphon test
|
|||||||
make parry semi-aggressive
|
make parry semi-aggressive
|
||||||
constants
|
constants
|
||||||
change to ownership pattern
|
change to ownership pattern
|
||||||
|
make strike *really* hit first / resolve at same time?
|
||||||
|
|
||||||
## SOON
|
## SOON
|
||||||
* Remove debuffs on KO
|
* Remove debuffs on KO
|
||||||
|
|||||||
@ -60,9 +60,10 @@ impl CrypSkill {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
pub enum EffectMeta {
|
pub enum EffectMeta {
|
||||||
TickAmount(u64),
|
TickAmount(u64),
|
||||||
|
AddedDamage(u64),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
|
||||||
@ -402,30 +403,33 @@ impl Cryp {
|
|||||||
pub fn red_damage(&self) -> u64 {
|
pub fn red_damage(&self) -> u64 {
|
||||||
let red_damage_mods = self.effects.iter()
|
let red_damage_mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::RedDamage))
|
.filter(|e| e.effect.modifications().contains(&Stat::RedDamage))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
let modified_red_damage = red_damage_mods.iter().fold(self.red_damage.value, |acc, m| m.apply(acc));
|
let modified_red_damage = red_damage_mods.iter()
|
||||||
|
.fold(self.red_damage.value, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
return modified_red_damage;
|
return modified_red_damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn blue_damage(&self) -> u64 {
|
pub fn blue_damage(&self) -> u64 {
|
||||||
let blue_damage_mods = self.effects.iter()
|
let blue_damage_mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::BlueDamage))
|
.filter(|e| e.effect.modifications().contains(&Stat::BlueDamage))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
let modified_blue_damage = blue_damage_mods.iter().fold(self.blue_damage.value, |acc, m| m.apply(acc));
|
let modified_blue_damage = blue_damage_mods.iter()
|
||||||
|
.fold(self.blue_damage.value, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
return modified_blue_damage;
|
return modified_blue_damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn green_damage(&self) -> u64 {
|
pub fn green_damage(&self) -> u64 {
|
||||||
let green_damage_mods = self.effects.iter()
|
let green_damage_mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::GreenDamage))
|
.filter(|e| e.effect.modifications().contains(&Stat::GreenDamage))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
let modified_green_damage = green_damage_mods.iter().fold(self.green_damage.value, |acc, m| m.apply(acc));
|
let modified_green_damage = green_damage_mods.iter()
|
||||||
|
.fold(self.green_damage.value, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
return modified_green_damage;
|
return modified_green_damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,10 +445,11 @@ impl Cryp {
|
|||||||
pub fn speed(&self) -> u64 {
|
pub fn speed(&self) -> u64 {
|
||||||
let speed_mods = self.effects.iter()
|
let speed_mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::Speed))
|
.filter(|e| e.effect.modifications().contains(&Stat::Speed))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
let modified_speed = speed_mods.iter().fold(self.speed.value, |acc, m| m.apply(acc));
|
let modified_speed = speed_mods.iter()
|
||||||
|
.fold(self.speed.value, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
return modified_speed;
|
return modified_speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,23 +492,22 @@ impl Cryp {
|
|||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
let healing_mods = self.effects.iter()
|
let mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::GreenDamageTaken))
|
.filter(|e| e.effect.modifications().contains(&Stat::GreenDamageTaken))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
// println!("{:?}", healing_mods);
|
let modified_damage = mods.iter()
|
||||||
|
.fold(amount, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
let modified_green_damage = healing_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
|
||||||
|
|
||||||
match self.affected(Effect::Invert) {
|
match self.affected(Effect::Invert) {
|
||||||
false => {
|
false => {
|
||||||
let current_hp = self.hp();
|
let current_hp = self.hp();
|
||||||
self.hp.increase(modified_green_damage);
|
self.hp.increase(modified_damage);
|
||||||
let new_hp = self.hp.value;
|
let new_hp = self.hp.value;
|
||||||
|
|
||||||
let healing = new_hp - current_hp;
|
let healing = new_hp - current_hp;
|
||||||
let overhealing = modified_green_damage - healing;
|
let overhealing = modified_damage - healing;
|
||||||
|
|
||||||
events.push(Event::Healing {
|
events.push(Event::Healing {
|
||||||
skill,
|
skill,
|
||||||
@ -516,7 +520,7 @@ impl Cryp {
|
|||||||
|
|
||||||
// there is no green shield (yet)
|
// there is no green shield (yet)
|
||||||
let current_hp = self.hp();
|
let current_hp = self.hp();
|
||||||
self.reduce_hp(modified_green_damage);
|
self.reduce_hp(modified_damage);
|
||||||
let delta = current_hp - self.hp();
|
let delta = current_hp - self.hp();
|
||||||
|
|
||||||
events.push(Event::Damage {
|
events.push(Event::Damage {
|
||||||
@ -542,14 +546,13 @@ impl Cryp {
|
|||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
let red_damage_mods = self.effects.iter()
|
let mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::RedDamageTaken))
|
.filter(|e| e.effect.modifications().contains(&Stat::RedDamageTaken))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
// println!("{:?}", red_damage_mods);
|
let modified_damage = mods.iter()
|
||||||
|
.fold(amount, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
let modified_damage = red_damage_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
|
||||||
|
|
||||||
match self.affected(Effect::Invert) {
|
match self.affected(Effect::Invert) {
|
||||||
false => {
|
false => {
|
||||||
@ -616,14 +619,13 @@ impl Cryp {
|
|||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
let blue_damage_mods = self.effects.iter()
|
let mods = self.effects.iter()
|
||||||
.filter(|e| e.effect.modifications().contains(&Stat::BlueDamageTaken))
|
.filter(|e| e.effect.modifications().contains(&Stat::BlueDamageTaken))
|
||||||
.map(|cryp_effect| cryp_effect.effect)
|
.map(|e| (e.effect, e.meta))
|
||||||
.collect::<Vec<Effect>>();
|
.collect::<Vec<(Effect, Option<EffectMeta>)>>();
|
||||||
|
|
||||||
// println!("{:?}", blue_damage_mods);
|
let modified_damage = mods.iter()
|
||||||
|
.fold(amount, |acc, fx| fx.0.apply(acc, fx.1));
|
||||||
let modified_damage = blue_damage_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
|
||||||
|
|
||||||
match self.affected(Effect::Invert) {
|
match self.affected(Effect::Invert) {
|
||||||
false => {
|
false => {
|
||||||
|
|||||||
@ -9,7 +9,7 @@ use failure::err_msg;
|
|||||||
|
|
||||||
use account::Account;
|
use account::Account;
|
||||||
use rpc::{GameStateParams, GameSkillParams};
|
use rpc::{GameStateParams, GameSkillParams};
|
||||||
use cryp::{Cryp};
|
use cryp::{Cryp, EffectMeta};
|
||||||
use skill::{Skill, Effect, Cast, Resolution, Event, resolve};
|
use skill::{Skill, Effect, Cast, Resolution, Event, resolve};
|
||||||
use player::{Player};
|
use player::{Player};
|
||||||
use instance::{instance_game_finished, global_game_finished};
|
use instance::{instance_game_finished, global_game_finished};
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use cryp::{Cryp, CrypEffect, Stat};
|
use cryp::{Cryp, CrypEffect, EffectMeta, Stat};
|
||||||
use vbox::{Var};
|
use vbox::{Var};
|
||||||
|
|
||||||
pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutions: Vec<Resolution>) -> Resolutions {
|
pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutions: Vec<Resolution>) -> Resolutions {
|
||||||
@ -221,6 +221,7 @@ pub enum Effect {
|
|||||||
|
|
||||||
Empower,
|
Empower,
|
||||||
Taunt,
|
Taunt,
|
||||||
|
Hatred,
|
||||||
|
|
||||||
Invert,
|
Invert,
|
||||||
Strangle,
|
Strangle,
|
||||||
@ -321,10 +322,7 @@ impl Effect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// maybe increase by rng
|
pub fn apply(&self, value: u64, meta: Option<EffectMeta>) -> u64 {
|
||||||
// roll little endian bits
|
|
||||||
// and OR with base stat
|
|
||||||
pub fn apply(&self, value: u64) -> u64 {
|
|
||||||
match self {
|
match self {
|
||||||
Effect::Empower => value << 1,
|
Effect::Empower => value << 1,
|
||||||
Effect::Vulnerable => value << 1,
|
Effect::Vulnerable => value << 1,
|
||||||
@ -336,6 +334,11 @@ impl Effect {
|
|||||||
Effect::Haste => value << 1,
|
Effect::Haste => value << 1,
|
||||||
Effect::Slow => value >> 1,
|
Effect::Slow => value >> 1,
|
||||||
|
|
||||||
|
Effect::Hatred => value + match meta {
|
||||||
|
Some(EffectMeta::AddedDamage(d)) => d,
|
||||||
|
_ => panic!("hatred meta not damage"),
|
||||||
|
},
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
println!("{:?} does not have a mod effect", self);
|
println!("{:?} does not have a mod effect", self);
|
||||||
return value;
|
return value;
|
||||||
@ -371,6 +374,7 @@ impl Effect {
|
|||||||
Effect::Banish => Category::BlueDebuff, // todo randomise
|
Effect::Banish => Category::BlueDebuff, // todo randomise
|
||||||
Effect::Slow => Category::BlueDebuff,
|
Effect::Slow => Category::BlueDebuff,
|
||||||
Effect::Haste => Category::BlueBuff,
|
Effect::Haste => Category::BlueBuff,
|
||||||
|
Effect::Hatred => Category::BlueBuff,
|
||||||
Effect::Reflect => Category::BlueBuff,
|
Effect::Reflect => Category::BlueBuff,
|
||||||
Effect::Enslave => Category::BlueDebuff,
|
Effect::Enslave => Category::BlueDebuff,
|
||||||
Effect::Mesmerise => Category::BlueDebuff,
|
Effect::Mesmerise => Category::BlueDebuff,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user