manabrew_engine/staticability/
mod.rs1pub mod layer;
2pub mod static_ability;
3pub mod static_ability_activate_ability_as_if_haste;
4pub mod static_ability_adapt;
5pub mod static_ability_alternative_cost;
6pub mod static_ability_assign_combat_damage_as_unblocked;
7pub mod static_ability_assign_no_combat_damage;
8pub mod static_ability_attack_restrict;
9pub mod static_ability_block_restrict;
10pub mod static_ability_can_attack_defender;
11pub mod static_ability_cant_attach;
12pub mod static_ability_cant_attack_block;
13pub mod static_ability_cant_be_cast;
14pub mod static_ability_cant_be_copied;
15pub mod static_ability_cant_be_suspected;
16pub mod static_ability_cant_become_monarch;
17pub mod static_ability_cant_change_day_time;
18pub mod static_ability_cant_crew;
19pub mod static_ability_cant_discard;
20pub mod static_ability_cant_draw;
21pub mod static_ability_cant_exile;
22pub mod static_ability_cant_gain_lose_pay_life;
23pub mod static_ability_cant_phase;
24pub mod static_ability_cant_put_counter;
25pub mod static_ability_cant_regenerate;
26pub mod static_ability_cant_sacrifice;
27pub mod static_ability_cant_target;
28pub mod static_ability_cant_transform;
29pub mod static_ability_cant_venture;
30pub mod static_ability_cast_with_flash;
31pub mod static_ability_colorless_damage_source;
32pub mod static_ability_combat_damage_toughness;
33pub mod static_ability_continuous;
34pub mod static_ability_cost_change;
35pub mod static_ability_counters_remain;
36pub mod static_ability_devotion;
37pub mod static_ability_disable_triggers;
38pub mod static_ability_exhaust;
39pub mod static_ability_flip_coin_mod;
40pub mod static_ability_gain_life_radiation;
41pub mod static_ability_ignore_hexproof_shroud;
42pub mod static_ability_ignore_landwalk;
43pub mod static_ability_ignore_legend_rule;
44pub mod static_ability_infect_damage;
45pub mod static_ability_layer;
46pub mod static_ability_mana_convert;
47pub mod static_ability_max_counter;
48pub mod static_ability_mode;
49pub mod static_ability_must_attack;
50pub mod static_ability_must_block;
51pub mod static_ability_must_target;
52pub mod static_ability_no_cleanup_damage;
53pub mod static_ability_num_loyalty_act;
54pub mod static_ability_panharmonicon;
55pub mod static_ability_plot_zone;
56pub mod static_ability_surveil_num;
57pub mod static_ability_tap_power_value;
58pub mod static_ability_turn_phase_reversed;
59pub mod static_ability_unspent_mana;
60pub mod static_ability_untap_other_player;
61pub mod static_ability_view;
62pub mod static_ability_wither_damage;
63
64use forge_foundation::ZoneType;
65
66use crate::card::Card;
67use crate::game::GameState;
68use crate::ids::PlayerId;
69
70pub use self::static_ability::*;
71pub use layer::*;
72
73pub fn create(params: &str) -> Option<StaticAbility> {
76 static_ability::parse_static_ability(params)
77}
78
79pub fn apply_continuous_ability_before(
82 st_ab: &StaticAbility,
83 source: &Card,
84 game: &mut GameState,
85 layer: Layer,
86) {
87 static_ability_continuous::apply_continuous_ability(st_ab, source, game, layer);
88}
89
90pub fn apply_continuous_ability(
92 st_ab: &StaticAbility,
93 source: &Card,
94 game: &mut GameState,
95 layer: Layer,
96) {
97 static_ability_continuous::apply_continuous_ability(st_ab, source, game, layer);
98}
99
100pub fn has_attack_cost(st_ab: &StaticAbility, attacker: &Card, source: &Card) -> bool {
102 if !st_ab.check_mode(&StaticMode::OptionalAttackCost) {
103 return false;
104 }
105 static_ability_cant_attack_block::get_attack_cost(st_ab, attacker, source.controller, source)
106 .is_some()
107}
108
109pub fn check_mode(st_ab: &StaticAbility, mode: &StaticMode) -> bool {
111 st_ab.check_mode(mode)
112}
113
114pub fn check_conditions(st_ab: &StaticAbility, source: &Card, game: &GameState) -> bool {
116 st_ab.check_conditions(source, game)
117}
118
119pub fn zones_check(st_ab: &StaticAbility, source_zone: ZoneType) -> bool {
121 st_ab.zones_check(source_zone)
122}
123
124pub fn add_ignore_effect_players(st_ab: &mut StaticAbility, player: PlayerId) {
126 st_ab.add_ignore_effect_players(player);
127}
128
129pub fn clear_ignore_effects(st_ab: &mut StaticAbility) {
131 st_ab.clear_ignore_effects();
132}
133
134pub fn inc_may_play_turn(st_ab: &mut StaticAbility) {
136 st_ab.inc_may_play_turn();
137}
138
139pub fn reset_may_play_turn(st_ab: &mut StaticAbility) {
141 st_ab.reset_may_play_turn();
142}
143
144pub fn copy(st_ab: &StaticAbility) -> StaticAbility {
146 st_ab.copy()
147}