diff --git a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java index 839d6fbbf00..ca3277e4f1a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java @@ -268,12 +268,6 @@ public class TokenAi extends SpellAbilityAi { } } - if (mandatory) { - // Necessary because the AI goes into this method twice, first to set up targets (with mandatory=true) - // and then the second time to confirm the trigger (where mandatory may be set to false). - return true; - } - Card actualToken = spawnToken(ai, sa); String tokenPower = sa.getParamOrDefault("TokenPower", actualToken.getBasePowerString()); String tokenToughness = sa.getParamOrDefault("TokenToughness", actualToken.getBaseToughnessString()); @@ -289,11 +283,17 @@ public class TokenAi extends SpellAbilityAi { sa.setXManaCostPaid(x); } } - if (x <= 0) { + if (x <= 0 && !mandatory) { return false; } } + if (mandatory) { + // Necessary because the AI goes into this method twice, first to set up targets (with mandatory=true) + // and then the second time to confirm the trigger (where mandatory may be set to false). + return true; + } + if ("OnlyOnAlliedAttack".equals(sa.getParam("AILogic"))) { Combat combat = ai.getGame().getCombat(); return combat != null && combat.getAttackingPlayer() != null diff --git a/forge-gui-mobile/src/forge/adventure/scene/DraftScene.java b/forge-gui-mobile/src/forge/adventure/scene/DraftScene.java index 1e03f58b973..d3caa502bb0 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DraftScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DraftScene.java @@ -3,6 +3,7 @@ package forge.adventure.scene; import forge.adventure.data.AdventureEventData; import forge.adventure.stage.GameHUD; import forge.screens.FScreen; +import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; /** @@ -32,7 +33,8 @@ public class DraftScene extends ForgeScene { @Override public void enter() { GameHUD.getInstance().getTouchpad().setVisible(false); - SoundSystem.instance.pause(); + GameHUD.getInstance().pauseMusic(); + SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); screen = null; getScreen(); screen.refresh(); diff --git a/forge-gui-mobile/src/forge/adventure/scene/EventScene.java b/forge-gui-mobile/src/forge/adventure/scene/EventScene.java index f30dfc4e826..e0a72afba68 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/EventScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/EventScene.java @@ -13,12 +13,14 @@ import forge.Forge; import forge.adventure.character.EnemySprite; import forge.adventure.data.*; import forge.adventure.player.AdventurePlayer; +import forge.adventure.stage.GameHUD; import forge.adventure.stage.IAfterMatch; import forge.adventure.stage.WorldStage; import forge.adventure.util.*; import forge.adventure.world.WorldSave; import forge.gui.FThreads; import forge.screens.TransitionScreen; +import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; import forge.util.Callback; import forge.util.MyRandom; @@ -378,7 +380,8 @@ public class EventScene extends MenuScene implements IAfterMatch { @Override public void enter() { super.enter(); - SoundSystem.instance.pause(); + GameHUD.getInstance().pauseMusic(); + SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); scrollContainer.clear(); if (money != null) { diff --git a/forge-gui-mobile/src/forge/adventure/scene/InnScene.java b/forge-gui-mobile/src/forge/adventure/scene/InnScene.java index 6615556f806..3477ea49476 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/InnScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/InnScene.java @@ -12,6 +12,7 @@ import forge.adventure.util.AdventureEventController; import forge.adventure.util.Controls; import forge.adventure.util.Current; import forge.adventure.world.WorldSave; +import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; /** @@ -99,7 +100,8 @@ public class InnScene extends UIScene { public void enter() { super.enter(); refreshStatus(); - SoundSystem.instance.pause(); + GameHUD.getInstance().pauseMusic(); + SoundSystem.instance.setBackgroundMusic(MusicPlaylist.TOWN); } private void refreshStatus(){ diff --git a/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java b/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java index 4481376ae97..696150e8d28 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java @@ -17,6 +17,7 @@ import forge.adventure.character.EnemySprite; import forge.adventure.data.EnemyData; import forge.adventure.data.WorldData; import forge.adventure.player.AdventurePlayer; +import forge.adventure.stage.GameHUD; import forge.adventure.util.Config; import forge.adventure.util.Controls; import forge.adventure.util.Current; @@ -31,6 +32,8 @@ import forge.localinstance.achievements.CardActivationAchievements; import forge.localinstance.achievements.PlaneswalkerAchievements; import forge.model.FModel; import forge.player.GamePlayerUtil; +import forge.sound.MusicPlaylist; +import forge.sound.SoundSystem; import org.apache.commons.lang3.tuple.Pair; import java.util.Map; @@ -186,6 +189,10 @@ public class PlayerStatisticScene extends UIScene { @Override public void enter() { super.enter(); + + GameHUD.getInstance().pauseMusic(); + SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); + achievementContainer.clear(); updateAchievements(cardActivation, true); updateAchievements(planeswalkers, true); diff --git a/forge-gui/res/adventure/Shandalar/sprites/monsters/sandwurm2.atlas b/forge-gui/res/adventure/Shandalar/sprites/monsters/sandwurm2.atlas new file mode 100644 index 00000000000..1214c271b9c --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/sprites/monsters/sandwurm2.atlas @@ -0,0 +1,35 @@ +sandwurm2.png +size: 160,64 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +Avatar + xy: 0, 0 + size: 32,32 +Idle + xy: 0,37 + size:32,18 +Attack + xy: 32, 5 + size: 32,18 +Attack + xy: 64, 5 + size: 32,18 +Attack + xy: 96, 5 + size: 32,18 +Attack + xy: 128, 5 + size: 32,18 +Death + xy: 32, 37 + size: 32,18 +Death + xy: 64, 37 + size: 32,18 +Death + xy: 96, 37 + size: 32,18 +Death + xy: 128, 37 + size: 32,18 diff --git a/forge-gui/res/adventure/Shandalar/sprites/monsters/sandwurm2.png b/forge-gui/res/adventure/Shandalar/sprites/monsters/sandwurm2.png new file mode 100644 index 00000000000..3436abc4f45 Binary files /dev/null and b/forge-gui/res/adventure/Shandalar/sprites/monsters/sandwurm2.png differ diff --git a/forge-gui/res/adventure/Shandalar/world/enemies.json b/forge-gui/res/adventure/Shandalar/world/enemies.json index 458597d71b5..61d7c439977 100644 --- a/forge-gui/res/adventure/Shandalar/world/enemies.json +++ b/forge-gui/res/adventure/Shandalar/world/enemies.json @@ -8916,6 +8916,50 @@ "IdentityBlack" ] }, +{ + "name": "Greater Sandwurm", + "sprite": "sprites/monsters/sandwurm2.atlas", + "deck": [ + "decks/monsters/sandwurm.dck" + ], + "ai": "", + "spawnRate": 1, + "difficulty": 0.1, + "speed": 0, + "life": 12, + "rewards": [ + { + "type": "deckCard", + "probability": 1, + "count": 2, + "addMaxCount": 4 + }, + { + "type": "gold", + "probability": 0.7, + "count": 10, + "addMaxCount": 90 + }, + { + "type": "card", + "probability": 0.5, + "count": 3, + "colors": [ + "White" + ], + "rarity": [ + "Rare" + ] + } + ], + "colors": "G", + "questTags": [ + "Wurm", + "Nature", + "Subterranean", + "IdentityWhite" + ] +}, { "name": "Greater Zombie", "sprite": "sprites/unholy/zombie.atlas", @@ -20161,4 +20205,4 @@ "BiomeBlack" ] } -] \ No newline at end of file +] diff --git a/forge-gui/res/adventure/Shandalar/world/white.json b/forge-gui/res/adventure/Shandalar/world/white.json index 17436f73c4d..c45df6353e8 100644 --- a/forge-gui/res/adventure/Shandalar/world/white.json +++ b/forge-gui/res/adventure/Shandalar/world/white.json @@ -60,6 +60,7 @@ "Owl", "Raven", "Runelord", + "Greater Sandwurm", "Scorpion", "Scarab", "Stray Cat", @@ -135,4 +136,4 @@ ] } ] -} \ No newline at end of file +}