manabrew_engine/ability/effects/
damage_prevent_effect.rs1use forge_foundation::ZoneType;
7
8use super::EffectContext;
9use crate::card::card_util;
10
11pub fn run(game: &mut crate::game::GameState, card_id: crate::ids::CardId) {
16 if game.card(card_id).zone == ZoneType::Battlefield {
17 game.card_mut(card_id).damage_prevention = 0;
18 }
19}
20
21#[manabrew_engine_macros::spell_effect(DamagePreventEffect)]
25fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
26 let amount = super::resolve_numeric_svar(ctx.game, sa, "Amount", 1).max(0);
27
28 if let Some(pid) = sa.target_chosen.target_player {
30 ctx.game.player_add_damage_prevention(pid, amount);
31 return;
32 }
33
34 let mut targets = sa.target_chosen.target_card.into_iter().collect::<Vec<_>>();
36 targets.extend(card_util::get_radiance(ctx.game, sa).iter().copied());
37 targets.sort_unstable_by_key(|cid| cid.0);
38 targets.dedup();
39 if !targets.is_empty() {
40 for cid in targets {
41 if ctx.game.card(cid).zone == ZoneType::Battlefield {
42 ctx.game.card_mut(cid).damage_prevention += amount;
43 }
44 }
45 return;
46 }
47
48 if let Some(def) = sa.defined() {
50 if def.eq_ignore_ascii_case("You") || def.eq_ignore_ascii_case("Self") {
51 let controller = sa.activating_player;
52 ctx.game.player_add_damage_prevention(controller, amount);
53 }
54 }
55}