mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
add Yosei, the Morning Star (from Champions of Kamigawa)
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -5715,6 +5715,7 @@ res/cardsfolder/yellow_scarves_troops.txt -text svneol=native#text/plain
|
|||||||
res/cardsfolder/yoked_plowbeast.txt -text svneol=native#text/plain
|
res/cardsfolder/yoked_plowbeast.txt -text svneol=native#text/plain
|
||||||
res/cardsfolder/yomiji_who_bars_the_way.txt -text svneol=native#text/plain
|
res/cardsfolder/yomiji_who_bars_the_way.txt -text svneol=native#text/plain
|
||||||
res/cardsfolder/yore_tiller_nephilim.txt -text svneol=native#text/plain
|
res/cardsfolder/yore_tiller_nephilim.txt -text svneol=native#text/plain
|
||||||
|
res/cardsfolder/yosei_the_morning_star.txt -text svneol=native#text/plain
|
||||||
res/cardsfolder/yotian_soldier.txt -text svneol=native#text/plain
|
res/cardsfolder/yotian_soldier.txt -text svneol=native#text/plain
|
||||||
res/cardsfolder/young_wei_recruits.txt -text svneol=native#text/plain
|
res/cardsfolder/young_wei_recruits.txt -text svneol=native#text/plain
|
||||||
res/cardsfolder/youthful_knight.txt -text svneol=native#text/plain
|
res/cardsfolder/youthful_knight.txt -text svneol=native#text/plain
|
||||||
|
|||||||
10
res/cardsfolder/yosei_the_morning_star.txt
Normal file
10
res/cardsfolder/yosei_the_morning_star.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Yosei, the Morning Star
|
||||||
|
ManaCost:4 W W
|
||||||
|
Types:Legendary Creature Dragon Spirit
|
||||||
|
Text:When CARDNAME is put into a graveyard from the battlefield, target player skips his or her next untap step. Tap up to five target permanents that player controls.
|
||||||
|
PT:5/5
|
||||||
|
K:Flying
|
||||||
|
SVar:RemAIDeck:True
|
||||||
|
SVar:Rarity:Rare
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/yosei_the_morning_star.jpg
|
||||||
|
End
|
||||||
@@ -13421,6 +13421,101 @@ public class CardFactory_Creatures {
|
|||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Yosei, the Morning Star")) {
|
||||||
|
final CardList targetPerms = new CardList();
|
||||||
|
final SpellAbility ability = new Ability(card, "0") {
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
Player p = getTargetPlayer();
|
||||||
|
if(p.canTarget(card)) {
|
||||||
|
p.setSkipNextUntap(true);
|
||||||
|
for(Card c:targetPerms) {
|
||||||
|
if(AllZone.GameAction.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
|
||||||
|
c.tap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
targetPerms.clear();
|
||||||
|
}//resolve()
|
||||||
|
};
|
||||||
|
|
||||||
|
final Input targetInput = new Input() {
|
||||||
|
private static final long serialVersionUID = -8727869672234802473L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showMessage() {
|
||||||
|
if(targetPerms.size() == 5) done();
|
||||||
|
AllZone.Display.showMessage("Select up to 5 target permanents. Selected ("+targetPerms.size()+") so far. Click OK when done.");
|
||||||
|
ButtonUtil.enableOnlyOK();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectButtonOK() {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void done() {
|
||||||
|
//here, we add the ability to the stack since it's triggered.
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(card.getName()).append(" - tap up to 5 permanents target player controls. Target player skips his or her next untap step.");
|
||||||
|
ability.setStackDescription(sb.toString());
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectCard(Card c, PlayerZone zone) {
|
||||||
|
if(zone.is(Constant.Zone.Battlefield, ability.getTargetPlayer()) && !targetPerms.contains(c)) {
|
||||||
|
if(CardFactoryUtil.canTarget(card, c)) {
|
||||||
|
targetPerms.add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
showMessage();
|
||||||
|
}
|
||||||
|
};//Input
|
||||||
|
|
||||||
|
final Input playerInput = new Input() {
|
||||||
|
private static final long serialVersionUID = 4765535692144126496L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showMessage() {
|
||||||
|
AllZone.Display.showMessage(card.getName()+" - Select target player");
|
||||||
|
ButtonUtil.enableOnlyCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectPlayer(Player p) {
|
||||||
|
if(p.canTarget(card)) {
|
||||||
|
ability.setTargetPlayer(p);
|
||||||
|
stopSetNext(targetInput);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectButtonCancel() { stop(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
Command destroy = new Command() {
|
||||||
|
private static final long serialVersionUID = -3868616119471172026L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
Player player = card.getController();
|
||||||
|
CardList list = CardFactoryUtil.AI_getHumanCreature(card, true);
|
||||||
|
|
||||||
|
if(player.equals(AllZone.HumanPlayer)) AllZone.InputControl.setInput(playerInput);
|
||||||
|
else if(list.size() != 0) {
|
||||||
|
Card target = CardFactoryUtil.AI_getBestCreature(list);
|
||||||
|
ability.setTargetCard(target);
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
}
|
||||||
|
}//execute()
|
||||||
|
};
|
||||||
|
card.addDestroyCommand(destroy);
|
||||||
|
}
|
||||||
|
//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
if(hasKeyword(card, "Level up") != -1 && hasKeyword(card, "maxLevel") != -1)
|
if(hasKeyword(card, "Level up") != -1 && hasKeyword(card, "maxLevel") != -1)
|
||||||
{
|
{
|
||||||
int n = hasKeyword(card, "Level up");
|
int n = hasKeyword(card, "Level up");
|
||||||
|
|||||||
@@ -4,9 +4,23 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
public class PhaseUtil {
|
public class PhaseUtil {
|
||||||
// ******* UNTAP PHASE *****
|
// ******* UNTAP PHASE *****
|
||||||
|
private static boolean skipUntap(Player p) {
|
||||||
|
if(p.skipNextUntap()) {
|
||||||
|
p.setSkipNextUntap(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static void handleUntap(){
|
public static void handleUntap(){
|
||||||
|
|
||||||
Player turn = AllZone.Phase.getPlayerTurn();
|
Player turn = AllZone.Phase.getPlayerTurn();
|
||||||
|
|
||||||
|
if (skipUntap(turn)){
|
||||||
|
AllZone.Phase.setNeedToNextPhase(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PlayerZone p = AllZone.getZone(Constant.Zone.Battlefield, turn);
|
PlayerZone p = AllZone.getZone(Constant.Zone.Battlefield, turn);
|
||||||
Card[] c = p.getCards();
|
Card[] c = p.getCards();
|
||||||
|
|
||||||
@@ -56,9 +70,7 @@ public class PhaseUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CardList allp = new CardList();
|
CardList allp = AllZoneUtil.getCardsInPlay();
|
||||||
allp.addAll(AllZone.getZone(Constant.Zone.Battlefield, AllZone.HumanPlayer).getCards());
|
|
||||||
allp.addAll(AllZone.getZone(Constant.Zone.Battlefield, AllZone.ComputerPlayer).getCards());
|
|
||||||
|
|
||||||
for(Card ca : allp) {
|
for(Card ca : allp) {
|
||||||
if (ca.hasStartOfKeyword("Permanents don't untap during their controllers' untap steps")) {
|
if (ca.hasStartOfKeyword("Permanents don't untap during their controllers' untap steps")) {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public abstract class Player extends MyObservable{
|
|||||||
protected String loseCondition = "";
|
protected String loseCondition = "";
|
||||||
|
|
||||||
protected int nTurns = 0;
|
protected int nTurns = 0;
|
||||||
|
protected boolean skipNextUntap = false;
|
||||||
|
|
||||||
protected Card lastDrawnCard;
|
protected Card lastDrawnCard;
|
||||||
protected int numDrawnThisTurn = 0;
|
protected int numDrawnThisTurn = 0;
|
||||||
@@ -644,6 +645,14 @@ public abstract class Player extends MyObservable{
|
|||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean skipNextUntap() {
|
||||||
|
return skipNextUntap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSkipNextUntap(boolean b) {
|
||||||
|
skipNextUntap = b;
|
||||||
|
}
|
||||||
|
|
||||||
public CardList getSlowtripList() {
|
public CardList getSlowtripList() {
|
||||||
return slowtripList;
|
return slowtripList;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user