tests back

This commit is contained in:
ntr 2019-12-13 15:05:18 +10:00
parent bf4038b09d
commit f63a8b3f8f
2 changed files with 276 additions and 280 deletions

View File

@ -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);
}*/
// }
}
}

View File

@ -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)