mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Remember can now handle Targeted Players.
- Convert Laquatus's Champion to Script
This commit is contained in:
@@ -1,8 +1,12 @@
|
|||||||
Name:Laquatus's Champion
|
Name:Laquatus's Champion
|
||||||
ManaCost:4 B B
|
ManaCost:4 B B
|
||||||
Types:Creature Nightmare Horror
|
Types:Creature Nightmare Horror
|
||||||
Text:When Laquatus's Champion enters the battlefield, target player loses 6 life.\r\nWhen Laquatus's Champion leaves the battlefield, that player gains 6 life.
|
Text:no text
|
||||||
PT:6/3
|
PT:6/3
|
||||||
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, target player loses 6 life.
|
||||||
|
SVar:TrigLoseLife:DB$LoseLife | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 6 | RememberTargets$ True | ForgetOtherTargets$ True
|
||||||
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME leaves the battlefield, that player gains 6 life.
|
||||||
|
SVar:TrigGainLife:DB$GainLife | Defined$ Remembered | LifeAmount$ 6
|
||||||
A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME.
|
A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME.
|
||||||
SVar:Rarity:Rare
|
SVar:Rarity:Rare
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/laquatuss_champion.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/laquatuss_champion.jpg
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class Card extends MyObservable {
|
|||||||
private ArrayList<Ability_Mana> manaAbility = new ArrayList<Ability_Mana>();
|
private ArrayList<Ability_Mana> manaAbility = new ArrayList<Ability_Mana>();
|
||||||
private ArrayList<Card_Color> cardColor = new ArrayList<Card_Color>();
|
private ArrayList<Card_Color> cardColor = new ArrayList<Card_Color>();
|
||||||
|
|
||||||
private ArrayList<Card> rememberedCards = new ArrayList<Card>();
|
private ArrayList<Object> rememberedObjects = new ArrayList<Object>();
|
||||||
private ArrayList<Card> imprintedCards = new ArrayList<Card>();
|
private ArrayList<Card> imprintedCards = new ArrayList<Card>();
|
||||||
|
|
||||||
private HashMap<Card, Integer> receivedDamageFromThisTurn = new HashMap<Card, Integer>();
|
private HashMap<Card, Integer> receivedDamageFromThisTurn = new HashMap<Card, Integer>();
|
||||||
@@ -190,19 +190,19 @@ public class Card extends MyObservable {
|
|||||||
|
|
||||||
private int abilityUsed; //How many times has this ability been used?
|
private int abilityUsed; //How many times has this ability been used?
|
||||||
|
|
||||||
public void addRemembered(Card c)
|
public void addRemembered(Object o)
|
||||||
{
|
{
|
||||||
rememberedCards.add(c);
|
rememberedObjects.add(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Card> getRemembered()
|
public ArrayList<Object> getRemembered()
|
||||||
{
|
{
|
||||||
return rememberedCards;
|
return rememberedObjects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearRemembered()
|
public void clearRemembered()
|
||||||
{
|
{
|
||||||
rememberedCards.clear();
|
rememberedObjects.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addImprinted(Card c) {
|
public void addImprinted(Card c) {
|
||||||
@@ -1212,14 +1212,20 @@ public class Card extends MyObservable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Remembered cards
|
//Remembered cards
|
||||||
if(rememberedCards.size() > 0)
|
if(rememberedObjects.size() > 0){
|
||||||
sb.append("\r\nRemembered: \r\n");
|
sb.append("\r\nRemembered: \r\n");
|
||||||
for(Card c : rememberedCards)
|
for(Object o : rememberedObjects){
|
||||||
{
|
if (o instanceof Card){
|
||||||
sb.append(c.getName() + "(");
|
Card c = (Card)o;
|
||||||
sb.append(c.getUniqueNumber());
|
sb.append(c.getName());
|
||||||
sb.append(")");
|
sb.append("(");
|
||||||
sb.append("\r\n");
|
sb.append(c.getUniqueNumber());
|
||||||
|
sb.append(")");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sb.append(o.toString());
|
||||||
|
sb.append("\r\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.toString().replaceAll("CARDNAME", getName()).trim();
|
return sb.toString().replaceAll("CARDNAME", getName()).trim();
|
||||||
|
|||||||
@@ -924,8 +924,10 @@ public class AbilityFactory {
|
|||||||
else if (calcX[0].startsWith("Remembered")) {
|
else if (calcX[0].startsWith("Remembered")) {
|
||||||
// Add whole Remembered list to handlePaid
|
// Add whole Remembered list to handlePaid
|
||||||
list = new CardList();
|
list = new CardList();
|
||||||
for(Card c : card.getRemembered())
|
for(Object o : card.getRemembered()){
|
||||||
list.add(AllZoneUtil.getCardState(c));
|
if (o instanceof Card)
|
||||||
|
list.add(AllZoneUtil.getCardState((Card)o));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (calcX[0].startsWith("Imprinted")) {
|
else if (calcX[0].startsWith("Imprinted")) {
|
||||||
// Add whole Imprinted list to handlePaid
|
// Add whole Imprinted list to handlePaid
|
||||||
@@ -979,9 +981,9 @@ public class AbilityFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (defined.equals("Remembered")){
|
else if (defined.equals("Remembered")){
|
||||||
for(Card rem : hostCard.getRemembered()){
|
for(Object o : hostCard.getRemembered()){
|
||||||
// Get current state of each remembered card
|
if (o instanceof Card)
|
||||||
cards.add(AllZoneUtil.getCardState(rem));
|
cards.add(AllZoneUtil.getCardState((Card)o));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1039,6 +1041,12 @@ public class AbilityFactory {
|
|||||||
players.add(p);
|
players.add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (defined.equals("Remembered")){
|
||||||
|
for(Object rem : card.getRemembered()){
|
||||||
|
if (rem instanceof Player)
|
||||||
|
players.add((Player)rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (defined.startsWith("Triggered")){
|
else if (defined.startsWith("Triggered")){
|
||||||
Object o = null;
|
Object o = null;
|
||||||
if (defined.endsWith("Controller")){
|
if (defined.endsWith("Controller")){
|
||||||
@@ -1234,7 +1242,6 @@ public class AbilityFactory {
|
|||||||
public static void handleRemembering(AbilityFactory AF)
|
public static void handleRemembering(AbilityFactory AF)
|
||||||
{
|
{
|
||||||
HashMap<String,String> params = AF.getMapParams();
|
HashMap<String,String> params = AF.getMapParams();
|
||||||
ArrayList<Card> tgts;
|
|
||||||
Card host;
|
Card host;
|
||||||
|
|
||||||
if(!params.containsKey("RememberTargets") && !params.containsKey("Imprint"))
|
if(!params.containsKey("RememberTargets") && !params.containsKey("Imprint"))
|
||||||
@@ -1253,15 +1260,15 @@ public class AbilityFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Target tgt = AF.getAbTgt();
|
Target tgt = AF.getAbTgt();
|
||||||
tgts = (tgt == null) ? new ArrayList<Card>() : tgt.getTargetCards();
|
|
||||||
|
|
||||||
if(params.containsKey("RememberTargets")) {
|
if(params.containsKey("RememberTargets")) {
|
||||||
for(Card c : tgts)
|
ArrayList<Object> tgts = (tgt == null) ? new ArrayList<Object>() : tgt.getTargets();
|
||||||
{
|
for(Object o : tgts){
|
||||||
host.addRemembered(c);
|
host.addRemembered(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(params.containsKey("Imprint")) {
|
else if(params.containsKey("Imprint")) {
|
||||||
|
ArrayList<Card> tgts = (tgt == null) ? new ArrayList<Card>() : tgt.getTargetCards();
|
||||||
host.addImprinted(tgts);
|
host.addImprinted(tgts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -687,13 +687,18 @@ public class AbilityFactory_ChangeZone {
|
|||||||
type = type.replace("Triggered", "Card");
|
type = type.replace("Triggered", "Card");
|
||||||
}
|
}
|
||||||
else if (type.contains("Remembered")){
|
else if (type.contains("Remembered")){
|
||||||
ArrayList<Card> rem = source.getRemembered();
|
boolean hasRememberedCard = false;
|
||||||
|
for(Object o : source.getRemembered()){
|
||||||
if (rem.isEmpty())
|
if (o instanceof Card){
|
||||||
|
hasRememberedCard = true;
|
||||||
|
source = (Card)o;
|
||||||
|
type = type.replace("Remembered", "Card");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasRememberedCard)
|
||||||
return new CardList();
|
return new CardList();
|
||||||
|
|
||||||
source = rem.get(0);
|
|
||||||
type = type.replace("Remembered", "Card");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return list.getValidCards(type.split(","), sa.getActivatingPlayer(), source);
|
return list.getValidCards(type.split(","), sa.getActivatingPlayer(), source);
|
||||||
|
|||||||
@@ -430,61 +430,7 @@ public class CardFactoryUtil {
|
|||||||
//Planeswalkers fall through to here, lands will fall through if there aren't very many
|
//Planeswalkers fall through to here, lands will fall through if there aren't very many
|
||||||
return AI_getCheapestPermanent(list, null, false);
|
return AI_getCheapestPermanent(list, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static Input input_targetCreaturePlayer(final SpellAbility spell, boolean targeted, boolean free) {
|
|
||||||
return input_targetCreaturePlayer(spell, Command.Blank, targeted, free);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static Input input_targetCreaturePlayer(final SpellAbility spell, final Command paid, final boolean targeted, final boolean free) {
|
|
||||||
Input target = new Input() {
|
|
||||||
private static final long serialVersionUID = 2781418414287281005L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void showMessage() {
|
|
||||||
AllZone.Display.showMessage("Select target Creature, Player, or Planeswalker");
|
|
||||||
ButtonUtil.enableOnlyCancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void selectButtonCancel() {
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void selectCard(Card card, PlayerZone zone) {
|
|
||||||
if((card.isCreature() || card.isPlaneswalker()) && zone.is(Constant.Zone.Battlefield)
|
|
||||||
&& (!targeted || canTarget(spell, card))) {
|
|
||||||
spell.setTargetCard(card);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
}//selectCard()
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void selectPlayer(Player player) {
|
|
||||||
spell.setTargetPlayer(player);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
void done() {
|
|
||||||
paid.execute();
|
|
||||||
|
|
||||||
if(spell.getManaCost().equals("0") || this.isFree()) {
|
|
||||||
if (spell.getAfterPayMana() == null){
|
|
||||||
this.setFree(false);
|
|
||||||
AllZone.Stack.add(spell, spell.getSourceCard().getManaCost().contains("X"));
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
stopSetNext(spell.getAfterPayMana());
|
|
||||||
}
|
|
||||||
} else stopSetNext(new Input_PayManaCost(spell));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return target;
|
|
||||||
}//input_targetCreaturePlayer()
|
|
||||||
|
|
||||||
public static Input input_Spell(final SpellAbility spell, final CardList choices, final boolean free) {
|
public static Input input_Spell(final SpellAbility spell, final CardList choices, final boolean free) {
|
||||||
Input target = new Input() {
|
Input target = new Input() {
|
||||||
private static final long serialVersionUID = 2781418414287281005L;
|
private static final long serialVersionUID = 2781418414287281005L;
|
||||||
|
|||||||
@@ -3233,67 +3233,6 @@ public class CardFactory_Creatures {
|
|||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
|
||||||
else if(cardName.equals("Laquatus's Champion")) {
|
|
||||||
final SpellAbility abilityComes = new Ability(card, "0") {
|
|
||||||
@Override
|
|
||||||
public void resolve() {
|
|
||||||
getTargetPlayer().loseLife(6,card);
|
|
||||||
}//resolve()
|
|
||||||
};
|
|
||||||
|
|
||||||
final Input inputComes = new Input() {
|
|
||||||
private static final long serialVersionUID = -2666229064706311L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void showMessage() {
|
|
||||||
stopSetNext(CardFactoryUtil.input_targetPlayer(abilityComes));
|
|
||||||
ButtonUtil.disableAll();//to disable the Cancel button
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Command commandComes = new Command() {
|
|
||||||
private static final long serialVersionUID = -4246229185669164581L;
|
|
||||||
|
|
||||||
public void execute() {
|
|
||||||
if(card.getController().isHuman()) AllZone.InputControl.setInput(inputComes);
|
|
||||||
else //computer
|
|
||||||
{
|
|
||||||
abilityComes.setTargetPlayer(AllZone.HumanPlayer);
|
|
||||||
AllZone.Stack.addSimultaneousStackEntry(abilityComes);
|
|
||||||
|
|
||||||
}//else
|
|
||||||
}//execute()
|
|
||||||
};//CommandComes
|
|
||||||
Command commandLeavesPlay = new Command() {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 9172348861441804625L;
|
|
||||||
|
|
||||||
public void execute() {
|
|
||||||
//System.out.println(abilityComes.getTargetCard().getName());
|
|
||||||
|
|
||||||
SpellAbility ability = new Ability(card, "0") {
|
|
||||||
@Override
|
|
||||||
public void resolve() {
|
|
||||||
abilityComes.getTargetPlayer().gainLife(6, card);
|
|
||||||
|
|
||||||
}//resolve()
|
|
||||||
};//SpellAbility
|
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("Laquatus's Champion - ").append(abilityComes.getTargetPlayer()).append(" regains 6 life.");
|
|
||||||
ability.setStackDescription(sb.toString());
|
|
||||||
|
|
||||||
AllZone.Stack.addSimultaneousStackEntry(ability);
|
|
||||||
|
|
||||||
}//execute()
|
|
||||||
};//Command
|
|
||||||
|
|
||||||
card.addComesIntoPlayCommand(commandComes);
|
|
||||||
card.addLeavesPlayCommand(commandLeavesPlay);
|
|
||||||
|
|
||||||
}//*************** END ************ END **************************
|
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Meddling Mage")) {
|
else if(cardName.equals("Meddling Mage")) {
|
||||||
final String[] input = new String[1];
|
final String[] input = new String[1];
|
||||||
|
|||||||
@@ -347,11 +347,11 @@ public class TriggerHandler {
|
|||||||
host = regtrig.getHostCard();
|
host = regtrig.getHostCard();
|
||||||
|
|
||||||
// This will fix the Oblivion Ring issue, but is this the right fix?
|
// This will fix the Oblivion Ring issue, but is this the right fix?
|
||||||
for(Card c : regtrig.getHostCard().getRemembered())
|
for(Object o : regtrig.getHostCard().getRemembered())
|
||||||
{
|
{
|
||||||
if(!host.getRemembered().contains(c))
|
if(!host.getRemembered().contains(o))
|
||||||
{
|
{
|
||||||
host.addRemembered(c);
|
host.addRemembered(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user