mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
- Fixed the Phasing icon not appearing immediately when the card phases in/out.
- Added support for an additional sound effect that is played when a card phases in/out (phasing.wav is played if available). - Added the "CHEAT_WITH_MANA_ON_SHUFFLE" option to the stock AI profiles (not used yet, to be implemented soon). - Organized the AI profile config files a little bit by sorting the options.
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -15275,6 +15275,7 @@ forge-gui/src/main/java/forge/gui/events/IUiEventVisitor.java -text
|
|||||||
forge-gui/src/main/java/forge/gui/events/UiEvent.java -text
|
forge-gui/src/main/java/forge/gui/events/UiEvent.java -text
|
||||||
forge-gui/src/main/java/forge/gui/events/UiEventAttackerDeclared.java -text
|
forge-gui/src/main/java/forge/gui/events/UiEventAttackerDeclared.java -text
|
||||||
forge-gui/src/main/java/forge/gui/events/UiEventBlockerAssigned.java -text
|
forge-gui/src/main/java/forge/gui/events/UiEventBlockerAssigned.java -text
|
||||||
|
forge-gui/src/main/java/forge/gui/events/UiEventCardPhased.java -text
|
||||||
forge-gui/src/main/java/forge/gui/framework/CEmptyDoc.java -text
|
forge-gui/src/main/java/forge/gui/framework/CEmptyDoc.java -text
|
||||||
forge-gui/src/main/java/forge/gui/framework/DragCell.java -text
|
forge-gui/src/main/java/forge/gui/framework/DragCell.java -text
|
||||||
forge-gui/src/main/java/forge/gui/framework/DragTab.java -text
|
forge-gui/src/main/java/forge/gui/framework/DragTab.java -text
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
DEFAULT_MAX_PLANAR_DIE_ROLLS_PER_TURN=1
|
DEFAULT_MAX_PLANAR_DIE_ROLLS_PER_TURN=1
|
||||||
DEFAULT_MIN_TURN_TO_ROLL_PLANAR_DIE=3
|
DEFAULT_MIN_TURN_TO_ROLL_PLANAR_DIE=3
|
||||||
DEFAULT_PLANAR_DIE_ROLL_CHANCE=50
|
DEFAULT_PLANAR_DIE_ROLL_CHANCE=50
|
||||||
MULLIGAN_THRESHOLD=5
|
|
||||||
PLANAR_DIE_ROLL_HESITATION_CHANCE=10
|
PLANAR_DIE_ROLL_HESITATION_CHANCE=10
|
||||||
|
MULLIGAN_THRESHOLD=5
|
||||||
|
CHEAT_WITH_MANA_ON_SHUFFLE=False
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
DEFAULT_MAX_PLANAR_DIE_ROLLS_PER_TURN=1
|
DEFAULT_MAX_PLANAR_DIE_ROLLS_PER_TURN=1
|
||||||
DEFAULT_MIN_TURN_TO_ROLL_PLANAR_DIE=1
|
DEFAULT_MIN_TURN_TO_ROLL_PLANAR_DIE=1
|
||||||
DEFAULT_PLANAR_DIE_ROLL_CHANCE=100
|
DEFAULT_PLANAR_DIE_ROLL_CHANCE=100
|
||||||
MULLIGAN_THRESHOLD=2
|
|
||||||
PLANAR_DIE_ROLL_HESITATION_CHANCE=0
|
PLANAR_DIE_ROLL_HESITATION_CHANCE=0
|
||||||
|
MULLIGAN_THRESHOLD=2
|
||||||
|
CHEAT_WITH_MANA_ON_SHUFFLE=False
|
||||||
|
|||||||
@@ -86,6 +86,8 @@ import forge.game.trigger.TriggerType;
|
|||||||
import forge.game.trigger.ZCTrigger;
|
import forge.game.trigger.ZCTrigger;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.events.UiEventCardPhased;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.util.Expressions;
|
import forge.util.Expressions;
|
||||||
@@ -4912,6 +4914,8 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
aura.phase(false);
|
aura.phase(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CMatchUI.SINGLETON_INSTANCE.fireEvent(new UiEventCardPhased(this, this.isPhasedOut()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean switchPhaseState() {
|
private boolean switchPhaseState() {
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ package forge.gui.events;
|
|||||||
public interface IUiEventVisitor<T> {
|
public interface IUiEventVisitor<T> {
|
||||||
T visit(UiEventBlockerAssigned event);
|
T visit(UiEventBlockerAssigned event);
|
||||||
T visit(UiEventAttackerDeclared event);
|
T visit(UiEventAttackerDeclared event);
|
||||||
|
T visit(UiEventCardPhased event);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package forge.gui.events;
|
||||||
|
|
||||||
|
import forge.game.card.Card;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class UiEventCardPhased extends UiEvent {
|
||||||
|
|
||||||
|
public final Card phasingCard;
|
||||||
|
public final boolean phaseState;
|
||||||
|
|
||||||
|
public UiEventCardPhased(Card card, boolean state) {
|
||||||
|
phasingCard = card;
|
||||||
|
phaseState = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T visit(IUiEventVisitor<T> visitor) {
|
||||||
|
return visitor.visit(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return phasingCard != null ? phasingCard.toString() : "(unknown)" + " changed its phased-out state to " + phaseState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -49,6 +49,7 @@ import forge.gui.events.IUiEventVisitor;
|
|||||||
import forge.gui.events.UiEvent;
|
import forge.gui.events.UiEvent;
|
||||||
import forge.gui.events.UiEventAttackerDeclared;
|
import forge.gui.events.UiEventAttackerDeclared;
|
||||||
import forge.gui.events.UiEventBlockerAssigned;
|
import forge.gui.events.UiEventBlockerAssigned;
|
||||||
|
import forge.gui.events.UiEventCardPhased;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.framework.FScreen;
|
import forge.gui.framework.FScreen;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
@@ -407,16 +408,22 @@ public enum CMatchUI implements ICDoc, IMenuProvider {
|
|||||||
uiEvents.post(uiEvent);
|
uiEvents.post(uiEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MatchUiEventVisitor implements IUiEventVisitor<Void> {
|
public class MatchUiEventVisitor implements IUiEventVisitor<Void> {
|
||||||
@Override
|
@Override
|
||||||
public Void visit(UiEventBlockerAssigned event) {
|
public Void visit(UiEventBlockerAssigned event) {
|
||||||
updateSingleCard(event.blocker);
|
updateSingleCard(event.blocker);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(UiEventAttackerDeclared event) {
|
||||||
|
updateSingleCard(event.attacker);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visit(UiEventAttackerDeclared event) {
|
public Void visit(UiEventCardPhased event) {
|
||||||
updateSingleCard(event.attacker);
|
updateSingleCard(event.phasingCard);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import forge.game.zone.ZoneType;
|
|||||||
import forge.gui.events.IUiEventVisitor;
|
import forge.gui.events.IUiEventVisitor;
|
||||||
import forge.gui.events.UiEventAttackerDeclared;
|
import forge.gui.events.UiEventAttackerDeclared;
|
||||||
import forge.gui.events.UiEventBlockerAssigned;
|
import forge.gui.events.UiEventBlockerAssigned;
|
||||||
|
import forge.gui.events.UiEventCardPhased;
|
||||||
import forge.net.FServer;
|
import forge.net.FServer;
|
||||||
import forge.util.maps.MapOfLists;
|
import forge.util.maps.MapOfLists;
|
||||||
|
|
||||||
@@ -207,4 +208,8 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
|
|||||||
public SoundEffectType visit(UiEventAttackerDeclared event) {
|
public SoundEffectType visit(UiEventAttackerDeclared event) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public SoundEffectType visit(UiEventCardPhased event) {
|
||||||
|
return SoundEffectType.Phasing;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,44 +36,44 @@ package forge.sound;
|
|||||||
public enum SoundEffectType {
|
public enum SoundEffectType {
|
||||||
// Sounds must be listed in alphabetic order.
|
// Sounds must be listed in alphabetic order.
|
||||||
|
|
||||||
AddCounter("add_counter.wav", true),
|
AddCounter("add_counter.wav", true),
|
||||||
Artifact("artifact.wav", false),
|
Artifact("artifact.wav", false),
|
||||||
ArtifactCreature("artifact_creature.wav", false),
|
ArtifactCreature("artifact_creature.wav", false),
|
||||||
BlackLand("black_land.wav", false),
|
BlackLand("black_land.wav", false),
|
||||||
Block("block.wav", false),
|
Block("block.wav", false),
|
||||||
BlueLand("blue_land.wav", false),
|
BlueLand("blue_land.wav", false),
|
||||||
Creature("creature.wav", false),
|
Creature("creature.wav", false),
|
||||||
Damage("damage.wav", true),
|
Damage("damage.wav", true),
|
||||||
Destroy("destroy.wav", true),
|
Destroy("destroy.wav", true),
|
||||||
Discard("discard.wav", false),
|
Discard("discard.wav", false),
|
||||||
Draw("draw.wav", false),
|
Draw("draw.wav", false),
|
||||||
Enchantment("enchant.wav", false),
|
Enchantment("enchant.wav", false),
|
||||||
EndOfTurn("end_of_turn.wav", false),
|
EndOfTurn("end_of_turn.wav", false),
|
||||||
Equip("equip.wav", false),
|
Equip("equip.wav", false),
|
||||||
Exile("exile.wav", false),
|
Exile("exile.wav", false),
|
||||||
FlipCoin("flip_coin.wav", false),
|
FlipCoin("flip_coin.wav", false),
|
||||||
GreenLand("green_land.wav", false),
|
GreenLand("green_land.wav", false),
|
||||||
Instant("instant.wav", false),
|
Instant("instant.wav", false),
|
||||||
LifeGain("life_gain.wav", true),
|
LifeGain("life_gain.wav", true),
|
||||||
LifeLoss("life_loss.wav", true),
|
LifeLoss("life_loss.wav", true),
|
||||||
LoseDuel("lose_duel.wav", false),
|
LoseDuel("lose_duel.wav", false),
|
||||||
ManaBurn("mana_burn.wav", false),
|
ManaBurn("mana_burn.wav", false),
|
||||||
OtherLand("other_land.wav", false),
|
OtherLand("other_land.wav", false),
|
||||||
Planeswalker("planeswalker.wav", false),
|
Phasing("phasing.wav", true),
|
||||||
Poison("poison.wav", true),
|
Planeswalker("planeswalker.wav", false),
|
||||||
RedLand("red_land.wav", false),
|
Poison("poison.wav", true),
|
||||||
Regen("regeneration.wav", false),
|
RedLand("red_land.wav", false),
|
||||||
RemoveCounter("remove_counter.wav", true),
|
Regen("regeneration.wav", false),
|
||||||
Sacrifice("sacrifice.wav", true),
|
RemoveCounter("remove_counter.wav", true),
|
||||||
ScriptedEffect("", false), // Plays the effect defined by SVar:SoundEffect
|
Sacrifice("sacrifice.wav", true),
|
||||||
Shuffle("shuffle.wav", false),
|
ScriptedEffect("", false), // Plays the effect defined by SVar:SoundEffect
|
||||||
Sorcery("sorcery.wav", false),
|
Shuffle("shuffle.wav", false),
|
||||||
Tap("tap.wav", false),
|
Sorcery("sorcery.wav", false),
|
||||||
Token("token.wav", true),
|
Tap("tap.wav", false),
|
||||||
Untap("untap.wav", true),
|
Token("token.wav", true),
|
||||||
WhiteLand("white_land.wav", false),
|
Untap("untap.wav", true),
|
||||||
WinDuel("win_duel.wav", false);
|
WhiteLand("white_land.wav", false),
|
||||||
|
WinDuel("win_duel.wav", false);
|
||||||
|
|
||||||
private final String resourceFileName;
|
private final String resourceFileName;
|
||||||
private final boolean isSync;
|
private final boolean isSync;
|
||||||
|
|||||||
Reference in New Issue
Block a user