Skip to content

Commit

Permalink
Merge branch 'master' into animatesub
Browse files Browse the repository at this point in the history
  • Loading branch information
tool4ever authored Jan 23, 2025
2 parents 8b164c7 + 2f39011 commit 248cde6
Show file tree
Hide file tree
Showing 143 changed files with 855 additions and 445 deletions.
8 changes: 8 additions & 0 deletions .github/full_throttle.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Name:Full Throttle
ManaCost:4 R R
Types:Sorcery
A:SP$ AddPhase | ExtraPhase$ Combat | NumPhases$ 2 | ConditionPhases$ Main1,Main2 | SubAbility$ DBEffect | SpellDescription$ After this main phase, there are two additional combat phases. At the beginning of each combat this turn, untap all creatures that attacked this turn.
SVar:DBEffect:DB$ Effect | Triggers$ TrigPhase
SVar:TrigPhase:Mode$ Phase | Phase$ BeginCombat | Execute$ TrigUntapAll | TriggerDescription$ At the beginning of each combat this turn, untap all creatures that attacked this turn.
SVar:TrigUntapAll:DB$ UntapAll | ValidCards$ Creature.attackedThisTurn
Oracle:After this main phase, there are two additional combat phases.\nAt the beginning of each combat this turn, untap all creatures that attacked this turn.
5 changes: 0 additions & 5 deletions forge-game/src/main/java/forge/game/CardTraitBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -548,11 +548,6 @@ else if ("None".equalsIgnoreCase(params.get("Revolt"))) {
}
}

if (params.containsKey("ActivateNoLoyaltyAbilitiesCondition")) {
final Player active = game.getPhaseHandler().getPlayerTurn();
return !active.getActivateLoyaltyAbilityThisTurn(this);
}

