From f63a8b3f8f79f3b9b4dffbf773f2180268f4f30a Mon Sep 17 00:00:00 2001 From: ntr Date: Fri, 13 Dec 2019 15:05:18 +1000 Subject: [PATCH] tests back --- core/src/game.rs | 497 +++++++++++++++++++++++----------------------- core/src/skill.rs | 59 +++--- 2 files changed, 276 insertions(+), 280 deletions(-) diff --git a/core/src/game.rs b/core/src/game.rs index 94d0a2e6..753cd836 100644 --- a/core/src/game.rs +++ b/core/src/game.rs @@ -1647,316 +1647,315 @@ mod tests { // } - // #[test] - // fn upkeep_test() { - // let mut game = create_2v2_test_game(); - // game.players[0].set_ready(true); - // game.phase_end = Some(Utc::now().checked_sub_signed(Duration::seconds(500)).unwrap()); - // game = game.upkeep(); - // // assert!(game.players[1].warnings == 1); - // } + #[test] + fn upkeep_test() { + let mut game = create_2v2_test_game(); + game.players[0].set_ready(true); + game.phase_end = Some(Utc::now().checked_sub_signed(Duration::seconds(500)).unwrap()); + game = game.upkeep(); + // assert!(game.players[1].warnings == 1); + } - // #[test] - // fn attack_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; - // game.add_skill(player_id, source, target, Skill::Attack).unwrap(); - // game = game.resolve_phase_start(); - // } + #[test] + fn attack_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; + game.add_skill(player_id, source, target, Skill::Attack).unwrap(); + game = game.resolve_phase_start(); + } - // #[test] - // fn bash_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn bash_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Bash)); - // } + game.resolve(Cast::new(source, player_id, target, Skill::Bash)); + } - // #[test] - // fn slay_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn slay_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Slay)); + game.resolve(Cast::new(source, player_id, target, Skill::Slay)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation: _, display: _ } => - // construct == target && amount > 0 && colour == Colour::Red, - // _ => false, - // })); + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation: _, display: _ } => + construct == target && amount > 0 && colour == Colour::Red, + _ => false, + })); - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation: _, display: _ } => - // construct == target && amount > 0 && colour == Colour::Red, - // _ => false, - // })); - // } + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation: _, display: _ } => + construct == target && amount > 0 && colour == Colour::Red, + _ => false, + })); + } - // #[test] - // fn purify_test() { - // let mut game = create_2v2_test_game(); - // let source_player_id = game.players[0].id; - // let target_player_id = game.players[1].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn purify_test() { + let mut game = create_2v2_test_game(); + let source_player_id = game.players[0].id; + let target_player_id = game.players[1].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, source_player_id, target, Skill::Decay)); + game.resolve(Cast::new(source, source_player_id, target, Skill::Decay)); - // // don't mention 3 we volvo now - // assert!(game.players[1].constructs[0].effects.len() == 3); + // don't mention 3 we volvo now + assert!(game.players[1].constructs[0].effects.len() == 3); - // game.resolve(Cast::new(target, target_player_id, target, Skill::Purify)); + game.resolve(Cast::new(target, target_player_id, target, Skill::Purify)); - // assert!(game.players[1].constructs[0].effects.len() == 1); + assert!(game.players[1].constructs[0].effects.len() == 1); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Effect { construct, effect, duration: _, display: _ } => - // construct == target && effect == Effect::Pure, - // _ => false, - // })); + assert!(resolutions.iter().any(|r| match r.event { + Event::Effect { construct, effect, duration: _, display: _ } => + construct == target && effect == Effect::Pure, + _ => false, + })); - // // Check for healing here + // Check for healing here - // } + } - // #[test] - // fn invert_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn invert_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Strike)); - // game.resolve(Cast::new(source, player_id, target, Skill::Invert)); - // game.resolve(Cast::new(source, player_id, target, Skill::Strike)); + game.resolve(Cast::new(source, player_id, target, Skill::Strike)); + game.resolve(Cast::new(source, player_id, target, Skill::Invert)); + game.resolve(Cast::new(source, player_id, target, Skill::Strike)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Healing { construct, colour, amount, overhealing: _, display: _, } => - // construct == target && amount > 0 && colour == Colour::Green, - // _ => false, - // })); + assert!(resolutions.iter().any(|r| match r.event { + Event::Healing { construct, colour, amount, overhealing: _, display: _, } => + construct == target && amount > 0 && colour == Colour::Green, + _ => false, + })); - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Healing { construct, colour, amount, overhealing: _, display: _ } => - // construct == target && amount > 0 && colour == Colour::Red, - // _ => false, - // })); - // } + assert!(resolutions.iter().any(|r| match r.event { + Event::Healing { construct, colour, amount, overhealing: _, display: _ } => + construct == target && amount > 0 && colour == Colour::Red, + _ => false, + })); + } - // #[test] - // fn siphon_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn siphon_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Siphon)); + game.resolve(Cast::new(source, player_id, target, Skill::Siphon)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // // siphon should - // // apply effect // damage target // heal source - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Effect { construct, effect, duration: _, display: _ } => - // construct == target && effect == Effect::Siphon, - // _ => false, - // })); + // siphon should + // apply effect // damage target // heal source + assert!(resolutions.iter().any(|r| match r.event { + Event::Effect { construct, effect, duration: _, display: _ } => + construct == target && effect == Effect::Siphon, + _ => false, + })); - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation: _, display: _ } => - // construct == target && amount > 0 && colour == Colour::Blue, - // _ => false, - // })); + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation: _, display: _ } => + construct == target && amount > 0 && colour == Colour::Blue, + _ => false, + })); - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Healing { construct, colour, amount: _, overhealing: _, display: _ } => - // construct == source && colour == Colour::Green, - // _ => false, - // })); + assert!(resolutions.iter().any(|r| match r.event { + Event::Healing { construct, colour, amount: _, overhealing: _, display: _ } => + construct == source && colour == Colour::Green, + _ => false, + })); - // game = game.resolve_phase_start(); + game = game.resolve_phase_start(); - // // que ota? - // game.resolve(Cast::new(source, player_id, target, Skill::Siphon)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + // que ota? + game.resolve(Cast::new(source, player_id, target, Skill::Siphon)); + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // let damage_resolutions.iter().filter(|r| match r.event { - // Event::Damage { construct: _, colour: _, amount: _, mitigation: _, display: _ } => true, - // _ => false, - // }).count(); + let damage_events = resolutions.iter().filter(|r| match r.event { + Event::Damage { construct: _, colour: _, amount: _, mitigation: _, display: _ } => true, + _ => false, + }).count(); - // assert_eq!(damage_events, 1); - // } + assert_eq!(damage_events, 1); + } - // #[test] - // fn reflect_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn reflect_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Reflect)); - // game.resolve(Cast::new(source, player_id, target, Skill::Blast)); + game.resolve(Cast::new(source, player_id, target, Skill::Reflect)); + game.resolve(Cast::new(source, player_id, target, Skill::Blast)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation: _, display: _ } => - // construct == source && amount > 0 && colour == Colour::Blue, - // _ => false, - // })); - // } + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation: _, display: _ } => + construct == source && amount > 0 && colour == Colour::Blue, + _ => false, + })); + } - // #[test] - // fn absorb_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn absorb_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Absorb)); - // game.resolve(Cast::new(source, player_id, target, Skill::Blast)); + game.resolve(Cast::new(source, player_id, target, Skill::Absorb)); + game.resolve(Cast::new(source, player_id, target, Skill::Blast)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation: _, display: _ } => { - // assert!(construct == target && amount > 0 && colour == Colour::Blue && r.skill == Skill::Blast); - // resolutions.iter().any(|r| match r.event { - // Event::Meta { construct, effect, meta } => - // construct == target && effect == Effect::Absorption && { - // match meta { - // EffectMeta::AddedDamage(added_dmg) => added_dmg == amount, - // _ => false, - // } - // }, - // _ => false, - // }) - // }, - // _ => false, - // })); + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation: _, display: _ } => { + assert!(construct == target && amount > 0 && colour == Colour::Blue && r.skill == Skill::Blast); + resolutions.iter().any(|r| match r.event { + Event::Meta { construct, effect, meta } => + construct == target && effect == Effect::Absorption && { + match meta { + EffectMeta::AddedDamage(added_dmg) => added_dmg == amount, + _ => false, + } + }, + _ => false, + }) + }, + _ => false, + })); - // assert!(match game.players[1].constructs[0].effects[0].meta { - // Some(EffectMeta::AddedDamage(d)) => d, - // _ => 0 - // // 320 base blue power and 125 base blue life - // } == 320.pct(Skill::Blast.multiplier()) - 125); + assert!(match game.players[1].constructs[0].effects[0].meta { + Some(EffectMeta::AddedDamage(d)) => d, + _ => 0 + // 320 base blue power and 125 base blue life + } == 320.pct(Skill::Blast.multiplier()) - 125); - // } + } - // #[test] - // fn absorb_multi_damage_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + #[test] + fn absorb_multi_damage_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, target, Skill::Blast)); - // game.resolve(Cast::new(source, player_id, target, Skill::Blast)); - // // Abosrb restores blue life here - // game.resolve(Cast::new(source, player_id, target, Skill::Absorb)); - // game.resolve(Cast::new(source, player_id, target, Skill::Blast)); + game.resolve(Cast::new(source, player_id, target, Skill::Blast)); + game.resolve(Cast::new(source, player_id, target, Skill::Blast)); + // Abosrb restores blue life here + game.resolve(Cast::new(source, player_id, target, Skill::Absorb)); + game.resolve(Cast::new(source, player_id, target, Skill::Blast)); - // assert!(match game.players[1].constructs[0].effects[0].meta { - // Some(EffectMeta::AddedDamage(d)) => d, - // _ => 0 - // // 320 base blue power and 125 base blue life - // } == 320.pct(Skill::Blast.multiplier()) - 125); - // } + assert!(match game.players[1].constructs[0].effects[0].meta { + Some(EffectMeta::AddedDamage(d)) => d, + _ => 0 + // 320 base blue power and 125 base blue life + } == 320.pct(Skill::Blast.multiplier()) - 125); + } - // #[test] - // fn multi_reflect_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let target_player_id = game.players[1].id; + #[test] + fn multi_reflect_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let target_player_id = game.players[1].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, source, Skill::Reflect)); - // game.resolve(Cast::new(target, target_player_id, target, Skill::Reflect)); - // game.resolve(Cast::new(source, player_id, target, Skill::Blast)); + game.resolve(Cast::new(source, player_id, source, Skill::Reflect)); + game.resolve(Cast::new(target, target_player_id, target, Skill::Reflect)); + game.resolve(Cast::new(source, player_id, target, Skill::Blast)); - // assert!(game.players[0].constructs[0].is_ko() == false); - // assert!(game.players[1].constructs[0].is_ko() == false); - // } + assert!(game.players[0].constructs[0].is_ko() == false); + assert!(game.players[1].constructs[0].is_ko() == false); + } - // // refer fixme.md (infinite counterattack loop) - // /*#[test] - // fn multi_counter_test() { - // let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let target_player_id = game.players[1].id; + // refer fixme.md (infinite counterattack loop) + /*#[test] + fn multi_counter_test() { + let mut game = create_2v2_test_game(); + let player_id = game.players[0].id; + let target_player_id = game.players[1].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; - // game.resolve(Cast::new(source, player_id, source, Skill::Counter)); - // game.resolve(Cast::new(target, target_player_id, target, Skill::Counter)); - // game.resolve(Cast::new(source, player_id, target, Skill::Attack)); + game.resolve(Cast::new(source, player_id, source, Skill::Counter)); + game.resolve(Cast::new(target, target_player_id, target, Skill::Counter)); + game.resolve(Cast::new(source, player_id, target, Skill::Attack)); - // assert!(game.players[0].constructs[0].is_ko() == false); - // assert!(game.players[1].constructs[0].is_ko() == false); - // }*/ + assert!(game.players[0].constructs[0].is_ko() == false); + assert!(game.players[1].constructs[0].is_ko() == false); + }*/ - // #[test] - // fn intercept_test() { + #[test] + fn intercept_test() { - // let mut game = create_2v2_test_game(); + let mut game = create_2v2_test_game(); - // let player_id = game.players[0].id; - // let other_player_id = game.players[1].id; + let player_id = game.players[0].id; + let other_player_id = game.players[1].id; - // let source = game.players[0].constructs[0].id; - // let target = game.players[1].constructs[0].id; - // let interceptor = game.players[1].constructs[1].id; + let source = game.players[0].constructs[0].id; + let target = game.players[1].constructs[0].id; + let interceptor = game.players[1].constructs[1].id; - // // Cast intercept - // game.resolve(Cast::new(interceptor, other_player_id, interceptor, Skill::Intercept)); - // // Enemy casts skill on target which as a teammate intercepting - // game.resolve(Cast::new(source, player_id, target, Skill::Attack)); - // // Intercepting teammate attacks someone on same team - // game.resolve(Cast::new(interceptor, other_player_id, target, Skill::Attack)); + // Cast intercept + game.resolve(Cast::new(interceptor, other_player_id, interceptor, Skill::Intercept)); + // Enemy casts skill on target which as a teammate intercepting + game.resolve(Cast::new(source, player_id, target, Skill::Attack)); + // Intercepting teammate attacks someone on same team + game.resolve(Cast::new(interceptor, other_player_id, target, Skill::Attack)); - // let last = game.resolutions.len() - 1; - // let resolutions = &game.resolutions[last]; + let last = game.resolutions.len() - 1; + let resolutions = &game.resolutions[last]; - // // There should be no damage events on the target - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation, display: _ } => - // construct == target && (amount > 0 || mitigation > 0) && colour == Colour::Red, - // _ => false, - // }) == false); + // There should be no damage events on the target + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation, display: _ } => + construct == target && (amount > 0 || mitigation > 0) && colour == Colour::Red, + _ => false, + }) == false); - // // Should be damage events on the interceptor - // assert!(resolutions.iter().any(|r| match r.event { - // Event::Damage { construct, colour, amount, mitigation, display: _ } => - // construct == interceptor && (amount > 0 || mitigation > 0) && colour == Colour::Red, - // _ => false, - // })); -} + // Should be damage events on the interceptor + assert!(resolutions.iter().any(|r| match r.event { + Event::Damage { construct, colour, amount, mitigation, display: _ } => + construct == interceptor && (amount > 0 || mitigation > 0) && colour == Colour::Red, + _ => false, + })); + } -/* #[test] fn tick_speed_tests() { let mut game = create_2v2_test_game(); @@ -1988,5 +1987,5 @@ mod tests { let last = game.resolutions.len() - 1; let resolutions = &game.resolutions[last]; assert!(Skill::SiphonTick == resolutions[0].skill); - }*/ -// } + } +} diff --git a/core/src/skill.rs b/core/src/skill.rs index 63f9329f..ab2224d7 100644 --- a/core/src/skill.rs +++ b/core/src/skill.rs @@ -1248,7 +1248,7 @@ fn absorption(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Absorption, duration: 3, meta: Some(EffectMeta::AddedDamage(0)) }, } ); -game.action(cast, + game.action(cast, Action::SetEffectMeta { construct: cast.source, effect: Effect::Absorption, @@ -1270,7 +1270,7 @@ fn absorption_plus(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Absorption, duration: 4, meta: Some(EffectMeta::AddedDamage(0)) }, } ); -game.action(cast, + game.action(cast, Action::SetEffectMeta { construct: cast.target, effect: Effect::Absorption, @@ -1292,7 +1292,7 @@ fn absorption_plus_plus(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Absorption, duration: 5, meta: Some(EffectMeta::AddedDamage(0)) }, } ); -game.action(cast, + game.action(cast, Action::SetEffectMeta { construct: cast.target, effect: Effect::Absorption, @@ -1316,7 +1316,7 @@ fn banish(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.target, stat: Stat::BlueLife }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Banish, duration: 2, meta: None } @@ -1342,7 +1342,7 @@ fn bash(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None } } ); -game.action(cast, + game.action(cast, Action::IncreaseCooldowns { construct: cast.target, turns: 1, @@ -1505,14 +1505,14 @@ fn decay(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)) }, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Decay, duration: 2, meta: Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTick }) }, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Decayed, duration: 1, meta: None }, // immunity to additional ticks @@ -1534,14 +1534,14 @@ fn decay_plus(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(35)) }, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTickPlus }) }, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Decayed, duration: 1, meta: None }, // immunity to additional ticks @@ -1563,14 +1563,14 @@ fn decay_plus_plus(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Wither, duration: 4, meta: Some(EffectMeta::Multiplier(20)) }, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTickPlusPlus }) }, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Decayed, duration: 1, meta: None }, // immunity to additional ticks @@ -1880,7 +1880,7 @@ fn purify(cast: Cast, game: &mut Game) { amount, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(150)) } @@ -1905,7 +1905,7 @@ fn purify_plus(cast: Cast, game: &mut Game) { amount, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(175)) } @@ -1930,7 +1930,7 @@ fn purify_plus_plus(cast: Cast, game: &mut Game) { amount, } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(200)) } @@ -2020,13 +2020,13 @@ fn siphon(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks } ); -game.action(cast, + game.action(cast, Action::Heal { construct: cast.source, colour: Colour::Green, @@ -2050,13 +2050,13 @@ fn siphon_plus(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks } ); -game.action(cast, + game.action(cast, Action::Heal { construct: cast.source, colour: Colour::Green, @@ -2080,13 +2080,13 @@ fn siphon_plus_plus(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks } ); -game.action(cast, + game.action(cast, Action::Heal { construct: cast.source, colour: Colour::Green, @@ -2109,7 +2109,7 @@ fn siphon_tick(cast: Cast, game: &mut Game) { effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks } ); -game.action(cast, + game.action(cast, Action::Heal { construct: cast.source, colour: Colour::Green, @@ -2184,16 +2184,16 @@ fn sleep_plus_plus(cast: Cast, game: &mut Game) { } fn silence(cast: Cast, game: &mut Game) { - let bp = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }); - let silences = game.value(Value::ColourSkills { construct: cast.target, colour: Colour::Blue }); - let amount = bp.pct(45usize.saturating_mul(silences)); - game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Silence, duration: 2, meta: None }, } ); + + let bp = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }); + let silences = game.value(Value::ColourSkills { construct: cast.target, colour: Colour::Blue }); + let amount = bp.pct(45usize.saturating_mul(silences)); game.action(cast, Action::Damage { construct: cast.target, @@ -2244,7 +2244,7 @@ fn triage(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Triaged, duration: 1, meta: None }, @@ -2267,7 +2267,7 @@ fn triage_plus(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Triaged, duration: 1, meta: None }, @@ -2290,7 +2290,7 @@ fn triage_plus_plus(cast: Cast, game: &mut Game) { amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()), } ); -game.action(cast, + game.action(cast, Action::Effect { construct: cast.target, effect: ConstructEffect { effect: Effect::Triaged, duration: 1, meta: None }, @@ -2658,6 +2658,3 @@ mod tests { // assert!(y.disabled(Skill::Heal).is_some()); // } } - - // // haste_strike_check(game) -