mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Merge pull request #3721 from tool4ever/fix99
CardRules: fix specialize faces on regular cards
This commit is contained in:
@@ -210,7 +210,6 @@ public class GameStateEvaluator {
|
||||
// excess mana is valued less than getting enough to use everything
|
||||
value += max(0, max_total - statistics.maxCost) * 5;
|
||||
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
@@ -395,6 +395,11 @@ public final class CardRules implements ICardCharacteristics {
|
||||
this.curFace = 0;
|
||||
this.faces[0] = null;
|
||||
this.faces[1] = null;
|
||||
this.faces[2] = null;
|
||||
this.faces[3] = null;
|
||||
this.faces[4] = null;
|
||||
this.faces[5] = null;
|
||||
this.faces[6] = null;
|
||||
|
||||
this.handLife = null;
|
||||
this.altMode = CardSplitType.None;
|
||||
|
||||
@@ -362,16 +362,14 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
if (p == chooser) { // the digger can still see all the dug cards when choosing
|
||||
chooser.getController().tempShowCards(top);
|
||||
}
|
||||
List<Card> chosen = new ArrayList<>();
|
||||
|
||||
int max = anyNumber ? valid.size() : Math.min(valid.size(), destZone1ChangeNum);
|
||||
int min = (anyNumber || optional) ? 0 : max;
|
||||
if (max > 0) { // if max is 0 don't make a choice
|
||||
chosen = chooser.getController().chooseEntitiesForEffect(valid, min, max, delayedReveal, sa, prompt, p, null);
|
||||
movedCards.addAll(chooser.getController().chooseEntitiesForEffect(valid, min, max, delayedReveal, sa, prompt, p, null));
|
||||
}
|
||||
|
||||
chooser.getController().endTempShowCards();
|
||||
movedCards.addAll(chosen);
|
||||
}
|
||||
|
||||
if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) {
|
||||
|
||||
@@ -38,6 +38,9 @@ public abstract class TokenEffectBase extends SpellAbilityEffect {
|
||||
protected TokenCreateTable createTokenTable(Iterable<Player> players, String[] tokenScripts, final int finalAmount, final SpellAbility sa) {
|
||||
TokenCreateTable tokenTable = new TokenCreateTable();
|
||||
for (final Player owner : players) {
|
||||
if (!owner.isInGame()) {
|
||||
continue;
|
||||
}
|
||||
for (String script : tokenScripts) {
|
||||
final Card result = TokenInfo.getProtoType(script, sa, owner);
|
||||
|
||||
|
||||
@@ -6377,7 +6377,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
}
|
||||
|
||||
public final boolean canBeControlledBy(final Player newController) {
|
||||
return !(hasKeyword("Other players can't gain control of CARDNAME.") && !getController().equals(newController));
|
||||
return newController.isInGame() && !(hasKeyword("Other players can't gain control of CARDNAME.") && !getController().equals(newController));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -43,7 +43,7 @@ public class StaticAbilityActivateAbilityAsIfHaste {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean applyCanActivateAbility(final StaticAbility stAb, final Card card) {
|
||||
private static boolean applyCanActivateAbility(final StaticAbility stAb, final Card card) {
|
||||
if (!stAb.matchesValidParam("ValidCard", card)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class StaticAbilityAssignCombatDamageAsUnblocked {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean applyAssignCombatDamageAsUnblocked(final StaticAbility stAb, final Card card) {
|
||||
private static boolean applyAssignCombatDamageAsUnblocked(final StaticAbility stAb, final Card card) {
|
||||
if (!stAb.matchesValidParam("ValidCard", card)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class StaticAbilityCantBeCopied {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean cantBeCopiedCheck(final StaticAbility stAb, final Card card) {
|
||||
private static boolean cantBeCopiedCheck(final StaticAbility stAb, final Card card) {
|
||||
if (stAb.matchesValidParam("ValidCard", card)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ public class StaticAbilityCantBecomeMonarch {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean applyCantBecomeMonarchAbility(final StaticAbility stAb, final Player player) {
|
||||
|
||||
private static boolean applyCantBecomeMonarchAbility(final StaticAbility stAb, final Player player) {
|
||||
if (!stAb.matchesValidParam("ValidPlayer", player)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public class StaticAbilityIgnoreLegendRule {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean applyIgnoreLegendRuleAbility(final StaticAbility stAb, final Card card) {
|
||||
private static boolean applyIgnoreLegendRuleAbility(final StaticAbility stAb, final Card card) {
|
||||
if (!stAb.matchesValidParam("ValidCard", card)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class StaticAbilityUnspentMana {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void applyUnspentManaAbility(final StaticAbility stAb, final Player player, Set<Byte> result) {
|
||||
private static void applyUnspentManaAbility(final StaticAbility stAb, final Player player, Set<Byte> result) {
|
||||
if (!stAb.matchesValidParam("ValidPlayer", player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ public class FCardImageRenderer {
|
||||
if (!card.isSplitCard() && !card.isFlipCard()) {
|
||||
final CardStateView state = card.getState(card.isAdventureCard() ? false : altState);
|
||||
if ((state.isCreature() && !state.getKeywordKey().contains("Level up"))
|
||||
|| state.isPlaneswalker() || state.isVehicle())
|
||||
|| state.isPlaneswalker() || state.isBattle() || state.isVehicle())
|
||||
hasPTBox = true;
|
||||
}
|
||||
if (hasPTBox) {
|
||||
@@ -294,7 +294,7 @@ public class FCardImageRenderer {
|
||||
int headerHeight = NAME_SIZE + 2 * HEADER_PADDING;
|
||||
int typeBoxHeight = TYPE_SIZE + 2 * TYPE_PADDING;
|
||||
int ptBoxHeight = 0;
|
||||
if (state.isCreature() || state.isPlaneswalker() || state.isVehicle()) {
|
||||
if (state.isCreature() || state.isPlaneswalker() | state.isBattle() || state.isVehicle()) {
|
||||
//if P/T box needed, make room for it
|
||||
ptBoxHeight = headerHeight;
|
||||
}
|
||||
@@ -839,6 +839,12 @@ public class FCardImageRenderer {
|
||||
TEXT_COLOR = Color.WHITE;
|
||||
pieces.add(String.valueOf(state.getLoyalty()));
|
||||
}
|
||||
else if (state.isBattle()) {
|
||||
Color [] pwColor = { Color.BLACK };
|
||||
colors = pwColor;
|
||||
TEXT_COLOR = Color.WHITE;
|
||||
pieces.add(String.valueOf(state.getDefense()));
|
||||
}
|
||||
else if (state.isVehicle()) {
|
||||
Color [] vhColor = { new Color(128, 96, 64) };
|
||||
colors = vhColor;
|
||||
@@ -865,7 +871,7 @@ public class FCardImageRenderer {
|
||||
int arcWidth = h / 3;
|
||||
fillRoundColorBackground(g, colors, x, y, w, h, arcWidth, h);
|
||||
g.setStroke(new BasicStroke(BOX_LINE_THICKNESS));
|
||||
g.setColor(state.isPlaneswalker() ? Color.WHITE : Color.BLACK);
|
||||
g.setColor(state.isPlaneswalker() || state.isBattle() ? Color.WHITE : Color.BLACK);
|
||||
g.drawRoundRect(x, y, w, h, arcWidth, h);
|
||||
|
||||
x += (PT_BOX_WIDTH - totalPieceWidth) / 2;
|
||||
|
||||
@@ -76,7 +76,7 @@ public final class CardScriptInfo {
|
||||
ForgeConstants.USER_CUSTOM_CARDS_DIR + File.separator + String.valueOf(filename.charAt(0)),
|
||||
ForgeConstants.USER_CUSTOM_CARDS_DIR,
|
||||
};
|
||||
|
||||
|
||||
for (String folder : folders) {
|
||||
final File file = new File(folder + File.separator + filename);
|
||||
if (file.exists()) {
|
||||
|
||||
Reference in New Issue
Block a user