mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
- Remember can now handle Targeted Players.
- Convert Laquatus's Champion to Script
This commit is contained in:
@@ -52,7 +52,7 @@ public class Card extends MyObservable {
|
||||
private ArrayList<Ability_Mana> manaAbility = new ArrayList<Ability_Mana>();
|
||||
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 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?
|
||||
|
||||
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()
|
||||
{
|
||||
rememberedCards.clear();
|
||||
rememberedObjects.clear();
|
||||
}
|
||||
|
||||
public void addImprinted(Card c) {
|
||||
@@ -1212,14 +1212,20 @@ public class Card extends MyObservable {
|
||||
}
|
||||
|
||||
//Remembered cards
|
||||
if(rememberedCards.size() > 0)
|
||||
if(rememberedObjects.size() > 0){
|
||||
sb.append("\r\nRemembered: \r\n");
|
||||
for(Card c : rememberedCards)
|
||||
{
|
||||
sb.append(c.getName() + "(");
|
||||
sb.append(c.getUniqueNumber());
|
||||
sb.append(")");
|
||||
sb.append("\r\n");
|
||||
for(Object o : rememberedObjects){
|
||||
if (o instanceof Card){
|
||||
Card c = (Card)o;
|
||||
sb.append(c.getName());
|
||||
sb.append("(");
|
||||
sb.append(c.getUniqueNumber());
|
||||
sb.append(")");
|
||||
}
|
||||
else
|
||||
sb.append(o.toString());
|
||||
sb.append("\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString().replaceAll("CARDNAME", getName()).trim();
|
||||
|
||||
@@ -924,8 +924,10 @@ public class AbilityFactory {
|
||||
else if (calcX[0].startsWith("Remembered")) {
|
||||
// Add whole Remembered list to handlePaid
|
||||
list = new CardList();
|
||||
for(Card c : card.getRemembered())
|
||||
list.add(AllZoneUtil.getCardState(c));
|
||||
for(Object o : card.getRemembered()){
|
||||
if (o instanceof Card)
|
||||
list.add(AllZoneUtil.getCardState((Card)o));
|
||||
}
|
||||
}
|
||||
else if (calcX[0].startsWith("Imprinted")) {
|
||||
// Add whole Imprinted list to handlePaid
|
||||
@@ -979,9 +981,9 @@ public class AbilityFactory {
|
||||
}
|
||||
|
||||
else if (defined.equals("Remembered")){
|
||||
for(Card rem : hostCard.getRemembered()){
|
||||
// Get current state of each remembered card
|
||||
cards.add(AllZoneUtil.getCardState(rem));
|
||||
for(Object o : hostCard.getRemembered()){
|
||||
if (o instanceof Card)
|
||||
cards.add(AllZoneUtil.getCardState((Card)o));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1039,6 +1041,12 @@ public class AbilityFactory {
|
||||
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")){
|
||||
Object o = null;
|
||||
if (defined.endsWith("Controller")){
|
||||
@@ -1234,7 +1242,6 @@ public class AbilityFactory {
|
||||
public static void handleRemembering(AbilityFactory AF)
|
||||
{
|
||||
HashMap<String,String> params = AF.getMapParams();
|
||||
ArrayList<Card> tgts;
|
||||
Card host;
|
||||
|
||||
if(!params.containsKey("RememberTargets") && !params.containsKey("Imprint"))
|
||||
@@ -1253,15 +1260,15 @@ public class AbilityFactory {
|
||||
}
|
||||
|
||||
Target tgt = AF.getAbTgt();
|
||||
tgts = (tgt == null) ? new ArrayList<Card>() : tgt.getTargetCards();
|
||||
|
||||
if(params.containsKey("RememberTargets")) {
|
||||
for(Card c : tgts)
|
||||
{
|
||||
host.addRemembered(c);
|
||||
ArrayList<Object> tgts = (tgt == null) ? new ArrayList<Object>() : tgt.getTargets();
|
||||
for(Object o : tgts){
|
||||
host.addRemembered(o);
|
||||
}
|
||||
}
|
||||
else if(params.containsKey("Imprint")) {
|
||||
ArrayList<Card> tgts = (tgt == null) ? new ArrayList<Card>() : tgt.getTargetCards();
|
||||
host.addImprinted(tgts);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -687,13 +687,18 @@ public class AbilityFactory_ChangeZone {
|
||||
type = type.replace("Triggered", "Card");
|
||||
}
|
||||
else if (type.contains("Remembered")){
|
||||
ArrayList<Card> rem = source.getRemembered();
|
||||
|
||||
if (rem.isEmpty())
|
||||
boolean hasRememberedCard = false;
|
||||
for(Object o : source.getRemembered()){
|
||||
if (o instanceof Card){
|
||||
hasRememberedCard = true;
|
||||
source = (Card)o;
|
||||
type = type.replace("Remembered", "Card");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasRememberedCard)
|
||||
return new CardList();
|
||||
|
||||
source = rem.get(0);
|
||||
type = type.replace("Remembered", "Card");
|
||||
}
|
||||
|
||||
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
|
||||
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) {
|
||||
Input target = new Input() {
|
||||
private static final long serialVersionUID = 2781418414287281005L;
|
||||
|
||||
@@ -3233,67 +3233,6 @@ public class CardFactory_Creatures {
|
||||
}//*************** 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 **************************
|
||||
else if(cardName.equals("Meddling Mage")) {
|
||||
final String[] input = new String[1];
|
||||
|
||||
@@ -347,11 +347,11 @@ public class TriggerHandler {
|
||||
host = regtrig.getHostCard();
|
||||
|
||||
// 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