Sadistic Shell Game

This commit is contained in:
TwentyToedToad
2024-10-02 09:11:00 -05:00
committed by GitHub
parent 3df291c1f5
commit 436a3382b6
24 changed files with 41 additions and 45 deletions

View File

@@ -48,7 +48,6 @@ import forge.util.Lang;
import forge.util.TextUtil;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -832,12 +831,8 @@ public final class GameActionUtil {
return list;
}
CardCollection completeList = new CardCollection();
PlayerCollection players = new PlayerCollection(game.getPlayers());
// CR 613.7m use APNAP
int indexAP = players.indexOf(game.getPhaseHandler().getPlayerTurn());
if (indexAP != -1) {
Collections.rotate(players, - indexAP);
}
PlayerCollection players = game.getPlayersInTurnOrder(game.getPhaseHandler().getPlayerTurn());
for (Player p : players) {
CardCollection subList = new CardCollection();
for (Card c : list) {

View File

@@ -279,6 +279,7 @@ public abstract class SpellAbilityEffect {
return getPlayers(definedFirst, definedParam, sa, null);
}
private static PlayerCollection getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa, List<Player> resultDuplicate) {
Game game = sa.getHostCard().getGame();
PlayerCollection resultUnique = null;
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
if (useTargets) {
@@ -301,10 +302,12 @@ public abstract class SpellAbilityEffect {
}
// try sort in APNAP order
int indexAP = resultDuplicate.indexOf(sa.getHostCard().getGame().getPhaseHandler().getPlayerTurn());
if (indexAP != -1) {
Collections.rotate(resultDuplicate, - indexAP);
Player starter = game.getPhaseHandler().getPlayerTurn();
if (sa.hasParam("StartingWith")) {
starter = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("StartingWith"), sa).getFirst();
}
PlayerCollection ordered = game.getPlayersInTurnOrder(starter);
resultDuplicate.sort(Comparator.comparingInt(ordered::indexOf));
return resultUnique;
}

View File

@@ -56,8 +56,7 @@ public class RepeatEachEffect extends SpellAbilityEffect {
} else {
zone.add(ZoneType.Battlefield);
}
repeatCards = CardLists.getValidCards(game.getCardsIn(zone),
sa.getParam("RepeatCards"), source.getController(), source, sa);
repeatCards = CardLists.getValidCards(game.getCardsIn(zone), sa.getParam("RepeatCards"), source.getController(), source, sa);
}
else if (sa.hasParam(("RepeatSpellAbilities"))) {
repeatSas = Lists.newArrayList();
@@ -167,18 +166,13 @@ public class RepeatEachEffect extends SpellAbilityEffect {
}
if (sa.hasParam("RepeatPlayers")) {
final FCollection<Player> repeatPlayers = AbilityUtils.getDefinedPlayers(source, sa.getParam("RepeatPlayers"), sa);
final FCollection<Player> repeatPlayers = getDefinedPlayersOrTargeted(sa, "RepeatPlayers");
if (sa.hasParam("ClearRememberedBeforeLoop")) {
source.clearRemembered();
}
boolean optional = sa.hasParam("RepeatOptionalForEachPlayer");
boolean nextTurn = sa.hasParam("NextTurnForEachPlayer");
if (sa.hasParam("StartingWithActivator")) {
int aidx = repeatPlayers.indexOf(activator);
if (aidx != -1) {
Collections.rotate(repeatPlayers, -aidx);
}
}
for (final Player p : repeatPlayers) {
if (optional && !p.getController().confirmAction(repeat, null, sa.getParam("RepeatOptionalMessage"), null)) {
continue;

View File

@@ -300,7 +300,7 @@ public class Player extends GameEntity implements Comparable<Player> {
* Should keep player relations somewhere in the match structure
*/
public final PlayerCollection getOpponents() {
return game.getPlayers().filter(PlayerPredicates.isOpponentOf(this));
return game.getPlayersInTurnOrder(this).filter(PlayerPredicates.isOpponentOf(this));
}
public final PlayerCollection getRegisteredOpponents() {