if (params.containsKey("ClassLevel")) {
final int level = getHostCard().getClassLevel();
final int levelMin = Integer.parseInt(params.get("ClassLevel"));
Expand Down
4 changes: 0 additions & 4 deletions forge-game/src/main/java/forge/game/player/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -1890,10 +1890,6 @@ public final void setBeenDealtCombatDamageSinceLastTurn(final boolean b) {
beenDealtCombatDamageSinceLastTurn = b;
}

public final boolean getActivateLoyaltyAbilityThisTurn(CardTraitBase ctb) {
return !CardUtil.getThisTurnActivated("Activated.Loyalty+Planeswalker+YouCtrl", ctb.getHostCard(), ctb, this).isEmpty();
}

public final List<Card> getCreaturesAttackedThisTurn() {
List<Card> result = Lists.newArrayList(Iterables.concat(attackedThisTurn.values()));
return result;
Expand Down
14 changes: 8 additions & 6 deletions forge-gui-android/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
<cardforge.user>user</cardforge.user>
<cardforge.pass>pass</cardforge.pass>
<cardforge.server>ftp.cardforge.org</cardforge.server>
<androidBuildTools>35.0.0</androidBuildTools>
<androidPlatform>35</androidPlatform>
</properties>

<parent>
Expand Down Expand Up @@ -262,8 +264,8 @@
<debug>true</debug>
</sign>
<sdk>
<platform>35</platform>
<buildTools>35.0.0</buildTools>
<platform>${androidPlatform}</platform>
<buildTools>${androidBuildTools}</buildTools>
</sdk>
<dexForceJumbo>true</dexForceJumbo>
<assetsDirectory>${project.basedir}/assets</assetsDirectory>
Expand Down Expand Up @@ -392,8 +394,8 @@
<debug>false</debug>
</sign>
<sdk>
<platform>35</platform>
<buildTools>35.0.0</buildTools>
<platform>${androidPlatform}</platform>
<buildTools>${androidBuildTools}</buildTools>
</sdk>
<zipalign>
<verbose>false</verbose>
Expand Down Expand Up @@ -609,8 +611,8 @@
<debug>false</debug>
</sign>
<sdk>
<platform>35</platform>
<buildTools>35.0.0</buildTools>
<platform>${androidPlatform}</platform>
<buildTools>${androidBuildTools}</buildTools>
</sdk>
<zipalign>
<verbose>false</verbose>
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/a/abuelos_awakening.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Name:Abuelo's Awakening
ManaCost:X 3 W
Types:Sorcery
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Artifact.YouOwn,Enchantment.nonAura+YouOwn | TgtPrompt$ Select an Artifact or non-Aura enchantment | StaticEffect$ Animate | WithCountersType$ P1P1 | WithCountersAmount$ X | SpellDescription$ Return target artifact or non-Aura enchantment card from your graveyard to the battlefield with X additional +1/+1 counters on it. It's a 1/1 Spirit creature with flying in addition to its other types.
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Artifact.YouOwn,Enchantment.nonAura+YouOwn | TgtPrompt$ Select target artifact or non-Aura enchantment in your graveyard | StaticEffect$ Animate | WithCountersType$ P1P1 | WithCountersAmount$ X | SpellDescription$ Return target artifact or non-Aura enchantment card from your graveyard to the battlefield with X additional +1/+1 counters on it. It's a 1/1 Spirit creature with flying in addition to its other types.
SVar:Animate:Mode$ Continuous | Affected$ Card.IsRemembered | AddType$ Creature & Spirit | SetPower$ 1 | SetToughness$ 1 | AddKeyword$ Flying
SVar:X:Count$xPaid
DeckHas:Ability$Graveyard|Counters & Type$Spirit
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/a/acidic_slime.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ Types:Creature Ooze
PT:2/2
K:Deathtouch
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters, destroy target artifact, enchantment, or land.
SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Artifact,Enchantment,Land | TgtPrompt$ Select an artifact, enchantment, or land.
SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Artifact,Enchantment,Land | TgtPrompt$ Select target artifact, enchantment, or land
SVar:PlayMain1:TRUE
Oracle:Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)\nWhen Acidic Slime enters, destroy target artifact, enchantment, or land.
4 changes: 2 additions & 2 deletions forge-gui/res/cardsfolder/a/acolytes_reward.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Name:Acolyte's Reward
ManaCost:1 W
Types:Instant
A:SP$ Pump | ValidTgts$ Any | TgtPrompt$ Select any target to damage with shield effect | IsCurse$ True | SubAbility$ AcolytesPrevention | StackDescription$ SpellDescription | AILogic$ Never | SpellDescription$ Prevent the next X damage that would be dealt to target creature this turn, where X is your devotion to white. If damage is prevented this way, CARDNAME deals that much damage to any target.
SVar:AcolytesPrevention:DB$ PreventDamage | ValidTgts$ Creature | TgtPrompt$ Select a creature to prevent damage to | Amount$ X | PreventionSubAbility$ AcolytesRetribution | ShieldEffectTarget$ ParentTarget | StackDescription$ None
A:SP$ Pump | ValidTgts$ Any | TgtPrompt$ Select any target to redirect prevented damage to | IsCurse$ True | SubAbility$ AcolytesPrevention | StackDescription$ SpellDescription | AILogic$ Never | SpellDescription$ Prevent the next X damage that would be dealt to target creature this turn, where X is your devotion to white. If damage is prevented this way, CARDNAME deals that much damage to any target.
SVar:AcolytesPrevention:DB$ PreventDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature to prevent damage dealt to | Amount$ X | PreventionSubAbility$ AcolytesRetribution | ShieldEffectTarget$ ParentTarget | StackDescription$ None
SVar:AcolytesRetribution:DB$ DealDamage | Defined$ ShieldEffectTarget | NumDmg$ PreventedDamage | SpellDescription$ CARDNAME deals damage to target creature or player for each damage prevented this way.
SVar:X:Count$Devotion.White
AI:RemoveDeck:All
Expand Down
8 changes: 4 additions & 4 deletions forge-gui/res/cardsfolder/a/alaundo_the_seer.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ Name:Alaundo the Seer
ManaCost:2 G U
Types:Legendary Creature Human Shaman
PT:3/5
A:AB$ Draw | Cost$ T | SubAbility$ DBExile | StackDescription$ SpellDescription | SpellDescription$ Draw a card, then exile a card from your hand and put a number of time counters on it equal to its mana value. It gains "When the last time counter is removed from this card, if it's exiled, you may cast it without paying its mana cost. If you cast a creature spell this way, it gains haste until end of turn." Then remove a time counter from each other card you own in exile.
SVar:DBExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | TgtPrompt$ Select a card to exile with a number of time counters equal to its mana value | WithCountersType$ TIME | WithCountersAmount$ X | SubAbility$ DBAddTrigger | RememberChanged$ True | Mandatory$ True
A:AB$ Draw | Cost$ T | SubAbility$ DBExile | StackDescription$ REP Draw_{p:You} draws & then exile_then exiles & from your_from their & and put_and puts & Then remove_Then {p:You} removes & you own_they own | SpellDescription$ Draw a card, then exile a card from your hand and put a number of time counters on it equal to its mana value. It gains "When the last time counter is removed from this card, if it's exiled, you may cast it without paying its mana cost. If you cast a creature spell this way, it gains haste until end of turn." Then remove a time counter from each other card you own in exile.
SVar:DBExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | SelectPrompt$ Select a card in your hand to exile with a number of time counters equal to its mana value | WithCountersType$ TIME | WithCountersAmount$ X | SubAbility$ DBAddTrigger | RememberChanged$ True | Mandatory$ True | StackDescription$ None
SVar:X:Remembered$CardManaCost
SVar:DBAddTrigger:DB$ Animate | Defined$ Remembered | Triggers$ TWhenLastTimeCounterRemoved | Duration$ Permanent | SubAbility$ DBRemoveTimeCounterOtherCardsInExile
SVar:DBAddTrigger:DB$ Animate | Defined$ Remembered | Triggers$ TWhenLastTimeCounterRemoved | Duration$ Permanent | StackDescription$ None | SubAbility$ DBRemoveTimeCounterOtherCardsInExile
SVar:TWhenLastTimeCounterRemoved:Mode$ CounterRemoved | ValidCard$ Card.Self+counters_EQ0_TIME | TriggerZones$ Exile | CounterType$ TIME | Execute$ DBCastWithoutPayingManaCost | TriggerDescription$ When the last time counter is removed from this card, if it's exiled, you may cast it without paying its mana cost. If you cast a creature spell this way, it gains haste until end of turn.
SVar:DBCastWithoutPayingManaCost:DB$ Play | Valid$ Card.Self | ValidSA$ Spell | ValidZone$ Exile | Destination$ Battlefield | WithoutManaCost$ True | Optional$ True | SubAbility$ DBGiveHaste
SVar:DBGiveHaste:DB$ Pump | Defined$ Self | KW$ Haste | ConditionDefined$ Self | ConditionPresent$ Card.Creature | PumpZone$ Stack
SVar:DBRemoveTimeCounterOtherCardsInExile:DB$ RemoveCounterAll | ValidCards$ Card.YouOwn+IsNotRemembered | ValidZone$ Exile | CounterType$ TIME | CounterNum$ 1 | SubAbility$ DBCleanUp
SVar:DBRemoveTimeCounterOtherCardsInExile:DB$ RemoveCounterAll | ValidCards$ Card.YouOwn+IsNotRemembered | ValidZone$ Exile | CounterType$ TIME | CounterNum$ 1 | StackDescription$ None | SubAbility$ DBCleanUp
SVar:DBCleanUp:DB$ Cleanup | ClearRemembered$ True
DeckHints:Keyword$Suspend
Oracle:{T}:Draw a card, then exile a card from your hand and put a number of time counters on it equal to its mana value. It gains "When the last time counter is removed from this card, if it's exiled, you may cast it without paying its mana cost. If you cast a creature spell this way, it gains haste until end of turn." Then remove a time counter from each other card you own in exile.
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/a/avalanche_riders.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ PT:2/2
K:Haste
K:Echo:3 R
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters, destroy target land.
SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land | TgtPrompt$ Select a land.
SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land
Oracle:Haste\nEcho {3}{R} (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)\nWhen Avalanche Riders enters, destroy target land.
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/b/burning_rune_demon.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for exactly two cards not named Burning-Rune Demon that have different names. If you do, reveal those cards. An opponent chooses one of them. Put the chosen card into your hand and the other into your graveyard, then shuffle.
SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.notnamedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer
SVar:DBChoosePlayer:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | SubAbility$ DBChangeZone1
SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Chooser$ ChosenPlayer | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card for the hand | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None
SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Chooser$ ChosenPlayer | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to be put into the hand of CARDNAME's controller | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None
SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | Shuffle$ True | StackDescription$ None | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenPlayer$ True
DeckHas:Ability$Graveyard
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/c/caldera_breaker.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ K:Trample
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, exile all Mountain cards from your library. When you do, CARDNAME deals that much damage to target creature or planeswalker an opponent controls.
SVar:TrigChangeZone:DB$ ChangeZoneAll | Origin$ Library | Destination$ Exile | ChangeType$ Mountain.YouOwn | RememberChanged$ True | SubAbility$ DBImmediateTrig
SVar:DBImmediateTrig:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ TrigDamage | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ When you do, CARDNAME deals that much damage to target creature or planeswalker an opponent controls.
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl | TgtPrompt$ Select a creature or planeswalker an opponent controls | NumDmg$ X
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl | TgtPrompt$ Select target creature or planeswalker an opponent controls | NumDmg$ X
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigChangeZoneAll | TriggerDescription$ When CARDNAME dies, put all cards exiled with it onto the battlefield under their owner's control. Conjure four cards named Volcanic Geyser into your library, then shuffle.
SVar:TrigChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Card.ExiledWithSource | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBConjure
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/c/cemetery_gatekeeper.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Types:Creature Vampire
PT:2/1
K:First Strike
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters, exile a card from a graveyard.
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | SelectPrompt$ Select a card from a graveyard | Mandatory$ True | Hidden$ True | AILogic$ ExilePreference:MostProminentOppType
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | SelectPrompt$ Select a card in a graveyard | Mandatory$ True | Hidden$ True | AILogic$ ExilePreference:MostProminentOppType
T:Mode$ LandPlayed | ValidCard$ Land.sharesCardTypeWith ValidExile Card.ExiledWithSource | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a player plays a land or casts a spell, if it shares a card type with the exiled card, CARDNAME deals 2 damage to that player.
T:Mode$ SpellCast | ValidCard$ Card.sharesCardTypeWith ValidExile Card.ExiledWithSource | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDamage | Secondary$ True | TriggerDescription$ Whenever a player plays a land or casts a spell, if it shares a card type with the exiled card, CARDNAME deals 2 damage to that player.
SVar:TrigDamage:DB$ DealDamage | NumDmg$ 2 | Defined$ TriggeredCardController | ConditionDefined$ TriggeredCardLKICopy | ConditionPresent$ Card.sharesCardTypeWith ValidExile Card.ExiledWithSource
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/c/cemetery_illuminator.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ PT:2/3
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters or attacks, exile a card from a graveyard.
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigExile | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters or attacks, exile a card from a graveyard.
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | SelectPrompt$ Select a card from a graveyard | Mandatory$ True | Hidden$ True | Imprint$ True | AILogic$ ExilePreference:MostProminentOwnType
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | SelectPrompt$ Select a card in a graveyard | Mandatory$ True | Hidden$ True | Imprint$ True | AILogic$ ExilePreference:MostProminentOwnType
S:Mode$ Continuous | Affected$ Card.TopLibrary+YouCtrl | AffectedZone$ Library | MayLookAt$ You | Description$ You may look at the top card of your library any time.
S:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.nonLand+TopLibrary+YouCtrl+sharesCardTypeWith Imprinted.ExiledWithSource | AffectedZone$ Library | MayPlay$ True | MayPlayLimit$ 1 | Description$ Once each turn, you may cast a spell from the top of your library if it shares a card type with a card exiled with CARDNAME.
DeckHas:Ability$Graveyard
Expand Down
2 changes: 1 addition & 1 deletion forge-gui/res/cardsfolder/c/cemetery_protector.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Types:Creature Human Soldier
PT:3/4
K:Flash
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters, exile a card from a graveyard.
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | SelectPrompt$ Select a card from a graveyard | Mandatory$ True | Hidden$ True | Imprint$ True | AILogic$ ExilePreference:Land
SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | SelectPrompt$ Select a card in a graveyard | Mandatory$ True | Hidden$ True | Imprint$ True | AILogic$ ExilePreference:Land
T:Mode$ LandPlayed | ValidCard$ Land.YouOwn+sharesCardTypeWith Imprinted.ExiledWithSource | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you play a land or cast a spell, if it shares a card type with the exiled card, create a 1/1 white Human creature token.
T:Mode$ SpellCast | ValidCard$ Card.sharesCardTypeWith Imprinted.ExiledWithSource | ValidActivatingPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever you play a land or cast a spell, if it shares a card type with the exiled card, create a 1/1 white Human creature token.
SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_human
Expand Down
Loading

0 comments on commit 248cde6

Please sign in to comment.