Skip to content

Commit

Permalink
Add Shalai's Acolyte
Browse files Browse the repository at this point in the history
  • Loading branch information
radar committed Oct 20, 2024
1 parent c6f3f3d commit 26fd5a0
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 18 deletions.
2 changes: 1 addition & 1 deletion lib/magic/cards/ajanis_pridemate.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class AjanisPridemate < Creature

class LifeGain < TriggeredAbility
def should_perform?
event.player == controller
you?
end

def call
Expand Down
30 changes: 30 additions & 0 deletions lib/magic/cards/shalais_acolyte.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
module Magic
module Cards
ShalaisAcolyte = Creature("Shalai's Acolyte") do
cost generic: 4, white: 1
creature_type "Angel"

power 3
toughness 4

kicker_cost generic: 1, green: 1
end

class ShalaisAcolyte < Creature
class ETB < TriggeredAbility::EnterTheBattlefield
def perform
if actor.kicked?
actor.trigger_effect(
:add_counter,
target: actor,
counter_type: Counters::Plus1Plus1,
amount: 2
)
end
end
end

def etb_triggers = [ETB]
end
end
end
27 changes: 10 additions & 17 deletions lib/magic/cards/verduran_enchantress.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,33 +9,26 @@ module Cards

class VerduranEnchantress < Creature
class Choice < Magic::Choice::May
attr_reader :owner
def resolve!
owner.draw!
end
end

def initialize(owner:)
@owner = owner
class SpellCastTrigger < TriggeredAbility
def should_perform?
you? && event.type?("Enchantment")
end

def resolve!
owner.draw!
def call
game.add_choice(VerduranEnchantress::Choice.new(actor: actor))
end
end

def event_handlers
{
Events::SpellCast => ->(receiver, event) do
return if event.player != receiver.controller
return unless event.spell.type?("Enchantment")

game
.choices
.add(
self.class::Choice.new(owner: receiver.controller)
)
end
Events::SpellCast => SpellCastTrigger
}
end


end
end
end
4 changes: 4 additions & 0 deletions lib/magic/events/spell_cast.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ def initialize(spell:, player:)
@spell = spell
@player = player
end

def type?(type)
spell.types.include?(type)
end
end
end
end
4 changes: 4 additions & 0 deletions lib/magic/triggered_ability.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ def initialize(event:, actor:)
@actor = actor
end

def you?
controller == event.player
end

def perform!
return unless should_perform?
call
Expand Down
35 changes: 35 additions & 0 deletions spec/cards/shalais_acolyte_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'spec_helper'

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

subject { Card("Shalai's Acolyte") }

context "resolution" do
it "kicker cost paid" do
p1.add_mana(white: 6, green: 1)
action = cast_action(card: subject, player: p1)
action.pay_mana(white: 1, generic: { white: 4 })
action.pay_kicker(generic: { white: 1 }, green: 1)
game.take_action(action)
game.tick!

permanent = p1.creatures.by_name("Shalai's Acolyte").first
expect(permanent.power).to eq(5)
expect(permanent.toughness).to eq(6)
expect(permanent.counters.of_type(Magic::Counters::Plus1Plus1).count).to eq(2)
end

it "kicker cost not paid" do
p1.add_mana(white: 5)
action = cast_action(card: subject, player: p1)
action.pay_mana(white: 1, generic: { white: 4 })
game.take_action(action)
game.tick!

permanent = p1.creatures.by_name("Shalai's Acolyte").first
expect(permanent.power).to eq(3)
expect(permanent.toughness).to eq(4)
end
end
end

0 comments on commit 26fd5a0

Please sign in to comment.