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); 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/res/sound/roll_die.mp3 b/forge-gui/res/sound/roll_die.mp3 new file mode 100644 index 00000000000..1306cb17a71 Binary files /dev/null and b/forge-gui/res/sound/roll_die.mp3 differ 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; } 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),