diff --git a/data/magic.mse-game/add_cards_scripts b/data/magic.mse-game/add_cards_scripts index df6e7114..4ef298ee 100644 --- a/data/magic.mse-game/add_cards_scripts +++ b/data/magic.mse-game/add_cards_scripts @@ -60,34 +60,31 @@ add cards script: description: Adds a rare card of each color to the set script: [ new_card([casting_cost: "W", rarity: "rare"]) , new_card([casting_cost: "U", rarity: "rare"]) , new_card([casting_cost: "B", rarity: "rare"]) , new_card([casting_cost: "R", rarity: "rare"]) , new_card([casting_cost: "G", rarity: "rare"]) ] - add cards script: - name: &Cube - description: Custom list of cube cards - script: - [ - new_card([ name: "Thousand-Faced Shadow", super_type: "Creature", sub_type: "Human Ninja", rule_text: "Ninjutsu [2][U][U] ([2][U][U], Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nFlying\nWhen Thousand-Faced Shadow enters the battlefield from your hand, if it's attacking, create a token that's a copy of another target attacking creature. The token enters the battlefield tapped and attacking.", casting_cost: "U", power: "1", toughness: "1", illustrator: "Ekaterina Burmak", card_color: "blue", rarity: "mythic rare"]) - , new_card([ name: "Sea Gate Stormcaller", super_type: "Creature", sub_type: "Human Wizard", rule_text: "Kicker [4][U]\nWhen Sea Gate Stormcaller enters the battlefield, copy the next instant or sorcery spell with mana value 2 or less you cast this turn when you cast it. If Sea Gate Stormcaller was kicked, copy that spell twice instead. You may choose new targets for the copies.", casting_cost: "1U", power: "2", toughness: "1", illustrator: "Anna Steinbauer", card_color: "blue", rarity: "mythic rare"]) - , new_card([ name: "Thieving Skydiver", super_type: "Creature", sub_type: "Merfolk Rogue", rule_text: "Kicker [X]. X can't be 0. (You may pay an additional [X] as you cast this spell.)\nFlying\nWhen Thieving Skydiver enters the battlefield, if it was kicked, gain control of target artifact with mana value X or less. If that artifact is an Equipment, attach it to Thieving Skydiver.", casting_cost: "1U", power: "2", toughness: "1", illustrator: "Kieran Yanner", card_color: "blue", rarity: "mythic rare"]) - , new_card([ name: "Watcher for Tomorrow", super_type: "Creature", sub_type: "Human Wizard", rule_text: "Hideaway 4 (When this creature enters the battlefield, look at the top four cards of your library, exile one face down, then put the rest on the bottom in a random order.)\nWatcher for Tomorrow enters the battlefield tapped.\nWhen Watcher for Tomorrow leaves the battlefield, put the exiled card into its owner's hand.", casting_cost: "1U", power: "2", toughness: "1", illustrator: "Tommy Arnold", card_color: "blue", rarity: "mythic rare"]) - , new_card([ name: "Snap", super_type: "Instant", rule_text: "Return target creature to its owner's hand. Untap up to two lands.", flavor_text: "Good riddance.", casting_cost: "1U", illustrator: "Mike Raabe", card_color: "blue", rarity: "mythic rare"]) - , new_card([ name: "Thopter Foundry", super_type: "Artifact", rule_text: "[1], Sacrifice a nontoken artifact: Create a 1/1 blue Thopter artifact creature token with flying. You gain 1 life.", flavor_text: "\"Etherium is limited. Innovation is not.\"\n—Tezzeret", casting_cost: "W/BU", illustrator: "Ralph Horsley", card_color: "black, blue, white", rarity: "mythic rare"]) - , new_card([ name: "Sword of the Meek", super_type: "Artifact", sub_type: "Equipment", rule_text: "Equipped creature gets +1/+2.\nEquip [2]\nWhenever a 1/1 creature enters the battlefield under your control, you may return Sword of the Meek from your graveyard to the battlefield, then attach it to that creature.", casting_cost: "2", illustrator: "Franz Vohwinkel", rarity: "mythic rare"]) - , new_card([ name: "Infernal Grasp", super_type: "Instant", rule_text: "Destroy target creature. You lose 2 life.", flavor_text: "Ancient evils dwell within the burning chasm called the Ashmouth, ever ready to devour those foolish enough to travel alone.", casting_cost: "1B", illustrator: "Naomi Baker", card_color: "black", rarity: "mythic rare"]) - , new_card([ name: "Dualcaster Mage", super_type: "Creature", sub_type: "Human Wizard", rule_text: "Flash\nWhen Dualcaster Mage enters the battlefield, copy target instant or sorcery spell. You may choose new targets for the copy.", flavor_text: "\"It has been my experience that disasters like to strike in pairs.\"", casting_cost: "1RR", power: "2", toughness: "2", illustrator: "Matt Stewart", card_color: "red", rarity: "mythic rare"]) - , new_card([ name: "Burst Lightning", super_type: "Instant", rule_text: "Kicker [4] (You may pay an additional [4] as you cast this spell.)\nBurst Lightning deals 2 damage to any target. If this spell was kicked, it deals 4 damage instead.", casting_cost: "R", illustrator: "Vance Kovacs", card_color: "red", rarity: "mythic rare"]) - , new_card([ name: "Rite of Flame", super_type: "Sorcery", rule_text: "Add [R][R], then add [R] for each card named Rite of Flame in each graveyard.", flavor_text: "Deep beneath the ice, beneath the soil and the rock, Dominaria's fire still burned hot.", casting_cost: "R", illustrator: "Dany Orizio", card_color: "red", rarity: "mythic rare"]) - , new_card([ name: "Cathartic Reunion", super_type: "Sorcery", rule_text: "As an additional cost to cast this spell, discard two cards.\nDraw three cards.", flavor_text: "The chasm of years and worlds collapsed under the power of their embrace.", casting_cost: "1R", illustrator: "Howard Lyon", card_color: "red", rarity: "mythic rare"]) - , new_card([ name: "Finale of Promise", super_type: "Sorcery", rule_text: "You may cast up to one target instant card and/or up to one target sorcery card from your graveyard each with mana value X or less without paying their mana costs. If a spell cast this way would be put into your graveyard, exile it instead. If X is 10 or more, copy each of those spells twice. You may choose new targets for the copies.", casting_cost: "XRR", illustrator: "Jaime Jones", card_color: "red", rarity: "mythic rare"]) - , new_card([ name: "Endurance", super_type: "Creature", sub_type: "Elemental Incarnation", rule_text: "Flash\nReach\nWhen Endurance enters the battlefield, up to one target player puts all the cards from their graveyard on the bottom of their library in a random order.\nEvoke—Exile a green card from your hand.", casting_cost: "1GG", power: "3", toughness: "4", illustrator: "Svetlin Velinov", card_color: "green", rarity: "mythic rare"]) - , new_card([ name: "Arboreal Grazer", super_type: "Creature", sub_type: "Beast", rule_text: "Reach\nWhen Arboreal Grazer enters the battlefield, you may put a land card from your hand onto the battlefield tapped.", flavor_text: "\"We fight to stop a tyrant, but we also fight for the gentle creatures who have no concept of what befalls their world.\"\n—Vivien Reid", casting_cost: "G", power: "0", toughness: "3", illustrator: "Jason Rainville", card_color: "green", rarity: "mythic rare"]) - , new_card([ name: "Avacyn's Pilgrim", super_type: "Creature", sub_type: "Human Monk", rule_text: "[T]: Add [W].", flavor_text: "\"Avacyn's protection is everywhere. From the holy church to the sacred glade, all that we see is under her blessed watch.\"", casting_cost: "G", power: "1", toughness: "1", illustrator: "Jana Schirmer & Johannes Voss", card_color: "green, white", rarity: "mythic rare"]) - , new_card([ name: "Elvish Mystic", super_type: "Creature", sub_type: "Elf Druid", rule_text: "[T]: Add [G].", flavor_text: "\"Life grows everywhere. My kin merely find those places where it grows strongest.\"\n—Nissa Revane", casting_cost: "G", power: "1", toughness: "1", illustrator: "Wesley Burt", card_color: "green", rarity: "mythic rare"]) - , new_card([ name: "Krark, the Thumbless", super_type: "Legendary Creature", sub_type: "Goblin Wizard", rule_text: "Whenever you cast an instant or sorcery spell, flip a coin. If you lose the flip, return that spell to its owner's hand. If you win the flip, copy that spell, and you may choose new targets for the copy.\nPartner (You can have two commanders if both have partner.)", flavor_text: "\"Double or nothing.\"", casting_cost: "1R", power: "2", toughness: "2", illustrator: "Mathias Kollros", card_color: "red", rarity: "mythic rare"]) - , new_card([ name: "Oni-Cult Anvil", super_type: "Artifact", rule_text: "Whenever one or more artifacts you control leave the battlefield during your turn, create a 1/1 colorless Construct artifact creature token. This ability triggers only once each turn.\n[T], Sacrifice an artifact: Oni-Cult Anvil deals 1 damage to each opponent. You gain 1 life.", casting_cost: "BR", illustrator: "Yeong-Hao Han", card_color: "black, red", rarity: "mythic rare"]) - , new_card([ name: "Prismari Command", super_type: "Instant", rule_text: "Choose two —\n• Prismari Command deals 2 damage to any target.\n• Target player draws two cards, then discards two cards.\n• Target player creates a Treasure token.\n• Destroy target artifact.", casting_cost: "1UR", illustrator: "Johannes Voss", card_color: "red, blue", rarity: "mythic rare"]) - , new_card([ name: "Korvold, Fae-Cursed King", super_type: "Legendary Creature", sub_type: "Dragon Noble", rule_text: "Flying\nWhenever Korvold, Fae-Cursed King enters the battlefield or attacks, sacrifice another permanent.\nWhenever you sacrifice a permanent, put a +1/+1 counter on Korvold and draw a card.", flavor_text: "Transformed at his own wedding, he promptly ate the banquet, the gifts, and the guests.", casting_cost: "2BRG", power: "4", toughness: "4", illustrator: "Wisnu Tan", card_color: "black, green, red", rarity: "mythic rare"]) - , new_card([ name: "Sol Ring", super_type: "Artifact", rule_text: "[T]: Add [C][C].", casting_cost: "1", illustrator: "Mark Tedin", rarity: "mythic rare"]) - , new_card([ name: "Witch's Oven", super_type: "Artifact", rule_text: "[T], Sacrifice a creature: Create a Food token. If the sacrificed creature's toughness was 4 or greater, create two Food tokens instead. (They're artifacts with \"[2], [T], Sacrifice this artifact: You gain 3 life.\")", flavor_text: "The wafting smells are both scrumptious and suspicious.", casting_cost: "1", illustrator: "Alexander Forssberg", rarity: "mythic rare"]) - , new_card([ name: "Silver Raven", super_type: "Artifact Creature", sub_type: "Bird", rule_text: "Flying\nWhen Silver Raven enters the battlefield, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)", flavor_text: "Wings take flight on whispered wind.", casting_cost: "U", power: "1", toughness: "1", illustrator: "Joe Slucher", card_color: "blue", rarity: "mythic rare"]) - ] + name: &Design Skeleton Full + description: Basic skeleton of 19C,11U,7R,2M/color, 1U,1R/color pair, 6C,15U,8R,5M/colorless. Type "skeleton_info()" in console tab/help + script: skeleton_script() +add cards script: + name: &Design Skeleton Commons + description: Basic skeleton of 19C/color. Type "skeleton_info()" into the console tab to change the numbers. + script: skeleton_runner(count:skeleton_commons) +add cards script: + name: &Design Skeleton Uncommons + description: Basic skeleton of 11U/color. Type "skeleton_info()" into the console tab to change the numbers. + script: skeleton_runner(count:skeleton_uncommons, prefix:"U", rarity:"uncommon") +add cards script: + name: &Design Skeleton Rares + description: Basic skeleton of 7R/color. Type "skeleton_info()" into the console tab to change the numbers. + script: skeleton_runner(count:skeleton_rares, prefix:"R", rarity:"rare") +add cards script: + name: &Design Skeleton Mythics + description: Basic skeleton of 2M/color. Type "skeleton_info()" into the console tab to change the numbers. + script: skeleton_runner(count:skeleton_mythics, prefix:"M", rarity:"mythic rare") +add cards script: + name: &Design Skeleton Gold Uncommons + description: Basic skeleton of 1U/color combination. Type "skeleton_info()" into the console tab to change the numbers. + script: skeleton_runner(count:skeleton_gold_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy) +add cards script: + name: &Design Skeleton Gold Rares + description: Basic skeleton of 1R/color combination. Type "skeleton_info()" into the console tab to change the numbers. + script: skeleton_runner(count:skeleton_gold_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy) diff --git a/data/magic.mse-game/auto_replace b/data/magic.mse-game/auto_replace index 0f047205..59a1aba5 100644 --- a/data/magic.mse-game/auto_replace +++ b/data/magic.mse-game/auto_replace @@ -25,30 +25,1057 @@ auto replace: - replace: — +# +#Utility replacements auto replace: - match: CIP - replace: enters the battlefield + match: LTB + replace: leaves the battlefield +auto replace: + match: EOT + replace: end of turn +auto replace: + match: UEOT + replace: until end of turn +auto replace: + match: ueot + replace: until end of turn +auto replace: + match: UEPT + replace: until end of turn +auto replace: + match: uept + replace: until end of turn +auto replace: + match: BYES + replace: At the beginning of your end step +auto replace: + match: BNES + replace: At the beginning of the next end step auto replace: match: AAA - replace: as an additional cost to cast + replace: As an additional cost to cast +auto replace: + match: CMC + replace: mana value +auto replace: + match: cmc + replace: mana value +auto replace: + match: MV + replace: mana value +auto replace: + match: mv + replace: mana value +auto replace: + match: ETT + replace: End the turn. auto replace: match: @ - replace: LEGENDNAME + replace: LEGENDNAME> auto replace: match: ~ - replace: CARDNAME + replace: CARDNAME> +auto replace: + match: ' + replace: ’ auto replace: match: :: replace: • auto replace: match: -> - replace: • + replace: • +auto replace: + match: WETB + replace: When CARDNAME enters the battlefield +auto replace: + match: CEBT + replace: CARDNAME enters the battlefield tapped. auto replace: match: ETB replace: enters the battlefield auto replace: - match: etbt - replace: enters the battlefield tapped + match: etb + replace: enters the battlefield +auto replace: + match: battlefieldA + replace: enters the battlefield or attacks, +auto replace: + match: battlefieldT + replace: battlefield tapped +auto replace: + match: WTD + replace: When CARDNAME dies +auto replace: + match: WTA + replace: Whenever CARDNAME attacks, +auto replace: + match: WTB + replace: Whenever CARDNAME blocks, +auto replace: + match: SAC + replace: Sacrifice a creature: +auto replace: + match: SAX + replace: sacrifice a creature +auto replace: + match: P&T + replace: power and toughness +auto replace: + match: BPT + replace: base power and toughness +# +#Abilities +auto replace: + match: CBC + replace: CARDNAME can't be countered. +auto replace: + match: CBSA + replace: CARDNAME can't be countered by spells or abilities. +auto replace: + match: WTT + replace: Whenever CARDNAME becomes the target of a spell +auto replace: + match: ILL + replace: When CARDNAME becomes the target of a spell or ability, sacrifice it. +auto replace: + match: ANYCARD + replace: Search your library for a card and put that card into your hand. Then shuffle your library. +auto replace: + match: TUTOR + replace: Search your library for a card, reveal it, and put it into your hand. Then shuffle your library. +auto replace: + match: BLAND + replace: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library. +auto replace: + match: FLICKER + replace: Exile target creature you control, then return that card to the battlefield under your control. +auto replace: + match: BOUNCE + replace: Return target creature to its owner's hand. +auto replace: + match: FIRE + replace: [R]: CARDNAME gets +1/+0 until end of turn. +auto replace: + match: SHADE + replace: [B]: CARDNAME gets +1/+1 until end of turn. +auto replace: + match: CTS + replace: Counter target spell. +auto replace: + match: CTA + replace: Counter target ability. +auto replace: + match: CT.SA + replace: Counter target spell or ability. +auto replace: + match: CBB + replace: CARDNAME can't be blocked. +auto replace: + match: CCB + replace: CARDNAME can't block. +auto replace: + match: ATE + replace: CARDNAME attacks each turn if able. +auto replace: + match: ACE + replace: CARDNAME attacks each combat if able. +auto replace: + match: CBTT + replace: Target creature can't block this turn. +auto replace: + match: SAB + replace: Whenever CARDNAME deals combat damage to a player, +auto replace: + match: TUCK + replace: Put target creature on the bottom of its owner's library. +auto replace: + match: TOP + replace: Put target creature on top of its owner's library. +auto replace: + match: WARP + replace: The owner of target creature shuffles it into their library. +auto replace: + match: EXTRA + replace: Take an extra turn after this one. +auto replace: + match: DEA + replace: Destroy target artifact or enchantment. +auto replace: + match: DTA + replace: Destroy target artifact. +auto replace: + match: DTE + replace: Destroy target enchantment. +auto replace: + match: DAL + replace: Destroy target artifact or land. +auto replace: + match: DTF + replace: Destroy target creature with flying. +auto replace: + match: DTL + replace: Destroy target land. +auto replace: + match: CLONE + replace: You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield. +auto replace: + match: MUR + replace: Destroy target creature. +auto replace: + match: DTAC + replace: Destroy target attacking creature. +auto replace: + match: DTBC + replace: Destroy target blocking creature. +auto replace: + match: DTABC + replace: Destroy target attacking or blocking creature. +auto replace: + match: ORING + replace: When CARDNAME enters the battlefield, exile target creature an opponent controls until CARDNAME leaves the battlefield. (That creature returns under its owner's control.) +auto replace: + match: WIDE + replace: CARDNAME can block any number of creatures. +auto replace: + match: PLATINUM + replace: You can't lose the game and your opponents can't win the game. +auto replace: + match: ABYSSAL + replace: You can't win the game and your opponents can't lose the game. +auto replace: + match: ABOC + replace: at the beginning of combat +auto replace: + match: ABOY + replace: at the beginning of combat on your turn +auto replace: + match: SMITE + replace: Destroy target creature with power 4 or greater. +auto replace: + match: PAC + replace: Enchanted creature can’t attack or block. +auto replace: + match: ARR + replace: Enchanted creature can’t attack or block, and its activated abilities can’t be activated. +auto replace: + match: PTEC + replace: CARDNAME's power and toughness are equal to the number of creatures you control. +auto replace: + match: REA + replace: Put target creature card from a graveyard onto the battlefield under your control. +auto replace: + match: UNT + replace: Whenever another creature enters the battlefield, untap CARDNAME. +auto replace: + match: XATK + replace: Untap all creatures that attacked this turn. After this main phase, there is an additional combat phase followed by an additional main phase. +auto replace: + match: LTC + replace: Target land becomes the basic land type of your choice. +auto replace: + match: CUR + replace: Whenever this creature deals combat damage to an opponent, draw a card. +auto replace: + match: FREEZE + replace: Tap target creature. That creature doesn't untap during its controller's next untap step. +auto replace: + match: LOCK + replace: Enchanted creature doesn't untap. +auto replace: + match: LOOT + replace: Draw a card, then discard a card. +auto replace: + match: RUMMAGE + replace: Discard a card, then draw a card. +auto replace: + match: WIS + replace: This creature's power and toughness are equal to the number of cards in our hand. +auto replace: + match: COPYS + replace: Copy target instant or sorcery spell. You may choose new targets for the copy. +auto replace: + match: REDIRECT + replace: Change the target of target spell with a single target. +auto replace: + match: CONTROL + replace: Gain control of target creature. +auto replace: + match: STEAL + replace: Gain control of target creature until end of turn. +auto replace: + match: TOUT + replace: Tap or untap target +auto replace: + match: WINDFALL + replace: Each player discards their hand, then draws cards equal to the greatest number of cards a player discarded this way. +auto replace: + match: WHEEL + replace: Each player discards their hand, then draws seven cards. +auto replace: + match: POLYMORPH + replace: Exile target creature. Its controller reveals cards from the top of their library until they reveals a creature card. That player puts that card onto the battlefield. +auto replace: + match: CANE + replace: Shuffle your graveyard into your library. +auto replace: + match: KHABAL + replace: Whenever another creature dies, put a +1/+1 counter on this creature. +auto replace: + match: FUNERAL + replace: Whenever another creature you control dies, +auto replace: + match: LOMBOTOMY + replace: Choose a nonland card name. Search target player's graveyard hand and library for all cards with that name and exile them. +auto replace: + match: SENGIR + replace: When a creature damaged by this creature dies, put a +1/+1 counter on this creature. +auto replace: + match: SPECTER + replace: When this creature deals combat damage to an opponent, that player discards a card. +auto replace: + match: OSF + replace: Target creature you control deals damage to equal to its power to another target creature. +auto replace: + match: LURE + replace: CARDNAME must be blocked this turn if able. +auto replace: + match: WIDELURE + replace: All creatures able to block CARDNAME do so. +auto replace: + match: DAUNT + replace: CARDNAME can't be blocked by creatures with power 2 or less. +auto replace: + match: HYDRA + replace: CARDNAME enters the battlefield with X +1/+1 counters on it. +auto replace: + match: FOG + replace: Prevent all combat damage that would be dealt this turn. +auto replace: + match: STALK + replace: CARDNAME can't be blocked by more than one creature. +auto replace: + match: STRAMPLE + replace: You may have CARDNAME assign its combat damage as though it weren't blocked. +auto replace: + match: AOT + replace: Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. +auto replace: + match: FLOWSTONE + replace: Target creature gets +1/-1 until end of turn. +auto replace: + match: BOOST + replace: Put a +1/+1 counter on target creature. +auto replace: + match: WITHER + replace: Put a -1/-1 counter on target creature. +auto replace: + match: DEFLECT + replace: The next time a source of your choice would deal damage to you this turn, prevent that damage. If damage is prevented this way, CARDNAME deals that much damage to that source's controller. +auto replace: + match: TCOP + replace: target creature or player +auto replace: + match: FORATK + replace: Target creature attacks this turn if able. +auto replace: + match: MEDDLING + replace: As CARDNAME enters the battlefield, choose a nonland card name. Spells with the chosen name can't be cast. +auto replace: + match: SILENCE + replace: Your opponents can't cast spells this turn. (Spells cast before this resolves are unaffected.) +auto replace: + match: TWIST + replace: Switch target creature's power and toughness until end of turn. +auto replace: + match: PUNCH + replace: Target creature you control deals damage equal to its power to target creature you don't control. +auto replace: + match: FURNACE + replace: If a source would deal damage to a permanent or player, it deals double that damage to that permanent or player instead. +auto replace: + match: MANAFLARE + replace: Whenever a player taps a land for mana, that player adds one mana of any type that land produced. +auto replace: + match: HOWLING + replace: At the beginning of each player's draw step, that player draws an additional card. +auto replace: + match: DEATHSAC + replace: Whenever a creature you control dies, each opponent sacrifices a creature. +auto replace: + match: SHROUD + replace: can't be the target of spells or abilities. +auto replace: + match: PROWESS + replace: Whenever you cast a noncreature spell, +auto replace: + match: CCMC + replace: Counter target spell with mana value X. +auto replace: + match: UNMORPH + replace: When CARDNAME is turned face up, +auto replace: + match: SPECTER + replace: When this creature deals combat damage to an opponent, that player discards a card. +auto replace: + match: GY + replace: graveyard +auto replace: + match: RELENTLESS + replace: A deck can have any number of cards named CARDNAME. +auto replace: + match: HIFLY + replace: CARDNAME can block only creatures with flying. +# +#Ability word replacements +auto replace: + match: THRESHOLDP + replace: Threshold — {Effect} as long as seven or more cards are in your graveyard. +auto replace: + match: THRESHOLDS + replace: Threshold — If seven or more cards are in your graveyard, {Effect} +auto replace: + match: IMPRINT + replace: Imprint — When CARDNAME enters the battlefield, you may exile a {something} from {somewhere}. +auto replace: + match: CHANNEL + replace: Channel — {Cost}, discard CARDNAME: {Effect} +auto replace: + match: SWEEP + replace: Sweep — Return any number of {Basic Land Type} you control to their owner's hand. {Effect based on number returned.} +auto replace: + match: RADIANCE + replace: Radiance — Target creature and each other creature that shares a color with it +auto replace: + match: HELLBENTS + replace: Hellbent — If you have no cards in hand, {Effect} +auto replace: + match: HELLBENTP + replace: Hellbent — {Effect}, as long as you have no cards in hand. +auto replace: + match: GRANDEUR + replace: Grandeur — Discard another card named CARDNAME: {Effect} +auto replace: + match: KINSHIP + replace: Kinship — At the beginning of your upkeep, you may look at the top card of your library. If that card shares a creature type with CARDNAME, you may reveal it. If you do, {Effect}. +auto replace: + match: CHROMA + replace: Chroma — {Effect} based on the number of {Color} mana symbols {Somewhere} +auto replace: + match: DOMAIN + replace: Domain — {Effect} for each basic land type among lands you control. +auto replace: + match: LANDFALLP + replace: Landfall — Whenever a land enters the battlefield under your control, +auto replace: + match: LANDFALLS + replace: Landfall — If you had a land enter the battlefield under your control this turn, {Effect}. +auto replace: + match: METALCRAFTP + replace: Metalcraft — {Effect} as long as you control three or more artifacts. +auto replace: + match: METALCRAFTS + replace: Metalcraft — If you control three or more artifacts, {Effect}. +auto replace: + match: JOINFORCES + replace: Join Forces — Starting with you, {Effect}. +auto replace: + match: MORBID + replace: Morbid — {Effect} if a creature died this turn. +auto replace: + match: FATEFULHOURS + replace: Fateful hour — If you have 5 or less life, {Effect}. +auto replace: + match: FATEFULHOURP + replace: Fateful hour — As long as you have 5 or less life, +auto replace: + match: BLOODRUSH + replace: Bloodrush — {COST}, Discard CARDNAME: Target attacking creature gets +auto replace: + match: BATTALION + replace: Battalion — Whenever CARDNAME and at least two other creatures attack, +auto replace: + match: HEROIC + replace: Heroic — Whenever you cast a spell that targets CARDNAME, {Effect}. +auto replace: + match: TEMPTINGOFFER + replace: Tempting offer — {Do Something}. Each opponent may {Do that thing}. For each opponent who does, {Do that thing again}. +auto replace: + match: INSPIRED + replace: Inspired — Whenever CARDNAME becomes untapped, +auto replace: + match: CONSTELLATION + replace: Constellation — Whenever CARDNAME or another enchantment enters the battlefield under your control, +auto replace: + match: STRIVE + replace: Strive — CARDNAME costs {COST} more to cast for each target beyond the first. +auto replace: + match: WILLOFTHECOUNCIL + replace: Will of the Council — Starting with you, each player votes for {Blank 1} or {Blank 2}. If {Blank 1} gets more votes, {Effect 1}. If {Blank 2} gets more votes or the vote is tied, {Effect 2}. +auto replace: + match: PARLEY + replace: Parley — Each player reveals the top card of their library. For each nonland card revealed this way, {Effect}. +auto replace: + match: RAID + replace: Raid — If you attacked with a creature this turn, {Effect}. +auto replace: + match: FEROCIOUSS + replace: Ferocious — If you control a creature with power 4 or greater, {Effect}. +auto replace: + match: LIEUTENANT + replace: Lieutenant — As long as you control your commander, CARDNAME gets {Effect} and creatures you control have {Effect}. +auto replace: + match: FORMIDABLES + replace: Formidable — If creatures you control have total power 8 or greater, {Effect}. +auto replace: + match: FORMIDABLEP + replace: Formidable — As long as creatures you control have total power 8 or greater, {Effect}. +auto replace: + match: SPELLMASTERYS + replace: Spell Mastery — If there are two or more instant and/or sorcery cards in your graveyard, {Effect}. +auto replace: + match: SPELLMASTERYP + replace: Spell Mastery — As long as there are two or more instant and/or sorcery cards in your graveyard, {Effect}. +auto replace: + match: RALLY + replace: Rally — Whenever CARDNAME or another Ally enters the battlefield under your control, {Effect}. +auto replace: + match: COHORT + replace: Cohort — [T], Tap an untapped Ally you control: {Effect}. +auto replace: + match: CONVERGE + replace: Converge — {Effect} for each color of mana spent to cast CARDNAME. +auto replace: + match: DELIRIUMS + replace: Delirium — If there are four or more card types among cards in your graveyard, {Effect}. +auto replace: + match: DELIRIUMP + replace: Delirium — {Effect} as long as there are four or more card types among cards in your graveyard. +auto replace: + match: COUNCILSDILEMMA + replace: Council's dilemma — Starting with you, each player votes for {Blank 1} or {Blank 2}. For each {Blank 1} vote, {Effect 1}. For each {Blank 2} vote, {Effect 2}. +auto replace: + match: REVOLT + replace: Revolt — If a permanent you controlled left the battlefield this turn, {Effect}. +auto replace: + match: ENRAGE + replace: Enrage — Whenever CARDNAME is dealt damage, {Effect}. +auto replace: + match: ADDENDUM + replace: Addendum — If you cast this spell during your main phase, +# +#X replacements +auto replace: + match: GRIND1 + replace: Target player reveals cards from the top of their library until they reveal a land card, then puts those cards into their graveyard. +auto replace: + match: GRIND2 + replace: Target player reveals cards from the top of their library until they reveal two land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND3 + replace: Target player reveals cards from the top of their library until they reveal three land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND4 + replace: Target player reveals cards from the top of their library until they reveal four land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND5 + replace: Target player reveals cards from the top of their library until they reveal five land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND6 + replace: Target player reveals cards from the top of their library until they reveal six land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND7 + replace: Target player reveals cards from the top of their library until they reveal seven land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND8 + replace: Target player reveals cards from the top of their library until they reveal eight land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND9 + replace: Target player reveals cards from the top of their library until they reveal nine land cards, then puts those cards into their graveyard. +auto replace: + match: GRIND.10 + replace: Target player reveals cards from the top of their library until they reveal ten land cards, then puts those cards into their graveyard. +auto replace: + match: GRINDX + replace: Target player reveals cards from the top of their library until they reveal X land cards, then puts those cards into their graveyard. +auto replace: + match: SDT2 + replace: Look at the top two cards of your library, then put them back in any order. +auto replace: + match: SDT3 + replace: Look at the top three cards of your library, then put them back in any order. +auto replace: + match: SDT4 + replace: Look at the top four cards of your library, then put them back in any order. +auto replace: + match: SDT5 + replace: Look at the top five cards of your library, then put them back in any order. +auto replace: + match: DRAIN1 + replace: Each opponent loses 1 life. You gain life equal to the life lost this way. +auto replace: + match: DRAIN2 + replace: Each opponent loses 2 life. You gain life equal to the life lost this way. +auto replace: + match: DRAIN3 + replace: Each opponent loses 3 life. You gain life equal to the life lost this way. +auto replace: + match: DRAIN4 + replace: Each opponent loses 4 life. You gain life equal to the life lost this way. +auto replace: + match: DRAIN5 + replace: Each opponent loses 5 life. You gain life equal to the life lost this way. +auto replace: + match: DRAINX + replace: Each opponent loses X life. You gain life equal to the life lost this way. +auto replace: + match: PING1 + replace: [T]: CARDNAME deals 1 damage to target creature, player, or planeswalker. +auto replace: + match: PING2 + replace: [T]: CARDNAME deals 2 damage to target creature, player, or planeswalker. +auto replace: + match: PING3 + replace: [T]: CARDNAME deals 3 damage to target creature, player, or planeswalker. +auto replace: + match: FATESEAL1 + replace: Look at the top card of target opponent's library. You may put that card on the bottom of that player's library. +auto replace: + match: FATESEAL2 + replace: Look at the top two cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL3 + replace: Look at the top three cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL4 + replace: Look at the top four cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL5 + replace: Look at the top five cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL6 + replace: Look at the top six cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL7 + replace: Look at the top seven cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL8 + replace: Look at the top eight cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEAL9 + replace: Look at the top nine cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: FATESEALX + replace: Look at the top X cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. +auto replace: + match: ANTHEM1 + replace: Creatures you control get +1/+1. +auto replace: + match: ANTHEM2 + replace: Creatures you control get +2/+2. +auto replace: + match: ANTHEM3 + replace: Creatures you control get +3/+3. +auto replace: + match: ANTHEM4 + replace: Creatures you control get +4/+4. +auto replace: + match: ANTHEM5 + replace: Creatures you control get +5/+5. +auto replace: + match: ANTHEM6 + replace: Creatures you control get +6/+6. +auto replace: + match: ANTHEM7 + replace: Creatures you control get +7/+7. +auto replace: + match: ANTHEM8 + replace: Creatures you control get +8/+8. +auto replace: + match: ANTHEM9 + replace: Creatures you control get +9/+9. +auto replace: + match: ANTHEMX + replace: Creatures you control get +X/+X. +auto replace: + match: ANTIHEM1 + replace: Creatures your opponents control get -1/-1. +auto replace: + match: ANTIHEM2 + replace: Creatures your opponents control get -2/-2. +auto replace: + match: ANTIHEM3 + replace: Creatures your opponents control get -3/-3. +auto replace: + match: ANTIHEM4 + replace: Creatures your opponents control get -4/-4. +auto replace: + match: ANTIHEM5 + replace: Creatures your opponents control get -5/-5. +auto replace: + match: ANTIHEMX + replace: Creatures your opponents control get -X/-X. +auto replace: + match: CTX + replace: Counter target spell unless its controller pays [X]. +auto replace: + match: CT1 + replace: Counter target spell unless its controller pays [1]. +auto replace: + match: CT2 + replace: Counter target spell unless its controller pays [2]. +auto replace: + match: CT3 + replace: Counter target spell unless its controller pays [3]. +auto replace: + match: CT4 + replace: Counter target spell unless its controller pays [4]. +auto replace: + match: CT5 + replace: Counter target spell unless its controller pays [5]. +auto replace: + match: GROW1 + replace: Target creature gets +1/+1 until end of turn. +auto replace: + match: GROW2 + replace: Target creature gets +2/+2 until end of turn. +auto replace: + match: GROW3 + replace: Target creature gets +3/+3 until end of turn. +auto replace: + match: GROW4 + replace: Target creature gets +4/+4 until end of turn. +auto replace: + match: GROW5 + replace: Target creature gets +5/+5 until end of turn. +auto replace: + match: GROW6 + replace: Target creature gets +6/+6 until end of turn. +auto replace: + match: GROW7 + replace: Target creature gets +7/+7 until end of turn. +auto replace: + match: GROW8 + replace: Target creature gets +8/+8 until end of turn. +auto replace: + match: GROW9 + replace: Target creature gets +9/+9 until end of turn. +auto replace: + match: GROWX + replace: Target creature gets +X/+X until end of turn. +auto replace: + match: PUMP1 + replace: Target creature gets +1/+0 until end of turn. +auto replace: + match: PUMP2 + replace: Target creature gets +2/+0 until end of turn. +auto replace: + match: PUMP3 + replace: Target creature gets +3/+0 until end of turn. +auto replace: + match: PUMP4 + replace: Target creature gets +4/+0 until end of turn. +auto replace: + match: PUMP5 + replace: Target creature gets +5/+0 until end of turn. +auto replace: + match: PUMP6 + replace: Target creature gets +6/+0 until end of turn. +auto replace: + match: PUMP7 + replace: Target creature gets +7/+0 until end of turn. +auto replace: + match: PUMP8 + replace: Target creature gets +8/+0 until end of turn. +auto replace: + match: PUMP9 + replace: Target creature gets +9/+0 until end of turn. +auto replace: + match: PUMPX + replace: Target creature gets +X/+0 until end of turn. +auto replace: + match: IMPULSE1 + replace: Exile the top card of your library. Until end of turn, you may play that card. +auto replace: + match: IMPULSE2 + replace: Exile the top two cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE3 + replace: Exile the top three cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE4 + replace: Exile the top four cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE5 + replace: Exile the top five cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE6 + replace: Exile the top six cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE7 + replace: Exile the top seven cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE8 + replace: Exile the top eight cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE9 + replace: Exile the top nine cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSE.10 + replace: Exile the top ten cards of your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: IMPULSEALL + replace: Exile your library. Until end of turn, you may play cards exiled this way. +auto replace: + match: WEAK1 + replace: Target creature gets -1/-0 until end of turn. +auto replace: + match: WEAK2 + replace: Target creature gets -2/-0 until end of turn. +auto replace: + match: WEAK3 + replace: Target creature gets -3/-0 until end of turn. +auto replace: + match: WEAK4 + replace: Target creature gets -4/-0 until end of turn. +auto replace: + match: WEAK5 + replace: Target creature gets -5/-0 until end of turn. +auto replace: + match: WEAK6 + replace: Target creature gets -6/-0 until end of turn. +auto replace: + match: WEAK7 + replace: Target creature gets -7/-0 until end of turn. +auto replace: + match: WEAK8 + replace: Target creature gets -8/-0 until end of turn. +auto replace: + match: WEAK9 + replace: Target creature gets -9/-0 until end of turn. +auto replace: + match: WEAKX + replace: Target creature gets -X/-0 until end of turn. +auto replace: + match: SHRINK1 + replace: Target creature gets -1/-1 until end of turn. +auto replace: + match: SHRINK2 + replace: Target creature gets -2/-2 until end of turn. +auto replace: + match: SHRINK3 + replace: Target creature gets -3/-3 until end of turn. +auto replace: + match: SHRINK4 + replace: Target creature gets -4/-4 until end of turn. +auto replace: + match: SHRINK5 + replace: Target creature gets -5/-5 until end of turn. +auto replace: + match: SHRINK6 + replace: Target creature gets -6/-6 until end of turn. +auto replace: + match: SHRINK7 + replace: Target creature gets -7/-7 until end of turn. +auto replace: + match: SHRINK8 + replace: Target creature gets -8/-8 until end of turn. +auto replace: + match: SHRINK9 + replace: Target creature gets -9/-9 until end of turn. +auto replace: + match: SHRINKX + replace: Target creature gets -X/-X until end of turn. +auto replace: + match: PREVENT1 + replace: Prevent the next 1 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT2 + replace: Prevent the next 2 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT3 + replace: Prevent the next 3 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT4 + replace: Prevent the next 4 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT5 + replace: Prevent the next 5 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT6 + replace: Prevent the next 6 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT7 + replace: Prevent the next 7 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT8 + replace: Prevent the next 8 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENT9 + replace: Prevent the next 9 damage that would be dealt to target creature or player this turn. +auto replace: + match: PREVENTX + replace: Prevent the next X damage that would be dealt to target creature or player this turn. +auto replace: + match: +1C1 + replace: Put a +1/+1 counter on +auto replace: + match: +1C2 + replace: Put two +1/+1 counters on +auto replace: + match: +1C3 + replace: Put three +1/+1 counters on +auto replace: + match: +1C4 + replace: Put four +1/+1 counters on +auto replace: + match: +1C5 + replace: Put five +1/+1 counters on +auto replace: + match: +1C6 + replace: Put six +1/+1 counters on +auto replace: + match: +1C7 + replace: Put seven +1/+1 counters on +auto replace: + match: +1C8 + replace: Put eight +1/+1 counters on +auto replace: + match: +1C9 + replace: Put nine +1/+1 counters on +auto replace: + match: +1CX + replace: Put X +1/+1 counters on +auto replace: + match: -1C1 + replace: Put a -1/-1 counter on +auto replace: + match: -1C2 + replace: Put two -1/-1 counters on +auto replace: + match: -1C3 + replace: Put three -1/-1 counters on +auto replace: + match: -1C4 + replace: Put four -1/-1 counters on +auto replace: + match: -1C5 + replace: Put five -1/-1 counters on +auto replace: + match: -1C6 + replace: Put six -1/-1 counters on +auto replace: + match: -1C7 + replace: Put seven -1/-1 counters on +auto replace: + match: -1C8 + replace: Put eight -1/-1 counters on +auto replace: + match: -1C9 + replace: Put nine -1/-1 counters on +auto replace: + match: -1CX + replace: Put X -1/-1 counters on +auto replace: + match: PW+1 + replace: [+1 loyalty] +auto replace: + match: PW+2 + replace: [+2 loyalty] +auto replace: + match: PW+3 + replace: [+3 loyalty] +auto replace: + match: PW+4 + replace: [+4 loyalty] +auto replace: + match: PW+5 + replace: [+5 loyalty] +auto replace: + match: PW+6 + replace: [+6 loyalty] +auto replace: + match: PW+7 + replace: [+7 loyalty] +auto replace: + match: PW+8 + replace: [+8 loyalty] +auto replace: + match: PW+9 + replace: [+9 loyalty] +auto replace: + match: PW+0 + replace: [+1 loyalty] +auto replace: + match: PW+X + replace: [+X loyalty] +auto replace: + match: PW-1 + replace: [-1 loyalty] +auto replace: + match: PW-2 + replace: [-2 loyalty] +auto replace: + match: PW-3 + replace: [-3 loyalty] +auto replace: + match: PW-4 + replace: [-4 loyalty] +auto replace: + match: PW-5 + replace: [-5 loyalty] +auto replace: + match: PW-6 + replace: [-6 loyalty] +auto replace: + match: PW-7 + replace: [-7 loyalty] +auto replace: + match: PW-8 + replace: [-8 loyalty] +auto replace: + match: PW-9 + replace: [-9 loyalty] +auto replace: + match: PW-0 + replace: [-0 loyalty] +auto replace: + match: PW-X + replace: [-X loyalty] +auto replace: + match: PW1 + replace: [1 loyalty] +auto replace: + match: PW2 + replace: [2 loyalty] +auto replace: + match: PW3 + replace: [3 loyalty] +auto replace: + match: PW4 + replace: [4 loyalty] +auto replace: + match: PW5 + replace: [5 loyalty] +auto replace: + match: PW6 + replace: [6 loyalty] +auto replace: + match: PW7 + replace: [7 loyalty] +auto replace: + match: PW8 + replace: [8 loyalty] +auto replace: + match: PW9 + replace: [9 loyalty] +auto replace: + match: PW0 + replace: [0 loyalty] +auto replace: + match: PWx + replace: [X loyalty] +# +#Phyrexian and 2brid Mana Replacements auto replace: match: phyW replace: ([H/W] can be paid with either [W] or 2 life.) @@ -66,124 +1093,355 @@ auto replace: replace: ([H/G] can be paid with either [G] or 2 life.) auto replace: match: twoW - replace: ([2/W] can be paid with any two mana or with [W].) + replace: ([2/W] can be paid with any two mana or with [W]. This card's mana value is ) auto replace: match: twoU - replace: ([2/U] can be paid with any two mana or with [U].) + replace: ([2/U] can be paid with any two mana or with [U]. This card's mana value is ) auto replace: match: twoB - replace: ([2/B] can be paid with any two mana or with [B].) + replace: ([2/B] can be paid with any two mana or with [B]. This card's mana value is ) auto replace: match: twoR - replace: ([2/R] can be paid with any two mana or with [R].) + replace: ([2/R] can be paid with any two mana or with [R]. This card's mana value is ) auto replace: match: twoG - replace: ([2/G] can be paid with any two mana or with [G].) + replace: ([2/G] can be paid with any two mana or with [G]. This card's mana value is ) auto replace: - match: TWALK - replace: Take an extra turn after this one. + match: twoC + replace: ([2/C] can be paid with any two mana or with [C]. This card's mana value is ) +auto replace: + match: HWU + replace: ([W/U] can be paid with either [W] or [U].) +auto replace: + match: HUB + replace: ([U/B] can be paid with either [U] or [B].) +auto replace: + match: HBR + replace: ([B/R] can be paid with either [B] or [R].) +auto replace: + match: HRG + replace: ([R/G] can be paid with either [R] or [G].) +auto replace: + match: HGW + replace: ([G/W] can be paid with either [G] or [W].) +auto replace: + match: HWB + replace: ([W/B] can be paid with either [W] or [B].) +auto replace: + match: HUR + replace: ([U/R] can be paid with either [U] or [R].) +auto replace: + match: HBG + replace: ([B/G] can be paid with either [B] or [G].) +auto replace: + match: HRW + replace: ([R/W] can be paid with either [R] or [W].) +auto replace: + match: HGU + replace: ([G/U] can be paid with either [G] or [U].) +auto replace: + match: HCW + replace: ([C/W] can be paid with either [C] or [W].) +auto replace: + match: HCU + replace: ([C/U] can be paid with either [C] or [U].) +auto replace: + match: HCB + replace: ([C/B] can be paid with either [C] or [B].) +auto replace: + match: HCR + replace: ([C/R] can be paid with either [C] or [R].) +auto replace: + match: HCG + replace: ([C/G] can be paid with either [C] or [G].) +# +#Tap to add Mana Replacements +auto replace: + match: TAM + replace: [T]: Add one mana of any color. +auto replace: + match: TAT + replace: [T]: Add one mana of any type. auto replace: match: TAW - replace: [T]: Add [W] to your mana pool. + replace: [T]: Add [W]. auto replace: match: TAU - replace: [T]: Add [U] to your mana pool. + replace: [T]: Add [U]. auto replace: match: TAB - replace: [T]: Add [B] to your mana pool. + replace: [T]: Add [B]. auto replace: match: TAR - replace: [T]: Add [R] to your mana pool. + replace: [T]: Add [R]. auto replace: match: TAG - replace: [T]: Add [G] to your mana pool. + replace: [T]: Add [G]. auto replace: match: TAC - replace: [T]: Add [C] to your mana pool. + replace: [T]: Add [C]. +auto replace: + match: TAS + replace: [T]: Add [S]. +auto replace: + match: TAD + replace: [T]: Add [C][C]. auto replace: match: TWU - replace: [T]: Add [W] or [U] to your mana pool. + replace: [T]: Add [W] or [U]. auto replace: match: TUB - replace: [T]: Add [U] or [B] to your mana pool. + replace: [T]: Add [U] or [B]. auto replace: match: TBR - replace: [T]: Add [B] or [R] to your mana pool. + replace: [T]: Add [B] or [R]. auto replace: match: TRG - replace: [T]: Add [R] or [G] to your mana pool. + replace: [T]: Add [R] or [G]. auto replace: match: TGW - replace: [T]: Add [G] or [W] to your mana pool. + replace: [T]: Add [G] or [W]. auto replace: match: TWB - replace: [T]: Add [W] or [B] to your mana pool. + replace: [T]: Add [W] or [B]. auto replace: match: TUR - replace: [T]: Add [U] or [R] to your mana pool. + replace: [T]: Add [U] or [R]. auto replace: match: TBG - replace: [T]: Add [B] or [G] to your mana pool. + replace: [T]: Add [B] or [G]. auto replace: match: TRW - replace: [T]: Add [R] or [W] to your mana pool. + replace: [T]: Add [R] or [W]. auto replace: match: TGU - replace: [T]: Add [G] or [U] to your mana pool. + replace: [T]: Add [G] or [U]. +auto replace: + match: TCW + replace: [T]: Add [C] or [W]. +auto replace: + match: TCU + replace: [T]: Add [C] or [U]. +auto replace: + match: TCB + replace: [T]: Add [C] or [B]. +auto replace: + match: TCR + replace: [T]: Add [C] or [R]. +auto replace: + match: TCG + replace: [T]: Add [C] or [G]. auto replace: match: twub - replace: [T]: Add [W], [U], or [B] to your mana pool. + replace: [T]: Add [W], [U], or [B]. auto replace: match: tubr - replace: [T]: Add [U], [B], or [R] to your mana pool. + replace: [T]: Add [U], [B], or [R]. auto replace: match: tbrg - replace: [T]: Add [B], [R], or [G] to your mana pool. + replace: [T]: Add [B], [R], or [G]. auto replace: match: trgw - replace: [T]: Add [R], [G], or [W] to your mana pool. + replace: [T]: Add [R], [G], or [W]. auto replace: match: tgwu - replace: [T]: Add [G], [W] or [U] to your mana pool. + replace: [T]: Add [G], [W] or [U]. auto replace: match: twbg - replace: [T]: Add [W], [B], or [G] to your mana pool. + replace: [T]: Add [W], [B], or [G]. auto replace: match: turw - replace: [T]: Add [U], [R], or [W] to your mana pool. + replace: [T]: Add [U], [R], or [W]. auto replace: match: tbgu - replace: [T]: Add [B], [G], or [U] to your mana pool. + replace: [T]: Add [B], [G], or [U]. auto replace: match: trwb - replace: [T]: Add [R], [W], or [B] to your mana pool. + replace: [T]: Add [R], [W], or [B]. auto replace: match: tgur - replace: [T]: Add [G], [U], or [R] to your mana pool. + replace: [T]: Add [G], [U], or [R]. auto replace: match: twbr - replace: [T]: Add [W], [B], or [R] to your mana pool. + replace: [T]: Add [W], [B], or [R]. auto replace: match: turg - replace: [T]: Add [U], [R], or [G] to your mana pool. + replace: [T]: Add [U], [R], or [G]. auto replace: match: tbgw - replace: [T]: Add [B], [G], or [W] to your mana pool. + replace: [T]: Add [B], [G], or [W]. auto replace: match: trwu - replace: [T]: Add [R], [W], or [U] to your mana pool. + replace: [T]: Add [R], [W], or [U]. auto replace: match: tgub - replace: [T]: Add [G], [U], or [B] to your mana pool. + replace: [T]: Add [G], [U], or [B]. +# +#Token creation auto replace: - match: WTD - replace: When CARDNAME dies + match: TREASURE1 + replace: Create a Treasure token. (It’s an artifact with “[T], Sacrifice this artifact: Add one mana of any color.”) auto replace: - match: WTT - replace: Whenever CARDNAME becomes the target of a spell + match: TREASURE2 + replace: Create two Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) auto replace: - match: ANYCARD - replace: Search your library for a card and put that card into your hand. Then shuffle your library. + match: TREASURE3 + replace: Create three Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) auto replace: - match: TUTOR - replace: Search your library for a card, reveal it, and put it into your hand. Then shuffle your library. \ No newline at end of file + match: TREASURE4 + replace: Create four Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) +auto replace: + match: TREASURE5 + replace: Create five Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) +auto replace: + match: TREASUREX + replace: Create X Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) +auto replace: + match: FOOD1 + replace: Create a Food token. (It’s an artifact with “[2], [T], Sacrifice this artifact: You gain 3 life.”) +auto replace: + match: FOOD2 + replace: Create two Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) +auto replace: + match: FOOD3 + replace: Create three Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) +auto replace: + match: FOOD4 + replace: Create four Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) +auto replace: + match: FOOD5 + replace: Create five Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) +auto replace: + match: FOODX + replace: Create X Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) +auto replace: + match: CLUE1 + replace: Create a Clue token. (It's an artifact with "[2], Sacrifice this artifact: Draw a card.") +auto replace: + match: CLUE2 + replace: Create two Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") +auto replace: + match: CLUE3 + replace: Create three Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") +auto replace: + match: CLUE4 + replace: Create four Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") +auto replace: + match: CLUE5 + replace: Create five Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") +auto replace: + match: CLUEX + replace: Create X Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") +auto replace: + match: GOBLIN + replace: create a 1/1 red Goblin creature token. +auto replace: + match: SOLDIER + replace: create a 1/1 white Soldier creature token. +auto replace: + match: WARRIOR + replace: create a 1/1 white Warrior creature token. +auto replace: + match: 11ELEMENTAL + replace: create a 1/1 red Elemental creature token. +auto replace: + match: 31ELEMENTAL + replace: create a 3/1 red Elemental creature token. +auto replace: + match: SCION + replace: create a 1/1 colorless Eldrazi Scion creature token with "Sacrifice this creature: Add [C]." +auto replace: + match: SPAWN + replace: create a 0/1 colorless Eldrazi Spawn creature token with "Sacrifice this creature: Add [C]." +auto replace: + match: BEAST + replace: create a 3/3 green Beast creature token. +auto replace: + match: WOLF + replace: create a 2/2 green Wolf creature token. +auto replace: + match: ZOMBIE + replace: create a 2/2 black Zombie creature token. +auto replace: + match: WVAMPIRE + replace: create a 1/1 white Vampire creature token. +auto replace: + match: DINOSAUR + replace: create a 3/3 green Dinosaur creature token with trample. +auto replace: + match: THOPTER + replace: create a 1/1 colorless Thopter artifact creature token with flying. +auto replace: + match: SERVO + replace: create a 1/1 colorless Servo artifact creature token. +auto replace: + match: ANGEL + replace: create a 4/4 white Angel creature token with flying. +auto replace: + match: 44DRAGON + replace: create a 4/4 red Dragon creature token with flying. +auto replace: + match: 55DRAGON + replace: create a 5/5 red Dragon creature token with flying. +auto replace: + match: WSPIRIT + replace: create a 1/1 white Spirit creature token with flying. +auto replace: + match: CSPIRIT + replace: create a 1/1 colorless Spirit creature token. +auto replace: + match: PLANT + replace: create a 0/1 green Plant creature token. +auto replace: + match: SAPROLING + replace: create a 1/1 green Saproling creature token. +auto replace: + match: MONK + replace: create a 1/1 white Monk creature token with prowess. +auto replace: + match: GERM + replace: create a 0/0 black Germ creature token. +auto replace: + match: WURM + replace: Create a 5/5 green Wurm creature token with trample. +auto replace: + match: SQUIRREL + replace: create a 1/1 green Squirrel creature token. +auto replace: + match: CENTAUR + replace: create a 3/3 green Centaur creature token. +auto replace: + match: ELFWAR + replace: create a 1/1 green Elf Warrior creature token. +auto replace: + match: ELFDRUID + replace: create a 1/1 green Elf Druid creature token with “[T]: Add [G].” +auto replace: + match: INSECT + replace: create a 1/1 green Insect creature token. +auto replace: + match: MERFOLK + replace: create a 1/1 blue Merfolk creature token with hexproof. +auto replace: + match: KNIGHT + replace: create a 2/2 white Knight creature token with vigilance. +auto replace: + match: BIRD + replace: create a 1/1 white Bird creature token with flying. +auto replace: + match: KORALLY + replace: create a 1/1 white Kor Ally creature token. +auto replace: + match: KORSOLDIER + replace: create a 1/1 white Kor Soldier creature token. +auto replace: + match: DRAKE + replace: create a 2/2 blue Drake creature token with flying. +auto replace: + match: ELDRAZIHORROR + replace: create a 3/2 colorless Eldrazi Horror creature token. +# +#Coding +auto replace: + match: CELSEP + replace: {if has_pt() then "this creature" else "this permanent"} \ No newline at end of file diff --git a/data/magic.mse-game/card_fields b/data/magic.mse-game/card_fields index a4289c55..90b793b8 100644 --- a/data/magic.mse-game/card_fields +++ b/data/magic.mse-game/card_fields @@ -14,6 +14,8 @@ card field: choice: flip choice: split choice: fuse split + choice: adventure + choice: aftermath choice: double faced choice: planeswalker choice: shifted @@ -26,6 +28,7 @@ card field: choice: masterpiece choice: nightbreak choice: plane card + choice: saga script: stylesheet # updates when the style changes card_shape() # determined by the style @@ -40,7 +43,7 @@ card field: card list column: 1 card list width: 150 description: The name of the card - script: if contains(card.shape, match:"split") or contains(card.shape, match:"flip") or contains(card.shape, match:"double faced") then card.name + " // " + card.name_2 else card.name + script: if has_two_names() then card.name + " // " + card.name_2 else card.name ############################# Background stuff card field: type: color @@ -54,7 +57,7 @@ card field: color: rgb(255,255,255) choice: name: silver - color: rgb(128,128,128) + color: rgb(200,200,200) choice: name: gold color: rgb(200,180,0) @@ -108,7 +111,14 @@ card field: card list visible: false identifying: true show statistics: false + script: name_checker(value) description: The name of the card +card field: + type: text + name: alias + card list visible: false + show statistics: false + description: The alias of the card card field: type: text name: casting cost @@ -155,12 +165,6 @@ card field: choice: eldrazi description: On transforming cards, is this the day or the night side? show statistics: false -card field: - type: text - name: dfc switch - default: card_number() - description: On transforming cards, is this the front or the back side? - show statistics: false card field: type: multiple choice name: indicator @@ -270,7 +274,7 @@ card field: card field: type: text name: rule text - script: text_filter(input: value, card_name: card.name) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"text") show statistics: false multi line: true description: The rules text for the card @@ -287,9 +291,16 @@ card field: multi line: true save value: false show statistics: false + position hint: 105 script: - combined_editor(field1: card.rule_text, separator: "\n", field2: card.flavor_text) + if mainframe_walker() then + mainframe_walker_text_script() + else if alt_text() then + alt_text_script() + else + combined_editor(field1: card.rule_text, separator: "\n", field2: card.flavor_text) description: The rules and flavor text for the card; use up and down arrows to switch +######################### Watermark card field: type: choice name: watermark @@ -297,33 +308,110 @@ card field: position hint: 200 include file: /magic-watermarks.mse-include/watermark-names description: A watermark for below the textbox, this can be a big mana symbol used on basic lands, or a guild symbol -############################# Loyalty +###############################Leveler textboxes card field: type: text - name: loyalty - icon: stats/toughness.png - position hint: 59 - description: The initial loyalty of a planeswalker + name: level 0 + description: The zeroth level of a creature + show statistics: false card field: type: text name: loyalty cost 1 show statistics: false description: The loyalty cost for the first ability of a planeswalker +card field: + type: text + name: level 1 + description: The first level of a card + show statistics: false +card field: + type: text + name: level 1 text + default: if transfer_levels() then card.rule_text else "" + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv1") + show statistics: false + multi line: true + position hint: 110 + description: The first level text for the card card field: type: text name: loyalty cost 2 show statistics: false description: The loyalty cost for the second ability of a planeswalker +card field: + type: text + name: level 2 + description: The second level of a card + show statistics: false +card field: + type: text + name: level 2 text + default: if transfer_levels() then card.rule_text_2 else "" + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv2") + show statistics: false + multi line: true + position hint: 120 + description: The second level text for the card card field: type: text name: loyalty cost 3 show statistics: false description: The loyalty cost for the third ability of a planeswalker +card field: + type: text + name: level 3 + description: The third level of a card + show statistics: false +card field: + type: text + name: level 3 text + default: card.rule_text_3 + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv3") + show statistics: false + multi line: true + position hint: 130 + description: The third level text for the card card field: type: text name: loyalty cost 4 show statistics: false description: The loyalty cost for the fourth ability of a planeswalker +card field: + type: text + name: level 4 + description: The fourth level of a card + show statistics: false +card field: + type: text + name: level 4 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv4") + show statistics: false + multi line: true + position hint: 4 + description: The fourth level text for the card +############################# Notes +card field: + type: text + name: sorted notes + multi line: true + save value: false + show statistics: false + script: card.notes + description: A mirror of card notes to make it sortable. +card field: + type: text + name: custom index + save value: false + show statistics: false + position hint: 900 + script: custom_index() +############################# Loyalty +card field: + type: text + name: loyalty + icon: stats/toughness.png + position hint: 59 + description: The initial loyalty of a planeswalker card field: type: text name: loyalty cost 5 @@ -344,32 +432,6 @@ card field: name: loyalty cost 8 show statistics: false description: The loyalty cost for the eighth ability of a planeswalker -############################# Levels -card field: - type: text - name: level 0 - description: The zeroth level of a creature - show statistics: false -card field: - type: text - name: level 1 - description: The first level of a card - show statistics: false -card field: - type: text - name: level 2 - description: The second level of a card - show statistics: false -card field: - type: text - name: level 3 - description: The third level of a card - show statistics: false -card field: - type: text - name: level 4 - description: The fourth level of a card - show statistics: false ############################# PT card field: type: text @@ -445,6 +507,13 @@ card field: editable: true save value: true show statistics: false +card field: + type: text + name: card code text 2 + default: card.card_code_text + editable: true + save value: true + show statistics: false ############################# Copyright stuff card field: type: text @@ -513,9 +582,9 @@ card field: type: radio choice: name: reversed - enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color_2) } + enabled: { card_color_color_count(card.card_color_2) >= 2 and not chosen(choice:"overlay",card.card_color_2) } script: card_color_filter(value) - default: card_color(casting_cost: card.casting_cost_2, type: card.super_type_2, rules_text: card.rule_text_2, watermark: card.watermark_2, card_name: card.name_2, default: card.card_color) + default: card_color(casting_cost: card.casting_cost_2, type: card.super_type_2, rules_text: card.rule_text_2, watermark: card.watermark_2, card_name: card.name_2, default: "colorless") show statistics: false description: The frame of a card card field: @@ -523,13 +592,24 @@ card field: name: name 2 identifying: true show statistics: false - description: The name of a card + description: The second name of a card +card field: + type: text + name: alias 2 + show statistics: false + description: The second alias of a card card field: type: text name: name 3 identifying: true show statistics: false - description: The name of a card + description: The third name of a card +card field: + type: text + name: alias 3 + identifying: true + show statistics: false + description: The third alias of a card card field: type: text name: casting cost 2 @@ -678,21 +758,6 @@ card field: script: card.rarity editable: false show statistics: false -card field: - type: choice - name: rarity 3 - icon: stats/rarity.png - choice: basic land - choice: common - choice: uncommon - choice: rare - choice: mythic rare - choice: special - choice: masterpiece - initial: common - # Third rarity is not locked - editable: true - show statistics: false card field: type: multiple choice name: indicator 2 @@ -737,35 +802,35 @@ card field: card field: type: text name: rule text 2 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text2") show statistics: false multi line: true description: The rules text of the card card field: type: text name: rule text 3 - script: text_filter(input: value, card_name: card.name) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"text3") show statistics: false multi line: true description: The rules text of the card card field: type: text name: rule text 4 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text4") show statistics: false multi line: true description: The rules text of the card card field: type: text name: rule text 5 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text5") show statistics: false multi line: true description: The rules text of the card card field: type: text name: rule text 6 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text6") show statistics: false multi line: true description: The rules text of the card @@ -781,6 +846,7 @@ card field: script: flavor_text_filter(value) multi line: true show statistics: false + card field: type: text name: text 2 @@ -788,7 +854,12 @@ card field: save value: false show statistics: false script: - combined_editor(field1: card.rule_text_2, separator: "\n", field2: card.flavor_text_2) + if mainframe_walkerb() then + mainframe_walker_text_scriptb() + else if alt_textb() then + alt_text_scriptb() + else + combined_editor(field1: card.rule_text_2, separator: "\n", field2: card.flavor_text_2) description: The rules and flavor text of the card card field: type: text @@ -937,71 +1008,105 @@ card field: save value: false script: (if is_masterpiece() then set.masterpiece_set_code else set.set_code) + " • " + set.set_language show statistics: false -#################################Leveler textboxes -card field: - type: text - name: level 1 text - default: card.rule_text - script: text_filter(input: value, card_name: card.name) - show statistics: false - multi line: true - description: The rules text for the card -card field: - type: text - name: level 2 text - default: card.rule_text_2 - script: text_filter(input: value, card_name: card.name) - show statistics: false - multi line: true - description: The rules text for the card -card field: - type: text - name: level 3 text - default: card.rule_text_3 - script: text_filter(input: value, card_name: card.name) - show statistics: false - multi line: true - description: The rules text for the card -card field: - type: text - name: level 4 text - default: card.rule_text_3 - script: text_filter(input: value, card_name: card.name) - show statistics: false - multi line: true - description: The rules text for the card +########################back Leveler textboxes card field: type: text name: level 5 text - default: card.rule_text_2 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv5") show statistics: false multi line: true - description: The rules text for the card + description: The fifth level text for the card card field: type: text name: level 6 text - default: card.rule_text_6 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv6") show statistics: false multi line: true - description: The rules text for the card + description: The sixth level text for the card card field: type: text name: level 7 text - default: card.rule_text_6 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv7") show statistics: false multi line: true - description: The rules text for the card + description: The seventh level text for the card card field: type: text name: level 8 text - default: card.rule_text_6 - script: text_filter(input: value, card_name: card.name_2) + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv8") show statistics: false multi line: true - description: The rules text for the card + description: The eighth level text for the card +card field: + type: text + name: level 9 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv9") + show statistics: false + multi line: true + description: The ninth level text for the card +card field: + type: text + name: level 10 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv10") + show statistics: false + multi line: true + description: The tenth level text for the card +card field: + type: text + name: level 11 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv11") + show statistics: false + multi line: true + description: The eleventh level text for the card +card field: + type: text + name: level 12 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv12") + show statistics: false + multi line: true + description: The twelvth level text for the card +card field: + type: text + name: level 13 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv13") + show statistics: false + multi line: true + description: The thirteenth level text for the card +card field: + type: text + name: level 14 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv14") + show statistics: false + multi line: true + description: The fourteenth level text for the card +card field: + type: text + name: level 15 text + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv15") + show statistics: false + multi line: true + description: The fifteenth level text for the card +card field: + type: text + name: level 5 + description: The fifth level of a card + show statistics: false +card field: + type: text + name: level 6 + description: The sixth level of a card + show statistics: false +card field: + type: text + name: level 7 + description: The seventh level of a card + show statistics: false +card field: + type: text + name: level 8 + description: The eighth level of a card + show statistics: false + card field: type: text name: power 4 @@ -1089,6 +1194,64 @@ card field: card list name: P/T6 show statistics: false description: Power/Toughness of a creature +card field: + type: text + name: power 7 + icon: stats/power.png + show statistics: false + script: type_over_pt(value) + description: The power of a creature +card field: + type: text + name: toughness 7 + icon: stats/toughness.png + show statistics: false + description: The toughness of a creature +card field: + type: text + name: pt 7 + save value: false + script: + combined_editor( + field1: card.power_7, + separator: language().pt_separator, + field2: card.toughness_7, + soft_before_empty: true, + hide_when_empty: true + ) + card list width: 50 + card list name: P/T7 + show statistics: false + description: Power/Toughness of a creature +card field: + type: text + name: power 8 + icon: stats/power.png + show statistics: false + script: type_over_pt(value) + description: The power of a creature +card field: + type: text + name: toughness 8 + icon: stats/toughness.png + show statistics: false + description: The toughness of a creature +card field: + type: text + name: pt 8 + save value: false + script: + combined_editor( + field1: card.power_8, + separator: language().pt_separator, + field2: card.toughness_8, + soft_before_empty: true, + hide_when_empty: true + ) + card list width: 50 + card list name: P/T8 + show statistics: false + description: Power/Toughness of a creature card field: type: text name: cmc @@ -1111,7 +1274,48 @@ card field: name: mainframe image 2 show statistics: false description: An extra image of the card - +card field: + type: text + name: special text + show statistics: false + script: special_text() + save value: true + description: Full text for exporting. +card field: + type: text + name: special text 2 + show statistics: false + script: special_text2() + save value: true + description: Full text for exporting. +card field: + type: text + name: time modified + show statistics: false + save value: false + script: card.time_modified +card field: + type: text + name: time created + show statistics: false + save value: false + script: card.time_created +card field: + type: text + name: chapter text + show statistics: false + multi line: true + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name, margin_code:"unknown") + default: if not a_saga() then "" else if card.rule_text != "" then card.rule_text else "(" + saga_reminder() + ")" + description: The saga reminder text +card field: + type: text + name: chapter text 2 + show statistics: false + multi line: true + script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"unknown") + default: if not b_saga() then "" else "(" + saga_reminderb() + ")" + description: The saga reminder text ############################# Exposing Internal Fields? diff --git a/data/magic.mse-game/card_fields - copy b/data/magic.mse-game/card_fields - copy deleted file mode 100644 index 0d3c8dba..00000000 --- a/data/magic.mse-game/card_fields - copy +++ /dev/null @@ -1,786 +0,0 @@ -############################################################## Card fields - -############################# Automatic fields - -# The 'shape' of the card (flip, split, etc.) -card field: - type: choice - name: shape - save value: false - show statistics: false - editable: false - choice: normal - choice: token - choice: flip - choice: split - choice: fuse split - choice: double faced - choice: planeswalker - choice: shifted - choice: rulestip - choice: leveler - choice: augment - choice: counter - choice: checklist - choice: emblem - script: - stylesheet # indicate that this value should be updated when the stylesheet changes - card_shape() # determined by the style -card field: - type: text - name: full name - save value: false - show statistics: false - editable: false - card list visible: true - card list name: Name - card list column: 1 - card list width: 150 - description: The name of the card - script: if contains(card.shape, match:"split") or contains(card.shape, match:"flip") or contains(card.shape, match:"double faced") then card.name + " // " + card.name_2 else card.name -############################# Background stuff -card field: - type: color - name: border color - default: set.border_color - choice: - name: black - color: rgb(0,0,0) - choice: - name: white - color: rgb(255,255,255) - choice: - name: silver - color: rgb(128,128,128) - choice: - name: gold - color: rgb(200,180,0) - show statistics: false - description: The border of the card; can be any solid color. -card field: - type: multiple choice - name: card color - empty choice: colorless - choice: white - choice: blue - choice: black - choice: red - choice: - name: green - line below: true - choice: artifact - choice: land - choice: multicolor - choice: - name: hybrid - enabled: { card_color_color_count(card.card_color) >= 2 } - line below: true - choice: - name: horizontal - enabled: { card_color_color_count(card.card_color) >= 2 } - type: radio - choice: - name: vertical - enabled: { card_color_color_count(card.card_color) >= 2 } - type: radio - choice: - name: radial - enabled: { card_color_color_count(card.card_color) >= 2 } - type: radio - choice: - name: overlay - enabled: { card_color_color_count(card.card_color) == 2 and chosen(choice:"hybrid",card.card_color) } - type: radio - choice: - name: reversed - enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color) } - script: card_color_filter(value) - default: card_color(casting_cost: card.casting_cost, rules_text: card.rule_text, type: card.super_type, watermark: card.watermark, card_name: card.name, default: "colorless") - show statistics: false - description: The frame of the card, used to indicate card color. - -############################# Name line -card field: - type: text - name: name - card list visible: false - identifying: true - show statistics: false - description: The name of the card -card field: - type: text - name: casting cost - icon: stats/casting_cost.png - position hint: 1 - script: mana_filter(value) - card list visible: true - card list column: 2 - card list alignment: right - card list width: 50 - card list name: CC - description: The casting cost of the card -card field: - type: choice - name: card symbol - position hint: 10 - icon: stats/card_symbol.png - choice: none - choice: tombstone - description: Symbol for this card (tombstone) -card field: - type: choice - name: type symbol - default: typesymbol_type(type: card.super_type) - card list visible: false - show statistics: false - choice: artifact - choice: creature - choice: enchantment - choice: instant - choice: land - choice: multitype - choice: planeswalker - choice: sorcery - choice: none - description: The card type symbol for this card -card field: - type: choice - name: transformation - choice: day - choice: night - description: On transforming cards, is this the day or the night side? - show statistics: false -card field: - type: multiple choice - name: indicator - empty choice: colorless - choice: white - choice: blue - choice: black - choice: red - choice: - name: green - line below: true - choice: artifact - choice: land - choice: multicolor - choice: - name: hybrid - enabled: { card_color_color_count(card.card_color) >= 2 } - line below: true - choice: - name: horizontal - enabled: { card_color_color_count(card.card_color) >= 2 } - type: radio - choice: - name: vertical - enabled: { card_color_color_count(card.card_color) >= 2 } - type: radio - choice: - name: radial - enabled: { card_color_color_count(card.card_color) >= 2 } - type: radio - choice: - name: overlay - enabled: { card_color_color_count(card.card_color) == 2 and chosen(choice:"hybrid",card.card_color) } - type: radio - choice: - name: reversed - enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color) } - script: card_color_filter(value) - default: card.card_color - show statistics: false - description: The color indicator of the card, used to indicate card color. - -############################# Image -card field: - type: image - name: image - show statistics: false - description: The image of the card - -############################# Card type -card field: - type: text - name: super type - icon: stats/card_type.png - position hint: 30 - script: super_type_filter(value) - show statistics: false -card field: - type: text - name: sub type - icon: stats/creature_type.png - position hint: 31 - script: sub_type_filter(value, type:card.super_type) -card field: - type: text - name: type - show statistics: false - save value: false - script: - # Either just supertype, or subtype - supertype - combined_editor( - field1: card.super_type, - separator: language().type_separator, - field2: card.sub_type, - soft_before_empty: true, - hide_when_empty: true - ) - card list visible: true - card list column:4 - description: The type of this card, type - to go the sub type -card field: - type: choice - name: rarity - icon: stats/rarity.png - position hint: 100 - choice: basic land - choice: common - choice: uncommon - choice: rare - choice: mythic rare - choice: special - initial: common - card list visible: true - card list column: 6 - description: The rarity of the card, to edit the symbol switch to the 'set info' tab - choice colors: - basic land: rgb(109,62,39) - common: rgb(33,33,33) - uncommon: rgb(224,224,224) - mythic rare: rgb(202, 49, 35) - rare: rgb(255,207,52) - special: rgb(190,0,255) - -############################# Text box -card field: - type: text - name: rule text - script: text_filter(input: value, card_name: card.name) - show statistics: false - multi line: true - description: The rules text for the card -card field: - type: text - name: flavor text - script: flavor_text_filter(value) - show statistics: false - multi line: true - description: The flavor text for the card -card field: - type: text - name: text - multi line: true - save value: false - show statistics: false - script: - combined_editor(field1: card.rule_text, separator: "\n", field2: card.flavor_text) - description: The rules and flavor text for the card; use up and down arrows to switch -card field: - type: choice - name: watermark - icon: stats/watermark.png - position hint: 200 - include file: /magic-watermarks.mse-include/watermark-names - description: A watermark for below the textbox, this can be a big mana symbol used on basic lands, or a guild symbol - -############################# Loyalty -card field: - type: text - name: loyalty - icon: stats/toughness.png - position hint: 59 - description: The initial loyalty of a planeswalker -card field: - type: text - name: loyalty cost 1 - show statistics: false - description: The loyalty cost for the first ability of a planeswalker -card field: - type: text - name: loyalty cost 2 - show statistics: false - description: The loyalty cost for the second ability of a planeswalker -card field: - type: text - name: loyalty cost 3 - show statistics: false - description: The loyalty cost for the third ability of a planeswalker -card field: - type: text - name: loyalty cost 4 - show statistics: false - description: The loyalty cost for the fourth ability of a planeswalker - default: if card.power_2 !="" then card.power_2 else card.power #For back compatibility with past templates. Take out a couple versions after 0.3.8 -card field: - type: text - name: loyalty cost 5 - show statistics: false - description: The loyalty cost for the fifth ability of a planeswalker - default: card.toughness_2 #For back compatibility with past templates. Take out a couple versions after 0.3.8 -card field: - type: text - name: loyalty cost 6 - show statistics: false - description: The loyalty cost for the sixth ability of a planeswalker -card field: - type: text - name: loyalty cost 7 - show statistics: false - description: The loyalty cost for the seventh ability of a planeswalker -card field: - type: text - name: loyalty cost 8 - show statistics: false - description: The loyalty cost for the eighth ability of a planeswalker -############################# Levels -card field: - type: text - name: level 1 - description: The first level of a creature - show statistics: false -card field: - type: text - name: level 2 - description: The second level of a creature - show statistics: false -############################# PT -card field: - type: text - name: power - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness - show statistics: false - icon: stats/toughness.png - description: The toughness of a creature -card field: - type: text - name: pt - save value: false - script: - combined_editor( - field1: card.power, - separator: language().pt_separator, - field2: card.toughness, - soft_before_empty: true, - hide_when_empty: true - ) - card list visible: true - card list column: 5 - card list width: 50 - card list name: P/T - description: Power/toughness of a creature - show statistics: false - -############################# Card sorting / numbering -card field: - type: text - name: card number - save value: false - script: card_number() + "/" + card_count() - sort script: rarity_sort() + card.card_number - card list visible: true - card list column: 10 - card list width: 50 - card list name: # - card list alignment: right - editable: false - show statistics: false -card field: - type: text - name: card number m15 - save value: false - script: card_number_m15() + "/" + card_count_m15() - sort script: rarity_sort() + card.card_number - card list visible: false - editable: false - show statistics: false -card field: - type: text - name: custom card number - save value: true - editable: true - show statistics: false -card field: - type: text - name: set code - editable: false - save value: false - script: set.set_code + " ⋅ " + set.set_language - show statistics: false -card field: - type: text - name: card code text - editable: true - save value: true - show statistics: false -############################# Copyright stuff -card field: - type: text - name: illustrator - icon: stats/illustrator.png - position hint: 210 - default: set.artist - description: Illustrator of this card, the default value can be changed on the 'set info' tab -card field: - type: text - name: copyright - default: set.copyright - show statistics: false -card field: - type: text - name: copyright line - save value: false - show statistics: false - script: - if set.automatic_card_numbers then - combined_editor(field1: card.copyright, separator: " ", field2: card.card_number) - else - forward_editor(field: card.copyright) - description: Copyright of this card and cardnumber, the default value can be changed on the 'set info' tab - -############################################################## Duplicate fields (split/flip cards) -# Based on flip templates by Wolfwood -# These are a direct copy of the fields above, only with a 2 - - -card field: - type: multiple choice - name: card color 2 - icon: stats/card_color.png - empty choice: colorless - choice: white - choice: blue - choice: black - choice: red - choice: - name: green - line below: true - choice: artifact - choice: land - choice: multicolor - choice: - name: hybrid - enabled: { card_color_color_count(card.card_color_2) >= 2 } - line below: true - choice: - name: horizontal - enabled: { card_color_color_count(card.card_color_2) >= 2 } - type: radio - choice: - name: vertical - enabled: { card_color_color_count(card.card_color_2) >= 2 } - type: radio - choice: - name: radial - enabled: { card_color_color_count(card.card_color_2) >= 2 } - type: radio - choice: - name: overlay - enabled: { card_color_color_count(card.card_color_2) == 2 and chosen(choice:"hybrid",card.card_color_2) } - type: radio - choice: - name: reversed - enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color_2) } - script: card_color_filter(value) - default: card_color(casting_cost: card.casting_cost_2, type: card.super_type_2, rules_text: card.rule_text_2, watermark: card.watermark_2, card_name: card.name_2, default: card.card_color) - show statistics: false - description: The frame of a card -card field: - type: text - name: name 2 - identifying: true - show statistics: false - description: The name of a card -card field: - type: text - name: casting cost 2 - icon: stats/casting_cost.png - script: mana_filter(value) - card list alignment: right - card list width: 50 - card list name: CC - show statistics: false - description: The casting cost of a card -card field: - type: text - name: casting cost 3 - icon: stats/casting_cost.png - script: mana_filter(value) - show statistics: false - description: The casting cost of a card -card field: - type: choice - name: card symbol 2 - icon: stats/card_symbol.png - choice: none - choice: tombstone - show statistics: false - description: The card symbol of the card (Tombstone) -card field: - type: choice - name: type symbol 2 - default: typesymbol_type(type: card.super_type_2) - card list visible: false - show statistics: false - choice: artifact - choice: creature - choice: enchantment - choice: instant - choice: land - choice: multitype - choice: planeswalker - choice: sorcery - choice: none - description: The card type symbol for this card -card field: - type: choice - name: transformation 2 - choice: night - choice: day - description: On transforming cards, is this the day or the night side? - show statistics: false -card field: - type: image - name: image 2 - show statistics: false - description: The image of the card -card field: - type: text - name: super type 2 - icon: stats/creature_type.png - show statistics: false - script: super_type_filter(value) -card field: - type: text - name: sub type 2 - icon: stats/creature_type.png - show statistics: false - script: sub_type_filter(value, type:card.super_type_2) -card field: - type: text - name: type 2 - save value: false - script: - combined_editor( - field1: card.super_type_2, - separator: language().type_separator, - field2: card.sub_type_2, - soft_before_empty: true, - hide_when_empty: true - ) - show statistics: false - description: The type of the card; type "-" to go from type to subtype -card field: - type: choice - name: rarity 2 - icon: stats/rarity.png - choice: basic land - choice: common - choice: uncommon - choice: rare - choice: mythic rare - choice: special - initial: common - # Both rarities will be the same - script: card.rarity - editable: false - show statistics: false -card field: - type: multiple choice - name: indicator 2 - empty choice: colorless - choice: white - choice: blue - choice: black - choice: red - choice: - name: green - line below: true - choice: artifact - choice: land - choice: multicolor - choice: - name: hybrid - enabled: { card_color_color_count(card.card_color_2) >= 2 } - line below: true - choice: - name: horizontal - enabled: { card_color_color_count(card.card_color_2) >= 2 } - type: radio - choice: - name: vertical - enabled: { card_color_color_count(card.card_color_2) >= 2 } - type: radio - choice: - name: radial - enabled: { card_color_color_count(card.card_color_2) >= 2 } - type: radio - choice: - name: overlay - enabled: { card_color_color_count(card.card_color_2) == 2 and chosen(choice:"hybrid",card.card_color_2) } - type: radio - choice: - name: reversed - enabled: { card_color_color_count(card.card_color_2) >= 2 and not chosen(choice:"overlay",card.card_color_2) } - script: card_color_filter(value) - default: card.card_color_2 - show statistics: false - description: The color indicator of the card, used to indicate card color. -card field: - type: text - name: rule text 2 - script: text_filter(input: value, card_name: card.name_2) - show statistics: false - multi line: true - description: The rules text of the card -card field: - type: text - name: rule text 3 - script: text_filter(input: value, card_name: card.name) - show statistics: false - multi line: true - description: The rules text of the card -card field: - type: text - name: rule text 4 - script: text_filter(input: value, card_name: card.name_2) - show statistics: false - multi line: true - description: The rules text of the card -card field: - type: text - name: rule text 5 - script: text_filter(input: value, card_name: card.name_2) - show statistics: false - multi line: true - description: The rules text of the card -card field: - type: text - name: rule text 6 - script: text_filter(input: value, card_name: card.name_2) - show statistics: false - multi line: true - description: The rules text of the card -card field: - type: text - name: flavor text 2 - script: flavor_text_filter(value) - multi line: true - show statistics: false -card field: - type: text - name: text 2 - multi line: true - save value: false - show statistics: false - script: - combined_editor(field1: card.rule_text_2, separator: "\n", field2: card.flavor_text_2) - description: The rules and flavor text of the card -card field: - type: choice - name: watermark 2 - include file: /magic-watermarks.mse-include/watermark-names - icon: stats/watermark.png - show statistics: false - description: A watermark for below the textbox, this can be a big mana symbol used on basic lands, a special symbol, or a guild symbol -card field: - type: text - name: loyalty 2 - icon: stats/toughness.png - show statistics: false - description: The initial loyalty of a planeswalker -card field: - type: text - name: power 2 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 2 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 2 - save value: false - script: - combined_editor( - field1: card.power_2, - separator: language().pt_separator, - field2: card.toughness_2, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T2 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: power 3 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 3 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 3 - save value: false - script: - combined_editor( - field1: card.power_3, - separator: language().pt_separator, - field2: card.toughness_3, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T3 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: illustrator 2 - icon: stats/illustrator.png - default: set.artist - show statistics: false - description: The illustrator of the image -card field: - type: text - name: copyright 2 - default: set.copyright - show statistics: false -card field: - type: text - name: copyright line 2 - save value: false - show statistics: false - script: - if set.automatic_card_numbers then - combined_editor(field1: card.copyright_2, separator: " ", field2: card.card_number) - else - forward_editor(field: card.copyright_2) - description: The copyright and card number of the card -card field: - type: text - name: set code 2 - editable: false - save value: false - script: set.set_code + " ⋅ " + set.set_language - show statistics: false diff --git a/data/magic.mse-game/game b/data/magic.mse-game/game index 5a03b335..b0e5c924 100644 --- a/data/magic.mse-game/game +++ b/data/magic.mse-game/game @@ -5,7 +5,7 @@ installer group: magic/game files icon: card-back.png position hint: 01 -version: 2016-01-11 +version: 2020-04-25 depends on: package: magic-blends.mse-include version: 2014-06-25 @@ -20,13 +20,13 @@ init script: include file: script ############################################################## Lots of lists ################## There be dragons here. -Liosan ########################## - include file: card_fields include file: set_fields include file: statistics include file: add_cards_scripts include file: packs include file: keywords +include file: keywords_custom include file: word_lists include file: auto_replace diff --git a/data/magic.mse-game/game mainframe b/data/magic.mse-game/game mainframe deleted file mode 100644 index e2ac2f56..00000000 --- a/data/magic.mse-game/game mainframe +++ /dev/null @@ -1,52 +0,0 @@ -mse version: 2.0.0 -short name: Magic -full name: Magic the Gathering -installer group: magic/game files -icon: card-back.png -position hint: 01 - -version: 2016-01-11 -depends on: - package: magic-blends.mse-include - version: 2014-06-25 -depends on: - package: magic-watermarks.mse-include - version: 2007-09-23 - -############################################################## The script - -init script: include file: mainframe_scripts - -############################################################## Lots of lists - -################## There be dragons here. -Liosan ########################## - -include file: mainframe_card_fields -include file: mainframe_set_fields -include file: statistics -include file: mainframe_patch -include file: keywords -include file: word_lists -include file: auto_replace - - -############################################################## Other stuff - -card list color script: - input := card.card_color - if input == "white" then rgb(156,130,90) - else if input == "blue" then rgb(0,64,168) - else if input == "black" then rgb(0,0,0) - else if input == "red" then rgb(168,0,0) - else if input == "green" then rgb(0,168,0) - else ( - artifact := chosen(choice:"artifact") - land := chosen(choice:"land") - multi := chosen(choice:"multicolor") - hybrid := chosen(choice:"hybrid") - if land then rgb(109,62,39) # land - else if multi and input != "artifact, multicolor" then rgb(130,110,0) # multicolor - else if hybrid then rgb(115,0,160) # hybrid - else if artifact then rgb(72,90,100) # artifact - else rgb(119,83,83) # colorless - ) diff --git a/data/magic.mse-game/game the backup b/data/magic.mse-game/game the backup deleted file mode 100644 index aa373533..00000000 --- a/data/magic.mse-game/game the backup +++ /dev/null @@ -1,53 +0,0 @@ -mse version: 2.0.0 -short name: Magic -full name: Magic the Gathering -installer group: magic/game files -icon: card-back.png -position hint: 01 - -version: 2016-01-11 -depends on: - package: magic-blends.mse-include - version: 2014-06-25 -depends on: - package: magic-watermarks.mse-include - version: 2007-09-23 - -############################################################## The script - -init script: include file: script - -############################################################## Lots of lists - -################## There be dragons here. -Liosan ########################## - -include file: card_fields -include file: set_fields -include file: statistics -include file: mainframe_patch -include file: keywords -include file: word_lists -include file: add_cards_scripts -include file: auto_replace - - -############################################################## Other stuff - -card list color script: - input := card.card_color - if input == "white" then rgb(156,130,90) - else if input == "blue" then rgb(0,64,168) - else if input == "black" then rgb(0,0,0) - else if input == "red" then rgb(168,0,0) - else if input == "green" then rgb(0,168,0) - else ( - artifact := chosen(choice:"artifact") - land := chosen(choice:"land") - multi := chosen(choice:"multicolor") - hybrid := chosen(choice:"hybrid") - if land then rgb(109,62,39) # land - else if multi and input != "artifact, multicolor" then rgb(130,110,0) # multicolor - else if hybrid then rgb(115,0,160) # hybrid - else if artifact then rgb(72,90,100) # artifact - else rgb(119,83,83) # colorless - ) diff --git a/data/magic.mse-game/icons/language-br.png b/data/magic.mse-game/icons/language-br.png new file mode 100644 index 00000000..9b1a5538 Binary files /dev/null and b/data/magic.mse-game/icons/language-br.png differ diff --git a/data/magic.mse-game/icons/language-ru.png b/data/magic.mse-game/icons/language-ru.png new file mode 100644 index 00000000..5aee4031 Binary files /dev/null and b/data/magic.mse-game/icons/language-ru.png differ diff --git a/data/magic.mse-game/keyword fix/keywords b/data/magic.mse-game/keyword fix/keywords deleted file mode 100644 index a0fd6a12..00000000 --- a/data/magic.mse-game/keyword fix/keywords +++ /dev/null @@ -1,1193 +0,0 @@ - -############################################################## We have keywords - -has keywords: true - -############################################################## Keyword mode - -keyword mode: - name: old - description: Old keywords (Banding, Phasing, etc.) -keyword mode: - name: core - description: Core set keywords (Flying, Haste, etc.) -keyword mode: - name: expert - description: Expert set keywords (Cycling, Vanishing, etc.) -keyword mode: - name: pseudo - description: Pseudo keyword / Ability words (Hellbent, Threshold, etc.) -keyword mode: - name: action - description: Keyword actions, reminder text at end of line (Scry, Regenerate, etc.) -keyword mode: - is default: true - name: custom - description: Custom keywords - -############################################################## Keyword parameter types - -keyword parameter type: - name: mana - match: [HSCTQXYZI0-9WUBRG/|]+ - refer script: - name: normal - description: No changes made - script: \{{input}\} - refer script: - name: converted mana cost - description: Converts mana to number - # "0" left in so users can easily see how to edit script. - script: \{cmc({input})\} - refer script: - name: colored mana cost - description: Converts mana to number of colored mana - # "0" left in so users can easily see how to edit script. - script: \{colored_mana({input})\} - -# By pichoro and bunnierein -keyword parameter type: - name: cost - match: [ ][HSCTQXYZI0-9WUBRG/|]*|[-—][^(\n]* - separator before is: [ —-] - separator after is: [.] - optional: false - # note: the separator is part of match - refer script: - name: normal - description: When using mana only costs, doesn't include anything extra in the reminder text - script: \{{input}\} - refer script: - name: add "pay an additional " for mana costs - description: When using mana only costs, words the reminder text as "pay an additional " - script: \{for_mana_costs(add:"pay an additional ", {input})\} - refer script: - name: add "pay " for mana costs - description: When using mana only costs, words the reminder text as "pay " - script: \{for_mana_costs(add:"pay ", {input})\} - separator script: long_dash() - -keyword parameter type: - name: number - match: [XYZ0-9]+ - refer script: - name: normal - description: (1,2,3) - script: \{{input}\} - refer script: - name: as words - description: (one, two, three) - script: \{english_number({input})\} - refer script: - name: as words, use "a" for 1 - description: (a, two, three) - script: \{english_number_a({input})\} - refer script: - name: as words, use "" for 1 - description: (, two, three) - script: \{english_number_multiple({input})\} - refer script: - name: as ordinal words - description: (first, second, third) - script: \{english_number_ordinal({input})\} - -keyword parameter type: - name: action - match: [^(:\n]+ - separator after is: [.] - reminder script: alternative_cost() - -keyword parameter type: - name: one_word - match: [A-Za-z0-9]+ - -keyword parameter type: - name: name - match: [^(.:;\n—]+ - refer script: - name: normal - description: No changes made. - script: \{{input}\} - refer script: - name: singular - description: Removes plurality from words. - script: \{english_singular({input})\} - refer script: - name: separate words with "and/or" - description: Changes spaces to " and/or ". "Elf Warrior" becomes "Elf and/or Warrior". - script: \{separate_words(spacer: " and/or ", {input})\} - refer script: - name: separate words with "or" - description: Changes spaces to " or ". "Elf Warrior" becomes "Elf or Warrior". - script: \{separate_words(spacer: " or ", {input})\} - -keyword parameter type: - name: prefix - description: Prefix for things like "walk" - optional: false -# match: [A-Z][a-z, ]*([A-Z][a-z, ]*\xEB00) # commented out because it stopped prefix param from working, version below allows all "walks", including "Dame Judi Denchwalk", doesn't trigger #in middle of sentences, and doesn't trigger in chains of keywords. -# match: [A-Z][A-Z,a-z’ ]* # commented out due to still not working - match: [^(.:;\n—]+ - example: Forest -keyword parameter type: - name: english_number - match: [ upto]*[(an? |one |two |three |four |five |six |seven |eight |nine |ten )]* - -keyword parameter type: - name: a - match: [an?]* -keyword parameter type: - name: nonland - match: ( n?o?n?l?a?n?d? ?) - -############################# All Magic keywords -# By JrEye and Neko_Asakami, Updated by Pichoro and Buttock1234 - -# Alpha -keyword: - keyword: Flying - match: Flying - mode: core - reminder: This creature can’t be blocked except by creatures with flying or reach. -keyword: - keyword: First strike - match: First strike - mode: core - reminder: This creature deals combat damage before creatures without first strike. -keyword: - keyword: Trample - match: Trample - mode: core - reminder: This creature can deal excess combat damage to defending player or planeswalker while attacking. -keyword: - keyword: Banding - match: Banding - mode: old - reminder: Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature’s combat damage, not its controller, among any of the creatures it’s being blocked by or is blocking. -keyword: - keyword: Landwalk - match: prefixwalk - mode: old - reminder: This creature can't be blocked as long as defending player controls a {if match(param1.value, match: " land$") or contains(param1.value, match: "Snow") or contains(param1.value, match:"Basic") or contains(param1.value, match:"Legendary") then "{to_lower(param1)}" else "{param1}"}. -keyword: - keyword: Protection from - match: Protection from name - mode: expert - reminder: {if has_pt() then "This creature" else "This permanent"} can’t be blocked, targeted, dealt damage, or enchanted by anything {english_singular(param1)}. -keyword: - keyword: Regeneration - match: Regenerate - mode: action - reminder: The next time {if has_pt() then "this creature" else "this"} would be destroyed this turn, it isn’t.{if has_pt() then " Instead tap it, remove all damage from it, and remove it from combat." else " Instead tap it."} -# Legends -keyword: - keyword: Bands with other - match: Bands with other name - mode: old - reminder: Any {param1} can attack in a band as long as at least one has “bands with other {param1}.” Bands are blocked as a group. If at least two {param1} you control, one of which has “bands with other {param1},” are blocking or being blocked by the same creature, you divide that creature’s combat damage, not its controller, among any of the creatures it’s being blocked by or is blocking. -keyword: - keyword: Rampage - match: Rampage number - mode: old - reminder: Whenever this creature becomes blocked, it gets +{param1}/+{param1} until end of turn for each creature blocking it beyond the first. -# Ice Age -keyword: - keyword: Cumulative upkeep - match: Cumulative upkeep cost - mode: old - reminder: At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it. -# Mirage -keyword: - keyword: Phasing - match: Phasing - mode: old - reminder: This phases in or out before you untap during each of your untap steps. While it’s phased out, it’s treated as though it doesn’t exist. -keyword: - keyword: Flanking - match: Flanking - mode: expert - reminder: Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn. -# Unglued -keyword: - keyword: Denimwalk - match: Denimwalk - mode: old - reminder: If defending player is wearing any clothing made of denim, this creature is unblockable. -# Tempest -keyword: - keyword: Shadow - match: Shadow - mode: expert - reminder: This creature can block or be blocked by only creatures with shadow. -keyword: - keyword: Buyback - match: Buyback cost - mode: expert - reminder: You may {for_mana_costs(add:"pay an additional ",param1)} as you cast this spell. If you do, put this card into your hand as it resolves. -# Urza's Saga -keyword: - keyword: Echo - match: Echo cost - mode: expert - reminder: At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost. -keyword: - keyword: Cycling - match: Cycling cost - mode: expert - reminder: {param1}, Discard this card: Draw a card. -# Sixth Edition -keyword: - keyword: Haste - match: Haste - mode: core - reminder: This creature can attack and T as soon as it comes under your control. -# Portal: Three Kingdoms -keyword: - keyword: Horsemanship - match: Horsemanship - mode: old - reminder: This creature can’t be blocked except by creatures with horsemanship. -# Nemesis -keyword: - keyword: Fading - match: Fading number - mode: expert - reminder: This {if has_pt() then "creature" else "permanent"} enters the battlefield with {english_number_a(param1)} fade counter(s) on it. At the beginning of your upkeep, remove a fade counter from it. If you can’t, sacrifice it. -# Invasion -keyword: - keyword: Kicker - match: Kicker cost - mode: expert - reminder: You may {for_mana_costs(add:"pay an additional ", param1)} as you cast this spell. -# Odyssey -keyword: - keyword: Flashback - match: Flashback cost - mode: expert - reminder: You may cast this card from your graveyard for its flashback cost. Then exile it. -keyword: - keyword: Threshold - match: Threshold - mode: pseudo - rules: Threshold — [effect] as long as seven or more cards are in your graveyard. -# Torment -keyword: - keyword: Madness - match: Madness cost - mode: expert - reminder: If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard. -# Onslaught -keyword: - keyword: Morph - match: Morph cost - mode: expert - reminder: You may cast this card face down as a 2/2 creature for 3. Turn it face up any time for its morph cost. -keyword: - keyword: Fear - match: Fear - mode: old - reminder: This creature can’t be blocked except by artifact creatures and/or black creatures. -# Legions -keyword: - keyword: Amplify - match: Amplify number - mode: expert - reminder: As this creature enters the battlefield, put {english_number_a(param1)} +1/+1 counter(s) on it for each {separate_words(spacer: " and/or ", card.sub_type)} card you reveal in your hand. -keyword: - keyword: Double strike - match: Double strike - mode: core - reminder: This creature deals both first-strike and regular combat damage. -keyword: - keyword: Provoke - match: Provoke - mode: expert - reminder: When this attacks, you may have target creature defending player controls untap and block it if able. -# Scourge -keyword: - keyword: Typecycling - match: one_wordcycling cost - mode: action - reminder: {param2}, Discard this card: Search your library for a {param1} card, reveal it, and put it into your hand. Then shuffle your library. -keyword: - keyword: Storm - match: Storm - mode: expert - reminder: When you cast this spell, copy it for each spell cast before it this turn.{ if is_targeted() then " You may choose new targets for the copies." } -# Mirrodin -keyword: - keyword: Affinity for - match: Affinity for name - mode: expert - reminder: This spell costs 1 less to cast for each {english_singular(param1)} you control. -keyword: - keyword: Entwine - match: Entwine cost - mode: expert - reminder: Choose both if you pay the entwine cost. -keyword: - keyword: Equip - match: Equip cost - mode: core - reminder: {param1}: Attach to target creature you control. Equip only as a sorcery. -keyword: - keyword: Imprint - match: Imprint - mode: pseudo - rules: When ~ enters the battlefield, you may exile a [something] from [somewhere]. -# Darksteel -keyword: - keyword: Modular - match: Modular number - mode: expert - reminder: This enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. When it dies, you may put its +1/+1 counters on target artifact creature. -# Fifth Dawn -keyword: - keyword: Scry - match: Scry number - mode: action - reminder: - To scry {param1}, look at the top { - if param1.value==1 then "card of your library. You may put that card on the bottom of your library." - else "{english_number(param1)} cards of your library, then put any number of them on the bottom of your library and the rest on top in any order." - } -keyword: - keyword: Sunburst - match: Sunburst - mode: expert - reminder: This enters the battlefield with a {if has_pt() then "+1/+1" else "charge"} counter on it for each color of mana spent to cast it. -# Unhinged -keyword: - keyword: Art rampage - match: Art rampage number - mode: expert - reminder: Whenever this becomes blocked by a creature, it gets +{param1}/+{param1} for each creature in the blocker’s art beyond the first. -keyword: - keyword: Super haste - match: Super haste - mode: expert - reminder: This may attack the turn before you cast it. (You may have this card enter the battlefield from your hand, tapped and attacking, during your declare attackers step. If you do, you lose the game at the end of your next turn unless you pay this card’s mana cost during that turn.) -keyword: - keyword: Gotcha - match: Gotcha - mode: pseudo - rules: Gotcha — Whenever an opponent [does something], you may say “Gotcha!”. If you do, return [something] from your graveyard to your hand. -# Champions of Kamigawa -keyword: - keyword: Splice - match: Splice onto name cost - mode: expert - reminder: As you cast a {param1} spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card’s effects to that spell. -keyword: - keyword: Bushido - match: Bushido number - mode: expert - reminder: When this blocks or becomes blocked, it gets +{param1}/+{param1} until end of turn. -keyword: - keyword: Soulshift - match: Soulshift number - mode: expert - reminder: When this creature dies, you may return target Spirit card with converted mana cost {param1} or less from your graveyard to your hand. -keyword: - keyword: Enchant - match: Enchant name - mode: core - reminder: Target a {param1} as you cast this. This card enters the battlefield attached to that {param1}. -keyword: - keyword: Vigilance - match: Vigilance - mode: core - reminder: Attacking doesn’t cause this creature to tap. -keyword: - keyword: Defender - match: Defender - mode: core - reminder: This creature can’t attack. -# Betrayers of Kamigawa -keyword: - keyword: Offering - match: prefix offering - mode: expert - reminder: You may cast this card any time you could cast an instant by sacrificing a {param1} and paying the difference in mana costs between this and the sacrificed {param1}. Mana cost includes color. -keyword: - keyword: Ninjutsu - match: Ninjutsu cost - mode: expert - reminder: {param1}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking. -# Saviors of Kamigawa -keyword: - keyword: Epic - match: Epic - mode: expert - reminder: For the rest of the game, you can’t cast spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability.{ if is_targeted() then " You may choose a new target for the copy." } -keyword: - keyword: Channel - match: Channel - mode: pseudo - rules: Channel — [cost], Discard ~: [effect]. -keyword: - keyword: Sweep - match: Sweep - mode: pseudo - rules: Sweep — Return any number of [basic land type] you control to their owner’s hand. [effect based on number of lands returned]. -# Ravnica: City of Guilds -keyword: - keyword: Convoke - match: Convoke - mode: expert - reminder: Your creatures can help cast this spell. Each creature you tap while casting this spell pays for 1 or one mana of that creature’s color. -keyword: - keyword: Transmute - match: Transmute cost - mode: expert - reminder: {param1}, Discard this card: Search your library for a card with the same converted mana cost as this card, reveal it, and put it into your hand. Then shuffle your library. Transmute only as a sorcery. -keyword: - keyword: Dredge - match: Dredge number - mode: expert - reminder: If you would draw a card, instead you may put exactly {english_number(param1)} card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card. -keyword: - keyword: Radiance - match: Radiance - mode: pseudo - rules: Radiance — [effect to target permanent or spell and all cards of same card type that share a color with it] -# Guildpact -keyword: - keyword: Haunt - match: Haunt - mode: expert - reminder: When this { if is_spell() then "spell card is put into a graveyard after resolving," else "creature dies," } exile it haunting target creature. -keyword: - keyword: Bloodthirst - match: Bloodthirst number - mode: expert - reminder: If an opponent was dealt damage this turn, this {if has_pt() then "creature" else "permanent"} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Replicate - match: Replicate cost - mode: expert - reminder: When you cast this spell, copy it for each time you paid its replicate cost.{ if is_targeted() then " You may choose new targets for the copies." } -# Dissension -keyword: - keyword: Graft - match: Graft number - mode: expert - reminder: {if has_pt() then "This creature" else "This permanent"} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. Whenever {if has_pt() then "another" else "a"} creature enters the battlefield, you may move a +1/+1 counter from {if has_pt() then "this creature" else "this permanent"} onto it. -keyword: - keyword: Forecast - match: Forecast — action, Reveal name from your hand: action - mode: expert - reminder: Activate this ability only during your upkeep and only once each turn. -keyword: - keyword: Hellbent - match: Hellbent - mode: pseudo - rules: Hellbent — [effect] if you have no cards in hand. -# Cold Snap -keyword: - keyword: Recover - match: Recover cost - mode: expert - reminder: When a creature is put into your graveyard from the battlefield, you may {for_mana_costs(add:"pay ",param1)}. If you do, return this card from your graveyard to your hand. Otherwise, exile this card. -keyword: - keyword: Ripple - match: Ripple number - mode: expert - reminder: When you cast this spell, you may reveal the top {english_number_multiple(param1)} card(s) of your library. You may cast any revealed cards with the same name as this spell without paying their mana costs. Put the rest on the bottom of your library. -# Time Spiral -keyword: - keyword: Flash - match: Flash - mode: core - reminder: You may cast this spell any time you could cast an instant. -keyword: - keyword: Split second - match: Split second - mode: expert - reminder: As long as this spell is on the stack, players can’t cast spells or activate abilities that aren’t mana abilities. -keyword: - keyword: Suspend - match: Suspend numbercost - mode: expert - reminder: Rather than cast this card from your hand,{if has_cc() then " you may" else ""} {for_mana_costs(add:"pay ", param2)} and exile it with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.{if has_pt() then " It has haste." } -# Planar Chaos -keyword: - keyword: Vanishing - match: Vanishing number - mode: expert - reminder: This permanent enters the battlefield with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it. -# Future Sight -keyword: - keyword: Deathtouch - match: Deathtouch - mode: core - reminder: Any amount of damage this deals to a creature is enough to destroy it. -keyword: - keyword: Reach - match: Reach - mode: core - reminder: This creature can block creatures with flying. -keyword: - keyword: Gravestorm - match: Gravestorm - mode: expert - reminder: When you cast this spell, copy it for each permanent put into a graveyard this turn.{ if is_targeted() then " You may choose new targets for the copies." } -keyword: - keyword: Lifelink - match: Lifelink - mode: core - reminder: Damage dealt by this { if has_pt() then "creature" else if is_spell() then "spell" else "permanent" } also causes you to gain that much life. -keyword: - keyword: Absorb - match: Absorb number - mode: expert - reminder: If a source would deal damage to this creature, prevent {param1} of that damage. -keyword: - keyword: Fateseal - match: Fateseal number - mode: action - reminder: - To fateseal {param1}, look at the top { - if param1.value==1 then "card of an opponent’s library, then you may put it on the bottom of that player’s library." - else "{english_number(param1)} cards of an opponent’s library, then put any number of them on the bottom of that player’s library and the rest on top in any order." - } -keyword: - keyword: Transfigure - match: Transfigure cost - mode: expert - reminder: {param1}, Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery. -keyword: - keyword: Aura swap - match: Aura swap cost - mode: expert - reminder: {param1}: Exchange this Aura with an Aura card in your hand. -keyword: - keyword: Frenzy - match: Frenzy number - mode: expert - reminder: Whenever this creature attacks and isn’t blocked, it gets +{param1}/+0 until end of turn. -keyword: - keyword: Delve - match: Delve - mode: expert - reminder: Each card you exile from your graveyard while casting this spell pays for 1. -keyword: - keyword: Poisonous - match: Poisonous number - mode: expert - reminder: Whenever this creature deals combat damage to a player, that player gets {english_number_a(param1)} poison counter(s). A player with ten or more poison counters loses the game. -keyword: - keyword: Shroud - match: Shroud - mode: core - reminder: This permanent can’t be the target of spells or abilities. -keyword: - keyword: Fortify - match: Fortify cost - mode: expert - reminder: {param1}: Attach to target land you control. Fortify only as a sorcery. This card enters the battlefield unattached and stays on the battlefield if the land leaves. -keyword: - keyword: Grandeur - match: Grandeur - mode: pseudo - rules: Grandeur — Discard another card named ~: [effect]. -# Lorwyn -keyword: - keyword: Evoke - match: Evoke cost - mode: expert - reminder: You may cast this spell for its evoke cost. If you do, it’s sacrificed when it enters the battlefield. -keyword: - keyword: Champion - match: Champion a name - mode: expert - reminder: When this enters the battlefield, sacrifice it unless you exile another {param2} you control. When this leaves the battlefield, that card returns to the battlefield. -keyword: - keyword: Clash - match: Clash - mode: action - reminder: Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost. -keyword: - keyword: Changeling - match: Changeling - mode: expert - reminder: This card is every creature type at all times. -keyword: - keyword: Hideaway - match: Hideaway - mode: expert - reminder: This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library. -# Morningtide -keyword: - keyword: Prowl - match: Prowl cost - mode: expert - reminder: You may cast this for its prowl cost if you dealt combat damage to a player this turn with a {separate_words(spacer: " or ", card.sub_type)}. -keyword: - keyword: Reinforce - match: Reinforce numbercost - mode: expert - reminder: {param2}, Discard this card: Put {english_number_a(param1)} +1/+1 counter(s) on target creature. -keyword: - keyword: Kinship - match: Kinship - mode: pseudo - rules: Kinship — At the beginning of your upkeep, you may look at the top card of your library. If that card shares a creature type with ~, you may reveal it. If you do, [effect]. -# Shadowmoor -keyword: - keyword: Persist - match: Persist - mode: expert - reminder: When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it. -keyword: - keyword: Wither - match: Wither - mode: expert - reminder: This deals damage to creatures in the form of -1/-1 counters. -keyword: - keyword: Conspire - match: Conspire - mode: expert - reminder: As you cast this spell, you may tap two untapped creatures you control that share a color with it. When you do, copy it{ if is_targeted() then " and you may choose a new target for the copy" }. -# Eventide -keyword: - keyword: Retrace - match: Retrace - mode: expert - reminder: You may cast this card from your graveyard by discarding a land card in addition to paying its other costs. -keyword: - keyword: Chroma - match: Chroma - mode: pseudo - rules: Chroma — [effect] based on the number of [color] mana symbols [in graveyard, under your control, in cards you discard]. -# Shards of Alara -keyword: - keyword: Unearth - match: Unearth cost - mode: expert - reminder: {param1}: Return this card from your graveyard to the battlefield. {if has_pt() then "It gains haste. " else "" }Exile it at the beginning of the end step or if it would leave the battlefield. Unearth only as a sorcery. -keyword: - keyword: Devour - match: Devour number - mode: expert - reminder: As this enters the battlefield, you may sacrifice any number of creatures. This creature enters the battlefield with { if param1.value == 1 then "" else if param1.value == 2 then "twice " else english_number(param1) + " times " }that many +1/+1 counters on it. -keyword: - keyword: Exalted - match: Exalted - mode: expert - reminder: Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn. -# Conflux -keyword: - keyword: Basic landcycling - match: Basic landcycling cost - mode: expert - reminder: {param1}, Discard this card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library. -keyword: - keyword: Domain - match: Domain - mode: pseudo - rules: Domain — [effect] for each basic land type among lands you control. -# Alara Reborn -keyword: - keyword: Cascade - match: Cascade - mode: expert - reminder: When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order. -# Magic 2010 -keyword: - keyword: Intimidate - match: Intimidate - mode: old - reminder: This creature can’t be blocked except by artifact creatures and/or creatures that share a color with it. -# Zendikar -keyword: - keyword: Landfall - match: Landfall - mode: pseudo - rules: Landfall — Whenever a land enters the battlefield under your control, [effect]. -# Worldwake -keyword: - keyword: Multikicker - match: Multikicker cost - mode: expert - reminder: You may {for_mana_costs(add:"pay an additional ", param1)} any number of times as you cast this spell. -# Rise of the Eldrazi -keyword: - keyword: Annihilator - match: Annihilator number - mode: expert - reminder: Whenever this creature attacks, defending player sacrifices {english_number_a(param1)} permanent(s). -keyword: - keyword: Rebound - match: Rebound - mode: expert - reminder: If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost. -keyword: - keyword: Totem armor - match: Totem armor - mode: expert - reminder: If enchanted {if contains(card.text, match:"Enchant creature") then "creature" else "permanent"} would be destroyed, instead remove all damage from it and destroy this Aura. -keyword: - keyword: Level up - match: Level up cost - mode: expert - reminder: {param1}: Put a level counter on this. Level up only as a sorcery. -# Scars of Mirrodin -keyword: - keyword: Infect - match: Infect - mode: expert - reminder: This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters. -keyword: - keyword: Proliferate - match: Proliferate - mode: action - reminder: You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there. -keyword: - keyword: Metalcraft - match: Metalcraft - mode: pseudo - rules: Metalcraft — As long as you control three or more artifacts, [effect]. -# Mirrodin Besieged -keyword: - keyword: Battle cry - match: Battle cry - mode: expert - reminder: Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn. -keyword: - keyword: Living weapon - match: Living weapon - mode: expert - reminder: When this Equipment enters the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it. -# Commander -keyword: - keyword: Join forces - match: Join forces - mode: pseudo - rules: Join forces — Starting with you, each player may [effect]. -# Magic 2012 -keyword: - keyword: Hexproof - match: Hexproof - mode: core - reminder: This creature can't be the target of spells or abilities your opponents control. -# Innistrad -keyword: - keyword: Morbid - match: Morbid - mode: pseudo - rules: Morbid — If a creature died this turn, [effect]. -keyword: - keyword: Fight - match: fight - mode: action - reminder: Each deals damage equal to its power to the other. -# Dark Ascension -keyword: - keyword: Undying - match: Undying - mode: expert - reminder: When this creature dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it. -keyword: - keyword: Fateful hour - match: Fateful hour - mode: pseudo - rules: Fateful Hour — As long as you have 5 or less life, [effect]. -# Avacyn Restored -keyword: - keyword: Miracle - match: Miracle cost - mode: expert - reminder: You may cast this card for its miracle cost when you draw it if it's the first card you drew this turn. -keyword: - keyword: Soulbond - match: Soulbond - mode: expert - reminder: You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them. -# Return to Ravnica -keyword: - keyword: Detain - match: detainenglish_numbertargetnonlandone_word - mode: action - reminder: Until your next turn, {if contains(param1.value, match:"one") or param1.value == " " then "that" else "those"} {param3} can't attack or block and {if contains(param1.value, match:"one") or param1.value == " " then "its" else "their"} activated abilities can't be activated. -keyword: - keyword: Overload - match: Overload cost - mode: expert - reminder: You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each". -keyword: - keyword: Unleash - match: Unleash - mode: expert - reminder: You may have this creature enter the battlefield with a +1/+1 counter on it. It can't block as long as it has a +1/+1 counter on it. -keyword: - keyword: Scavenge - match: Scavenge cost - mode: expert - reminder: {param1}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery. -keyword: - keyword: Populate - match: populate - mode: action - reminder: Put a token onto the battlefield that's a copy of a creature token you control. -# Gatecrash -keyword: - keyword: Extort - match: Extort - mode: expert - reminder: Whenever you cast a spell, you may pay [W/B]. If you do, each opponent loses 1 life and you gain that much life. -keyword: - keyword: Cipher - match: Cipher - mode: expert - reminder: Then you may exile this spell card encoded on a creature you control. Whenever that creature deals combat damage to a player, its controller may cast a copy of the encoded card without paying its mana cost. -keyword: - keyword: Bloodrush - match: Bloodrush - mode: pseudo - rules: Bloodrush — [cost], Discard ~: Target attacking creature gets [effect]. -keyword: - keyword: Battalion - match: Battalion - mode: pseudo - rules: Battalion — Whenever ~ and at least two other creatures attack, [effect]. -keyword: - keyword: Evolve - match: Evolve - mode: expert - reminder: Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature. -# Dragon's Maze -keyword: - keyword: Fuse - match: Fuse - mode: expert - reminder: You may cast one or both halves of this card from your hand. -# Magic 2014 -keyword: - keyword: Indestructible - match: Indestructible - mode: core - reminder: {if has_pt() then "Damage and effects" else "Effects"} that say "destroy" don't destroy this {if has_pt() then "creature" else if is_artifact(card.super_type) then "artifact" else "permanent"}. -# Theros -keyword: - keyword: Hero's reward - match: Hero's Reward - mode: pseudo - rules: Hero's Reward — When ~ leaves the battlefield, each player [effect]. -keyword: - keyword: Monstrosity - match: Monstrosity number - mode: action - reminder: If this creature isn’t monstrous, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes monstrous. -keyword: - keyword: Heroic - match: Heroic - mode: pseudo - rules: Heroic — Whenever you cast a spell that targets ~, [effect]. -keyword: - keyword: Bestow - match: Bestow cost - mode: expert - reminder: If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature. -keyword: - keyword: Devotion - match: devotion to action - mode: action - reminder: Each {color_to_mana(param1)} in the mana costs of permanents you control counts toward your devotion to {param1}. -# Commander 2013 -keyword: - keyword: Tempting offer - match: Tempting offer - mode: pseudo - rules: Tempting offer - [do something]. Each opponent may [do the same]. For each opponent who does, [do something again]. -# Born of the Gods -keyword: - keyword: Tribute - match: Tribute number - mode: expert - reminder: As this creature enters the battlefield, an opponent of your choice may put {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Inspired - match: Inspired - mode: pseudo - rules: Inspired — Whenever ~ becomes untapped, [effect]. -# Journey into Nyx -keyword: - keyword: Constellation - match: Constellation - mode: pseudo - rules: Constellation — Whenever ~ or another enchantment enters the battlefield under your control, [effect]. -keyword: - keyword: Strive - match: Strive - mode: pseudo - rules: Strive — ~ costs [mana] more to cast for each target beyond the first. -# Conspiracy -keyword: - keyword: Hidden agenda - match: Hidden agenda - mode: expert - reminder: Start the game with this conspiracy face down in the command zone and secretly name a card. You may turn this conspiracy face up any time and reveal the chosen name. -keyword: - keyword: Dethrone - match: Dethrone - mode: expert - reminder: Whenever this creature attacks the player with the most life or tied for most life, put a +1/+1 counter on it. -keyword: - keyword: Will of the council - match: Will of the council - mode: pseudo - rules: Will of the council — [some ability that involves voting, maybe between grace and condemnation] -keyword: - keyword: Parley - match: Parley - mode: pseudo - rules: Parley — Each player reveals the top card of his or her library. For each nonland card revealed this way, [effect]. Then each player draws a card. -# Khans of Tarkir -keyword: - keyword: Outlast - match: Outlast cost - mode: expert - reminder: {param1}, T: Put a +1/+1 counter on this creature. Outlast only as a sorcery. -keyword: - keyword: Prowess - match: Prowess - mode: core - reminder: Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn. -keyword: - keyword: Raid - match: Raid - mode: pseudo - rules: Raid — When ~ enters the battlefield, if you attacked with a creature this turn, [effect]. -keyword: - keyword: Ferocious - match: Ferocious - mode: pseudo - rules: Ferocious — [Whenever ~ attacks/When ~ spell resolves], if you control a creature with power 4 or greater, [effect]. -# Commander 2014 -keyword: - keyword: Lieutenant - match: Lieutenant - mode: pseudo - rules: Lieutenant - As long as you control your commander, [effect]. -# Fate Reforged -keyword: - keyword: Bolster - match: bolster number - mode: action - reminder: Choose a creature with the least toughness among creatures you control and put {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Dash - match: Dash cost - mode: expert - reminder: You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step. -keyword: - keyword: Manifest - match: manifest - mode: action - reminder: To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card. -# Dragons of Tarkir -keyword: - keyword: Exploit - match: Exploit - mode: expert - reminder: When this creature enters the battlefield, you may sacrifice a creature. -keyword: - keyword: Formidable - match: Formidable - mode: pseudo - rules: Formidable — Stuff happens if creatures you control have total power 8 or greater. -keyword: - keyword: Megamorph - match: Megamorph cost - mode: expert - reminder: You may cast this face down as a 2/2 creature for 3. Turn it face up any time for its megamorph cost and put a +1/+1 counter on it. -# Magic Origins -keyword: - keyword: Menace - match: Menace - mode: core - reminder: This creature can't be blocked except by two or more creatures. -keyword: - keyword: Renown - match: Renown number - mode: expert - reminder: When this creature deals combat damage to a player, if it isn't renowned, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes renowned. -keyword: - keyword: Spell mastery - match: Spell mastery - mode: pseudo - rules: Spell mastery -- If there are two or more instant and/or sorcery cards in your graveyard, [effect]. -# Battle for Zendikar -keyword: - keyword: Awaken - match: Awaken numbercost - mode: expert - reminder: If you cast this spell {for_mana_costs(add:"for ", param2)}, also put {english_number_a(param1)} +1/+1 counter(s) on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land. -keyword: - keyword: Devoid - match: Devoid - mode: expert - reminder: This card has no color. -keyword: - keyword: Ingest - match: Ingest - mode: expert - reminder: Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library. -keyword: - keyword: Rally - match: Rally - mode: pseudo - rules: Rally -- Whenever ~ or another Ally enters the battlefield under your control, [effect]. -keyword: - keyword: Converge - match: Converge - mode: pseudo - rules: Converge -- [effect with X], where X is the number of colors of mana spent to cast ~. -# Commander 2015 -keyword: - keyword: Myriad - match: Myriad - mode: expert - reminder: Whenever this creature attacks, for each opponent other than defending player, you may create a token that's a copy of this creature that's tapped and attacking that player or a planeswalker he or she controls. If one or more tokens are created this way, exile the tokens at end of combat. -# Oath of the Gatewatch -keyword: - keyword: Surge - match: Surge cost - mode: expert - reminder: You may cast this spell for its surge cost if you or a teammate has cast another spell this turn. -keyword: - keyword: Support - match: Support number - mode: action - reminder: Put a +1/+1 counter on {if param1.value!=1 then "each of "}up to {english_number(param1)}{if has_pt() then " other"} target creature(s). -# Shadows over Innistrad -keyword: - keyword: Investigate - match: Investigate - mode: action - reminder: Create a colorless Clue artifact token with "2, Sacrifice this artifact: Draw a card." -keyword: - keyword: Skulk - match: Skulk - mode: expert - reminder: This creature can't be blocked by creatures with greater power. -keyword: - keyword: Delirium - match: Delirium - mode: pseudo - rules: Delirium - If there are four or more card types among cards in your graveyard, [effect]. -# Eldritch Moon -keyword: - keyword: Emerge - match: Emerge cost - mode: expert - reminder: You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost. -keyword: - keyword: Escalate - match: Escalate cost - mode: expert - reminder: Pay this cost for each mode chosen beyond the first. -# Conspiracy: Take the Crown -keyword: - keyword: Double agenda - match: Double agenda - mode: expert - reminder: Start the game with this conspiracy face down in the command zone and secretly name two different cards. You may turn this conspiracy face up any time and reveal the chosen names. -keyword: - keyword: Goad - match: goad - mode: action - reminder: Until your next turn, that creature attacks each combat if able and attacks a player other than you if able. -keyword: - keyword: Melee - match: Melee - mode: expert - reminder: Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat. -keyword: - keyword: Monarch - match: become the monarch - mode: action - reminder: The monarch draws a card at the beginning of their end step. Whenever the monarch is dealt combat damage by a creature, its controller becomes the monarch. -keyword: - keyword: Council's dilemma - match: Council's dilemma - mode: pseudo - rules: [May be something] starting with you, each player votes for [one thing or another]. -# Kaladesh -keyword: - keyword: Crew - match: Crew number - mode: expert - reminder: Tap any number of untapped creatures you control with total power {param1} or greater: This permanent becomes an artifact creature until end of turn. -keyword: - keyword: Fabricate - match: Fabricate number - mode: expert - reminder: When this permanent enters the battlefield, you may put {english_number_a(param1)} +1/+1 counter(s) on it. If you don't, create {param1} 1/1 colorless Servo artifact creature tokens. -# Commander 2016 -keyword: - keyword: Partner - match: Partner - mode: expert - reminder: You can have two commanders if both have partner. -keyword: - keyword: Undaunted - match: Undaunted - mode: expert - reminder: This spell costs 1 less to cast for each opponent. -# Aether Revolt -keyword: - keyword: Improvise - match: Improvise - mode: expert - reminder: Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for 1. -keyword: - keyword: Revolt - match: Revolt - mode: pseudo - rules: Revolt - [Something], if a permanent you controlled left the battlefield this turn, [effect]. -# Amonkhet -keyword: - keyword: Aftermath - match: Aftermath - mode: expert - reminder: Cast this spell only from your graveyard, then exile it. -keyword: - keyword: Embalm - match: Embalm cost - mode: expert - reminder: {param1}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie {separate_words(spacer: " ", card.sub_type)} with no mana cost. Embalm only as a sorcery. -keyword: - keyword: Exert - match: exert - mode: action - reminder: An exerted creature won't untap during your next untap step. -#Hour of Devestation -keyword: - keyword: Afflict - match: Afflict number - mode: expert - reminder: Whenever this creature becomes blocked, defending player loses {param1} life. -keyword: - keyword: Eternalize - match: Eternalize cost - mode: expert - reminder: {param1}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a 4/4 black Zombie {separate_words(spacer: " ", card.sub_type)} with no mana cost. Eternalize only as a sorcery. -#Commander 2017 -keyword: - keyword: Eminence - match: Eminence - mode: pseudo - rules: Eminence - As long as this creature is on the battlefield or in your command zone, [effect]. -#Ixalan -keyword: - keyword: Enrage - match: Enrage - mode: pseudo - rules: Enrage - Whenever this creature is dealt damage, [effect]. -keyword: - keyword: Explore - match: explores - mode: action - reminder: Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on this creature, then put the card back or put it into your graveyard. \ No newline at end of file diff --git a/data/magic.mse-game/keywords b/data/magic.mse-game/keywords index 7b373d50..8d2d7978 100644 --- a/data/magic.mse-game/keywords +++ b/data/magic.mse-game/keywords @@ -29,13 +29,13 @@ keyword mode: keyword parameter type: name: mana - match: [HSCTQXYZI0-9WUBRG/|]+ + match: [HSVCTQXYZI0-9WUBRG/|]+ refer script: name: normal description: No changes made script: \{{input}\} refer script: - name: converted mana cost + name: mana value description: Converts mana to number # "0" left in so users can easily see how to edit script. script: \{cmc({input})\} @@ -48,7 +48,7 @@ keyword parameter type: # By pichoro and bunnierein keyword parameter type: name: cost - match: [ ][HSCTQXYZI0-9WUBRG/|]*|[-—][^(\n]* + match: [ ][HSVECTQXYZI0-9WUBRG/|]*|[-—][^(\r\n]* separator before is: [ —-] separator after is: [.] optional: false @@ -100,10 +100,13 @@ keyword parameter type: keyword parameter type: name: one_word match: [A-Za-z0-9]+ - +keyword parameter type: + name: p + match: [p](?!ped)(?!ment) keyword parameter type: name: name - match: [^(.:;\n—]+ + match: ([^(.:;\n—]+|[ ]) + #match: [A-Za-z0-9 ',’"“”!?]+ refer script: name: normal description: No changes made. @@ -127,18 +130,38 @@ keyword parameter type: optional: false # match: [A-Z][a-z, ]*([A-Z][a-z, ]*\xEB00) # commented out because it stopped prefix param from working, version below allows all "walks", including "Dame Judi Denchwalk", doesn't trigger #in middle of sentences, and doesn't trigger in chains of keywords. # match: [A-Z][A-Z,a-z’ ]* # commented out due to still not working - match: [^(.:;\n—]+ + match: [^(.,”":;\n—]+ example: Forest keyword parameter type: name: english_number - match: [ upto]*[(an? |one |two |three |four |five |six |seven |eight |nine |ten )]* - + match: (up to )?(a|an|one|two|three|four|five|six|seven|eight|nine|ten| ) + refer script: + name: as a numeral + description: Changes english number to numeral + script: \{digital_number({input}.value)\} keyword parameter type: name: a match: [an?]* +keyword parameter type: + name: *s + match: [a-z]s? keyword parameter type: name: nonland match: ( n?o?n?l?a?n?d? ?) +keyword parameter type: + name: mill + match: mills? +keyword parameter type: + name: iterate + match: [., ](t?w?i?c?e?|t?h?r?e?e?|f?o?u?r?|f?i?v?e?|s?i?x?|s?e?v?e?n?|X?)?( ?t?i?m?e?s?)? + refer script: + name: as words + description: Use the iteration word (twice, three times, etc) + script: \{iterate_fix({input})\} + refer script: + name: as number + description: Use the iteration word (twice, three times, etc) + script: \{iterate_digits({input})\} keyword parameter type: name: energy match: [^>]([Pp]ays?( an additional| any amount of)?|gets?( that many)?) [E]+ @@ -146,24 +169,24 @@ keyword parameter type: reminder script: length(input) ############################# All Magic keywords -# By JrEye and Neko_Asakami, Updated by Pichoro and Buttock1234 +# By JrEye and Neko_Asakami, Updated by Pichoro and Buttock1234, Continued updates by cajun # Alpha keyword: keyword: Flying match: Flying mode: core - reminder: This creature can’t be blocked except by creatures with flying or reach. + reminder: {this_or_that("creature", upper:true)} can’t be blocked except by creatures with flying or reach. keyword: keyword: First strike match: First strike mode: core - reminder: This creature deals combat damage before creatures without first strike. + reminder: {this_or_that("creature", upper:true)} deals combat damage before creatures without first strike. keyword: keyword: Trample match: Trample mode: core - reminder: This creature can deal excess combat damage to defending player or planeswalker while attacking. + reminder: {this_or_that("creature", upper:true)} can deal excess combat damage to the player or planeswalker it's attacking. keyword: keyword: Banding match: Banding @@ -173,17 +196,17 @@ keyword: keyword: Landwalk match: prefixwalk mode: old - reminder: This creature can't be blocked as long as defending player controls a {if match(param1.value, match: " land$") or contains(param1.value, match: "Snow") or contains(param1.value, match:"Basic") or contains(param1.value, match:"Legendary") then "{to_lower(param1)}" else "{param1}"}. + reminder: {this_or_that("creature", upper:true)} can't be blocked as long as defending player controls a {if match(param1.value, match: " land$") or contains(param1.value, match: "Snow") or contains(param1.value, match:"Basic") or contains(param1.value, match:"Legendary") then "{to_lower(param1)}" else "{param1}"}. keyword: keyword: Protection from match: Protection from name mode: expert - reminder: Nothing {replace(english_singular(param1), match:"and from", replace:"or", in_context:" ")} can block, target, deal damage to, or attach to {if has_pt() then "this creature" else "this permanent"}. + reminder: {protection_code(param1.value)}. keyword: keyword: Regeneration match: Regenerate mode: action - reminder: The next time {if has_pt() then "this creature" else "this"} would be destroyed this turn, it isn’t.{if has_pt() then " Instead tap it, remove all damage from it, and remove it from combat." else " Instead tap it."} + reminder: The next time {this_or_that("permanent")} would be destroyed this turn, it isn’t.{if has_pt() then " Instead tap it, remove all damage from it, and remove it from combat." else " Instead tap it."} # Legends keyword: keyword: Bands with other @@ -194,13 +217,13 @@ keyword: keyword: Rampage match: Rampage number mode: old - reminder: Whenever this creature becomes blocked, it gets +{param1}/+{param1} until end of turn for each creature blocking it beyond the first. + reminder: Whenever {this_or_that("creature")} becomes blocked, it gets +{param1}/+{param1} until end of turn for each creature blocking it beyond the first. # Ice Age keyword: keyword: Cumulative upkeep match: Cumulative upkeep cost mode: old - reminder: At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it. + reminder: At the beginning of your upkeep, put an age counter on {this_or_that("permanent")}, then sacrifice it unless you pay its upkeep cost for each age counter on it. # Mirage keyword: keyword: Phasing @@ -211,24 +234,24 @@ keyword: keyword: Flanking match: Flanking mode: expert - reminder: Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn. -# Unglued -keyword: - keyword: Denimwalk - match: Denimwalk - mode: old - reminder: If defending player is wearing any clothing made of denim, this creature is unblockable. + reminder: Whenever a creature without flanking blocks {this_or_that("creature")}, the blocking creature gets -1/-1 until end of turn. # Tempest keyword: keyword: Shadow match: Shadow mode: expert - reminder: This creature can block or be blocked by only creatures with shadow. + reminder: {this_or_that("creature", upper:true)} can block or be blocked by only creatures with shadow. keyword: keyword: Buyback match: Buyback cost mode: expert reminder: You may {for_mana_costs(add:"pay an additional ",param1)} as you cast this spell. If you do, put this card into your hand as it resolves. +# Unglued +keyword: + keyword: Denimwalk + match: Denimwalk + mode: old + reminder: If defending player is wearing any clothing made of denim, {this_or_that("creature")} is unblockable. # Urza's Saga keyword: keyword: Echo @@ -245,13 +268,13 @@ keyword: keyword: Haste match: Haste mode: core - reminder: This creature can attack and T as soon as it comes under your control. + reminder: {this_or_that("creature", upper:true)} can attack and T as soon as it comes under your control. # Portal: Three Kingdoms keyword: keyword: Horsemanship match: Horsemanship mode: old - reminder: This creature can’t be blocked except by creatures with horsemanship. + reminder: {this_or_that("creature", upper:true)} can’t be blocked except by creatures with horsemanship. # Nemesis keyword: keyword: Fading @@ -291,18 +314,18 @@ keyword: keyword: Fear match: Fear mode: old - reminder: This creature can’t be blocked except by artifact creatures and/or black creatures. + reminder: {this_or_that("creature", upper:true)} can’t be blocked except by artifact creatures and/or black creatures. # Legions keyword: keyword: Amplify match: Amplify number mode: expert - reminder: As this creature enters the battlefield, put {english_number_a(param1)} +1/+1 counter(s) on it for each {separate_words(spacer: " and/or ", card.sub_type)} card you reveal in your hand. + reminder: As {this_or_that("creature")} enters the battlefield, put {english_number_a(param1)} +1/+1 counter(s) on it for each {separate_words(spacer: " and/or ", card.sub_type)} card you reveal in your hand. keyword: keyword: Double strike match: Double strike mode: core - reminder: This creature deals both first-strike and regular combat damage. + reminder: {this_or_that("creature", upper:true)} deals both first-strike and regular combat damage. keyword: keyword: Provoke match: Provoke @@ -313,7 +336,7 @@ keyword: keyword: Typecycling match: one_wordcycling cost mode: action - reminder: {param2}, Discard this card: Search your library for a {param1} card, reveal it, and put it into your hand. Then shuffle your library. + reminder: {param2}, Discard this card: Search your library for a {param1} card, reveal it, and put it into your hand, then shuffle. keyword: keyword: Storm match: Storm @@ -335,6 +358,11 @@ keyword: match: Equip cost mode: core reminder: {param1}: Attach to target creature you control. Equip only as a sorcery. +keyword: + keyword: Equip quality + match: Equip namecost + mode: core + reminder: {param2}: Attach to target {param1} creature you control. Equip only as a sorcery. keyword: keyword: Imprint match: Imprint @@ -350,10 +378,10 @@ keyword: keyword: keyword: Scry match: Scry number - mode: action + mode: core reminder: To scry {param1}, look at the top { - if param1.value==1 then "card of your library. You may put that card on the bottom of your library." + if param1.value=="1" then "card of your library. You may put that card on the bottom of your library." else "{english_number(param1)} cards of your library, then put any number of them on the bottom of your library and the rest on top in any order." } keyword: @@ -361,6 +389,37 @@ keyword: match: Sunburst mode: expert reminder: This enters the battlefield with a {if has_pt() then "+1/+1" else "charge"} counter on it for each color of mana spent to cast it. +# Champions of Kamigawa +keyword: + keyword: Splice + match: Splice onto name cost + mode: expert + reminder: As you cast a {param1} spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card’s effects to that spell. +keyword: + keyword: Bushido + match: Bushido number + mode: expert + reminder: Whenever {this_or_that("creature")} blocks or becomes blocked, it gets +{param1}/+{param1} until end of turn. +keyword: + keyword: Soulshift + match: Soulshift number + mode: expert + reminder: When {this_or_that("creature")} dies, you may return target Spirit card with mana value {param1} or less from your graveyard to your hand. +keyword: + keyword: Enchant + match: Enchant name + mode: core + reminder: Target a {param1} as you cast this. This card enters the battlefield attached to that {param1}. +keyword: + keyword: Vigilance + match: Vigilance + mode: core + reminder: Attacking doesn’t cause {this_or_that("creature")} to tap. +keyword: + keyword: Defender + match: Defender + mode: core + reminder: {this_or_that("creature", upper:true)} can’t attack. # Unhinged keyword: keyword: Art rampage @@ -377,37 +436,6 @@ keyword: match: Gotcha mode: pseudo rules: Gotcha — Whenever an opponent [does something], you may say “Gotcha!”. If you do, return [something] from your graveyard to your hand. -# Champions of Kamigawa -keyword: - keyword: Splice - match: Splice onto name cost - mode: expert - reminder: As you cast a {param1} spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card’s effects to that spell. -keyword: - keyword: Bushido - match: Bushido number - mode: expert - reminder: When this blocks or becomes blocked, it gets +{param1}/+{param1} until end of turn. -keyword: - keyword: Soulshift - match: Soulshift number - mode: expert - reminder: When this creature dies, you may return target Spirit card with converted mana cost {param1} or less from your graveyard to your hand. -keyword: - keyword: Enchant - match: Enchant name - mode: core - reminder: Target a {param1} as you cast this. This card enters the battlefield attached to that {param1}. -keyword: - keyword: Vigilance - match: Vigilance - mode: core - reminder: Attacking doesn’t cause this creature to tap. -keyword: - keyword: Defender - match: Defender - mode: core - reminder: This creature can’t attack. # Betrayers of Kamigawa keyword: keyword: Offering @@ -445,12 +473,12 @@ keyword: keyword: Transmute match: Transmute cost mode: expert - reminder: {param1}, Discard this card: Search your library for a card with the same converted mana cost as this card, reveal it, and put it into your hand. Then shuffle your library. Transmute only as a sorcery. + reminder: {param1}, Discard this card: Search your library for a card with the same mana value as this card, reveal it, and put it into your hand, then shuffle. Transmute only as a sorcery. keyword: keyword: Dredge match: Dredge number mode: expert - reminder: If you would draw a card, instead you may put exactly {english_number(param1)} card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card. + reminder: If you would draw a card, you mill {english_number(param1)} card(s) instead. If you do, return this card from your graveyard to your hand. Otherwise, draw a card. keyword: keyword: Radiance match: Radiance @@ -477,7 +505,7 @@ keyword: keyword: Graft match: Graft number mode: expert - reminder: {if has_pt() then "This creature" else "This permanent"} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. Whenever {if has_pt() then "another" else "a"} creature enters the battlefield, you may move a +1/+1 counter from {if has_pt() then "this creature" else "this permanent"} onto it. + reminder: {this_or_that("permanent", upper:true)} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. Whenever {if has_pt() then "another" else "a"} creature enters the battlefield, you may move a +1/+1 counter from {this_or_that("permanent")} onto it. keyword: keyword: Forecast match: Forecast — action, Reveal name from your hand: action @@ -488,7 +516,7 @@ keyword: match: Hellbent mode: pseudo rules: Hellbent — [effect] if you have no cards in hand. -# Cold Snap +# Coldsnap keyword: keyword: Recover match: Recover cost @@ -520,7 +548,7 @@ keyword: keyword: Vanishing match: Vanishing number mode: expert - reminder: This permanent enters the battlefield with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it. + reminder: {this_or_that("permanent", upper:true)} enters the battlefield with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it. # Future Sight keyword: keyword: Deathtouch @@ -531,7 +559,7 @@ keyword: keyword: Reach match: Reach mode: core - reminder: This creature can block creatures with flying. + reminder: {this_or_that("creature", upper:true)} can block creatures with flying. keyword: keyword: Gravestorm match: Gravestorm @@ -546,21 +574,21 @@ keyword: keyword: Absorb match: Absorb number mode: expert - reminder: If a source would deal damage to this creature, prevent {param1} of that damage. + reminder: If a source would deal damage to {this_or_that("creature")}, prevent {param1} of that damage. keyword: keyword: Fateseal match: Fateseal number mode: action reminder: To fateseal {param1}, look at the top { - if param1.value==1 then "card of an opponent’s library, then you may put it on the bottom of that player’s library." + if param1.value=="1" then "card of an opponent’s library, then you may put it on the bottom of that player’s library." else "{english_number(param1)} cards of an opponent’s library, then put any number of them on the bottom of that player’s library and the rest on top in any order." } keyword: keyword: Transfigure match: Transfigure cost mode: expert - reminder: {param1}, Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery. + reminder: {param1}, Sacrifice {this_or_that("permanent")}: Search your library for a creature card with the same mana value as {this_or_that("permanent")} and put that card onto the battlefield, then shuffle. Transfigure only as a sorcery. keyword: keyword: Aura swap match: Aura swap cost @@ -570,7 +598,7 @@ keyword: keyword: Frenzy match: Frenzy number mode: expert - reminder: Whenever this creature attacks and isn’t blocked, it gets +{param1}/+0 until end of turn. + reminder: Whenever {this_or_that("creature")} attacks and isn’t blocked, it gets +{param1}/+0 until end of turn. keyword: keyword: Delve match: Delve @@ -580,12 +608,12 @@ keyword: keyword: Poisonous match: Poisonous number mode: expert - reminder: Whenever this creature deals combat damage to a player, that player gets {english_number_a(param1)} poison counter(s). A player with ten or more poison counters loses the game. + reminder: Whenever {this_or_that("creature")} deals combat damage to a player, that player gets {english_number_a(param1)} poison counter(s). A player with ten or more poison counters loses the game. keyword: keyword: Shroud match: Shroud mode: core - reminder: This permanent can’t be the target of spells or abilities. + reminder: {this_or_that("permanent", upper:true)} can’t be the target of spells or abilities. keyword: keyword: Fortify match: Fortify cost @@ -611,17 +639,17 @@ keyword: keyword: Clash match: Clash mode: action - reminder: Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost. + reminder: Each clashing player reveals the top card of their library, then puts that card on the top or bottom. A player wins if their card had a higher mana value. keyword: keyword: Changeling match: Changeling mode: expert - reminder: This card is every creature type at all times. + reminder: This card is every creature type. keyword: keyword: Hideaway match: Hideaway mode: expert - reminder: This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library. + reminder: {this_or_that("land", upper:true)} enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library. # Morningtide keyword: keyword: Prowl @@ -643,7 +671,7 @@ keyword: keyword: Persist match: Persist mode: expert - reminder: When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it. + reminder: When {this_or_that("creature")} dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it. keyword: keyword: Wither match: Wither @@ -675,7 +703,7 @@ keyword: keyword: Devour match: Devour number mode: expert - reminder: As this enters the battlefield, you may sacrifice any number of creatures. This creature enters the battlefield with { if param1.value == 1 then "" else if param1.value == 2 then "twice " else english_number(param1) + " times " }that many +1/+1 counters on it. + reminder: As this enters the battlefield, you may sacrifice any number of creatures. {this_or_that("creature", upper:true)} enters the battlefield with { if param1.value == "1" then "" else if param1.value == "2" then "twice " else english_number(param1) + " times " }that many +1/+1 counters on it. keyword: keyword: Exalted match: Exalted @@ -686,7 +714,7 @@ keyword: keyword: Basic landcycling match: Basic landcycling cost mode: expert - reminder: {param1}, Discard this card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library. + reminder: {param1}, Discard this card: Search your library for a basic land card, reveal it, and put it into your hand, then shuffle. keyword: keyword: Domain match: Domain @@ -703,7 +731,7 @@ keyword: keyword: Intimidate match: Intimidate mode: old - reminder: This creature can’t be blocked except by artifact creatures and/or creatures that share a color with it. + reminder: {this_or_that("creature", upper:true)} can’t be blocked except by artifact creatures and/or creatures that share a color with it. # Zendikar keyword: keyword: Landfall @@ -721,7 +749,7 @@ keyword: keyword: Annihilator match: Annihilator number mode: expert - reminder: Whenever this creature attacks, defending player sacrifices {english_number_a(param1)} permanent(s). + reminder: Whenever {this_or_that("creature")} attacks, defending player sacrifices {english_number_a(param1)} permanent(s). keyword: keyword: Rebound match: Rebound @@ -742,12 +770,12 @@ keyword: keyword: Infect match: Infect mode: expert - reminder: This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters. + reminder: {this_or_that("creature", upper:true)} deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters. keyword: keyword: Proliferate match: Proliferate mode: action - reminder: You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there. + reminder: Choose any number of permanents and/or players with counters on them, then give each another counter of each kind already there. keyword: keyword: Metalcraft match: Metalcraft @@ -758,12 +786,12 @@ keyword: keyword: Battle cry match: Battle cry mode: expert - reminder: Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn. + reminder: Whenever {this_or_that("creature")} attacks, each other attacking creature gets +1/+0 until end of turn. keyword: keyword: Living weapon match: Living weapon mode: expert - reminder: When this Equipment enters the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it. + reminder: When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it. # Commander keyword: keyword: Join forces @@ -771,11 +799,16 @@ keyword: mode: pseudo rules: Join forces — Starting with you, each player may [effect]. # Magic 2012 +keyword: + keyword: Hexproof from + match: Hexprooname from name + mode: core + reminder: This {if has_pt() then "creature" else "permanent"} can't be the target of {param2} spells or abilities your opponents control. keyword: keyword: Hexproof match: Hexproof mode: core - reminder: This creature can't be the target of spells or abilities your opponents control. + reminder: This { if has_pt() then "creature" else "permanent"} can't be the target of spells or abilities your opponents control. # Innistrad keyword: keyword: Morbid @@ -792,7 +825,7 @@ keyword: keyword: Undying match: Undying mode: expert - reminder: When this creature dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it. + reminder: When {this_or_that("creature")} dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it. keyword: keyword: Fateful hour match: Fateful hour @@ -808,7 +841,7 @@ keyword: keyword: Soulbond match: Soulbond mode: expert - reminder: You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them. + reminder: You may pair {this_or_that("creature")} with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them. # Return to Ravnica keyword: keyword: Detain @@ -824,7 +857,7 @@ keyword: keyword: Unleash match: Unleash mode: expert - reminder: You may have this creature enter the battlefield with a +1/+1 counter on it. It can't block as long as it has a +1/+1 counter on it. + reminder: You may have {this_or_that("creature")} enter the battlefield with a +1/+1 counter on it. It can't block as long as it has a +1/+1 counter on it. keyword: keyword: Scavenge match: Scavenge cost @@ -834,7 +867,7 @@ keyword: keyword: Populate match: populate mode: action - reminder: Put a token onto the battlefield that's a copy of a creature token you control. + reminder: Create a token that's a copy of a creature token you control. # Gatecrash keyword: keyword: Extort @@ -860,7 +893,7 @@ keyword: keyword: Evolve match: Evolve mode: expert - reminder: Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature. + reminder: Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than {this_or_that("creature")}, put a +1/+1 counter on {this_or_that("creature")}. # Dragon's Maze keyword: keyword: Fuse @@ -883,7 +916,7 @@ keyword: keyword: Monstrosity match: Monstrosity number mode: action - reminder: If this creature isn’t monstrous, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes monstrous. + reminder: If {this_or_that("creature")} isn’t monstrous, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes monstrous. keyword: keyword: Heroic match: Heroic @@ -896,7 +929,7 @@ keyword: reminder: If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature. keyword: keyword: Devotion - match: devotion to action + match: devotion to one_word mode: action reminder: Each {color_to_mana(param1)} in the mana costs of permanents you control counts toward your devotion to {param1}. # Commander 2013 @@ -904,13 +937,13 @@ keyword: keyword: Tempting offer match: Tempting offer mode: pseudo - rules: Tempting offer - [do something]. Each opponent may [do the same]. For each opponent who does, [do something again]. + rules: Tempting offer - [do something]. Each opponent may [do the same]. For each opponent who does, [do something again]. # Born of the Gods keyword: keyword: Tribute match: Tribute number mode: expert - reminder: As this creature enters the battlefield, an opponent of your choice may put {english_number_a(param1)} +1/+1 counter(s) on it. + reminder: As {this_or_that("creature")} enters the battlefield, an opponent of your choice may put {english_number_a(param1)} +1/+1 counter(s) on it. keyword: keyword: Inspired match: Inspired @@ -932,12 +965,12 @@ keyword: keyword: Hidden agenda match: Hidden agenda mode: expert - reminder: Start the game with this conspiracy face down in the command zone and secretly name a card. You may turn this conspiracy face up any time and reveal the chosen name. + reminder: Start the game with this conspiracy face down in the command zone and secretly choose a card name. You may turn this conspiracy face up any time and reveal the chosen name. keyword: keyword: Dethrone match: Dethrone mode: expert - reminder: Whenever this creature attacks the player with the most life or tied for most life, put a +1/+1 counter on it. + reminder: Whenever {this_or_that("creature")} attacks the player with the most life or tied for most life, put a +1/+1 counter on it. keyword: keyword: Will of the council match: Will of the council @@ -947,18 +980,18 @@ keyword: keyword: Parley match: Parley mode: pseudo - rules: Parley — Each player reveals the top card of his or her library. For each nonland card revealed this way, [effect]. Then each player draws a card. + rules: Parley — Each player reveals the top card of their library. For each nonland card revealed this way, [effect]. Then each player draws a card. # Khans of Tarkir keyword: keyword: Outlast match: Outlast cost mode: expert - reminder: {param1}, T: Put a +1/+1 counter on this creature. Outlast only as a sorcery. + reminder: {param1}, T: Put a +1/+1 counter on {this_or_that("creature")}. Outlast only as a sorcery. keyword: keyword: Prowess match: Prowess mode: core - reminder: Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn. + reminder: Whenever you cast a noncreature spell, {this_or_that("creature")} gets +1/+1 until end of turn. keyword: keyword: Raid match: Raid @@ -996,7 +1029,7 @@ keyword: keyword: Exploit match: Exploit mode: expert - reminder: When this creature enters the battlefield, you may sacrifice a creature. + reminder: When {this_or_that("creature")} enters the battlefield, you may sacrifice a creature. keyword: keyword: Formidable match: Formidable @@ -1012,12 +1045,12 @@ keyword: keyword: Menace match: Menace mode: core - reminder: This creature can't be blocked except by two or more creatures. + reminder: {this_or_that("creature", upper:true)} can't be blocked except by two or more creatures. keyword: keyword: Renown match: Renown number mode: expert - reminder: When this creature deals combat damage to a player, if it isn't renowned, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes renowned. + reminder: When {this_or_that("creature")} deals combat damage to a player, if it isn't renowned, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes renowned. keyword: keyword: Spell mastery match: Spell mastery @@ -1038,7 +1071,7 @@ keyword: keyword: Ingest match: Ingest mode: expert - reminder: Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library. + reminder: Whenever {this_or_that("creature")} deals combat damage to a player, that player exiles the top card of their library. keyword: keyword: Rally match: Rally @@ -1054,7 +1087,7 @@ keyword: keyword: Myriad match: Myriad mode: expert - reminder: Whenever this creature attacks, for each opponent other than defending player, you may create a token that's a copy of this creature that's tapped and attacking that player or a planeswalker he or she controls. If one or more tokens are created this way, exile the tokens at end of combat. + reminder: Whenever {this_or_that("creature")} attacks, for each opponent other than defending player, you may create a token that's a copy of {this_or_that("creature")} that's tapped and attacking that player or a planeswalker they control. If one or more tokens are created this way, exile the tokens at end of combat. # Oath of the Gatewatch keyword: keyword: Surge @@ -1076,7 +1109,7 @@ keyword: keyword: Skulk match: Skulk mode: expert - reminder: This creature can't be blocked by creatures with greater power. + reminder: {this_or_that("creature", upper:true)} can't be blocked by creatures with greater power. keyword: keyword: Delirium match: Delirium @@ -1087,7 +1120,7 @@ keyword: keyword: Emerge match: Emerge cost mode: expert - reminder: You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost. + reminder: You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's mana value. keyword: keyword: Escalate match: Escalate cost @@ -1098,7 +1131,7 @@ keyword: keyword: Double agenda match: Double agenda mode: expert - reminder: Start the game with this conspiracy face down in the command zone and secretly name two different cards. You may turn this conspiracy face up any time and reveal the chosen names. + reminder: Start the game with this conspiracy face down in the command zone and secretly choose two different card names. You may turn this conspiracy face up any time and reveal the chosen names. keyword: keyword: Goad match: goad @@ -1108,7 +1141,7 @@ keyword: keyword: Melee match: Melee mode: expert - reminder: Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat. + reminder: Whenever {this_or_that("creature")} attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat. keyword: keyword: Monarch match: become the monarch @@ -1124,13 +1157,18 @@ keyword: keyword: Crew match: Crew number mode: expert - reminder: Tap any number of untapped creatures you control with total power {param1} or greater: This permanent becomes an artifact creature until end of turn. + reminder: Tap any number of creatures you control with total power {param1} or greater: This {separate_words(spacer: " ", card.sub_type)} becomes an artifact creature until end of turn. keyword: keyword: Fabricate match: Fabricate number mode: expert - reminder: When this permanent enters the battlefield, you may put {english_number_a(param1)} +1/+1 counter(s) on it. If you don't, create {param1} 1/1 colorless Servo artifact creature tokens. + reminder: When {this_or_that("permanent")} enters the battlefield, you may put {english_number_a(param1)} +1/+1 counter(s) on it. If you don't, create {english_number_a(param1)} 1/1 colorless Servo artifact creature token(s). # Commander 2016 +keyword: + keyword: Partner with + match: Partnename with name + mode: expert + reminder: When this {if has_pt() then "creature" else "permanent"} enters the battlefield, target player may put {legend_filter(param2)} into their hand from their library, then shuffle. keyword: keyword: Partner match: Partner @@ -1168,12 +1206,12 @@ keyword: match: exert mode: action reminder: An exerted {if has_pt() then "creature" else "permanent"} won't untap during your next untap step. -#Hour of Devestation +#Hour of Devastation keyword: keyword: Afflict match: Afflict number mode: expert - reminder: Whenever this creature becomes blocked, defending player loses {param1} life. + reminder: Whenever {this_or_that("creature")} becomes blocked, defending player loses {param1} life. keyword: keyword: Eternalize match: Eternalize cost @@ -1195,7 +1233,7 @@ keyword: keyword: Explore match: explores mode: action - reminder: Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on this creature, then put the card back or put it into your graveyard. + reminder: Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on {this_or_that("creature")}, then put the card back or put it into your graveyard. #Unstable keyword: keyword: Assemble a Contraption @@ -1218,7 +1256,7 @@ keyword: keyword: Art menace match: Art menace mode: expert - reminder: This creature can't be blocked except by creatures with two or more visible figures in their art. + reminder: {this_or_that("creature", upper:true)} can't be blocked except by creatures with two or more visible figures in their art. keyword: keyword: Augment match: Augment cost @@ -1228,7 +1266,7 @@ keyword: keyword: Blurry match: Blurry mode: expert - reminder: This creature can be blocked only if defending player was wearing glasses as it was cast. + reminder: {this_or_that("creature", upper:true)} can be blocked only if defending player was wearing glasses as it was cast. keyword: keyword: Just a second match: Just a second @@ -1239,17 +1277,17 @@ keyword: keyword: Last strike match: Last strike mode: expert - reminder: This creature deals combat damage after creatures without last strike. + reminder: {this_or_that("creature", upper:true)} deals combat damage after creatures without last strike. keyword: keyword: Squirrellink match: Squirrellink mode: expert - reminder: Damage dealt by this creature also causes you to create that many 1/1 green Squirrel creature tokens. + reminder: Damage dealt by {this_or_that("creature")} also causes you to create that many 1/1 green Squirrel creature tokens. keyword: keyword: Triple strike match: Triple strike mode: expert - reminder: This creature deals first-strike, regular, and last-strike combat damage. + reminder: {this_or_that("creature", upper:true)} deals first-strike, regular, and last-strike combat damage. keyword: keyword: Undeathtouch match: Undeathtouch @@ -1267,3 +1305,251 @@ keyword: match: historic mode: action reminder: Artifacts, legendaries, and Sagas are historic. +#Battlebond +keyword: + keyword: Assist + match: Assist + mode: expert + reminder: Another player can pay up to {if contains(card.casting_cost, match:"X") then "X" else generic_mana(card.casting_cost)} of this spell's cost.{if contains(card.casting_cost, match:"X") then " You choose the value of X."} +#Commander 2019 +keyword: + keyword: Commander ninjutsu + match: Commander ninjutsu cost + mode: expert + reminder: {param1}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand or the command zone tapped and attacking. +keyword: + keyword: Treasure token + match: Treasure toke*s + mode: core + reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "T, Sacrifice this artifact: Add one mana of any color." +#Guilds of Ravnica +keyword: + keyword: Jump-start + match: Jump-start + mode: expert + reminder: You may cast this card from your graveyard by discarding a card in addition to paying its other costs. Then exile this card. +keyword: + keyword: Mentor + match: Mentor + mode: expert + reminder: Whenever {this_or_that("creature")} attacks, put a +1/+1 counter on target attacking creature with lesser power. +keyword: + keyword: Surveil + match: Surveil number + mode: action + reminder: + Look at the top { + if param1.value=="1" then "card of your library. You may put that card into your graveyard." + else "{english_number(param1)} cards of your library, then put any number of them into your graveyard and the rest on top of your library in any order." + } +keyword: + keyword: Undergrowth + match: Undergrowth + mode: pseudo + rules: Undergrowth — [effect], where X is the number of creature cards in your graveyard. +#Ravnica Allegiance +keyword: + keyword: Adapt + match: Adapt number + mode: action + reminder: If {this_or_that("creature")} has no +1/+1 counters on it, put {english_number_a(param1)} +1/+1 counter(s) on it. +keyword: + keyword: Addendum + match: Addendum + mode: pseudo + rules: Addendum — If you cast this spell during your main phase, [effect]. +keyword: + keyword: Afterlife + match: Afterlife number + mode: expert + reminder: Whenever {this_or_that("creature")} dies, create {english_number_a(param1)} 1/1 white and black Spirit creature token(s) with flying. +keyword: + keyword: Riot + match: Riot + mode: expert + reminder: {this_or_that("creature", upper:true)} enters the battlefield with your choice of a +1/+1 counter or haste. +keyword: + keyword: Spectacle + match: Spectacle cost + mode: expert + reminder: You may cast this spell for its spectacle cost rather than its mana cost if an opponent lost life this turn. +#War of the Spark +keyword: + keyword: Amass + match: Amass number + mode: action + reminder: Put {english_number_a(param1)} +1/+1 counter(s) on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first. +#Throne of Eldraine +keyword: + keyword: Adamant + match: Adamant + mode: pseudo + rules: Adamant — If at least three [color] mana was spent to cast this spell, [effect]. +keyword: + keyword: Food token + match: Food toke*s + mode: core + reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "2, T, Sacrifice this artifact: You gain 3 life." +#Theros Beyond Death +keyword: + keyword: Escape + match: Escape cost + mode: expert + reminder: You may cast this card from your graveyard for its escape cost. +keyword: + keyword: Gold token + match: Gold toke*s + mode: core + reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "Sacrifice this artifact: Add one mana of any color." +#Ikoria: Lair of Behemoths +keyword: + keyword: Mutate + match: Mutate cost + mode: expert + reminder: If you cast this spell for its mutate cost, put it over or under target non-Human creature you own. They mutate into the creature on top plus all abilities from under it. +keyword: + keyword: Companion + match: Companion — name + mode: expert + reminder: If this card is your chosen companion, you may put it into your hand from outside the game for [3] any time you could cast a sorcery. +#Magic 2021 +keyword: + keyword: Mill + match: mill one_word + mode: core + reminder: {if param1.value == "mills" then "They put" else "Put"} the top {if param2.value == "a" then "" else param2 + " "}{if param2.value == "a" then "card" else "cards"} of {if param1.value == "mills" then "their library into their" else "your library into your"} graveyard. +keyword: + keyword: phases out + match: phases out + mode: expert + reminder: Treat it and anything attached to it as though they don't exist until its controller's next turn. +#Zendikar Rising +keyword: + keyword: Party + match: party + mode: action + reminder: Your party consists of up to one of each of Cleric, Rogue, Warrior, and Wizard. +#Commander Legends +keyword: + keyword: Encore + match: Encore cost + mode: action + reminder: {param1}, Exile this card from your graveyard: For each opponent, create a token copy that attacks that opponent this turn if able. They gain haste. Sacrifice them at the beginning of the next end step. Activate only as a sorcery. +#Kaldheim +keyword: + keyword: Shard token + match: Shard toke*s + mode: core + reminder: {if param1.value == "ns" then "They’re enchantments" else "It’s an enchantment"} with "2, Sacrifice this enchantment: Scry ]1[, then draw a card." +keyword: + keyword: Boast + match: Boast + mode: expert + reminder: Activate this ability only if {this_or_that("creature")} attacked this turn and only once each turn. +keyword: + keyword: Foretell + match: Foretell cost + mode: expert + reminder: During your turn, you may pay [2] and exile this card from your hand face down. Cast it on a later turn for its foretell cost. +#Strixhaven +keyword: + keyword: Learn + match: learn + mode: action + reminder: You may reveal a Lesson card you own from outside the game and put it into your hand, or discard a card to draw a card. +keyword: + keyword: Ward + match: Ward cost + mode: expert + reminder: Whenever {this_or_that("permanent")} becomes the target of a spell or ability an opponent controls, counter it unless that player {for_mana_costs(add:"pays ", non:"", param1, action:true)}. +keyword: + keyword: Magecraft + match: Magecraft + mode: pseudo + rules: Magecraft — Whenever you cast or copy an instant or sorcery spell, [effect]. +# Modern Horizons 2 +keyword: + keyword: Devour type + match: Devour one_word number + mode: expert + reminder: As this enters the battlefield, you may sacrifice any number of {english_plural(param1.value)}. {this_or_that("creature", upper:true)} enters the battlefield with { if param2.value == "1" then "" else if param2.value == "2" then "twice " else english_number(param2) + " times " }that many +1/+1 counters on it. +keyword: + keyword: Trample over + match: Trample over name + mode: expert + reminder: {this_or_that("creature", upper:true)} can deal excess combat damage to the controller of {if param1.value == "planeswalkers" then "the planeswalker it's attacking" else param1.value + " blocking it"}. +# Adventures in the Forgotten Realms +keyword: + keyword: Venture into + match: Venture into name + mode: action + reminder: Enter the first room or advance to the next room. +keyword: + keyword: Pack tactics + match: Pack tactics + mode: pseudo + rules: Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, [effect]. +# Commander 2021 +keyword: + keyword: Demonstrate + match: Demonstrate + mode: expert + reminder: When you cast this spell, you may copy it. If you do, choose an opponent to also copy it. +# Midnight Hunt +keyword: + keyword: Daybound + match: Daybound + mode: expert + reminder: If a player casts no spells during their own turn, it becomes night next turn. +keyword: + keyword: Nightbound + match: Nightbound + mode: expert + reminder: If a player casts at least two spells during their own turn, it becomes day next turn. +keyword: + keyword: Disturb + match: Disturb cost + mode: expert + reminder: You may cast this card from your graveyard transformed for its disturb cost. +keyword: + keyword: Decayed + match: Decayed + mode: expert + reminder: {if contains(card.type, match:"Token") then "This creature" else "It"} can't block. When it attacks, sacrifice it at end of combat. +keyword: + keyword: Coven + match: Coven + mode: pseudo + rules: Coven — if you control three or more creatures with different powers, [effect]. +# Crimson Vow +keyword: + keyword: Cleave + match: Cleave cost + mode: expert + reminder: You may cast this spell for its cleave cost. If you do, remove the words in square brackets. +keyword: + keyword: Training + match: Training + mode: expert + reminder: Whenever this creature attacks with another creature with greater power, put a +1/+1 counter on this creature. +keyword: + keyword: Blood token + match: Blood toke*s + mode: expert + reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "1, T, Discard a card, Sacrifice this artifact: Draw a card." +# Kamigawa Neon Dynasty +keyword: + keyword: Reconfigure + match: Reconfigure cost + mode: expert + reminder: {param1}: Attach to target creature you control; or unattach from a creature. Reconfigure only as a sorcery. While attached, this isn't a creature. +keyword: + keyword: modified + match: modified + mode: action + reminder: Equipment, Auras you control, and counters are modifications. +keyword: + keyword: Compleated + match: Compleated + mode: expert + reminder: {phy_reminder(card.casting_cost)} If life was paid, this planeswalker enters with two fewer loyalty counters. \ No newline at end of file diff --git a/data/magic.mse-game/keywords_custom b/data/magic.mse-game/keywords_custom new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/data/magic.mse-game/keywords_custom @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/magic.mse-game/language b/data/magic.mse-game/language index 3b25bec7..f9466970 100644 --- a/data/magic.mse-game/language +++ b/data/magic.mse-game/language @@ -4,7 +4,7 @@ languages := [ English: [ code : "en", - spellcheck_code : "en_us", + spellcheck_code : "en_US", pt_separator : "/", type_separator : " — ", subtype_separator : " ", @@ -14,24 +14,137 @@ languages := [ is_land : match@(match: "(?i)Land") is_enchantment : match@(match: "(?i)Enchantment") is_spell : match@(match: "(?i)Instant|Sorcery") - is_planeswalker : match@(match: "(?i)Planeswalker") + is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") + is_plane : match@(match: "(?i)Plane(?!swalker)") + word_list : "word_list" + ], + Russian: [ + code : "ru", + spellcheck_code : "ru_RU", + pt_separator : "/", + type_separator : " — ", + subtype_separator : " ", + is_creature : match@(match: "(?i)Существо") + is_tribal : match@(match: "(?i)Племенное") + is_artifact : match@(match: "(?i)Артефакт") + is_land : match@(match: "(?i)Земля") + is_enchantment : match@(match: "(?i)Чары") + is_spell : match@(match: "(?i)Мгновенное заклинание|Волшебство") + is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") + is_plane : match@(match: "(?i)Plane(?!swalker)") + word_list : "word_list_ru" + ], + Italiano: [ + code : "it", + spellcheck_code : "it_IT", + pt_separator : "/", + type_separator : " — ", + subtype_separator : " ", + is_creature : match@(match: "(?i)Creatura") + is_tribal : match@(match: "(?i)Tribale") + is_artifact : match@(match: "(?i)Artefatto") + is_land : match@(match: "(?i)Terra") + is_enchantment : match@(match: "(?i)Incantesimo") + is_spell : match@(match: "(?i)Istantaneo|Stregoneria") + is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") + is_plane : match@(match: "(?i)Plane(?!swalker)") + word_list : "word_list_it" + ], + "Português do Brasil" : [ + code : "pt-br", + spellcheck_code : "pt_BR", + pt_separator : "/", + type_separator : " — ", + subtype_separator : " ", + is_creature : match@(match: "(?i)Criatura") + is_tribal : match@(match: "(?i)Tribal") + is_artifact : match@(match: "(?i)Artefato") + is_land : match@(match: "(?i)Terreno") + is_enchantment : match@(match: "(?i)Encantamento") + is_spell : match@(match: "(?i)Mágica Instantânea|Feitiço") + is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") + is_plane : match@(match: "(?i)Plane(?!swalker)") + word_list : "word_list_pt" ], - Français: [ code : "fr", - spellcheck_code : "", # TODO: get dictionary + spellcheck_code : "fr_FR", pt_separator : "/", type_separator : " : " subtype_separator : " et ", is_creature : match@(match: "(?i)Creature|Créature") - is_tribal : match@(match: "(?i)Tribal") - is_artifact : match@(match: "(?i)Artifact") - is_land : match@(match: "(?i)Land") - is_enchantment : match@(match: "(?i)Enchantment") - is_spell : match@(match: "(?i)Instant|Sorcery") + is_tribal : match@(match: "(?i)tribal") + is_artifact : match@(match: "(?i)Artefact") + is_land : match@(match: "(?i)Terrain") + is_enchantment : match@(match: "(?i)Enchantement") + is_spell : match@(match: "(?i)Éphémère|Rituel") is_planeswalker : match@(match: "(?i)Planeswalker") + is_plane : match@(match: "(?i)Plane(?!swalker)") + word_list : "word_list_fr" ] ] # The selected language -language := { languages[set.card_language] or else language.English } +language := { languages[set.card_language] or else languages.English } +spanish_number := { + input := remove_tags(input) + espanol_ones_array := ["cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince"] + espanol_tens_array := ["cero", "diec", "viente", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa"] + function_map := [ + small: {espanol_ones_array[input]}, + large: { + ones := input mod 10 + tens := (input - ones) / 10 + final_answer := espanol_tens_array[tens] + " y " + espanol_ones_array[ones] + final_answer := replace(final_answer, match:" y cero", replace:"") ##remove redundant "and zero" + final_answer := replace(final_answer, match:"(diec|vient)e? y ", replace:"\\1i") ##16-29 are one word + final_answer + }, + oversized: {input} + ] + if input == "number" then "" + else if input < 16 then function_map["small"]() + else if input < 100 then function_map["large"]() + else function_map["oversized"]() +} +portuguese_number := { + input := remove_tags(input) + portugues_ones_array := ["zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze", "catorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"] + portugues_tens_array := ["zero", "deze", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"] + function_map := [ + small: {portugues_ones_array[input]}, + large: { + ones := input mod 10 + tens := (input - ones) / 10 + final_answer := portugues_tens_array[tens] + " e " + portugues_ones_array[ones] + final_answer := replace(final_answer, match:" e zero", replace:"") ##remove redundant "and zero" + final_answer + }, + oversized: {input} + ] + if input == "number" then "" + else if input < 20 then function_map["small"]() + else if input < 100 then function_map["large"]() + else function_map["oversized"]() +} +french_number := { + input := remove_tags(input) + francais_ones_array := ["zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "nuef", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize","dix-sept","dix-huit","dix-neuf"] + francais_tens_array := ["zéro", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingts", "quatre-vingt-dix"] + function_map := [ + small: {francais_ones_array[input]}, + large: { + ones := input mod 10 + tens := (input - ones) / 10 + final_answer := francais_tens_array[tens] + "-" + francais_ones_array[ones] + final_answer := replace(final_answer, match:"-zéro", replace:"") ##remove redundant "and zero" + final_answer := replace(final_answer, match:"-un", replace:" et un") ##21, 31 et al. use "et un" + final_answer + }, + oversized: {input} + ] + if input == "number" then "" + else if input < 20 then function_map["small"]() + else if input < 100 then function_map["large"]() + else function_map["oversized"]() +} diff --git a/data/magic.mse-game/magic-words.en_us.dic b/data/magic.mse-game/magic-words.en_us.dic index 60ec4797..b2cd050e 100644 --- a/data/magic.mse-game/magic-words.en_us.dic +++ b/data/magic.mse-game/magic-words.en_us.dic @@ -172,4 +172,5 @@ earthen hedron thrull arcun -merfolk \ No newline at end of file +merfolk +ziziziz \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.fr_FR b/data/magic.mse-game/magic-words.fr_FR new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.fr_FR @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.fr_FR.dic b/data/magic.mse-game/magic-words.fr_FR.dic new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.fr_FR.dic @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.it_IT b/data/magic.mse-game/magic-words.it_IT new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.it_IT @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.it_IT.dic b/data/magic.mse-game/magic-words.it_IT.dic new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.it_IT.dic @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.pt_BR b/data/magic.mse-game/magic-words.pt_BR new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.pt_BR @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.pt_BR.dic b/data/magic.mse-game/magic-words.pt_BR.dic new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.pt_BR.dic @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.ru_RU b/data/magic.mse-game/magic-words.ru_RU new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.ru_RU @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.ru_RU.dic b/data/magic.mse-game/magic-words.ru_RU.dic new file mode 100644 index 00000000..60ec4797 --- /dev/null +++ b/data/magic.mse-game/magic-words.ru_RU.dic @@ -0,0 +1,175 @@ +148 +mana +untap/MSDRJZG +unblockable +planeswalker +noncreature +nonland +nonenchantment +nonartifact +nonwhite +nonblue +nonblack +nonred +nongreen +unblock/USDG +precombat +postcombat +scry +plainswalk +islandwalk +swampwalk +mountainwalk +forestwalk +landwalk +desertwalk +plainshome +islandhome +swamphome +mountainhome +foresthome +landhome +soulshift +ninjitsu +bushido +lifelink +gravestorm +fateseal +bloodthirst +djinn +unattach +face-down +face-up +spell's +guerrilas +mages +exit-the-battlefield +enter-the-battlefield +havok +spectre +gargadon +gargadons +Crovax +evincar +and/or +20/20 +planeswalkers +Merfolk +deathtouch +noncombat +Urza +Karn +Ajani +Goldmane +Jace +Beleren +Liliana +Vess +Chandra +Nalaar +Garruk +Wildspeaker +Tezzeret +Elspeth +Tirel +Nicol +Bolas +Sarkhan +Vol +Nissa +Revane +Baltrice +Crucius +scryers ++1 +etherium +-1 +Kothophed +wurm +Tolaria +Weatherlight +Ertai +Barrin +Dominaria +Benalish +Benalia +Sisay +golem +Keld +Maraxus +Volrath +Mirri +Multani +maro-sorcerer +Squee +Tahngarth +Crovax +Selenia +Greven +il-Vec +Argive +Samite +Orim +Argivian +Rath +Starke +Sidar +Kondo +evincar +multiverse +Eladamri +Skyshroud +guerilla +Soltari +Lyna +Rofellos +spellcasting +Korvecdal +Vuel +Takara +self-interest +Ashnod +Mishra +Fallaji +Gix +Phyrexia +Phyrexian +supremacy +Tawnos +Argoth +Xantcha +Saproling +nontoken +mage +Ashling +Jaya +Maralen +Mornsong +non-Sliver +non-Shapeshifter +Thopter +Kraken + + +and/or +primordial +non-Dragon +nonpermanent +noninstant +nonplaneswalker +nonenchantment +nonsorcery +nonartifact +non-Human +Hellkite +hexproof +draughts +dwarves +sigil +dwarven +axe +earthen +hedron +thrull +arcun +merfolk \ No newline at end of file diff --git a/data/magic.mse-game/packs b/data/magic.mse-game/packs index 8817caf2..d95ee5e5 100644 --- a/data/magic.mse-game/packs +++ b/data/magic.mse-game/packs @@ -1,4 +1,8 @@ pack type: + name: random + select: no replace + filter: not is_token_card() +pack type: name: basic land select: equal filter: card.rarity == "basic land" and not is_token_card() and not is_masterpiece() # can be shifted @@ -164,6 +168,11 @@ pack type: name: basic land or else common item: name: token / rulestip +pack type: + name: opening hand + item: + name: random + amount: 7 pack type: name: additional land diff --git a/data/magic.mse-game/packs - backup b/data/magic.mse-game/packs - backup deleted file mode 100644 index 068f3601..00000000 --- a/data/magic.mse-game/packs - backup +++ /dev/null @@ -1,187 +0,0 @@ - -############################################################## Card pack types - -pack type: - name: basic land - select: equal - filter: card.rarity == "basic land" and not is_token_card() -pack type: - name: common - filter: card.rarity == "common" and not is_token_card() and not is_shifted_card() -pack type: - name: uncommon - filter: card.rarity == "uncommon" and not is_token_card() and not is_shifted_card() -pack type: - name: rare - filter: card.rarity == "rare" and not is_token_card() and not is_shifted_card() -pack type: - name: mythic rare - filter: card.rarity == "mythic rare" and not is_token_card() and not is_shifted_card() -pack type: - name: special - filter: card.rarity == "special" and not is_token_card() -pack type: - name: shifted common - filter: card.rarity == "common" and not is_token_card() and is_shifted_card() -pack type: - name: shifted uncommon - filter: card.rarity == "uncommon" and not is_token_card() and is_shifted_card() -pack type: - name: shifted rare - filter: - ( card.rarity == "rare" or - card.rarity == "mythic rare" # We've got to put shifted mythic rares somewhere - ) and not is_token_card() and is_shifted_card() - -pack type: - name: token / rulestip - filter: is_token_card() - - -############################################################## shifted/special if possible - -# shifted common if they exist, otherwise a normal common -pack type: - name: shifted common or else common - selectable: false - select: first - item: shifted common - item: common - -# basic land if it exist, otherwise a common -pack type: - name: basic land or else common - selectable: false - select: first - item: basic land - item: common - -# special if it exist, otherwise a common -pack type: - name: special or else common - selectable: false - select: first - item: special - item: common - -# shifted uncommon/rare if they exist, otherwise a normal uncommon -pack type: - name: shifted uncommon or rare or else uncommon - selectable: false - select: first - item: shifted uncommon or rare - item: uncommon - -############################################################## Randomized selections - -pack type: - name: mythic rare or rare - selectable: false - # In Shards of Alara there are 15 mythic rares and 53 rares. - # Each booster has a 1/8 chance of containing a mythic rare. - # This means that looking at single mythics : rares, the proportion is - # 1*53 : 7*15 = 53 : 105 - # this is almost exactly 1 : 2, - # So, a a single mythic is 2 times as rare as a single normal rare. - # - # We use this proportional system instead of a fixed 1:7 system, - # because it copes better with cases where there are few mythics. - # For example, if a set has 1 mythic and 20 rares, you would actually - # be MORE likely to find the mythic card with the 1:7 system! - select: proportional - item: - name: mythic rare - weight: 1 - item: - name: rare - weight: 2 - -pack type: - name: shifted uncommon or rare - selectable: false - select: nonempty - item: - name: shifted uncommon - weight: 3 - item: - name: shifted rare - weight: 1 - -############################################################## Common proportions of cards - -# of the common slots, 3/10 will be shifted, 1/10 will be special -pack type: - name: common sometimes shifted or special - selectable: false - # TODO: Perhaps use some kind of proportional system here as well? - select: equal - item: - name: common - weight: 6 - item: - name: shifted common or else common - weight: 3 - item: - name: special or else common - weight: 1 - -# of the uncommon slots, 1/3 will be shifted, 1/4 of that will be shifted rares instead -pack type: - name: uncommon sometimes shifted - selectable: false - select: equal - item: uncommon - item: uncommon - item: shifted uncommon or rare or else uncommon - - -############################################################## Card packs - -pack type: - name: tournament pack - item: - name: mythic rare or rare - amount: 3 - item: - name: uncommon sometimes shifted - amount: 9 - item: - name: common sometimes shifted or special - amount: 33 - item: - name: basic land - amount: 30 - item: - name: token / rulestip -pack type: - name: booster pack - item: - name: mythic rare or rare - amount: 1 - item: - name: uncommon sometimes shifted - amount: 3 - # a total of 11 common-likes - item: - name: common sometimes shifted or special - amount: 10 - item: - name: basic land or else common - item: - name: token / rulestip - -pack type: - name: additional land - item: basic land -pack type: - name: additional common - item: common sometimes shifted or special -pack type: - name: additional uncommon - item: uncommon sometimes shifted -pack type: - name: additional rare - item: mythic rare or rare -pack type: - name: additional token / rulestip - item: token / rulestip diff --git a/data/magic.mse-game/script b/data/magic.mse-game/script index 3e6506a4..066549bd 100644 --- a/data/magic.mse-game/script +++ b/data/magic.mse-game/script @@ -1,37 +1,65 @@ ############################################################## Localization include file: language +# needed by all style files anyway +include file: /magic-blends.mse-include/new-blends +############################################################## version check +version_date := {"2022-01-30"} ############################################################## Sorting mana symbols # correctly sort a mana symbol (no guild mana) -mana_sort := sort_text@(order: "XYZI[0123456789]DHSC(WUBRG)") +mana_sort := sort_text@(order: "\\?XYZI[0123456789]VLHSCAIE(WUBRG)") # correctly sort wedge mana -mana_sort_wedge := sort_text@(order: "XYZI[0123456789]DHSC(WBGUR)") +mana_sort_wedge := sort_text@(order: "\\?XYZI[0123456789]VLHSCAIE(WBGUR)") +mana_unsort := sort_text@(order:"[/\\?XYZI0123456789VLHSCAIEWUBRG]") # correctly sort guild mana -mana_sort_guild := sort_text@(order: "[XYZI01234567890DHSCWUBRG/|]") + +mana_sort_guild := sort_text@(order: "[\\?XYZI01234567890VLHSCAIEWUBRG/|]") + replace@( # No lookbehind :( #match: "(?($|[^/])", - replace: {sort_text(order:"in_place((WUBRG)")} + replace: {sort_text(order:"in_place((WUBRG))")} ) mana_has_guild := match@(match: "[/|]") # Is there guild or half mana in the input? -mana_is_wedge := { contains(set.mana_cost_sorting, match: "wedge") and ( number_of_items(in: sort_text(order:"", card.casting_cost), filter: "") == 3 ) } +mana_is_wedge := { chosen(set.mana_cost_sorting, choice: "tarkir wedge sorting") and ( number_of_items(in: sort_text(order:"", input), filter: "") == 3 ) } +mana_has_wedge := { mana_is_wedge() and (sort_text(order:"", input) == "WUR" or sort_text(order:"", input) == "WBR" or sort_text(order:"", input) == "WBG" or sort_text(order:"", input) == "UBG" or sort_text(order:"", input) == "URG")} +# convert card.card_color to WUBRG +card_color_to_letters := { + color_string := trim_colors(input) + out_string := (if contains(color_string, match:"white") then "W" else "")+(if contains(color_string, match:"blue") then "U" else "")+(if contains(color_string, match:"black") then "B" else "")+(if contains(color_string, match:"red") then "R" else "")+(if contains(color_string, match:"green") then "G" else "") + out_string +} +card_is_wedge := { + color_string := card_color_to_letters(input) + if color_string == "WUR" or color_string == "WBR" or color_string == "WBG" or color_string == "UBG" or color_string == "URG" then true else false +} +list_colors := { + list := trim_colors(input) + cc := length(comma_count(list)) + if cc == 1 then + list := replace(list, match:", ", replace:" and ") + if cc > 1 then + list := replace(list, match:", ", replace:", and ", in_context:"[^ ]+$") + list +} # A mana cost can contain both normal and guild mana mana_filter := to_upper + { - if contains(set.mana_cost_sorting, match: "unsorted") then input + if chosen(set.mana_cost_sorting, choice: "unsorted") then mana_unsort() else if mana_has_guild() then mana_sort_guild() - else if mana_is_wedge() then mana_sort_wedge() + else if mana_has_wedge(input) then mana_sort_wedge(input) else mana_sort() } # Like mana filter, only also allow tap symbols: +tap_reduction := + replace@(match:"T+", replace:"T")+ + replace@(match:"Q+", replace:"Q") tap_filter := sort_text@(order: "") mana_filter_t := replace@( # Remove [] used for forcing mana symbols match: "[\\[\\]]", replace: "" - ) + { tap_filter() + mana_filter() } + ) + { tap_reduction(tap_filter()) + mana_filter() } ############################################################## Determine card color @@ -45,12 +73,20 @@ color_name := { else if input == "G" then "green" else "" } +mana_name := { + if input == "white" then "W" + else if input == "blue" then "U" + else if input == "black" then "B" + else if input == "red" then "R" + else if input == "green" then "G" + else "C" +} color_names_1 := { color_name(colors.0) } color_names_2 := { color_name(colors.0) + ", " + color_name(colors.1) } color_names_3 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) } color_names_4 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) } color_names_5 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) } -# color based on mana cost, input = a mana cost +# color based on mana cost, input == a mana cost color_filter := sort_text@(order: "") color_filterH := sort_text@(order: "") mana_to_color := { @@ -91,7 +127,7 @@ mana_to_color := { else "multicolor" } -# color based on land text box, input = textbox contents +# color based on land text box, input == textbox contents color_text_filter := # remove activation costs replace@( @@ -116,57 +152,65 @@ land_to_color := { else if watermark == "mana symbol black" then "black, land" else if watermark == "mana symbol red" then "red, land" else if watermark == "mana symbol green" then "green, land" - else land_multicolor(colors:color_text_filter(input: card.rule_text)) -}; + else land_multicolor(colors:color_text_filter(input: rules)) +}@(rules:card.rule_text) # Look for a CDA that defines colors text_to_color := { # Note: running filter_text is quite slow, do a quick 'contains' check first - if contains(match: card_name) then ( + if contains(match: card_name + " is") then ( text := filter_text(match: "is (colorless|all colors|((blue|white|green|red|black)((,|,? and) (blue|white|green|red|black))*))", in_context: regex_escape(card_name)+"()* \\.") if text != "" then ( if contains(text, match: "all colors") then ( - colors := "WUBRG" - if land == "land" then land_multicolor() - else mana_to_color(hybrid: "") + colors := "WUBRG" + if land == "true" then land_multicolor() + else mana_to_color(hybrid: "") ) else ( - colors := "" - if contains(text, match: "white") then colors := colors + "W" - if contains(text, match: "blue") then colors := colors + "U" - if contains(text, match: "black") then colors := colors + "B" - if contains(text, match: "red") then colors := colors + "R" - if contains(text, match: "green") then colors := colors + "G" - if land == "land" then land_multicolor() - else mana_to_color(hybrid: "") + colors := "" + if contains(text, match: "white") then colors := colors + "W" + if contains(text, match: "blue") then colors := colors + "U" + if contains(text, match: "black") then colors := colors + "B" + if contains(text, match: "red") then colors := colors + "R" + if contains(text, match: "green") then colors := colors + "G" + if land == "true" then land_multicolor() + else mana_to_color(hybrid: "") ) - ) else ( - colors := "" ) - ) else ( - colors := "" + else "" ) -}; + else "" +} -# The color of a card is_creature := match@(match: "(?i)Creature") +is_creaturish := match@(match: "(?i)(Creature|Vehicle)") is_tribal := match@(match: "(?i)Tribal") is_artifact := match@(match: "(?i)Artifact") is_land := match@(match: "(?i)Land") is_enchantment := match@(match: "(?i)Enchantment") +is_aura := match@(match: "(?i)Aura") is_spell := match@(match: "(?i)Instant|Sorcery") +is_sorcery := match@(match: "(?i)Sorcery") +is_instant := match@(match: "(?i)Instant") +is_planeswalker := match@(match: "(?i)Planeswalker") +is_legendary := match@(match: "(?i)Legendary") +match_vehicle := contains@(match:"Vehicle") +match_snow := contains@(match:"Snow") + +# The color of a card card_color := { # usually the color of mana text_color := text_to_color(rules_text, land: is_land(type)); if text_color == "" then ( mana_color := mana_to_color(colors: color_filter(casting_cost), hybrid: color_filterH(casting_cost)) - if mana_color == "colorless" and is_land (type) then land_to_color(watermark) + if mana_color == "colorless" and is_land (type) then land_to_color(watermark, rules:rules_text) else if mana_color == "colorless" and is_artifact(type) then "artifact" else if mana_color == "colorless" and contains(card.shape, match:"flip") then default else mana_color ) else text_color }; - +##todo check nil +has_two_names := {contains(card.shape, match:"split") or contains(card.shape, match:"adventure") or contains(card.shape, match:"flip") or contains(card.shape, match:"double faced") or contains(card.shape, match:"aftermath")} # Number of colors in a card_color card_color_color_count := count_chosen@(choices: "white,blue,black,red,green,artifact") # Clean up color field @@ -185,12 +229,13 @@ card_color_filter := { input } -# needed by all style files anyway -include file: /magic-blends.mse-include/new-blends - ############################################################## Card number - +# exportname + exporter_name_filter := filter_text@(match:"!exporte?r?name [^\n!]+") + exporter_name_grabber := replace@(match:"!exporte?r?name ", replace:"") + export_name := { exporter_name_grabber(exporter_name_filter(card.notes))} + # Index for sorting, white cards are first, so white->A, blue->B, .. , # The code consists of 3 parts: # color, shifted, split @@ -202,7 +247,7 @@ sort_index := { } # Process the name for sorting rules sort_name := - # Remove "The", "A", and "And" at the beginning + # Remove "The", "A", and "An" at the beginning replace@(match: "^(The|An?) ", replace: "") + # Remove commas and apostrophes replace@(match: "(,|'|’)", replace: "") + @@ -303,7 +348,7 @@ set_filter := { # TODO: what about rulestips? if is_unsorted() then { is_unsorted() } - if card.shape == "token" or card.shape == "emblem" then + else if card.shape == "token" or card.shape == "emblem" then { card.shape == "token" or card.shape == "emblem" } else if card.shape == "rulestip" then { card.shape == "rulestip" } @@ -312,25 +357,26 @@ set_filter := { else if card.shape == "checklist" then { card.shape == "checklist" } else if is_masterpiece() and card.shape != "token" and card.shape != "emblem" then - { is_masterpiece() and card.shape != "token" and card.shape != "emblem" } - else if set.sort_special_rarity != "separate numbering" then - { not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist"} - else if card.rarity == "special" then - { not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist" and card.rarity == "special" } - else - { not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist" and card.rarity != "special" } + { is_masterpiece() and card.shape != "token" and card.shape != "emblem" } + else if set.sort_special_rarity != "separate numbering" then + { not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist"} + else if card.rarity == "special" then + { not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist" and card.rarity == "special" } + else + { not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist" and card.rarity != "special" } } - +card_number_offset := {pull_comma_array(set.card_number_offsets, cell:0, end:false, default:0)} +set_number_offset := {pull_comma_array(set.card_number_offsets, cell:1, end:false, default:0)} card_number := { position ( of: card in: set - order_by: { rarity_sort() + sort_index() + sort_name(card.name) } + order_by: { rarity_sort() + sort_index() + sort_name(card.name) + sort_name(export_name())} filter: set_filter() - ) + 1 + ) + 1 + to_number(card_number_offset()) } card_count := { - number_of_items(in: set, filter: set_filter()) + number_of_items(in: set, filter: set_filter()) + to_number(set_number_offset()) } #Starting with M15, zero digits in card numbers should be shown up to three. @@ -353,34 +399,78 @@ separate_words := remove_tags + trim + replace@(match:" ", replace: {spacer}) # replaces — correctly add := "" # default is nothing -# If the 'input' parameter is a mana costs, then adds 'add' -for_mana_costs := format_cost := { - if input.separator_before == "—" and contains(input.param, match: " ") then ( - if comma_count(input.param) == "," then ( - if match(match: "^[DHSCTQXYZIWUBRG0-9/|]+,", input.param) then - "{add}{combined_cost(input.param)}" - else "{combined_cost(input.param)}" - ) else if contains(input.param, match: ",") then ( - if match(match: "^[DHSCTQXYZIWUBRG0-9/|]+,", input.param) then - "{add}{long_cost(input.param)}" - else "{long_nomana_cost(input.param)}" - ) else - "{alternative_cost(input.param)}" - ) else - "{add}{input.param}" -} +trim_reminder_x := replace@(match: ". X can’t be 0.", replace: "") + +# If the 'input' parameter is a mana costs, then adds 'add' +for_mana_costs := { + if input.separator_before == "—" and contains(input.param, match: " ") then ( ##multi word + if comma_count(input.param) == "," then ( ##two part + if match(match: "^[VLHSCAIETQ\\?XYZIWUBRG0-9/|]+,", input.param) then ##starts with mana + "{add}{alternative_cost(input.param, trim:combined_cost, s:action)}" ##"add" mana + else "{alternative_cost(input.param, trim:combined_cost, s:action)}{non}" ## else cost "non" + ) else if contains(input.param, match: ",") then ( ##three+ parts + if match(match: "^[VLHSCAIETQ\\?XYZIWUBRG0-9/|]+,", input.param) then ##starts with mana + "{add}{alternative_cost(input.param, trim:long_cost, s:action)}" ##"add" mana with long formatting + else "{alternative_cost(input.param, trim:long_nomana_cost, s:action)}{non}" ## else cost "non" with long formatting + ) else + "{alternative_cost(input.param, s:action, trim:lower_first)}{non}" ##one, nonmana, part + ) else if match(match: "^[VLHSCAIETQ\\?XYZIWUBRG0-9/|]+$", input.param) then ##one word + "{add}{input.param}" ##mana + else + "{alternative_cost(input.param, trim:combined_cost, s:action)}{non}" ##nonmana +}@(non:" in addition to any other costs", action:false) -# Convert first character to lower case -alternative_cost := replace@(match:"^[A-Z]", replace: { to_lower() }) # Convert extra costs long_cost := replace@(match:", [A-Z]", replace: { to_lower() } ) long_nomana_cost := replace@(match:"[A-Z]", replace: { to_lower() }) -# +# Convert first character to lower case +lower_first := replace@(match:"^[A-Z]", replace: { to_lower() }) combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+ replace@(match:",", replace:" and")+ - replace@(match:"^[DHSCTQXYZIWUBRG0-9/|]+", in_context: "(^|[[:space:]])(?![a-z])", replace: "&")+ + replace@(match:"^[VLHSCETQ\\?XYZIWUBRG0-9/|]+", in_context: "(^|[[:space:]])(?![a-z])", replace: "&")+ replace@(match:"^[A-Z]", replace: { to_lower() }) - +alternative_cost := { + input := trim(input) + if s then + input := actionize(input) + input +}@(trim: lower_first, s:false, trim:{input}) +actionize := replace@(match:"(activate|ante|cast|choose|create|destroy|discard|double|draw|exchange|exile|fight|mill|play|put|regenerate|return|reveal|sacrifice|shuffle|tap|untap|transform|vote|exert|pay)(?=($| |,|\\.))", replace:"\\1s") + +replace@(match:"(attach)", replace:"\\1es") + +replace@(match:"scry", replace:"scries") + +replace@(match:"your", replace:"their") +# +protection_code := { + output := if match(input, match:"(artifacts|creatures|enchantments|instants|lands|planeswalkers|sorceries|tribals|planes|schemes|emblems|conspiracies|^[A-Z]|^[^ ]* named)") then replace(input, match:"and from", replace:"or", in_context:" ") + else if match(input, match:"^(converted|mana|power|toughness)") then "anything with " + replace(input, match:"and from", replace:"or", in_context:" ") + else if contains(input, match:"the chosen player") then "anything " + replace(input, match:"the chosen", replace:"controlled by that") + else if contains(input, match:"the chosen") then "anything with " + replace(input, match:"the chosen", replace:"that") + else if contains(input, match:"all colors") then "anything " + replace(input, match:"all colors", replace:"that's white, blue, black, red, or green") + else if match(input, match:"^you$") then "anything you control" + else if match(input, match:"^its owner$") then "anything its owner controls" + else if match(input, match:"^(each of )?your opponents$") then "anything " + replace(input, match:"(each of )?your opponents", replace:"controlled by those players") + else if match(input, match:"(the|a) [^\n]* of your choice") then "anything " + replace(input, match:"(the|a) ([^\n]*) of your choice", replace:"of that \\2") + else if input == "colorless" then "anything colorless" + else "anything " + replace(english_singular(input), match:"and from", replace:"or", in_context:" ") + output := " targeted, dealt damage, enchanted, equipped by " + output + if match(output, match:"(artifacts|creatures|instants|lands|planeswalkers|sorceries|tribals|planes|schemes|emblems|conspiracies|by [A-Z])") and not match(output, match:"(enchantmentsAura|Curse)") then + output := replace(output, match:", enchanted", replace:"") + else output := output + if match(output, match:"(enchantments|creatures|instants|lands|planeswalkers|sorceries|tribals|planes|schemes|emblems|conspiracies|by [A-Z])") and not match(output, match:"(artifacts|Equipment)") then + output := replace(output, match:" equipped", replace:"") + else output := output + if match(output, match:"equipped by") then output := replace(output, match:"equipped by", replace:"or equipped by") + else if match(output, match:"enchanted, by") then output := replace(output, match:"enchanted, by", replace:"or enchanted by") + else if match(output, match:"dealt damage, by") then output := replace(output, match:"dealt damage, by", replace:"or dealt damage by") + else "" + if match(output, match:"^ targeted, or dealt damage by") then output := replace(output, match:"^ targeted, or dealt damage by", replace:" targeted or dealt damage by") + if match(output, match:"anything [A-Z]") then output := replace(output, match:"anything ", replace:"") + if match(output, match:"or les") then output := replace(output, match:"or les$", replace:"or less") + if match(output, match:"(anything )?everything") then output := replace(output, match:"(anything )?everything", replace:"anything") + output := (if self_pro_check(card.text) then "You can't be" else if is_spell(card.type) then "It can't be blocked," else if is_creaturish(card.type) then "This creature can't be blocked," else "This permanent can't be") + output + output +} +self_pro_check := match@(match:"You ha(ve|s) protection") long_dash := replace@(match:"-", replace:"—") # Utilities for keywords @@ -389,7 +479,7 @@ has_cc := { card.casting_cost != "" } has_pt := { card.power != "" or card.toughness != "" } -contains_target := match@(match:"(?i)([^a-z]|^)target([^a-z]|$)") +contains_target := match@(match:"(?i)([^a-z]|^)targets?([^a-z]|$)") is_spell := { contains(card.type, match:"Instant") or contains(card.type, match:"Sorcery") } @@ -401,6 +491,115 @@ color_to_mana := replace@(match: "white", replace: "[W]")+ replace@(match: "red", replace: "[R]")+ replace@(match: "green", replace: "[G]") +iterate_fix := remove_tags + +replace@(match: "^\\.", replace:"") + +replace@(match: "^,", replace:"") + +replace@(match: "^[ ]$", replace:"") +iterate_trim := replace@(match:" times", replace:""); +iterate_digits := { + if iterate_trim(iterate_fix(input)) == "" then "1" + else if iterate_trim(iterate_fix(input)) == " one" then "1" + else if iterate_trim(iterate_fix(input)) == " once" then "1" + else if iterate_trim(iterate_fix(input)) == " two" then "2" + else if iterate_trim(iterate_fix(input)) == " twice" then "2" + else if iterate_trim(iterate_fix(input)) == " three" then "3" + else if iterate_trim(iterate_fix(input)) == " four" then "4" + else if iterate_trim(iterate_fix(input)) == " five" then "5" + else if iterate_trim(iterate_fix(input)) == " six" then "6" + else if iterate_trim(iterate_fix(input)) == " seven" then "7" + else if iterate_trim(iterate_fix(input)) == " eight" then "8" + else if iterate_trim(iterate_fix(input)) == " nine" then "9" + else if iterate_trim(iterate_fix(input)) == " ten" then "10" + else if iterate_trim(iterate_fix(input)) == " eleven" then "11" + else if iterate_trim(iterate_fix(input)) == " twelve" then "12" + else if iterate_trim(iterate_fix(input)) == " thirteen" then "13" + else if iterate_trim(iterate_fix(input)) == " fourteen" then "14" + else if iterate_trim(iterate_fix(input)) == " fifteen" then "15" + else if iterate_trim(iterate_fix(input)) == " sixteen" then "16" + else if iterate_trim(iterate_fix(input)) == " seventeen" then "17" + else if iterate_trim(iterate_fix(input)) == " eighteen" then "18" + else if iterate_trim(iterate_fix(input)) == " nineteen" then "19" + else if iterate_trim(iterate_fix(input)) == " twenty" then "20" + else iterate_trim(iterate_fix(input)) +} +digital_number := { + input := replace(input, match:"up to ", replace:"") + if input == "zero" then 0 + else if input == "one" or input == "a" or input == "an" then 1 + else if input == "two" then 2 + else if input == "three" then 3 + else if input == "four" then 4 + else if input == "five" then 5 + else if input == "six" then 6 + else if input == "seven" then 7 + else if input == "eight" then 8 + else if input == "nine" then 9 + else if input == "ten" then 10 + else if input == "eleven" then 11 + else if input == "twelve" then 12 + else if input == "thirteen" then 13 + else if input == "fourteen" then 14 + else if input == "fifteen" then 15 + else if input == "sixteen" then 16 + else if input == "seventeen" then 17 + else if input == "eighteen" then 18 + else if input == "nineteen" then 19 + else if input == "twenty" then 20 + else input +} +reverse_elements := {for element from 1 to length(input) do input[length(input) - element] + " "} +######################## Level Margins +#### these will be determined by the style affecting the margins and otherwise be 0 +margin_left := {0} +margin_right := {0} +margin_top := {0} +remove_margins := replace@( + match: "", + replace:"" +) +##remove 0 margins and margins with no text +cull_margins := replace@(match:"", replace:"")+ + replace@(match:"", replace:"") + +#### this gives a big array so we can grab_margins["lv1"] etc anywhere +grab_margins := {[ lv1: [margin_left("lv1"), margin_right("lv1"), margin_top("lv1")], + lv2: [margin_left("lv2"), margin_right("lv2"), margin_top("lv2")], + lv3: [margin_left("lv3"), margin_right("lv3"), margin_top("lv3")], + lv4: [margin_left("lv4"), margin_right("lv4"), margin_top("lv4")], + lv5: [margin_left("lv5"), margin_right("lv5"), margin_top("lv5")], + lv6: [margin_left("lv6"), margin_right("lv6"), margin_top("lv6")], + lv7: [margin_left("lv7"), margin_right("lv7"), margin_top("lv7")], + lv8: [margin_left("lv8"), margin_right("lv8"), margin_top("lv8")], + text: [margin_left("text"), margin_right("text"), margin_top("text")], + text2: [margin_left("text2"), margin_right("text2"), margin_top("text2")], + text3: [margin_left("text3"), margin_right("text3"), margin_top("text3")], + text4: [margin_left("text4"), margin_right("text4"), margin_top("text4")], + text5: [margin_left("text5"), margin_right("text5"), margin_top("text5")], + text6: [margin_left("text6"), margin_right("text6"), margin_top("text6")], + unknown: [0,0,0] +]} +#### then with apply_margins(field, name:fieldname), add the margins into the text +apply_margins := { + margin_data := grab_margins()[name] or else [0,0,0] + cull_margins("" + remove_margins(input) + "") +} +is_modal := contains@(match:"
  • ") + +bump_text := { + blocks := split_text(input, match:"\n"); + new_text := blocks[0]; + for x from 1 to length(blocks)-1 do new_text := new_text + "\n" + bumper(blocks[x]) + new_text +} +bumper := { + #if this text isn't modal, at a 5 px margin + if is_modal(input) then input else + cull_margins("" + remove_margins(input) + "") + +} +inserts_values := { + split_text(set.inserts+";;;;;;;;;", match:";") +} ############################################################## The text box # Filters for the text box @@ -408,32 +607,31 @@ color_to_mana := replace@(match: "white", replace: "[W]")+ mana_context := "(?ix) # case insensitive, ignore whitespace (^|[[:space:]\"(“']) # start of a word - ( : # G: something - | , # G, tap: something - | or[ ] # Add X, Y, or Z. - | [ ]to # Add X, Y, or Z to your mana pool. - | [ ]was[ ]spent # if G was spent to cast - | [ ]can[ ]be[ ]pay - | (pays?|additional|costs?|the # pay X. creatures cost 1 less. pay an additional G. - |adds?|pay(ed)?[ ](with|using) - ) - ([ ]either)? # pay either X or Y - ([ ](]*>)?[DHSCTQXYZIEWUBRG0-9/|]+(]*>)?,)* # pay X, Y or Z - ([ ](]*>)?[DHSCTQXYZIEWUBRG0-9/|]+(]*>)?[ ](and|or|and/or))* # pay X or Y - [ ] - ([,.)]|$ # (end of word) - |[ ][^ .,]*$ # still typing... - |[ ]( or | and | in | less | more | to ) # or next word is ... - ) - ) + ( + : # G: something + | , # G, tap: something + | or[ ] # Add X, Y, or Z. + | [ ]to[ ]your # Add X, Y, or Z to your mana pool. + | [ ]was[ ]spent # if G was spent to cast + | [ ]can[ ]be[ ]paid + | (pays?|additional|costs?|the|adds?|pay(ed)?[ ](with|using)) # pay X. creatures cost 1 less. pay an additional G. + ([ ]either)? # pay either X or Y + ([ ](]*>)?[-+=]?[VLHSCETQ\\?XYZIEWUBRG0-9/|]+(]*>)?,)* # pay X, Y or Z + ([ ](]*>)?[-+=]?[VLHSCETQ\\?XYZIEWUBRG0-9/|]+(]*>)?[ ](and|or|and/or))* # pay X or Y + [ ] + ([,.)\"”]|$ # (end of word) + |[ ][^ .,]*$ # still typing... + |[ ]( or | and | in | less | more | to ) # or next word is ... + ) + ) | # keyword argument that is declared as mana | [ ]* # keyword argument that is declared as cost | , # keyword argument that is declared as cost "; - +mana_un_context := "(converted mana costs? | life)" # truncates the name of legends -legend_filter := replace@(match:"(, | of | the ).*", replace: "" ) +legend_filter := replace@(match:"(, | of | the | \"| “).*", replace: "" ) # these are considered a correct 'word' for spellchecking in the text box: additional_text_words := match@(match: @@ -445,6 +643,61 @@ additional_text_words := match@(match: # the rule text filter # - adds mana symbols # - makes text in parentheses italic +equip_filter := + replace@(match:"This creature", replace:"It") + +replace@(match:"this creature", replace:"it") +this_or_that := { + this := "this" + that := "that" + type := input + if is_creaturish(card.type) then type := "creature" + if upper then ( + this := "This" + that := "That" + ) + if(type == "land" and not is_land(card.type)) then type := "permanent" + this_that := this + if ((input == "creature" and not is_creaturish(card.type)) or is_spell(card.type)) + then this_that := that + this_that + " " + type +}@(upper:false) +softline_ripper := + replace@(match:"", replace:"") +auto_correct := + replace@(match:" it’s (controller|owner|power|toughness|converted|other)", replace:" its \\1") + +replace@(match:"Then, if" replace:"Then if") + +replace@(match:"([Ff]irst|[Dd]ouble) Strike" replace:"\\1 strike") + +replace@(match:"Splice (Ont|unt|int)" replace:"Splice ont") + +replace@(match:"(ecomes?) the Monarch" replace:"\\1 the monarch") + +replace@(match:"does (combat|[X0-9]+) damage" replace:"deals \\1 damage") + +replace@( + match: "(gains |gain |have |has )" # preceded by this + + "()" # inside a kw + + "([A-Z])" # match this + replace: { _1 + _2 + to_lower(_3)}) +auto_errata := + replace@(match:"converted mana cost", replace:"mana value") + +replace@(match:"hen shuffle your library", replace:"hen shuffle") + +replace@(match:"this (?:ability )?(?:only )?(?:any ?time you could cast|as) a", in_context: "(Activate|Play) n? (instant|sorcery)", replace:"only as a") +ex_test := { + expand_keywords( + input, + condition: { + correct_case or (mode != "pseudo" and not used_placeholders) + } + default_expand: { + chosen(choice:if correct_case or mode == "action" then mode else "lower case", set.automatic_reminder_text) and chosen(choice:mode, set.automatic_reminder_text) + }, + combine: { + keyword := "{keyword}" + reminder := process_english_hints(if has_pt() then reminder else equip_filter(reminder)) + if mode == "pseudo" then "{keyword}" + else keyword + if expand then " ({reminder})" else "" + + }, + margin_code: margin_code + ) +} text_filter := # step 1 : remove all automatic tags remove_tag@(tag: "") + @@ -452,71 +705,161 @@ text_filter := remove_tag@(tag: "") + remove_tag@(tag: "") + + remove_tag@(tag: "") + + remove_tag@(tag: "", + replace:"BOLDAROUND" + )+ + replace@( + match:"", + replace:"ITALAROUND" + )+ + replace@( + match:"", + replace:"SYMAROUND" + )+ # step 2 : reminder text for keywords expand_keywords@( condition: { correct_case or (mode != "pseudo" and not used_placeholders) } default_expand: { - chosen(choice:if correct_case then mode else "lower case", set.automatic_reminder_text) + chosen(choice:if correct_case or mode == "action" then mode else "lower case", set.automatic_reminder_text) and chosen(choice:mode, set.automatic_reminder_text) }, combine: { keyword := "{keyword}" reminder := process_english_hints(reminder) if mode == "pseudo" then "{keyword}" - else keyword + if expand then " ({reminder})" + else keyword + if expand then " ({reminder})" else "" }) + + # step 2ba : apply face_code + replace@( + match: "face_(.*?)_end", + replace: {face_code(_1)} + )+ # step 2b : move action keywords' reminder text to the end of the line replace@( - match: "((?:(?!]*>)(((?!]+> (?:(?!]+>]*>)([^\n]*)", #######removed "| ?]+> (?:(?!]+>]*>)([^\n]*?)(]+> (?:(?!]+>]*>)([^\n]*)", + replace: "\\2\\4\\3\\1" + ) + + # step 2c : allow a sentence after lowercase reminder text for equips etc. + #replace@( + # match: "(]+>[a-z][^<]+)((?:(?!]*>)([^\n]+)$", + # replace: "\\1\\3\\2" + # ) + + # step 2d : remove duplicate reminder text replace@( match: "(]*>[^)]+[)]]*>)([^\n]+)\\1" replace: "\\2\\1" ) + + # step 2e : combine reminder texts + replace@( + match: "[)](]+>]>]+> )[(]" + replace: "\\1" + ) + + # step 2f : temp fix for formatting buttons + replace@( + match:"BOLDAROUND", + replace:"" + )+ + replace@( + match:"ITALAROUND", + replace:"" + )+ + replace@( + match:"SYMAROUND", + replace:"" + )+ + replace@( + match:"-\n-" + replace:"\n" + )+ # step 3a : expand shortcut word CARDNAME replace@( - match: "CARDNAME", - in_context: "(^|[[:space:]]|\\()", # TODO: Allow any punctuation before + match: "CARDNAME>?", + in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|-|—|/|​)", # TODO: Allow any punctuation before replace: "" ) + # step 3b : expand shortcut word LEGENDNAME replace@( - match: "LEGENDNAME", - in_context: "(^|[[:space:]]|\\()", # TODO: Allow any punctuation before + match: "LEGENDNAME>?", + in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|/|​)", # TODO: Allow any punctuation before replace: "" ) + # step 3c : fill in atom fields tag_contents@( tag: "", - contents: { "" + (if card_name=="" then "CARDNAME" else card_name) + "" } + contents: { "" + (if card_name=="" then "CARDNAME" else strip_card_codes(card_name)) + "" } ) + tag_contents@( tag: "", - contents: { "" + (if card_name=="" then "LEGENDNAME" else legend_filter(card_name)) + "" } + contents: { "" + (if card_name=="" then "LEGENDNAME" else legend_filter(strip_card_codes(card_name))) + "" } ) + + replace@( + match: "INS([1-9])", + in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|/|​)", + replace: "" + ) + + { + out := input + for x from 1 to 9 do + out := tag_contents(out, + tag: "", + contents: { "" + (if inserts_values()[x-1] == "" then "INS"+x else inserts_values()[x-1]) + "" } + ) + out + } + # step 4 : explict non mana symbols replace@( - match: "\\][DHSCTQXYZIWUBRG0-9/|]+\\[", + match: "\\][-+=]?[VLHSCETQ\\?XYZIWUBRG0-9/|]+\\[", replace: {"" + mana_filter_t() + ""} ) + # step 5 : add mana & tap symbols replace@( - match: "\\b[DHSCTQXYZIWUBRG0-9/|]+\\b", + match: "([+=-][XYZ0-9/|]+)", + in_context: mana_context, + replace: {"" + _1 + ""} ) + + replace@( + match: "\\b[VLHSCETQ\\?XYZIWUBRG0-9/|]+\\b", in_context: mana_context, replace: {"" + mana_filter_t() + ""} ) + + # step 5b : remove false positive mana & tap symbols + replace@( + match: "([VLHSCETQ\\?XYZIWUBRG0-9/|]+)", + in_context: mana_un_context, + replace: "\\1" ) + # step 5c : add explicit mana symbols replace@( - match: "\\[[DHSCTQXYZIWUBRG0-9/|]+\\]", + match: "\\[[-+=]?[VLHSCETQE\\?XYZIWUBRG0-9/|]+\\]", replace: {"" + mana_filter_t() + ""} ) + # step 6 : curly quotes - (if set.curly_quotes then curly_quotes) + + {if set.curly_quotes then curly_quotes(input) else input} + # step 7 : italicize text in parenthesis replace@( match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?", in_context: "(^|[[:space:]])|&") + + # step 7b : indent bullets + replace@( + match: "^(• )([^•]+)", + replace: {"
  • " + _1 + "" + _2 + "
  • "} + )+ + # step 7c : clean up modals + { + if is_modal(input) + then bump_text(softline_ripper(input)) + else input + }+ # step 8 : automatic capitalization, but not after "(" replace@( match: "([ ]*: |—| — )" # preceded by this @@ -524,6 +867,14 @@ text_filter := + "(?![)])", # not followed by this replace: { _1 + to_upper(_2) }) + # step 9 : spellcheck + { + if set.auto_correct then + auto_correct(input) + else input } + + { + if set.auto_errata then + auto_errata(input) + else input } + { if set.mark_errors then check_spelling( language: language().spellcheck_code, @@ -533,6 +884,10 @@ text_filter := else input } +modal_lines := replace@(match:"", replace:"") + +replace@(match:"(.+)", replace:"\\1") + +modal_text_filter := text_filter + modal_lines ############################################################## Other boxes @@ -544,7 +899,7 @@ flavor_text_filter := # step 2 : surround by tags { "" + input + "" } + # curly quotes - (if set.curly_quotes then curly_quotes) + + {if set.curly_quotes then curly_quotes(input) else input} + # spellcheck { if set.mark_errors then check_spelling(language:language().spellcheck_code) @@ -574,8 +929,9 @@ sub_type_filter := { else if lang.is_enchantment(type) then "enchantment" else if lang.is_spell(type) then "spell" else if lang.is_planeswalker(type) then "planeswalker" - else ""; - if list_type_rest != "" then ( + else if lang.is_plane(type) then "plane" + else nil + if list_type_rest != nil then ( if lang.is_creature(type) or lang.is_tribal(type) then ( list_type_first := "race" ) else ( @@ -604,22 +960,25 @@ only_first := replace@(match:" .*", replace:"") only_next := replace@(match:"^[^ ]* ?", replace:"") all_sub_types := { for each card in set do - if contains(card.super_type) then "," + space_to_comma(to_text(card.sub_type)) + if contains(card.super_type) then "," + space_to_comma(to_text(card.sub_type)) else "" } all_races := { for each card in set do if is_creature(card.super_type) or is_tribal(card.super_type) then "," + only_first(to_text(card.sub_type)) + else "" } all_classes := { for each card in set do if contains(card.super_type, match:"Creature") then "," + space_to_comma(only_next(to_text(card.sub_type))) + else "" } # Determine a rarity code for M15 styles. rarity_code := { - if is_promo() then "P" + if not set.rarity_codes then "" + else if is_promo() then "P" else if is_masterpiece() then "S" else if contains(card.shape, match:"token") then "T" else if contains(card.shape, match:"emblem") then "E" @@ -629,8 +988,7 @@ rarity_code := { else if card.rarity == "mythic rare" then "M" else if card.rarity == "special" then "S" else if card.rarity == "basic land" then "L" - else "" -}; + else ""} # Determine if the card is a promo card. is_promo := { "false" } @@ -678,9 +1036,10 @@ has_identity_2 := { ( ( card.card_color_2 != card_color(casting_cost: card.casti # Converted mana cost is_half_mana := match@(match: "1/2|[|][WUBRGS]") +is_half_generic := match@(match: "1/2") is_colored_mana := match@(match: "[WUBRG]") only_numbers := filter_text@(match: "^[0123456789]+") -cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRG] | [0-9]+(?!/[WUBRGDHSCTQ2]) | [WUBRGDHS0-9](/[WUBRGDHS])\{0,4} ") +cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRGC] | [0-9](/[WUBRGCVLHSCETQ2]) | [0-9]+(?!/[WUBRGCVLHSCETQ2]) | [WUBRGCVLHS0-9](/[WUBRGCVLHS])\{0,4} ") cmc := {to_number( for each sym in cmc_split(to_text()) do ( numbers := only_numbers(sym) @@ -689,7 +1048,14 @@ cmc := {to_number( else 1 # all other symbols are 1 )) } - +mana_value := cmc +write_wubrg := { + (if match(input, match:"white") then "W" else "")+ + (if match(input, match:"blue") then "U" else "")+ + (if match(input, match:"black") then "B" else "")+ + (if match(input, match:"red") then "R" else "")+ + (if match(input, match:"green") then "G" else "") +} colored_mana := {to_number( for each sym in cmc_split(to_text()) do ( numbers := only_numbers(sym) @@ -698,6 +1064,14 @@ colored_mana := {to_number( else 0 )) } +generic_mana := {to_number( + for each sym in cmc_split(to_text()) do ( + numbers := only_numbers(sym) + if is_half_generic(sym) then 0.5 + else if numbers != "" then to_int(numbers) + else 0 # all other symbols are 1 + )) +} primary_card_color := { artifact := chosen(choice:"artifact") and not (chosen(choice:"white") or chosen(choice:"blue") or chosen(choice:"black") or chosen(choice:"red") or chosen(choice:"green")) @@ -709,8 +1083,10 @@ primary_card_color := { black := chosen(choice:"black") red := chosen(choice:"red") green := chosen(choice:"green") + multi_color := count_chosen(choices:"white, blue, black, red, green") if land then "land" else if multi then "multicolor" + else if multi_color == 2 and chosen(choice:"artifact") then "hybrid" ##hybrid artifacts would show as their first color else if hybrid then "hybrid" else if artifact then "artifact" else if white then "white" @@ -747,6 +1123,16 @@ mainframe_stat_color := { } is_mainframe := { false } is_walker := { contains(card.super_type, match:"Planeswalker") } +is_legend := { true } +mainframe_walker := {false} +mainframe_walker_text_script := {combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text)} +mainframe_walkerb := {false} +mainframe_walker_text_scriptb := {combined_editor(field1: card.level_5_text, separator1: "\n", field2: card.level_6_text, separator2: "\n", field3: card.level_7_text)} +alt_text := {false} +alt_text_script := {false} +alt_textb := {false} +alt_text_scriptb := {false} + mainframe_power := { card.power } mainframe_toughness := { card.toughness } @@ -761,15 +1147,7 @@ remove_type := replace@(match: "(Artifact|Creature|Enchantment|Instant|Land|Plan replace@(match: "[ ]+", in_context: "^", replace: "")+ replace@(match: "[ ]+", in_context: "$", replace: "") node_script := { if card.shape == "double faced" then "transform day" else "none" } -node_script_2 := { - if card.mainframe_node == "transform day" then "transform night" - else if card.mainframe_node == "transform night" then "transform day" - else if card.mainframe_node == "transform moon" then "transform eldrazi" - else if card.mainframe_node == "transform eldrazi" then "transform moon" - else if card.mainframe_node == "transform sparker" then "transform aetherprint" - else if card.mainframe_node == "transform aetherprint" then "transform sparker" - else "none" -} + card_new_color := { if card.card_color == "white" then "w" else if card.card_color == "blue" then "u" @@ -789,13 +1167,679 @@ spark_color := { else if contains(card.card_color, match:"multi") or contains(card.card_color, match:"hybrid") then "m" else "" } -card_spotlight := { "/magic-mainframe-watermarks.mse-include/spotlight/" + card_new_color() + "spotlight.png" } ancestral_mana := { card.pt != "" and card.pt == "" } -exporter_check := { "no" } -custom_watermark_1 := { if set.custom_watermark_1 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_1 else "/magic-watermarks.mse-include/aetherprint3.png" } -custom_watermark_2 := { if set.custom_watermark_2 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_2 else "/magic-watermarks.mse-include/aetherprint3.png" } -custom_watermark_3 := { if set.custom_watermark_3 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_3 else "/magic-watermarks.mse-include/aetherprint3.png" } -custom_watermark_4 := { if set.custom_watermark_4 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_4 else "/magic-watermarks.mse-include/aetherprint3.png" } -custom_watermark_5 := { if set.custom_watermark_5 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_5 else "/magic-watermarks.mse-include/aetherprint3.png" } -is_unsorted := {"false"} \ No newline at end of file +is_unsorted := {"false"} +special_text := { "" } +special_text2 := { "" } +exporter_name_filter := filter_text@(match:"!exporte?r?name [^\n!]+") +exporter_name_grabber := replace@(match:"!exporte?r?name ", replace:"") +card_name := { replace(if exporter_name_grabber(exporter_name_filter(card.notes)) != "" then exporter_name_grabber(exporter_name_filter(card.notes)) else card.name, match:" $", replace:"") } +exporter_num_filter := filter_text@(match:"!num [^\n!]+") +exporter_num_grabber := replace@(match:"!num ", replace:"") +trim_zeroes := replace@(match: "^00?", replace: "")+ + replace@(match: "a?/[0-9b]+", replace: "") +corrected_card_number := { if exporter_num_grabber(exporter_num_filter(card.notes)) != "" then exporter_num_grabber(exporter_num_filter(card.notes)) else if card.custom_card_number != "" then trim_zeroes(card.custom_card_number) else card_number() } + +comma_count := filter_text@(match:",") +round_up := {to_int(0.99999999999998+input)} +round_near := {to_int(0.5+input)} +to_title := replace@(match:"(^| )([A-z])([^ ]*)", replace:{_1+ to_upper(_2) + to_lower(_3)}) +to_sentence := replace@(match:"(^|\n)([A-z])([^\n]*)", replace:{_1+ to_upper(_2) + to_lower(_3)}) +join := { + string := "" + if length(input) == 2 then spacer := " " + if length(input) == 1 then closing := "" + for x from 0 to length(input)-1 do + string := string + (if x == length(input)-1 then closing else "") + input[x] + (if x == length(input)-1 then "" else spacer) + string +}@(spacer:", ", closing:"and ") +includes := { flagged := false + for x from 0 to length(array)-1 do + if array[x] == input then flagged := true; + flagged +} +pull_comma_array := { + array := split_text(input, match:divider) + length := length(comma_count(input)) + ending := to_number(end) + if (cell >= (length + (1-ending))) + then default + else if array[cell] == "" or array[cell] == nil or array[cell] == "-" + then default + else array[cell] +}@(default:0, end: 1, divider:",", cell:0) +##todo check nil +#### standard is pull_comma_array("X,Y,Z,", cell: 0) +#### returns "X" +#### ending true for coordinates (requires a final divider to ensure element is complete) +#### ending false for moving (doesn't require divider, moving 1 then 11 is fine) +#### divider is "," by default, can change +#### can also add default to return in case of errors + +##a workaround for the crop offset function that doesn't appear to work +##slice_chop(input:image, height:(final height), width:(final width), distance:(length from bottom to top of final image)) +slice_crop := { + img := flip_vertical(input) + img := crop(img, height:distance, width:width, offset_x:0, offset_y:0) + img := flip_vertical(img) + img + if(height != 0 and height != distance) then + img := crop(img, height:height, width:width, offset_x:0, offset_y:0) + img +}@(height:0) + +#juryrig fix for level defaults. janky because MSE hates {true} +transfer_levels := {true} +transfer_levels_2 := {true} +a_saga := {false} +saga_reminder := { "As this Saga enters and after your draw step, add a lore counter. Sacrifice after III." } +b_saga := {false} +saga_reminderb := { "As this Saga enters and after your draw step, add a lore counter. Sacrifice after III." } +############################################################## Watermark Updates +card_spotlight := { "/magic-mainframe-watermarks.mse-include/spotlight/" + card_new_color() + "spotlight.png" } +custom_watermark_1 := { if set.custom_watermark_1 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_1 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_2 := { if set.custom_watermark_2 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_2 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_3 := { if set.custom_watermark_3 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_3 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_4 := { if set.custom_watermark_4 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_4 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_5 := { if set.custom_watermark_5 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_5 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_6 := { if set.custom_watermark_6 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_6 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_7 := { if set.custom_watermark_7 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_7 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_8 := { if set.custom_watermark_8 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_8 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_9 := { if set.custom_watermark_9 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_9 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_10 := { if set.custom_watermark_10 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_10 else "/magic-watermarks.mse-include/planeswalker.png" } +custom_watermark_a := {"/magic-watermarks.mse-include/planeswalker.png"} +custom_watermark_b := {"/magic-watermarks.mse-include/planeswalker.png"} +############################################################## Flavor Bar Equation + + +chop_top := {0} +chop_bot := {0} +bar_offset := {0} +offset_lines := {0} +chop_top2 := {0} +chop_bot2 := {0} +bar_offset2 := {0} +offset_lines2 := {0} + +##### Set chop_top(), chop_bot(), bar_offset(), and offset_lines to 0 to reduce replacements in chopping frames +##### Full equations to use in chopping templates below +##### chop_top := {if styling.chop_top == "" then 0 else if comma_count(styling.chop_top) == "," or comma_count(styling.chop_top) == ",," then split_text(match:",", styling.chop_top).0 else styling.chop_top} +##### chop_bot := {if comma_count(styling.chop_top) == ",," then split_text(match:",", styling.chop_top).1 else if styling.chop_bottom == "" then 0 else styling.chop_bottom} +##### bar_offset := {if styling.flavor_bar_offset == "-" or styling.flavor_bar_offset == "+" then 0 else to_number(styling.flavor_bar_offset)} +##### offset_lines := {offset_counter(styling.flavor_bar_offset)} + +top_of_textbox := {card_style.text.top } +bottom_of_textbox := {card_style.text.bottom } +top_of_textbox2 := {card_style.text_2.top } +bottom_of_textbox2 := {card_style.text_2.bottom } +offset_counter := {length(filter_text(input, match:"u")) - length(filter_text(input, match:"d"))} +paragraph_count := filter_text@(match:"\n") +hard_paragraph_count := + replace@(match:"\n", replace:"")+ #count hard breaks for their extra space + filter_text@(match:"\n") +soft_break_filter := + filter_text @(match:"<", in_context: "soft-line>") #count soft breaks for quotes +word_split := split_text@(match:" ") #split words to better calculate line lengths +small_filter := filter_text@(match:"[\\.,\\?!il’]") #grab the tiny characters +fb_length := {length(input) - 0.3 * length(small_filter(input))}#reduce the effect of tiny characters +calc_lines := { sum := 0 #estimate lines by character limit + lines := 1 #minimum of 1 + for e from 0 to length(input)-1 do ( + sum := sum + fb_length(input[e]); + if sum > char then ( #if new word is over the limit + lines := lines + 1; #add new line + sum := fb_length(input[e])) #reset the sum + else + sum := sum + 1; #else add it and a space to the sum + ) + lines #return number of lines +} +lines_of_text := { #estimate lines in break blocks + lines := 0 #further improves the previous eq + for x from 0 to length(input)-1 do + if input[x] or else "" != "" then #if the break isn't empty, check it + lines := lines + calc_lines(word_split(input[x]), char:char) + lines +} +flavor_text := {split_text(match:"\n", remove_tags(card.flavor_text+"\n"))} #remove tags, add \n so .1 doesn't explode +hard_flavor_break := { if not contains(card.flavor_text, match:"\n") then 0 else if contains(card.flavor_text, match:"\n") then 0 else if lines_of_rules() >= 3 then -3 else -2} +font_size := {min(14,round_near(card_style.text.content_height / card_style.text.content_lines) - 8)} #approximate font size +adj_char_width := {7.35 * min(14, font_size()+0.95) / 14} #average char width, adjusted for font size +char_per_line := {min(52,round_up(card_style.text.content_width / adj_char_width())+1.5)} #approximate character limit. very rarely over 52 but standard eq can reach 60+ +lines_of_flavor := {lines_of_text(flavor_text(), char:char_per_line())} +lines_of_rules := { card_style.text.content_lines - lines_of_flavor() } #rules of lines for ratio weirdness +line_height := {(card_style.text.content_height / card_style.text.content_lines)} +padding_height := { 0.5*(bottom_of_textbox() - top_of_textbox() - card_style.text.content_height) } #space between top of textbox and text +linebreak_height := { 2*length(hard_paragraph_count(card.rule_text)) } +###correction for ratio of rules/flavor causing weirdness +uneven_correction := { if lines_of_flavor() == 1 then max(4, (card_style.text.content_lines - (2*lines_of_flavor()))) else (card_style.text.content_lines - (2*lines_of_flavor())) } +###add it all up +###old_bar_equation is compatibilty for 2.0.0 +old_bar_equation := { top_of_textbox() + padding_height() + card_style.text.content_height - line_height()*(lines_of_flavor() + offset_lines()) + linebreak_height() - uneven_correction() + front_corr() + bar_offset() + hard_flavor_break() +1 } +bar_equation := {if card_style.text.layout.blocks[1].bottom or else 0 > 0 then card_style.text.top + 0.5*(card_style.text.layout.blocks[0].bottom+card_style.text.layout.blocks[1].top) else old_bar_equation()} + +flavor_text2 := {split_text(match:"\n", remove_tags(card.flavor_text_2+"\n"))} #remove tags, add \n so .1 doesn't explode +hard_flavor_break2 := { if not contains(card.flavor_text_2, match:"\n") then 0 else if contains(card.flavor_text_2, match:"\n") then 0 else if lines_of_rules2() >= 3 then -3 else -2} +font_size2 := {min(14,round_near(card_style.text_2.content_height / card_style.text_2.content_lines) - 8)} #approximate font size +adj_char_width2 := {7.35 * min(14, font_size2()+0.95) / 14} #average char width, adjusted for font size +char_per_line2 := {min(52,round_up(card_style.text_2.content_width / adj_char_width2())+1.5)} #approximate character limit. very rarely over 52 but standard eq can reach 60+ +lines_of_flavor2 := {lines_of_text(flavor_text2(), char:char_per_line2())} +lines_of_rules2 := { card_style.text_2.content_lines - lines_of_flavor2() } #rules of lines for ratio weirdness +line_height2 := {(card_style.text_2.content_height / card_style.text_2.content_lines)} +padding_height2 := { 0.5*(bottom_of_textbox2() - top_of_textbox2() - card_style.text_2.content_height) } #space between top of textbox and text +linebreak_height2 := { 2*length(hard_paragraph_count(card.rule_text_2)) } +###correction for ratio of rules/flavor causing weirdness +uneven_correction2 := { if lines_of_flavor2() == 1 then max(4, (card_style.text_2.content_lines - (2*lines_of_flavor2()))) else (card_style.text_2.content_lines - (2*lines_of_flavor2())) } +###add it all up +old_bar_equation2 := { top_of_textbox2() + padding_height2() + card_style.text_2.content_height - line_height2()*(lines_of_flavor2() + offset_lines2()) + linebreak_height2() - uneven_correction2() + back_corr() + bar_offset2() + hard_flavor_break2() +1 } +bar_equation2 := {if card_style.text_2.layout.blocks[0].bottom or else 0 > 0 then card_style.text_2.top + 0.5*(card_style.text_2.layout.blocks[0].bottom+card_style.text_2.layout.blocks[1].top) else old_bar_equation2()} + +##### long correction coefficient based off several sets of data +front_corr := {correction_coeff(lof:lines_of_flavor(), lor:lines_of_rules(), lbh:linebreak_height())} +back_corr := {correction_coeff(lof:lines_of_flavor2(), lor:lines_of_rules2(), lbh:linebreak_height2())} +correction_coeff := { + (if lor == 1 then + (if lof == 1 then 3 + else if lof == 2 then 1 + else if lof == 3 then 1.5 + else if lof == 4 then 0 + else 5 - lof) + else if lor == 2 and lbh == 2 then + (if lof == 1 then 1 + else if lof == 2 then 1 + else if lof == 3 then 2 + else if lof == 4 then 2 + else 3) + else if lor == 2 then + (if lof == 1 then 1 + else if lof == 2 then 0 + else if lof == 3 then 0 + else if lof == 4 then 0 + else -1) + else if lor == 3 and lbh == 2 then + (if lof == 1 then 0 + else if lof == 2 then 0 + else if lof == 3 then 1 + else if lof == 4 then 1 + else 2) + else if lor == 3 then + (if lof == 1 then 0 + else if lof == 2 then -1 + else if lof == 3 then -0.5 + else if lof == 4 then -1 + else 0) + else if lor == 4 and lbh == 2 then + (-2 + lof) + else if lor == 4 then + (if lof == 1 then -1 + else if lof == 2 then 0 + else if lof == 3 then -0.5 + else -1) + else if lor == 5 and lbh == 4 then + (-5 + lof) + else if lor == 5 and lbh == 2 then + (-2 + lof) + else if lor == 5 then + (2 - lof) + else if lor == 6 and lbh == 2 then + (-1 - lof) + else if lor == 6 then + (2 - lof) + else 0) + (if lbh >= 4 then 0.5*lbh-1) +} +######################## Modal DFC hints +auto_flags := {true} +front_modal_hint := { + if not auto_flags() then ["", "", 10.5] + else if remove_tags(card.sub_type_2) != "" then [card.sub_type_2, ""+card.casting_cost_2+"", 10.5] + else if card.casting_cost_2 != "" then [main_type(card.super_type_2), ""+card.casting_cost_2+"", 10.5] + else [main_type(card.super_type_2), mana_ability(card.rule_text_2), 10.5] +} +back_modal_hint := { + if not auto_flags() then ["", "", 10.5] + else if remove_tags(card.sub_type) != "" then [card.sub_type, ""+card.casting_cost+"", 10.5] + else if card.casting_cost != "" then [main_type(card.super_type), ""+card.casting_cost+"", 10.5] + else [main_type(card.super_type), mana_ability(card.rule_text), 10.5] +} +mana_ability := { + abils := break_text(input, match:"()?T()?: Add ()?(W|U|B|R|G|C)()?(, | or )?()?(W|U|B|R|G|C)?()?(, or )?()?(W|U|B|R|G|C)?()?.") + abils[0] or else "" +} +main_type := { + types := main_types(input) + if includes("Creature", array:types) + then "Creature" + else if includes("Land", array:types) + then "Land" + else types[0] +} +main_types := { + types := break_text(input, match:"(Land|Instant|Sorcery|Artifact|Enchantment|Creature|Planeswalker)") + types or else [""] +} +######################## Mainframe mana +use_v_mana := {contains(set.custom_mana_symbol_name, match:".png")} +use_large_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"enable in casting costs")} +use_small_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"enable in text boxes")} +use_color_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"colored mana symbols") and not use_hybrid_v_mana()} +use_hybrid_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"hybrid with colors")} +v_mana_name := {if not use_v_mana() then "" else replace(set.custom_mana_symbol_name, match:"(.+/|\\.png)", replace:"")} +v_mana_loc := {if not use_v_mana() then "" else replace(set.custom_mana_symbol_name, match:"{v_mana_name()}\\.png", replace:"")} +v_mana_num := {max(to_number(set.number_hybrid_variants),0) or else -1} + +searchPull := filter_text@(match:"search(name|mana|type|rules|flavor|text|notes)") +searchSnip := replace@(match:"search(name|mana|type|rules|flavor|text|notes)_", replace:"") + +custom_index := { + sortIndex := split_text(set.custom_index, match:",") + for each field in sortIndex do + applyIndex(to_lower(field)) + or else ( + searchIndex(to_lower(searchPull(field)), query:searchSnip(field)) + ) + or else "" +} +applyIndex := { + [ + name: { + fill_len(to_string(position ( + of: card + in: set + order_by: { sort_name(card.name) + sort_name(export_name())} + filter: set_filter() + )), lead:"0", fill_to:3) + }, + alias: { + fill_len(to_string(position ( + of: card + in: set + order_by: { sort_name(card.alias) + sort_name(export_name())} + filter: set_filter() + )), lead:"0", fill_to:3) + } + name2: { + fill_len(to_string(position ( + of: card + in: set + order_by: { sort_name(card.name_2) + sort_name(export_name())} + filter: set_filter() + )), lead:"0", fill_to:3) + }, + alias2: { + fill_len(to_string(position ( + of: card + in: set + order_by: { sort_name(card.alias_2) + sort_name(export_name())} + filter: set_filter() + )), lead:"0", fill_to:3) + } + color: {fill_len(color_of_card(), lead:"A")}, + artist: {fill_len(substring(card.illustrator, end:7), follow:" ", fill_to:7)}, + artist2: {fill_len(substring(card.illustrator_2, end:7), follow:" ", fill_to:7)}, + design: {fill_len(substring(card.card_code_text, end:7), follow:" ", fill_to:7)}, + mv: {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, + "mana value": {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, + cmc: {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, + "converted mana cost": {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, + rarity: {index_of_rarity()}, + power: {fill_len(card.power, lead:"0")}, + toughness: {fill_len(card.toughness, lead:"0")}, + pt: {fill_len(card.power, lead:"0") + fill_len(card.toughness, lead:"0")}, + loyalty: {fill_len(card.loyalty, lead:"0")}, + type: {fill_len(filter_text(match:"[A-Z][A-Z]?[A-Z]?", filter_text(match:"[A-Z]", card.super_type)), follow:"0", fill_to:3)}, + hasrules: {if remove_tags(card.rule_text) != "" then "A" else "B"}, + hasflavor: {if remove_tags(card.flavor_text) != "" then "A" else "B"}, + hasrules2: {if remove_tags(card.rule_text_2) != "" then "A" else "B"}, + hasflavor2: {if remove_tags(card.flavor_text_2) != "" then "A" else "B"}, + ][input]() +} +searchIndex := { + [ + searchname: { if contains(card.name, match:query) or contains(card.name_2, match:query) then "A" else "B"}, + searchmana: { if contains(card.casting_cost, match:query) or contains(card.casting_cost_2, match:query) then "A" else "B"}, + searchtype: { if contains(card.type, match:query) or contains(card.type_2, match:query) then "A" else "B"}, + searchrules: { if contains(card.rule_text, match:query) or contains(card.rule_text_2, match:query) then "A" else "B"}, + searchflavor: { if contains(card.flavor_text, match:query) or contains(card.flavor_text_2, match:query) then "A" else "B"}, + searchartist: { if contains(card.illustrator, match:query) or contains(card.illustrator_2, match:query) then "A" else "B"}, + searchdesign: { if contains(card.card_code_text, match:query) then "A" else "B"}, + searchtext: { if contains(card.text, match:query) or contains(card.text_2, match:query) then "A" else "B"}, + searchnotes: { if contains(card.notes, match:query) then "A" else "B"}, + unsearchname: { if contains(card.name, match:query) or contains(card.name_2, match:query) then "B" else "A"}, + unsearchmana: { if contains(card.casting_cost, match:query) or contains(card.casting_cost_2, match:query) then "B" else "A"}, + unsearchtype: { if contains(card.type, match:query) or contains(card.type_2, match:query) then "B" else "A"}, + unsearchrules: { if contains(card.rule_text, match:query) or contains(card.rule_text_2, match:query) then "B" else "A"}, + unsearchflavor: { if contains(card.flavor_text, match:query) or contains(card.flavor_text_2, match:query) then "B" else "A"}, + unsearchartist: { if contains(card.illustrator, match:query) or contains(card.illustrator_2, match:query) then "B" else "A"}, + unsearchdesign: { if contains(card.card_code_text, match:query) then "B" else "A"}, + unsearchtext: { if contains(card.text, match:query) or contains(card.text_2, match:query) then "B" else "A"}, + unsearchnotes: { if contains(card.notes, match:query) then "B" else "A"} + ][input]() +} +index_of_rarity := { + if card.rarity == "basic land" then "A" + else if card.rarity == "common" then "C" + else if card.rarity == "uncommon" then "D" + else if card.rarity == "rare" then "E" + else if card.rarity == "mythic rare" then "F" + else if card.rarity == "special" then "G" + else "J" +} +fill_len := { + output := to_string(input) + if output == "" then output := "0" + fill := max(0,fill_to - length(output)) + for x from 1 to fill do output := lead + output + follow; + output +}@(fill_to:2, lead:"", follow:"") + +skeleton_commons := 19 +skeleton_uncommons := 11 +skeleton_rares := 7 +skeleton_mythics := 2 +skeleton_land_commons := 1 +skeleton_land_uncommons := 5 +skeleton_land_rares := 0 +skeleton_gold_commons := 0 +skeleton_gold_uncommons := 1 +skeleton_gold_rares := 1 +skeleton_shard_commons := 0 +skeleton_shard_uncommons := 0 +skeleton_shard_rares := 0 +skeleton_wedge_commons := 0 +skeleton_wedge_uncommons := 0 +skeleton_wedge_rares := 0 +skeleton_artifact_commons := 5 +skeleton_artifact_uncommons := 5 +skeleton_artifact_rares := 0 +skeleton_blank_commons := 0 +skeleton_blank_uncommons := 5 +skeleton_blank_rares := 8 +skeleton_blank_mythics := 5 +#### generates a set of CC00 Skeleton cards for each color +#### by insertnamehere and cajun +skeleton_runner := { + cards:=[] + for x from 0 to length(letter_list)-1 do + ( + for y from 1 to count do + if mana_list == "nope" then + (cards := cards + [new_card([name:prefix+letter_list[x]+fill_len(y, lead:"0"), rarity:rarity, card_color:color_list[x], super_type:super_type])];) + else + (cards := cards + [new_card([name:prefix+letter_list[x]+fill_len(y, lead:"0"), rarity:rarity, super_type:super_type, casting_cost:mana_list[x]])];) + ) + cards +}@(count:1, rarity:"common", type:"", prefix:"C", super_type:"", color_list:["white", "blue", "black", "red", "green"], letter_list:["W", "U", "B", "R", "G"], mana_list:"nope") +###outside to make singleton scripts easier +blank_list_5 := ["","","","",""] +blank_list_10 := ["","","","","","","","","",""] +mana_list_ally := ["WU","UB","BR","RG","GW"] +mana_list_enemy := ["WB","UR","BG","RW","GU"] +mana_list_shard := ["WUB","UBR","BRG","RGW","GWU"] +mana_list_wedge := ["WBG","URW","BGU","RWB","GUR"] +skeleton_script := { + cards := []; + cards := cards + skeleton_runner(count:skeleton_commons); + cards := cards + skeleton_runner(count:skeleton_uncommons, prefix:"U", rarity:"uncommon"); + cards := cards + skeleton_runner(count:skeleton_rares, prefix:"R", rarity:"rare"); + cards := cards + skeleton_runner(count:skeleton_mythics, prefix:"M", rarity:"mythic rare"); + cards := cards + skeleton_runner(count:skeleton_gold_commons, prefix:"CM", rarity:"common", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy); + cards := cards + skeleton_runner(count:skeleton_gold_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy); + cards := cards + skeleton_runner(count:skeleton_gold_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy); + cards := cards + skeleton_runner(count:skeleton_shard_commons, prefix:"CM", rarity:"common", letter_list:blank_list_5, mana_list:mana_list_shard); + cards := cards + skeleton_runner(count:skeleton_shard_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_5, mana_list:mana_list_shard); + cards := cards + skeleton_runner(count:skeleton_shard_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_5, mana_list:mana_list_shard); + cards := cards + skeleton_runner(count:skeleton_wedge_commons, prefix:"CM", rarity:"common", letter_list:blank_list_5, mana_list:mana_list_wedge); + cards := cards + skeleton_runner(count:skeleton_wedge_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_5, mana_list:mana_list_wedge); + cards := cards + skeleton_runner(count:skeleton_wedge_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_5, mana_list:mana_list_wedge); + for i from 1 to skeleton_artifact_commons do cards := cards + [new_card([name:"CA"+fill_len(i, lead:"0"), rarity:"common", super_type:"Artifact"])]; + for i from 1 to skeleton_artifact_uncommons do cards := cards + [new_card([name:"UA"+fill_len(i, lead:"0"), rarity:"uncommon", super_type:"Artifact"])]; + for i from 1 to skeleton_artifact_rares do cards := cards + [new_card([name:"RA"+fill_len(i, lead:"0"), rarity:"rare", super_type:"Artifact"])]; + for i from 1 to skeleton_land_commons do cards := cards + [new_card([name:"CL"+fill_len(i, lead:"0"), super_type:"Land", rarity:"common"])]; + for i from 1 to skeleton_land_uncommons do cards := cards + [new_card([name:"UL"+fill_len(i, lead:"0"), super_type:"Land", rarity:"uncommon"])]; + for i from 1 to skeleton_land_rares do cards := cards + [new_card([name:"RL"+fill_len(i, lead:"0"), super_type:"Land", rarity:"rare"])]; + for i from 1 to skeleton_blank_commons do cards := cards + [new_card([name:"CX"+fill_len(i, lead:"0"), rarity:"common"])]; + for i from 1 to skeleton_blank_uncommons do cards := cards + [new_card([name:"UX"+fill_len(i, lead:"0"), rarity:"uncommon"])]; + for i from 1 to skeleton_blank_rares do cards := cards + [new_card([name:"RX"+fill_len(i, lead:"0"), rarity:"rare"])]; + for i from 1 to skeleton_blank_mythics do cards := cards + [new_card([name:"MX"+fill_len(i, lead:"0"), rarity:"mythic rare"])]; + cards +} +skeleton_info := { + trace("Set Skeleton Generator Help:" + +"\nSet variables here to modify the Skeleton Add Cards script, for example 'skeleton_commons := 10'" + +"\nCurrent variables:\n" + +"skeleton_commons: " + skeleton_commons + " (of each color)\n" + +"skeleton_uncommons: " + skeleton_uncommons + " (of each color)\n" + +"skeleton_rares: " + skeleton_rares + " (of each color)\n" + +"skeleton_mythics: " + skeleton_mythics + " (of each color)\n" + +"skeleton_gold_commons: " + skeleton_gold_commons + " (of each color pair)\n" + +"skeleton_gold_uncommons: " + skeleton_gold_uncommons + " (of each color pair)\n" + +"skeleton_gold_rares: " + skeleton_gold_rares + " (of each color pair)\n" + +"skeleton_artifact_commons: " + skeleton_artifact_commons + "\n" + +"skeleton_artifact_uncommons: " + skeleton_artifact_uncommons + "\n" + +"skeleton_artifact_rares: " + skeleton_artifact_rares + "\n" + +"skeleton_land_commons: " + skeleton_land_commons + "\n" + +"skeleton_land_uncommons: " + skeleton_land_uncommons + "\n" + +"skeleton_land_rares: " + skeleton_land_rares + "\n" + +"skeleton_blank_commons: " + skeleton_blank_commons + "\n" + +"skeleton_blank_uncommons: " + skeleton_blank_uncommons + "\n" + +"skeleton_blank_rares: " + skeleton_blank_rares + "\n" + +"skeleton_blank_mythics: " + skeleton_blank_mythics + "\n" + +"skeleton_shard_commons: " + skeleton_shard_commons + "\n" + +"skeleton_shard_uncommons: " + skeleton_shard_uncommons + "\n" + +"skeleton_shard_rares: " + skeleton_shard_rares + "\n" + +"skeleton_wedge_commons: " + skeleton_wedge_commons + "\n" + +"skeleton_wedge_uncommons: " + skeleton_wedge_uncommons + "\n" + +"skeleton_wedge_rares: " + skeleton_wedge_rares) +} +##number of chapter symbols each chapter textbox has +##example, symbols on abilities 2,2,3 returns [0,2,1] +saga_lore_count := { + one := 0 + two := 0 + three := 0 + four := 0 + five := 0 + six := 0 + seven := 0 + eight := 0 + for x from 0 to length(input)-1 do + if input[x] == "1" then one := one +1 + else if input[x] == "2" then two := two +1 + else if input[x] == "3" then three := three +1 + else if input[x] == "4" then four := four +1 + else if input[x] == "5" then five := five +1 + else if input[x] == "6" then six := six +1 + else if input[x] == "7" then seven := seven +1 + else eight := eight +1 + [one, two, three, four, five, six, seven] +} +##index of given chapter number in above array +##example, 2,2,3, returns 1,2,1 +##i tried to make this shorter but this is the only one that deigned to function +saga_ch_placement := { + box1 := 0 + box2 := 0 + box3 := 0 + box4 := 0 + one := 0 + two := 0 + three := 0 + four := 0 + five := 0 + six := 0 + seven := 0 + len := length(input) + if len >= 1 then ( + if input[0] == "1" then ( + box1 := box1 +1 + one := box1+0 + )else if input[0] == "2" then ( + box2 := box2 +1 + one := box2+0 + )else if input[0] == "3" then ( + box3 := box3 +1 + one := box3+0 + )else if input[0] == "4" then ( + box4 := box4 +1 + one := box4+0 + )else (one := one) + )else (one := one) + if len >= 2 then ( + if input[1] == "1" then ( + box1 := box1 +1 + two := box1+0 + )else if input[1] == "2" then ( + box2 := box2 +1 + two := box2+0 + )else if input[1] == "3" then ( + box3 := box3 +1 + two := box3+0 + )else if input[1] == "4" then ( + box4 := box4 +1 + two := box4+0 + )else (two := two) + )else (two := two) + if len >= 3 then ( + if input[2] == "1" then ( + box1 := box1 +1 + three := box1+0 + )else if input[2] == "2" then ( + box2 := box2 +1 + three := box2+0 + )else if input[2] == "3" then ( + box3 := box3 +1 + three := box3+0 + )else if input[2] == "4" then ( + box4 := box4 +1 + three := box4+0 + )else (three := three) + )else (three := three) + if len >= 4 then ( + if input[3] == "1" then ( + box1 := box1 +1 + four := box1+0 + )else if input[3] == "2" then ( + box2 := box2 +1 + four := box2+0 + )else if input[3] == "3" then ( + box3 := box3 +1 + four := box3+0 + )else if input[3] == "4" then ( + box4 := box4 +1 + four := box4+0 + )else (four := four) + )else (four := four) + if len >= 5 then ( + if input[4] == "1" then ( + box1 := box1 +1 + five := box1+0 + )else if input[4] == "2" then ( + box2 := box2 +1 + five := box2+0 + )else if input[4] == "3" then ( + box3 := box3 +1 + five := box3+0 + )else if input[4] == "4" then ( + box4 := box4 +1 + five := box4+0 + )else (five := five) + )else (five := five) + if len >= 6 then ( + if input[5] == "1" then ( + box1 := box1 +1 + six := box1+0 + )else if input[5] == "2" then ( + box2 := box2 +1 + six := box2+0 + )else if input[5] == "3" then ( + box3 := box3 +1 + six := box3+0 + )else if input[5] == "4" then ( + box4 := box4 +1 + six := box4+0 + )else (six := six) + )else (six := six) + if len >= 7 then ( + if input[6] == "1" then ( + box1 := box1 +1 + seven := box1+0 + )else if input[6] == "2" then ( + box2 := box2 +1 + seven := box2+0 + )else if input[6] == "3" then ( + box3 := box3 +1 + seven := box3+0 + )else if input[6] == "4" then ( + box4 := box4 +1 + seven := box4+0 + )else (seven := seven) + )else (seven := seven) + [one, two, three, four, five, six, seven] +} + +card_face := { + trace(margin_code) + front := card[input] + back := if card[input+"_2"] or else "" != "" then card[input+"_2"] else card[input] + if match(margin_code, match:"(text[2456]|lv[5678])") then back else front +} +strip_card_codes := replace@(match:"^[CURMSL][WUBRGMZACL][0-9]+ ?[-—]? ?", replace:"") +name_checker := {if not set.remove_card_codes then input else strip_card_codes(input)} + +face_code := { + face := "" + if margin_code == "text2" or margin_code == "lv5" or margin_code == "lv6" or margin_code == "lv7" or margin_code == "lv8" then face := "_2" + output := face_scripts[input](face) or else if_parse(input, face:face) or else input + output +} +face_scripts := [ + iscreature: {is_creature(card["type"+face])}, + iscreaturish: {is_creaturish(card["type"+face])}, + isenchantment: {is_enchantment(card["type"+face])}, + isartifact: {is_artifact(card["type"+face])}, + island: {is_land(card["type"+face])}, + isspell: {is_spell(card["type"+face])}, + istarget: {is_targeted(card["text"+face])}, + subtypes: {separate_words(card["sub_type"+face], spacer: " ")} + contains: { + contains(card[field+face], match:query) + }, + notcontains: {not contains(card[field+face], match:query)}, +] +expand_facecodes := [ + subtype: "sub_type", + castingcost: "casting_cost", + manacost: "casting_cost" +] +if_parse := replace@( + match: "if_(.*)_then_(.*)_else_(.*)", + replace: {if_scripts(_1, t:_2, f:_3)} +) +if_scripts := { + contCheck := split_text(input, match:"_") + func := contCheck[0] + field := "" + query := "^$" + if length(contCheck) == 3 then ( + field := contCheck[0] + func := contCheck[1] + query := contCheck[2] + ) + field := expand_facecodes[field] or else field + if face_scripts[func](face, field:field, query:query) or else false then t else f +} + +white_text := {false} +phy_reminder := { + phy_match := filter_text(input, match:"(/[WUBRG])+", in_context:"H") + letters := split_text(phy_match, match:"/") + reminder_text := "" + if length(letters) == 2 then + reminder_text := "[H/" + letters[1] + "] can be paid with [" + letters[1] + "] or 2 life." + else if length(letters) > 2 then + reminder_text := "[H/" + letters[1] + "/" + letters[2] + "] can be paid with [" + letters[1] + "], " + "[" + letters[2] + "], or 2 life." + else + reminder_text := "" + reminder_text +} diff --git a/data/magic.mse-game/set_fields b/data/magic.mse-game/set_fields index 439b402d..b75e3255 100644 --- a/data/magic.mse-game/set_fields +++ b/data/magic.mse-game/set_fields @@ -38,6 +38,13 @@ set field: type: symbol name: masterpiece symbol description: The symbol for this sets masterpieces, click to edit +set field: + type: boolean + name: shorten types for rarity + description: Makes the typeline not run into the rarity symbol. Disable if you don't use rarity symbols. +set field: + type: info + name: Watermark links set field: type: text name: custom watermark 1 @@ -58,9 +65,38 @@ set field: type: text name: custom watermark 5 description: Set this image in magic-watermarks.mse-include as Custom Watermark 5 +set field: + type: text + name: custom watermark 6 + description: Set this image in magic-watermarks.mse-include as Custom Watermark 6 +set field: + type: text + name: custom watermark 7 + description: Set this image in magic-watermarks.mse-include as Custom Watermark 7 +set field: + type: text + name: custom watermark 8 + description: Set this image in magic-watermarks.mse-include as Custom Watermark 8 +set field: + type: text + name: custom watermark 9 + description: Set this image in magic-watermarks.mse-include as Custom Watermark 9 +set field: + type: text + name: custom watermark 10 + description: Set this image in magic-watermarks.mse-include as Custom Watermark 10 +set field: + type: boolean + name: blend with colors + initial: no + description: Only works for 500x500 px watermarks. For best results, use a solid black watermark. Blend watermarks with card colors instead of a solid color. set field: type: info name: Defaults and Automation +set field: + type: text + name: inserts + description: List of strings, separated by ;, that replaces INS1, INS2, ... INS9. May need to reload MSE for changes to take effect. set field: type: color name: border color @@ -73,7 +109,7 @@ set field: color: rgb(255,255,255) choice: name: silver - color: rgb(128,128,128) + color: rgb(200,200,200) choice: name: gold color: rgb(200,180,0) @@ -87,10 +123,10 @@ set field: choice: action choice: custom choice: lower case - initial: old, expert, pseudo, action, custom + initial: old, expert, pseudo, action, custom, lower case # Convert from older mse versions script: - if value == "yes" then "old, core, expert, custom" + if value == "yes" then "old, core, expert, custom, lower case" else if value == "no" then "" else value description: For which kinds of keywords should reminder text be added by default? Note: you can enable/disable reminder text by right clicking the keyword. @@ -98,10 +134,18 @@ set field: type: boolean name: automatic card numbers description: Should card numbers be shown on the cards? +set field: + type: text + name: card number offsets + description: Add this number to the card numbers. Formatted as "start,total" set field: type: boolean name: automatic copyright description: Should the copyright line above be shown on the cards? +set field: + type: boolean + name: rarity codes + description: Show rarity codes on M15 frames? set field: type: boolean name: trim statistics @@ -128,29 +172,48 @@ set field: name: sort hybrid in pairs description: Should hybrid cards be sorted according to pairs like in Shadowmoor block? initial: no -#set field: -# type: boolean -# name: wedge mana costs -# description: Should three color mana costs sort in wedge order like in Khans block? -# initial: no set field: type: choice name: mana cost sorting - description: Should mana costs be sorted by shard, by wedge, or unsorted? - choice: shard sorting - choice: wedge sorting + description: Should mana costs be sorted by Tarkir standard (WBG), Apocalypse standard (BGW), or left unsorted? + choice: tarkir wedge sorting + choice: apocalypse wedge sorting choice: unsorted + #typo that stood for way too long + script: + if value == "apocalype wedge sorting" then "apocalypse wedge sorting" else value set field: type: choice name: card language description: Language for the cards choice: English choice: Français + choice: Italiano + choice: Português do Brasil + choice: Russian initial: English set field: type: boolean name: mark errors description: Marks errors on cards, for example wording and spelling errors, non unique card names, etc. +set field: + type: boolean + name: auto correct + description: Applies auto correct for a few common syntax errors. +set field: + type: boolean + name: auto errata + description: Applies auto errata for a changed rules text. + initial: no +set field: + type: boolean + name: remove card codes + description: Remove card codes from all card names. + initial: no +set field: + type: boolean + name: alias as cardname + description: Replaces CARDNAME with a card's alias instead of card name. set field: type: choice name: use gradient multicolor @@ -159,7 +222,63 @@ set field: choice: no description: Use gradients on multicolor cards by default, you can always change it be clicking on the card border. initial: only for two color cards - +set field: + type: boolean + name: wedge mana costs + description: Depreciated. Should three color mana costs sort in wedge order like in Khans block? + initial: no +set field: + type: info + name: Mainframe Template Options +set field: + type: text + name: mainframe rarity name + description: Use rarity symbols from magic-mainframe-extras.mse-include. Input NAME.png here, save the images as NAMEc.png, NAMEu.png, NAMEr.png, NAMEm.png, NAMEs.png, and NAMEmp.png +set field: + type: boolean + name: use flavor bar + description: Enables the flavor bar on Mainframe templates. +set field: + type: boolean + name: auto legends + description: Automatically apply the Legendary frame on Mainframe templates. +set field: + type: text + name: custom index + description: Order of card fields for the custom index sorting + script: replace(value, match:"\n", replace:"") +set field: + type: text + name: custom mana symbol name + description: Use mana symbols from magic-mainframe-extras.mse-include. Input NAME.png here, check help below for file instructions. +set field: + type: multiple choice + name: mana symbol options + choice: enable in casting costs + choice: enable in text boxes + choice: colored mana symbols + choice: hybrid with colors +set field: + type: text + name: number hybrid variants + description: Change 1/X 2/X etc to a variant symbol instead of a hybrid symbol +set field: + type: choice + name: mana symbol help + choice: Click here for mana symbol help! + choice: In your mainframe-extras folder, create folders named "large" and/or "small" depending on your usage + choice: Large is for only mana costs, small for only text, create both if you use both + choice: Additionally, you can create a "future" folder for M15 Future mana costs + choice: Save NAME.png to the relevant folders. Remember that large symbols have dropshadows + choice: For the name option above, set the address of the image, minus mainframe-extras and large/small/future + choice: Ex: magic-mainframe-extras/cajun/large/hazard.png would use cajun/hazard.png + choice: Standard size is 160x160 for small, 200x200 for small hybrid and future, 165x178 for large, 205x218 for large hybrid + choice: If your symbol mixes with colors (such as Phyrexian mana): Save NAME_w.png, NAME_u.png, etc to those folders too. + choice: If your symbol hybrids with colors (like 2/W): [Note, doesn't work on M15 Future mana costs.] + choice: Save NAME_h.png to those folders too. See mana_bb.png and similar for how this image should look. + choice: Your mana symbol will now be keyed to V (and V/W, V/U, etc. for colored/hybrid symbols). + choice: You can change number hybrids (2/V etc) to different mana symbols for even more custom symbols. + choice: Put the highest number to change (from 0 to 11) in "number hybrid variants" and save as NAME_0.png etc. ############################# Default style default set style: @@ -205,8 +324,19 @@ default set style: fill type: linear gradient fill color 1: rgb(224,170,247) fill color 2: rgb(58,7,80) - border color 1: rgb(255,255,255) - border color 2: rgb(255,255,255) + border color 1: rgb(255, 255, 255) + border color 2: rgb(255, 255, 255) +##purple +##fill color 1: rgb(224,170,247) +##fill color 2: rgb(58,7,80) +##green +##fill color 1: rgb(3,146,50) +##fill color 2: rgb(114,252,158) +##brown +##fill color 1: rgb(177,150,131) +##fill color 2: rgb(83,67,53) +##border color 1: rgb(0, 0, 0) +##border color 2: rgb(0, 0, 0) variation: name: watermark border radius: 0.10 @@ -278,3 +408,7 @@ default set style: choice images: English: /magic.mse-game/icons/language-en.png Français: /magic.mse-game/icons/language-fr.png + Português_do_Brasil: /magic.mse-game/icons/language-br.png + mana symbol options: + render style: checklist + direction: vertical diff --git a/data/magic.mse-game/statistics b/data/magic.mse-game/statistics index d849c29f..fbed7225 100644 --- a/data/magic.mse-game/statistics +++ b/data/magic.mse-game/statistics @@ -193,7 +193,7 @@ statistics dimension: statistics dimension: name: text length (words) position hint: 100 - script: if is_mainframe() and is_walker() then word_count(to_text(card.mainframe_rule_text)) else word_count(to_text(card.rule_text)) + script: if a_saga() or mainframe_walker() then word_count(to_text(card.level_1_text))+word_count(to_text(card.level_2_text))+word_count(to_text(card.level_3_text))+word_count(to_text(card.level_4_text)) else word_count(to_text(card.rule_text)) numeric: true bin size: 5 icon: stats/text_length.png @@ -201,7 +201,7 @@ statistics dimension: statistics dimension: name: text length (lines) position hint: 101 - script: if is_mainframe() and is_walker() then line_count(to_text(card.mainframe_rule_text)) else line_count(to_text(card.rule_text)) + script: if a_saga() or mainframe_walker() then line_count(to_text(card.level_1_text))+line_count(to_text(card.level_2_text))+line_count(to_text(card.level_3_text))+line_count(to_text(card.level_4_text)) else line_count(to_text(card.rule_text)) numeric: true icon: stats/text_length.png diff --git a/data/magic.mse-game/word_lists b/data/magic.mse-game/word_lists index 0d6c45fa..70fdd34f 100644 --- a/data/magic.mse-game/word_lists +++ b/data/magic.mse-game/word_lists @@ -1,10 +1,6 @@  ############################################################## Magic word lists -word list: - name: - word: - word list: name: type word: @@ -14,10 +10,13 @@ word list: name: Legendary is prefix: true word: - name: Tribal + name: Snow is prefix: true word: - name: Snow + name: Token + is prefix: true + word: + name: Tribal is prefix: true word: name: World @@ -28,10 +27,14 @@ word list: word: Artifact word: Artifact Creature word: Enchantment + word: Enchantment Creature word: Instant word: Sorcery word: Land word: Planeswalker + word: Emblem + word: Phenomenon + word: Plane word list: name: race @@ -64,6 +67,7 @@ word list: word: Atog word: Aurochs word: Avatar + word: Azra word: name: B word: Badger @@ -72,6 +76,7 @@ word list: word: Bear word: Beast word: Beeble + word: Beholder word: Bird word: Blinkmoth word: Boar @@ -95,6 +100,7 @@ word list: word: name: D word: Dauthi + word: Demigod word: Demon word: Devil word: Dinosaur @@ -107,6 +113,7 @@ word list: word: Dwarf word: name: E + word: Egg word: Efreet word: Eldrazi word: Elemental @@ -120,6 +127,7 @@ word list: word: Ferret word: Fish word: Fox + word: Fractal word: Frog word: Fungus word: @@ -127,6 +135,7 @@ word list: word: Gargoyle word: Germ word: Giant + word: Gnoll word: Gnome word: Goat word: Goblin @@ -139,6 +148,8 @@ word list: word: name: H word: Hag + word: Halfling + word: Hamster word: Harpy word: Hellion word: Hippo @@ -156,6 +167,7 @@ word list: word: Illusion word: Imp word: Incarnation + word: Inkling word: Insect word: name: J @@ -190,6 +202,7 @@ word list: word: Mongoose word: Monkey word: Moonfolk + word: Mouse word: Mutant word: Myr word: @@ -209,11 +222,13 @@ word list: word: Orb word: Orc word: Orgg + word: Otter word: Ouphe word: Ox word: Oyster word: name: P + word: Pangolin word: Pegasus word: Pentavite word: Pest @@ -240,10 +255,12 @@ word list: word: Satyr word: Scarecrow word: Scorpion + word: Sculpture word: Serpent word: Servo word: Shade word: Shapeshifter + word: Shark word: Sheep word: Siren word: Skeleton @@ -268,10 +285,12 @@ word list: word: Surrakar word: name: T + word: Tentacle word: Tetravite word: Thalakos word: Thopter word: Thrull + word: Tiefling word: Treefolk word: Trilobite word: Triskelavite @@ -329,9 +348,11 @@ word list: word: Ally word: Archer word: Archon + word: Army word: Artificer word: Assassin word: Barbarian + word: Bard word: Beast word: Berserker word: Bringer @@ -345,6 +366,7 @@ word list: word: Dreadnought word: Drone word: Druid + word: Egg word: Elder word: Flagbearer word: Horror @@ -361,12 +383,15 @@ word list: word: Mutant word: Mystic word: Ninja + word: Noble word: Nomad + word: Peasant word: Pilot word: Pirate word: Processor word: name: R-S + word: Ranger word: Rebel word: Reflection word: Rigger @@ -386,6 +411,7 @@ word list: name: T-Z word: Thopter word: Vampire + word: Warlock word: Warrior word: Werewolf word: Wizard @@ -397,8 +423,13 @@ word list: script: all_sub_types(match: "Artifact") line below: true word: Contraption + word: Clue word: Equipment + word: Food word: Fortification + word: Gold + word: Treasure + word: Vehicle word list: name: land @@ -411,6 +442,7 @@ word list: word: Mountain word: Forest word: Desert + word: Gate word: Lair word: Locus word: Mine @@ -435,7 +467,9 @@ word list: script: all_sub_types(match: "Instant") + "," + all_sub_types(match: "Sorcery") line below: true word: Arcane + word: Lesson word: Trap + word: Adventure word list: name: planeswalker @@ -443,89 +477,243 @@ word list: script: all_sub_types(match: "Planeswalker") line below: true word: Ajani + word: Aminatou word: Angrath word: Arlinn word: Ashiok word: Bolas + word: Calix word: Chandra word: Dack + word: Dakkon word: Daretti + word: Davriel + word: Dihada word: Domri word: Dovin + word: Ellywick word: Elspeth - word: Freylaise + word: Estrid + word: Freyalise word: Garruk word: Gideon + word: Grist word: Huatli word: Jace + word: Jaya word: Karn + word: Kasmina + word: Kaya word: Kiora word: Koth word: Liliana + word: Lolth + word: Lukka + word: Mordenkainen word: Nahiri word: Narset + word: Niko word: Nissa word: Nixilis + word: Oko word: Ral + word: Rowan word: Saheeli word: Samut word: Sarkhan + word: Serra word: Sorin word: Tamiyo word: Teferi + word: Teyo word: Tezzeret word: Tibalt + word: Tyvar word: Ugin word: Venser + word: Vivien word: Vraska + word: Will + word: Windgrace + word: Wrenn word: Xenagos + word: Yanggu + word: Yanling + word: Zariel + word: + name: Last Seen on Faerun + word: Ellywick + word: Lolth + word: Mordenkainen + word: Zariel + word: + name: Last Seen on Strixhaven + word: Kasmina + word: Liliana + word: Lukka + word: Rowan + word: Will + word: + name: Last Seen on Kaldheim + word: Kaya + word: Niko + word: Tibalt + word: Tyvar + word: + name: Last Seen on Zendikar + word: Jace + word: Kiora + word: Nahiri + word: Nissa + word: Nixilis + word: + name: Last Seen on Ikoria + word: Narset + word: Vivien + word: + name: Last Seen on Theros + word: Ashiok + word: Calix + word: Elspeth + word: Xenagos + word: + name: Last Seen on Eldraine + word: Garruk + word: Oko + word: + name: Last Seen on Ravnica + word: Bolas + word: Gideon + word: Davriel + word: Domri + word: Dovin + word: Ral + word: Teyo + word: Vraska + word: Yanggu + word: Yanling + word: + name: Last Seen on Dominaria + word: Chandra + word: Jaya + word: Karn + word: Teferi word: name: Last Seen on Ixalan word: Angrath word: Huatli - word: Jace - word: Vraska word: name: Last Seen on Amonkhet - word: Bolas - word: Gideon word: Liliana - word: Nissa word: Samut word: name: Last Seen on Kaladesh word: Ajani - word: Chandra - word: Dovin word: Saheeli word: Tezzeret + word: + name: Last Seen on Fiore + name: Dack + name: Daretti word: name: Last Seen on Innistrad word: Arlinn - word: Nahiri word: Sorin word: Tamiyo - word: Tibalt - word: - name: Last Seen on Zendikar - word: Kiora - word: Nixilis word: name: Last Seen on Tarkir - word: Narset word: Sarkhan word: Ugin - word: - name: Last Seen on Theros - word: Ashiok - word: Elspeth - word: Xenagos - word: - name: Last Seen on Ravnica - word: Domri - word: Ral word: name: Last Seen on New Phyrexia - word: Karn word: Koth - word: Venser \ No newline at end of file + word: Venser + word: + name: Last Seen on ??? + word: Aminatou + word: Estrid + word: Wrenn + word: Last Seen Pre-Mending + word: Freyalise + word: Serra + word: Windgrace + +word list: + name: plane + word: + script: all_sub_types(match: "Plane") + line below: true + word: Eldraine + word: Dominaria + word: Ixalan + word: Amonkhet + word: Kaladesh + word: + name: Post-Mending Planes + word: Alara + word: Amonkhet + word: Eldraine + word: Fiora + word: Innistrad + word: Ixalan + word: Kaladesh + word: Kylem + word: Lorwyn + word: New Phyrexia + word: Shadowmoor + word: Tarkir + word: Theros + word: Zendikar + word: + name: Pre-Mending Planes + word: Kamigawa + word: Mercadia + word: Mirrodin + word: Rath + word: Ravnica + word: Serra's Realm + word: + name: Old Planes + word: Aranzhur + word: Azoria + word: Bolas's Meditation Realm + word: Cabralin + word: Cridhe + word: Dominaria + word: Equilor + word: Ergamon + word: Gastal + word: Ilcae + word: Moag + word: Nether Void + word: Phyrexia + word: Pyrulea + word: Rabiah + word: Segovia + word: Shandalar + word: Ulgrotha + word: Vatraquaz + word: Wildfire + word: + name: Planechase Planes + word: Arkhos + word: Azgol + word: Belenon + word: Diraden + word: Fabacin + word: Iquatana + word: Ir + word: Kaldheim + word: Karsus + word: Kephalai + word: Kinshala + word: Kolbahan + word: Kyneth + word: Luvion + word: Mongseng + word: Muraganda + word: Regatha + word: Tavelia + word: Valla + word: Vryn + word: Xerex \ No newline at end of file diff --git a/data/magic.mse-game/word_lists_it b/data/magic.mse-game/word_lists_it new file mode 100644 index 00000000..43f1971f --- /dev/null +++ b/data/magic.mse-game/word_lists_it @@ -0,0 +1,687 @@ + +############################################################## Magic word lists + +word list: + name: type + word: + name: Basic + is prefix: true + word: + name: Legendary + is prefix: true + word: + name: Snow + is prefix: true + word: + name: Token + is prefix: true + word: + name: Tribal + is prefix: true + word: + name: World + is prefix: true + line below: true + word: Conspiracy + word: Creature + word: Artifact + word: Artifact Creature + word: Enchantment + word: Enchantment Creature + word: Instant + word: Sorcery + word: Land + word: Planeswalker + word: Emblem + word: Phenomenon + word: Plane + +word list: + name: race + word: + script: all_races() + line below: true + word: Angel + word: Beast + word: Construct + word: Demon + word: Dragon + word: Elf + word: Faerie + word: Giant + word: Goblin + word: Golem + word: Human + word: Merfolk + word: Zombie + word: + name: All Races + word: + name: A + word: Aetherborn + word: Angel + word: Antelope + word: Ape + word: Archon + word: Assembly-Worker + word: Atog + word: Aurochs + word: Avatar + word: Azra + word: + name: B + word: Badger + word: Basilisk + word: Bat + word: Bear + word: Beast + word: Beeble + word: Bird + word: Blinkmoth + word: Boar + word: Bringer + word: Brushwagg + word: + name: C + word: Camarid + word: Camel + word: Caribou + word: Carrier + word: Cat + word: Centaur + word: Cephalid + word: Chimera + word: Cockatrice + word: Construct + word: Crab + word: Crocodile + word: Cyclops + word: + name: D + word: Dauthi + word: Demigod + word: Demon + word: Devil + word: Dinosaur + word: Djinn + word: Dragon + word: Drake + word: Dreadnought + word: Drone + word: Dryad + word: Dwarf + word: + name: E + word: Egg + word: Efreet + word: Eldrazi + word: Elemental + word: Elephant + word: Elf + word: Elk + word: Eye + word: + name: F + word: Faerie + word: Ferret + word: Fish + word: Fox + word: Frog + word: Fungus + word: + name: G + word: Gargoyle + word: Germ + word: Giant + word: Gnome + word: Goat + word: Goblin + word: God + word: Golem + word: Gorgon + word: Graveborn + word: Gremlin + word: Griffin + word: + name: H + word: Hag + word: Harpy + word: Hellion + word: Hippo + word: Hippogriff + word: Homarid + word: Homunculus + word: Horror + word: Horse + word: Hound + word: Human + word: Hydra + word: Hyena + word: + name: I + word: Illusion + word: Imp + word: Incarnation + word: Insect + word: + name: J + word: Jackal + word: Jellyfish + word: Juggernaut + word: + name: K + word: Kavu + word: Kirin + word: Kithkin + word: Kobold + word: Kor + word: Kraken + word: + name: L + word: Lamia + word: Lammasu + word: Leech + word: Leviathan + word: Lhurgoyf + word: Licid + word: Lizard + word: + name: M + word: Manticore + word: Masticore + word: Merfolk + word: Metathran + word: Minotaur + word: Mole + word: Mongoose + word: Monkey + word: Moonfolk + word: Mouse + word: Mutant + word: Myr + word: + name: N + word: Naga + word: Nautilus + word: Nephilim + word: Nightmare + word: Nightstalker + word: Noggle + word: Nymph + word: + name: O + word: Octopus + word: Ogre + word: Ooze + word: Orb + word: Orc + word: Orgg + word: Otter + word: Ouphe + word: Ox + word: Oyster + word: + name: P + word: Pangolin + word: Pegasus + word: Pentavite + word: Pest + word: Phelddagrif + word: Phoenix + word: Pincher + word: Plant + word: Praetor + word: Prism + word: + name: R + word: Rabbit + word: Rat + word: Reflection + word: Rhino + word: + name: S + word: + name: Sa-Sl + word: Sable + word: Salamander + word: Sand + word: Saproling + word: Satyr + word: Scarecrow + word: Scorpion + word: Sculpture + word: Serpent + word: Servo + word: Shade + word: Shapeshifter + word: Shark + word: Sheep + word: Siren + word: Skeleton + word: Slith + word: Sliver + word: Slug + word: + name: Sn-Sz + word: Snake + word: Soltari + word: Spawn + word: Specter + word: Sphinx + word: Spider + word: Spike + word: Spirit + word: Splinter + word: Sponge + word: Squid + word: Squirrel + word: Starfish + word: Surrakar + word: + name: T + word: Tentacle + word: Tetravite + word: Thalakos + word: Thopter + word: Thrull + word: Treefolk + word: Trilobite + word: Triskelavite + word: Troll + word: Turtle + word: + name: U + word: Unicorn + word: + name: V + word: Vampire + word: Vedalken + word: Viashino + word: Volver + word: + name: W + word: Wall + word: Weird + word: Werewolf + word: Whale + word: Wolf + word: Wolverine + word: Wombat + word: Worm + word: Wraith + word: Wurm + word: + name: Y + word: Yeti + word: + name: Z + word: Zombie + word: Zubera + +word list: + name: class + word: + script: all_classes() + line below: true + word: Beast + word: Cleric + word: Druid + word: Knight + word: Rogue + word: Shaman + word: Soldier + word: Warrior + word: Wizard + word: Zombie + word: + name: All Classes + word: + name: A-C + word: Advisor + word: Ally + word: Archer + word: Archon + word: Army + word: Artificer + word: Assassin + word: Barbarian + word: Beast + word: Berserker + word: Bringer + word: Carrier + word: Citizen + word: Cleric + word: Coward + word: + name: D-I + word: Deserter + word: Dreadnought + word: Drone + word: Druid + word: Egg + word: Elder + word: Flagbearer + word: Horror + word: Incarnation + word: + name: J-P + word: Juggernaut + word: Knight + word: Leviathan + word: Mercenary + word: Minion + word: Monger + word: Monk + word: Mutant + word: Mystic + word: Ninja + word: Noble + word: Nomad + word: Peasant + word: Pilot + word: Pirate + word: Processor + word: + name: R-S + word: Rebel + word: Reflection + word: Rigger + word: Rogue + word: Samurai + word: Scion + word: Scout + word: Serf + word: Shaman + word: Skeleton + word: Soldier + word: Spawn + word: Spellshaper + word: Spirit + word: Survivor + word: + name: T-Z + word: Thopter + word: Vampire + word: Warlock + word: Warrior + word: Werewolf + word: Wizard + word: Zombie + +word list: + name: artifact + word: + script: all_sub_types(match: "Artifact") + line below: true + word: Contraption + word: Clue + word: Equipment + word: Food + word: Fortification + word: Gold + word: Treasure + word: Vehicle + +word list: + name: land + word: + script: all_sub_types(match: "Land") + line below: true + word: Plains + word: Island + word: Swamp + word: Mountain + word: Forest + word: Desert + word: Gate + word: Lair + word: Locus + word: Mine + word: Power-Plant + word: Tower + word: Urza's + +word list: + name: enchantment + word: + script: all_sub_types(match: "Enchantment") + line below: true + word: Aura + word: Curse + word: Shrine + word: Cartouche + word: Saga + +word list: + name: spell + word: + script: all_sub_types(match: "Instant") + "," + all_sub_types(match: "Sorcery") + line below: true + word: Arcane + word: Trap + word: Adventure + +word list: + name: planeswalker + word: + script: all_sub_types(match: "Planeswalker") + line below: true + word: Ajani + word: Aminatou + word: Angrath + word: Arlinn + word: Ashiok + word: Bolas + word: Calix + word: Chandra + word: Dack + word: Daretti + word: Davriel + word: Domri + word: Dovin + word: Elspeth + word: Estrid + word: Freyalise + word: Garruk + word: Gideon + word: Huatli + word: Jace + word: Jaya + word: Karn + word: Kasmina + word: Kaya + word: Kiora + word: Koth + word: Liliana + word: Lukka + word: Nahiri + word: Narset + word: Nissa + word: Nixilis + word: Oko + word: Ral + word: Rowan + word: Saheeli + word: Samut + word: Sarkhan + word: Serra + word: Sorin + word: Tamiyo + word: Teferi + word: Teyo + word: Tezzeret + word: Tibalt + word: Ugin + word: Venser + word: Vivien + word: Vraska + word: Will + word: Windgrace + word: Wrenn + word: Xenagos + word: Yanggu + word: Yanling + word: + name: Last Seen on Ikoria + word: Lukka + word: Narset + word: Vivien + word: + name: Last Seen on Theros + word: Ashiok + word: Calix + word: Elspeth + word: Xenagos + word: + name: Last Seen on Eldraine + word: Garruk + word: Oko + word: Rowan + word: Will + word: + name: Last Seen on Ravnica + word: Bolas + word: Gideon + word: Davriel + word: Domri + word: Dovin + word: Kasmina + word: Kaya + word: Ral + word: Teyo + word: Vraska + word: Yanggu + word: Yanling + word: + name: Last Seen on Dominaria + word: Chandra + word: Jaya + word: Karn + word: Teferi + word: + name: Last Seen on Ixalan + word: Angrath + word: Huatli + word: Jace + word: + name: Last Seen on Amonkhet + word: Liliana + word: Nissa + word: Samut + word: + name: Last Seen on Kaladesh + word: Ajani + word: Saheeli + word: Tezzeret + word: + name: Last Seen on Fiore + name: Dack + name: Daretti + word: + name: Last Seen on Innistrad + word: Arlinn + word: Nahiri + word: Sorin + word: Tamiyo + word: Tibalt + word: + name: Last Seen on Zendikar + word: Kiora + word: Nixilis + word: + name: Last Seen on Tarkir + word: Sarkhan + word: Ugin + word: + name: Last Seen on New Phyrexia + word: Koth + word: Venser + word: + name: Last Seen on ??? + word: Aminatou + word: Estrid + word: Wrenn + word: Last Seen Pre-Mending + word: Freyalise + word: Serra + word: Windgrace + +word list: + name: plane + word: + script: all_sub_types(match: "Plane") + line below: true + word: Eldraine + word: Dominaria + word: Ixalan + word: Amonkhet + word: Kaladesh + word: + name: Post-Mending Planes + word: Alara + word: Amonkhet + word: Eldraine + word: Fiora + word: Innistrad + word: Ixalan + word: Kaladesh + word: Kylem + word: Lorwyn + word: New Phyrexia + word: Shadowmoor + word: Tarkir + word: Theros + word: Zendikar + word: + name: Pre-Mending Planes + word: Kamigawa + word: Mercadia + word: Mirrodin + word: Rath + word: Ravnica + word: Serra's Realm + word: + name: Old Planes + word: Aranzhur + word: Azoria + word: Bolas's Meditation Realm + word: Cabralin + word: Cridhe + word: Dominaria + word: Equilor + word: Ergamon + word: Gastal + word: Ilcae + word: Moag + word: Nether Void + word: Phyrexia + word: Pyrulea + word: Rabiah + word: Segovia + word: Shandalar + word: Ulgrotha + word: Vatraquaz + word: Wildfire + word: + name: Planechase Planes + word: Arkhos + word: Azgol + word: Belenon + word: Diraden + word: Fabacin + word: Iquatana + word: Ir + word: Kaldheim + word: Karsus + word: Kephalai + word: Kinshala + word: Kolbahan + word: Kyneth + word: Luvion + word: Mongseng + word: Muraganda + word: Regatha + word: Tavelia + word: Valla + word: Vryn + word: Xerex \ No newline at end of file diff --git a/data/magic.mse-game/word_lists_it.txt b/data/magic.mse-game/word_lists_it.txt new file mode 100644 index 00000000..43f1971f --- /dev/null +++ b/data/magic.mse-game/word_lists_it.txt @@ -0,0 +1,687 @@ + +############################################################## Magic word lists + +word list: + name: type + word: + name: Basic + is prefix: true + word: + name: Legendary + is prefix: true + word: + name: Snow + is prefix: true + word: + name: Token + is prefix: true + word: + name: Tribal + is prefix: true + word: + name: World + is prefix: true + line below: true + word: Conspiracy + word: Creature + word: Artifact + word: Artifact Creature + word: Enchantment + word: Enchantment Creature + word: Instant + word: Sorcery + word: Land + word: Planeswalker + word: Emblem + word: Phenomenon + word: Plane + +word list: + name: race + word: + script: all_races() + line below: true + word: Angel + word: Beast + word: Construct + word: Demon + word: Dragon + word: Elf + word: Faerie + word: Giant + word: Goblin + word: Golem + word: Human + word: Merfolk + word: Zombie + word: + name: All Races + word: + name: A + word: Aetherborn + word: Angel + word: Antelope + word: Ape + word: Archon + word: Assembly-Worker + word: Atog + word: Aurochs + word: Avatar + word: Azra + word: + name: B + word: Badger + word: Basilisk + word: Bat + word: Bear + word: Beast + word: Beeble + word: Bird + word: Blinkmoth + word: Boar + word: Bringer + word: Brushwagg + word: + name: C + word: Camarid + word: Camel + word: Caribou + word: Carrier + word: Cat + word: Centaur + word: Cephalid + word: Chimera + word: Cockatrice + word: Construct + word: Crab + word: Crocodile + word: Cyclops + word: + name: D + word: Dauthi + word: Demigod + word: Demon + word: Devil + word: Dinosaur + word: Djinn + word: Dragon + word: Drake + word: Dreadnought + word: Drone + word: Dryad + word: Dwarf + word: + name: E + word: Egg + word: Efreet + word: Eldrazi + word: Elemental + word: Elephant + word: Elf + word: Elk + word: Eye + word: + name: F + word: Faerie + word: Ferret + word: Fish + word: Fox + word: Frog + word: Fungus + word: + name: G + word: Gargoyle + word: Germ + word: Giant + word: Gnome + word: Goat + word: Goblin + word: God + word: Golem + word: Gorgon + word: Graveborn + word: Gremlin + word: Griffin + word: + name: H + word: Hag + word: Harpy + word: Hellion + word: Hippo + word: Hippogriff + word: Homarid + word: Homunculus + word: Horror + word: Horse + word: Hound + word: Human + word: Hydra + word: Hyena + word: + name: I + word: Illusion + word: Imp + word: Incarnation + word: Insect + word: + name: J + word: Jackal + word: Jellyfish + word: Juggernaut + word: + name: K + word: Kavu + word: Kirin + word: Kithkin + word: Kobold + word: Kor + word: Kraken + word: + name: L + word: Lamia + word: Lammasu + word: Leech + word: Leviathan + word: Lhurgoyf + word: Licid + word: Lizard + word: + name: M + word: Manticore + word: Masticore + word: Merfolk + word: Metathran + word: Minotaur + word: Mole + word: Mongoose + word: Monkey + word: Moonfolk + word: Mouse + word: Mutant + word: Myr + word: + name: N + word: Naga + word: Nautilus + word: Nephilim + word: Nightmare + word: Nightstalker + word: Noggle + word: Nymph + word: + name: O + word: Octopus + word: Ogre + word: Ooze + word: Orb + word: Orc + word: Orgg + word: Otter + word: Ouphe + word: Ox + word: Oyster + word: + name: P + word: Pangolin + word: Pegasus + word: Pentavite + word: Pest + word: Phelddagrif + word: Phoenix + word: Pincher + word: Plant + word: Praetor + word: Prism + word: + name: R + word: Rabbit + word: Rat + word: Reflection + word: Rhino + word: + name: S + word: + name: Sa-Sl + word: Sable + word: Salamander + word: Sand + word: Saproling + word: Satyr + word: Scarecrow + word: Scorpion + word: Sculpture + word: Serpent + word: Servo + word: Shade + word: Shapeshifter + word: Shark + word: Sheep + word: Siren + word: Skeleton + word: Slith + word: Sliver + word: Slug + word: + name: Sn-Sz + word: Snake + word: Soltari + word: Spawn + word: Specter + word: Sphinx + word: Spider + word: Spike + word: Spirit + word: Splinter + word: Sponge + word: Squid + word: Squirrel + word: Starfish + word: Surrakar + word: + name: T + word: Tentacle + word: Tetravite + word: Thalakos + word: Thopter + word: Thrull + word: Treefolk + word: Trilobite + word: Triskelavite + word: Troll + word: Turtle + word: + name: U + word: Unicorn + word: + name: V + word: Vampire + word: Vedalken + word: Viashino + word: Volver + word: + name: W + word: Wall + word: Weird + word: Werewolf + word: Whale + word: Wolf + word: Wolverine + word: Wombat + word: Worm + word: Wraith + word: Wurm + word: + name: Y + word: Yeti + word: + name: Z + word: Zombie + word: Zubera + +word list: + name: class + word: + script: all_classes() + line below: true + word: Beast + word: Cleric + word: Druid + word: Knight + word: Rogue + word: Shaman + word: Soldier + word: Warrior + word: Wizard + word: Zombie + word: + name: All Classes + word: + name: A-C + word: Advisor + word: Ally + word: Archer + word: Archon + word: Army + word: Artificer + word: Assassin + word: Barbarian + word: Beast + word: Berserker + word: Bringer + word: Carrier + word: Citizen + word: Cleric + word: Coward + word: + name: D-I + word: Deserter + word: Dreadnought + word: Drone + word: Druid + word: Egg + word: Elder + word: Flagbearer + word: Horror + word: Incarnation + word: + name: J-P + word: Juggernaut + word: Knight + word: Leviathan + word: Mercenary + word: Minion + word: Monger + word: Monk + word: Mutant + word: Mystic + word: Ninja + word: Noble + word: Nomad + word: Peasant + word: Pilot + word: Pirate + word: Processor + word: + name: R-S + word: Rebel + word: Reflection + word: Rigger + word: Rogue + word: Samurai + word: Scion + word: Scout + word: Serf + word: Shaman + word: Skeleton + word: Soldier + word: Spawn + word: Spellshaper + word: Spirit + word: Survivor + word: + name: T-Z + word: Thopter + word: Vampire + word: Warlock + word: Warrior + word: Werewolf + word: Wizard + word: Zombie + +word list: + name: artifact + word: + script: all_sub_types(match: "Artifact") + line below: true + word: Contraption + word: Clue + word: Equipment + word: Food + word: Fortification + word: Gold + word: Treasure + word: Vehicle + +word list: + name: land + word: + script: all_sub_types(match: "Land") + line below: true + word: Plains + word: Island + word: Swamp + word: Mountain + word: Forest + word: Desert + word: Gate + word: Lair + word: Locus + word: Mine + word: Power-Plant + word: Tower + word: Urza's + +word list: + name: enchantment + word: + script: all_sub_types(match: "Enchantment") + line below: true + word: Aura + word: Curse + word: Shrine + word: Cartouche + word: Saga + +word list: + name: spell + word: + script: all_sub_types(match: "Instant") + "," + all_sub_types(match: "Sorcery") + line below: true + word: Arcane + word: Trap + word: Adventure + +word list: + name: planeswalker + word: + script: all_sub_types(match: "Planeswalker") + line below: true + word: Ajani + word: Aminatou + word: Angrath + word: Arlinn + word: Ashiok + word: Bolas + word: Calix + word: Chandra + word: Dack + word: Daretti + word: Davriel + word: Domri + word: Dovin + word: Elspeth + word: Estrid + word: Freyalise + word: Garruk + word: Gideon + word: Huatli + word: Jace + word: Jaya + word: Karn + word: Kasmina + word: Kaya + word: Kiora + word: Koth + word: Liliana + word: Lukka + word: Nahiri + word: Narset + word: Nissa + word: Nixilis + word: Oko + word: Ral + word: Rowan + word: Saheeli + word: Samut + word: Sarkhan + word: Serra + word: Sorin + word: Tamiyo + word: Teferi + word: Teyo + word: Tezzeret + word: Tibalt + word: Ugin + word: Venser + word: Vivien + word: Vraska + word: Will + word: Windgrace + word: Wrenn + word: Xenagos + word: Yanggu + word: Yanling + word: + name: Last Seen on Ikoria + word: Lukka + word: Narset + word: Vivien + word: + name: Last Seen on Theros + word: Ashiok + word: Calix + word: Elspeth + word: Xenagos + word: + name: Last Seen on Eldraine + word: Garruk + word: Oko + word: Rowan + word: Will + word: + name: Last Seen on Ravnica + word: Bolas + word: Gideon + word: Davriel + word: Domri + word: Dovin + word: Kasmina + word: Kaya + word: Ral + word: Teyo + word: Vraska + word: Yanggu + word: Yanling + word: + name: Last Seen on Dominaria + word: Chandra + word: Jaya + word: Karn + word: Teferi + word: + name: Last Seen on Ixalan + word: Angrath + word: Huatli + word: Jace + word: + name: Last Seen on Amonkhet + word: Liliana + word: Nissa + word: Samut + word: + name: Last Seen on Kaladesh + word: Ajani + word: Saheeli + word: Tezzeret + word: + name: Last Seen on Fiore + name: Dack + name: Daretti + word: + name: Last Seen on Innistrad + word: Arlinn + word: Nahiri + word: Sorin + word: Tamiyo + word: Tibalt + word: + name: Last Seen on Zendikar + word: Kiora + word: Nixilis + word: + name: Last Seen on Tarkir + word: Sarkhan + word: Ugin + word: + name: Last Seen on New Phyrexia + word: Koth + word: Venser + word: + name: Last Seen on ??? + word: Aminatou + word: Estrid + word: Wrenn + word: Last Seen Pre-Mending + word: Freyalise + word: Serra + word: Windgrace + +word list: + name: plane + word: + script: all_sub_types(match: "Plane") + line below: true + word: Eldraine + word: Dominaria + word: Ixalan + word: Amonkhet + word: Kaladesh + word: + name: Post-Mending Planes + word: Alara + word: Amonkhet + word: Eldraine + word: Fiora + word: Innistrad + word: Ixalan + word: Kaladesh + word: Kylem + word: Lorwyn + word: New Phyrexia + word: Shadowmoor + word: Tarkir + word: Theros + word: Zendikar + word: + name: Pre-Mending Planes + word: Kamigawa + word: Mercadia + word: Mirrodin + word: Rath + word: Ravnica + word: Serra's Realm + word: + name: Old Planes + word: Aranzhur + word: Azoria + word: Bolas's Meditation Realm + word: Cabralin + word: Cridhe + word: Dominaria + word: Equilor + word: Ergamon + word: Gastal + word: Ilcae + word: Moag + word: Nether Void + word: Phyrexia + word: Pyrulea + word: Rabiah + word: Segovia + word: Shandalar + word: Ulgrotha + word: Vatraquaz + word: Wildfire + word: + name: Planechase Planes + word: Arkhos + word: Azgol + word: Belenon + word: Diraden + word: Fabacin + word: Iquatana + word: Ir + word: Kaldheim + word: Karsus + word: Kephalai + word: Kinshala + word: Kolbahan + word: Kyneth + word: Luvion + word: Mongseng + word: Muraganda + word: Regatha + word: Tavelia + word: Valla + word: Vryn + word: Xerex \ No newline at end of file diff --git a/data/magic.mse-game/word_lists_pt b/data/magic.mse-game/word_lists_pt new file mode 100644 index 00000000..ebb32851 --- /dev/null +++ b/data/magic.mse-game/word_lists_pt @@ -0,0 +1,719 @@ + +############################################################## Magic word lists + +word list: + name: type + word: + name: Básico + is prefix: true + word: + name: Lendário + is prefix: true + word: + name: da Neve + is prefix: true + word: + name: Token + is prefix: true + word: + name: Tribal + is prefix: true + word: + name: World + is prefix: true + line below: true + word: Conspiracy + word: Criatura + word: Artefato + word: Criatura Artefato + word: Encantamento + word: Criatura Encantamento + word: Mágica Instantânea + word: Feitiço + word: Terreno + word: Planeswalker + word: Emblem + word: Phenomenon + word: Plane + +word list: + name: race + word: + script: all_races() + line below: true + word: Angel + word: Beast + word: Construct + word: Demon + word: Dragon + word: Elf + word: Faerie + word: Giant + word: Goblin + word: Golem + word: Human + word: Merfolk + word: Zombie + word: + name: All Races + word: + name: A + word: Aetherborn + word: Angel + word: Antelope + word: Ape + word: Archon + word: Assembly-Worker + word: Atog + word: Aurochs + word: Avatar + word: Azra + word: + name: B + word: Badger + word: Basilisk + word: Bat + word: Bear + word: Beast + word: Beeble + word: Beholder + word: Bird + word: Blinkmoth + word: Boar + word: Bringer + word: Brushwagg + word: + name: C + word: Camarid + word: Camel + word: Caribou + word: Carrier + word: Cat + word: Centaur + word: Cephalid + word: Chimera + word: Cockatrice + word: Construct + word: Crab + word: Crocodile + word: Cyclops + word: + name: D + word: Dauthi + word: Demigod + word: Demon + word: Devil + word: Dinosaur + word: Djinn + word: Dragon + word: Drake + word: Dreadnought + word: Drone + word: Dryad + word: Dwarf + word: + name: E + word: Egg + word: Efreet + word: Eldrazi + word: Elemental + word: Elephant + word: Elf + word: Elk + word: Eye + word: + name: F + word: Faerie + word: Ferret + word: Fish + word: Fox + word: Fractal + word: Frog + word: Fungus + word: + name: G + word: Gargoyle + word: Germ + word: Giant + word: Gnoll + word: Gnome + word: Goat + word: Goblin + word: God + word: Golem + word: Gorgon + word: Graveborn + word: Gremlin + word: Griffin + word: + name: H + word: Hag + word: Halfling + word: Hamster + word: Harpy + word: Hellion + word: Hippo + word: Hippogriff + word: Homarid + word: Homunculus + word: Horror + word: Horse + word: Hound + word: Human + word: Hydra + word: Hyena + word: + name: I + word: Illusion + word: Imp + word: Incarnation + word: Inkling + word: Insect + word: + name: J + word: Jackal + word: Jellyfish + word: Juggernaut + word: + name: K + word: Kavu + word: Kirin + word: Kithkin + word: Kobold + word: Kor + word: Kraken + word: + name: L + word: Lamia + word: Lammasu + word: Leech + word: Leviathan + word: Lhurgoyf + word: Licid + word: Lizard + word: + name: M + word: Manticore + word: Masticore + word: Merfolk + word: Metathran + word: Minotaur + word: Mole + word: Mongoose + word: Monkey + word: Moonfolk + word: Mouse + word: Mutant + word: Myr + word: + name: N + word: Naga + word: Nautilus + word: Nephilim + word: Nightmare + word: Nightstalker + word: Noggle + word: Nymph + word: + name: O + word: Octopus + word: Ogre + word: Ooze + word: Orb + word: Orc + word: Orgg + word: Otter + word: Ouphe + word: Ox + word: Oyster + word: + name: P + word: Pangolin + word: Pegasus + word: Pentavite + word: Pest + word: Phelddagrif + word: Phoenix + word: Pincher + word: Plant + word: Praetor + word: Prism + word: + name: R + word: Rabbit + word: Rat + word: Reflection + word: Rhino + word: + name: S + word: + name: Sa-Sl + word: Sable + word: Salamander + word: Sand + word: Saproling + word: Satyr + word: Scarecrow + word: Scorpion + word: Sculpture + word: Serpent + word: Servo + word: Shade + word: Shapeshifter + word: Shark + word: Sheep + word: Siren + word: Skeleton + word: Slith + word: Sliver + word: Slug + word: + name: Sn-Sz + word: Snake + word: Soltari + word: Spawn + word: Specter + word: Sphinx + word: Spider + word: Spike + word: Spirit + word: Splinter + word: Sponge + word: Squid + word: Squirrel + word: Starfish + word: Surrakar + word: + name: T + word: Tentacle + word: Tetravite + word: Thalakos + word: Thopter + word: Thrull + word: Tiefling + word: Treefolk + word: Trilobite + word: Triskelavite + word: Troll + word: Turtle + word: + name: U + word: Unicorn + word: + name: V + word: Vampire + word: Vedalken + word: Viashino + word: Volver + word: + name: W + word: Wall + word: Weird + word: Werewolf + word: Whale + word: Wolf + word: Wolverine + word: Wombat + word: Worm + word: Wraith + word: Wurm + word: + name: Y + word: Yeti + word: + name: Z + word: Zombie + word: Zubera + +word list: + name: class + word: + script: all_classes() + line below: true + word: Beast + word: Cleric + word: Druid + word: Knight + word: Rogue + word: Shaman + word: Soldier + word: Warrior + word: Wizard + word: Zombie + word: + name: All Classes + word: + name: A-C + word: Advisor + word: Ally + word: Archer + word: Archon + word: Army + word: Artificer + word: Assassin + word: Barbarian + word: Bard + word: Beast + word: Berserker + word: Bringer + word: Carrier + word: Citizen + word: Cleric + word: Coward + word: + name: D-I + word: Deserter + word: Dreadnought + word: Drone + word: Druid + word: Egg + word: Elder + word: Flagbearer + word: Horror + word: Incarnation + word: + name: J-P + word: Juggernaut + word: Knight + word: Leviathan + word: Mercenary + word: Minion + word: Monger + word: Monk + word: Mutant + word: Mystic + word: Ninja + word: Noble + word: Nomad + word: Peasant + word: Pilot + word: Pirate + word: Processor + word: + name: R-S + word: Ranger + word: Rebel + word: Reflection + word: Rigger + word: Rogue + word: Samurai + word: Scion + word: Scout + word: Serf + word: Shaman + word: Skeleton + word: Soldier + word: Spawn + word: Spellshaper + word: Spirit + word: Survivor + word: + name: T-Z + word: Thopter + word: Vampire + word: Warlock + word: Warrior + word: Werewolf + word: Wizard + word: Zombie + +word list: + name: artifact + word: + script: all_sub_types(match: "Artifact") + line below: true + word: Contraption + word: Clue + word: Equipment + word: Food + word: Fortification + word: Gold + word: Treasure + word: Vehicle + +word list: + name: land + word: + script: all_sub_types(match: "Land") + line below: true + word: Plains + word: Island + word: Swamp + word: Mountain + word: Forest + word: Desert + word: Gate + word: Lair + word: Locus + word: Mine + word: Power-Plant + word: Tower + word: Urza's + +word list: + name: enchantment + word: + script: all_sub_types(match: "Enchantment") + line below: true + word: Aura + word: Curse + word: Shrine + word: Cartouche + word: Saga + +word list: + name: spell + word: + script: all_sub_types(match: "Instant") + "," + all_sub_types(match: "Sorcery") + line below: true + word: Arcane + word: Lesson + word: Trap + word: Adventure + +word list: + name: planeswalker + word: + script: all_sub_types(match: "Planeswalker") + line below: true + word: Ajani + word: Aminatou + word: Angrath + word: Arlinn + word: Ashiok + word: Bolas + word: Calix + word: Chandra + word: Dack + word: Dakkon + word: Daretti + word: Davriel + word: Dihada + word: Domri + word: Dovin + word: Ellywick + word: Elspeth + word: Estrid + word: Freyalise + word: Garruk + word: Gideon + word: Grist + word: Huatli + word: Jace + word: Jaya + word: Karn + word: Kasmina + word: Kaya + word: Kiora + word: Koth + word: Liliana + word: Lolth + word: Lukka + word: Mordenkainen + word: Nahiri + word: Narset + word: Niko + word: Nissa + word: Nixilis + word: Oko + word: Ral + word: Rowan + word: Saheeli + word: Samut + word: Sarkhan + word: Serra + word: Sorin + word: Tamiyo + word: Teferi + word: Teyo + word: Tezzeret + word: Tibalt + word: Tyvar + word: Ugin + word: Venser + word: Vivien + word: Vraska + word: Will + word: Windgrace + word: Wrenn + word: Xenagos + word: Yanggu + word: Yanling + word: Zariel + word: + name: Last Seen on Faerun + word: Ellywick + word: Lolth + word: Mordenkainen + word: Zariel + word: + name: Last Seen on Strixhaven + word: Kasmina + word: Liliana + word: Lukka + word: Rowan + word: Will + word: + name: Last Seen on Kaldheim + word: Kaya + word: Niko + word: Tibalt + word: Tyvar + word: + name: Last Seen on Zendikar + word: Jace + word: Kiora + word: Nahiri + word: Nissa + word: Nixilis + word: + name: Last Seen on Ikoria + word: Narset + word: Vivien + word: + name: Last Seen on Theros + word: Ashiok + word: Calix + word: Elspeth + word: Xenagos + word: + name: Last Seen on Eldraine + word: Garruk + word: Oko + word: + name: Last Seen on Ravnica + word: Bolas + word: Gideon + word: Davriel + word: Domri + word: Dovin + word: Ral + word: Teyo + word: Vraska + word: Yanggu + word: Yanling + word: + name: Last Seen on Dominaria + word: Chandra + word: Jaya + word: Karn + word: Teferi + word: + name: Last Seen on Ixalan + word: Angrath + word: Huatli + word: + name: Last Seen on Amonkhet + word: Liliana + word: Samut + word: + name: Last Seen on Kaladesh + word: Ajani + word: Saheeli + word: Tezzeret + word: + name: Last Seen on Fiore + name: Dack + name: Daretti + word: + name: Last Seen on Innistrad + word: Arlinn + word: Sorin + word: Tamiyo + word: + name: Last Seen on Tarkir + word: Sarkhan + word: Ugin + word: + name: Last Seen on New Phyrexia + word: Koth + word: Venser + word: + name: Last Seen on ??? + word: Aminatou + word: Estrid + word: Wrenn + word: Last Seen Pre-Mending + word: Freyalise + word: Serra + word: Windgrace + +word list: + name: plane + word: + script: all_sub_types(match: "Plane") + line below: true + word: Eldraine + word: Dominaria + word: Ixalan + word: Amonkhet + word: Kaladesh + word: + name: Post-Mending Planes + word: Alara + word: Amonkhet + word: Eldraine + word: Fiora + word: Innistrad + word: Ixalan + word: Kaladesh + word: Kylem + word: Lorwyn + word: New Phyrexia + word: Shadowmoor + word: Tarkir + word: Theros + word: Zendikar + word: + name: Pre-Mending Planes + word: Kamigawa + word: Mercadia + word: Mirrodin + word: Rath + word: Ravnica + word: Serra's Realm + word: + name: Old Planes + word: Aranzhur + word: Azoria + word: Bolas's Meditation Realm + word: Cabralin + word: Cridhe + word: Dominaria + word: Equilor + word: Ergamon + word: Gastal + word: Ilcae + word: Moag + word: Nether Void + word: Phyrexia + word: Pyrulea + word: Rabiah + word: Segovia + word: Shandalar + word: Ulgrotha + word: Vatraquaz + word: Wildfire + word: + name: Planechase Planes + word: Arkhos + word: Azgol + word: Belenon + word: Diraden + word: Fabacin + word: Iquatana + word: Ir + word: Kaldheim + word: Karsus + word: Kephalai + word: Kinshala + word: Kolbahan + word: Kyneth + word: Luvion + word: Mongseng + word: Muraganda + word: Regatha + word: Tavelia + word: Valla + word: Vryn + word: Xerex \ No newline at end of file diff --git a/data/magic.mse-game/word_lists_ru b/data/magic.mse-game/word_lists_ru new file mode 100644 index 00000000..43f1971f --- /dev/null +++ b/data/magic.mse-game/word_lists_ru @@ -0,0 +1,687 @@ + +############################################################## Magic word lists + +word list: + name: type + word: + name: Basic + is prefix: true + word: + name: Legendary + is prefix: true + word: + name: Snow + is prefix: true + word: + name: Token + is prefix: true + word: + name: Tribal + is prefix: true + word: + name: World + is prefix: true + line below: true + word: Conspiracy + word: Creature + word: Artifact + word: Artifact Creature + word: Enchantment + word: Enchantment Creature + word: Instant + word: Sorcery + word: Land + word: Planeswalker + word: Emblem + word: Phenomenon + word: Plane + +word list: + name: race + word: + script: all_races() + line below: true + word: Angel + word: Beast + word: Construct + word: Demon + word: Dragon + word: Elf + word: Faerie + word: Giant + word: Goblin + word: Golem + word: Human + word: Merfolk + word: Zombie + word: + name: All Races + word: + name: A + word: Aetherborn + word: Angel + word: Antelope + word: Ape + word: Archon + word: Assembly-Worker + word: Atog + word: Aurochs + word: Avatar + word: Azra + word: + name: B + word: Badger + word: Basilisk + word: Bat + word: Bear + word: Beast + word: Beeble + word: Bird + word: Blinkmoth + word: Boar + word: Bringer + word: Brushwagg + word: + name: C + word: Camarid + word: Camel + word: Caribou + word: Carrier + word: Cat + word: Centaur + word: Cephalid + word: Chimera + word: Cockatrice + word: Construct + word: Crab + word: Crocodile + word: Cyclops + word: + name: D + word: Dauthi + word: Demigod + word: Demon + word: Devil + word: Dinosaur + word: Djinn + word: Dragon + word: Drake + word: Dreadnought + word: Drone + word: Dryad + word: Dwarf + word: + name: E + word: Egg + word: Efreet + word: Eldrazi + word: Elemental + word: Elephant + word: Elf + word: Elk + word: Eye + word: + name: F + word: Faerie + word: Ferret + word: Fish + word: Fox + word: Frog + word: Fungus + word: + name: G + word: Gargoyle + word: Germ + word: Giant + word: Gnome + word: Goat + word: Goblin + word: God + word: Golem + word: Gorgon + word: Graveborn + word: Gremlin + word: Griffin + word: + name: H + word: Hag + word: Harpy + word: Hellion + word: Hippo + word: Hippogriff + word: Homarid + word: Homunculus + word: Horror + word: Horse + word: Hound + word: Human + word: Hydra + word: Hyena + word: + name: I + word: Illusion + word: Imp + word: Incarnation + word: Insect + word: + name: J + word: Jackal + word: Jellyfish + word: Juggernaut + word: + name: K + word: Kavu + word: Kirin + word: Kithkin + word: Kobold + word: Kor + word: Kraken + word: + name: L + word: Lamia + word: Lammasu + word: Leech + word: Leviathan + word: Lhurgoyf + word: Licid + word: Lizard + word: + name: M + word: Manticore + word: Masticore + word: Merfolk + word: Metathran + word: Minotaur + word: Mole + word: Mongoose + word: Monkey + word: Moonfolk + word: Mouse + word: Mutant + word: Myr + word: + name: N + word: Naga + word: Nautilus + word: Nephilim + word: Nightmare + word: Nightstalker + word: Noggle + word: Nymph + word: + name: O + word: Octopus + word: Ogre + word: Ooze + word: Orb + word: Orc + word: Orgg + word: Otter + word: Ouphe + word: Ox + word: Oyster + word: + name: P + word: Pangolin + word: Pegasus + word: Pentavite + word: Pest + word: Phelddagrif + word: Phoenix + word: Pincher + word: Plant + word: Praetor + word: Prism + word: + name: R + word: Rabbit + word: Rat + word: Reflection + word: Rhino + word: + name: S + word: + name: Sa-Sl + word: Sable + word: Salamander + word: Sand + word: Saproling + word: Satyr + word: Scarecrow + word: Scorpion + word: Sculpture + word: Serpent + word: Servo + word: Shade + word: Shapeshifter + word: Shark + word: Sheep + word: Siren + word: Skeleton + word: Slith + word: Sliver + word: Slug + word: + name: Sn-Sz + word: Snake + word: Soltari + word: Spawn + word: Specter + word: Sphinx + word: Spider + word: Spike + word: Spirit + word: Splinter + word: Sponge + word: Squid + word: Squirrel + word: Starfish + word: Surrakar + word: + name: T + word: Tentacle + word: Tetravite + word: Thalakos + word: Thopter + word: Thrull + word: Treefolk + word: Trilobite + word: Triskelavite + word: Troll + word: Turtle + word: + name: U + word: Unicorn + word: + name: V + word: Vampire + word: Vedalken + word: Viashino + word: Volver + word: + name: W + word: Wall + word: Weird + word: Werewolf + word: Whale + word: Wolf + word: Wolverine + word: Wombat + word: Worm + word: Wraith + word: Wurm + word: + name: Y + word: Yeti + word: + name: Z + word: Zombie + word: Zubera + +word list: + name: class + word: + script: all_classes() + line below: true + word: Beast + word: Cleric + word: Druid + word: Knight + word: Rogue + word: Shaman + word: Soldier + word: Warrior + word: Wizard + word: Zombie + word: + name: All Classes + word: + name: A-C + word: Advisor + word: Ally + word: Archer + word: Archon + word: Army + word: Artificer + word: Assassin + word: Barbarian + word: Beast + word: Berserker + word: Bringer + word: Carrier + word: Citizen + word: Cleric + word: Coward + word: + name: D-I + word: Deserter + word: Dreadnought + word: Drone + word: Druid + word: Egg + word: Elder + word: Flagbearer + word: Horror + word: Incarnation + word: + name: J-P + word: Juggernaut + word: Knight + word: Leviathan + word: Mercenary + word: Minion + word: Monger + word: Monk + word: Mutant + word: Mystic + word: Ninja + word: Noble + word: Nomad + word: Peasant + word: Pilot + word: Pirate + word: Processor + word: + name: R-S + word: Rebel + word: Reflection + word: Rigger + word: Rogue + word: Samurai + word: Scion + word: Scout + word: Serf + word: Shaman + word: Skeleton + word: Soldier + word: Spawn + word: Spellshaper + word: Spirit + word: Survivor + word: + name: T-Z + word: Thopter + word: Vampire + word: Warlock + word: Warrior + word: Werewolf + word: Wizard + word: Zombie + +word list: + name: artifact + word: + script: all_sub_types(match: "Artifact") + line below: true + word: Contraption + word: Clue + word: Equipment + word: Food + word: Fortification + word: Gold + word: Treasure + word: Vehicle + +word list: + name: land + word: + script: all_sub_types(match: "Land") + line below: true + word: Plains + word: Island + word: Swamp + word: Mountain + word: Forest + word: Desert + word: Gate + word: Lair + word: Locus + word: Mine + word: Power-Plant + word: Tower + word: Urza's + +word list: + name: enchantment + word: + script: all_sub_types(match: "Enchantment") + line below: true + word: Aura + word: Curse + word: Shrine + word: Cartouche + word: Saga + +word list: + name: spell + word: + script: all_sub_types(match: "Instant") + "," + all_sub_types(match: "Sorcery") + line below: true + word: Arcane + word: Trap + word: Adventure + +word list: + name: planeswalker + word: + script: all_sub_types(match: "Planeswalker") + line below: true + word: Ajani + word: Aminatou + word: Angrath + word: Arlinn + word: Ashiok + word: Bolas + word: Calix + word: Chandra + word: Dack + word: Daretti + word: Davriel + word: Domri + word: Dovin + word: Elspeth + word: Estrid + word: Freyalise + word: Garruk + word: Gideon + word: Huatli + word: Jace + word: Jaya + word: Karn + word: Kasmina + word: Kaya + word: Kiora + word: Koth + word: Liliana + word: Lukka + word: Nahiri + word: Narset + word: Nissa + word: Nixilis + word: Oko + word: Ral + word: Rowan + word: Saheeli + word: Samut + word: Sarkhan + word: Serra + word: Sorin + word: Tamiyo + word: Teferi + word: Teyo + word: Tezzeret + word: Tibalt + word: Ugin + word: Venser + word: Vivien + word: Vraska + word: Will + word: Windgrace + word: Wrenn + word: Xenagos + word: Yanggu + word: Yanling + word: + name: Last Seen on Ikoria + word: Lukka + word: Narset + word: Vivien + word: + name: Last Seen on Theros + word: Ashiok + word: Calix + word: Elspeth + word: Xenagos + word: + name: Last Seen on Eldraine + word: Garruk + word: Oko + word: Rowan + word: Will + word: + name: Last Seen on Ravnica + word: Bolas + word: Gideon + word: Davriel + word: Domri + word: Dovin + word: Kasmina + word: Kaya + word: Ral + word: Teyo + word: Vraska + word: Yanggu + word: Yanling + word: + name: Last Seen on Dominaria + word: Chandra + word: Jaya + word: Karn + word: Teferi + word: + name: Last Seen on Ixalan + word: Angrath + word: Huatli + word: Jace + word: + name: Last Seen on Amonkhet + word: Liliana + word: Nissa + word: Samut + word: + name: Last Seen on Kaladesh + word: Ajani + word: Saheeli + word: Tezzeret + word: + name: Last Seen on Fiore + name: Dack + name: Daretti + word: + name: Last Seen on Innistrad + word: Arlinn + word: Nahiri + word: Sorin + word: Tamiyo + word: Tibalt + word: + name: Last Seen on Zendikar + word: Kiora + word: Nixilis + word: + name: Last Seen on Tarkir + word: Sarkhan + word: Ugin + word: + name: Last Seen on New Phyrexia + word: Koth + word: Venser + word: + name: Last Seen on ??? + word: Aminatou + word: Estrid + word: Wrenn + word: Last Seen Pre-Mending + word: Freyalise + word: Serra + word: Windgrace + +word list: + name: plane + word: + script: all_sub_types(match: "Plane") + line below: true + word: Eldraine + word: Dominaria + word: Ixalan + word: Amonkhet + word: Kaladesh + word: + name: Post-Mending Planes + word: Alara + word: Amonkhet + word: Eldraine + word: Fiora + word: Innistrad + word: Ixalan + word: Kaladesh + word: Kylem + word: Lorwyn + word: New Phyrexia + word: Shadowmoor + word: Tarkir + word: Theros + word: Zendikar + word: + name: Pre-Mending Planes + word: Kamigawa + word: Mercadia + word: Mirrodin + word: Rath + word: Ravnica + word: Serra's Realm + word: + name: Old Planes + word: Aranzhur + word: Azoria + word: Bolas's Meditation Realm + word: Cabralin + word: Cridhe + word: Dominaria + word: Equilor + word: Ergamon + word: Gastal + word: Ilcae + word: Moag + word: Nether Void + word: Phyrexia + word: Pyrulea + word: Rabiah + word: Segovia + word: Shandalar + word: Ulgrotha + word: Vatraquaz + word: Wildfire + word: + name: Planechase Planes + word: Arkhos + word: Azgol + word: Belenon + word: Diraden + word: Fabacin + word: Iquatana + word: Ir + word: Kaldheim + word: Karsus + word: Kephalai + word: Kinshala + word: Kolbahan + word: Kyneth + word: Luvion + word: Mongseng + word: Muraganda + word: Regatha + word: Tavelia + word: Valla + word: Vryn + word: Xerex \ No newline at end of file