diff --git a/data/magic.mse-game/script b/data/magic.mse-game/script
index 83dfdcf85..a769fbda4 100644
--- a/data/magic.mse-game/script
+++ b/data/magic.mse-game/script
@@ -1536,18 +1536,18 @@ auto_reminder := {
level := filter_text(input, match:"[0-9]+")
if level == "" then level := "1"
tag := name_tag_for_level(to_number(level))
- type_field := card["type"+tag]
+ type_field := remove_tags(card["type"+tag])
cost_field := card["casting_cost"+tag]
if custom_auto_reminder()
- then custom_auto_reminder()
+ then custom_auto_reminder(input)
else if lang_setting("is_saga")(type_field)
then saga_reminder_script(tag:tag)
else if lang_setting("is_class")(type_field)
then "(Gain the next level as a sorcery to add its ability.)"
- else if contains(cost_field, match:"/")
- then hybrid_reminder(cost_field)
else if lang_setting("is_room")(type_field)
then "(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)"
+ else if contains(cost_field, match:"/")
+ then hybrid_reminder(cost_field)
else ""
}
saga_map := [
@@ -1590,23 +1590,28 @@ hybrid_reminder := {
input,
match:"(([^ ])/([^ ])(?:/([^ ]))?).*", ## _1 hybrid, _2 sym1, _3 sym2, _4 sym3
replace: {
- if _4 != "" then (
- if _2 == "2" then
- "({_1} can be paid with any two mana, {_3}, or {_4}. This card's mana value is {english_number(cmc(input))}.)"
- else if _2 == "H" then
- "({_1} can be paid with {_3}, {_4}, or 2 life.)"
- else "({_1} can be paid with either {_2}, {3}, or {3}.)"
- )
- else (
- if _2 == "2" then
- "({_1} can be paid with any two mana or with {_3}. This card's mana value is {english_number(cmc(input))}.)"
- else if _2 == "H" then
- "({_1} can be paid with either {_3} or 2 life.)"
- else "({_1} can be paid with either {_2} or {_3}.)"
- )
+ hybrid_reminder_delooper(symbol:_1, hyb1:_2, hyb2:_3, hyb3:_4)
}
)
}
+## split into its own function to avoid replace() loops with autoreminder
+## hybrid_reminder_delooper(symbol:"H/R/W", hyb1:"H", hyb2:"R", hyb3:"W")
+hybrid_reminder_delooper := {
+ if hyb3 != "" then (
+ if hyb1 == "2" then
+ "({symbol} can be paid with any two mana, {hyb2}, or {hyb3}. This card's mana value is {english_number(cmc(input))}.)"
+ else if hyb1 == "H" then
+ "({symbol} can be paid with {hyb2}, {hyb3}, or 2 life.)"
+ else "({symbol} can be paid with either {hyb1}, {3}, or {3}.)"
+ )
+ else (
+ if hyb1 == "2" then
+ "({symbol} can be paid with any two mana or with {hyb2}. This card's mana value is {english_number(cmc(input))}.)"
+ else if hyb1 == "H" then
+ "({symbol} can be paid with either {hyb2} or 2 life.)"
+ else "({symbol} can be paid with either {hyb1} or {hyb2}.)"
+ )
+}
#### these are considered a correct 'word' for spellchecking in the text box:
additional_text_words := match@(match:
"(?ix)^(?: #### match whole word
@@ -1848,18 +1853,6 @@ text_filter :=
tag: "",
contents: { "" + (if card_name=="" then "LEGENDNAME" else legend_filter(strip_card_codes(card_name, atom:true))) + "" }
) +
- tag_contents@(
- tag: ""
- contents: { auto_reminder(margin_code) }
- ) +
- replace@(
- match:"(E+)()? ",
- replace: {
- num := english_number(length(_1))
- str := if num == "one" then "an energy counter" else num + " energy counters"
- _1 + _2 + " ({str})"
- }
- ) +
replace@(
match: "INS([1-9])",
in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|/|)",
@@ -1910,7 +1903,33 @@ text_filter :=
match: "\\[[-+=]?[VHSCEKPLOTQ\\?XYZIWUBRG0-9/|]+\\]",
replace: {"" + mana_filter_t() + ""}
) +
- #### step 6 : curly quotes
+ #### step 6a : auto reminder
+ #### default to subtype or mana cost rt
+ tag_contents@(
+ tag: ""
+ contents: { auto_reminder(margin_code) }
+ ) +
+ #### overrule if immediately after a string of energy symbols
+ replace@(
+ match:"(E+)()? [^\n]*?",
+ replace: {
+ num := english_number(length(_1))
+ str := if num == "one" then "an energy counter" else num + " energy counters"
+ _1 + _2 + " ({str})"
+ }
+ ) +
+ #### overrule if at the end of a paragraph with a hybrid mana symbol
+ replace@(
+ match:"()([^]*(([^ ])/([^ ])(?:/?([^ ])?))[^<]*)([^\n]+) ([^\n]*?)$",
+ replace: {
+ # _1 remaining string, _8 eaten autorem
+ # eaten autorem may have legitimate strings, R/W: You get EE **. ** -> R/W: You get EE (R/W can be paid with either R or W.)
+ # (two energy counters).
+ extra := if contains(_8, match:"atom-autorem") then "" + substring(_8, end:length(_8)-length("")) else ""
+ _1 + _2 + _7 + extra + " {hybrid_reminder_delooper(symbol:_3, hyb1:_4, hyb2:_5, hyb3:_6)}"
+ }
+ ) +
+ #### step 6b : curly quotes
{
if set.curly_quotes then curly_quotes(input) else input
} +