First Strike and Double Strike
Overview
First Strike and Double Strike are two of the most important keyword abilities in Magic: The Gathering that modify how creatures deal combat damage. They create a special combat damage step that occurs before the regular combat damage step.
First Strike
First Strike allows creatures to deal combat damage before creatures without First Strike.
Rules
- Creatures with First Strike deal damage in the "first strike combat damage step" which happens before the regular combat damage step
- Creatures without First Strike or Double Strike don't deal or receive combat damage in this step
- If no creatures with First Strike or Double Strike are involved in combat, this step is skipped entirely
- First Strike doesn't provide any additional advantage in creature-to-creature combat outside of combat damage timing
Implementation
#![allow(unused)] fn main() { #[derive(Component)] pub struct FirstStrike; pub fn handle_first_strike_damage( combat_state: Res<CombatState>, creatures: Query<(Entity, &Creature, &Attack, &BlockedBy, Option<&FirstStrike>, Option<&DoubleStrike>)>, mut health: Query<&mut Health>, mut damage_events: EventWriter<DamageEvent>, ) { // Identify creatures with First Strike or Double Strike let first_strikers = creatures.iter() .filter(|(_, _, _, _, first_strike, double_strike)| first_strike.is_some() || double_strike.is_some()); // Process First Strike damage for (entity, creature, attack, blocked_by, _, _) in first_strikers { // Calculate and assign damage // ... } } }
Double Strike
Double Strike combines the benefits of First Strike with the ability to deal damage again in the regular combat damage step.
Rules
- Creatures with Double Strike deal combat damage in both the first strike combat damage step AND the regular combat damage step
- This effectively allows them to deal twice their power in damage during combat
- If a Double Strike creature is removed from combat after the first strike step (e.g., by being destroyed), it won't deal damage in the regular step
- Double Strike doesn't increase the amount of damage dealt in each individual step - it allows the creature to deal damage in both steps
Implementation
#![allow(unused)] fn main() { #[derive(Component)] pub struct DoubleStrike; pub fn handle_regular_combat_damage( combat_state: Res<CombatState>, creatures: Query<(Entity, &Creature, &Attack, &BlockedBy, Option<&DoubleStrike>)>, mut health: Query<&mut Health>, mut damage_events: EventWriter<DamageEvent>, ) { // Process Regular Combat Damage for (entity, creature, attack, blocked_by, _) in creatures.iter() { // All creatures without First Strike always deal damage here // Creatures with Double Strike also deal damage here // ... } } }
Interactions with Other Abilities
First Strike and Double Strike interact with other combat abilities in specific ways:
- Deathtouch: A creature with both First Strike/Double Strike and Deathtouch can destroy blocking/blocked creatures before they deal damage
- Lifelink: A creature with both Double Strike and Lifelink will cause its controller to gain life twice
- Trample: A creature with both First Strike/Double Strike and Trample can deal excess damage to players in both damage steps
Example Combat Scenarios
First Strike vs. Non-First Strike
When a 2/2 creature with First Strike blocks or is blocked by a 2/2 creature without First Strike:
- First Strike creature deals 2 damage in the first strike damage step
- The other creature is destroyed before it can deal damage in the regular damage step
Double Strike vs. Regular Creature
When a 2/2 creature with Double Strike blocks or is blocked by a 3/3 creature without First Strike:
- Double Strike creature deals 2 damage in the first strike damage step
- The 3/3 creature survives with 1 toughness remaining
- Both creatures deal damage in the regular damage step (2 more from Double Strike, 3 from the regular creature)
- Both creatures are destroyed