Merge branch 'Card-Forge:master' into farm

This commit is contained in:
Simisays
2023-03-02 22:49:36 +01:00
committed by GitHub
25 changed files with 220 additions and 202 deletions

View File

@@ -1 +1,2 @@
--settings ./.mvn/local-settings.xml
--settings
./.mvn/local-settings.xml

View File

@@ -2040,7 +2040,7 @@ public class ComputerUtilCombat {
final boolean hasTrample = attacker.hasKeyword(Keyword.TRAMPLE);
if (combat != null && hasTrample && attacker.isAttacking()) {
if (combat != null && remaining != null && hasTrample && attacker.isAttacking()) {
// if attacker has trample and some of its blockers are also blocking others it's generally a good idea
// to assign those without trample first so we can maximize the damage to the defender
for (final Card c : remaining) {

View File

@@ -198,6 +198,7 @@ public class AnimateEffect extends AnimateEffectBase {
if (sa.hasParam("Crew")) {
c.becomesCrewed(sa);
c.updatePowerToughnessForView();
}
game.fireEvent(new GameEventCardStatsChanged(c));

View File

@@ -6361,7 +6361,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
continue;
}
if (!tr.getParam("Destination").equals(ZoneType.Battlefield.toString())) {
if (!ZoneType.Battlefield.toString().equals(tr.getParam("Destination"))) {
continue;
}

View File

@@ -1722,7 +1722,7 @@ public class CardProperty {
return false;
}
} else if (property.equals("hadToAttackThisCombat")) {
AttackRequirement e = combat.getAttackConstraints().getRequirements().get(card);
AttackRequirement e = combat == null ? null : combat.getAttackConstraints().getRequirements().get(card);
if (e == null || !e.hasCreatureRequirement() || !e.getAttacker().equalsWithTimestamp(card)) {
return false;
}

View File

@@ -49,7 +49,10 @@ public class EnemySprite extends CharacterSprite {
@Override
void updateBoundingRect() { //We want enemies to take the full tile.
boundingRect.set(getX(), getY(), getWidth(), getHeight());
float scale = data == null ? 1f : data.scale;
if (scale < 0)
scale = 1f;
boundingRect.set(getX(), getY(), getWidth()*scale, getHeight()*scale);
}
public void moveTo(Actor other, float delta) {

View File

@@ -41,7 +41,7 @@ public class EffectData implements Serializable {
}
public Array<IPaperCard> startBattleWithCards() {
Array<IPaperCard> startCards=new Array<>();
Array<IPaperCard> startCards=new Array<>(IPaperCard.class);
if(startBattleWithCard != null) {
for (String name:startBattleWithCard) {
PaperCard C = FModel.getMagicDb().getCommonCards().getCard(name);

View File

@@ -260,7 +260,9 @@ public class FSkin {
final FileHandle f9 = getDefaultSkinFile(ForgeConstants.SPRITE_SLEEVES2_FILE);
final FileHandle f10 = getDefaultSkinFile(ForgeConstants.SPRITE_BORDER_FILE);
final FileHandle f11 = getSkinFile(ForgeConstants.SPRITE_BUTTONS_FILE);
final FileHandle f11b = getDefaultSkinFile(ForgeConstants.SPRITE_BUTTONS_FILE);
final FileHandle f12 = getSkinFile(ForgeConstants.SPRITE_START_FILE);
final FileHandle f12b = getDefaultSkinFile(ForgeConstants.SPRITE_START_FILE);
final FileHandle f13 = getDefaultSkinFile(ForgeConstants.SPRITE_DECKBOX_FILE);
final FileHandle f17 = getDefaultSkinFile(ForgeConstants.SPRITE_CRACKS_FILE);
final FileHandle f18 = getDefaultSkinFile(ForgeConstants.SPRITE_PHYREXIAN_FILE);
@@ -313,6 +315,10 @@ public class FSkin {
manager.finishLoadingAsset(f11.path());
Forge.hdbuttons = true;
}
} else if (f11b.exists() && Forge.allowCardBG) {
manager.load(f11b.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f11b.path());
Forge.hdbuttons = true;
} else { Forge.hdbuttons = false; } //how to refresh buttons when a theme don't have hd buttons?
if (f12.exists()) {
if (!Forge.allowCardBG) {
@@ -322,6 +328,10 @@ public class FSkin {
manager.finishLoadingAsset(f12.path());
Forge.hdstart = true;
}
} else if (f12b.exists() && Forge.allowCardBG) {
manager.load(f12b.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f12b.path());
Forge.hdstart = true;
} else { Forge.hdstart = false; }
//update colors
for (final FSkinColor.Colors c : FSkinColor.Colors.values()) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,119 +1,119 @@
fox.png
size: 448,224
size: 378, 106
format: RGBA8888
filter: Nearest,Nearest
filter: Nearest, Nearest
repeat: none
Avatar
xy: 48, 49
size: 11, 10
xy: 17, 8
size: 16, 16
Idle
xy: 0, 32
xy: 2, 38
size: 32, 32
Idle
xy: 32, 32
xy: 2, 4
size: 32, 32
Idle
xy: 64, 32
xy: 36, 4
size: 32, 32
Idle
xy: 96, 32
xy: 70, 4
size: 32, 32
Idle
xy: 128, 32
xy: 206, 4
size: 32, 32
Idle
xy: 160, 32
xy: 104, 4
size: 32, 32
Idle
xy: 192, 32
xy: 138, 4
size: 32, 32
Idle
xy: 224, 32
xy: 172, 4
size: 32, 32
Idle
xy: 256, 32
xy: 206, 4
size: 32, 32
Idle
xy: 288, 32
xy: 104, 4
size: 32, 32
Idle
xy: 320, 32
xy: 240, 4
size: 32, 32
Idle
xy: 352, 32
xy: 274, 4
size: 32, 32
Idle
xy: 384, 32
xy: 308, 4
size: 32, 32
Idle
xy: 416, 32
xy: 342, 4
size: 32, 32
Walk
xy: 0, 96
xy: 2, 38
size: 32, 32
Walk
xy: 32, 96
xy: 36, 38
size: 32, 32
Walk
xy: 64, 96
xy: 70, 38
size: 32, 32
Walk
xy: 96, 96
xy: 104, 38
size: 32, 32
Walk
xy: 128, 96
xy: 138, 38
size: 32, 32
Walk
xy: 160, 96
xy: 172, 38
size: 32, 32
Walk
xy: 192, 96
xy: 206, 38
size: 32, 32
Walk
xy: 224, 96
xy: 240, 38
size: 32, 32
Walk
xy: 256, 96
xy: 274, 38
size: 32, 32
Walk
xy: 288, 96
xy: 308, 38
size: 32, 32
Walk
xy: 320, 96
xy: 342, 38
size: 32, 32
Attack
xy: 0, 128
xy: 2, 72
size: 32, 32
Attack
xy: 32, 128
xy: 138, 72
size: 32, 32
Attack
xy: 64, 128
xy: 36, 72
size: 32, 32
Attack
xy: 96, 128
xy: 70, 72
size: 32, 32
Attack
xy: 128, 128
xy: 104, 72
size: 32, 32
Death
xy: 0, 192
xy: 2, 72
size: 32, 32
Death
xy: 32, 192
xy: 138, 72
size: 32, 32
Death
xy: 64, 192
xy: 36, 72
size: 32, 32
Death
xy: 96, 192
xy: 274, 72
size: 32, 32
Death
xy: 128, 192
xy: 172, 72
size: 32, 32
Death
xy: 160, 192
xy: 206, 72
size: 32, 32
Death
xy: 192, 192
xy: 240, 72
size: 32, 32

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -1,93 +1,90 @@
ooze.png
size: 256,160
size: 242, 106
format: RGBA8888
filter: Nearest,Nearest
filter: Nearest, Nearest
repeat: none
Avatar
xy: 9, 151
size: 15, 9
Idle
xy: 0, 0
xy: 36, 4
size: 32, 32
Idle
xy: 32, 0
xy: 172, 4
size: 32, 32
Idle
xy: 64, 0
xy: 2, 4
size: 32, 32
orig: 32, 32
Idle
xy: 36, 4
size: 32, 32
Idle
xy: 96, 0
xy: 172, 4
size: 32, 32
Idle
xy: 0, 96
xy: 70, 4
size: 32, 32
Idle
xy: 32, 96
xy: 104, 4
size: 32, 32
Idle
xy: 64, 96
size: 32, 32
Idle
xy: 96, 96
xy: 138, 4
size: 32, 32
Walk
xy: 0, 32
xy: 172, 4
size: 32, 32
Walk
xy: 32, 32
xy: 2, 4
size: 32, 32
Walk
xy: 64, 32
xy: 206, 4
size: 32, 32
Walk
xy: 96, 32
xy: 2, 38
size: 32, 32
Walk
xy: 128, 32
xy: 36, 38
size: 32, 32
Walk
xy: 160, 32
xy: 70, 38
size: 32, 32
Walk
xy: 192, 32
xy: 104, 38
size: 32, 32
Walk
xy: 224, 32
xy: 138, 38
size: 32, 32
Attack
xy: 0, 64
xy: 172, 4
size: 32, 32
Attack
xy: 32, 64
xy: 2, 4
size: 32, 32
Attack
xy: 64, 64
xy: 172, 38
size: 32, 32
Attack
xy: 96, 64
xy: 206, 38
size: 32, 32
Attack
xy: 128, 64
xy: 2, 72
size: 32, 32
Attack
xy: 160, 64
xy: 36, 72
size: 32, 32
Death
xy: 0, 128
xy: 172, 4
size: 32, 32
Death
xy: 32, 128
xy: 70, 72
size: 32, 32
Death
xy: 64, 128
xy: 104, 72
size: 32, 32
Death
xy: 96, 128
xy: 138, 72
size: 32, 32
Death
xy: 128, 128
xy: 172, 72
size: 32, 32
Death
xy: 160, 128
xy: 206, 72
size: 32, 32

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -3425,7 +3425,7 @@
"spawnRate": 1,
"difficulty": 0.1,
"speed": 15,
"scale": 0.75,
"scale": 0.5,
"life": 10,
"rewards": [
{
@@ -4099,6 +4099,7 @@
{
"name": "Ooze",
"sprite": "sprites/dungeon/ooze.atlas",
"scale": 0.6,
"deck": [
"decks/ooze.json"
],

View File

@@ -3,7 +3,7 @@ ManaCost:5 G
Types:Legendary Artifact Creature Wizard
PT:4/3
K:Reach
S:Mode$ Continuous | CharacteristicDefining$ True | SetPower$ 16 | SetToughness$ 9 | IsPresent$ Card.Self+attacking | Affected$ Creature.basePowerEQ4+baseToughnessEQ3+tapped+YouCtrl | Description$ As long as NICKNAME is attacking, tapped creatures you control with base power and toughness 4/3 have base power and toughness 16/9.
S:Mode$ Continuous | SetPower$ 16 | SetToughness$ 9 | IsPresent$ Card.Self+attacking | Affected$ Creature.basePowerEQ4+baseToughnessEQ3+tapped+YouCtrl | Description$ As long as NICKNAME is attacking, tapped creatures you control with base power and toughness 4/3 have base power and toughness 16/9.
A:AB$ Mana | Cost$ T | Produced$ W U B R G | TriggersWhenSpent$ TrigChange | SpellDescription$ Add {W}{U}{B}{R}{G}. Creature spells you spend this mana to cast have their base power and toughness become 4/3.
SVar:TrigChange:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ TrigAnimate | TriggerDescription$ Creature spells you spend this mana to cast have their base power and toughness become 4/3.
SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Duration$ Permanent | Power$ 4 | Toughness$ 3

View File

@@ -5,7 +5,7 @@ PT:1/1
T:Mode$ ChangesZoneAll | ValidCards$ Creature.basePowerEQ1+baseToughnessEQ1+Other+YouCtrl | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever one or more other creatures with base power and toughness 1/1 enter the battlefield under your control, put a +1/+1 counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ Whenever NICKNAME attacks, each other creature you control with base power and toughness 1/1 gets +X/+X until end of turn, where X is the number of +1/+1 counters on NICKNAME.
SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.basePowerEQ1+baseToughnessEQ1+Other | NumAtt$ +X | NumDef$ +X
SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.basePowerEQ1+baseToughnessEQ1+Other+YouCtrl | NumAtt$ +X | NumDef$ +X
SVar:X:Count$CardCounters.P1P1
DeckHas:Ability$Counters
DeckHints:Type$Citizen

View File

@@ -5,6 +5,6 @@ PT:5/9
K:Islandwalk
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigExile | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, exile it. Return it to the battlefield under your control tapped and attacking at the beginning of the next declare attackers step on your next turn.
SVar:TrigExile:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig
SVar:DelTrig:DB$ DelayedTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | DelayedTriggerDefinedPlayer$ You | ThisTurn$ True | Mode$ Phase | Phase$ Declare Attackers | Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield tapped and attacking.
SVar:TrigReturn:DB$ ChangeZone | Defined$ Self | Origin$ Exile | Destination$ Battlefield | Attacking$ True | Tapped$ True | GainControl$ True
SVar:DelTrig:DB$ DelayedTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | DelayedTriggerDefinedPlayer$ You | RememberObjects$ RememberedLKI | ThisTurn$ True | Mode$ Phase | Phase$ Declare Attackers | Execute$ TrigReturn | TriggerDescription$ Return CARDNAME to the battlefield tapped and attacking.
SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Battlefield | Attacking$ True | Tapped$ True | GainControl$ True
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nWhenever Meandering Towershell attacks, exile it. Return it to the battlefield under your control tapped and attacking at the beginning of the declare attackers step on your next turn.

View File

@@ -1,3 +1,5 @@
An Uncommon Budget | https://downloads.cardforge.org/decks/uncommonbudget-brawl.zip
Brewer's Kitchen | https://downloads.cardforge.org/decks/brewerskitchen-brawl.zip
Budget Magic | https://downloads.cardforge.org/decks/budgetmagic-brawl.zip
Card Preview | https://downloads.cardforge.org/decks/cardpreview-brawl.zip
Commander Clash | https://downloads.cardforge.org/decks/commanderclash-brawl.zip

View File

@@ -1,4 +1,5 @@
99 Problems | https://downloads.cardforge.org/decks/99problems.zip
Brewer's Kitchen | https://downloads.cardforge.org/decks/brewerskitchen-commander.zip
Budget Commander | https://downloads.cardforge.org/decks/budgetcommander.zip
Card Preview | https://downloads.cardforge.org/decks/cardpreview-commander.zip
Command Tower | https://downloads.cardforge.org/decks/commandtower.zip

View File

@@ -1,6 +1,8 @@
Against the Odds | https://downloads.cardforge.org/decks/againsttheodds.zip
An Uncommon Budget | https://downloads.cardforge.org/decks/uncommonbudget.zip
Arena Championship | https://downloads.cardforge.org/decks/arenachampionship.zip
Breaking Through | https://downloads.cardforge.org/decks/breakingthrough.zip
Brewer's Kitchen | https://downloads.cardforge.org/decks/brewerskitchen.zip
Brewing on a Budget | https://downloads.cardforge.org/decks/brewingonabudget.zip
Budget Magic | https://downloads.cardforge.org/decks/budgetmagic.zip
Budget Modern Metagame | https://downloads.cardforge.org/decks/budgetmodernmetagame.zip