[FIN] various text fixes

This commit is contained in:
theelk801 2025-05-30 21:27:14 -04:00
parent bf487046e1
commit 9ef2aac469
54 changed files with 222 additions and 141 deletions

View file

@ -474,6 +474,11 @@ public interface Ability extends Controllable, Serializable {
*/
Ability withFlavorWord(String flavorWord);
/**
* Gets rule prefix for text generation
*/
String addRulePrefix(String rule);
/**
* Sets flavor word for first mode
*/

View file

@ -1018,38 +1018,28 @@ public abstract class AbilityImpl implements Ability {
String ruleStart = sbRule.toString();
String text = getModes().getText();
String rule;
StringBuilder rule = new StringBuilder();
if (!text.isEmpty()) {
if (ruleStart.length() > 1) {
String end = ruleStart.substring(ruleStart.length() - 2).trim();
if (end.isEmpty() || end.equals(":") || end.equals(".")) {
rule = ruleStart + CardUtil.getTextWithFirstCharUpperCase(text);
rule.append(ruleStart + CardUtil.getTextWithFirstCharUpperCase(text));
} else {
rule = ruleStart + text;
rule.append(ruleStart + text);
}
} else {
rule = ruleStart + text;
rule.append(ruleStart + text);
}
} else {
rule = ruleStart;
}
String prefix;
if (this instanceof TriggeredAbility || this instanceof EntersBattlefieldAbility) {
prefix = null;
} else if (abilityWord != null) {
prefix = abilityWord.formatWord();
} else if (flavorWord != null) {
prefix = CardUtil.italicizeWithEmDash(flavorWord);
} else {
prefix = null;
}
if (prefix != null) {
rule = prefix + CardUtil.getTextWithFirstCharUpperCase(rule);
rule.append(ruleStart);
}
if (appendToRule != null) {
rule = rule.concat(appendToRule);
rule.append(appendToRule);
}
return rule;
if (this instanceof TriggeredAbility || this instanceof EntersBattlefieldAbility) {
return rule.toString();
}
return addRulePrefix(rule.toString());
}
@Override
@ -1479,6 +1469,17 @@ public abstract class AbilityImpl implements Ability {
return this;
}
@Override
public String addRulePrefix(String rule) {
if (abilityWord != null) {
return abilityWord.formatWord() + CardUtil.getTextWithFirstCharUpperCase(rule);
} else if (flavorWord != null) {
return CardUtil.italicizeWithEmDash(flavorWord) + CardUtil.getTextWithFirstCharUpperCase(rule);
} else {
return rule;
}
}
@Override
public Ability withFirstModeFlavorWord(String flavorWord) {
this.modes.getMode().withFlavorWord(flavorWord);

View file

@ -294,16 +294,6 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
@Override
public String getRule() {
StringBuilder sb = new StringBuilder();
String prefix;
if (abilityWord != null) {
prefix = abilityWord.formatWord();
} else if (flavorWord != null) {
prefix = CardUtil.italicizeWithEmDash(flavorWord);
} else {
prefix = "";
}
sb.append(prefix);
sb.append(triggerPhrase == null ? "" : triggerPhrase);
if (interveningIfCondition != null) {
@ -376,7 +366,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
sb.append(" Do this only once each turn.");
}
}
return sb.toString();
return addRulePrefix(sb.toString());
}
private static boolean startsWithVerb(String ruleLow) {

View file

@ -6,7 +6,6 @@ import mage.abilities.condition.Condition;
import mage.abilities.effects.Effect;
import mage.abilities.effects.EntersBattlefieldEffect;
import mage.constants.Zone;
import mage.util.CardUtil;
/**
* @author BetaSteward_at_googlemail.com
@ -81,19 +80,8 @@ public class EntersBattlefieldAbility extends StaticAbility {
return abilityRule;
}
String superRule = super.getRule();
String prefix;
if (abilityWord != null) {
prefix = abilityWord.formatWord();
} else if (flavorWord != null) {
prefix = CardUtil.italicizeWithEmDash(flavorWord);
} else {
prefix = null;
}
String rule = (optional ? "you may have " : "") + "{this} enter" + (optional ? "" : "s")
+ (!superRule.isEmpty() && superRule.charAt(0) == ' ' ? "" : " ") + superRule;
if (prefix != null) {
return prefix + CardUtil.getTextWithFirstCharUpperCase(rule);
}
return rule;
return addRulePrefix(rule);
}
}

View file

@ -9,10 +9,8 @@ import mage.abilities.effects.Effect;
import mage.abilities.effects.Effects;
import mage.abilities.hint.Hint;
import mage.constants.EffectType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.util.CardUtil;
import mage.watchers.Watcher;
import java.util.ArrayList;
@ -83,9 +81,7 @@ public class ConditionalInterveningIfTriggeredAbility extends TriggeredAbilityIm
if (abilityText == null || abilityText.isEmpty()) {
return ability.getRule();
}
return (flavorWord != null ? CardUtil.italicizeWithEmDash(flavorWord) : "") +
(abilityWord != null ? abilityWord.formatWord() : "") +
abilityText + (abilityText.endsWith(".") || abilityText.endsWith("\"") || abilityText.endsWith(">") ? "" : ".");
return addRulePrefix(abilityText + (abilityText.endsWith(".") || abilityText.endsWith("\"") || abilityText.endsWith(">") ? "" : "."));
}
@Override

View file

@ -29,7 +29,7 @@ public class ChooseCreatureEffect extends OneShotEffect {
public ChooseCreatureEffect(FilterPermanent filter, boolean useOffset) {
super(Outcome.Benefit);
this.filter = filter;
this.staticText = "choose " + filter.getMessage();
this.staticText = "choose " + CardUtil.addArticle(filter.getMessage());
this.useOffset = useOffset;
}

View file

@ -10,7 +10,7 @@ public class ExileSourceAndReturnFaceUpEffect extends ExileAndReturnSourceEffect
public ExileSourceAndReturnFaceUpEffect() {
super(PutCards.BATTLEFIELD, Pronoun.IT, true, null);
staticText = "exile {this}, then return it to the battlefield. <i>(front face up)</i>";
staticText = "exile {this}, then return it to the battlefield <i>(front face up)</i>.";
}
private ExileSourceAndReturnFaceUpEffect(final ExileSourceAndReturnFaceUpEffect effect) {

View file

@ -156,7 +156,11 @@ public class MayCastTargetCardEffect extends OneShotEffect {
}
text += ".";
if (thenExile) {
text += " " + ThatSpellGraveyardExileReplacementEffect.RULE_YOUR;
if (text.contains("a graveyard")) {
text += " " + ThatSpellGraveyardExileReplacementEffect.RULE_A;
} else {
text += " " + ThatSpellGraveyardExileReplacementEffect.RULE_YOUR;
}
}
return text;
}

View file

@ -88,7 +88,7 @@ public class EquipAbility extends ActivatedAbilityImpl {
String targetText = getTargets().get(0) != null ? getTargets().get(0).getFilter().getMessage() : "creature";
String reminderText = " <i>(" + getManaCosts().getText() + ": Attach to target " + targetText + ". Equip only as a sorcery.)</i>";
StringBuilder sb = new StringBuilder("Equip");
StringBuilder sb = new StringBuilder(addRulePrefix("Equip"));
if (!targetText.equals("creature you control")) {
sb.append(' ').append(targetText);
}

View file

@ -81,8 +81,8 @@ public class ProtectionAbility extends StaticAbility {
if (this.staticText != null && !this.staticText.isEmpty()) {
return this.staticText;
}
return (flavorWord == null ? "protection from " : CardUtil.italicizeWithEmDash(flavorWord) + "Protection from ")
+ filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras.");
return addRulePrefix("protection from ") + filter.getMessage() +
(removeAuras ? "" : ". This effect doesn't remove Auras.");
}
public ProtectionAbility setText(String text) {

View file

@ -583,6 +583,11 @@ public class StackAbility extends StackObjectImpl implements Ability {
throw new UnsupportedOperationException("Not supported.");
}
@Override
public String addRulePrefix(String rule) {
throw new UnsupportedOperationException("Not supported.");
}
@Override
public Ability withFirstModeFlavorWord(String flavorWord) {
throw new UnsupportedOperationException("Not supported.");