Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions lib/magic/cards/terror_of_the_peaks.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
module Magic
module Cards
TerrorOfThePeaks = Creature("Terror of the Peaks") do
cost generic: 3, red: 2
creature_type "Dragon"
keywords :flying
power 5
toughness 4
end

class TerrorOfThePeaks < Creature
class WardTrigger < TriggeredAbility
def should_perform?
opponents.include?(event.player) && event.targets.include?(actor)
end

def call
trigger_effect(:lose_life, target: event.player, life: 3)
end
end

class CreatureEnteredTrigger < TriggeredAbility::EnterTheBattlefield
def should_perform?
another_creature? && under_your_control?
end

def call
game.choices.add(TerrorOfThePeaks::DamageChoice.new(
actor: actor,
power: event.permanent.power
))
end
end

class DamageChoice < Magic::Choice::Targeted
def initialize(actor:, power:)
super(actor: actor)
@power = power
end

def choices
game.any_target
end

def choice_amount
1
end

def resolve!(target:)
trigger_effect(:deal_damage, damage: @power, target: target)
end
end

def event_handlers
{
Events::SpellCast => WardTrigger,
Events::EnteredTheBattlefield => CreatureEnteredTrigger
}
end
end
end
end
68 changes: 68 additions & 0 deletions spec/cards/terror_of_the_peaks_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Magic::Cards::TerrorOfThePeaks do
include_context "two player game"

let!(:terror) { ResolvePermanent("Terror Of The Peaks", owner: p1) }

it "is a 5/4 flying dragon" do
expect(terror.power).to eq(5)
expect(terror.toughness).to eq(4)
expect(terror).to be_flying
expect(terror.card.types).to include("Dragon")
end

context "when an opponent casts a spell targeting it" do
before do
p2.add_mana(red: 1)
action = cast_action(card: Card("Lightning Bolt", owner: p2), player: p2)
action.pay_mana(red: 1)
action.targeting(terror)
game.take_action(action)
end

it "the opponent loses 3 life" do
expect(p2.life).to eq(17)
end
end

context "when the controller casts a spell targeting it" do
before do
p1.add_mana(red: 2)
action = cast_action(card: Card("Sure Strike", owner: p1), player: p1)
action.pay_mana(generic: { red: 1 }, red: 1)
action.targeting(terror)
game.take_action(action)
end

it "the controller does not lose life" do
expect(p1.life).to eq(20)
end
end

context "when another creature you control enters" do
let!(:wood_elves) { ResolvePermanent("Wood Elves", owner: p1) }

it "adds a damage choice targeting any target" do
choice = game.choices.first
expect(choice).to be_a(described_class::DamageChoice)
expect(choice.choices).to include(p2)
expect(choice.choices).to include(wood_elves)
end

it "deals damage equal to the entering creature's power to the chosen target" do
game.resolve_choice!(target: p2)
expect(p2.life).to eq(19) # Wood Elves power = 1
end
end

context "when an opponent's creature enters" do
let!(:wood_elves) { ResolvePermanent("Wood Elves", owner: p2) }

it "does not trigger" do
expect(game.choices).to be_empty
end
end
end
Loading