From 5c033655c7363a95151101aa3dd8321a40457ef1 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 3 Aug 2021 21:03:18 -0400 Subject: [PATCH 1/4] SoundEffectType.java add RollDie filename --- forge-gui/src/main/java/forge/sound/SoundEffectType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/src/main/java/forge/sound/SoundEffectType.java b/forge-gui/src/main/java/forge/sound/SoundEffectType.java index 944f9d70c03..a060050f040 100644 --- a/forge-gui/src/main/java/forge/sound/SoundEffectType.java +++ b/forge-gui/src/main/java/forge/sound/SoundEffectType.java @@ -79,6 +79,7 @@ public enum SoundEffectType { RedLand("red_land.mp3", false), Regen("regeneration.mp3", false), RemoveCounter("remove_counter.mp3", true), + RollDie("roll_die.mp3", false), Sacrifice("sacrifice.mp3", true), ScriptedEffect("", false), // Plays the effect defined by SVar:SoundEffect Shuffle("shuffle.mp3", false), From 62ab654497f36a5bcf7b093f4f9b3086db92c198 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 3 Aug 2021 21:04:00 -0400 Subject: [PATCH 2/4] add die roll event to RollDiceEffect and RollPlanarDiceEffect --- .../main/java/forge/game/ability/effects/RollDiceEffect.java | 3 +++ .../java/forge/game/ability/effects/RollPlanarDiceEffect.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java index 653f3fc4b4c..8bbfea68780 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import forge.game.event.GameEventRollDie; import org.apache.commons.lang3.StringUtils; import forge.game.ability.AbilityKey; @@ -75,6 +76,8 @@ public class RollDiceEffect extends SpellAbilityEffect { for (int i = 0; i < amount; i++) { int roll = MyRandom.getRandom().nextInt(sides) + 1; + // Play the die roll sound + player.getGame().fireEvent(new GameEventRollDie()); rolls.add(roll); total += roll; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java index 221a3182d1e..b81802142d9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RollPlanarDiceEffect.java @@ -3,6 +3,7 @@ package forge.game.ability.effects; import forge.game.Game; import forge.game.PlanarDice; import forge.game.ability.SpellAbilityEffect; +import forge.game.event.GameEventRollDie; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.util.Localizer; @@ -26,6 +27,8 @@ public class RollPlanarDiceEffect extends SpellAbilityEffect { game.getPhaseHandler().incPlanarDiceRolledthisTurn(); } PlanarDice result = PlanarDice.roll(activator, null); + // Play the die roll sound + activator.getGame().fireEvent(new GameEventRollDie()); String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", activator.getName(), result.toString()); game.getAction().notifyOfValue(sa, activator, message, null); From b0c242141986ff44319b6f03c143121612046015 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 3 Aug 2021 21:04:28 -0400 Subject: [PATCH 3/4] royalty-free die roll mp3 from SoundBible.com --- forge-gui/res/sound/roll_die.mp3 | Bin 0 -> 18832 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 forge-gui/res/sound/roll_die.mp3 diff --git a/forge-gui/res/sound/roll_die.mp3 b/forge-gui/res/sound/roll_die.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1306cb17a71db9270aff55745700fc525e97d976 GIT binary patch literal 18832 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 z

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 literal 0 HcmV?d00001 From db4ac4db9d7979a638be04e8f1da6f2573424547 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 3 Aug 2021 21:04:58 -0400 Subject: [PATCH 4/4] add GameEventRollDie --- .../src/main/java/forge/game/event/GameEventRollDie.java | 9 +++++++++ .../main/java/forge/game/event/IGameEventVisitor.java | 2 ++ forge-gui/src/main/java/forge/sound/EventVisualizer.java | 3 +++ 3 files changed, 14 insertions(+) create mode 100644 forge-game/src/main/java/forge/game/event/GameEventRollDie.java diff --git a/forge-game/src/main/java/forge/game/event/GameEventRollDie.java b/forge-game/src/main/java/forge/game/event/GameEventRollDie.java new file mode 100644 index 00000000000..b44674e924e --- /dev/null +++ b/forge-game/src/main/java/forge/game/event/GameEventRollDie.java @@ -0,0 +1,9 @@ +package forge.game.event; + +public class GameEventRollDie extends GameEvent { + + @Override + public T visit(IGameEventVisitor visitor) { + return visitor.visit(this); + } +} diff --git a/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java b/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java index c0aba8f84ad..6293b76555e 100644 --- a/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java +++ b/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java @@ -38,6 +38,7 @@ public interface IGameEventVisitor { T visit(GameEventPlayerPoisoned event); T visit(GameEventPlayerPriority event); T visit(GameEventPlayerStatsChanged event); + T visit(GameEventRollDie event); T visit(GameEventTokenStateUpdate event); T visit(GameEventScry event); T visit(GameEventShuffle event); @@ -88,6 +89,7 @@ public interface IGameEventVisitor { public T visit(GameEventPlayerPoisoned event) { return null; } public T visit(GameEventPlayerPriority event) { return null; } public T visit(GameEventPlayerStatsChanged event) { return null; } + public T visit(GameEventRollDie event) { return null; } public T visit(GameEventTokenStateUpdate event) { return null; } public T visit(GameEventScry event) { return null; } public T visit(GameEventShuffle event) { return null; } diff --git a/forge-gui/src/main/java/forge/sound/EventVisualizer.java b/forge-gui/src/main/java/forge/sound/EventVisualizer.java index 7351795d281..a30a8756b0b 100644 --- a/forge-gui/src/main/java/forge/sound/EventVisualizer.java +++ b/forge-gui/src/main/java/forge/sound/EventVisualizer.java @@ -23,6 +23,7 @@ import forge.game.event.GameEventLandPlayed; import forge.game.event.GameEventManaBurn; import forge.game.event.GameEventPlayerLivesChanged; import forge.game.event.GameEventPlayerPoisoned; +import forge.game.event.GameEventRollDie; import forge.game.event.GameEventShuffle; import forge.game.event.GameEventSpellResolved; import forge.game.event.GameEventTokenCreated; @@ -85,6 +86,8 @@ public class EventVisualizer extends IGameEventVisitor.Base imp @Override public SoundEffectType visit(final GameEventFlipCoin event) { return SoundEffectType.FlipCoin; } @Override + public SoundEffectType visit(final GameEventRollDie event) { return SoundEffectType.RollDie; } + @Override public SoundEffectType visit(final GameEventPlayerLivesChanged event) { return event.newLives < event.oldLives ? SoundEffectType.LifeLoss : SoundEffectType.LifeGain; } @Override public SoundEffectType visit(final GameEventManaBurn event) { return SoundEffectType.ManaBurn; }