From eb98e027449a97eac9f489dbf01963ae447c0859 Mon Sep 17 00:00:00 2001
From: Aarkenell <143031422+Aarkenell@users.noreply.github.com>
Date: Thu, 31 Oct 2024 16:07:16 +0000
Subject: [PATCH 1/6] Add files via upload
---
.../Aarkenell's Custom Class Playoff.lua | 9506 +++++++++++++++++
Aarkenell/Custom Class Clash (lvl 12).lua | 8108 ++++++++++++++
Aarkenell/Dual class.lua | 3055 ++++++
Aarkenell/Mythical faction.lua | 229 +-
Aarkenell/Splintered Thandar.lua | 3829 +++++++
5 files changed, 24584 insertions(+), 143 deletions(-)
create mode 100644 Aarkenell/Aarkenell's Custom Class Playoff.lua
create mode 100644 Aarkenell/Custom Class Clash (lvl 12).lua
create mode 100644 Aarkenell/Dual class.lua
create mode 100644 Aarkenell/Splintered Thandar.lua
diff --git a/Aarkenell/Aarkenell's Custom Class Playoff.lua b/Aarkenell/Aarkenell's Custom Class Playoff.lua
new file mode 100644
index 0000000..6570f23
--- /dev/null
+++ b/Aarkenell/Aarkenell's Custom Class Playoff.lua
@@ -0,0 +1,9506 @@
+require "herorealms"
+require "decks"
+require "stdlib"
+require "stdcards"
+require "hardai"
+require "mediumai"
+require "easyai"
+
+--[[ Updated 30.10.2024 by Aarkenell
+Terramancer & Pyromancer now have unique cards generated for each player, for cards that have custom counters. This enables mirror matches with these classes.
+Dynamic text added to Pyro & Terra cards with counters.
+]]
+
+-- Game start --
+local function chooseStart()
+ return cardChoiceSelectorEffect({
+ id = "SoG_Choice",
+ name = "First choice",
+ trigger = startOfTurnTrigger,
+
+ upperTitle = "Welcome! How would you like to proceed?",
+ lowerTitle = "",
+-- 1.1 choose class
+ effectFirst = pushChoiceEffect(
+{
+choices = {
+-- Choice 1: Classes by Aarkenell
+ {
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+ .union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
+ .seq(gainCombatEffect(-1))
+ .seq(setPlayerNameEffect("Unknown", currentPid))
+ .seq(setPlayerAvatarEffect("assassin", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(50))
+ .seq(createCardEffect(choose_lich_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_brewmaster_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_thandarlorian_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_terramancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_cryomancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_apothecary_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_demonologist_carddef(), loc(currentPid, asidePloc)))
+
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", "")),
+
+ layout = createLayout({
+ name = "Classes by Aarkenell",
+ art = "art/epicart/the_people_s_champion",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+
+ tags = {}
+ },
+
+-- Choice 2: Class by other Designers
+{
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+ .union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
+ .seq(gainCombatEffect(-1))
+ .seq(setPlayerNameEffect("Unknown", currentPid))
+ .seq(setPlayerAvatarEffect("assassin", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(50))
+ .seq(createCardEffect(choose_S_and_R_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_paladin_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_witch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_shaman_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_king_midas_carddef(), loc(currentPid, asidePloc)))
+
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", "")),
+
+ layout = createLayout({
+ name = "Classes by Other Designers",
+ art = "art/epicart/insurgency",
+ xmlText=[[
+
+
+
+
+ ]]
+ }) ,
+
+ tags = {}
+ },
+
+-- Choice 3: Random
+{
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+ .union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc))))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(choose_demonologist_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_apothecary_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_cryomancer_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_pyromancer_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_terramancer_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_thandarlorian_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_brewmaster_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_paladin_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_shaman_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_king_midas_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_witch_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_S_and_R_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_lich_carddef(), currentHandLoc))
+ }))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(noUndoEffect()),
+
+ layout = createLayout({
+ name = "Random Class",
+ art = "art/T_Confused_Apparition",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ tags = {}
+ },
+
+-- Choice 4- choose standard
+ {
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use your standard Hero?",
+ lowerTitle = ""
+ }),
+ condition = getHeroLevel(currentPid).lte(4),
+ layout = createLayout({
+ name = "Selected class",
+ art = "art/T_Storm_Siregar",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ }
+}
+}
+),
+-- 1.2 choice - learn about the mod
+ effectSecond = pushChoiceEffectWithTitle(
+ {
+
+ choices = {
+ -- 1.2a choice - Updates to this mod
+ {
+ effect = nullEffect(),
+
+ layout = createLayout({
+ name = "Updates to this mod",
+ art = "art/T_fighter_sharpening_stone",
+ xmlText=[[
+
+
+
+
+
+ ]]
+
+ }),
+ tags = {}
+ },
+ -- 1.2b choice - Other mods to try
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Other mods to try",
+ art = "art/treasures/T_spyglass",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ },
+
+ -- 1.2c choice - Community news
+ {
+ effect = storyTellEffectWithPortrait("ogre_fighter_male_02", "Hi! I’m Rob d’Ogrety, CEO of ‘Why’s Wizard Games?’")
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "And I’m Dwarfin Kastle – creator of the award-winning deckbuilding game about growing trees in space – Star Elms."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "We just wanted to take a moment to say how much we love the community that has sprung up around Hero Realms…"))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "We love you!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", " …and how much we love the experiments and new ideas being offered through custom lua scripting."))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Yeah! We love lua!"))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Lua, Lua! Oh baby! We gotta code! Aye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", " Thanks DK."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Be sure to join the Realms Rising server on Discord to share your feedback on this mod and to discover new custom games to play."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_0", "And listen to the Sparks and Recreation podcast for information on Community events, meta-analysis, and everything Hero Realms."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Or jump over to RealmsRising.com for in-depth articles on strategy and gameplay."))
+ .seq(storyTellEffectWithPortrait("origins_flawless_track", "And if you have ideas for new custom classes or scenarios you’d like to see, drop me, Aarkenell, a message in the Realms Rising Discord."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Whether you join the Realms Rising community or not, we hope you keep enjoying the game and all the custom content from our great community."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Bye for now."))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Lua, Lua! Oh baby! We gotta go. Bye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("origins_flawless_track", "Please hit 'Undo' to return to the menu."))
+ ,
+ layout = createLayout({
+ name = "Community News",
+ art = "art/T_borg_ogre_mercenary",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ }
+
+ },
+
+ upperTitle = "What do you want to learn about?",
+ lowerTitle = "Be sure to hit 'Undo' after your selection, to return to the selection menu.",
+
+ }),
+
+-- 1.1 layout - choose class
+ layoutFirst = createLayout({
+ name = "To Battle!",
+ art = "art/T_Unify_Apsara",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+
+-- 1.2 layout - learn about the mod
+ layoutSecond = createLayout({
+ name = "Updates & Info",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ xmlText=[[
+
+
+
+
+
+ ]] }) ,
+
+ turn = 1
+ })
+end
+
+
+-- Custom Class Selection cards
+function choose_lich_carddef()
+
+ local ef_Corruption = createCardEffect(lich_corruption_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local corruption20buff = createGlobalBuff({
+ id="corruption20buff",
+ name = "Corruption",
+ abilities = {
+ createAbility({
+ id= "corruption20buff",
+ trigger = deckShuffledTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, inPlayPloc))).union(selectLoc(loc(currentPid, deckPloc))).where(isCardType(minionType).invert()).count().gte(20), ef_Corruption, nullEffect()),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Corruption",
+ art = "art/T_charing_guardian",
+ text = "When you shuffle your deck, if you have 20 or more cards in your deck, hand and in play (not including minions), gain the Corruption skill."
+ })
+ })
+
+
+ local Grimoirebuff = createGlobalBuff({
+ id="Grimoirebuff",
+ name = "Grimoire",
+ abilities = {
+ createAbility({
+ id= "Grimoirebuff",
+ trigger = startOfTurnTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Grimoire",
+ art = "art/T_rayla_endweaver",
+ text = "You start with 10 cards (8 unique minions) in your Grimoire. Whenever you perform a Summoning, randomly take one card from your Grimoire and put it into play. When a minion is stunned it returns to your Grimoire."
+ })
+ })
+
+ local souljarbuff = createGlobalBuff({
+ id="souljarbuff",
+ name = "Soul Jar",
+ abilities = {
+ createAbility({
+ id= "souljarbuff",
+ trigger = startOfTurnTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Soul Jar",
+ art = "art/treasures/t_wizard_elixir_blue",
+ text = "Each game 1 of 6 Soul Jars are randomly chosen to determine the Lich's Health and Skill."
+ })
+ })
+
+
+ --[[local ef_Control = transformTarget("control_skill").apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("corruption_skill")).take(1))
+ .seq(sacrificeSelf())
+
+ local control30buff = createGlobalBuff({
+ id="control30buff",
+ name = "Control",
+ abilities = {
+ createAbility({
+ id= "control30buff",
+ trigger = deckShuffledTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, inPlayPloc))).union(selectLoc(loc(currentPid, deckPloc))).where(isCardType(minionType).invert()).count().gte(30), ef_Control, nullEffect()),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Control",
+ art = "art/T_charing_guardian",
+ text = "When you shuffle your deck, if you have 30 or more cards in your deck, hand and in play (not including minions), replace Corruption skill with the Control skill."
+ })
+ })
+]]
+ return createDef({
+ id="choose_lich",
+ name="Choose the Lich",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_lich",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Lich", currentPid))
+ .seq(setPlayerAvatarEffect("WarInTheWild/krythos_master_vampire", currentPid))
+ --buffs
+ .seq(createCardEffect(corruption20buff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(Grimoirebuff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(souljarbuff, loc(currentPid, buffsPloc)))
+ --.seq(createCardEffect(control30buff, loc(currentPid, buffsPloc)))
+
+ --soul jar skill
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(35).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(30).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(55).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(45).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(40).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(40))),
+ }))
+
+ --deck
+ .seq(createCardEffect(lich_soul_diamond_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_soul_diamond_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_frozen_touch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_soul_crush_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_minor_summoning_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_major_summoning_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ --grimoire minions
+ .seq(createCardEffect(lich_abomination_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_banshee_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_ghoul_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_revenant_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_bones_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_fire_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_zombie_minion_carddef(), loc(nil, nullPloc)))
+ --setup
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the lich?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Lich",
+ art = "art/T_charing_guardian",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+end
+
+function choose_demonologist_carddef()
+ return createDef({
+ id="choose_demonologist",
+ name="Choose the Demonologist",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_demonologist",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))) --here--
+ .seq(setPlayerNameEffect("Demonologist", currentPid))
+ .seq(setPlayerAvatarEffect("ruinos_zealot", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(50))
+ .seq(createCardEffect(demonologist_summon_demon_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(demonologist_summon_demon_master_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_shadow_feeder_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_void_guard_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_lesser_devourer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_shadow_gem_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Demonologist?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Demonologist",
+ art = "art/epicart/dirge_of_scara",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_apothecary_carddef()
+ return createDef({
+ id="choose_apothecary",
+ name="Choose the Apothecary",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_apothecary",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Apothecary", currentPid))
+ .seq(setPlayerAvatarEffect("alchemist_01", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(52).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(52))
+ .seq(createCardEffect(apothecary_restorative_draught_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(apothecary_custom_brew_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(apothecary_mezzaluna_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(apothecary_apprentice_potion_maker_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(apothecary_yellow_potion_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(apothecary_red_potion_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(apothecary_green_potion_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Apothecary?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Apothecary",
+ art = "art/treasures/T_Green_Potions_Medium",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_cryomancer_carddef()
+ return createDef({
+ id="choose_cryomancer",
+ name="Choose the Cryomancer",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_cryomancer",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Cryomancer", currentPid))
+ .seq(setPlayerAvatarEffect("rayla__endweaver_flipped", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(52).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(52))
+ .seq(createCardEffect(cryomancer_frostbiteskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(cryomancer_freezing_fog_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_ice_burst_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_ice_shield_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_ice_gem_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_freeze_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Cryomancer?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Cryomancer",
+ art = "art/T_Heavy_Gust",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_pyromancer_carddef()
+ return createDef({
+ id="choose_pyromancer",
+ name="Choose the Pryomancer",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_pyromancer",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Pyromancer", currentPid))
+ .seq(setPlayerAvatarEffect("summoner", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(48).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(48))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_fuel_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_fuel_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_conflagration_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_conflagration_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 1), incrementCounterEffect("fuel_2p", 1)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 5), incrementCounterEffect("conflagration_2p", 5)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_sear_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_scorch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_fire_shard_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_combust_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Pyromancer?",
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Pyromancer",
+ art = "art/T_Blistering_Blaze",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_terramancer_carddef()
+ return createDef({
+ id="choose_terramancer",
+ name="Choose the Terramancer",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_terramancer",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Terramancer", currentPid))
+ .seq(setPlayerAvatarEffect("broelyn", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(53).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(53))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(terramancer_move_earth1_carddef(), currentSkillsLoc), createCardEffect(terramancer_move_earth2_carddef(), currentSkillsLoc)))
+ .seq(createCardEffect(terramancer_swallowed_by_the_earth_def(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(terramancer_earth_gem_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(terramancer_hurl_boulder_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(terramancer_tremor_carddef(), loc(currentPid, asidePloc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(terramancer_clay_golem1_carddef(), loc(currentPid, asidePloc)), createCardEffect(terramancer_clay_golem2_carddef(), loc(currentPid, asidePloc))))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Terramancer?",
+
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Terramancer",
+ art = "art/T_Broelyn_Loreweaver_Old",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_thandarlorian_carddef()
+ return createDef({
+ id="choose_thandarlorian",
+ name="Choose the Thandarlorian",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_thandarlorian",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Thandarlorian", currentPid))
+ .seq(setPlayerAvatarEffect("cristov__the_just", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(36).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(const(36).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(createCardEffect(thandarlorian_dragon_shard_armour_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(thandarlorian_bracer_blades_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(thandarlorian_whipcord_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(thandarlorian_coordinated_attack_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(thandarlorian_combat_shield_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(thandarlorian_hand_ballista_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(thandarlorian_bounty_hunters_stone_of_seeking_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(shortsword_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Thandarlorian?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "The Thandarlorian",
+ art = "art/T_Domination",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+ end
+
+function choose_paladin_carddef()
+ return createDef({
+ id="choose_paladin",
+ name="Choose the Paladin",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_paladin",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Paladin", currentPid))
+ .seq(setPlayerAvatarEffect("cristov__the_just", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(58).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(58))
+ .seq(createCardEffect(paladin_prayer_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(paladin_sacred_oath_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(),loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(paladin_warhammer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(paladin_crusader_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cleric_spiked_mace_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(fighter_longsword_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Paladin?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Paladin",
+ art = "art/T_Cristov_The_Just",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_witch_carddef()
+ return createDef({
+ id="choose_witch",
+ name="Choose the Witch",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_witch",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Witch", currentPid))
+ .seq(setPlayerAvatarEffect("chanting_cultist", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(51).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(51))
+ .seq(createCardEffect(siphon_life_def(), currentSkillsLoc))
+ .seq(createCardEffect(piercing_screech_def(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(witch_flash_freeze_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(witch_flash_freeze_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cleric_everburning_candle_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(witch_cauldron_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Witch?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Witch",
+ art = "avatars/chanting_cultist",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_shaman_carddef()
+ return createDef({
+ id="choose_shaman",
+ name="Choose the Shaman",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_shaman",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Shaman", currentPid))
+ .seq(setPlayerAvatarEffect("wolf_shaman", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(createCardEffect(gift_of_the_elements_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(elemental_surge_def(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(natures_blessing_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(flame_burst_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(flame_burst_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(call_lightning_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Shaman?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Shaman",
+ art = "avatars/wolf_shaman",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_king_midas_carddef()
+ return createDef({
+ id="choose_king_midas",
+ name="Choose King Midas",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_king_midas",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("King Midas", currentPid))
+ .seq(setPlayerAvatarEffect("profit", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(42).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(42))
+ .seq(createCardEffect(greed_is_good_skilldef(), currentSkillsLoc))
+ .seq(createCardEffect(golden_touch_abilitydef(), currentSkillsLoc))
+ .seq(createCardEffect(midas_kings_adviser_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_kings_adviser_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_kings_adviser_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_kings_adviser_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_liquid_gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(midas_liquid_gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use King Midas?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "King Midas",
+ art = "art/T_Bribe",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_brewmaster_carddef()
+ return createDef({
+ id="choose_brewmaster",
+ name="Choose the Brewmaster",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_brewmaster",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Brewmaster", currentPid))
+ .seq(setPlayerAvatarEffect("lord_callum", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(55).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(55))
+ .seq(createCardEffect(brewmaster_a_round_on_the_house_def(), currentSkillsLoc))
+ .seq(createCardEffect(brewmaster_get_out_of_my_bar_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(brewmaster_mead_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_mead_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_mead_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_mead_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_spilled_drink_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_tap_a_keg_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_serve_the_strong_stuff_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_regular_regulars_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_irregular_regulars_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(brewmaster_zaboozer_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Brewmaster?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Brewmaster",
+ art = "art/treasures/T_Fighter_Elixir_Red",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_S_and_R_carddef()
+ return createDef({
+ id="choose_S&R",
+ name="Choose Sparks & Rec Enjoyer",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_S&R",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Sparks & Rec Enjoyer", currentPid))
+ .seq(setPlayerAvatarEffect("ambushers", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(54).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(54))
+ .seq(createCardEffect(bird_dog_def(), currentSkillsLoc))
+ .seq(createCardEffect(patron_shoutout_def(), currentSkillsLoc))
+ .seq(createCardEffect(situational_card_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(situational_card_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(situational_card_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(situational_card_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(situational_card_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(hero_dash_helper_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(wwyd_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(nostra_dbl_damus_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(blank_to_my_blank_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(congrats_youre_a_nerd_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Sparks & Recreations Enjoyer?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "S&R Enjoyer",
+ art = "avatars/ambushers",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+--Lich cards
+function lich_corruption_carddef()
+ local cardLayout = createLayout({
+ name = "Corruption",
+ art = "art/epicart/necromancer_apprentice",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "corruption_skill",
+ name = "Corruption",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/necromancer_apprentice",
+ abilities = {
+ createAbility({
+ id="corruption20buff_combat",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(1)
+ .seq(randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ .seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_control_carddef()
+ local cardLayout = createLayout({
+ name = "Control",
+ art = "art/epicart/necromancer_lord",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "control_skill",
+ name = "Coontrol",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/necromancer_lord",
+ abilities = {
+ createAbility({
+ id="control30buff_combat",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(2)
+ .seq(randomTarget(const(2), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ .seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(2),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+
+function lich_soul_diamond_carddef()
+ return createItemDef({
+ id = "lich_soul_diamond",
+ name = "Lich Soul Diamond",
+ playLocation = castPloc,
+ acquireCost = 0,
+ isGuard = false,
+ types = { itemType, currencyType, gemType, nostealType },
+ layout = createLayout({
+ name = "Soul Diamond",
+ art = "art/classes/necromancer/soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_soul_diamond_item_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = ifElseEffect(isPlayerAi(oppPid),gainGoldEffect(3),gainGoldEffect(1)),
+ }),
+
+ createAbility({
+ id = "lich_soul_diamond_item_stun",
+ trigger = uiTrigger,
+
+ activations = singleActivation,
+ effect = pushChoiceEffectWithTitle(
+ {
+
+ choices =
+ {
+ {
+ effect = stunTarget().apply(selectLoc(loc(oppPid, inPlayPloc))),
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardStunnable()),
+ layout = createLayout({
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer/Soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ },
+
+ },
+
+ }
+ ),
+ cost = sacrificeSelfCost,
+
+ }),
+ },
+
+ layout = createLayout(
+ {
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer/Soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ layoutPath = "art/T_Gold",
+ })
+end
+
+function lich_frozen_touch_carddef()
+ return createActionDef({
+ id = "lich_frozen_touch",
+ name = "Frozen Touch",
+ types = {actionType, nostealType},
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "frozen_touch_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(1),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Frozen Touch",
+ art = "art/epicart/zannos__corpse_lord",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+
+function lich_soul_crush_carddef()
+ return createActionDef({
+ id = "lich_soul_crush_curse",
+ name = "Lich Soul Crush Curse",
+ acquireCost = 0,
+
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Soul Crush",
+ art = "art/epicart/consume",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_soul_crush_curse_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 3 combat
+ {
+ effect = gainCombatEffect(3),
+ layout = layoutCard(
+ {
+ title = "Soul Crush",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Soul Crush",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ })
+
+ },
+ })
+end
+
+function lich_minor_summoning_carddef()
+ return createActionDef({
+ id = "lich_minor_summoning_curse",
+ name = "Minor Summoning",
+ playLocation = castPloc,
+ acquireCost = 0,
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Minor Summoning",
+ art = "art/epicart_necrovirus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_minor_summoning",
+ trigger = autoTrigger,
+ cost = expendCost,
+ effect = createCardEffect(necromancer_skeleton_warrior_carddef(), currentInPlayLoc),
+ }),
+ },
+ })
+end
+
+function lich_major_summoning_carddef()
+ return createActionDef({
+ id = "lich_major_summoning",
+ name = "Major Summoning",
+ playLocation = castPloc,
+ acquireCost = 0,
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Major Summoning",
+ art = "art/epicart_abyss_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_major_summoning",
+ trigger = autoTrigger,
+ cost = expendCost,
+ effect = randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ }),
+ },
+ })
+end
+
+--Lich minions
+function lich_abomination_minion_carddef()
+ return createChampionDef({
+ id = "lich_abomination_minion",
+ name = "Lich Abomination Minion",
+ acquireCost = 0,
+ health = 6,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Abomination",
+ art = "art/epicart/scrap_golem_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 6,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_abomination_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4),
+ }),
+
+ createAbility({
+ id = "lich_abomination_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_banshee_minion_carddef()
+ return createChampionDef({
+ id = "lich_banshee_minion",
+ name = "Lich Banshee Minion",
+ acquireCost = 0,
+ health = 3,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Banshee",
+ art = "art/T_Banshee",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 3,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_banshee_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(6).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc))))
+ }),
+
+ createAbility({
+ id = "lich_banshee_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_ghoul_minion_carddef()
+ return createChampionDef({
+ id = "lich_ghoul_minion",
+ name = "Lich Ghoul Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_ghoul_minion_main",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3).seq(gainCombatEffect(selectLoc(currentDiscardLoc).where(isCardChampion()).count())),
+ --ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(1),gainCombatEffect(3),gainCombatEffect(1))
+ }),
+
+ createAbility({
+ id = "lich_ghoul_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_revenant_minion_carddef()
+ return createChampionDef({
+ id = "lich_revenant_minion",
+ name = "Lich Revenant Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_revenant_minion_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 5 health
+ {
+ effect = gainHealthEffect(5),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun an opposing champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ }),
+
+ createAbility({
+ id = "lich_revenant_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_skeleton_horde_minion_carddef()
+ return createChampionDef({
+ id = "lich_skeleton_horde_minion",
+ name = "Lich Skeleton Horde Minion",
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Skeleton Horde",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 4,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_skeleton_horde_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3),
+ }),
+
+ createAbility({
+ id = "lich_skeleton_horde_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_bones_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_bones_minion",
+ name = "Lich Wall of Bones Minion",
+ acquireCost = 0,
+ health = 8,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Wall of Bones",
+ art = "art/T_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 8,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_bones_minion_main",
+ trigger = autoTrigger,
+ --cost = expendCost,
+ effect = nullEffect()
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_fire_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_fire_minion",
+ name = "Lich Wall of Fire Minion",
+ acquireCost = 0,
+ health = 7,
+ isGuard = false,
+ types = { minionType, magicType, constructType },
+ layout = createLayout({
+ name = "Wall of Fire",
+ art = "art/T_charing_guardian",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 7,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_fire_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(6),
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_zombie_minion_carddef()
+ return createChampionDef({
+ id = "lich_zombie_minion",
+ name = "Lich Zombie Minion",
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ cardTypeLabel = "undeadType",
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Zombie",
+ art = "art/sets/promos1art/zombie",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 1,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_zombie_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+ }),
+
+ createAbility({
+ id = "lich_zombie_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+
+ },
+ })
+end
+
+--Lich Soul jars (Skills)
+
+function lich_SJ_HoE_carddef()
+ local cardLayout = createLayout({
+ name = "Heart of Evil",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+ >
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Heart of Evil",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_concentration",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_HoE_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_DI_carddef()
+ local cardLayout = createLayout({
+ name = "Deep Insight",
+ art = "art/t_elixir_of_wisdom",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Deep Insight",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_wisdom",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_DI_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = drawCardsEffect(1).seq(forceDiscard(1)),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_IW_carddef()
+ local cardLayout = createLayout({
+ name = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Infernal Wealth",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_endurance",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_IW_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ ),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_UR_carddef()
+ local cardLayout = createLayout({
+ name = "Unending Rage",
+ art = "art/treasures/t_wizard_elixir_orange",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Unending Rage",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_orange",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_UR_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(7),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_V_carddef()
+ local cardLayout = createLayout({
+ name = "Void",
+ art = "art/treasures/t_wizard_elixir_silver",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Void",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_silver",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_V_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = hitOpponentEffect(3),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_M_carddef()
+ local cardLayout = createLayout({
+ name = "Manipulation",
+ art = "art/treasures/t_wizard_elixir_orange",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Manipulation",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_orange",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_M_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost four or less for free.",
+ validTargets = selectLoc(centerRowLoc).union(selectLoc(fireGemsLoc)).where(isCardAcquirable().And(getCardCost().lte(4))),
+ min = 0,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+
+
+-- Demonologist cards
+function demonologist_shadow_gem_carddef()
+ return createDef(
+ {
+ id = "demonologist_shadow_gem",
+ name = "Shadow Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_shadow_gem_sac",
+ PlayAllType = noPlayPlayType,
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Lose to give one minion +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 0,
+ max = 1,
+ check = minHealthCurrent(2),
+ targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow").seq(hitSelfEffect(1)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function demonologist_shadow_feeder_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_shadow_feeder",
+ name = "Shadow Feeder",
+ types = {minionType, demonType, championType, nosteaalType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "Shadow_feeder_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(2),gainCombatEffect(3),gainCombatEffect(1))
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Shadow Feeder",
+ art = "art/epicart/deathbringer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_void_guard_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_void_guard",
+ name = "Void guard",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "void_guard_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Void guard",
+ art = "art/T_Midnight_Knight",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function demonologist_lesser_devourer_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_lesser_devourer",
+ name = "Lesser Devourer",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "lesser_devourer_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource())),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Lesser Devourer",
+ art = "art/T_Demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function demonologist_summon_demon_carddef()
+ local cardLayout = createLayout({
+ name = "Summon",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_demon_skill",
+ name = "Summon Demon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/The_Summoning",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_demon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_demonic_leech_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_demonic_leech",
+ name = "Demonic leech",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonic_leech_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(1)
+ .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
+ }
+ ),
+ createAbility(
+ {
+ id = "demonic_leech_explode",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(5))).count().gte(1),
+ hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
+ nullEffect()),
+ }),
+
+ createAbility(
+ {
+ id = "demonic_leech_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_fel_hound_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "demonologist_fel_hound",
+ name = "Fel hound",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "fel_hound_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_succubus_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_succubus",
+ name = "Succubus",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "succubus_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushTargetedEffect({
+ desc = "Give target champion -1 permanently.",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
+ min = 0,
+ max = 1,
+ targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
+ }),
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_summon_demon_master_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Demon Master",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_demon_master_ability",
+ name = "Summon Demon Master",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_Angry_Skeleton",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_demon_master_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_demon_master_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon Master",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_incubus_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_incubus",
+ name = "Incubus",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_incubus_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3).seq(gainCombatEffect(getCounter("incubus")))
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_incubus_main",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = multipleActivations,
+ effect = incrementCounterEffect("incubus", 1)
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_incubus_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_keeper_of_the_void_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_keeper_of_the_void",
+ name = "Keeper of the Void",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_keeper_of_the_void_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+ .seq(grantHealthTarget(divide(getCounter(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion").And(isCardName("demonologist_keeper_of_the_void").invert())).count()), 2), { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Void Keeper").apply(selectSource())),
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_keeper_of_the_void_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = true
+ })
+ }
+ )
+end
+
+function demonologist_demon_master_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_demon_master",
+ name = "Demon Master",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_demon_master_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ desc = "Prepare up to 2 other demon minions in play.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType).And(isCardName("demonologist_demon_master").invert())),
+ min = 0,
+ max = 2,
+ targetEffect = prepareTarget()
+
+ }))
+ }
+ ),
+ createAbility(
+ {
+ id = "demonologist_demon_master_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Demon Master",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = false
+ })
+ }
+ )
+end
+
+-- Apothecary cards
+function apothecary_mezzaluna_carddef()
+ return createDef(
+ {
+ id = "apothecary_mezzaluna",
+ name = "Mezzaluna",
+ types = {noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "apothecary_mezzaluna",
+ layout = cardLayout,
+ effect = gainCombatEffect(2),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Mezzaluna",
+ art = "art/T_Spell_Components",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function apothecary_apprentice_potion_maker_carddef()
+ return createChampionDef(
+ {
+ id = "apothecary_apprentice_potion_maker",
+ name = "Apprentice Potion Maker",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "apprentice_potion_maker_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(1),
+ layout = layoutCard(
+ {
+ title = "Apprentice Potion Maker",
+ art = "art/T_Thief_Shadow_Mask",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainGold1Tag}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc="Move a potion from your discard to the top of your deck.",
+ min=0,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, discardPloc)).where(isCardType("Elixir")),
+ targetEffect= moveTarget(currentDeckLoc),
+ tags = {}
+}),
+
+ layout = layoutCard(
+ {
+ title = "Apprentice Potion Maker",
+ art = "art/T_Thief_Shadow_Mask",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Apprentice Potion Maker",
+ art = "art/T_Thief_Shadow_Mask",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function apothecary_red_potion_carddef()
+ return createDef({
+ id="apothecary_red_potion",
+ name="Red Potion",
+ types={noStealType, itemType, elixirType},
+ acquireCost=0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="apothecary_red_potion",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(2)
+ }),
+ createAbility({
+ id="apothecary_red_potion_combo",
+ trigger= autoTrigger,
+ prompt = showPrompt,
+ cost = noCost,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).where(isCardName("apothecary_yellow_potion")).count().gte(1),
+ effect = oppDiscardEffect(1),
+ })
+ },
+ layout = createLayout({
+ name = "Red potion",
+ art = "art/T_Elixir_of_strength",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+ end
+
+function apothecary_green_potion_carddef()
+ return createDef({
+ id="apothecary_green_potion",
+ name="Green Potion",
+ types={noStealType, itemType, elixirType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="apothecary_green_potion",
+ trigger= autoTrigger,
+ effect = gainHealthEffect(2)
+ }),
+ createAbility({
+ id="apothecary_green_potion_combo",
+ cost = noCost,
+ trigger= uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Green Potion",
+ art = "art/treasures/T_Green_Potions_Medium",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+]]
+ }),
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).where(isCardName("apothecary_red_potion")).count().gte(1),
+ effect = drawCardsEffect(1),
+ })
+ },
+ layout = createLayout({
+ name = "Green Potion",
+ art = "art/treasures/T_Green_Potions_Medium",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+ end
+
+function apothecary_yellow_potion_carddef()
+ return createDef({
+ id="apothecary_yellow_potion",
+ name="Yellow Potion",
+ types={noStealType, itemType, elixirType},
+ acquireCost=0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="apothecary_yellow_potion",
+ trigger= autoTrigger,
+ effect = gainGoldEffect(2)
+ }),
+ createAbility({
+ id="apothecary_yellow_potion_combo",
+ trigger= autoTrigger,
+ prompt = showPrompt,
+ layout = layoutCard({
+ name = "yellow Potion",
+ art = "art/T_Elixir_of_fortune",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+]]
+ }),
+ cost = noCost,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).where(isCardName("apothecary_green_potion")).count().gte(1),
+ effect = gainToughnessEffect(2),
+
+ })
+ },
+ layout = createLayout({
+ name = "yellow Potion",
+ art = "art/T_Elixir_of_fortune",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+]]
+ })
+ })
+ end
+
+function apothecary_custom_brew_carddef()
+ return createHeroAbilityDef({
+ id = "custom_brew",
+ name = "Custom Brew",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "custom_brewActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Custom Brew",
+ art = "art/T_Elixir_of_concentration",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainCombatEffect(5),
+ layout = layoutCard(
+ {
+ title = "Custom Brew",
+ art = "art/T_Elixir_of_concentration",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+]]
+ }
+ ),
+ tags = {gainCombat6Tag}
+ },
+ {
+ effect = gainHealthEffect(6),
+ layout = layoutCard(
+ {
+ title = "Custom Brew",
+ art = "art/T_Elixir_of_concentration",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+]]
+ }
+ ),
+ tags = {gainHealthTag}
+ },
+ {
+ effect = drawCardsEffect(1).seq(oppDiscardEffect(1)),
+ layout = layoutCard(
+ {
+ title = "Custom Brew",
+ art = "art/T_Elixir_of_concentration",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Custom Brew",
+ art = "art/T_Elixir_of_concentration",
+ frame = "frames/Wizard_CardFrame",
+ text = " or or Draw 1 and opponent discards 1."
+ }),
+ layoutPath = "art/T_Elixir_of_concentration",
+ })
+end
+
+function apothecary_restorative_draught_carddef()
+ local cardLayout = createLayout({
+ name = "Restorative Draught",
+ art = "art/treasures/T_ranger_elixir_yellow",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "apothecary_restorative_draught_skill",
+ name = "Restorative Draught",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/T_ranger_elixir_yellow",
+ abilities = {
+ createAbility({
+ id = "apothecary_restorative_draught_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc="Put a champion or action of cost 3g or less from your discard on top of your deck.",
+ min=0,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, discardPloc)).where((isCardAction().Or(isCardChampion())).And(getCardCost().lte(3))),
+ targetEffect= moveTarget(currentDeckLoc),
+ tags = {}
+ }),
+ cost = goldCost(2),
+ }),
+ }
+
+ })
+end
+
+
+-- Cryomancer cards
+function cryomancer_ice_burst_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_burst",
+ name = "Ice Burst",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_ice_burst",
+ layout = cardLayout,
+ effect = gainCombatEffect(2),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Ice Burst",
+ art = "art/epicart/force_lance",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_ice_shield_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_shield",
+ name = "Ice Shield",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_ice_shield",
+ layout = cardLayout,
+ effect = ifElseEffect(selectLoc(loc(currentPid, castPloc)).where(isCardAction()).count().gte(3), gainToughnessEffect(2).seq(gainCombatEffect(2)), gainToughnessEffect(2)),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ ),
+
+ },
+ layout = createLayout(
+ {
+ name = "Ice Shield",
+ art = "art/epicart/force_field",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+]],
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_ice_gem_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_gem",
+ name = "Ice Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "cryomancer_ice_gem",
+ layout = cardLayout,
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Ice Gem",
+ art = "art/T_Wizard_Alchemist_S_Stone",
+ xmlText=[[
+
+
+
+
+
+
+
+]]
+ }
+ ),
+ tags = {gainGold2Tag}
+ },
+ {
+ effect = oppDiscardEffect(1),
+ layout = layoutCard(
+ {
+ title = "Ice Gem",
+ art = "art/T_Wizard_Alchemist_S_Stone",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Ice Gem",
+ art = "art/T_Wizard_Alchemist_S_Stone",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_freeze_carddef()
+ return createDef(
+ {
+ id = "cryomancer_freeze",
+ name = "Freeze",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_freeze",
+ layout = cardLayout,
+ effect = pushTargetedEffect({
+ desc = "Brrr. It's cold in here. (Expend a champion.)",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = expendTarget().seq(gainCombatEffect(1)),
+ }),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Freeze",
+ art = "art/epicart/polar_shock",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_frostbiteskill_carddef()
+ local cardLayout = createLayout({
+ name = "Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/Wizard_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryomancer_frostbiteskill_skill",
+ name = "Frostbite",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/frost_giant",
+ abilities = {
+ createAbility({
+ id = "cryomancer_frostbiteskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc)),
+ cost = goldCost(2),
+ }),
+ }
+
+ })
+end
+
+function cryomancer_frostbite_carddef()
+-- Frostbite CARD v1.03
+ return createDef(
+ {
+ id = "cryomancer_frostbite",
+ name = "Frostbite",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_frostbite",
+ layout = cardLayout,
+ effect = hitSelfEffect(1),
+ cost = sacrificeSelfCost,
+ trigger = autoTrigger,
+ playAllType = noPlayPlayType,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+]],
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_blizzard_carddef()
+ return createHeroAbilityDef({
+ id = "blizzard",
+ name = "Blizzard",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "blizzardActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Blizzard",
+ art = "art/T_heavy_gust",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]]
+ }),
+ effect = drawCardsEffect(2).seq(damageTarget(3).apply(selectLoc(loc(currentPid, inPlayPloc)).union(selectLoc(loc(oppPid, inPlayPloc))).where(isCardType(tokenType).And(isCardType(demonType))))),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Blizzard",
+ art = "art/T_heavy_gust",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "icons/wizard_serene_channel",
+ })
+end
+
+function cryomancer_permafrost_carddef()
+ return createDef(
+ {
+ id = "permafrost",
+ name = "Permafrost",
+ types = {itemType},
+ cardTypeLabel = "item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "permafrost_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Permafrost",
+ art = "art/T_Heavy_Gust",
+ frame = "frames/Wizard_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+ local CryoFrFogBuff = createGlobalBuff({
+ id="cryomancer_freezing_fog_ability",
+ name = "Freezing Fog",
+ abilities = {
+ createAbility({
+ id="cryomancer_freezing_fog_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Freezing Fog")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Freezing Fog",
+ art = "art/T_Chaotic_Gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+function cryomancer_freezing_fog_carddef()
+ return createHeroAbilityDef({
+ id = "Freezing_fog_buff",
+ name = "Freezing Fog",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "Freezing_fog_Activate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Freezing Fog",
+ art = "art/T_Chaotic_Gust",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a champion of cost 5 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(5)),
+ targetEffect = saveTarget("Freezing Fog").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoFrFogBuff, loc(oppPid, buffsPloc)))
+ }),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Freezing Fog",
+ art = "art/T_Chaotic_Gust",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/T_Chaotic_Gust",
+ })
+end
+
+
+function Cryomancer_Permafrost_Ab_carddef()
+local cardLayout = createLayout({
+ name = "Permafrost",
+ art = "art/T_Heavy_Gust",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+ ]]
+--Add later: That opponent reveals their hand and discards all champions and actions of cost 2{gold} or less.
+ })
+
+local permafrostBuff = createGlobalBuff({
+ id="permafrost_buff",
+ name = "Permafrost",
+ abilities = {
+ createAbility({
+ id="permafrost_effect",
+ trigger = startOfTurnTrigger,
+ effect = moveToTopDeckTarget(true).apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("permafrost"))).seq(sacrificeSelf())
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Permafrost",
+ art = "art/T_Heavy_Gust",
+ text = "Winter is... here. (Puts Permafrost on top of your deck.)"
+ })
+ })
+
+ return createHeroAbilityDef({
+
+ id = "Permafrost_Ab",
+ name = "Permafrost",
+ types = {skillType},
+ layout = cardLayout,
+ layoutPath = "art/T_Heavy_Gust",
+ abilities = {
+ createAbility(
+ {
+ id = "Permafrost_Ab_main",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ effect = createCardEffect(cryomancer_permafrost_carddef(), loc(oppPid, deckPloc)).seq(createCardEffect(permafrostBuff, loc(oppPid, buffsPloc)))
+ --[[.seq(moveTarget(loc(oppPid, discardPloc)).apply(selectLoc(loc(oppPid, handPloc)).where(isCardChampion().And(getCardCost().lte(2)))))]],
+ cost = sacrificeSelfCost
+ }
+ )
+ },
+
+ }
+ )
+end
+
+-- Pyromancer cards
+function pyromancer_combust_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Combust",
+ name = "combust",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="Pyromancer_Combust_combat",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(1)
+ }),
+ createAbility({
+ id="Pyromancer_Combust_FGsac",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
+ effect = gainCombatEffect(2)
+
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Combust",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_sear_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Sear",
+ name = "sear",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Sear",
+ layout = cardLayout,
+ effect = gainCombatEffect(2),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Sear",
+ art = "art/epicart/flame_spike",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_scorch_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Scorch",
+ name = "Scorch",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Scorch",
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(damageTarget(1).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Scorch",
+ art = "art/epicart/flame_strike",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_shard_carddef()
+ return createDef(
+ {
+ id = "pyromancer_fire_shard",
+ name = "Fire Shard",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_fire_shard",
+ layout = cardLayout,
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(1),
+ layout = layoutCard(
+ {
+ title = "Fire Shard",
+ art = "art/treasures/Thief_Sharpened_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainGold1Tag}
+ },
+ {
+ effect = createCardEffect(fire_gem_carddef(), currentDiscardLoc),
+ layout = layoutCard(
+ {
+ title = "Fire Shard",
+ art = "art/treasures/Thief_Sharpened_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Fire Shard",
+ art = "art/treasures/Thief_Sharpened_ruby",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_conflagration_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
+
+function pyromancer_conflagration_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
+
+function pyromancer_1p_fuel_1carddef()
+ local cardLayout = createLayout({
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_fuel_1_skill",
+ name = "Research Phoenix Fire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/arcane_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_fuel_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_fuel_1carddef()
+ local cardLayout = createLayout({
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_fuel_1_skill",
+ name = "Research Phoenix Fire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/arcane_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_fuel_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(gainHealthEffect(1)),
+ cost = goldCost(2)
+ }),
+ }
+
+ })
+end
+
+
+-- Terramancer cards
+
+function terramancer_earth_gem_carddef()
+
+ return createDef(
+ {
+ id = "terramancer_earth_gem",
+ name = "Earth Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "terramancer_earth_gem_sac",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(1),
+ layout = layoutCard(
+ {
+ title = "Earth Gem",
+ art = "art/ancestry/shiny_rock",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = addSlotToPlayerEffect(controllerPid, createPlayerIntExpressionSlot(skillCostModKey, toIntExpression(-2), { endOfTurnExpiry })),
+ layout = layoutCard(
+ {
+ title = "Earth Gem",
+ art = "art/ancestry/shiny_rock",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Earth Gem",
+ art = "art/ancestry/shiny_rock",
+ frame = "frames/druid_frames/druid_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function terramancer_hurl_boulder_carddef()
+ return createDef(
+ {
+ id = "terramancer_hurl_boulder",
+ name = "Hurl Boulder",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "terramancer_hurl_boulder",
+ layout = cardLayout,
+ effect = ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("terramancer_move_earth1_skill").Or(isCardName("terramancer_move_earth2_skill")).And(isCardExpended())).count().gte(1),gainCombatEffect(4),gainCombatEffect(2)),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Hurl Boulder",
+ art = "art/epicart/apocalypse",
+ frame = "frames/druid_frames/druid_action_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function terramancer_tremor_carddef()
+
+ local tremorBuff = createGlobalBuff({
+ id="tremor_buff",
+ name = "Tremor",
+ abilities = {
+ createAbility({
+ id="tremor_effect",
+ trigger = startOfTurnTrigger,
+ effect = pushTargetedEffect({
+ desc = "Put a card back in your deck, then shuffle your deck.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(currentPid, handPloc)),
+ targetEffect = moveTarget(loc(currentPid, deckPloc)).seq(shuffleEffect(loc(currentPid, deckPloc))).seq(sacrificeSelf())
+ })
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Tremor",
+ art = "icons/wizard_channel",
+ text = "Return a card to deck and shuffle."
+ })
+ })
+
+ return createDef(
+ {
+ id = "terramancer_tremor",
+ name = "Tremor",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "terramancer_tremor",
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(createCardEffect(tremorBuff, loc(oppPid, buffsPloc))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Tremor",
+ art = "icons/wizard_channel",
+ frame = "frames/druid_frames/druid_action_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function terramancer_clay_golem1_carddef()
+ return createChampionDef(
+ {
+ id = "terramancer_clay_golem1",
+ name = "Clay Golem",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "clay_golem1_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+
+ ),
+ createAbility(
+ {
+ id = "clay_golem1_healthbuff",
+ trigger = onPlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = layoutCard(
+ {
+ title = "Clay Golem",
+ art = "art/T_stone_golem",
+ xmlText=[[
+
+
+
+
+
+
+]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = grantHealthTarget(2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Golem. Golem.").apply(selectSource())
+ .seq(incrementCounterEffect("wallofEarth1Counter", -2)),
+ condition = getCounter("wallofEarth1Counter").gte(2),
+ layout = layoutCard(
+ {
+ title = "Clay Golem",
+ art = "art/T_stone_golem",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = false
+ }
+ ),
+ }
+ }
+ }
+ )
+
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Clay Golem",
+ art = "art/T_stone_golem",
+ frame = "frames/druid_frames/druid_action_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function terramancer_clay_golem2_carddef()
+ return createChampionDef(
+ {
+ id = "terramancer_clay_golem2",
+ name = "Clay Golem",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "clay_golem2_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+
+ ),
+ createAbility(
+ {
+ id = "clay_golem2_healthbuff",
+ trigger = onPlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = layoutCard(
+ {
+ title = "Clay Golem",
+ art = "art/T_stone_golem",
+ xmlText=[[
+
+
+
+
+
+
+]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = grantHealthTarget(2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Golem. Golem.").apply(selectSource())
+ .seq(incrementCounterEffect("wallofEarth2Counter", -2)),
+ condition = getCounter("wallofEarth2Counter").gte(2),
+ layout = layoutCard(
+ {
+ title = "Clay Golem",
+ art = "art/T_stone_golem",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = false
+ }
+ ),
+ }
+ }
+ }
+ )
+
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Clay Golem",
+ art = "art/T_stone_golem",
+ frame = "frames/druid_frames/druid_action_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function terramancer_move_earth1_carddef()
+ local cardLayout = createLayout({
+ name = "Move Earth",
+ art = "art/T_Fissure",
+ frame = "frames/druid_frames/druid_item_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("wallofEarth1Counter"), getCounter("wallofEarth1Counter"), divide(getCounter("wallofEarth1Counter"), 2) }
+ )
+ })
+
+ return createSkillDef({
+ id = "terramancer_move_earth1_skill",
+ name = "move_earth",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/wizard_serene_channel",
+ abilities = {
+ createAbility({
+ id = "move_earth1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = incrementCounterEffect("wallofEarth1Counter", 2),
+ layout = layoutCard(
+ {
+ title = "Wall of Earth",
+ art = "art/T_Fissure",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+ {
+ --here --
+ effect = createCardEffect(terramancer_wall_of_earth_carddef(), currentInPlayLoc)
+ .seq(grantHealthTarget((getCounter("wallofEarth1Counter")), { SlotExpireEnum.LeavesPlay }, nullEffect(), "Wall of earth").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall_of_earth")))))
+ .seq(gainHealthEffect(divide(getCounter("wallofEarth1Counter"), 2)))
+ .seq(resetCounterEffect("wallofEarth1Counter")),
+ condition = getCounter("wallofEarth1Counter").gte(2),
+ layout = layoutCard(
+ {
+ title = "Wall of Earth",
+ art = "art/T_Fissure",
+ xmlText=[[
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ })
+ }),
+ }
+
+ })
+end
+
+function terramancer_move_earth2_carddef()
+ local cardLayout = createLayout({
+ name = "Move Earth",
+ art = "art/T_Fissure",
+ frame = "frames/druid_frames/druid_item_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("wallofEarth2Counter"), getCounter("wallofEarth2Counter"), divide(getCounter("wallofEarth2Counter"), 2) }
+ )
+ })
+
+ return createSkillDef({
+ id = "terramancer_move_earth2_skill",
+ name = "move_earth",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/wizard_serene_channel",
+ abilities = {
+ createAbility({
+ id = "move_earth2_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = incrementCounterEffect("wallofEarth2Counter", 2),
+ layout = layoutCard(
+ {
+ title = "Wall of Earth",
+ art = "art/T_Fissure",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+ {
+ --here --
+ effect = createCardEffect(terramancer_wall_of_earth_carddef(), currentInPlayLoc)
+ .seq(grantHealthTarget((getCounter("wallofEarth2Counter")), { SlotExpireEnum.LeavesPlay }, nullEffect(), "Wall of earth").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall_of_earth")))))
+ .seq(gainHealthEffect(divide(getCounter("wallofEarth2Counter"), 2)))
+ .seq(resetCounterEffect("wallofEarth2Counter")),
+ condition = getCounter("wallofEarth2Counter").gte(2),
+ layout = layoutCard(
+ {
+ title = "Wall of Earth",
+ art = "art/T_Fissure",
+ xmlText=[[
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ })
+ }),
+ }
+
+ })
+end
+
+function terramancer_wall_of_earth_carddef()
+
+ --[[ local wallOfEarthBuff = createGlobalBuff({
+ id="wallOfEarth_buff",
+ name = "Wall of Earth",
+ abilities = {
+ createAbility({
+ id="wallOfEarth_effect",
+ trigger = autoTrigger,
+ effect = addSlotToTarget(createNoAttackSlot({ key = "WallOfEarthInPlay", expiry = { startOfOwnerTurnExpiry } })).apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall").invert())))
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Wall of Earth",
+ art = "art/T_Fissure",
+ text = "Champions cannot be targeted while Wall of Earth is in play."
+ })
+ })
+]]
+ return createChampionDef(
+ {
+ id = "terramancer_wall_of_earth",
+ name = "Wall of Earth",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 0,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "wall_of_earth_main",
+ trigger = onPlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+
+ }
+
+ ),
+ createAbility(
+ {
+ id = "wall_of_earth_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Wall of Earth",
+ art = "art/T_Fissure",
+ frame = "frames/druid_frames/druid_action_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ health = 0,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function terramancer_swallowed_by_the_earth_def()
+
+ local abilityLayout = createLayout({
+ name = "Swallowed by the Earth",
+ art = "art/sets/Dungeons/dragged_below",
+ frame = "frames/druid_frames/druid_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+ return createHeroAbilityDef({
+ id = "sbte",
+ name = "Swallowed by the Earth",
+ acquireCost = 0,
+ cardTypeLabel = "Ability",
+ playLocation = skillsPloc,
+ types = { abilityType },
+ abilities = {
+ createAbility({
+ id = "sbte",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = abilityLayout,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Sacrifice one champion of cost 4 gold or less that your opponent has in play.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, inPlayPloc)).where((isCardChampion()).And(getCardCost().lte(4))),
+ targetEffect = sacrificeTarget()
+ }),
+ condition = getTurnsPlayed(currentPid).gte(5),
+ layout = layoutCard(
+ {
+ title = "Swallowed by the Earth",
+ art = "art/sets/Dungeons/dragged_below",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = gainHealthEffect(6).seq(drawCardsEffect(1)),
+ layout = layoutCard(
+ {
+ title = "Swallowed by the Earth",
+ art = "art/sets/Dungeons/dragged_below",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = abilityLayout,
+ layoutPath= "art/sets/Dungeons/dragged_below"
+ })
+end
+
+-- Thandalorian cards
+function thandarlorian_combat_shield_carddef()
+ return createDef({
+ id="thandarlorian_combat_shield",
+ name="Combat Shield",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="thandarlorian_combat_shield",
+ trigger= autoTrigger,
+ effect = gainToughnessEffect(2)
+ }),
+ createAbility({
+ id="thandarlorian_combat_shield_combo",
+ cost = noCost,
+ trigger= uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Combat Shield",
+ art = "art/epicart/angeline_s_favor",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+]]
+ }),
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ effect = drawCardsEffect(1),
+ })
+ },
+ layout = createLayout({
+ name = "Combat Shield",
+ art = "art/epicart/angeline_s_favor",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+]]
+ })
+ })
+ end
+
+function thandarlorian_coordinated_attack_carddef()
+-- START Coordinated Attack CARD - v1.00
+ return createDef({
+ id="thandarlorian_coordinated_attack",
+ name="Coordinated Attack",
+ types={noStealType, itemType},
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="thandarlorian_coordinated_attack",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(2)
+ }),
+ createAbility({
+ id="thandarlorian_coordinated_attack_combo",
+ cost = noCost,
+ trigger= autoTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Coordinated Attack",
+ art = "art/epicart/insurgency",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+]]
+ }),
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion()).count().gte(2),
+ effect = gainCombatEffect(2).seq(gainToughnessEffect(1)),
+ })
+ },
+ layout = createLayout({
+ name = "Coordinated Attack",
+ art = "art/epicart/insurgency",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+ end
+
+function thandarlorian_hand_ballista_carddef()
+-- START Hand Ballista CARD - v1.00
+ return createDef({
+ id="thandarlorian_hand_ballista",
+ name="Hand Ballista",
+ types={noStealType, itemType, bowType, weaponType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="thandarlorian_hand_ballista",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(1)
+ })
+ },
+ layout = createLayout({
+ name = "Hand Ballista",
+ art = "art/T_Light_Crossbow",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]]
+ })
+ })
+ end
+
+function thandarlorian_bounty_hunters_stone_of_seeking_carddef()
+--[[ START Bounty Hunter's Stone of Seeking CARD - v1.00
+]]
+ return createDef({
+ id="thandarlorian_bounty_hunters_stone_of_seeking",
+ name="Bounty Hunter's Stone of Seeking",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="thandarlorian_bounty_hunters_stone_of_seeking",
+ trigger= autoTrigger,
+ effect = gainGoldEffect(1)
+ }),
+ createAbility({
+ id="thandarlorian_bounty_hunters_stone_of_seeking_combo",
+ cost = noCost,
+ trigger= onStunGlobalTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(1),
+ layout = createLayout({
+ name = "Bounty Hunter's Stone of Seeking",
+ art = "art/T_Wizard_Alchemist_S_Stone",
+ frame = "frames/Coop_Campaign_CardFrame",
+ Text = [[
+
+
+
+
+
+
+
+
+]]
+ }),
+ })
+ },
+ layout = createLayout({
+ name = "Bounty Hunter's Stone of Seeking",
+ art = "art/T_Wizard_Alchemist_S_Stone",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+ end
+
+function thandarlorian_bracer_blades_carddef()
+ return createHeroAbilityDef({
+ id = "bracer_blades",
+ name = "Bracer Blades",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "bracer_bladesActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Deal 3 damage to target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = damageTarget(3),
+ }),
+ layout = layoutCard(
+ {
+ title = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ text = "Deal 3 damage to target champion."
+ }
+ ),
+ tags = {gainCombat6Tag}
+ },
+ {
+ effect = gainCombatEffect(2),
+ layout = layoutCard(
+ {
+ title = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )
+ .seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Deal 3 damage to target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = damageTarget(3),
+ }),
+ layout = layoutCard(
+ {
+ title = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ text = "Deal 3 damage to target champion."
+ }
+ ),
+ tags = {gainCombat6Tag}
+ },
+ {
+ effect = gainCombatEffect(2),
+ layout = layoutCard(
+ {
+ title = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ))
+ .seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Deal 3 damage to target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = damageTarget(3),
+ }),
+ layout = layoutCard(
+ {
+ title = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ text = "Deal 3 damage to target champion."
+ }
+ ),
+ tags = {gainCombat6Tag}
+ },
+ {
+ effect = gainCombatEffect(2),
+ layout = layoutCard(
+ {
+ title = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Bracer Blades",
+ art = "art/treasures/T_Bracers_Of_Brawn",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/treasures/T_Bracers_Of_Brawn",
+ })
+end
+
+function thandarlorian_whipcord_carddef()
+ local cardLayout = createLayout({
+ name = "Whipcord",
+ art = "art/treasures/barbarian_whip",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "thandarlorian_whipcord_skill",
+ name = "Whipcord",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/barbarian_whip",
+ abilities = {
+ createAbility({
+ id = "thandarlorian_whipcord_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Expend target opponent's champion of cost 4 gold or less, then drag it into your play area. At end of turn, return it to opponent's play area. Prepare it..",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardCost().lte(4))),
+ min = 0,
+ max = 1,
+ targetEffect = addSlotToTarget(createAbilitySlot({
+ ability = createAbility({
+ id = "thandarlorian_whipcord_ability",
+ effect = moveTargetWithLocAndPlayer(inPlayPloc, ownerPid).apply(selectSource()),
+ trigger = oppStartOfTurnTrigger
+ }),
+ expiry = { startOfOwnerTurnExpiry }
+ }))
+ .seq(expendTarget()).seq(moveTarget(loc(currentPid, inPlayPloc))),
+ }),
+ layout = layoutCard(
+ {
+ title = "Whipcord",
+ art = "art/treasures/barbarian_whip",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Drag champion of cost 4g or less from the Market into your play area. It will arrive expended. At end of turn, return it to the Market Deck. (Shuffle the deck.)",
+ validTargets = selectLoc(centerRowLoc).where(isCardChampion().And(getCardCost().lte(4))),
+ min = 0,
+ max = 1,
+ targetEffect = addSlotToTarget(createAbilitySlot({
+ ability = createAbility({
+ id = "thandarlorian_whipcord_ability",
+ effect = moveTarget(tradeDeckLoc).apply(selectSource()),
+ trigger = oppStartOfTurnTrigger
+ }),
+ expiry = { startOfOwnerTurnExpiry }
+ }))
+ .seq(expendTarget()).seq(moveTarget(loc(currentPid, inPlayPloc))),
+ }),
+ layout = layoutCard(
+ {
+ title = "Whipcord",
+ art = "art/treasures/barbarian_whip",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ cost = goldCost(2),
+ }),
+ }
+
+ })
+end
+
+function thandarlorian_dragon_shard_armour_carddef()
+ local cardLayout = createLayout({
+ name = "Dragon Shard Armour",
+ art = "art/epicart/lesser_angel",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "thandarlorian_dragon_shard_armour_skill",
+ name = "Dragon Shard Armour",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/lesser_angel",
+ abilities = {
+ createAbility({
+ id = "thandarlorian_dragon_shard_armour_ab",
+ trigger = startOfTurnTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = noPrompt,
+ effect = gainToughnessEffect(2),
+ cost = noCost,
+ }),
+ }
+
+ })
+end
+
+
+-- Paladin cards
+function paladin_warhammer_carddef()
+ return createDef(
+ {
+ id = "paladin_warhammer",
+ name = "Warhammer",
+ types = {weaponType, noStealType, paladinType, itemType, meleeWeaponType, hammerType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "paladin_warhammer",
+ layout = cardLayout,
+ effect = ifElseEffect(selectLoc(currentCastLoc).where(isCardType(weaponType)).count().gte(2),
+ gainCombatEffect(2).seq(gainHealthEffect(2)),
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainCombatEffect(2),
+ layout = layoutCard(
+ {
+ title = "Warhammer",
+ art = "art/T_Flesh_Ripper",
+ text = "Gain "
+ }
+ ),
+ tags = {gainCombat2Tag}
+ },
+ {
+ effect = gainHealthEffect(2),
+ layout = layoutCard(
+ {
+ title = "Warhammer",
+ art = "art/T_Flesh_Ripper",
+ text = "Gain "
+ }
+ ),
+ tags = {gainHealth2Tag}
+ }
+ }
+ }
+ )),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Warhammer",
+ art = "art/T_Flesh_Ripper",
+ frame = "frames/Cleric_CardFrame",
+ text = "Gain or Gain \n If you have played a weapon this turn, gain both.",
+ }
+ )
+ }
+ )
+end
+
+function paladin_crusader_carddef()
+ return createChampionDef(
+ {
+ id = "paladin_Crusader",
+ name = "Crusader",
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "Crusader_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(1),
+ layout = layoutCard(
+ {
+ title = "Crusader",
+ art = "avatars/man_at_arms",
+ text = ("{1 gold}")
+ }
+ ),
+ tags = {gainGoldTag}
+ },
+ {
+ effect = gainHealthEffect(1),
+ layout = layoutCard(
+ {
+ title = "Crusader",
+ art = "avatars/man_at_arms",
+ text = ("{1 health}")
+ }
+ ),
+ tags = {gainHealthTag}
+ }
+ }
+ }
+ )
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Crusader",
+ art = "avatars/man_at_arms",
+ frame = "frames/Cleric_CardFrame",
+ text = " or ",
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function paladin_prayer_carddef()
+ local cardLayout = createLayout({
+ name = "Prayer",
+ art = "icons/wind_storm",
+ frame = "frames/Cleric_CardFrame",
+ text = " \n Gain \n Gain "
+ })
+
+ return createSkillDef({
+ id = "paladin_prayer_skill",
+ name = "Prayer",
+ types = { paladinType, skillType },
+ layout = cardLayout,
+ layoutPath = "icons/wind_storm",
+ abilities = {
+ createAbility({
+ id = "paladin_prayer_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainHealthEffect(3).seq(gainCombatEffect(1)),
+ cost = goldCost(2),
+ }),
+ }
+
+ })
+end
+
+function paladin_sacred_oath_carddef()
+ return createHeroAbilityDef({
+ id = "sacred_oath",
+ name = "Sacred Oath",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility( {
+ id = "sacred_oath_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ promptType = showPrompt,
+ layout = createLayout ({
+ name = "Sacred Oath",
+ art = "art/T_Devotion",
+ frame = "frames/Cleric_CardFrame",
+ text = " Prepare up to\n3 champions\nin play."
+ }),
+ effect = pushTargetedEffect({
+ desc = "Choose up to 3 champions in play. Prepare those champions",
+ validTargets = s.CurrentPlayer(CardLocEnum.InPlay).where(isCardChampion()),
+ min = 1,
+ max = 3,
+ targetEffect = prepareTarget(),
+ }),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout({
+ name = "Sacred Oath",
+ art = "art/T_Devotion",
+ text = " Prepare up to\n3 champions\nin play."
+ }),
+ layoutPath = "art/T_Devotion",
+ })
+end
+
+
+-- Witch cards
+function siphon_life_def()
+ return createSkillDef({
+ id = "siphon_life",
+ name = "Siphon Life",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "siphonLifeActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Siphon Life",
+ art = "art/T_Life_Force",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+ ]]
+ }),
+ effect = gainMaxHealthEffect(currentPid, 1).seq(gainHealthEffect(1)).seq(hitOpponentEffect(1)).seq(gainMaxHealthEffect(oppPid, -1)),
+ cost = goldCost(2)
+ })
+ },
+ layout = createLayout({
+ name = "Siphon Life",
+ art = "art/T_Life_Force",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/T_Life_Force"
+ })
+end
+
+function piercing_screech_def()
+ return createDef({
+ id = "piercing_screech",
+ name = "Piercing Screech",
+ acquireCost = 0,
+ cardTypeLabel = "Ability",
+ playLocation = skillsPloc,
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "piercingScreechActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Piercing Screech",
+ art = "art/T_Banshee",
+ xmlText = [[
+
+
+
+
+
+
+ ]]
+ }),
+ effect = oppDiscardEffect(2),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Piercing Screech",
+ art = "art/T_Banshee",
+ xmlText = [[
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath= "art/T_Banshee"
+ })
+end
+
+function witch_flash_freeze_carddef()
+ local cardLayout = createLayout({
+ name = "Flash Freeze",
+ art = "icons/ranger_fast_track",
+ frame = "frames/Wizard_CardFrame",
+ text = "
Expend target champion."
+ })
+
+ return createActionDef({
+ id = "witch_flash_freeze",
+ name = "Flash Freeze",
+ layout = cardLayout,
+ abilities = {
+ createAbility({
+ id = "flashFreezeMain",
+ trigger = autoTrigger,
+ effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ desc = "Expend target Champion",
+ min = 1,
+ max = 1,
+ validTargets = selectLoc(loc(oppPid, inPlayPloc)).where(isCardStunnable()).where(isCardExpended().invert()),
+ targetEffect = expendTarget()
+ }))
+ })
+ }
+ })
+end
+
+ function witch_cauldron_carddef()
+ local cardLayout = createLayout({
+ name = "Witch's Cauldron",
+ art = "art/T_Confused_Apparition",
+ frame = "frames/Coop_Campaign_CardFrame",
+ cardTypeLabel = "Item",
+ xmlText = [[
+
+
+
+ ]]
+ })
+
+ return createDef({
+ id = "witch_cauldron",
+ name = "Witch's Cauldron",
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ types = { itemType },
+ layout = cardLayout,
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cauldronMain",
+ trigger = autoTrigger,
+ effect = gainGoldEffect(1).seq(gainHealthEffect(3))
+ }),
+ createAbility({
+ id = "cauldronStun",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ effect = pushTargetedEffect({
+ desc = "Stun a friendly champion.",
+ min = 1,
+ max = 1,
+ validTargets = selectLoc(loc(currentPid, inPlayPloc)),
+ targetEffect = stunTarget().seq(drawCardsEffect(1))
+ }),
+ check = selectLoc(currentInPlayLoc).count().gte(1)
+ })
+ }
+ })
+end
+
+
+-- Shaman cards
+function flame_burst_carddef()
+ return createActionDef({
+ id="flame_burst",
+ name="Flame Burst",
+ types={noStealType,actionType},
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="flame_burst_auto",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(2)
+ })
+ },
+ layout = createLayout({
+ name = "Flame Burst",
+ art = "art/T_Spreading_Sparks",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+end
+
+function call_lightning_carddef()
+ return createActionDef({
+ id="call_lightning",
+ name="Call Lightning",
+ types={noStealType,actionType},
+ acquireCost=0,
+ playAllType={noPlayPlayType,blockPlayType},
+ abilities = {
+ createAbility(
+ {
+ id="call_lightning_auto",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(selectLoc(currentCastLoc).where(isCardAction()).count())
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Call Lightning",
+ art = "icons/wizard_soul_channel",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+end
+
+function natures_blessing_carddef()
+
+ return createActionDef({
+ id="natures_blessing",
+ name="Natures Blessing",
+ types={noStealType,actionType},
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id="natures_blessing_auto",
+ trigger= autoTrigger,
+ effect = gainGoldEffect(1).seq(healPlayerEffect(currentPid,1))
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Natures Blessing",
+ art = "art/T_Nature_S_Bounty",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+ })
+end
+
+function gift_of_the_elements_carddef()
+
+ local protectionLayout = layoutCard({
+ name = "Protection",
+ art = "art/T_Splashing_Wave",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+
+ local destructionLayout = layoutCard({
+ name = "Destruction",
+ art = "art/T_Spreading_Blaze",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id="gift_of_the_elements",
+ name="icons/wind_storm",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ acquireCost = 2,
+ abilities = {
+ createAbility({
+ trigger = uiTrigger,
+ id="gift_of_the_elements_trigger",
+ cost = goldCost(2),
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ layout = destructionLayout,
+ effect= gainCombatEffect(selectLoc(currentCastLoc).where(isCardAction()).count()),
+ tags = {}
+ },
+ {
+ layout = protectionLayout,
+ effect = healPlayerEffect(currentPid, selectLoc(currentCastLoc).where(isCardAction()).count()),
+ tags = {}
+ }
+ }
+ })
+ })
+
+ },
+ layout = createLayout({
+ name = "Gift of the Elements",
+ art = "icons/wind_storm",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "icons/wind_storm"
+ })
+end
+
+function elemental_surge_def()
+ return createDef({
+ id = "elemental_surge_def",
+ name = "Elemental Surge",
+ acquireCost = 0,
+ cardTypeLabel = "Ability",
+ playLocation = skillsPloc,
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "elemental_surge_active",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Elemental Surge",
+ art = "icons/growing_flame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = gainCombatEffect(selectLoc(currentCastLoc).where(isCardAction()).count()).seq(healPlayerEffect(currentPid, selectLoc(currentCastLoc).where(isCardAction()).count())).seq(gainGoldEffect(selectLoc(currentCastLoc).where(isCardAction()).count())),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Elemental Surge",
+ art = "icons/growing_flame",
+ xmlText = [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath= "icons/growing_flame"
+ })
+end
+
+
+-- King Midas cards
+function midas_kings_adviser_carddef()
+ return createChampionDef({
+ id="midas_kings_adviser",
+ name="Kings adviser",
+ types={championType, priestType},
+ acquireCost=1,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility({
+ id = "kingsAdviserMain",
+ trigger = autoTrigger,
+ effect = gainGoldEffect(1),
+ cost = expendCost,
+ activations = multipleActivations
+ })
+ },
+ layout = createLayout({
+ name = "Kings adviser",
+ art = "art/T_Tithe_Priest",
+ frame = "frames/Treasure_CardFrame",
+ text = "Lean into the power of “No” to fend off the distractions of shiny new objects.",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 1,
+ cost = 1,
+ isGuard = false
+ })
+ })
+end
+
+
+function midas_gold_carddef()
+ return createItemDef({
+ id = "midas_gold",
+ name = "Gold",
+ types = { itemType, currencyType, coinType },
+ acquireCost = 0,
+ abilities = {
+ createAbility({
+ id = "midasGoldMain",
+ effect = gainGoldEffect(1),
+ cost = noCost,
+ trigger = autoTrigger
+ })
+ },
+ layout = createLayout({
+ name = "Gold",
+ art = "art/gold_male_pale",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+]],
+ })
+ })
+end
+
+function midas_liquid_gold_carddef()
+ return createItemDef({
+ id = "midas_liquid_gold",
+ name = "Liquid gold",
+ types = { itemType, currencyType, coinType },
+ acquireCost = 0,
+ abilities = {
+ createAbility({
+ id = "midasLiquidGoldMain",
+ effect = gainGoldEffect(2),
+ cost = noCost,
+ trigger = autoTrigger
+ })
+ },
+ layout = createLayout({
+ name = "Liquid gold",
+ art = "art/treasures/T_Cleric_Elixir_Golden",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+]],
+ })
+ })
+end
+
+function greed_is_good_skilldef()
+ return createSkillDef({
+ id = "greed_is_good",
+ name = "Greed is Good",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "GreedIsGoodActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Greed is good",
+ art = "art/T_Bribe",
+ frame = "frames/Treasure_CardFrame",
+ text = "",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = gainCombatEffect(getPlayerGold(currentPid)).seq(gainGoldEffect(getPlayerGold(currentPid).multiply(-1))).seq(gainHealthEffect(-1)).seq(gainMaxHealthEffect(currentPid, -1)) ,
+ cost = expendCost
+ })
+ },
+ layout = createLayout({
+ name = "Greed is good",
+ art = "art/T_Bribe",
+ frame = "frames/Treasure_CardFrame",
+ text = "",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath= "art/T_Bribe"
+ })
+end
+
+function golden_touch_abilitydef()
+ return createDef({
+ id = "golden_touch",
+ name = "Golden touch",
+ acquireCost = 0,
+ cardTypeLabel = "Ability",
+ playLocation = skillsPloc,
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "goldenTouchActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Golden touch",
+ art = "art/T_Strength_In_Numbers",
+ frame = "frames/Treasure_CardFrame",
+ text = "",
+ xmlText = [[
+
+
+
+
+
+
+ ]]
+ }),
+ effect = gainGoldEffect(selectCurrentChampions().sum(getCardCost())).seq(sacrificeTarget().apply(selectCurrentChampions())),
+ -- effect = sacrificeTarget().apply(selectCurrentChampions()),
+ -- effect = sacrificeTarget().apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion())),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Golden touch",
+ art = "art/T_Strength_In_Numbers",
+ frame = "frames/Treasure_CardFrame",
+ text = "",
+ xmlText = [[
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath= "art/T_Strength_In_Numbers"
+ })
+end
+
+
+-- Brewmaster cards
+function brewmaster_mead_carddef()
+ return createDef(
+ {
+ id = "brewmaster_mead",
+ name = "Mead",
+ types = {elixirType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "brewmaster_mead",
+ PlayAllType = noPlayPlayType,
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = nullEffect(),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Mead",
+ art = "art/treasures/T_Fighter_Elixir_Red",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_spilled_drink_carddef()
+ return createDef(
+ {
+ id = "brewmaster_spilled_drink",
+ name = "Spilled Drink",
+ types = {elixirType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "brewmaster_spilled_drink",
+ PlayAllType = blockPlayType,
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(1).seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = layoutCard(
+ {
+ name = "Spilled Drink",
+ art = "art/treasures/T_Ranger_Elixir_Yellow",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = forceDiscard(1).seq(drawCardsEffect(1)),
+ layout = createLayout({
+ name = "Spilled Drink",
+ art = "art/treasures/T_Ranger_Elixir_Yellow",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ }
+ }
+ }
+ )),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Spilled Drink",
+ art = "art/treasures/T_Ranger_Elixir_Yellow",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_tap_a_keg_carddef()
+ return createDef(
+ {
+ id = "brewmaster_tap_a_keg",
+ name = "Tap a Keg",
+ types = {actionType, noStealType, brewmasterType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "brewmaster_tap_a_keg_main",
+ layout = cardLayout,
+ effect = gainGoldEffect(1),
+ trigger = autoTrigger,
+ playAllType = blockPlayType,
+ tags = {}
+ }
+ ),
+ createAbility(
+ {
+ id = "brewmaster_tap_a_keg_1",
+ layout = cardLayout,
+ effect = ifElseEffect(selectLoc(currentDiscardLoc).where(isCardName("brewmaster_mead")).count().gte(1),gainGoldEffect(1),nullEffect()),
+ trigger = autoTrigger,
+ playAllType = blockPlayType,
+ tags = {}
+ }),
+ createAbility(
+ {
+ id = "brewmaster_tap_a_keg_2",
+ layout = cardLayout,
+ effect = ifElseEffect(selectLoc(currentDiscardLoc).where(isCardName("brewmaster_mead")).count().gte(3),gainGoldEffect(1),nullEffect()),
+ trigger = autoTrigger,
+ playAllType = blockPlayType,
+ tags = {}
+ })
+
+ },
+ layout = createLayout(
+ {
+ name = "Tap a Keg",
+ art = "art/treasures/T_Ranger_Elixir_Orange",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_serve_the_strong_stuff_carddef()
+
+ local priceBuff = getCostDiscountBuff("brewmaster_serve_the_strong_stuff_buff", -1, selectLoc(centerRowLoc).union(selectLoc(fireGemsLoc)))
+ local buffCreator = createGlobalBuff({
+ id="brewmaster_serve_the_strong_stuff_buff",
+ name = "Serve the strong stuff",
+ abilities = {
+ createAbility({
+ id="brewmaster_serve_the_strong_stuff_effect",
+ trigger = endOfTurnTrigger,
+ effect = createCardEffect(priceBuff, loc(oppPid, buffsPloc)).seq(sacrificeSelf())
+ })
+ },
+
+ })
+ return createDef(
+ {
+ id = "brewmaster_serve_the_strong_stuff",
+ name = "Serve the strong stuff",
+ types = {noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "brewmaster_serve_the_strong_stuff",
+ layout = cardLayout,
+ effect = pushTargetedEffect({
+ desc = "Prepare a champion.",
+ validTargets = s.CurrentPlayer(CardLocEnum.InPlay).where(isCardChampion()),
+ min = 0,
+ max = 1,
+ targetEffect = prepareTarget(),
+ }),
+ trigger = uiTrigger,
+ tags = {}
+ }
+
+ ),
+ createAbility(
+ {
+ id = "brewmaster_serve_the_strong_buff",
+ layout = cardLayout,
+ effect = createCardEffect(buffCreator, loc(currentPid, buffsPloc)),
+ trigger = autoTrigger,
+ tags = {}
+ }
+
+ )
+ },
+
+ createBuffDetails({
+ art = "art/treasures/T_Bottle_Of_Rum",
+ name = "Serve the strong stuff",
+ text = "Your first purchase this turn costs +1 gold."
+ }),
+
+ layout = createLayout(
+ {
+ name = "Serve the strong stuff",
+ art = "art/treasures/T_Bottle_Of_Rum",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_regular_regulars_carddef()
+ return createChampionDef(
+ {
+ id = "brewmaster_regular_regulars",
+ name = "Regular Regulars",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "regular_regulars_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ playAllType = blockPlayType,
+ effect = ifElseEffect(selectLoc(loc(currentPid, castPloc)).where(isCardName("brewmaster_mead")).count().gte(1), gainGoldEffect(2), gainGoldEffect(1)),
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Regular Regulars",
+ art = "avatars/cristov_s_recruits",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_irregular_regulars_carddef()
+ return createChampionDef(
+ {
+ id = "brewmaster_irregular_regulars",
+ name = "Irregular Regulars",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "irregular_regulars_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ playAllType = blockPlayType,
+ effect = ifElseEffect(selectLoc(loc(currentPid, castPloc)).where(isCardName("brewmaster_mead")).count().gte(1), gainGoldEffect(1).seq(gainCombatEffect(2)), gainGoldEffect(1)),
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Iregular Regulars",
+ art = "art/T_Orc_Riot",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_zaboozer_carddef()
+ return createChampionDef(
+ {
+ id = "brewmaster_zaboozer",
+ name = "Zaboozer, Heroic Regular",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "zaboozer_mead",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ playAllType = blockPlayType,
+ effect = ifElseEffect(selectLoc(loc(currentPid, castPloc)).where(isCardName("brewmaster_mead")).count().gte(1), gainCombatEffect(1).seq(addSlotToTarget(createGuardSwitchSlot(false, { endOfTurnExpiry })).apply(selectSource())), gainCombatEffect(3)),
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Zaboozer, Heroic Regular",
+ art = "art/T_Maurader",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function brewmaster_a_round_on_the_house_def()
+
+ local cardLayout = createLayout({
+ name = "A round on the House",
+ art = "art/T_Unify_Apsara",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "brewmaster_a_round_on_the_house_skill",
+ name = "A round on the House",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_Unify_Apsara",
+ abilities = {
+ createAbility({
+ id = "a_round_on_the_house_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = gainCombatEffect(selectLoc(currentInPlayLoc).where(isCardChampion()).count())
+ .seq((grantHealthTarget(-1, { SlotExpireEnum.leavesPlay }, nullEffect(), "shadow")).apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion())))
+ .seq((grantHealthTarget(-1, { SlotExpireEnum.leavesPlay }, nullEffect(), "shadow")).apply(selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()))),
+ cost = goldCost(2)
+ }),
+ }
+
+ })
+end
+
+ local thrownOutBarBuff = createGlobalBuff({
+ id="brewmaster_serve_the_strong_stuff_buff",
+ name = "Get out of my bar",
+ abilities = {
+ createAbility({
+ id="brewmaster_get_out_of_my_bar_effect",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Thrown out bar")).seq(sacrificeSelf())
+ })
+ }
+ })
+
+function brewmaster_get_out_of_my_bar_carddef()
+ return createHeroAbilityDef({
+ id = "get_out_of_my_bar_buff",
+ name = "Get out of my bar",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "get_out_of_my_barActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Get out of my bar",
+ art = "art/T_orc",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = drawCardsEffect(1),
+ layout = layoutCard(
+ {
+ name = "Get out of my bar",
+ art = "art/T_orc",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a champion from opponent's discard pile. Only useable on champions stunned this turn.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(isCardChampion()).where(isCardStunned()),
+ targetEffect = saveTarget("Thrown out bar").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(thrownOutBarBuff, loc(oppPid, buffsPloc)))
+ }),
+ layout = createLayout({
+ name = "Get out of my bar",
+ art = "art/T_orc",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ }
+ }
+ }
+ ),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Get out of my bar",
+ art = "art/T_orc",
+ frame = "frames/Generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/T_orc",
+ })
+end
+
+
+-- S&R Enjoyer cards
+function bird_dog_def()
+ local layout = createLayout({
+ name = "BirdWalking",
+ art = "art/T_Spark",
+ xmlText = [[
+
+
+
+
+
+
+
+
+ ]]
+ })
+ return createSkillDef({
+ id = "bird_dog",
+ name = "BirdWalking",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "birdDogActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = layout,
+ effect = drawCardsEffect(1),
+ cost = goldCost(2)
+ })
+ },
+ layout = layout,
+ layoutPath= "art/T_Spark"
+ })
+end
+
+function patron_shoutout_def()
+ local layout = createLayout({
+ name = "Shoutout to the Patrons",
+ art = "art/T_Command",
+ xmlText = [[{gold_3}]]
+ })
+ local promptLayout = createLayout({
+ name = "Shoutout to the Patrons",
+ art = "art/T_Command",
+ text = format("Gain {0} gold.", { 3 }),
+ })
+
+ return createHeroAbilityDef({
+ id = "patron_shoutout",
+ name = "Shoutout to the Patrons",
+ acquireCost = 0,
+ cardTypeLabel = "Ability",
+ playLocation = skillsPloc,
+ types = { abilityType },
+ abilities = {
+ createAbility({
+ id = "piercingScreechActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = promptLayout,
+ effect = gainGoldEffect(3),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = layout,
+ layoutPath= "art/T_Command"
+ })
+end
+
+function hero_dash_helper_carddef()
+ local cardLayout = createLayout({
+ name = "Hero-Helper Plug",
+ art = "art/T_Stone_Guardian",
+ frame = "frames/Warrior_CardFrame",
+ cardTypeLabel = "Champion",
+ types = { championType, noStealType },
+ text = "
_________________
Visit: Hero-Helper.com"
+ })
+ return createChampionDef({
+ id = "hero_helper",
+ name = "Hero-Helper",
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ layout = cardLayout,
+ factions = {},
+ abilities = {
+ createAbility({
+ id = "hhMain",
+ trigger = autoTrigger,
+ activations = multipleActivations,
+ cost = expendCost,
+ effect = gainCombatEffect(2)
+ })
+ }
+ })
+end
+
+function situational_card_carddef()
+ local cardLayout = createLayout({
+ name = "Situational Card",
+ art = "art/T_Elixir_Of_Fortune",
+ frame = "frames/Cleric_Frames/Cleric_Treasure_CardFrame",
+ cardTypeLabel = "Item",
+ text = "
_______________
I would buy this over
Tithe Priest."
+ })
+
+ return createItemDef({
+ id = "situational_card",
+ name = "Situational Card",
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ types = { itemType, noStealType },
+ layout = cardLayout,
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "situationMain",
+ trigger = autoTrigger,
+ effect = gainGoldEffect(1)
+ }),
+ }
+ })
+end
+
+function wwyd_carddef()
+ local cardLayout = createLayout({
+ name = "WWYD?",
+ art = "art/T_Edge_Of_The_Moat",
+ frame = "frames/Ranger_CardFrame",
+ cardTypeLabel = "Action",
+ text = " or
If you have Street Thug in play, do both."
+ })
+ local faceLayout = layoutCard({
+ title = "WWYD?",
+ art = "art/T_Blazing_Fire",
+ text = ""
+ })
+ local removalLayout = layoutCard({
+ title = "WWYD?",
+ art = "art/T_Evangelize",
+ text = ""
+ })
+
+ return createActionDef({
+ id = "wwyd_card",
+ name = "WWYD?",
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ types = { actionType, noStealType },
+ layout = cardLayout,
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "noChampMain",
+ trigger = autoTrigger,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardName("street_thug")).count().gte(1),
+ gainCombatEffect(3).seq(gainHealthEffect(4)),
+ pushChoiceEffect({
+ choices = {
+ {
+ effect = gainCombatEffect(3),
+ layout = faceLayout
+ },
+ {
+ effect = gainHealthEffect(4),
+ layout = removalLayout
+ }
+ }
+ })
+ )
+ }),
+ }
+ })
+end
+
+function nostra_dbl_damus_carddef()
+ local cardLayout = createLayout({
+ name = "NostraDblDamus",
+ art = "art/T_Channel",
+ frame = "frames/Wizard_CardFrame",
+ cardTypeLabel = "Champion",
+ types = { championType, noStealType },
+ text = "
Reveal the top card of your
deck. Discard it or put it back
on the top of your deck.
_________________
Visions of Thandar!"
+ })
+ return createChampionDef({
+ id = "nostra_dbl_damus",
+ name = "NostraDblDamus",
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ layout = cardLayout,
+ factions = {},
+ abilities = {
+ createAbility({
+ id = "nddOnPlay",
+ trigger = uiTrigger,
+ activations = multipleActivations,
+ cost = expendCost,
+ effect = gainGoldEffect(1).seq(drawToLocationEffect(1, currentRevealLoc)
+ .seq(promptSplit({
+ selector = selectLoc(currentRevealLoc),
+ take = const(4),
+ sort = const(2),
+ ef1 =moveToTopDeckTarget(true),
+ ef2 = discardTarget(),
+ header = "Visions of Thandar",
+ description = "Look at the top card of your deck. You may put it in your discard pile, or put it back on the top of your deck.",
+ pile1Name = "Top of Deck",
+ pile2Name = "Discard Pile",
+ eff1Tags = { buytopdeckTag },
+ eff2Tags = { cheapestTag }
+ }))
+ )
+ })
+ }
+ })
+end
+
+function blank_to_my_blank_carddef()
+ local cardLayout = createLayout({
+ name = "The _____ To My _____ ",
+ art = "art/T_Paladin_Sword",
+ frame = "frames/Warrior_CardFrame",
+ cardTypeLabel = "Item",
+ text = ""
+ })
+
+ return createItemDef({
+ id = "b2mb_card",
+ name = "The Blank To My Blank",
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ types = { itemType, noStealType },
+ layout = cardLayout,
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "b2mbMain",
+ trigger = autoTrigger,
+ effect = gainGoldEffect(1).seq(gainCombatEffect(2)),
+ }),
+ }
+ })
+end
+
+function congrats_youre_a_nerd_carddef()
+ local cardLayout = createLayout({
+ name = "Congrats, You're A Nerd",
+ art = "art/treasures/wizard_wizened_familiar",
+ frame = "frames/Wizard_CardFrame",
+ cardTypeLabel = "Action",
+ text = "Opponent discards 1.
_______________
When this card goes into your discard pile, put it on the bottom of your deck."
+ })
+
+ return createActionDef({
+ id = "congrats_youre_a_nerd_card",
+ name = "Congrats, You're A Nerd",
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ types = { actionType, noStealType },
+ layout = cardLayout,
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "congratsMain",
+ trigger = autoTrigger,
+ effect = oppDiscardEffect(1),
+ }),
+ createAbility({
+ id = "congratsBottomDeck",
+ trigger = onDiscardTrigger,
+ effect = moveToBottomDeckTarget(false).apply(selectSource()),
+ }),
+ createAbility({
+ id = "congratsBottomDeck2",
+ trigger = endOfTurnTrigger,
+ effect = moveToBottomDeckTarget(false).apply(selectSource()),
+ }),
+ }
+ })
+end
+
+
+
+-- Easter Egg cards
+
+
+function ee_demon_hunter_carddef()
+ return createChampionDef(
+ {
+ id = "demon_hunter",
+ name = "Demon Hunter",
+ types = {championType},
+ factions = { imperialFaction },
+ acquireCost = 5,
+ health = 5,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "demon_hunter",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/T_Paladin_Sword",
+ frame = "frames/Imperial_Champion_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ effect = gainCombatEffect(4),
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/T_Paladin_Sword",
+ frame = "frames/Imperial_Champion_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Hit up to 3 champions for 2 damage each.",
+ validTargets = oppStunnableSelector(),
+ min = 1,
+ max = 3,
+ targetEffect = damageTarget(2),
+ }),
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/T_Paladin_Sword",
+ frame = "frames/Imperial_Champion_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ }
+ })
+ }),
+
+ createAbility({
+ id = "demon_hunter_ally",
+ trigger = uiTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = drawCardsEffect(1),
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Demon Hunter",
+ art = "art/T_Paladin_Sword",
+ frame = "frames/Imperial_Champion_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ allyFactions = {imperialFaction}
+ }),
+
+ createAbility({
+ id = "demon_hunter_2ally",
+ trigger = uiTrigger,
+ effect = gainHealthEffect(selectLoc(loc(oppPid, discardPloc)).where(isCardStunned()).count().multiply(2)),
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Demon Hunter",
+ art = "art/T_Paladin_Sword",
+ frame = "frames/Imperial_Champion_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = noCost,
+ activations = singleActivation,
+ check = constBoolExpression(true),
+ allyFactions = {imperialFaction, imperialFaction}
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Demon Hunter",
+ art = "art/epicart/white_knight",
+ frame = "frames/Imperial_Champion_CardFrame",
+ cost = 5,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+
+function mythic_mercs_ee_scrapforks_carddef()
+ return createChampionDef(
+ {
+ id = "scrapforks",
+ name = "Scrapforks",
+ types = {championType},
+ acquireCost = 4,
+ health = 5,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "scrapforks_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = randomEffect({
+ valueItem(4, gainCombatEffect(5)),
+ valueItem(1, moveTarget(loc(currentPid, deckPloc)).apply(selectSource()).seq(shuffleEffect(loc(currentPid, deckPloc))))
+ }
+ ).seq(noUndoEffect())
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Scrapforks",
+ art = "art/epicart/lord_of_the_arena",
+ frame = "frames/Treasure_CardFrame",
+ cost = 4,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+
+function mythic_mercs_ee_dblducks_carddef()
+ return createChampionDef(
+ {
+ id = "dblducks",
+ name = "Dbl Ducks",
+ types = {championType},
+ acquireCost = 4,
+ health = 5,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "dblducks",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4).seq(moveTarget(myRevealPloc).apply(selectLoc(loc(currentPid, deckPloc)).take(2)).seq(noUndoEffect()).seq(promptSplit({
+ selector = selectLoc(currentRevealLoc),
+ take = const(1), -- number of cards to take for split
+ sort = const(1), -- number of cards to be sorted for ef2
+ minTake = const(1), -- number of mandatory cards moved to ef2
+ ef1 = moveToTopDeckTarget(true, 1), -- effect to be applied to cards left
+ ef2 = moveToBottomDeckTarget(true, 1), -- effect to be applied to sorted cards
+ header = "Gaze into the future", -- prompt header
+ description = "Look at the top two cards of your deck. Put one on the top and one on the bottom of your deck.",
+ rightPileDesc = "Right card on top.",
+ pile1Name = "Top of Deck",
+ pile2Name = "Bottom of Deck",
+ eff1Tags = { buytopdeckTag },
+ eff2Tags = { cheapestTag }
+})))
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "DblDucks",
+ art = "art/epicart/banishment",
+ frame = "frames/Treasure_CardFrame",
+ cost = 4,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+
+function mythic_mercs_ee_parsons_carddef()
+ return createChampionDef(
+ {
+ id = "parsons_merc",
+ name = "Parsons the Insider",
+ types = {championType},
+ acquireCost = 5,
+ health = 5,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "parsons_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainGoldEffect(2)
+ .seq(pushTargetedEffect({
+ desc="Move a card from your discard to the top of your deck.",
+ min=0,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, discardPloc)),
+ targetEffect= moveToBottomDeckTarget(false, 0),
+ tags = {}
+ }))
+
+ }
+ ),
+ createAbility({
+ id = "parsons_faction",
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ effect = addSlotToTarget(createFactionsSlot({ imperialFaction }, { leavesPlayExpiry })).apply(selectSource()),
+ layout = createLayout({
+ name = "Parons the Insider",
+ art = "art/T_Thief_Male_Alternate",
+ frame = "frames/Imperial_Champion_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { addFactionTag }
+ },
+ {
+ effect = addSlotToTarget(createFactionsSlot({ wildFaction }, { leavesPlayExpiry })).apply(selectSource()),
+ layout = createLayout({
+ name = "Parons the Insider",
+ art = "art/T_Thief_Male_Alternate",
+ frame = "frames/Wild_Champion_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { addFactionTag }
+ },
+ {
+ effect = addSlotToTarget(createFactionsSlot({ guildFaction }, { leavesPlayExpiry })).apply(selectSource()),
+ layout = createLayout({
+ name = "Parons the Insider",
+ art = "art/T_Thief_Male_Alternate",
+ frame = "frames/Guild_Champion_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { addFactionTag }
+ },
+ {
+ effect = addSlotToTarget(createFactionsSlot({ necrosFaction }, { leavesPlayExpiry })).apply(selectSource()),
+ layout = createLayout({
+ name = "Parons the Insider",
+ art = "art/T_Thief_Male_Alternate",
+ frame = "frames/Necros_Champion_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { addFactionTag }
+ }
+ }
+ }
+ ),
+ cost = noCost,
+ trigger = onPlayTrigger,
+ promptType = showPrompt,
+ tags = { gainGoldTag }
+ })
+
+ },
+ layout = createLayout(
+ {
+ name = "Parsons the Insider",
+ art = "art/T_Thief_Male_Alternate",
+ frame = "frames/Treasure_CardFrame",
+ cost = 5,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function mythic_mercs_ee_stigmalingpa_carddef()
+ return createChampionDef(
+ {
+ id = "stigmalingpa",
+ name = "Stigmalingpa",
+ types = {championType},
+ acquireCost = 4,
+ health = 4,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "stigmalingpa",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainHealthEffect(4)
+ .seq(pushTargetedEffect({
+ desc = "Transform a Gold in your discard pile into a Ruby.",
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(isCardType(coinType)),
+ min = 0,
+ max = 1,
+ targetEffect = transformTarget("ruby"),
+
+ }))
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Stigmalingpa",
+ art = "art/epicart/reusable_knowledge",
+ frame = "frames/Treasure_CardFrame",
+ cost = 4,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 4,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function mythic_mercs_ee_agent_th_carddef()
+ return createChampionDef(
+ {
+ id = "agent_th",
+ name = "Agent Teeth Hurting",
+ types = {championType},
+ acquireCost = 4,
+ health = 5,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "agent_th",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = randomEffect({
+ valueItem(27, createCardEffect(cat_familiar_token_carddef(), currentInPlayLoc)),
+ valueItem(27, createCardEffect(kit_cat_token_carddef(), currentInPlayLoc)),
+ valueItem(27, createCardEffect(chunky_cat_token_carddef(), currentInPlayLoc)),
+ valueItem(14, createCardEffect(big_bad_kitty_token_carddef(), currentInPlayLoc)),
+ valueItem(5, createCardEffect(surprise_dragon_token_carddef(), currentInPlayLoc))
+
+}).seq(noUndoEffect())
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Agent Teeth Hurting",
+ art = "art/epicart/psionic_assault",
+ frame = "frames/Treasure_CardFrame",
+ cost = 4,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+
+function cat_familiar_token_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "familiar_cat_token",
+ name = "Familiar Cat",
+ types = {minionType, championType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "familiar_cat_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ effect = gainCombatEffect(1),
+ layout = createLayout({
+ name = "Familiar Cat",
+ art = "art/T_Cat_Familiar",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ },
+ {
+ effect = gainGoldEffect(1),
+ layout = createLayout({
+ name = "Familiar Cat",
+ art = "art/T_Cat_Familiar",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ },
+ {
+ effect = gainHealthEffect(1),
+ layout = createLayout({
+ name = "Familiar Cat",
+ art = "art/T_Cat_Familiar",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ }
+
+ }})
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "familiar_cat_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Familiar Cat",
+ art = "art/T_Cat_Familiar",
+ frame = "frames/Treasure_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+
+function kit_cat_token_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "kit_cat_token",
+ name = "Kit Cat",
+ types = {minionType, championType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "kit_cat_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2)
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "kit_cat_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Kit Cat",
+ art = "art/treasures/wizard_wizened_familiar",
+ frame = "frames/Treasure_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function chunky_cat_token_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "chunky_cat_token",
+ name = "Kit Cat Chunky",
+ types = {minionType, championType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "chunky_cat_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = drawCardsEffect(1)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "chunky_cat_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Kit Cat Chunky",
+ art = "art/treasures/wizard_content_familiar",
+ frame = "frames/Treasure_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function big_bad_kitty_token_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "big_bad_kitty_token",
+ name = "Big Bad Kitty",
+ types = {minionType, championType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 3,
+ isGuard = true,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "big_bad_kitty_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "big_bad_kitty_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Big Bad Kitty",
+ art = "art/T_Strength_of_the_wolf",
+ frame = "frames/Treasure_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function surprise_dragon_token_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "surprise_dragon_token",
+ name = "Surprise Dragon",
+ types = {minionType, championType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "surprise_dragon_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc)))
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "surprise_dragon_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Surprise Dragon",
+ art = "art/epicart/dragonling",
+ frame = "frames/Treasure_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+-- Auxiliary effects
+local function goFirstEffect()
+-- this is a dirty hack to make player going first only draw three cards for their first turn. Feel free to replace it with a better implementation.
+ return createGlobalBuff({
+ id="draw_three_start_buff",
+ name = "Go First",
+ abilities = {
+ createAbility({
+ id="go_first_draw_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(
+ getTurnsPlayed(oppPid).eq(1),
+ nullEffect(),
+ drawCardsEffect(2)
+ )
+ })
+ }
+ })
+end
+
+function setupGame(g)
+ registerCards(
+ g,
+ {
+ choose_lich_carddef(),
+ lich_corruption_carddef(),
+ lich_soul_diamond_carddef(),
+ lich_minor_summoning_carddef(),
+ lich_major_summoning_carddef(),
+ lich_frozen_touch_carddef(),
+ lich_soul_crush_carddef(),
+ lich_abomination_minion_carddef(),
+ lich_banshee_minion_carddef(),
+ lich_ghoul_minion_carddef(),
+ lich_revenant_minion_carddef(),
+ lich_skeleton_horde_minion_carddef(),
+ lich_wall_of_bones_minion_carddef(),
+ lich_wall_of_fire_minion_carddef(),
+ lich_zombie_minion_carddef(),
+ lich_SJ_DI_carddef(),
+ lich_SJ_HoE_carddef(),
+ lich_SJ_IW_carddef(),
+ lich_SJ_M_carddef(),
+ lich_SJ_UR_carddef(),
+ lich_SJ_V_carddef(),
+ choose_demonologist_carddef(),
+ demonologist_shadow_gem_carddef(),
+ demonologist_shadow_feeder_carddef(),
+ demonologist_void_guard_carddef(),
+ demonologist_lesser_devourer_carddef(),
+ demonologist_summon_demon_master_carddef(),
+ demonologist_demonic_leech_carddef(),
+ demonologist_succubus_carddef(),
+ demonologist_fel_hound_carddef(),
+ demonologist_incubus_carddef(),
+ demonologist_keeper_of_the_void_carddef(),
+ demonologist_demon_master_carddef(),
+ choose_apothecary_carddef(),
+ apothecary_apprentice_potion_maker_carddef(),
+ apothecary_red_potion_carddef(),
+ apothecary_green_potion_carddef(),
+ apothecary_yellow_potion_carddef(),
+ apothecary_mezzaluna_carddef(),
+ choose_cryomancer_carddef(),
+ cryomancer_ice_burst_carddef(),
+ cryomancer_ice_shield_carddef(),
+ cryomancer_ice_gem_carddef(),
+ cryomancer_freeze_carddef(),
+ cryomancer_frostbite_carddef(),
+ cryomancer_permafrost_carddef(),
+ cryomancer_freezing_fog_carddef(),
+ choose_pyromancer_carddef(),
+ pyromancer_sear_carddef(),
+ pyromancer_scorch_carddef(),
+ pyromancer_fire_shard_carddef(),
+ pyromancer_combust_carddef(),
+ pyromancer_1p_fuel_1carddef(),
+ pyromancer_2p_fuel_1carddef(),
+ choose_terramancer_carddef(),
+ terramancer_earth_gem_carddef(),
+ terramancer_hurl_boulder_carddef(),
+ terramancer_tremor_carddef(),
+ terramancer_clay_golem1_carddef(),
+ terramancer_clay_golem2_carddef(),
+ terramancer_move_earth1_carddef(),
+ terramancer_move_earth2_carddef(),
+ terramancer_swallowed_by_the_earth_def(),
+ choose_thandarlorian_carddef(),
+ thandarlorian_coordinated_attack_carddef(),
+ thandarlorian_combat_shield_carddef(),
+ thandarlorian_hand_ballista_carddef(),
+ thandarlorian_bounty_hunters_stone_of_seeking_carddef(),
+ choose_paladin_carddef(),
+ paladin_warhammer_carddef(),
+ paladin_crusader_carddef(),
+ paladin_prayer_carddef(),
+ paladin_sacred_oath_carddef(),
+ choose_witch_carddef(),
+ witch_flash_freeze_carddef(),
+ witch_cauldron_carddef(),
+ siphon_life_def(),
+ piercing_screech_def(),
+ choose_shaman_carddef(),
+ flame_burst_carddef(),
+ call_lightning_carddef(),
+ gift_of_the_elements_carddef(),
+ natures_blessing_carddef(),
+ choose_king_midas_carddef(),
+ midas_kings_adviser_carddef(),
+ greed_is_good_skilldef(),
+ golden_touch_abilitydef(),
+ midas_liquid_gold_carddef(),
+ midas_gold_carddef(),
+ choose_brewmaster_carddef(),
+ brewmaster_mead_carddef(),
+ brewmaster_get_out_of_my_bar_carddef(),
+ brewmaster_tap_a_keg_carddef(),
+ brewmaster_regular_regulars_carddef(),
+ brewmaster_irregular_regulars_carddef(),
+ brewmaster_serve_the_strong_stuff_carddef(),
+ brewmaster_zaboozer_carddef(),
+ brewmaster_spilled_drink_carddef(),
+ choose_S_and_R_carddef(),
+ hero_dash_helper_carddef(),
+ situational_card_carddef(),
+ bird_dog_def(),
+ patron_shoutout_def(),
+ wwyd_carddef(),
+ nostra_dbl_damus_carddef(),
+ blank_to_my_blank_carddef(),
+ congrats_youre_a_nerd_carddef(),
+
+ --Easter egg cards
+ --[[mythic_mercs_ee_scrapforks_carddef(),
+ mythic_mercs_ee_dblducks_carddef(),
+ mythic_mercs_ee_stigmalingpa_carddef(),
+ mythic_mercs_ee_agent_th_carddef(),
+ cat_familiar_token_carddef(),
+ kit_cat_token_carddef(),
+ chunky_cat_token_carddef(),
+ big_bad_kitty_token_carddef(),
+ surprise_dragon_token_carddef(),]]
+ mythic_mercs_ee_parsons_carddef(),
+ ee_demon_hunter_carddef()
+ }
+ )
+
+ standardSetup(
+ g,
+ {
+ description = "Multi-class script by Aarkenell and Userkaffe. Classes by Aarkenell, Userkaffe, AgentC13, Filtrophobe, Zabuza & WardenSlayer. Updated 31.10.2024.",
+ playerOrder = { plid1, plid2 },
+ ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
+ timeoutAi = createTimeoutAi(),
+ opponents = { { plid1, plid2 } },
+ centerRow = { --[["demon_hunter"]] },
+ tradeDeckExceptions = {
+ -- here we set which cards populate market deck
+ --[[ { qty=1, cardId="scrapforks" },
+ { qty=1, cardId="dblducks" },
+ { qty=1, cardId="stigmalingpa" },
+ { qty=1, cardId="agent_th" },]]
+ { qty=1, cardId="parsons_merc" },
+ { qty=1, cardId="demon_hunter" }
+
+ },
+ players = {
+ {
+ id = plid1,
+ startDraw = 0,
+ init = {
+ fromEnv = plid1
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(3),
+ goFirstEffect(),
+ discardCardsAtTurnStartDef(),
+ chooseStart(),
+ fatigueCount(42, 1, "FatigueP2")
+ }
+ }
+ },
+ {
+ id = plid2,
+ startDraw = 0,
+ init = {
+ fromEnv = plid2
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ chooseStart(),
+ fatigueCount(42, 1, "FatigueP2")
+ }
+ }
+ }
+ }
+ })
+end
+
+
+
+function endGame(g)
+end
+
+
+function setupMeta(meta)
+ meta.name = "tester 2"
+ meta.minLevel = 1
+ meta.maxLevel = 5
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/tester 2.lua"
+ meta.features = {
+}
+
+end
\ No newline at end of file
diff --git a/Aarkenell/Custom Class Clash (lvl 12).lua b/Aarkenell/Custom Class Clash (lvl 12).lua
new file mode 100644
index 0000000..d3ea95f
--- /dev/null
+++ b/Aarkenell/Custom Class Clash (lvl 12).lua
@@ -0,0 +1,8108 @@
+require "herorealms"
+require "decks"
+require "stdlib"
+require "stdcards"
+require "hardai"
+require "mediumai"
+require "easyai"
+
+--[[ Updated 25.09.2024 by Aarkenell
+Now Ancestry compatible - also accounts for Fighter Pauldron first turn buff -- still needs Barbarian armour reheal
+Quickstart (cards move direct to sacrificePloc)
+Succubus self-sac fixed
+Demonic Leech rework - now explodes once at 6 health]]
+
+-- Game start --
+local function chooseStart()
+ return cardChoiceSelectorEffect({
+ id = "SoG_Choice",
+ name = "First choice",
+ trigger = startOfTurnTrigger,
+
+ upperTitle = "Welcome! How would you like to proceed?",
+ lowerTitle = "",
+-- 1.1 choice
+ effectFirst= pushChoiceEffectWithTitle(
+ {
+
+ choices = {
+ -- 1.1a choice - choose custom
+ {
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+ .union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
+ .seq(gainCombatEffect(-1))
+ .seq(setPlayerNameEffect("Unknown", currentPid))
+ .seq(setPlayerAvatarEffect("assassin", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(50))
+ --[[.seq(createCardEffect(choose_S_and_R_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_paladin_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_witch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_shaman_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_king_midas_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_brewmaster_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_thandarlorian_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_terramancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_cryomancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_apothecary_carddef(), loc(currentPid, asidePloc)))]]
+ .seq(createCardEffect(choose_demonologist_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", "")),
+
+ layout = createLayout({
+ name = "Pick a custom class",
+ art = "art/T_Storm_Siregar",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ tags = {}
+ },
+ -- 1.1b choice - choose standard
+ {
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ condition = getHeroLevel(currentPid).lte(13).And(getHeroLevel(currentPid).gte(10)),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use your standard Hero?",
+ lowerTitle = ""
+ }),
+ layout = createLayout({
+ name = "Selected class",
+ art = "art/T_All_Heroes",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ }
+ },
+
+ upperTitle = "Make your choice.",
+ lowerTitle = "Do you want to play as a custom class, or use the character you picked when starting the game?",
+
+ }),
+-- 1.2 choice
+ effectSecond = pushChoiceEffectWithTitle(
+ {
+
+ choices = {
+ -- 1.2a choice - Updates to this mod
+ {
+ effect = nullEffect(),
+
+ layout = createLayout({
+ name = "Updates to this mod",
+ art = "art/T_fighter_sharpening_stone",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+ tags = {}
+ },
+ -- 1.2b choice - Other mods to try
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Other mods to try",
+ art = "art/treasures/T_spyglass",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ },
+
+ -- 1.2c choice - Community news
+ {
+ effect = storyTellEffectWithPortrait("ogre", "Hi! I’m Rob d’Ogrety, CEO of ‘Why’s Wizard Games?’")
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "And I’m Dwarfin Kastle – creator of the award-winning deckbuilding game about growing trees in space – Star Elms."))
+ .seq(storyTellEffectWithPortrait("ogre", "We just wanted to take a moment to say how much we love the community that has sprung up around Hero Realms…"))
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "We love you!"))
+ .seq(storyTellEffectWithPortrait("ogre", " …and how much we love the experiments and new ideas being offered through custom lua scripting."))
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "Yeah! We love lua!"))
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "Lua, Lua! Oh baby! Me gotta go! Aye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("ogre", " Thanks DK."))
+ .seq(storyTellEffectWithPortrait("ogre", "Be sure to join the Realms Rising server on Discord to share your feedback on this mod and to discover new custom games to play."))
+ .seq(storyTellEffectWithPortrait("ogre", "And listen to the Sparks and Recreation podcast for information on Community events, meta-analysis, and everything Hero Realms."))
+ .seq(storyTellEffectWithPortrait("ogre", "Or jump over to RealmsRising.com for in-depth articles on strategy and gameplay."))
+ .seq(storyTellEffectWithPortrait("origins_flawless_track", "And if you have ideas for new custom classes or scenarios you’d like to see, drop me, Aarkenell, a message in the Realms Rising Discord."))
+ .seq(storyTellEffectWithPortrait("ogre", "Whether you join the Realms Rising community or not, we hope you keep enjoying the game and all the custom content from our great community. "))
+ .seq(storyTellEffectWithPortrait("ogre", "Bye for now."))
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "Lua, Lua! Oh baby! We gotta go. Bye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("origins_flawless_track", "Please hit 'Undo' to return to the menu."))
+ ,
+ layout = createLayout({
+ name = "Community News",
+ art = "art/T_borg_ogre_mercenary",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ }
+
+ },
+
+ upperTitle = "What do you want to learn about?",
+ lowerTitle = "Be sure to hit 'Undo' after your selection, to return to the selection menu.",
+
+ }),
+
+-- 1.1 layout
+ layoutFirst = createLayout({
+ name = "To Battle!",
+ art = "art/T_Unify_Apsara",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+
+-- 1.2 layout
+ layoutSecond = createLayout({
+ name = "Updates & Info",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ xmlText=[[
+
+
+
+
+
+ ]] }) ,
+
+ turn = 1
+ })
+end
+
+
+-- Custom Class Selection cards
+function choose_demonologist_carddef()
+ return createDef({
+ id="choose_demonologist",
+ name="Choose the Demonologist",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_demonologist",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))) --here--
+ .seq(setPlayerNameEffect("Demonologist", currentPid))
+ .seq(setPlayerAvatarEffect("ruinos_zealot", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(50))
+ .seq(createCardEffect(demonologist_summon_demon_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(demonologist_summon_demon_master_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_shadow_feeder_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_void_guard_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_lesser_devourer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(demonologist_shadow_gem_carddef(), loc(currentPid, asidePloc)))
+
+--Confirm--
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Demonologist?",
+ lowerTitle = ""
+ }))
+
+--Level 12 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = gainMaxHealthEffect(currentPid, const(55).add(getPlayerMaxHealth(currentPid).negate()))
+ .seq(gainHealthEffect(55)),
+ layout = createLayout(
+ {
+ name = "Additional Health",
+ art = "avatars/ruinos_zealot",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(demonologist_summon_demon_ability_carddef(), currentSkillsLoc),
+ layout = createLayout(
+ {
+ name = "Summon Demon Minion",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 12: Choose an upgrade.",
+ lowerTitle = "Gain max health, or gain a level 1 Ability."
+ }))
+
+--Level 11 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("demonologist_shadow_gem")))
+ .seq(createCardEffect(demonologist_flawless_shadow_gem_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Flawless Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(demonologist_butcherclaw_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Butcherclaw",
+ art = "icons/slaughterclaw",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ health = 2,
+ isGuard = false,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 11: Choose a card to add to your deck.",
+ lowerTitle = "Replace Shadow Gem or add Butcherclaw to your deck."
+ }))
+
+--Level 10 Ability choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_incubus_ability").Or(isCardName("demonologist_summon_keeper_of_the_void_ability"))))
+ .seq(createCardEffect(demonologist_summon_karamight_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Summon Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_incubus_ability").Or(isCardName("demonologist_summon_keeper_of_the_void_ability"))))
+ .seq(createCardEffect(demonologist_summon_laughing_shade_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Summon Laughing Shade",
+ art = "art/epicart/dark_prince",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_incubus_ability").Or(isCardName("demonologist_summon_keeper_of_the_void_ability"))))
+ .seq(createCardEffect(demonologist_summon_ingaitch_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Summon Ingaitch",
+ art = "art/epicart/mythic_monster",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ }
+
+ },
+ upperTitle = "Level 10: Choose which ability you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 9 Armour choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(demonologist_demonic_amulet_carddef(), currentSkillsLoc),
+ layout = createLayout(
+ {
+ name = "Demonic Amulet",
+ art = "art/T_wizard_silverskull_amulet",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(demonologist_summoner_s_robes_carddef(), currentSkillsLoc),
+ layout = createLayout(
+ {
+ name = "Summoner's Robes",
+ art = "art/T_wizard_runic_robes",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 9: Choose your armour.",
+ lowerTitle = ""
+ }))
+
+
+--Level 8 Ability choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_demon_master_ability")))
+ .seq(createCardEffect(demonologist_summon_keeper_of_the_void_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Summon Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_demon_master_ability")))
+ .seq(createCardEffect(demonologist_summon_incubus_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 8: Choose which ability you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 7 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(demonologist_grimoire_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Grimoire",
+ art = "art/T_Evangelize",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(demonologist_scroll_of_summoning_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Scroll of Summoning",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 7: Choose a card to add to your deck.",
+ lowerTitle = ""
+ }))
+
+
+--Level 6 skill choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_dark_summon_skill").Or(isCardName("demonologist_fel_summon_skill")).Or(isCardName("demonologist_summon_demon_skill"))))
+ .seq(createCardEffect(demonologist_infernal_summon_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Infernal Summon",
+ art = "art/epicart/abyss_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_dark_summon_skill").Or(isCardName("demonologist_fel_summon_skill")).Or(isCardName("demonologist_summon_demon_skill"))))
+ .seq(createCardEffect(demonologist_malevolent_summon_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Malevolent Summon",
+ art = "art/epicart/rift_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_dark_summon_skill").Or(isCardName("demonologist_fel_summon_skill")).Or(isCardName("demonologist_summon_demon_skill"))))
+ .seq(createCardEffect(demonologist_sinister_summon_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Sinister Summon",
+ art = "art/epicart/infernal_gatekeeper",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 6: Choose which skill you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 5 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("demonologist_lesser_devourer")))
+.seq(createCardEffect(demonologist_devourer_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Devourer",
+ art = "art/epicart/thrasher_demon",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ })
+ ,
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("demonologist_void_guard")))
+.seq(createCardEffect(demonologist_void_sentinel_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Void Sentinel",
+ art = "art/epicart/dark_knight",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 5: Choose which card you would like to upgrade to.",
+ lowerTitle = "Replace Lesser Devourer or replace Void Guard."
+ }))
+
+--Level 4 skill choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_demon_skill")))
+ .seq(createCardEffect(demonologist_dark_summon_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Dark Summon",
+ art = "art/epicart/dark_leader",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("demonologist_summon_demon_skill")))
+ .seq(createCardEffect(demonologist_fel_summon_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Fel Summon",
+ art = "art/epicart/corpsemonger",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 4: Choose which skill you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+ })
+ },
+ layout = createLayout({
+ name = "Demonologist",
+ art = "art/epicart/dirge_of_scara",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function choose_pyromancer_carddef()
+ return createDef({
+ id="choose_pyromancer",
+ name="Choose the Pryomancer",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_pyromancer",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Pyromancer", currentPid))
+ .seq(setPlayerAvatarEffect("summoner", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(48).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(48))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_fuel_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_fuel_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_conflagration_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_conflagration_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 1), incrementCounterEffect("fuel_2p", 1)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 1), incrementCounterEffect("fuel_2p", 1)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 5), incrementCounterEffect("conflagration_2p", 5)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_sear_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_scorch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_fire_shard_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(pyromancer_combust_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/T_cleric_elixir_green",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/T_cleric_elixir_blue_purple",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the Pyromancer?",
+ }))
+
+--Level 12 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = gainMaxHealthEffect(currentPid, const(52).add(getPlayerMaxHealth(currentPid).negate()))
+ .seq(gainHealthEffect(52)),
+ layout = createLayout(
+ {
+ name = "Additional Health",
+ art = "avatars/summoner",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(pyromancer_play_with_fire_carddef(), currentSkillsLoc),
+ layout = createLayout(
+ {
+ name = "Play with fire",
+ art = "art/T_Spreading_Sparks",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 12: Choose an upgrade.",
+ lowerTitle = "Gain max health, or gain a level 1 Ability."
+ }))
+
+--Level 11 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(pyromancer_patronage_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Patronage",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("gold")).take(1))
+ .seq(createCardEffect(pyromancer_volatile_chemicals_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Volatile Chemicals",
+ art = "art/treasures/wizard_adept_s_components",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 11: Choose an upgrade.",
+ lowerTitle = "Add Patronage to your deck or replace a Gold with Volatile Chemicals."
+ }))
+
+--Level 10 Ability choice--
+.seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("conflagration_1p").Or(isCardName("conflagration_2p"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("conflagration_1p"), resetCounterEffect("conflagration_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_phoenix_fury_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_phoenix_fury_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 9), incrementCounterEffect("conflagration_2p", 9))),
+ layout = createLayout(
+ {
+ name = "Phoenix Fury",
+ art = "art/T_pillar_of_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("conflagration_1p").Or(isCardName("conflagration_2p"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("conflagration_1p"), resetCounterEffect("conflagration_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_phoenix_flames_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_phoenix_flames_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 7), incrementCounterEffect("conflagration_2p", 7))),
+
+ layout = createLayout(
+ {
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("conflagration_1p").Or(isCardName("conflagration_2p"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("conflagration_1p"), resetCounterEffect("conflagration_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_spirit_of_the_phoenix_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_spirit_of_the_phoenix_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 5), incrementCounterEffect("conflagration_2p", 5))),
+
+ layout = createLayout(
+ {
+ name = "Spirit of the Phoenix",
+ art = "art/T_darian_war_mage",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ }
+
+ },
+ upperTitle = "Level 10: Choose which ability you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 9 Armour choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(pyromancer_fire_gem_amulet_carddef(), currentSkillsLoc),
+ layout = createLayout(
+ {
+ name = "Fire Gem Amulet",
+ art = "art/T_fire_gem",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer1_flame_hood_carddef(), currentSkillsLoc), createCardEffect(pyromancer2_flame_hood_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Flame Hood",
+ art = "avatars/summoner",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 9: Choose your armour.",
+ lowerTitle = ""
+ }))
+
+--Level 8 Ability choice--
+.seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("conflagration_1p").Or(isCardName("conflagration_2p"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("conflagration_1p"), resetCounterEffect("conflagration_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_phoenix_frenzy_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_phoenix_frenzy_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 7), incrementCounterEffect("conflagration_2p", 7))),
+ layout = createLayout(
+ {
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("conflagration_1p").Or(isCardName("conflagration_2p"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_phoenix_flare_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_phoenix_flare_2p_carddef(), currentSkillsLoc))),
+
+
+ layout = createLayout(
+ {
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 8: Choose which ability you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 7 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(pyromancer_hearth_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Hearth",
+ art = "art/T_Blistering_Blaze",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(pyromancer_fire_elemental_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Fire Elemental",
+ art = "art/epicart/fire_spirit",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 7: Choose a card to add to your deck.",
+ lowerTitle = ""
+ }))
+
+--Level 6 skill choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_compulsive_research_1_skill").Or(isCardName("pyromancer_2p_compulsive_research_1_skill")).Or(isCardName("pyromancer_1p_considered_research_1_skill")).Or(isCardName("pyromancer_2p_considered_research_1_skill"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("fuel_1p"), resetCounterEffect("fuel_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_reckless_research_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_reckless_research_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 3), incrementCounterEffect("fuel_2p", 3))),
+
+ layout = createLayout(
+ {
+ name = "Reckless Research",
+ art = "art/epicart/erratic_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_compulsive_research_1_skill").Or(isCardName("pyromancer_2p_compulsive_research_1_skill")).Or(isCardName("pyromancer_1p_considered_research_1_skill")).Or(isCardName("pyromancer_2p_considered_research_1_skill"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("fuel_1p"), resetCounterEffect("fuel_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_obsessive_research_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_obsessive_research_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 2), incrementCounterEffect("fuel_2p", 2))),
+
+
+ layout = createLayout(
+ {
+ name = "Obsessive Research",
+ art = "art/epicart/mystic_researcher",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_compulsive_research_1_skill").Or(isCardName("pyromancer_2p_compulsive_research_1_skill")).Or(isCardName("pyromancer_1p_considered_research_1_skill")).Or(isCardName("pyromancer_2p_considered_research_1_skill"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("fuel_1p"), resetCounterEffect("fuel_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_focussed_research_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_focussed_research_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 1), incrementCounterEffect("fuel_2p", 1))),
+ layout = createLayout(
+ {
+ name = "Focussed Research",
+ art = "art/epicart/lesson_learned",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+ },
+ upperTitle = "Level 6: Choose which skill you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 5 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("Pyromancer_Combust")))
+.seq(createCardEffect(pyromancer_explode_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Explode",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+ ]],
+
+ })
+ ,
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("pyromancer_scorch")))
+.seq(createCardEffect(pyromancer_incinerate_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Incinerate",
+ art = "art/epicart/flame_strike",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 5: Choose which card you would like to upgrade to.",
+ lowerTitle = "Replace Combust or replace Scorch."
+ }))
+
+
+--Level 4 skill choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill").Or(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), resetCounterEffect("fuel_1p"), resetCounterEffect("fuel_2p")))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_compulsive_research_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_compulsive_research_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 2), incrementCounterEffect("fuel_2p", 2))),
+
+ layout = createLayout(
+ {
+ name = "Compulsive Research",
+ art = "art/epicart/frantic_digging",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill").Or(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_considered_research_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_considered_research_1carddef(), currentSkillsLoc))),
+ layout = createLayout(
+ {
+ name = "Considered Research",
+ art = "art/epicart/forbidden_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 4: Choose which skill you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+ })
+ },
+ layout = createLayout({
+ name = "Pyromancer",
+ art = "art/T_Blistering_Blaze",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+-- Demonologist cards -----------------------------------------------------------------------------------------------------------------------
+function demonologist_shadow_gem_carddef()
+ return createDef(
+ {
+ id = "demonologist_shadow_gem",
+ name = "Shadow Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_shadow_gem_sac",
+ PlayAllType = noPlayPlayType,
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Lose to give one minion +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 0,
+ max = 1,
+ check = minHealthCurrent(2),
+ targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow").seq(hitSelfEffect(1)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function demonologist_shadow_feeder_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_shadow_feeder",
+ name = "Shadow Feeder",
+ types = {minionType, demonType, championType, nosteaalType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "Shadow_feeder_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(2),gainCombatEffect(3),gainCombatEffect(1))
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Shadow Feeder",
+ art = "art/epicart/deathbringer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_void_guard_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_void_guard",
+ name = "Void guard",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "void_guard_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Void guard",
+ art = "art/T_Midnight_Knight",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function demonologist_lesser_devourer_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_lesser_devourer",
+ name = "Lesser Devourer",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "lesser_devourer_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource())),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Lesser Devourer",
+ art = "art/T_Demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function demonologist_summon_demon_carddef()
+ local cardLayout = createLayout({
+ name = "Summon",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_demon_skill",
+ name = "Summon Demon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/The_Summoning",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_demon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_demonic_leech_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_demonic_leech",
+ name = "Demonic leech",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonic_leech_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(1)
+ .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
+ }
+ ),
+ createAbility(
+ {
+ id = "demonic_leech_explode",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(5))).count().gte(1),
+ hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
+ nullEffect()),
+ }),
+
+ createAbility(
+ {
+ id = "demonic_leech_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_fel_hound_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "demonologist_fel_hound",
+ name = "Fel hound",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "fel_hound_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_succubus_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_succubus",
+ name = "Succubus",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "succubus_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushTargetedEffect({
+ desc = "Give target champion -1 permanently.",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
+ min = 0,
+ max = 1,
+ targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
+ }),
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_summon_demon_master_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Demon Master",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_demon_master_ability",
+ name = "Summon Demon Master",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_Angry_Skeleton",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_demon_master_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_demon_master_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon Master",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_demon_master_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_demon_master",
+ name = "Demon Master",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_demon_master_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ desc = "Prepare up to 2 other demon minions in play.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType).And(isCardName("demonologist_demon_master").invert())),
+ min = 0,
+ max = 2,
+ targetEffect = prepareTarget()
+
+ }))
+ }
+ ),
+ createAbility(
+ {
+ id = "demonologist_demon_master_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Demon Master",
+ art = "art/T_Angry_Skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_summon_incubus_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_incubus_ability",
+ name = "Summon Incubus",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/guilt_demon",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_incubus_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_incubus_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_incubus_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_incubus",
+ name = "Incubus",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_incubus_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3).seq(gainCombatEffect(getCounter("incubus")))
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_incubus_main",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = multipleActivations,
+ effect = incrementCounterEffect("incubus", 1)
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_incubus_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_summon_keeper_of_the_void_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_keeper_of_the_void_ability",
+ name = "Summon Keeper of the Void",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/spawning_demon",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_keeper_of_the_void_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_keeper_of_the_void_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_keeper_of_the_void_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_keeper_of_the_void",
+ name = "Keeper of the Void",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_keeper_of_the_void_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+ .seq(grantHealthTarget(divide(getCounter(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion").And(isCardName("demonologist_keeper_of_the_void").invert())).count()), 2), { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Void Keeper").apply(selectSource())),
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_keeper_of_the_void_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = true
+ })
+ }
+ )
+end
+
+function demonologist_summon_karamight_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_karamight_ability",
+ name = "Summon Karamight",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/raxxa_s_enforcer",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_karamight_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_karamight_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_karamight_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_karamight",
+ name = "Karamight",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_karamight_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(6),
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_karamight_stun",
+ trigger = uiTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Karamight").apply(selectSource())
+ .seq(pushTargetedEffect({
+ desc = "Stun a demon minion you own to gain +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 1,
+ max = 1,
+ targetEffect = stunTarget(),
+
+ })),
+ check = selectLoc(currentInPlayLoc).where(isCardType(minionType)).count().gte(1)
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_karamight_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 5,
+ isGuard = true
+ })
+ }
+ )
+end
+
+function demonologist_summon_laughing_shade_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Laughing Shade",
+ art = "art/epicart/dark_prince",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_laughing_shade_ability",
+ name = "Summon Laughing Shade",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/dark_prince",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_laughing_shade_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_laughing_shade_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Laughing Shade",
+ art = "art/epicart/dark_prince",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_laughing_shade_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_laughing_shade",
+ name = "Laughing Shade",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 5,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_laughing_shade_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4)
+ .seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a Action from the market. ",
+ validTargets = selectLoc(centerRowLoc).where(isCardType(actionType)),
+ min = 0,
+ max = 1,
+ targetEffect = sacrificeTarget().seq(gainCombatEffect(2)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Laughing Shade",
+ art = "art/epicart/dark_prince",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a Champion from the market. ",
+ validTargets = selectLoc(centerRowLoc).where(isCardType(championType)),
+ min = 0,
+ max = 1,
+ targetEffect = sacrificeTarget().seq(gainHealthEffect(3)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Laughing Shade",
+ art = "art/epicart/dark_prince",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )),
+
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_laughing_shade_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Laughing Shade",
+ art = "art/epicart/dark_prince",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 5,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_summon_ingaitch_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_ingaitch_ability",
+ name = "Summon Ingaitch the Ravenous",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/mythic_monster",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_ingaitch_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_ingaitch_carddef(), currentInPlayLoc),
+ check = getTurnsPlayed(currentPid).gte(3),
+ cost = sacrificeSelfCost,
+ }),
+ },
+
+ layout = createLayout(
+ {
+ name = "Summon Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_ingaitch_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_ingaitch",
+ name = "Ingaitch the Ravenous",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 7,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_ingaitch_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(7)
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_ingaitch_choice",
+ trigger = onExpendTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(4)
+ .seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainHealthEffect(-3),
+ layout = layoutCard(
+ {
+ title = "Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = grantHealthTarget(-1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Ingaitch").apply(selectSource()),
+ layout = layoutCard(
+ {
+ title = "Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )),
+
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_ingaitch_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 7,
+ isGuard = false
+ })
+ }
+ )
+end
+
+
+-- START Dark Summon SKILL
+function demonologist_dark_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Dark Summon",
+ art = "art/epicart/dark_leader",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_dark_summon_skill",
+ name = "Dark Summon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/dark_leader",
+ abilities = {
+ createAbility({
+ id = "demonologist_dark_summon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Giant Demonic Leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Raging Fel Hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Dark Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Randomly summon one of these 3 demon tokens into play.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Dark Summon",
+ art = "art/epicart/dark_leader",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+-- END Summon Demon Skill
+
+function demonologist_giant_demonic_leech_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_giant_demonic_leech",
+ name = "Demonic leech",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "giant_demonic_leech_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(1)
+ .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
+ }
+ ),
+ createAbility(
+ {
+ id = "giant_demonic_leech_explode",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(6))).count().gte(1),
+ hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
+ nullEffect()),
+ }),
+
+ createAbility(
+ {
+ id = "giant_demonic_leech_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Giant Demonic Leech",
+ art = "art/epicart/sand_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_raging_fel_hound_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "demonologist_raging_fel_hound",
+ name = "Raging Fel Hound",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "raging_fel_hound_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "raging_fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Raging Fel Hound",
+ art = "art/epicart/trihorror",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_dark_succubus_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_dark_succubus",
+ name = "Dark Succubus",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "dark_succubus_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushTargetedEffect({
+ desc = "Give target champion -1 permanently.",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
+ min = 0,
+ max = 1,
+ targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
+ }),
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "dark_succubus_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Dark Succubus",
+ art = "art/epicart/mirage_wielder",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+-- START Void sentinel CARD
+function demonologist_void_sentinel_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_void_sentinel",
+ name = "Void Sentinel",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "void_sentinel_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ ),
+ createAbility(
+ {
+ id = "void_sentinel_combo",
+ trigger = uiTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion")).count().gte(3),
+ effect = hitOpponentEffect(3)
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Void Sentinel",
+ art = "art/epicart/dark_knight",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+-- END Void sentinel CARD
+
+-- START Devourer CARD
+function demonologist_devourer_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_devourer",
+ name = "Devourer",
+ types = {minionType, championType, demonType, nostealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "devourer_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1).seq(hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource()))),
+ }
+ ),
+ createAbility(
+ {
+ id = "devourer_leaveplay",
+ trigger = onLeavePlayTrigger,
+ cost= noCost,
+ activations = singleActivations,
+ effect = gainHealthEffect(2),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Devourer",
+ art = "art/epicart/thrasher_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+-- END Devourer CARD
+
+
+-- START Fel Summon
+function demonologist_fel_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Fel Summon",
+ art = "art/epicart/corpsemonger",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_fel_summon_skill",
+ name = "Summon Demon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/corpsemonger",
+ abilities = {
+ createAbility({
+ id = "demonologist_fel_summon_demon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()).seq(drawCardsEffect(1)),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly. Then draw a card.",
+ lowerTitle = "Click any card to proceed."
+ })
+ .seq(drawCardsEffect(1)),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Fel Summon",
+ art = "art/epicart/corpsemonger",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+
+-- START Infernal Summon SKILL
+function demonologist_infernal_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Infernal Summon",
+ art = "art/epicart/abyss_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_infernal_summon_skill",
+ name = "Infernal Summon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/abyss_summoner",
+ abilities = {
+ createAbility({
+ id = "demonologist_infernal_summon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic Tyrant Leech",
+ art = "art/epicart/rampaging_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Flaming Fel Hound",
+ art = "art/epicart/scarros__hound_of_draka",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus Queen",
+ art = "art/epicart/drain_essence",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Randomly summon one of these 3 demon tokens into play.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Infernal Summon",
+ art = "art/epicart/abyss_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_demonic_tyrant_leech_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_demonic_tyrant_leech",
+ name = "Demonic Tyrant Leech",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "giant_demonic_leech_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(1).seq(gainCombatEffect(1))
+ .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
+ }
+ ),
+ createAbility(
+ {
+ id = "demonic_tyrant_leech_explode",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(6))).count().gte(1),
+ hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
+ nullEffect()),
+ }),
+
+ createAbility(
+ {
+ id = "demonic_tyrant_leech_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Demonic Tyrant Leech",
+ art = "art/epicart/rampaging_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_flaming_fel_hound_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "demonologist_raging_fel_hound",
+ name = "Raging Fel Hound",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "flaming_fel_hound_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "flaming_fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Flaming Fel Hound",
+ art = "art/epicart/scarros__hound_of_draka",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_succubus_queen_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_succubus_queen",
+ name = "Succubus Queen",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "succubus_queen_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ desc = "Give target champion -1 permanently.",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
+ min = 0,
+ max = 1,
+ targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
+ })),
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "succubus_queen_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Succubus Quuen",
+ art = "art/epicart/drain_essence",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+-- START Malevolent Summon SKILL
+function demonologist_malevolent_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Malevolent Summon",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_malevolent_summon_skill",
+ name = "Malevolent Summon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/rift_summoner",
+ abilities = {
+ createAbility({
+ id = "demonologist_malevolent_summon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Giant Demonic Leech",
+ art = "art/epicart/sand_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Raging Fel Hound",
+ art = "art/epicart/trihorror",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Dark Succubus",
+ art = "art/epicart/mirage_wielder",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Randomly summon one of these 3 demon tokens into play.",
+ lowerTitle = "Click any card to proceed."
+ })
+ .seq(drawCardsEffect(1))
+ ,
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Malevolent Summon",
+ art = "art/epicart/rift_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+
+-- START Sinister Summon
+function demonologist_sinister_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Sinister Summon",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_sinister_summon_skill",
+ name = "Summon Demon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/infernal_gatekeeper",
+ abilities = {
+ createAbility({
+ id = "demonologist_sinister_summon_demon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = gainHealthEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = gainHealthEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = gainHealthEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly. Then draw a card.",
+ lowerTitle = "Click any card to proceed."
+ })
+ .seq(drawCardsEffect(1)),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Sinister Summon",
+ art = "art/epicart/infernal_gatekeeper",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+
+function demonologist_grimoire_carddef()
+ return createDef(
+ {
+ id = "demonologist_grimoire",
+ name = "Grimoire",
+ types = {noStealType, itemType, noPlayType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_grimoire",
+ layout = cardLayout,
+ effect = gainHealthEffect((selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("Minion"))).count()).seq(drawCardsEffect(1)),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Grimoire",
+ art = "art/T_Evangelize",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function demonologist_scroll_of_summoning_carddef()
+ return createDef(
+ {
+ id = "demonologist_sos",
+ name = "Scroll of Summoning",
+ types = {noStealType, itemType, noPlayType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_sos",
+ layout = cardLayout,
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Choose one of these 3 demon tokens to summon.",
+ lowerTitle = "Click the card you want to summon."
+ })
+ .seq(drawCardsEffect(1)),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Scroll of Summoning",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function demonologist_flawless_shadow_gem_carddef()
+ return createDef(
+ {
+ id = "demonologist_flawless_shadow_gem",
+ name = "Flawless Shadow Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_flawless_shadow_gem_sac",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(2),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_flawless_shadow_gem_buff",
+ cost = noCost,
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Give one minion +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 0,
+ max = 1,
+ targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow"),
+ }),
+ tags = {}
+ }
+ ),
+
+ },
+ layout = createLayout(
+ {
+ name = "Flawless Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function demonologist_butcherclaw_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_butcherclaw",
+ name = "Butcherclaw",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_butcherclaw_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2),
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_butcherclaw_spike",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ prompt = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a champion in your discard pile. Sprout a spike equal to its cost.",
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion().And(getCardCost().gte(1))),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, asidePloc))
+ .seq(incrementCounterEffect("black_spike_guard", selectLoc(loc(currentPid, asidePloc)).take(1).sum(getCardCost())))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(createCardEffect(demonologist_spike_carddef(), revealLoc))
+ .seq(grantHealthTarget(getCounter("black_spike_guard")).apply(selectLoc(revealLoc)))
+ .seq(moveTarget(currentInPlayLoc).apply(selectLoc(revealLoc)))
+ .seq(resetCounterEffect("black_spike_guard"))
+ })
+
+
+ ,
+ check = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion()).count().gte(1)
+
+ }
+ ),
+
+ },
+ layout = createLayout({
+ name = "Butcherclaw",
+ prompt = showPrompt,
+ art = "icons/slaughterclaw",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 2,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_spike_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_spike",
+ name = "Spike",
+ types = {championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 0,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "spike_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(selectSource().sum(getCardHealth()))
+ }
+ ),
+
+ createAbility(
+ {
+ id = "spike_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = hitSelfEffect(2)
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Spike",
+ art = "features/warinthewild/slaughterclaw_spike",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 0,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_summon_demon_ability_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Demon Minion",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_demon_ability",
+ name = "Summon Demon Minion",
+ types = { abilityType },
+ layout = cardLayout,
+ layoutPath = "icons/The_Summoning",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_demon_minion_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+}).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/T_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+}).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+}).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/Succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon Minion",
+ art = "icons/The_Summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+
+ })
+end
+
+function demonologist_demonic_amulet_carddef()
+
+ local cardLayout = createLayout({
+ name = "Demonic Amulet",
+ art = "art/T_wizard_silverskull_amulet",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "demonologist_demonic_amulet",
+ name = "Demonic Amulet",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "icons/wizard_pure_channel",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_demonic_amulet",
+ cost = expendCost,
+ trigger = autoTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = gainHealthEffect(2),
+ check= minHealthCurrent(35)
+ .And(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType(demonType).And(isCardType(tokenType))).count().gte(1)),
+ tags = {}
+ }
+ ),
+
+ },
+
+
+ }
+ )
+end
+
+function demonologist_summoner_s_robes_carddef()
+
+ local cardLayout = createLayout({
+ name = "Summoner's Robes",
+ art = "art/T_wizard_runic_robes",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "demonologist_summoner_s_robes",
+ name = "Demonic Amulet",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "icons/wizard_runic_robes",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_summoner_s_robes",
+ cost = expendCost,
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = gainHealthEffect(-2).seq(addSlotToPlayerEffect(controllerPid, createPlayerIntExpressionSlot(skillCostModKey, toIntExpression(-1), { endOfTurnExpiry }))),
+ check= minHealthCurrent(25),
+ tags = {}
+ }
+ ),
+
+ },
+
+
+ }
+ )
+end
+
+
+-- Pyromancer cards -----------------------------------------------------------------------------------------------------------------------
+function pyromancer_combust_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Combust",
+ name = "combust",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="Pyromancer_Combust_combat",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(1)
+ }),
+ createAbility({
+ id="Pyromancer_Combust_FGsac",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
+ effect = gainCombatEffect(2)
+
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Combust",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_sear_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Sear",
+ name = "sear",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Sear",
+ layout = cardLayout,
+ effect = gainCombatEffect(2),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Sear",
+ art = "art/epicart/flame_spike",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_scorch_carddef()
+ return createDef(
+ {
+ id = "pyromancer_scorch",
+ name = "Scorch",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Scorch",
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(damageTarget(1).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Scorch",
+ art = "art/epicart/flame_strike",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_shard_carddef()
+ return createDef(
+ {
+ id = "pyromancer_fire_shard",
+ name = "Fire Shard",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_fire_shard",
+ layout = cardLayout,
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(1),
+ layout = layoutCard(
+ {
+ title = "Fire Shard",
+ art = "art/treasures/Thief_Sharpened_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainGold1Tag}
+ },
+ {
+ effect = createCardEffect(fire_gem_carddef(), currentDiscardLoc),
+ layout = layoutCard(
+ {
+ title = "Fire Shard",
+ art = "art/treasures/Thief_Sharpened_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Fire Shard",
+ art = "art/treasures/Thief_Sharpened_ruby",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_conflagration_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
+
+function pyromancer_conflagration_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
+
+function pyromancer_explode_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Explode",
+ name = "explode",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="Pyromancer_explode_combat",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(3)
+ }),
+ createAbility({
+ id="Pyromancer_explode_FGsac",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
+ effect = gainCombatEffect(2)
+
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Explode",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_incinerate_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_incinerate",
+ name = "Incinerate",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Incinerate",
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Incinerate",
+ art = "art/epicart/flame_strike",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_patronage_carddef()
+ return createDef(
+ {
+ id = "pyromancer_patronage",
+ name = "Patronage",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_patronage",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(2),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "pyromancer_patronage_sac",
+ cost = sacrificeSelfCost,
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = prepareTarget().apply(selectLoc(currentSkillsLoc)),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Patronage",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_elemental_carddef()
+ return createChampionDef(
+ {
+ id = "pyromancer_fire_elemental",
+ name = "Fire Elemental",
+ types = { championType, nosteaalType},
+ acquireCost = 0,
+ health = 3,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "Fire_elemental_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Fire Elemental",
+ art = "art/epicart/fire_spirit",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_hearth_carddef()
+
+ return createDef(
+ {
+ id = "pyromancer_hearth",
+ name = "Hearth",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_hearth",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainHealthEffect(3),
+ layout = layoutCard(
+ {
+ title = "Hearth",
+ art = "art/T_Blistering_Blaze",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = drawCardsEffect(1),
+ layout = layoutCard(
+ {
+ title = "Hearth",
+ art = "art/T_Blistering_Blaze",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Hearth",
+ art = "art/T_Blistering_Blaze",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_volatile_chemicals_carddef()
+
+ return createDef(
+ {
+ id = "pyromancer_volatile_chemicals",
+ name = "Volatile Chemicals",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_volatile_chemicals",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(1).seq(gainCombatEffect(2)),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Volatile Chemicals",
+ art = "art/treasures/wizard_adept_s_components",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_gem_amulet_carddef()
+
+ local cardLayout = createLayout({
+ name = "Fire Gem Amulet",
+ art = "art/T_fire_gem",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "pyromancer_fire_gem_amulet",
+ name = "Fire Gem Amulet",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "art/T_fire_gem",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_fire_gem_amulet",
+ cost = expendCost,
+ trigger = autoTrigger,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = createCardEffect(pyromancer_fire_bird_carddef(), currentInPlayLoc),
+ check= minHealthCurrent(25)
+ .And(selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1))
+ .And(((selectLoc(loc(currentPid, inPlayPloc))).where(isCardName("pyromancer_fire_bird")).count().eq(0))),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "pyromancer_fire_gem_amulet2",
+ cost = expendCost,
+ trigger = autoTrigger,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Fire Gem Amulet").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardName("pyromancer_fire_bird"))),
+ check= minHealthCurrent(25)
+ .And(selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1))
+ .And(((selectLoc(loc(currentPid, inPlayPloc))).where(isCardName("pyromancer_fire_bird")).count().eq(1))),
+ tags = {}
+ }
+ ),
+
+ },
+
+
+ }
+ )
+end
+
+function pyromancer_fire_bird_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "pyromancer_fire_bird",
+ name = "Fire Bird",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "fire_bird_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(selectSource().sum(getCardHealth()))
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fire_bird_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Fire Bird",
+ art = "art/epicart/fire_shaman",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function pyromancer1_flame_hood_carddef()
+
+ local cardLayout = createLayout({
+ name = "Flame Hood",
+ art = "avatars/summoner",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "pyromancer1_flame_hood",
+ name = "Flame Hood",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "avatars/summoner",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer1_flame_hood",
+ cost = expendCost,
+ trigger = uiTrigger,
+ layout = cardLayout,
+ promptType = showPrompt,
+ activations = singleActivations,
+ effect = gainGoldEffect(-1).seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(abilityType)).count().eq(0),
+ gainCombatEffect(2),
+ incrementCounterEffect("conflagration_1p", (2)))),
+ check = minHealthCurrent(25).And(getPlayerGold(ownerPid).gte(1)),
+
+ tags = {}
+ }
+ ),
+
+
+ },
+
+
+ }
+ )
+end
+
+function pyromancer2_flame_hood_carddef()
+
+ local cardLayout = createLayout({
+ name = "Flame Hood",
+ art = "avatars/summoner",
+ frame = "frames/Wizard_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "pyromancer2_flame_hood",
+ name = "Flame Hood",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "avatars/summoner",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer2_flame_hood",
+ cost = expendCost,
+ trigger = uiTrigger,
+ layout = cardLayout,
+ promptType = showPrompt,
+ activations = singleActivations,
+ effect = gainGoldEffect(-1).seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(abilityType)).count().eq(0),
+ gainCombatEffect(2),
+ incrementCounterEffect("conflagration_2p", (2)))),
+ check = minHealthCurrent(25).And(getPlayerGold(ownerPid).gte(1)),
+
+ tags = {}
+ }
+ ),
+
+
+ },
+
+
+ }
+ )
+end
+
+--START skills - Research Phoenix Fire (for level 3 heroes) (Skill-1)
+function pyromancer_1p_fuel_1carddef()
+ local cardLayout = createLayout({
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_fuel_1_skill",
+ name = "Research Phoenix Fire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/arcane_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_fuel_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_fuel_1carddef()
+ local cardLayout = createLayout({
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_fuel_1_skill",
+ name = "Research Phoenix Fire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/arcane_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_fuel_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(gainHealthEffect(1)),
+ cost = goldCost(2)
+ }),
+ }
+
+ })
+end
+
+
+-- START Compulsive Research (Skill-2a)
+function pyromancer_1p_compulsive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Compulsive Research",
+ art = "art/epicart/frantic_digging",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_compulsive_research_1_skill",
+ name = "Compulsive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/frantic_digging",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_compulsive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(5)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_compulsive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Compulsive Research",
+ art = "art/epicart/frantic_digging",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_compulsive_research_1_skill",
+ name = "Compulsive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/frantic_digging",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_compulsive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(5)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Crazed Research (Skill-3a)
+function pyromancer_1p_reckless_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Reckless Research",
+ art = "art/epicart/erratic_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_reckless_research_1_skill",
+ name = "Reckless Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/erratic_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_reckless_research_1_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainHealthEffect(-1).seq(incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p"))))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(6)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_reckless_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Reckless Research",
+ art = "art/epicart/erratic_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_reckless_research_1_skill",
+ name = "Reckless Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/erratic_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_reckless_research_1_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainHealthEffect(-1).seq(incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p"))))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(6)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Obsessive Research (Skill-3b)
+function pyromancer_1p_obsessive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Obsessive Research",
+ art = "art/epicart/mystic_researcher",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_obsessive_research_1_skill",
+ name = "Obsessive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/mystic_researcher",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_obsessive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(5)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_obsessive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Obsessive Research",
+ art = "art/epicart/mystic_researcher",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_obsessive_research_1_skill",
+ name = "Obsessive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/mystic_researcher",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_obsessive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(5)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Considered Research (Skill-2b)
+function pyromancer_1p_considered_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Considered Research",
+ art = "art/epicart/forbidden_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_considered_research_1_skill",
+ name = "Considered Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/forbidden_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_considered_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_considered_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Considered Research",
+ art = "art/epicart/forbidden_research",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_considered_research_1_skill",
+ name = "Considered Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/forbidden_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_considered_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Focussed Research (Skill-3c)
+function pyromancer_1p_focussed_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Focussed Research",
+ art = "art/epicart/lesson_learned",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_focussed_research_1_skill",
+ name = "Focussed Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/lesson_learned",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_focussed_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
+ .seq(gainHealthEffect(2)).seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_focussed_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Focussed Research",
+ art = "art/epicart/lesson_learned",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_focussed_research_1_skill",
+ name = "Focussed Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/lesson_learned",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_focussed_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
+ .seq(gainHealthEffect(2)).seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+--START Afterburn upgrades
+function pyromancer_after_burn_3a_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_3a_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_3a",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainCombatEffect(3).seq(gainHealthEffect(1)),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_3b_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_3b_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_3b",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainCombatEffect(3).seq(gainHealthEffect(1))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_3c_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_3c_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_3c",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(gainHealthEffect(3))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+
+-- START Ability upgrades 1p
+--4a Phoenix Frenzy
+function pyromancer_phoenix_frenzy_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Frenzy",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/fireball",
+ })
+end
+
+--5a Phoenix Fury
+function pyromancer_phoenix_fury_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Fury",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/T_pillar_of_fire",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/T_pillar_of_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/T_pillar_of_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+
+ layoutPath = "art/T_pillar_of_fire",
+ })
+end
+
+--4b Phoenix Flare
+function pyromancer_phoenix_flare_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Flare",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(6))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+
+ layoutPath = "art/epicart/ascendant_pyromancer",
+ })
+end
+
+--5b Phoenix Flames
+function pyromancer_phoenix_flames_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Flames",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(6))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/flames_of_furios",
+ })
+end
+
+--5c Spirit of the Phoenix
+function pyromancer_spirit_of_the_phoenix_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Spirit of the Phoenix",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/T_darian_war_mage",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(11))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/T_darian_war_mage",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/T_darian_war_mage",
+ })
+end
+
+-- START Ability upgrades 2p
+--4a Phoenix Frenzy
+function pyromancer_phoenix_frenzy_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Frenzy",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/fireball",
+ })
+end
+
+--5a Phoenix Fury
+function pyromancer_phoenix_fury_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Fury",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/T_pillar_of_fire",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/T_pillar_of_fire",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/T_pillar_of_fire",
+ })
+end
+
+--4b Phoenix Flare
+function pyromancer_phoenix_flare_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Flare",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p")).seq(gainHealthEffect(6))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/ascendant_pyromancer",
+ })
+end
+
+--5b Phoenix Flames
+function pyromancer_phoenix_flames_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Flames",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p")).seq(gainHealthEffect(6))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/flames_of_furios",
+ })
+end
+
+--5c Spirit of the Phoenix
+function pyromancer_spirit_of_the_phoenix_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Spirit of the Phoenix",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/T_darian_war_mage",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p")).seq(gainHealthEffect(11))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/T_darian_war_mage",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/T_darian_war_mage",
+ })
+end
+
+function pyromancer_play_with_fire_carddef()
+ return createHeroAbilityDef({
+ id = "play_with_fire",
+ name = "Play With Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility( {
+ id = "play_with_fire_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Play With Fire",
+ art = "art/T_Spreading_Sparks",
+ xmlText = [[
+
+
+
+ ]]
+
+ }),
+ effect = gainCombatEffect(2),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout({
+ name = "Play With Fire",
+ art = "art/T_Spreading_Sparks",
+ frame = "frames/Wizard_CardFrame",
+ xmlText = [[
+
+
+
+ ]]
+ }),
+ layoutPath = "art/T_Spreading_Sparks",
+ })
+end
+
+
+-- End of Pyro Cards -----------------------------------------------------------------------------------------------------------------------
+
+-- Auxiliary effects
+local function goFirstEffect()
+-- this is a dirty hack to make player going first only draw three cards for their first turn. Feel free to replace it with a better implementation.
+ return createGlobalBuff({
+ id="draw_three_start_buff",
+ name = "Go First",
+ abilities = {
+ createAbility({
+ id="go_first_draw_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(
+ getTurnsPlayed(oppPid).eq(1),
+ nullEffect(),
+ drawCardsEffect(2)
+ )
+ })
+ }
+ })
+end
+
+function setupGame(g)
+ registerCards(
+ g,
+ {
+ choose_demonologist_carddef(),
+ demonologist_shadow_gem_carddef(),
+ demonologist_shadow_feeder_carddef(),
+ demonologist_void_guard_carddef(),
+ demonologist_lesser_devourer_carddef(),
+ demonologist_summon_demon_master_carddef(),
+ demonologist_demonic_leech_carddef(),
+ demonologist_succubus_carddef(),
+ demonologist_fel_hound_carddef(),
+ demonologist_incubus_carddef(),
+ demonologist_keeper_of_the_void_carddef(),
+ demonologist_demon_master_carddef(),
+ demonologist_dark_summon_carddef(),
+ demonologist_fel_summon_carddef(),
+ demonologist_dark_succubus_carddef(),
+ demonologist_raging_fel_hound_carddef(),
+ demonologist_giant_demonic_leech_carddef(),
+ demonologist_void_sentinel_carddef(),
+ demonologist_devourer_carddef(),
+ demonologist_infernal_summon_carddef(),
+ demonologist_demonic_tyrant_leech_carddef(),
+ demonologist_succubus_queen_carddef(),
+ demonologist_flaming_fel_hound_carddef(),
+ demonologist_malevolent_summon_carddef(),
+ demonologist_sinister_summon_carddef(),
+ demonologist_grimoire_carddef(),
+ demonologist_scroll_of_summoning_carddef(),
+ demonologist_summon_karamight_carddef(),
+ demonologist_karamight_carddef(),
+ demonologist_summon_laughing_shade_carddef(),
+ demonologist_laughing_shade_carddef(),
+ demonologist_summon_ingaitch_carddef(),
+ demonologist_ingaitch_carddef(),
+ demonologist_flawless_shadow_gem_carddef(),
+ demonologist_butcherclaw_carddef(),
+ demonologist_spike_carddef(),
+ demonologist_summon_demon_ability_carddef(),
+ demonologist_demonic_amulet_carddef(),
+ demonologist_summoner_s_robes_carddef(),
+
+choose_pyromancer_carddef(),
+ pyromancer_sear_carddef(),
+ pyromancer_scorch_carddef(),
+ pyromancer_fire_shard_carddef(),
+ pyromancer_combust_carddef(),
+ pyromancer_1p_fuel_1carddef(),
+ pyromancer_2p_fuel_1carddef(),
+ pyromancer_explode_carddef(),
+ pyromancer_incinerate_carddef(),
+ pyromancer_patronage_carddef(),
+ pyromancer_fire_elemental_carddef(),
+ pyromancer_hearth_carddef(),
+ pyromancer_volatile_chemicals_carddef(),
+ pyromancer_fire_bird_carddef(),
+ pyromancer1_flame_hood_carddef(),
+ pyromancer2_flame_hood_carddef(),
+ pyromancer_after_burn_3a_carddef(),
+ pyromancer_after_burn_3b_carddef(),
+ pyromancer_after_burn_3c_carddef()
+--[[
+ choose_apothecary_carddef(),
+ apothecary_apprentice_potion_maker_carddef(),
+ apothecary_red_potion_carddef(),
+ apothecary_green_potion_carddef(),
+ apothecary_yellow_potion_carddef(),
+ apothecary_mezzaluna_carddef(),
+ choose_cryomancer_carddef(),
+ cryomancer_ice_burst_carddef(),
+ cryomancer_ice_shield_carddef(),
+ cryomancer_ice_gem_carddef(),
+ cryomancer_freeze_carddef(),
+ cryomancer_frostbite_carddef(),
+ choose_terramancer_carddef(),
+ terramancer_earth_gem_carddef(),
+ terramancer_hurl_boulder_carddef(),
+ terramancer_tremor_carddef(),
+ terramancer_clay_golem_carddef(),
+ terramancer_move_earth_carddef(),
+ terramancer_move_earth_free_carddef(),
+ terramancer_swallowed_by_the_earth_def(),
+ choose_thandarlorian_carddef(),
+ thandarlorian_coordinated_attack_carddef(),
+ thandarlorian_combat_shield_carddef(),
+ thandarlorian_hand_ballista_carddef(),
+ thandarlorian_bounty_hunters_stone_of_seeking_carddef(),
+ choose_paladin_carddef(),
+ paladin_warhammer_carddef(),
+ paladin_crusader_carddef(),
+ paladin_prayer_carddef(),
+ paladin_sacred_oath_carddef(),
+ choose_witch_carddef(),
+ witch_flash_freeze_carddef(),
+ witch_cauldron_carddef(),
+ siphon_life_def(),
+ piercing_screech_def(),
+ choose_shaman_carddef(),
+ flame_burst_carddef(),
+ call_lightning_carddef(),
+ gift_of_the_elements_carddef(),
+ natures_blessing_carddef(),
+ choose_king_midas_carddef(),
+ midas_kings_adviser_carddef(),
+ greed_is_good_skilldef(),
+ golden_touch_abilitydef(),
+ midas_liquid_gold_carddef(),
+ midas_gold_carddef(),
+ choose_brewmaster_carddef(),
+ brewmaster_mead_carddef(),
+ brewmaster_get_out_of_my_bar_carddef(),
+ brewmaster_tap_a_keg_carddef(),
+ brewmaster_regular_regulars_carddef(),
+ brewmaster_irregular_regulars_carddef(),
+ brewmaster_serve_the_strong_stuff_carddef(),
+ brewmaster_zaboozer_carddef(),
+ brewmaster_spilled_drink_carddef(),
+ choose_S_and_R_carddef(),
+ hero_dash_helper_carddef(),
+ situational_card_carddef(),
+ bird_dog_def(),
+ patron_shoutout_def(),
+ wwyd_carddef(),
+ nostra_dbl_damus_carddef(),
+ blank_to_my_blank_carddef(),
+ congrats_youre_a_nerd_carddef(),
+ --Easter egg cards
+ --[[mythic_mercs_ee_scrapforks_carddef(),
+ mythic_mercs_ee_dblducks_carddef(),
+ mythic_mercs_ee_stigmalingpa_carddef(),
+ mythic_mercs_ee_agent_th_carddef(),
+ cat_familiar_token_carddef(),
+ kit_cat_token_carddef(),
+ chunky_cat_token_carddef(),
+ big_bad_kitty_token_carddef(),
+ surprise_dragon_token_carddef(),
+ mythic_mercs_ee_parsons_carddef(),
+ ee_demon_hunter_carddef()]]
+
+ }
+ )
+
+ standardSetup(
+ g,
+ {
+ description = "Custom Class Clash (level 12) script and classes by Aarkenell. Created 12.04.2024. Updated 08.10.24",
+ playerOrder = { plid1, plid2 },
+ ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
+ timeoutAi = createTimeoutAi(),
+ opponents = { { plid1, plid2 } },
+ tradeDeckExceptions = {
+ -- here we set which cards populate market deck
+ --[[ { qty=1, cardId="scrapforks" },
+ { qty=1, cardId="dblducks" },
+ { qty=1, cardId="stigmalingpa" },
+ { qty=1, cardId="agent_th" },
+ { qty=1, cardId="parsons_merc" },
+ { qty=1, cardId="demon_hunter" }
+ ]]
+ },
+ players = {
+ {
+ id = plid1,
+ startDraw = 0,
+ init = {
+ fromEnv = plid1
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(3),
+ goFirstEffect(),
+ discardCardsAtTurnStartDef(),
+ chooseStart(),
+ fatigueCount(42, 1, "FatigueP2")
+ }
+ }
+ },
+ {
+ id = plid2,
+ startDraw = 0,
+ init = {
+ fromEnv = plid2
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ chooseStart(),
+ fatigueCount(42, 1, "FatigueP2")
+ }
+ }
+ }
+ }
+ })
+end
+
+
+
+function endGame(g)
+end
+
+
+
+function setupMeta(meta)
+ meta.name = "Custom Class Clash (lvl 12)"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/Custom Class Clash (lvl 12).lua"
+ meta.features = {
+}
+
+end
\ No newline at end of file
diff --git a/Aarkenell/Dual class.lua b/Aarkenell/Dual class.lua
new file mode 100644
index 0000000..8a0f33e
--- /dev/null
+++ b/Aarkenell/Dual class.lua
@@ -0,0 +1,3055 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+require 'timeoutai'
+require 'hardai_2'
+require 'aggressiveai'
+
+--=======================================================================================================
+-- This is a proof of concept script to be able to play a custom class at any level without needing
+-- to remember what level to send a challenge.
+
+
+--=======================================================================================================
+-- simple choice effect, showing two layouts and executing selected one, triggers at the game start
+local function chooseTheClass()
+
+ local ef_learn_levels = leftStoryTellEffectWithPortrait("ambushers", "Because of this, it is recommended you play this mod with characters at level 5 or higher, as this is when the secondary skill is granted.")
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "Whatever level you choose to play at though, I hope you enjoy the chaos...err.. I mean fun, of the Dual-class experience."))
+ .seq(pushChoiceEffect({
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Return to Select Card Packs",
+ art = "avatars/ambushers",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ },
+ }}))
+
+ local RandomWiz = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomThief = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomRanger = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomFighter = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomCleric = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomBard = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomBarb = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomAlch = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomMonk = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomDruid = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ local RandomNecro = randomEffect({
+ valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ })
+
+ return cardChoiceSelectorEffect({
+ id = "SoG_Choice",
+ name = "First choice",
+ trigger = startOfTurnTrigger,
+
+ upperTitle = "Welcome! How would you like to proceed?",
+ lowerTitle = "",
+-- 1. choose and play
+ effectFirst= pushChoiceEffectWithTitle(
+ {
+
+ choices = {
+ -- Choice 1.1: Choose dual
+ {
+ effect = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(clericType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(fighterType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(rangerType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(thiefType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(wizardType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(alchemistType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(barbarianType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(bardType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(druidType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(monkType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(necromancerType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc)))),
+
+ layout = layoutCard(
+ {
+ title = "Dual Class",
+ art = "art/T_Storm_Siregar",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 1.2 - Random selection
+ {
+ effect = storyTellEffectWithPortrait("journeys/fettered_imp", "Allow me to assist you.")
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(clericType)).count().gte(1),addEffect(RandomCleric),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(fighterType)).count().gte(1),addEffect(RandomFighter),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(rangerType)).count().gte(1),addEffect(RandomRanger),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(thiefType)).count().gte(1),addEffect(RandomThief),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(wizardType)).count().gte(1),addEffect(RandomWiz),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(alchemistType)).count().gte(1),addEffect(RandomAlch),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(barbarianType)).count().gte(1),addEffect(RandomBarb),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(bardType)).count().gte(1),addEffect(RandomBard),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(druidType)).count().gte(1),addEffect(RandomDruid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(monkType)).count().gte(1),addEffect(RandomMonk),nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(necromancerType)).count().gte(1),addEffect(RandomNecro),nullEffect()))
+ ,
+ layout = layoutCard(
+ {
+ title = "Select Randomly",
+ art = "avatars/journeys/fettered_imp",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ },
+
+ upperTitle = "Choose yourself or let our AI Imp decide.",
+ lowerTitle = "",
+
+ }),
+
+-- 1.2 choice
+ effectSecond = waitForClickEffect("After years of competition and arguing between the various Guilds and Schools in Thandar...", "")
+ .seq(waitForClickEffect("...the Emperor decreed that they should open their doors to each other...", ""))
+ .seq(waitForClickEffect("...so that the Heroes of the Realm could learn new skills and diversify their battle tactics.", ""))
+
+.seq(leftStoryTellEffectWithPortrait("ambushers", "Welcome to the Dual-class mod!"))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "This mod allows you to choose a second class to utilise alongside that of your hero."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "Selecting a secondary class will do a number of things."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "For most classes, one Gold in your starting deck will be replaced with an economy card from your new secondary class."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "And, for most classes, another card from your secondary class will be added to your deck."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "There are some exceptions, including some classes that get 2 cards added, on top of the change to a gold."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "The exact changes to each secondary class are listed on each of the cards for selecting that class as your Dual-class."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "Lastly, new skills, abilities and cards will be added depending on your Hero Level."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "These are not listed on the cards, but we'll show you them here."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "Here's how upgrades work..."))
+.seq(pushChoiceEffectWithTitle(
+ {
+
+ choices = {
+ -- 1.2a Gold cahnge & add cards
+ {
+ effect = ef_learn_levels,
+
+ layout = createLayout({
+ name = "Deck Changes",
+ art = "art/epicart/arm",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ tags = {}
+ },
+ -- 1.2b Exceptions
+ {
+ effect = ef_learn_levels,
+
+ layout = createLayout({
+ name = "Exceptions to Deck Changes",
+ art = "art/epicart/arm",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ tags = {}
+ },
+ -- 1.2c Level prog 1
+ {
+ effect = ef_learn_levels,
+ layout = createLayout({
+ name = "Level Progression",
+ art = "art/epicart/halt_",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ },
+
+ -- 1.2d Level prog 2
+ {
+ effect = ef_learn_levels,
+ layout = createLayout({
+ name = "Level Progression cont.",
+ art = "art/epicart/halt_",
+ xmlText=[[
+
+
+
+
+
+ ]] }),
+ tags = {}
+ }
+
+ },
+
+ upperTitle = "When done, click any card to continue.",
+ lowerTitle = "",
+
+ })),
+
+
+
+
+
+-- 1.1 layout
+ layoutFirst = createLayout({
+ name = "Choose a Dual Class",
+ art = "art/T_Storm_Siregar",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]] }),
+
+-- 1.2 layout
+ layoutSecond = createLayout({
+ name = "Learn about the mod",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+
+ turn = 1
+ })
+end
+
+
+
+local function goFirstEffect()
+ return createGlobalBuff({
+ id="draw_three_start_buff",
+ name = "Go First",
+ abilities = {
+ createAbility({
+ id="go_first_draw_effect",
+ trigger = endOfTurnTrigger,
+ effect = ElseEffect(
+ getTurnsPlayed(oppPid).eq(1),
+ nullEffectif(),
+ drawCardsEffect(2)
+ )
+ })
+ }
+ })
+end
+
+--=======================================================================================================
+function setupGame(g)
+ registerCards(g, {
+ })
+
+ standardSetup(g, {
+ description = "Dual-class Heroes - by Aarkenell (utilising WardenSlayer's Balanced Random Script). Updated 31.10.2024",
+ playerOrder = { plid1, plid2 },
+ ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
+ timeoutAi = createTimeoutAi(),
+ opponents = { { plid1, plid2 } },
+ players = {
+ {
+ id = plid1,
+ -- isAi = true,
+ startDraw = 0,
+ init = {
+ fromEnv = plid1
+ },
+ cards = {
+ buffs = {
+ chooseTheClass(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ fatigueCount(42, 1, "FatigueP1"),
+ }
+ }
+ },
+ {
+ id = plid2,
+ isAi = false,
+ startDraw = 0,
+ init = {
+ fromEnv = plid2
+ },
+ cards = {
+ buffs = {
+ chooseTheClass(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ fatigueCount(42, 1, "FatigueP2"),
+ }
+ }
+ },
+ }
+ })
+end
+
+function endGame(g)
+end
+
+-- Created by WardenSlayer
+
+
+function setupMeta(meta)
+ meta.name = "wardenslayer_level_agnostic"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/xTheC/Desktop/Git Repositories/hero-realms-lua-scripts/WardenSlayer/wardenslayer_level_agnostic.lua"
+ meta.features = {
+}
+
+end
+
+
+-- Buff to disable skills after first used each turn
+-- from Randomnoob, based on buff to turn off second abilityType
+--[[ It checks if there's non ancestry ability in sacrifice location and disables ability left until end of turn
+not sure it will work for your case
+yet you might make a custom trigger which fires when either skill is activated and a have an ability listening to that trigger on both skills. When it triggers - put disable buff on the skill
+]]
+
+--[[function disableSkillsBuff()
+ return createGlobalBuff({
+ id = "disable_skills_buff",
+ name = "Disable Skills",
+ abilities = {
+ createAbility({
+ id = "disable_skills_buff_ability",
+ trigger = onSacrificeGlobalTrigger,
+ effect = disableTarget({ endOfTurnExpiry }).apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardType(abilityType).And(isCardType(ancestryType).invert())))
+ .seq(sacrificeSelf()),
+ check = selectLoc(loc(currentPid, skillSacrificePloc)).where(isCardType(abilityType).And(isCardType(ancestryType).invert())).count().gte(1),
+ })
+ }
+ })
+end]]
+
+------
+function ST_TG_choose_wizard_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_wizard",
+ name = "Dual-class Wizard",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_wizard",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualWizard", expiry = { Never } }))
+ .seq(createCardEffect(dualWizardBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Wizard",
+ art = "avatars/wizard_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_cleric_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_cleric",
+ name = "Dual-class Cleric",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "ST_TG_choose_cleric",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualcleric", expiry = { Never } }))
+ .seq(createCardEffect(dualclericBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Cleric",
+ art = "avatars/cleric_02",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_fighter_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_fighter",
+ name = "Dual-class Fighter",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "ST_TG_choose_fighter",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualfighter", expiry = { Never } }))
+ .seq(createCardEffect(dualFighterBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Fighter",
+ art = "avatars/fighter_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_thief_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_thief",
+ name = "Dual-class Thief",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_thief",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualthief", expiry = { Never } }))
+ .seq(createCardEffect(dualThiefBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Thief",
+ art = "avatars/thief_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_ranger_carddef()
+
+ return createDef(
+ {
+ id = "ST_TG_choose_ranger",
+ name = "Dual-class ranger",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "ST_TG_choose_ranger",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualranger", expiry = { Never } }))
+ .seq(createCardEffect(dualrangerBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Ranger",
+ art = "avatars/ranger_02",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_bard_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_bard",
+ name = "Dual-class Bard",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_bard",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualbard", expiry = { Never } }))
+ .seq(createCardEffect(dualbardBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Bard",
+ art = "avatars/bard_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_druid_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_druid",
+ name = "Dual-class Druid",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_druid",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualdruid", expiry = { Never } }))
+ .seq(createCardEffect(dualdruidBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class druid",
+ art = "avatars/druid_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_barbarian_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_barbarian",
+ name = "Dual-class Barbarian",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_barbarian",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualbarbarian", expiry = { Never } }))
+ .seq(createCardEffect(dualbarbarianBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class barbarian",
+ art = "avatars/barbarian_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_monk_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_monk",
+ name = "Dual-class Monk",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_monk",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualmonk", expiry = { Never } }))
+ .seq(createCardEffect(dualmonkBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Monk",
+ art = "avatars/monk_02",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_alchemist_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_alchemist",
+ name = "Dual-class Alchemist",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_alchemist",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualalchemist", expiry = { Never } }))
+ .seq(createCardEffect(dualalchemistBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Alchemist",
+ art = "avatars/alchemist_02",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_TG_choose_necromancer_carddef()
+ return createDef(
+ {
+ id = "ST_TG_choose_necromancer",
+ name = "Dual-class Necromancer",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_necromancer",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualnecromancer", expiry = { Never } }))
+ .seq(createCardEffect(dualnecromancerBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Necromancer",
+ art = "avatars/necromancer_01",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+
+--=======================================================================================================
+--Buffs
+function dualWizardBuffDef()
+ --
+ local name = "Dual Wizard"
+ local ef1_Wizard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("wizard_spell_components").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(wizard_flame_burst_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_flame_burst")))
+ .seq(createCardEffect(wizard_fire_blast_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_Wizard = createCardEffect(wizard_channel_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fire_blast")))
+ .seq(createCardEffect(wizard_fireball_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_channel")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_calm_channel_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_deep_channel_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_Wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_arcane_wand_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(wizard_silverskull_amulet_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_rolling_fireball_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_scorching_fireball_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_Wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_runic_robes_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_spellcaster_gloves_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_Wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_magic_mirror_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(wizard_alchemist_s_stone_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_calm_channel").Or(isCardName("wizard_deep_channel"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_soul_channel_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_serene_channel_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_pure_channel_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_rolling_fireball").Or(isCardName("wizard_scorching_fireball"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_barreling_fireball_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_searing_fireball_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_explosive_fireball_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_wizened_familiar_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(wizard_content_familiar_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_Wizard
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_Wizard
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_Wizard
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_Wizard
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_Wizard
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_Wizard
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_Wizard
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_Wizard
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_Wizard
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_Wizard
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_Wizard
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_Wizard
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualWizard"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualclericBuffDef()
+ --
+ local name = "Dual Cleric"
+ local ef1_cleric = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("cleric_spiked_mace").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(cleric_follower_a_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cleric_minor_resurrect_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_minor_resurrect")))
+ .seq(createCardEffect(cleric_lesser_resurrect_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_cleric = createCardEffect(cleric_bless_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_lesser_resurrect")))
+ .seq(createCardEffect(cleric_resurrect_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_bless")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_bless_of_iron_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_bless_of_heart_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_redeemed_ruinos_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(cleric_brightstar_shield_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_resurrect")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_holy_resurrect_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_battle_resurrect_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_phoenix_helm_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_shining_breastplate_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_hammer_of_light_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(cleric_talisman_of_renewal_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_bless_of_iron").Or(isCardName("cleric_bless_of_heart"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_bless_the_flock_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_bless_of_soul_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_bless_of_steel_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_holy_resurrect").Or(isCardName("cleric_battle_resurrect"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_divine_resurrect_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_mass_resurrect_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_righteous_resurrect_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("cleric_spiked_mace")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_spiked_mace_of_glory_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(cleric_spiked_mace_of_might_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_cleric
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_cleric
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_cleric
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_cleric
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_cleric
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_cleric
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_cleric
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_cleric
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_cleric
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_cleric
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_cleric
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_cleric
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualcleric"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualThiefBuffDef()
+ --
+ local name = "Dual thief"
+ local ef1_thief = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("ruby").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(currentPid, asidePloc)))
+ --Extra gold-transform for thief/ranger/bard?
+ .seq(transformTarget("thief_throwing_knife").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(thief_pilfer_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pilfer")))
+ .seq(createCardEffect(thief_theft_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_thief = createCardEffect(thief_pickpocket_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_theft")))
+ .seq(createCardEffect(thief_heist_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pickpocket")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_sleight_of_hand_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_swipe_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_knife_belt_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_sacrificial_dagger_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_heist")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_skillful_heist_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_timely_heist_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_shadow_mask_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_silent_boots_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_blackjack_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_jewelers_loupe_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_sleight_of_hand").Or(isCardName("thief_swipe"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_distracted_exchange_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_misdirection_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_lift_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_skillful_heist").Or(isCardName("thief_timely_heist"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_masterful_heist_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_practiced_heist_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_smooth_heist_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("ruby")).take(1))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_brilliant_ruby_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_sharpened_ruby_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_thief
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_thief
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_thief
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_thief
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_thief
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_thief
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_thief
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_thief
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_thief
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_thief
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_thief
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_thief
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualthief"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualFighterBuffDef()
+ --
+ local name = "Dual Fighter"
+ local ef1_fighter = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ --no gold substitute for fighter
+ .seq(createCardEffect(fighter_longsword_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(fighter_precision_blow_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_precision_blow")))
+ .seq(createCardEffect(fighter_powerful_blow_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_fighter = createCardEffect(fighter_shoulder_bash_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_powerful_blow")))
+ .seq(createCardEffect(fighter_crushing_blow_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_shoulder_bash")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_knock_back_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_shoulder_smash_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_double_bladed_axe_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_jagged_spear_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_crushing_blow")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_smashing_blow_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_sweeping_blow_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_helm_of_fury_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_spiked_pauldrons_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_sharpening_stone_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_rallying_flag_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_knock_back").Or(isCardName("fighter_shoulder_smash"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_knock_down_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_group_tackle_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_shoulder_crush_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_smashing_blow").Or(isCardName("fighter_sweeping_blow"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_devastating_blow_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_mighty_blow_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_whirling_blow_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("fighter_longsword")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_flaming_longsword_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_lightning_longsword_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+
+-- P1 draws 5 for fighter, even though only 3 for Wiz
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="dual_fighter_class_buff",
+ name = "Fighter Dual Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_fighter
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_fighter
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_fighter
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_fighter
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_fighter
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_fighter
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_fighter
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_fighter
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_fighter
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_fighter
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_fighter
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_fighter
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualfighter"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualrangerBuffDef()
+ --
+ local name = "Dual Ranger"
+ local ef1_ranger = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("ranger_horn_of_calling").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(currentPid, asidePloc)))
+ --Extra gold-transform for thief/ranger/bard?
+ .seq(transformTarget("ranger_hunting_bow").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(ranger_steady_shot_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_steady_shot")))
+ .seq(createCardEffect(ranger_well_placed_shot_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_ranger = createCardEffect(ranger_track_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_well_placed_shot")))
+ .seq(createCardEffect(ranger_headshot_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_track")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_fast_track_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_careful_track_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_snake_pet_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(ranger_unending_quiver_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_headshot")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_twin_shot_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_quickshot_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_hunters_cloak_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_sureshot_bracer_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_pathfinder_compass_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(ranger_flashfire_arrow_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_fast_track").Or(isCardName("ranger_careful_track"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_flawless_track_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_instinctive_track_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_relentless_track_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_twin_shot").Or(isCardName("ranger_quickshot"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_longshot_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_snapshot_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_triple_shot_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("ranger_horn_of_calling")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_horn_of_need_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(ranger_horn_of_command_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_ranger
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_ranger
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_ranger
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_ranger
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_ranger
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_ranger
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_ranger
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_ranger
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_ranger
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_ranger
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_ranger
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_ranger
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualranger"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualbardBuffDef()
+ --
+ local name = "Dual bard"
+ local ef1_bard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("bard_harp").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_guild_tale_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_song_of_the_wild_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_imperial_anthem_carddef(), loc(currentPid, asidePloc)))
+ }))
+ .seq(createCardEffect(bard_brave_story_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_brave_story")))
+ .seq(createCardEffect(bard_epic_poem_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_bard = createCardEffect(bard_moving_melody_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_epic_poem")))
+ .seq(createCardEffect(bard_valiant_verse_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_moving_melody")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_rousing_ode_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_inspiring_tune_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_silencing_scepter_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_summoning_drum_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_valiant_verse")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_intrepid_tale_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_heroic_fable_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_collecting_cap_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_coat_of_encores_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_lute_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_goblet_of_whimsy_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_rousing_ode").Or(isCardName("bard_inspiring_tune"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_stirring_song_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_rally_hymn_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_battle_march_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_intrepid_tale").Or(isCardName("bard_heroic_fable"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_mythic_chronicle_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_grand_legend_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_bold_saga_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("bard_harp")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_golden_harp_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_lullaby_harp_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_bard
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_bard
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_bard
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_bard
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_bard
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_bard
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_bard
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_bard
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_bard
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_bard
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_bard
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_bard
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbard"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualdruidBuffDef()
+ --
+ local name = "Dual Druid"
+ local ef1_druid = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("druid_squirrel").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(druid_fox_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(druid_animal_strength_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_animal_strength")))
+ .seq(createCardEffect(druid_bear_strength_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_druid = createCardEffect(druid_forest_rage_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_bear_strength")))
+ .seq(createCardEffect(druid_bear_form_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_forest_rage")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_spirit_of_the_forest_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_forest_fury_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_owl_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(druid_heartwood_splinter_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_bear_form")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_spirit_bear_form_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_grizzly_form_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_circlet_of_flowers_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_grass_weave_sash_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_rabbit_carddef(), loc(currentPid, asidePloc)).seq(createCardEffect(druid_rabbit_carddef(), loc(currentPid, asidePloc)))),
+ valueItem(1, createCardEffect(druid_ursine_rod_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_spirit_of_the_forest").Or(isCardName("druid_forest_fury"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_forest_vengeance_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_soul_of_the_forest_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_way_of_the_forest_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_spirit_bear_form").Or(isCardName("druid_grizzly_form"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_polar_bear_form_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_spirit_grizzly_form_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_pure_bear_form_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("druid_fox")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_feral_fox_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(druid_nimble_fox_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_druid
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_druid
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_druid
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_druid
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_druid
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_druid
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_druid
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_druid
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_druid
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_druid
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_druid
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_druid
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualdruid"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualbarbarianBuffDef()
+ --
+ local name = "Dual barbarian"
+ local ef1_barbarian = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("barbarian_plunder").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(barbarian_headbutt_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(barbarian_growl_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_growl")))
+ .seq(createCardEffect(barbarian_bellow_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_barbarian = createCardEffect(barbarian_inner_rage_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_bellow")))
+ .seq(createCardEffect(barbarian_roar_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9 -- Skill 4
+ local ef9_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_inner_rage")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_flaring_rage_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_smoldering_rage_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_flail_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(barbarian_wolf_companion_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_roar")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_terrifying_roar_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_battle_cry_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_razor_bracers_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_stomping_boots_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_bone_axe_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(barbarian_crushed_coin_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_flaring_rage").Or(isCardName("barbarian_smoldering_rage"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_fiery_rage_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_explosive_rage_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_eternal_rage_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_terrifying_roar").Or(isCardName("barbarian_battle_cry"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_battle_roar_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_terrifying_howl_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_war_cry_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("barbarian_headbutt")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_disorienting_headbutt_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(barbarian_shattering_headbutt_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_barbarian
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_barbarian
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_barbarian
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_barbarian
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_barbarian
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_barbarian
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_barbarian
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_barbarian
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_barbarian
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_barbarian
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_barbarian
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_barbarian
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualbarbarian"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualmonkBuffDef()
+ --
+ local name = "Dual Monk"
+ local ef1_monk = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("monk_spring_blossom").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(2)))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_cobra_fang_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_serene_wind_carddef(), loc(currentPid, asidePloc)))
+ }))
+ .seq(createCardEffect(monk_calm_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_calm")))
+ .seq(createCardEffect(monk_focus_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_monk = createCardEffect(monk_flowing_technique_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_focus")))
+ .seq(createCardEffect(monk_qi_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9 -- Skill 4
+ local ef9_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_flowing_technique")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_flowing_technique_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_practiced_technique_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_stillness_of_water_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_ring_of_1000_palms_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_qi")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_jing_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_focused_strike_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_wraps_of_strength_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_slippers_of_the_crane_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_monk = createCardEffect(monk_tonfas_of_balance_carddef(), loc(currentPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_flowing_technique").Or(isCardName("monk_practiced_technique"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_fluid_technique_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_masterful_technique_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_precise_technique_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_jing").Or(isCardName("monk_focused_strike"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_yin_yang_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_qigong_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_dim_mak_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("monk_spring_blossom")).take(1))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_resplendent_blossom_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_radiant_blossom_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_monk
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_monk
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_monk
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_monk
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_monk
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_monk
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_monk
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_monk
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_monk
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_monk
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_monk
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_monk
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualmonk"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualalchemistBuffDef()
+ --
+ local name = "Dual Alchemist"
+ local ef1_alchemist = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("alchemist_philosophers_stone").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(alchemist_dissolve_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_dissolve")))
+ .seq(createCardEffect(alchemist_minor_transmutation_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_alchemist = createCardEffect(alchemist_reflect_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_minor_transmutation")))
+ .seq(createCardEffect(alchemist_transmutation_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9 -- Skill 4
+ local ef9_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_reflect")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_refraction_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_dispersion_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_crucible_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(alchemist_bottled_tempest_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_transmutation")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_rapid_transmogrification_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_rapid_transmutation_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_spectrum_spectacles_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_auric_gloves_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_brittle_gas_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_alchemy_powders_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_refraction").Or(isCardName("alchemist_dispersion"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_wide_diffusion_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_prismatic_dispersion_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_perfect_refraction_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_rapid_transmogrification").Or(isCardName("alchemist_rapid_transmutation"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_rapid_transmogrification_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_major_transmogrification_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_instant_transmutation_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("alchemist_philosophers_stone")).take(1))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_swirling_philosophers_stone_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_alchemist
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_alchemist
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_alchemist
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_alchemist
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_alchemist
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_alchemist
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_alchemist
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_alchemist
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_alchemist
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_alchemist
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_alchemist
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_alchemist
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualalchemist"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
+
+function dualnecromancerBuffDef()
+ --
+ local name = "Dual necromancer"
+ local ef1_necromancer = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("necromancer_soul_prism").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(necromancer_rod_of_unlife_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(necromancer_reanimate_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_reanimate")))
+ .seq(createCardEffect(necromancer_final_return_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_necromancer = createCardEffect(necromancer_bone_raising_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_final_return")))
+ .seq(createCardEffect(necromancer_raise_dead_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9 -- Skill 4
+ local ef9_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_bone_raising")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_raise_skeleton_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_fresh_harvest_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_puzzle_box_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_anguish_blade_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_dead")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_corpse_raising_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_animate_dead_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_rotting_crown_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_plague_belt_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_voidstone_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_onyx_skull_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_skeleton").Or(isCardName("necromancer_fresh_harvest"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_strong_bones_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_skull_swarm_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_corpse_horde_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_corpse_raising").Or(isCardName("necromancer_animate_dead"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_empty_graves_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_grave_robbery_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_reawaken_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("necromancer_rod_of_unlife")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_rod_of_spite_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_rod_of_reanimation_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
+ .seq(sacrificeSelf())
+ --
+ return createGlobalBuff({
+ id="custom_class_buff",
+ name = "Custom Class",
+ abilities = {
+ createAbility({
+ id="level_1_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(1)),
+ effect = ef1_necromancer
+ }),
+ createAbility({
+ id="level_3_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(3)),
+ effect = ef3_necromancer
+ }),
+ createAbility({
+ id="level_5_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(5)),
+ effect = ef5_necromancer
+ }),
+ createAbility({
+ id="level_7_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(7)),
+ effect = ef7_necromancer
+ }),
+ createAbility({
+ id="level_9_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(9)),
+ effect = ef9_necromancer
+ }),
+ createAbility({
+ id="level_11_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(11)),
+ effect = ef11_necromancer
+ }),
+ createAbility({
+ id="level_13_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(13)),
+ effect = ef13_necromancer
+ }),
+ createAbility({
+ id="level_15_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(15)),
+ effect = ef15_necromancer
+ }),
+ createAbility({
+ id="level_17_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(17)),
+ effect = ef17_necromancer
+ }),
+ createAbility({
+ id="level_19_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(19)),
+ effect = ef19_necromancer
+ }),
+ createAbility({
+ id="level_21_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(21)),
+ effect = ef21_necromancer
+ }),
+ createAbility({
+ id="level_23_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(23)),
+ effect = ef23_necromancer
+ }),
+
+ createAbility({
+ id="shuffle_effect",
+ trigger = startOfTurnTrigger,
+ check = hasPlayerSlot(currentPid, "dualnecromancer"),
+ effect = efShuffle
+
+
+ })
+ }
+ })
+end
diff --git a/Aarkenell/Mythical faction.lua b/Aarkenell/Mythical faction.lua
index 3d1260a..ab1a5ae 100644
--- a/Aarkenell/Mythical faction.lua
+++ b/Aarkenell/Mythical faction.lua
@@ -5,7 +5,7 @@ require 'timeoutai'
require 'hardai_2'
require 'aggressiveai'
---[[Mythic Mercs (new 20 card module for market deck
+--[[Mythic Mercs (new 20 card module for market deck - Updated 27.09.2024
Includes S&R mini-expansion 4 cards plus Parsons the Insider]]
function startOfGameBuffDef()
@@ -36,82 +36,24 @@ local function P1_chooseTheCardsBuff()
.seq(storyTellEffectWithPortrait("cristov_s_recruits", "All of these cards are factionless. Some have the ability to choose a faction. Others come with different, abilities."))
.seq(storyTellEffectWithPortrait("cristov_s_recruits", "As mercenaries, many of these champions will require payment each turn if you want to benefit from the full extent of their abilities."))
.seq(leftStoryTellEffectWithPortrait("ambushers", "As Player 1, you also have the option to play with the Sparks & Rec mini-expansion. This adds another 5 custom champions to the market deck."))
- .seq(leftStoryTellEffectWithPortrait("ambushers", "You can make that choice now."))
- .seq(pushChoiceEffect(
- {
- choices = {
- {
- effect = nullEffect(),
- layout = layoutCard(
- {
- title = "Mythic Mercs",
- art = "icons/thief_sleight_of_hand",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ]]
- }
- ),
- tags = {}
- },
- {
- effect = createCardEffect(mythic_mercs_ee_parsons_carddef(), tradeDeckLoc)
- .seq(createCardEffect(mythic_mercs_ee_scrapforks_carddef(), tradeDeckLoc))
- .seq(createCardEffect(mythic_mercs_ee_dblducks_carddef(), tradeDeckLoc))
- .seq(createCardEffect(mythic_mercs_ee_stigmalingpa_carddef(), tradeDeckLoc))
- .seq(createCardEffect(mythic_mercs_ee_agent_th_carddef(), tradeDeckLoc))
- .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
- .seq(shuffleTradeDeckEffect())
- .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4)))),
-
- layout = layoutCard(
- {
- title = "Add S&R crew",
- art = "art/T_All_Heroes",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ .seq(pushChoiceEffect({
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Return to Select Card Packs",
+ art = "avatars/ambushers",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
- ]]
- }
- ),
- }
- }
- }
- )
- ),
+ ]],
+ }),
+
+ },
+ }})),
effectSecond = pushChoiceEffect(
{
@@ -228,7 +170,23 @@ local function P2_chooseInfoBuff()
.seq(storyTellEffectWithPortrait("cristov_s_recruits", "All of these cards are factionless. Some have the ability to choose a faction. Others come with different, abilities."))
.seq(storyTellEffectWithPortrait("cristov_s_recruits", "As mercenaries, many of these champions will require payment each turn if you want to benefit from the full extent of their abilities."))
.seq(leftStoryTellEffectWithPortrait("ambushers", "Player 1 also has the option to decide to add in the Sparks & Rec mini-expansion. This adds another 5 custom champions to the market deck."))
- .seq(leftStoryTellEffectWithPortrait("ambushers", "Now, let's get playing.")),
+.seq(pushChoiceEffect({
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Return to Select Card Packs",
+ art = "avatars/ambushers",
+ frame = "frames/Treasure_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ },
+ }})),
effectSecond = nullEffect(),
@@ -325,7 +283,7 @@ function setupGame(g)
mythic_exp_shapeshift_carddef(),
mythic_exp_troll_merc_carddef(),
mythic_exp_basilisks_gaze_carddef(),
- mythic_exp_golem_for_hire_carddef(),
+ mythic_exp_coin_operated_golem_carddef(),
mythic_mercs_ee_scrapforks_carddef(),
mythic_mercs_ee_dblducks_carddef(),
mythic_mercs_ee_parsons_carddef(),
@@ -339,12 +297,12 @@ function setupGame(g)
})
standardSetup(g, {
- description = "Mythic creatures - 20 extra market cards. (13 unique new cards.) Created by Aarkenell.",
+ description = "Mythic Mercenaries - 20 extra market cards. (13 unique new cards.) Plus S&R mini-expansion (5 new cards). Created by Aarkenell. Updated 27.09.2024",
playerOrder = { plid1, plid2 },
ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
timeoutAi = createTimeoutAi(),
opponents = { { plid1, plid2 } },
- centerRow = {},
+ centerRow = { "scrapforks", "stigmalingpa", "dblducks", "agent_th" },
tradeDeckExceptions = {
-- here we set which cards populate market deck
{ qty=3, cardId="fairy_base" },
@@ -358,8 +316,8 @@ function setupGame(g)
{ qty=1, cardId="wyvern" },
{ qty=1, cardId="shapeshift" },
{ qty=1, cardId="troll_merc" },
- { qty=0, cardId="basilisks_gaze" },
- { qty=1, cardId="golem_for_hire" }
+ { qty=1, cardId="basilisks_gaze" },
+ { qty=1, cardId="coin_operated_golem" }
},
players = {
{
@@ -390,7 +348,6 @@ function setupGame(g)
drawCardsCountAtTurnEndDef(5),
discardCardsAtTurnStartDef(),
fatigueCount(40, 1, "FatigueP2"),
- startOfGameBuffDef(),
loseGameBuffDef(),
P2_chooseInfoBuff()
}
@@ -459,7 +416,6 @@ function mythic_exp_fairy_base_carddef()
cost = 1,
xmlText=[[
-
@@ -471,9 +427,6 @@ function mythic_exp_fairy_base_carddef()
<size=60%> or No Effect" fontsize="46" />
-
-
-
]],
health = 2,
@@ -1893,7 +1846,7 @@ function mythic_exp_werewolf_merc2_carddef()
layout = createLayout(
{
name = "Werewolf Mercenary",
- art = "art/T_Wolf_Form",
+ art = "art/epicart/lycomancy",
frame = "frames/Treasure_CardFrame",
cost = 4,
xmlText=[[
@@ -1932,7 +1885,7 @@ function mythic_exp_stone_skin_carddef()
name = "Stone skin",
types = {actionType},
cardTypeLabel = "Action",
- f
+ playLocation = castPloc,
acquireCost = 5,
abilities = {
createAbility(
@@ -1944,11 +1897,10 @@ function mythic_exp_stone_skin_carddef()
effect = pushChoiceEffectWithTitle({
choices = {
- --1st option
- {
- effect = gainToughnessEffect(5).seq(gainHealthEffect(5)),
-
- layout = layoutCard(
+ --No champ option
+ {
+ effect = gainToughnessEffect(5),
+ layout = layoutCard(
{
title = "Stone Skin",
art = "art/T_Granite_Smasher",
@@ -1956,9 +1908,7 @@ effect = pushChoiceEffectWithTitle({
xmlText=[[
-
+
]]
@@ -1975,18 +1925,15 @@ effect = pushChoiceEffectWithTitle({
xmlText = [[
-
+
]],
}),
- tags = { }
+ tags = { },
- ,
- --2nd option
+
+ --1st option
{
effect = pushTargetedEffect(
{
@@ -2037,7 +1984,7 @@ Draw a card." fontsize="20"/>
tags = { }
,
- --3rd option
+ --2nd option
{
effect = pushChoiceEffectWithTitle({
choices = {
@@ -2062,10 +2009,9 @@ Draw a card." fontsize="20"/>
xmlText=[[
-
+Prepare that champion." fontsize="20"/>
]]
@@ -2094,10 +2040,9 @@ Prepare that champion" fontsize="20"/>
xmlText=[[
-
+<size=200%>{combat_3}" fontsize="20"/>
]]
@@ -2136,8 +2081,7 @@ Wild champion.
xmlText=[[
-
@@ -2178,10 +2122,9 @@ Put a card from your discard on top of your deck." fontsize="20"/>
xmlText=[[
-
+You may sacrifice a card from your hand or discard pile." fontsize="20"/>
]]
@@ -2216,8 +2159,7 @@ Sacrifice a card from your hand or discard pile." fontsize="20"/>
}
),
tags = { addFactionTag }
- },
-
+ },
},
upperTitle = "Give a champion +3 defense until it leaves play.",
@@ -2233,18 +2175,20 @@ Sacrifice a card from your hand or discard pile." fontsize="20"/>
frame = "frames/Treasure_CardFrame",
cost = 5,
xmlText=[[
+
-
+{guild} Top-deck a card from your discard.
+{necro} Sacrifice 1 from your hand or discard.
+
+Or gain 5 Toughness." fontsize="15"/>
-
+
]],
}
@@ -2664,12 +2608,12 @@ that cost {gold_4} or less.
)
end
-function mythic_exp_golem_for_hire_carddef()
+function mythic_exp_coin_operated_golem_carddef()
return createChampionDef(
{
- id = "golem_for_hire",
+ id = "coin_operated_golem",
name = "Coin-operated Golem",
types = {championType},
acquireCost = 8,
@@ -2678,16 +2622,16 @@ function mythic_exp_golem_for_hire_carddef()
abilities = {
createAbility(
{
- id = "golem_for_hire",
+ id = "coin_operated_golem",
trigger = uiTrigger,
cost = combineCosts({ expendCost, goldCost(1) }),
- activations = singleActivations,
+ activations = multipleActivations,
effect = pushChoiceEffect({
choices = {
{
effect = gainCombatEffect(7),
layout = createLayout({
- name = "Golem for Hire",
+ name = "Coin-operated Golem",
art = "art/T_Stone_Guardian",
frame = "frames/Treasure_CardFrame",
xmlText = [[
@@ -2711,7 +2655,7 @@ function mythic_exp_golem_for_hire_carddef()
.seq(addSlotToTarget(createGuardSwitchSlot(true, { startOfOwnerTurnExpiry })).apply(selectSource())),
layout = createLayout({
- name = "Golem for Hire",
+ name = "Coin-operated Golem",
art = "art/T_Stone_Guardian",
frame = "frames/Treasure_CardFrame",
xmlText = [[
@@ -2741,7 +2685,7 @@ until next turn." fontsize="40" flexiblewidth="10" />
layout = createLayout(
{
name = "Coin-operated Golem",
- art = "art/T_Stone_Guardian",
+ art = "art/epicart/gareth_s_automaton",
frame = "frames/Treasure_CardFrame",
cost = 8,
xmlText=[[
@@ -2795,7 +2739,7 @@ function mythic_mercs_ee_scrapforks_carddef()
layout = createLayout(
{
name = "Scrapforks",
- art = "art/T_Fighter_Male",
+ art = "art/epicart/lord_of_the_arena",
frame = "frames/Treasure_CardFrame",
cost = 4,
xmlText=[[
@@ -2839,9 +2783,10 @@ function mythic_mercs_ee_dblducks_carddef()
activations = multipleActivations,
effect = gainCombatEffect(4).seq(moveTarget(myRevealPloc).apply(selectLoc(loc(currentPid, deckPloc)).take(2)).seq(noUndoEffect()).seq(promptSplit({
selector = selectLoc(currentRevealLoc),
- take = const(2), -- number of cards to take for split
+ take = const(1), -- number of cards to take for split
sort = const(1), -- number of cards to be sorted for ef2
- ef1 = moveToTopDeckTarget(true), -- effect to be applied to cards left
+ minTake = const(1), -- number of mandatory cards moved to ef2
+ ef1 = moveToTopDeckTarget(true, 1), -- effect to be applied to cards left
ef2 = moveToBottomDeckTarget(true, 1), -- effect to be applied to sorted cards
header = "Gaze into the future", -- prompt header
description = "Look at the top two cards of your deck. Put one on the top and one on the bottom of your deck.",
@@ -2858,7 +2803,7 @@ function mythic_mercs_ee_dblducks_carddef()
layout = createLayout(
{
name = "DblDucks",
- art = "art/T_Influence",
+ art = "art/epicart/banishment",
frame = "frames/Treasure_CardFrame",
cost = 4,
xmlText=[[
@@ -3023,7 +2968,6 @@ You may put a card from your discard pile onto the bottom of your deck" fontsize
)
end
-
function mythic_mercs_ee_stigmalingpa_carddef()
return createChampionDef(
{
@@ -3056,7 +3000,7 @@ function mythic_mercs_ee_stigmalingpa_carddef()
layout = createLayout(
{
name = "Stigmalingpa",
- art = "art/T_Wizard_Runic_Robes",
+ art = "art/epicart/reusable_knowledge",
frame = "frames/Treasure_CardFrame",
cost = 4,
xmlText=[[
@@ -3123,7 +3067,7 @@ function mythic_mercs_ee_agent_th_carddef()
layout = createLayout(
{
name = "Agent Teeth Hurting",
- art = "art/T_Elven_Curse",
+ art = "art/epicart/psionic_assault",
frame = "frames/Treasure_CardFrame",
cost = 4,
xmlText=[[
@@ -3261,6 +3205,7 @@ function cat_familiar_token_carddef()
)
end
+
function kit_cat_token_carddef()
--This is a token champion, that self-sacrifices when it leaves play
return createChampionDef(
@@ -3280,7 +3225,6 @@ function kit_cat_token_carddef()
cost = expendCost,
activations = multipleActivations,
effect = hitOpponentEffect(2)
-
}
)
,
@@ -3298,7 +3242,7 @@ function kit_cat_token_carddef()
layout = createLayout(
{
name = "Kit Cat",
- art = "art/treasures/T_Wise_Cat_Familiar",
+ art = "art/treasures/wizard_wizened_familiar",
frame = "frames/Treasure_CardFrame",
xmlText=[[
@@ -3357,7 +3301,7 @@ function chunky_cat_token_carddef()
layout = createLayout(
{
name = "Kit Cat Chunky",
- art = "art/treasures/T_Fat_Cat_Familiar",
+ art = "art/treasures/wizard_content_familiar",
frame = "frames/Treasure_CardFrame",
xmlText=[[
@@ -3379,7 +3323,6 @@ function chunky_cat_token_carddef()
)
end
-
function big_bad_kitty_token_carddef()
--This is a token champion, that self-sacrifices when it leaves play
return createChampionDef(
@@ -3476,7 +3419,7 @@ function surprise_dragon_token_carddef()
layout = createLayout(
{
name = "Surprise Dragon",
- art = "art/T_Arkus_Imperial_Dragon",
+ art = "art/epicart/dragonling",
frame = "frames/Treasure_CardFrame",
xmlText=[[
diff --git a/Aarkenell/Splintered Thandar.lua b/Aarkenell/Splintered Thandar.lua
new file mode 100644
index 0000000..864e1ea
--- /dev/null
+++ b/Aarkenell/Splintered Thandar.lua
@@ -0,0 +1,3829 @@
+require "herorealms"
+require "decks"
+require "stdlib"
+require "stdcards"
+require "hardai"
+require "mediumai"
+require "easyai"
+
+-- Updated 08.10.2024 by Aarkenell
+nullPloc = CardLocEnum.Null
+
+-- Game start --
+function startOfGameBuffDef()
+ return createGlobalBuff({
+ id="startOfGameBuff",
+ name = "Start of Game Story",
+ abilities = {
+ createAbility({
+ id="SoG_effect",
+ trigger = startOfGameTrigger,
+ effect = waitForClickEffect("Welcome to the Splintered Thandar mod.", "")
+ .seq(waitForClickEffect("As Player 1, you may now choose which Battlefield to play on.", ""))
+ })
+ }
+ })
+end
+
+local function P1_chooseBattlefieldBuff()
+ return cardChoiceSelectorEffect({
+ id = "choose_battlefield_options",
+ name = "Choose one",
+ trigger = startOfTurnTrigger,
+
+ upperTitle = "Get playing. Or learn what this mod is about.",
+ lowerTitle = "",
+
+ effectFirst = pushChoiceEffect(
+ {
+ choices = {
+ -- Choice 1: Marauder Mo Battlefields
+ {
+ effect = createCardEffect(choose_supply_cache_carddef(), loc(currentPid, asidePloc))
+ .seq(createCardEffect(choose_armoury_carddef(), loc(currentPid, asidePloc)))
+ --.seq(createCardEffect(choose_scorcerors_tower_carddef(), loc(currentPid, asidePloc)))
+ --.seq(createCardEffect(choose_smugglers_den_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_crypt_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_beast_pit_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_apothecary_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_great_hall_carddef(), loc(currentPid, asidePloc)))
+ -- .seq(createCardEffect(choose_scorcerors_tower_carddef(), loc(currentPid, asidePloc)))
+
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the Battlefield you wish to play in.", "")),
+
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 2: Aarkenell Battlefields
+ {
+ effect = createCardEffect(choose_alchemist_lab_carddef(), loc(currentPid, asidePloc))
+ .seq(createCardEffect(choose_sheild_bearers_hall_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_colosseum_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_operaHouse_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_zombiehorde_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_investment_bank_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_fight_club_carddef(), loc(currentPid, asidePloc)))
+
+ --.seq(createCardEffect(choose_training_ground_carddef(), loc(currentPid, asidePloc)))
+
+
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the Battlefield you wish to play in.", "")),
+
+ layout = layoutCard(
+ {
+ title = "Fractured Thandar",
+ art = "art/epicart/apocalypse",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ -- Choice 3: Random Selections
+ {
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ -- Choice 3.1: ST only Random
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(choose_supply_cache_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_armoury_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_crypt_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_great_hall_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_beast_pit_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_apothecary_carddef(), currentHandLoc)),
+ -- valueItem(1, createCardEffect(choose_scorcerors_tower_carddef(), currentHandLoc))
+
+ })
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(noUndoEffect()),
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 3.2 - FT only Random
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(choose_alchemist_lab_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_sheild_bearers_hall_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_colosseum_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_zombiehorde_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_operaHouse_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_investment_bank_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_fight_club_carddef(), currentHandLoc)),
+
+ --valueItem(1, createCardEffect(choose_training_ground_carddef(), currentHandLoc))
+
+ })
+
+
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(noUndoEffect()),
+ layout = layoutCard(
+ {
+ title = "Fractured Thandar",
+ art = "art/epicart/apocalypse",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ -- Choice 3.3: All Random
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(choose_supply_cache_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_armoury_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_crypt_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_great_hall_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_beast_pit_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_apothecary_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_alchemist_lab_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_sheild_bearers_hall_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_colosseum_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_zombiehorde_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_operaHouse_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_investment_bank_carddef(), currentHandLoc)),
+ -- valueItem(1, createCardEffect(choose_scorcerors_tower_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_fight_club_carddef(), currentHandLoc)),
+ --valueItem(1, createCardEffect(choose_training_ground_carddef(), currentHandLoc))
+ })
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(noUndoEffect()),
+ layout = layoutCard(
+ {
+ title = "Random Battlefield",
+ art = "art/epicart/angel_of_death_alt",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ }
+ }
+ ),
+
+ layout = layoutCard(
+ {
+ title = "Random Battlefield",
+ art = "art/epicart/angel_of_death_alt",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ }
+ }
+ )
+ ,
+
+
+effectSecond= storyTellEffectWithPortrait("barbarian_02", "This mod is based on the Real Life 'Splintered Thandar' events created by Marauder Mo.")
+.seq(storyTellEffectWithPortrait("barbarian_01", "With support from Birdlaw and Anvroser."))
+ .seq(storyTellEffectWithPortrait("barbarian_02", "Each game starts with Player 1 choosing a 'Battlefield' to play on."))
+ .seq(storyTellEffectWithPortrait("barbarian_02", "Each Battlefield introduces a small variation to the rules of standard play."))
+ .seq(storyTellEffectWithPortrait("barbarian_01", "A rules buff will be created for each scenario for your reference."))
+ .seq(leftStoryTellEffectWithPortrait("druid_01", "Choose between Battlefields based on Marauder Mo's original IRL events, or new Battlefields created by Aarkenell for the digital environment."))
+ .seq(leftStoryTellEffectWithPortrait("druid_01", "Or dance with fate and let the Battlefield be selected randomly."))
+ .seq(pushChoiceEffect({
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Return to Choose Battlefield",
+ art = "avatars/barbarian_02",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ },
+ }})),
+
+ layoutFirst = createLayout({
+ name = "To Battle!",
+ art = "art/epicart/ceasefire",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]] }) ,
+
+ layoutSecond = createLayout({
+ name = "Learn about the mod",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+
+ turn = 1
+ })
+end
+
+
+local function P2_chooseInfoBuff()
+ return cardChoiceSelectorEffect({
+ id = "choose_game_options",
+ name = "Choose one",
+ trigger = startOfTurnTrigger,
+
+ upperTitle = "Learn what's new in this mod. Or just get playing.",
+ lowerTitle = "",
+
+ effectFirst = ifElseEffect(selectLoc(loc(currentPid, handPloc)).where(isCardName("T_TG_choose_thief").Or(isCardName("T_TG_choose_bard"))).count().gte(1),nullEffect(),addEffect(endTurnEffect())),
+
+effectSecond= storyTellEffectWithPortrait("barbarian_02", "This mod is based on the Real Life 'Splintered Thandar' events created by Marauder Mo.")
+.seq(storyTellEffectWithPortrait("barbarian_01", "With support from Birdlaw and Anvroser."))
+ .seq(storyTellEffectWithPortrait("barbarian_02", "Each game starts with Player 1 choosing a 'Battlefield' to play on."))
+ .seq(storyTellEffectWithPortrait("barbarian_02", "Each Battlefield introduces a small variation to the rules of standard play."))
+ .seq(storyTellEffectWithPortrait("barbarian_01", "A rules buff will be created for each scenario for your reference."))
+ .seq(leftStoryTellEffectWithPortrait("druid_01", "Player 1 may choose between Battlefields based on Marauder Mo's original IRL events, or new Battlefields created by Aarkenell for the digital environment.."))
+ .seq(leftStoryTellEffectWithPortrait("druid_01", "or dance with fate and let the Battlefield be selected randomly."))
+ .seq(pushChoiceEffect({
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = createLayout({
+ name = "Return to Choose Battlefield",
+ art = "avatars/barbarian_02",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+
+ },
+
+ }})),
+
+
+
+ layoutFirst = createLayout({
+ name = "Play",
+ art = "art/epicart/ceasefire",
+ xmlText=[[
+
+
+
+
+
+ ]] }) ,
+
+ layoutSecond = createLayout({
+ name = "Learn about the mod",
+ art = "art/treasures/T_Magic_Scroll_Souveraine",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+ turn = 1
+ })
+end
+
+
+function winGameBuffDef()
+ return createGlobalBuff({
+ id="endOfGameBuff",
+ name = "End of Game Story",
+ abilities = {
+ createAbility({
+ id="EoG_effect",
+ trigger = endOfGameTrigger,
+ effect = waitForClickEffect("Thanks for playing the Splintered Thandar mod.", "")
+ .seq(waitForClickEffect("Join the Realms Rising server on Discord to share feedback.", ""))
+ .seq(waitForClickEffect("For latest news on this and other Lua mods, as well as the latest Hero Realms strats and chats, listen to the Sparks and Recreations podcast.", ""))
+ .seq(waitForClickEffect("If you enjoyed this game, be sure to 'Favourite' it so you can play it again. Find out how at: https://www.realmsrising.com/lua/hero-realms-lua-play-at-home-edition/", ""))
+
+})
+ },
+ })
+end
+
+function loseGameBuffDef()
+ return createGlobalBuff({
+ id="LostBuff",
+ name = "Lost Story",
+ abilities = {
+ createAbility({
+ id="EoG_lost_effect",
+ trigger = endOfGameTrigger,
+ effect = waitForClickEffect("Thanks for playing the Splintered Thandar mod.", "")
+ .seq(waitForClickEffect("Join the Realms Rising server on Discord to share feedback.", ""))
+ .seq(waitForClickEffect("For latest news on this and other Lua mods, as well as the latest Hero Realms strats and chats, listen to the Sparks and Recreations podcast.", ""))
+ .seq(waitForClickEffect("If you enjoyed this game, be sure to 'Favourite' it so you can play it again. Find out how at: https://www.realmsrising.com/lua/hero-realms-lua-play-at-home-edition/", ""))
+
+ })
+ },
+ })
+end
+
+-- Alchemist's Lab
+function choose_alchemist_lab_carddef()
+ return createDef({
+ id="choose_alchemist_lab",
+ name="The Alchemist's Lab",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_alchemist_lab",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(alchLabBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(alchLabBuffDef(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(alchemist_crucible_carddef(), loc(currentPid, deckPloc)))
+ .seq(createCardEffect(alchemist_crucible_carddef(), loc(oppPid, deckPloc)))
+ .seq(shuffleEffect(loc(currentPid, deckPloc)))
+ .seq(shuffleEffect(loc(oppPid, deckPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(storyTellEffectWithPortrait("Alchemist_02", "Get out of my lab!"))
+ .seq(waitForClickEffect("The laboratory is a cramped space. Bottles and vials line the shelves. Objects of strange design and origin clutter the tables.", ""))
+ .seq(waitForClickEffect("Grab whatever is in reach and hurl it at your opponent.", ""))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Alchemist's Lab",
+ art = "art/classes/alchemist/dissolve",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function alchLabBuffDef()
+
+return createGlobalBuff({
+ id="AlchLabBuff",
+ name = "The Alchemist's Lab",
+ abilities = {
+ createAbility({
+ id="AlchLabBuff",
+ trigger = startOfTurnTrigger,
+ check = getTurnsPlayed(currentPid).gte(2),
+ effect = randomEffect({
+ --valueItem(1, createCardEffect(alchemist_crucible_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_dissolve_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_dissolve_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_dissolve_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(1, createCardEffect(alchemist_minor_transmutation_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_minor_transmutation_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(1, createCardEffect(alchemist_brittle_gas_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_brittle_gas_carddef(), loc(oppPid, discardPloc)))),
+
+ valueItem(2, createCardEffect(alchemist_frothing_potion_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_sloshing_potion_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_sloshing_potion_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_philosophers_stone_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_swirling_philosophers_stone_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_swirling_philosophers_stone_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_kaleidoscope_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_kaleidoscope_carddef(), loc(oppPid, discardPloc)))),
+
+
+ valueItem(3, createCardEffect(alchemist_vial_of_acid_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_vial_of_acid_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(3, createCardEffect(alchemist_bottled_tempest_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_bottled_tempest_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(3, createCardEffect(alchemist_alchemy_powders_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_alchemy_powders_carddef(), loc(oppPid, discardPloc)))),
+
+ valueItem(2, createCardEffect(alchemist_recalibration_crystal_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_recalibration_crystal_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(2, createCardEffect(alchemist_fireworks_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_fireworks_carddef(), loc(oppPid, discardPloc)))),
+
+ valueItem(2, createCardEffect(alchemist_rainbow_potion_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_rainbow_potion_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(1, createCardEffect(alchemist_recipe_book_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_recipe_book_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(1, createCardEffect(alchemist_silver_scales_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_silver_scales_carddef(), loc(oppPid, discardPloc)))),
+ valueItem(1, createCardEffect(alchemist_diamond_carddef(), loc(currentPid, handPloc)).seq(createCardEffect(alchemist_diamond_carddef(), loc(oppPid, discardPloc)))),
+ })
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Alchemist's Lab",
+ art = "art/classes/alchemist/dissolve",
+ text = "Start the game with a Crucible in your deck. Each turn add 1 random Alchemist item to your hand. Put a copy of the same item into your opponent's discard pile."
+ })
+})
+end
+
+-- Supply Cache
+ local supplycachebuff = createGlobalBuff({
+ id="supplycachebuff",
+ name = "Supply Cache",
+ abilities = {
+ createAbility({
+ id="supplycachebuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Supply Cache",
+ art = "art/T_Taxation",
+ text = "At game start 1 Ruby and 1 Shortsword was added to each player's deck."
+ })
+ })
+
+function choose_supply_cache_carddef()
+ return createDef({
+ id="choose_supply_cache",
+ name="The Supply Cache",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_supply_cache",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, deckPloc)))
+ .seq(createCardEffect(shortsword_carddef(), loc(currentPid, deckPloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(createCardEffect(ruby_carddef(), loc(oppPid, deckPloc)))
+ .seq(createCardEffect(shortsword_carddef(), loc(oppPid, deckPloc)))
+ .seq(createCardEffect(supplycachebuff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(supplycachebuff, loc(oppPid, buffsPloc)))
+ .seq(shuffleEffect(loc(oppPid, deckPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Supply Cache",
+ art = "art/T_Taxation",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+-- Armoury
+ local armourybuff = createGlobalBuff({
+ id="armourybuff",
+ name = "The Armoury",
+ abilities = {
+ createAbility({
+ id="armourybuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Armoury",
+ art = "art/t_cleric_brightstar_shield",
+ text = "On your turn you may spend to randomly acquire either a Dagger or a Shortsword into your hand."
+ })
+ })
+
+function choose_armoury_carddef()
+ return createDef({
+ id="choose_armoury",
+ name="The Armoury",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_armoury",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(armouryskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(armouryskill_carddef(), loc(oppPid, skillsPloc)))
+ .seq(createCardEffect(armourybuff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(armourybuff, loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Armoury",
+ art = "art/t_cleric_brightstar_shield",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function armouryskill_carddef()
+ local cardLayout = createLayout({
+ name = "Armoury",
+ art = "art/t_cleric_brightstar_shield",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "armouryskill_skill",
+ name = "Armoury",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_cleric_brightstar_shield",
+ abilities = {
+ createAbility({
+ id = "armouryskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = randomEffect({
+ valueItem(1, createCardEffect(dagger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(shortsword_carddef(), loc(currentPid, handPloc)))
+}).seq(noUndoEffect()),
+ cost = combineCosts({expendCost, goldCost(1)}),
+ }),
+ }
+
+ })
+end
+
+-- Crypt - NullPloc Shuffle not working
+function choose_crypt_carddef()
+ return createDef({
+ id="choose_crypt",
+ name="The Crypt",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_crypt",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = singleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(cryptskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(cryptskill_carddef(), loc(oppPid, skillsPloc)))
+ .seq(createCardEffect(cryptBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(cryptBuffDef(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(lich_abomination_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_banshee_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_ghoul_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_revenant_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_bones_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_fire_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_zombie_minion_carddef(), loc(nil, nullPloc)))
+ --
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Crypt",
+ art = "art/epicart/watchful_gargoyle",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function cryptBuffDef()
+
+local priceBuff = getCostDiscountBuff("Crypt", 1, selectLoc(centerRowLoc).where(isCardType(vampireType).Or(isCardType(demonType).Or(isCardType(necromancerType)))))
+
+ return createGlobalBuff({
+ id="CryptPriceBuff",
+ name = "The Crypt",
+ abilities = {
+ createAbility({
+ id="CryptPriceBuff",
+ trigger = startOfTurnTrigger,
+ effect = createCardEffect(priceBuff, loc(currentPid, buffsPloc))
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Crypt",
+ art = "art/epicart/watchful_gargoyle",
+ text = "Vampire, Necromancer and Demon Champions cost less to buy from the Market. You may lose to take a card from the Crypt Deck and put it into play. Return Crypt cards to the Crypt deck when they leave play."
+ })
+ })
+end
+
+--[[function cryptSetupBuffDef()
+
+ return createGlobalBuff({
+ id="setupCryptBuff",
+ name = "Setup Crypt",
+ abilities = {
+ createAbility({
+ id="setupCryptBuff",
+ trigger = startOfGameTrigger,
+ effect = createCardEffect(CryptBuff, loc(oppPid, buffsPloc))
+ .seq(createCardEffect(cryptskill_carddef(), loc(currentPid, skillsPloc)))
+ .seq(createCardEffect(cryptskill_carddef(), loc(currentPid, skillsPloc)))
+
+ createCardEffect(lich_abomination_minion_carddef(), loc(currentPid, asidePloc))
+ .seq(createCardEffect(lich_banshee_minion_carddef(), loc(currentPid, asidePloc)))
+ .seq(saveTarget("Crypt").apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, asidePloc))))
+
+ })
+ }
+ })
+end
+]]
+
+function cryptskill_carddef()
+ local cardLayout = createLayout({
+ name = "Open Crypt",
+ art = "art/epicart/watchful_gargoyle",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText =
+ [[
+
+
+ >
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Open Crypt",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/watchful_gargoyle",
+ abilities = {
+ createAbility({
+ id = "cryptskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = hitSelfEffect(3)
+ .seq(randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc)))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1).And(minHealthCurrent(4)),
+ cost = expendCost,
+ }),
+ }
+
+ })
+end
+
+function lich_abomination_minion_carddef()
+ return createChampionDef({
+ id = "lich_abomination_minion",
+ name = "Lich Abomination Minion",
+ acquireCost = 0,
+ health = 6,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Abomination",
+ art = "art/epicart/scrap_golem_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 6,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_abomination_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4),
+ }),
+
+ createAbility({
+ id = "lich_abomination_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_banshee_minion_carddef()
+ return createChampionDef({
+ id = "lich_banshee_minion",
+ name = "Lich Banshee Minion",
+ acquireCost = 0,
+ health = 3,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Banshee",
+ art = "art/T_Banshee",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 3,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_banshee_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(6).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc))))
+ }),
+
+ createAbility({
+ id = "lich_banshee_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_ghoul_minion_carddef()
+ return createChampionDef({
+ id = "lich_ghoul_minion",
+ name = "Lich Ghoul Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_ghoul_minion_main",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3).seq(gainCombatEffect(selectLoc(currentDiscardLoc).where(isCardChampion()).count())),
+ --ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(1),gainCombatEffect(3),gainCombatEffect(1))
+ }),
+
+ createAbility({
+ id = "lich_ghoul_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_revenant_minion_carddef()
+ return createChampionDef({
+ id = "lich_revenant_minion",
+ name = "Lich Revenant Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_revenant_minion_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 5 health
+ {
+ effect = gainHealthEffect(5),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun an opposing champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ }),
+
+ createAbility({
+ id = "lich_revenant_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_skeleton_horde_minion_carddef()
+ return createChampionDef({
+ id = "lich_skeleton_horde_minion",
+ name = "Lich Skeleton Horde Minion",
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Skeleton Horde",
+ art = "art/epicart/reap_or_sow",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 4,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_skeleton_horde_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3),
+ }),
+
+ createAbility({
+ id = "lich_skeleton_horde_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+
+function lich_wall_of_bones_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_bones_minion",
+ name = "Lich Wall of Bones Minion",
+ acquireCost = 0,
+ health = 8,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Wall of Bones",
+ art = "art/T_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 8,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_bones_minion_main",
+ trigger = autoTrigger,
+ --cost = expendCost,
+ effect = nullEffect()
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_fire_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_fire_minion",
+ name = "Lich Wall of Fire Minion",
+ acquireCost = 0,
+ health = 7,
+ isGuard = false,
+ types = { minionType, magicType, constructType },
+ layout = createLayout({
+ name = "Wall of Fire",
+ art = "art/T_charing_guardian",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 7,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_fire_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(6),
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_zombie_minion_carddef()
+ return createChampionDef({
+ id = "lich_zombie_minion",
+ name = "Lich Zombie Minion",
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ cardTypeLabel = "undeadType",
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Zombie",
+ art = "art/sets/promos1art/zombie",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 1,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_zombie_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+ }),
+
+ createAbility({
+ id = "lich_zombie_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+
+ },
+ })
+end
+
+--Beast Pit
+local the_beast_Buff = createGlobalBuff({
+ id="the_beast_Buff",
+ name = "The Beast",
+ abilities = {
+ createAbility({
+ id="the_beast_Buff",
+ trigger = startOfTurnTrigger,
+ check = getTurnsPlayed(currentPid).gte(2),
+ effect = drawCardsEffect(1).seq(hitSelfEffect(1)).seq(gainCombatEffect(3))
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Beast",
+ art = "art/epicart/rage",
+ text = "Each turn: Draw 1. Lose . Gain ."
+ })
+})
+
+function choose_beast_pit_carddef()
+
+ return createDef({
+ id="choose_beast_pit",
+ name="The Beast Pit",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_beast_pit",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(beast_within_carddef(), loc(currentPid, deckPloc)))
+ .seq(createCardEffect(beast_within_carddef(), loc(oppPid, deckPloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(shuffleEffect(loc(oppPid, deckPloc)))
+ .seq(createCardEffect(the_beast_Buff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(the_beast_Buff, loc(oppPid, buffsPloc)))
+
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Beast Pit",
+ art = "art/epicart/rage",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+function beast_within_carddef()
+ return createDef(
+ {
+ id = "beast_within",
+ name = "The Beast Within",
+ types = {noStealType, actionType, noPlayType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "beast_within_draw",
+ layout = cardLayout,
+ effect = drawCardsEffect(1),
+ activations = singleActivations,
+ trigger = autoTrigger,
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "beast_within_main",
+ layout = cardLayout,
+ promptType = showPrompt,
+ activations = singleActivations,
+ effect = hitSelfEffect(1).seq(gainCombatEffect(3)),
+ check = minHealthCurrent(2),
+ layout = layoutCard(
+ {
+ title = "The Beast Within",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ trigger = uiTrigger,
+
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "The Beast Within",
+ art = "art/epicart/stealthy_predator",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+--Town Square
+function ST_tasty_meal_carddef()
+ return createDef(
+ {
+ id = "tasty_meal",
+ name = "Tasty Meal",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 2,
+ abilities = {
+ createAbility(
+ {
+ id = "tasty_meal_gold",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(2),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "tasty_meal_meal",
+ cost = sacrificeSelfCost,
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = gainHealthEffect(4),
+ tags = {}
+ }
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Tasty Meal",
+ art = "art/treasures/t_bottle_of_rum",
+ frame = "frames/generic_CardFrame",
+ cost = 2,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function ST_shopkeeper_s_keys_carddef()
+ return createDef(
+ {
+ id = "shopkeeper_s_keys",
+ name = "Shopkeeper's Keys",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 2,
+ abilities = {
+ createAbility(
+ {
+ id = "shopkeeper_s_keys_gold",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(2),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "shopkeeper_s_keys_keys",
+ cost = sacrificeSelfCost,
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Expend target opponent's champion of cost 4 gold or less, then drag it into your play area. At end of turn, return it to opponent's play area. Prepare it..",
+ validTargets = selectLoc(centerRowLoc),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(nullPloc),
+ }),
+ tags = {}
+ }
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Shopkeeper's Keys",
+ art = "art/T_theft",
+ frame = "frames/generic_CardFrame",
+ cost = 2,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+
+-- sheild_bearers_hall
+local shieldbearerhallbuff = createGlobalBuff({
+ id="shieldbearerhallbuff",
+ name = "Shield Bearer's Hall",
+ abilities = {
+ createAbility({
+ id="shieldbearerhallbuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Shield Bearer's Hall",
+ art = "art/t_shield_bearer",
+ text = "On turn: You may pay to put a Shield Bearer token (or pay for a Seasoned Shield Bearer token) in play and a Brightstar Shield in your hand."
+ })
+ })
+
+function choose_sheild_bearers_hall_carddef()
+ return createDef({
+ id="choose_sheild_bearers_hall",
+ name="Sheild Bearer's Hall",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_sheild_bearers_hall",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(sheild_bearers_hallskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(sheild_bearers_hallskill_carddef(), loc(oppPid, skillsPloc)))
+ .seq(createCardEffect(shieldbearerhallbuff , loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(shieldbearerhallbuff , loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Sheild Bearer's Hall",
+ art = "art/t_shield_bearer",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function sheild_bearers_hallskill_carddef()
+ local cardLayout = createLayout({
+ name = "Sheild Bearer's Hall",
+ art = "art/t_shield_bearer",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "sheild_bearers_hallskill_skill",
+ name = "Sheild Bearer's Hall",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_cleric_brightstar_shield",
+ abilities = {
+ createAbility({
+ id = "sheild_bearers_hallskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = combineCosts({expendCost, goldCost(2)}),
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ effect = createCardEffect(shieldbearertoken_carddef(), loc(currentPid, inPlayPloc))
+ .seq(createCardEffect(cleric_brightstar_shield_carddef(), loc(currentPid, handPloc))),
+ layout = createLayout({
+ name = "Call Shield Bearer",
+ art = "art/t_shield_bearer",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ {
+ effect = gainGoldEffect(-1)
+ .seq(createCardEffect(seasonedshieldbearertoken_carddef(), loc(currentPid, inPlayPloc)))
+ .seq(createCardEffect(cleric_brightstar_shield_carddef(), loc(currentPid, handPloc))),
+ condition = getPlayerGold(currentPid).gte(1),
+ layout = createLayout({
+ name = "Call Shield Bearer",
+ art = "art/t_fighter_seasoned_shield_bearer",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { }
+ }
+ },
+
+ }),
+ })
+ }
+
+ })
+end
+
+function shieldbearertoken_carddef()
+ return createChampionDef(
+ {
+ id = "shieldbearertoken",
+ name = "Shield Bearer",
+ types = {championType, nosteaalType},
+ acquireCost = 0,
+ health = 3,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "Shield_Bearer_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }),
+ --self-sac ability
+ createAbility(
+ {
+ id = "shieldbearertoken_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+
+ },
+ layout = createLayout(
+ {
+ name = "Seasoned Shield Bearer",
+ art = "art/t_shield_bearer",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function seasonedshieldbearertoken_carddef()
+ return createChampionDef(
+ {
+ id = "seasonedshieldbearertoken",
+ name = "Seasoned Shield Bearer",
+ types = {championType, nosteaalType},
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "Seasoned_Shield_Bearer_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }),
+ --self-sac ability
+ createAbility(
+ {
+ id = "seasonedshieldbearertoken_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+
+ },
+ layout = createLayout(
+ {
+ name = "Seasoned Shield Bearer",
+ art = "art/t_fighter_seasoned_shield_bearer",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+ health = 5,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+--The Apothecary
+local apothecarybuff = createGlobalBuff({
+ id="apothecarybuff",
+ name = "The Apothecary",
+ abilities = {
+ createAbility({
+ id="apothecarybuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Apothecary",
+ art = "art/treasures/T_Green_Potions_Large",
+ text = "On turn: You may pay to add 1 of 5 random potions into your inventory. You may repeat this action for more each time you use it on a single turn."
+ })
+ })
+
+function choose_apothecary_carddef()
+ return createDef({
+ id="choose_apothecary",
+ name="Apothecary",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_apothecary",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(apothecaryskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(apothecaryskill_carddef(), loc(oppPid, skillsPloc)))
+ .seq(createCardEffect(ST_apothecary_elixir_of_endurance_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(ST_apothecary_elixir_of_strength_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(ST_apothecary_elixir_of_fortune_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(ST_apothecary_elixir_of_concentration_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(ST_apothecary_elixir_of_wisdom_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(apothecarybuff , loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(apothecarybuff , loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Apothecary",
+ art = "art/treasures/T_Green_Potions_Large",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+ function apothecaryskill_carddef()
+ local cardLayout = createLayout({
+ name = "Buy Potion",
+ art = "art/treasures/T_Green_Potions_Large",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "apothecary_skill",
+ name = "Buy Potion",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/T_Green_Potions_Large",
+ abilities = {
+ createAbility({
+ id = "apothecaryskill_ab",
+ trigger = uiTrigger,
+ activations = multipleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = goldCost(1),
+ effect = randomEffect({
+ valueItem(1, createCardEffect(ST_apothecary_elixir_of_endurance_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ST_apothecary_elixir_of_fortune_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ST_apothecary_elixir_of_strength_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ST_apothecary_elixir_of_wisdom_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(ST_apothecary_elixir_of_concentration_carddef(), loc(currentPid, skillsPloc))),
+ })
+ .seq(addSlotToPlayerEffect(controllerPid, createPlayerIntExpressionSlot(skillCostModKey, toIntExpression(1), { endOfTurnExpiry })))
+ .seq(noUndoEffect()),
+ layout = createLayout({
+ name = "Buy Potion",
+ art = "art/treasures/T_Green_Potions_Large",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+
+function ST_apothecary_elixir_of_endurance_carddef()
+ local cardLayout = createLayout({
+ name = "Elixir of Endurance",
+ art = "art/T_elixir_of_endurance",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "ST_apothecary_elixir_of_endurance",
+ name = "Elixir of Endurance",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_elixir_of_endurance",
+ abilities = {
+ createAbility({
+ id = "ST_apothecary_elixir_of_endurance_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = sacrificeSelfCost,
+ effect = gainHealthEffect(5),
+ layout = createLayout({
+ name = "Elixir of Endurance",
+ art = "art/T_elixir_of_endurance",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+
+function ST_apothecary_elixir_of_wisdom_carddef()
+ local cardLayout = createLayout({
+ name = "Elixir of Wisdom",
+ art = "art/T_elixir_of_wisdom",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "ST_apothecary_elixir_of_wisdom",
+ name = "Elixir of Wisdom",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_elixir_of_wisdom",
+ abilities = {
+ createAbility({
+ id = "ST_apothecary_elixir_of_wisdom_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = sacrificeSelfCost,
+ effect = drawCardsEffect(1).seq(forceDiscard(1)),
+ layout = createLayout({
+ name = "Elixir of wisdom",
+ art = "art/T_elixir_of_wisdom",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+function ST_apothecary_elixir_of_concentration_carddef()
+ local cardLayout = createLayout({
+ name = "Elixir of Concentration",
+ art = "art/T_elixir_of_concentration",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "ST_apothecary_elixir_of_concentration",
+ name = "Elixir of Concentration",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_elixir_of_concentration",
+ abilities = {
+ createAbility({
+ id = "ST_apothecary_elixir_of_concentration_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = sacrificeSelfCost,
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a card in your hand.",
+ validTargets = selectLoc(loc(currentPid, handPloc)),
+ min = 0,
+ max = 1,
+ targetEffect = sacrificeTarget(),
+ }),
+ layout = createLayout({
+ name = "Elixir of concentration",
+ art = "art/T_elixir_of_concentration",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+
+function ST_apothecary_elixir_of_strength_carddef()
+ local cardLayout = createLayout({
+ name = "Elixir of Strength",
+ art = "art/T_elixir_of_strength",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "ST_apothecary_elixir_of_strength",
+ name = "Elixir of Strength",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_elixir_of_strength",
+ abilities = {
+ createAbility({
+ id = "ST_apothecary_elixir_of_strength_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = sacrificeSelfCost,
+ effect = gainCombatEffect(3),
+ layout = createLayout({
+ name = "Elixir of strength",
+ art = "art/T_elixir_of_strength",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+
+ function ST_apothecary_elixir_of_fortune_carddef()
+
+ local priceBuff = getCostDiscountBuff("Elixir of Fortune", 1, selectLoc(centerRowLoc).where(isCardType(actionType)), endOfTurnExpiry)
+ local eofFortuneBuff = createGlobalBuff({
+ id="Elixir of Fortune",
+ name = "Elixir of Fortune",
+ abilities = {
+ createAbility({
+ id="STapoth_Eoffortune_Buff",
+ trigger = autoTrigger,
+ effect = createCardEffect(priceBuff, loc(oppPid, buffsPloc)).seq(sacrificeSelf())
+ })
+ },
+
+ })
+ local cardLayout = createLayout({
+ name = "Elixir of fortune",
+ art = "art/T_elixir_of_fortune",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "ST_apothecary_elixir_of_fortune",
+ name = "Elixir of Fortune",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/T_elixir_of_fortune",
+ abilities = {
+ createAbility({
+ id = "ST_apothecary_elixir_of_fortune_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = sacrificeSelfCost,
+ effect = createCardEffect(eofFortuneBuff, loc(currentPid, buffsPloc)),
+ layout = createLayout({
+ name = "Elixir of Fortune",
+ art = "art/T_elixir_of_fortune",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+
+--Great Hall
+local greatHallbuff = createGlobalBuff({
+ id="greatHallbuff ",
+ name = "The Great Hall",
+ abilities = {
+ createAbility({
+ id="greatHallbuff ",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Great Hall",
+ art = "art/treasures/t_cleric_elixir_golden",
+ text = "Each turn you may pay to put a Poison card in your opponent's discard pile. If you have an 'Assassin' card in play you may take this action for free."
+ })
+ })
+
+function choose_great_hall_carddef()
+ return createDef({
+ id="choose_great_hall",
+ name="The Great Hall",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_great_hall",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(greathallskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(greathallskill_carddef(), loc(oppPid, skillsPloc)))
+ .seq(createCardEffect(greatHallbuff , loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(greatHallbuff , loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Great Hall",
+ art = "art/treasures/t_cleric_elixir_golden",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+function greathallskill_carddef()
+ local cardLayout = createLayout({
+ name = "Poison",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "greathallskill",
+ name = "Poison",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_cleric_elixir_green",
+ abilities = {
+ createAbility({
+ id = "greathallskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ check = getPlayerGold(currentPid).gte(3).Or(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType(assassinType)).count().gte(1)).Or(selectLoc(loc(currentPid, castPloc)).where(isCardType(assassinType)).count().gte(1)),
+ cost = expendCost,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(-3).seq(createCardEffect(ST_poison_carddef(), loc(oppPid, discardPloc))),
+ condition = getPlayerGold(currentPid).gte(3),
+ layout = layoutCard(
+ {
+ title = "Poison",
+ art = "art/treasures/t_cleric_elixir_green",
+ xmlText= [[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombat2Tag}
+ },
+ {
+ effect = createCardEffect(ST_poison_carddef(), loc(oppPid, discardPloc)),
+ condition = selectLoc(loc(currentPid, inPlayPloc)).where(isCardType(assassinType)).count().gte(1),
+ --selectLoc(currentInPlayLoc).where(isCardType("assassinType")).count().gte(1),
+
+ layout = layoutCard(
+ {
+ title = "Poison",
+ art = "art/treasures/t_cleric_elixir_green",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainHealth2Tag}
+ }
+ }
+ }
+ ),
+ layout = createLayout({
+ name = "Poison",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }
+
+ })
+end
+
+function ST_poison_carddef()
+ return createDef(
+ {
+ id = "poison_drink",
+ name = "Poison",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "poison_drink_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Poison",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+--Investment Bank
+local investment_bank_buff = createGlobalBuff({
+ id="investment_bank_buff",
+ name = "The Investment Bank",
+ abilities = {
+ createAbility({
+ id="investment_bank_buff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Investment Bank",
+ art = "art/t_bribe",
+ text = "Each turn you may pay to upgrade a Gold, Ruby, or Diamond card in your hand or discard pile."
+ })
+ })
+
+
+function choose_investment_bank_carddef()
+ return createDef({
+ id="choose_investment_bank",
+ name="The Investment Bank",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_investment_bank",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(investmentskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(investmentskill_carddef(), loc(oppPid, skillsPloc)))
+ .seq(createCardEffect(investment_bank_buff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(investment_bank_buff, loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Investment Bank",
+ art = "art/t_bribe",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function investmentskill_carddef()
+ local cardLayout = createLayout({
+ name = "Investment",
+ art = "art/t_bribe",
+ frame = "frames/generic_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "investmentskill",
+ name = "Investment",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_bribe",
+ abilities = {
+ createAbility({
+ id = "investmentskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ cost = combineCosts({ expendCost, goldCost(2) }),
+ check = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('gold').Or(isCardName('ruby')).Or(isCardName('diamond'))).count().gte(1),
+ effect = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Transform a Gold in your discard pile into a Ruby.",
+ validTargets = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('gold')),
+ min = 0,
+ max = 1,
+ targetEffect = transformTarget("ruby"),
+ }),
+ condition = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('gold')).count().gte(1),
+
+ layout = createLayout({
+ name = "Invest in Rubies",
+ art = "art/T_Ruby",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+ ]],
+ }),
+
+ tags = { }
+ },
+
+ {
+ effect = pushTargetedEffect({
+ desc = "Transform a Ruby in your discard pile into a Diamond.",
+ validTargets = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('ruby')),
+ min = 0,
+ max = 1,
+ targetEffect = transformTarget("ST_IB_diamond"),
+
+ }),
+ condition = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('ruby')).count().gte(1),
+
+ layout = createLayout({
+ name = "Invest in Diamonds",
+ art = "art/treasures/alchemist_diamond",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+
+ {
+ effect = pushTargetedEffect({
+ desc = "Transform a Diamond in your discard pile into a Jewel of Thandarlore.",
+ validTargets = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('ST_IB_diamond')),
+ min = 0,
+ max = 1,
+ targetEffect = transformTarget("gold"),
+ }),
+ condition = selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName('ST_IB_diamond')).count().gte(1),
+
+ layout = createLayout({
+ name = "Invest in Jewel of Thandarlore",
+ art = "art/T_Prism_RainerPetter",
+ frame = "frames/Generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ tags = { }
+ }
+ }
+ }),
+
+ layout = createLayout({
+ name = "Investment",
+ art = "art/t_bribe",
+ frame = "frames/generic_CardFrame",
+ xmlText = [[
+
+
+
+
+
+ ]],
+ }),
+ tags = { },
+ })
+ }})
+
+
+end
+
+function ST_IB_diamond_carddef()
+ return createDef(
+ {
+ id = "ST_IB_diamond",
+ name = "Diamond",
+ types = {actionType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "ST_IB_diamond",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainGoldEffect(3)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Diamond",
+ art = "art/treasures/alchemist_diamond",
+ frame = "frames/Generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+
+function jewelofthandarlore_carddef()
+ return createDef(
+ {
+ id = "jewelofthandarlore",
+ name = "Jewel of Thandarlore",
+ types = {actionType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "jewelofthandarlore",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainGoldEffect(4)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Jewel of Thandarlore",
+ art = "art/T_Prism_RainerPetter",
+ frame = "frames/Generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+
+
+-- Smuggler's Den
+function choose_smugglers_den_carddef()
+ return createDef({
+ id="choose_smugglers_den",
+ name="The Smuggler's Den",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_smugglers_den",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ --.seq(createCardEffect(smuggleskill_carddef(), currentSkillsLoc))
+ --.seq(createCardEffect(smuggleskill_carddef(), loc(oppPid, skillsPloc)))
+ --.seq(createCardEffect(smuggleskill_carddef(), currentSkillsLoc))
+ --.seq(createCardEffect(smuggleskill_carddef(), loc(oppPid, skillsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Smuggler's Den",
+ art = "art/t_rasmus_the_smuggler",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+function stashskill_carddef()
+ local cardLayout = createLayout({
+ name = "Stash",
+ art = "art/t_smash_and_grab",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "stashskill_skill",
+ name = "Stash",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_smash_and_grab",
+ abilities = {
+ createAbility({
+ id = "stashskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a card from the Market. Move it to The Smuggler's Den.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(centerRowLoc),
+ targetEffect = moveTarget(nullPloc)
+
+ }),
+ cost = combineCosts({expendCost, goldCost(1)}),
+ }),
+ }
+
+ })
+end
+
+function smuggleskill_carddef()
+ local cardLayout = createLayout({
+ name = "Smuggle",
+ art = "art/t_smash_and_grab",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "smuggleskill_skill",
+ name = "Smuggle",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_smash_and_grab",
+ abilities = {
+ createAbility({
+ id = "smuggleskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = moveTarget(myRevealPloc).apply(selectLoc(nullPLoc))
+ .seq(promptSplit({
+ selector = selectLoc(currentRevealLoc),
+ take = const(), -- number of cards to take for split
+ sort = const(1), -- number of cards to be sorted for ef2
+ minTake = const(1), -- number of mandatory cards moved to ef2
+ ef1 = moveTarget(nullPloc), -- effect to be applied to cards left
+ ef2 = moveTarget(centerRow), -- effect to be applied to sorted cards
+ header = "", -- prompt header
+ description = "Sacrifice the top 3 cards of the market deck. Choose 1 for Stone of Laughing Shadow to become a copy of this turn.",
+ rightPileDesc = "Right card to copy.",
+ pile1Name = "Sacrifice",
+ pile2Name = "Copy then Sacrifice",
+ eff1Tags = { buytopdeckTag },
+ eff2Tags = { cheapestTag }
+})),
+ cost = combineCosts({expendCost, goldCost(1)}),
+ }),
+ }
+
+ })
+end
+
+-- Reliquary
+function tooth_of_ingarash_carddef_carddef()
+ return createDef(
+ {
+ id = "tooth_of_ingarash_carddef",
+ name = "Tooth of Ingarash",
+ types = {itemType},
+ factions = { wildFaction },
+ acquireCost = 6,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "tooth_of_ingarash_carddef_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(selectLoc(loc(currentPid, discardPloc).count()))
+ .seq(drawCardsEffect(1))
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Tooth of Ingarash",
+ art = "art/t_skeleton_green",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function shard_of_slaughterclaw_carddef_carddef()
+ return createDef(
+ {
+ id = "shard_of_slaughterclaw_carddef",
+ name = "Shard of Slaughterclaw",
+ types = {itemType},
+ factions = { necrosFaction },
+ acquireCost = 6,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "shard_of_slaughterclaw_carddef_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(revealPloc).apply(selectLoc(tradeDeckLoc)).take(3)
+ .seq(gainCombatEffect(selectLoc(loc(revealPloc)).sum(getCardCost())))
+ .seq(sacrificeTarget(selectLoc(loc(revealPloc))))
+
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Shard of Slaughterclaw",
+ art = "art/t_skeleton",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function steel_of_karakan_carddef_carddef()
+ return createDef(
+ {
+ id = "steel_of_karakan_carddef",
+ name = "Steel of Karakan",
+ types = {itemType},
+ factions = { necrosFaction },
+ acquireCost = 6,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "steel_of_karakan_carddef_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(revealPloc).apply(selectLoc(tradeDeckLoc)).take(4)
+ .seq(gainHealthEffect(selectLoc(loc(revealPloc)).sum(getCardCost())))
+ .seq(sacrificeTarget(selectLoc(loc(revealPloc))))
+
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Steel of Karakan",
+ art = "art/t_thief_sacrificial_dagger",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+--Stone of LS - NOT FINISHED
+function stone_of_laughing_shadow_carddef_carddef()
+ return createDef(
+ {
+ id = "stone_of_laughing_shadow_carddef",
+ name = "Stone of Laughing Shadow",
+ types = {itemType},
+ factions = { necrosFaction },
+ acquireCost = 6,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "stone_of_laughing_shadow_carddef_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(myRevealPloc).apply(selectLoc(tradeDeckLoc)).take(3)
+ .seq(promptSplit({
+ selector = selectLoc(currentRevealLoc),
+ take = const(1), -- number of cards to take for split
+ sort = const(1), -- number of cards to be sorted for ef2
+ minTake = const(1), -- number of mandatory cards moved to ef2
+ ef1 = sacrificeTarget(true, 1), -- effect to be applied to cards left
+ ef2 = moveToBottomDeckTarget(true, 1), -- effect to be applied to sorted cards
+ header = "", -- prompt header
+ description = "Sacrifice the top 3 cards of the market deck. Choose 1 for Stone of Laughing Shadow to become a copy of this turn.",
+ rightPileDesc = "Right card to copy.",
+ pile1Name = "Sacrifice",
+ pile2Name = "Copy then Sacrifice",
+ eff1Tags = { buytopdeckTag },
+ eff2Tags = { cheapestTag }
+}))
+ .seq(gainHealthEffect(selectLoc(loc(revealPloc)).sum(getCardCost())))
+ .seq(sacrificeTarget(selectLoc(loc(revealPloc))))
+
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Stone of Laughing Shadow",
+ art = "art/t_shadow_spell_09_blue",
+ frame = "frames/generic_CardFrame",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function malvan_s_staff_carddef_carddef()
+ return createDef(
+ {
+ id = "malvan_s_staff_carddef",
+ name = "Malvan's Staff",
+ types = {itemType},
+ factions = { wildFaction },
+ acquireCost = 3,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {createAbility(
+ {
+ id = "malvan_draw",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = drawCardsEffect(1)
+
+ }
+ ),
+
+ createAbility({
+ id = "malvan_imperial",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = gainHealthEffect(3),
+ allyFactions = {imperialFaction}
+ }),
+
+ createAbility({
+ id = "malvan_necros",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = gainCombatEffect(2),
+ allyFactions = {necrosFaction}
+ }),
+ createAbility({
+ id = "malvan_wild",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = drawCardsEffect(1).seq(forceDiscardEffect(1)),
+ allyFactions = {wildFaction}
+ }),
+ createAbility({
+ id = "malvan_guild",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = gainGoldEffect(2),
+ allyFactions = {guildFaction}
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Malvan's Staff",
+ art = "art/t_wizard_serpentine_staff",
+ frame = "frames/HR_CardFrame_Action_Wild",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+--Sorceror's Tower
+
+local sorcTowerbuff = createGlobalBuff({
+ id="sorcTowerbuff",
+ name = "Sorceror's Tower",
+ abilities = {createAbility({
+ id = "sorc_tower_buff",
+ layout = loadLayoutData("layouts/base/wizard_arcane_wand"),
+ effect = drawCardsWithAnimation(1)
+ .seq(gainCombatEffect(selectLoc(currentCastLoc).where(isCardType(spellType).Or(isCardType(curseType))).count())),
+ cost = noCost,
+ trigger = onPlayTrigger,
+ playAllType = playFirstPlayType,
+ tags = {draw1Tag},
+ aiPriority = toIntExpression(300)
+ })},
+ createCardEffectAbility = createCardEffectAbility(
+ {
+ trigger = locationChangedCardTrigger,
+ effect = e.Filtered(selectLoc(currentCastLoc).where(isCardType(spellType).Or(isCardType(curseType))), ignoreTarget(gainCombatEffect(selectTargets().sum(const(1)))))
+ }
+ ),
+ buffDetails = createBuffDetails({
+ name = "Sorceror's Tower",
+ art = "art/t_calm_channel",
+ text = "Setup: Champions with the 'Mage' tag get +1{shield}. On turn: When you play an Action with the 'Spell' or 'Curse' tag that costs 1{gold} or more, gain {combat_1}."
+ })
+ })
+
+
+
+function choose_scorcerors_tower_carddef()
+ return createDef({
+ id="choose_scorcerors_tower",
+ name="The Scorceror's Tower",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_scorcerors_tower",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = singleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(grantHealthTarget(1, { SlotExpireEnum.never }, nullEffect(), "Gaze upon my power.").apply(selectLoc(tradeDeckLoc).where(isCardType(mageType))))
+ .seq(createCardEffect(sorcTowerbuff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(sorcTowerbuff, loc(oppPid, buffsPloc)))
+
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "The Scorceror's Tower",
+ art = "art/t_calm_channel",
+ frame = "frames/Coop_Campaign_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+--[[ local scorcerors_tower_Buff = createGlobalBuff({
+ id="scorcerors_tower_Buff",
+ name = "Scorceror's Tower",
+ abilities = {
+ createAbility({
+ id="scorcerors_tower_Action_Buff",
+ trigger = startOfTurnTrigger,
+ effect = gainCombatEffect(selectLoc(loc(currentPid, castPloc)).where(isCardType("spellType").Or(isCardType("curseType")).And(getCardCost().gte(1))).count())
+
+ })
+
+ },
+ buffDetails = createBuffDetails({
+ name = "Scorceror's Tower",
+ art = "art/t_calm_channel",
+ text = "When you play an Action with the 'Spell' or 'Curse' tag that costs 1{gold} or more, gain {combat_1}"
+ })
+ })
+]]
+
+
+
+--Fight Club - NOT WORKING
+function fightClubBuffDef()
+
+local fightClubPriceBuff = getCostDiscountBuff("Fight Club", -2, selectLoc(centerRowLoc).where(isCardType(warriorType)))
+
+ return createGlobalBuff({
+ id="fightClub",
+ name = "Fight Club",
+ abilities = {
+ createAbility({
+ id="fightClubPriceBuff",
+ trigger = startOfTurnTrigger,
+ effect = createCardEffect(fightClubPriceBuff, loc(currentPid, buffsPloc))
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Fight Club",
+ art = "art/T_shoulder_crush",
+ text = "Setup: All 'Warrior' champions cost +{gold_2} to buy, but can prepare for free once per turn."
+ })
+ })
+end
+
+function choose_fight_club_carddef()
+
+
+local ab = createAbility({
+ id = "expendio",
+ effect = prepareTarget().apply(selectSource()),
+ cost = noCost,
+ check = selectSource().where(isCardExpended()).count().eq(1),
+ trigger = autoTrigger,
+ activations = singleActivation,
+ tags = { }
+})
+
+ return createDef({
+ id="choose_fight_club",
+ name="Fight Club",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_fight_club",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(addSlotToTarget(createAbilitySlot({
+ ability = ab,
+ expiry = { neverExpiry },
+ displayText = "Can prepares once for free each turn.",
+ })).apply(selectLoc(tradeDeckLoc).where(isCardChampion().And(isCardType(warriorType)))))
+
+ .seq(createCardEffect(fightClubBuffDef(), loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(fightClubBuffDef(), loc(oppPid, buffsPloc)))
+
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Fight Club",
+ art = "art/T_shoulder_crush",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+
+-- Colosseum
+local colosseumbuff = createGlobalBuff({
+ id="colosseumbuff",
+ name = "The Colosseum",
+ abilities = {
+ createAbility({
+ id="colosseumbuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "The Colosseum",
+ art = "art/epicart/lord_of_the_arena",
+ text = "Setup: All market champions start with +3 permanently. On Turn: + each time you play a champion with a cost."
+ })
+ })
+
+function choose_colosseum_carddef()
+ return createDef({
+ id="choose_colosseum",
+ name="Colosseum",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_colosseum",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(grantHealthTarget(3, { SlotExpireEnum.never }, nullEffect(), "To those about to die...").apply(selectLoc(tradeDeckLoc).where(isCardChampion())))
+
+ .seq(addSlotToTarget(createAbilitySlot({
+ ability = createAbility({
+ id = "Colosseum",
+ effect = gainCombatEffect(2),
+ trigger = onPlayTrigger
+ }),
+ expiry = { neverExpiry },
+ displayText = "+1 Combat on play",
+ })).apply(selectLoc(tradeDeckLoc).where(isCardChampion())))
+
+ .seq(createCardEffect(colosseumbuff , loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(colosseumbuff , loc(oppPid, buffsPloc)))
+
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Colosseum",
+ art = "art/epicart/lord_of_the_arena",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+-- Opera House
+ local operaHousebuff = createGlobalBuff({
+ id="operaHousebuff",
+ name = "Opera House",
+ abilities = {
+ createAbility({
+ id="operaHousebuff",
+ trigger = startOfTurnTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_bold_saga")).count().eq(0), createCardEffect(bard_bold_saga_carddef(), loc(currentPid, skillsPloc)), nullEffect()),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Opera House",
+ art = "art/classes/bard/bard_bold_saga",
+ text = "On your turn gain a Bold Saga ability (if you do not already have one)."
+ })
+ })
+
+function choose_operaHouse_carddef()
+ return createDef({
+ id="choose_operaHouse",
+ name="Opera House",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_operaHouse",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = singleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(operaHousebuff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(operaHousebuff, loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(storyTellEffectWithPortrait("bard_02", "La la la!"))
+ .seq(waitForClickEffect("The Bard's songs draw a crowd. Don't just let them stand around - recruit them to your cause.", ""))
+
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Opera House",
+ art = "art/classes/bard/bard_bold_saga",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+--Zombie Horde
+ function zombiehordebuff()
+ return createGlobalBuff({
+ id="zombiehordebuff",
+ name = "Zombie Apocalypse",
+ abilities = {
+ createAbility({
+ id="zombiehordebuff",
+ trigger = startOfTurnTrigger,
+ check = getTurnsPlayed(currentPid).gte(2),
+ effect = createCardEffect(zombiehorde_carddef(), loc(oppPid, inPlayPloc))
+ .seq(createCardEffect(zombiehorde_carddef(), loc(oppPid, inPlayPloc)))
+ .seq(hitSelfEffect(selectLoc(loc(oppPid, inPlayPloc)).where(isCardName("zombiehorde")).count()))
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Zombie Apocalypse",
+ art = "art/epicart/zombie_token",
+ text = "On your turn 2 Zombie Hordes appear and attack you. At end of turn, all Zombie Hordes change side."
+ })
+ })
+end
+
+function choose_zombiehorde_carddef()
+ return createDef({
+ id="choose_zombiehorde",
+ name="Zombie Apocalypse",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_zombiehorde",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = singleActivations,
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(createCardEffect(zombiehordebuff(), loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(zombiehordebuff(), loc(oppPid, buffsPloc)))
+
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+
+
+ }
+ )
+ },
+ layout = createLayout({
+ name = "Zombie Apocalypse",
+ art = "art/epicart/zombie_token",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }),
+ })
+ end
+
+
+function zombiehorde_carddef()
+ return createChampionDef(
+ {
+ id = "zombiehorde",
+ name = "Zombie Horde",
+ types = {championType, nosteaalType,},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "zombiehorde_main",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(loc(oppPid, inPlayPloc)).apply(selectSource())
+
+ }
+ ),
+ --self-sac ability
+ createAbility(
+ {
+ id = "zombiehorde_sac",
+ trigger = onStunTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Zombie Horde",
+ art = "art/epicart/zombie_token",
+ frame = "frames/generic_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+--[[function zombiehordeBuff()
+ return createGlobalBuff({
+ id="zombiehordeBuff",
+ name = "Zombie Horde",
+ abilities = {
+ createAbility({
+ id="zombiehordeBuff",
+ trigger = startOfTurnTrigger,
+ effect = createCardEffect(zombiehorde_carddef(), loc(oppPid, inPlayPloc))
+ .seq(createCardEffect(zombiehorde_carddef(), loc(oppPid, inPlayPloc)))
+ .seq(hitSelfEffect(geCardName(zombiehorde).count()))
+ })
+ }
+ })
+end
+
+function endGame(g)
+end]]
+
+-- Auxiliary effects
+local function goFirstEffect()
+-- this is a dirty hack to make player going first only draw three cards for their first turn. Feel free to replace it with a better implementation.
+ return createGlobalBuff({
+ id="draw_three_start_buff",
+ name = "Go First",
+ abilities = {
+ createAbility({
+ id="go_first_draw_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(
+ getTurnsPlayed(oppPid).eq(1),
+ nullEffect(),
+ drawCardsEffect(2)
+ )
+ })
+ }
+ })
+end
+
+function setupGame(g)
+ registerCards(
+ g,
+ {
+ choose_supply_cache_carddef(),
+ choose_armoury_carddef(),
+ choose_apothecary_carddef(),
+ ST_apothecary_elixir_of_endurance_carddef(),
+ ST_apothecary_elixir_of_fortune_carddef(),
+ ST_apothecary_elixir_of_strength_carddef(),
+ ST_apothecary_elixir_of_wisdom_carddef(),
+ ST_apothecary_elixir_of_concentration_carddef(),
+ choose_crypt_carddef(),
+ lich_abomination_minion_carddef(),
+ lich_banshee_minion_carddef(),
+ lich_ghoul_minion_carddef(),
+ lich_revenant_minion_carddef(),
+ lich_skeleton_horde_minion_carddef(),
+ lich_wall_of_bones_minion_carddef(),
+ lich_wall_of_fire_minion_carddef(),
+ lich_zombie_minion_carddef(),
+ choose_scorcerors_tower_carddef(),
+ choose_smugglers_den_carddef(),
+ stashskill_carddef(),
+ --smuggleskill_carddef(),
+ choose_beast_pit_carddef(),
+ beast_within_carddef(),
+ choose_great_hall_carddef(),
+ ST_poison_carddef(),
+ choose_colosseum_carddef(),
+ choose_investment_bank_carddef(),
+ ST_IB_diamond_carddef(),
+ jewelofthandarlore_carddef(),
+
+ choose_alchemist_lab_carddef(),
+ choose_sheild_bearers_hall_carddef(),
+ shieldbearertoken_carddef(),
+ seasonedshieldbearertoken_carddef(),
+ choose_zombiehorde_carddef(),
+ zombiehorde_carddef(),
+
+ ST_tasty_meal_carddef(),
+ ST_shopkeeper_s_keys_carddef(),
+
+
+ --shard_of_slaughterclaw_carddef(),
+ --stone_of_laughing_shadow_carddef(),
+ --tooth_of_ingarash_carddef(),
+ --steel_of_karakan_carddef(),
+ --malvan_s_staff_carddef(),
+
+ }
+ )
+
+ standardSetup(
+ g,
+ {
+ description = "Script by Aarkenell. Battlefields ideas by Marauder Mo, Birdlaw and Aarkenell. Created 14.10.2024.",
+ playerOrder = { plid1, plid2 },
+ ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
+ timeoutAi = createTimeoutAi(),
+ opponents = { { plid1, plid2 } },
+ centerRow = { --[["demon_hunter"]] },
+
+ tradeDeckExceptions = {
+ },
+ players = {
+ {
+ id = plid1,
+ startDraw = 0,
+ init = {
+ fromEnv = plid1
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(3),
+ goFirstEffect(),
+ discardCardsAtTurnStartDef(),
+ fatigueCount(42, 1, "FatigueP2"),
+ P1_chooseBattlefieldBuff()
+ }
+ }
+ },
+ {
+ id = plid2,
+ startDraw = 0,
+ init = {
+ fromEnv = plid2
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ fatigueCount(42, 1, "FatigueP2"),
+ P2_chooseInfoBuff()
+ }
+ }
+ }
+ }
+ })
+end
+
+
+
+function endGame(g)
+end
+
+
+function setupMeta(meta)
+ meta.name = "tester 2"
+ meta.minLevel = 1
+ meta.maxLevel = 5
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/tester 2.lua"
+ meta.features = {
+}
+
+end
\ No newline at end of file
From b2f9fb629e1e04d397243685c913da414ab60540 Mon Sep 17 00:00:00 2001
From: Aarkenell <143031422+Aarkenell@users.noreply.github.com>
Date: Wed, 11 Feb 2026 15:05:18 +0000
Subject: [PATCH 2/6] Add files via upload
---
Aarkenell/2v2 Co-op.lua | 5364 +++++++++++++++
Aarkenell/2v2 Competitive.lua | 235 +
Aarkenell/Co-op Vikings.lua | 738 ++
...Defender (No Heroes) - 2v2 Competitive.lua | 473 ++
...fender (with Heroes) - 2v2 Competitive.lua | 439 ++
Aarkenell/Dual class.lua | 5929 ++++++++++++-----
Aarkenell/Lich - Co-op.lua | 2236 +++++++
7 files changed, 13814 insertions(+), 1600 deletions(-)
create mode 100644 Aarkenell/2v2 Co-op.lua
create mode 100644 Aarkenell/2v2 Competitive.lua
create mode 100644 Aarkenell/Co-op Vikings.lua
create mode 100644 Aarkenell/Defender (No Heroes) - 2v2 Competitive.lua
create mode 100644 Aarkenell/Defender (with Heroes) - 2v2 Competitive.lua
create mode 100644 Aarkenell/Lich - Co-op.lua
diff --git a/Aarkenell/2v2 Co-op.lua b/Aarkenell/2v2 Co-op.lua
new file mode 100644
index 0000000..363e0f9
--- /dev/null
+++ b/Aarkenell/2v2 Co-op.lua
@@ -0,0 +1,5364 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+--require 'hardai'
+require 'coopai'
+require 'timeoutai'
+
+-- need to fix combined health process
+
+isCoop = true
+
+
+--extra buffs
+
+
+
+local function ef_tough1()
+
+return createGlobalBuff({
+ id="toughbuff1",
+ name = "Tough Buff",
+ abilities = {
+ createAbility({
+ id= "toughbuff1",
+ trigger = startOfTurnTrigger,
+ activations = singleActivations,
+ effect = gainToughnessEffect(1),
+
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Tough",
+ art = "art/treasures/fighter_iron_shield",
+ text = "Gain 1 Toughness each turn."
+ })
+ })
+end
+
+
+local function ef_tough2()
+
+return createGlobalBuff({
+ id="toughbuff2",
+ name = "Tough Buff",
+ abilities = {
+ createAbility({
+ id= "toughbuff2",
+ trigger = startOfTurnTrigger,
+ activations = singleActivations,
+ effect = gainToughnessEffect(2),
+
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Tough",
+ art = "art/treasures/fighter_iron_shield",
+ text = "Gain 2 Toughness each turn."
+ })
+
+ })
+end
+
+local function ef_tough3()
+
+return createGlobalBuff({
+ id="toughbuff3",
+ name = "Tough Buff",
+ abilities = {
+ createAbility({
+ id= "toughbuff3",
+ trigger = startOfTurnTrigger,
+ activations = singleActivations,
+ effect = gainToughnessEffect(3),
+
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Tough",
+ art = "art/treasures/fighter_iron_shield",
+ text = "Gain 3 Toughness each turn."
+ })
+ })
+end
+
+local ef_hp50 = gainMaxHealthEffect(oppPid, const(50)).seq(healPlayerEffect(oppPid, 50))
+
+local ef_hp100 = gainMaxHealthEffect(oppPid, const(100)).seq(healPlayerEffect(oppPid, 100))
+ .seq(createCardEffect(ef_tough1(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_tough1(), loc(nextOppPid, buffsPloc)))
+
+local ef_hp150 = gainMaxHealthEffect(oppPid, const(150)).seq(healPlayerEffect(oppPid, 150))
+ .seq(createCardEffect(ef_tough2(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_tough2(), loc(nextOppPid, buffsPloc)))
+
+
+
+local function ef_combat3()
+
+return createGlobalBuff({
+ id="combatbuff3",
+ name = "Combat Buff",
+ abilities = {
+ createAbility({
+ id= "combatbuff3",
+ trigger = startOfTurnTrigger,
+ effect = gainCombatEffect(3),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Hard Hitter",
+ art = "art/t_fighter_sweeping_blow",
+ text = "Gain each turn."
+ })
+ })
+end
+
+local function ef_combat5()
+
+return createGlobalBuff({
+ id="combatbuff5",
+ name = "Combat Buff",
+ abilities = {
+ createAbility({
+ id= "combatbuff5",
+ trigger = startOfTurnTrigger,
+ effect = gainCombatEffect(5),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Hard Hitter",
+ art = "art/t_fighter_sweeping_blow",
+ text = "Gain each turn."
+ })
+ })
+end
+
+local function ef_combat8()
+
+return createGlobalBuff({
+ id="combatbuff8",
+ name = "Combat Buff",
+ abilities = {
+ createAbility({
+ id= "combatbuff1",
+ trigger = startOfTurnTrigger,
+ effect = gainCombatEffect(8),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Hard Hitter",
+ art = "art/t_fighter_sweeping_blow",
+ text = "Gain each turn."
+ })
+ })
+end
+
+local function ef_econ1()
+
+return createGlobalBuff({
+ id="econbuff1",
+ name = "Econ Buff",
+ abilities = {
+ createAbility({
+ id= "econbuff1",
+ trigger = startOfTurnTrigger,
+ effect = gainGoldEffect(1),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Money Bags",
+ art = "art/t_ruby",
+ text = "Gain each turn."
+ })
+ })
+end
+
+local function ef_econ2()
+
+return createGlobalBuff({
+ id="econbuff2",
+ name = "Econ Buff",
+ abilities = {
+ createAbility({
+ id= "econbuff2",
+ trigger = startOfTurnTrigger,
+ effect = gainGoldEffect(2),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Money Bags",
+ art = "art/t_ruby",
+ text = "Gain each turn."
+ })
+ })
+end
+
+local function ef_econ3()
+
+return createGlobalBuff({
+ id="econbuff3",
+ name = "Econ Buff",
+ abilities = {
+ createAbility({
+ id= "econbuff2",
+ trigger = startOfTurnTrigger,
+ effect = gainGoldEffect(2).seq(drawCardsEffect(1)),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Money Bags",
+ art = "art/t_ruby",
+ text = "Gain and draw 1 each turn."
+ })
+ })
+end
+
+
+local function ef_randombuff1()
+
+return createGlobalBuff({
+ id="randombuff1",
+ name = "Unpredictable",
+ abilities = {
+ createAbility({
+ id= "randombuff1",
+ trigger = startOfTurnTrigger,
+ effect = randomEffect({
+ valueItem(1, gainCombatEffect(3)),
+ valueItem(1, gainHealthEffect(5)),
+ valueItem(1, gainGoldEffect(1)),
+ valueItem(1, gainToughnessEffect(3)),
+
+ }),
+ }),
+ },
+
+ buffDetails = createBuffDetails({
+ name = "Unpredictable",
+ art = "art/epicart/disappearing_act",
+ text = "Gain a small random bonus each turn."
+ })
+ })
+
+end
+
+local function ef_randombuff2()
+
+
+
+return createGlobalBuff({
+ id="randombuff2",
+ name = "Unpredictable",
+ abilities = {
+ createAbility({
+ id= "randombuff2",
+ trigger = startOfTurnTrigger,
+ effect = randomEffect({
+ valueItem(1, gainCombatEffect(5)),
+ valueItem(1, gainHealthEffect(10)),
+ valueItem(1, gainGoldEffect(2)),
+ valueItem(1, gainToughnessEffect(5)),
+ valueItem(1, drawCardsEffect(1)),
+ valueItem(1, ef_discard1),
+ }),
+ }),
+ },
+
+ buffDetails = createBuffDetails({
+ name = "Unpredictable",
+ art = "art/epicart/disappearing_act",
+ text = "Gain a moderate random bonus each turn."
+ })
+ })
+
+end
+
+local function ef_randombuff3()
+
+local ef_discard1 = oppDiscardEffect(1).seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Drop it.",
+ waitForClick= constBoolExpression(false)
+ }))
+
+return createGlobalBuff({
+ id="randombuff3",
+ name = "Unpredictable",
+ abilities = {
+ createAbility({
+ id= "randombuff3",
+ trigger = startOfTurnTrigger,
+ effect = randomEffect({
+ valueItem(1, gainCombatEffect(8)),
+ valueItem(1, gainHealthEffect(15)),
+ valueItem(1, gainGoldEffect(2).seq(drawCardsEffect(1))),
+ valueItem(1, gainToughnessEffect(9)),
+ valueItem(1, drawCardsEffect(2)),
+ valueItem(1, ef_discard1.seq(hitOpponentEffect(4))),
+ }),
+ }),
+ },
+
+ buffDetails = createBuffDetails({
+ name = "Unpredictable",
+ art = "art/epicart/disappearing_act",
+ text = "Gain a large random bonus each turn."
+ })
+ })
+
+end
+
+-- difficulty buffs
+local function P1_difficultyBuffs()
+
+aiPriority = toIntExpression(400)
+
+ return cardChoiceSelectorEffect({
+ id = "difficulty_options",
+ name = "Choose one",
+ trigger = startOfGameTrigger,
+ aiPriority = toIntExpression(400),
+
+ upperTitle = "Play a standard game, or choose a modifier for a greater challenge.",
+ lowerTitle = "",
+
+ effectFirst = nullEffect(),
+ aiPriority = toIntExpression(400)
+ ,
+
+
+ effectSecond = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ -- Choice 1: Small
+ {
+ aiPriority = toIntExpression(400),
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ -- Choice 1.1: HP 1
+ {
+ aiPriority = toIntExpression(400),
+ effect = ef_hp50,
+
+ layout = layoutCard(
+ {
+ title = "Healthier",
+ art = "art/treasures/t_green_potions_large",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 1.2: Combat 3
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_combat3(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_combat3(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Hard Hitter",
+ art = "art/t_fighter_sweeping_blow",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 1.3: Econ 1
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_econ1(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_econ1(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Money bags",
+ art = "art/t_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 1.4 - Small Random
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_randombuff1(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_randombuff1(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Unpredictable",
+ art = "art/epicart/disappearing_act",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Choose wisely. You cannot undo your selection.",
+ lowerTitle = "Or click outside the cards to go back to choose a different level of difficulty."
+ }
+ ),
+
+ layout = layoutCard(
+ {
+ title = "Slight challenge",
+ art = "art/treasures/t_cleric_elixir_green",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 2: Moderate
+ {
+ aiPriority = toIntExpression(400),
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ -- Choice 2.1: HP 2
+ {
+ aiPriority = toIntExpression(400),
+ effect = ef_hp100,
+
+ layout = layoutCard(
+ {
+ title = "Healthier",
+ art = "art/treasures/t_green_potions_large",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 2.2: Combat 5
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_combat5(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_combat5(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Hard Hitter",
+ art = "art/t_fighter_sweeping_blow",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 2.3: Econ 2
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_econ2(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_econ2(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Money bags",
+ art = "art/t_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 1.4 - Moderate Random
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_randombuff2(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_randombuff2(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Unpredictable",
+ art = "art/epicart/disappearing_act",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Choose wisely. You cannot undo your selection.",
+ lowerTitle = "Or click outside the cards to go back to choose a different level of difficulty."
+ }
+ ),
+
+ layout = layoutCard(
+ {
+ title = "Moderate challenge",
+ art = "art/treasures/t_cleric_elixir_golden",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 3: Tough
+ {
+ aiPriority = toIntExpression(400),
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ -- Choice 3.1: HP 3
+ {
+ aiPriority = toIntExpression(400),
+ effect = ef_hp150,
+
+ layout = layoutCard(
+ {
+ title = "Tougher",
+ art = "art/treasures/t_green_potions_large",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 3.2: Combat 8
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_combat8(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_combat8(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Hard Hitter",
+ art = "art/t_fighter_sweeping_blow",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 3.3: Econ 2
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_econ3(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_econ3(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Money bags",
+ art = "art/t_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 1.4 - Large Random
+ {
+ aiPriority = toIntExpression(400),
+ effect = createCardEffect(ef_randombuff3(), loc(oppPid, buffsPloc))
+ .seq(createCardEffect(ef_randombuff3(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Unpredictable",
+ art = "art/epicart/disappearing_act",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Choose wisely. You cannot undo your selection.",
+ lowerTitle = "Or click outside the cards to go back to choose a different level of difficulty."
+ }
+ ),
+
+ layout = layoutCard(
+ {
+ title = "Tough challenge",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+ -- Choice 4: Multiple
+ {
+ aiPriority = toIntExpression(400),
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ -- Choice 4.1 - All small
+ {
+ aiPriority = toIntExpression(400),
+ effect = ef_hp50
+ .seq(createCardEffect(ef_combat3(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_combat3(), loc(nextOppPid, buffsPloc)))
+ .seq(createCardEffect(ef_econ1(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_econ1(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Tough stuff",
+ art = "art/epicart/village_protector",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 4.2 - All moderate
+ {
+ aiPriority = toIntExpression(400),
+ effect = ef_hp100
+ .seq(createCardEffect(ef_combat5(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_combat5(), loc(nextOppPid, buffsPloc)))
+ .seq(createCardEffect(ef_econ2(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_econ2(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Tougher stuff",
+ art = "art/epicart/village_protector",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ -- Choice 4.3 - All large
+ {
+ aiPriority = toIntExpression(400),
+ effect = ef_hp150
+ .seq(createCardEffect(ef_combat8(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_combat8(), loc(nextOppPid, buffsPloc)))
+ .seq(createCardEffect(ef_econ3(), loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(ef_econ3(), loc(nextOppPid, buffsPloc))),
+
+ layout = layoutCard(
+ {
+ title = "Toughest stuff",
+ art = "art/epicart/village_protector",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+-------
+
+ },
+ upperTitle = "Choose wisely. You cannot undo your selection.",
+ lowerTitle = "Or click outside the cards to go back to choose a different level of difficulty."
+ }
+ ),
+
+ layout = layoutCard(
+ {
+ title = "Deadly challenge",
+ art = "art/treasures/t_thief_elixir_white",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Choose a modifier for a more challenging experience. ",
+ lowerTitle = "You will then get to choose the value of the modifier to apply."
+ }
+
+ )
+ ,
+
+ layoutFirst = createLayout({
+ name = "Standard",
+ art = "art/epicart/ceasefire",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+
+ ]] }) ,
+
+ layoutSecond = createLayout({
+ name = "Play hard",
+ art = "art/epicart/stealthy_predator",
+ frame = "frames/generic_CardFrame",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+
+ turn = 1
+ })
+end
+
+
+
+
+-- lgnkstwrt Speech Effects
+function lgnkstwrt_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Grazi! Merci! Hold the applause!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Practice makes perfect, they say.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="lgnkstwrt_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="lgnkstwrt_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function lgnkstwrt_speech1_buff_def()
+return createGlobalBuff({
+ id="lgnkstwrt_speech1",
+ name = "lgnkstwrt 1",
+ abilities = {
+ createAbility({
+ id="lgnkstwrt_speech1",
+ trigger = deckShuffledTrigger,
+ effect = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="You couldn't carry a tune in a bucket!",
+ waitForClick= constBoolExpression(false)
+ }),
+ cost = sacrificeSelf
+
+ })
+ },
+
+ })
+end
+
+function lgnkstwrt_speech2_buff_def()
+return createGlobalBuff({
+ id="lgnkstwrt_speech2",
+ name = "lgnkstwrt 2",
+ abilities = {
+ createAbility({
+ id="lgnkstwrt_speech2",
+ trigger = onDiscardTrigger,
+ -- check =
+ effect = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Encore! Encore!",
+ waitForClick= constBoolExpression(false)
+ }),
+ cost = sacrificeSelf
+
+ })
+ },
+
+ })
+end
+
+function lgnkstwrt_speech3_buff_def()
+return createGlobalBuff({
+ id="lgnkstwrt_speech3",
+ name = "lgnkstwrt 3",
+ abilities = {
+ createAbility({
+ id="lgnkstwrt_speech3",
+ trigger = onSacrificeTrigger,
+ -- check = skillSacrificePloc
+ effect = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Sacrebleu! What'd you do?",
+ waitForClick= constBoolExpression(false)
+ }),
+ cost = sacrificeSelf
+
+ })
+ },
+
+ })
+end
+
+-- nudeltulpe Speech Effects
+function nudeltulpe_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Grrrr",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Grrrr",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="nudeltulpe_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="nudeltulpe_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+
+--Jigmelingpa Speech
+function jigmelingpa_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Time to light up some Old Toby!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="PO-TA-TOES!",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="jigmelingpa_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="jigmelingpa_winlose",
+ trigger = onZeroHealthTrigger,
+ aiPriority = toIntExpression(-300),
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+--Scrapforce Speech
+function scrapforce_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Scrap it and tap it, baby!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Oof! Right in the sackforce!",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="scrapforce_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="scrapforce_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+
+--BTW Speech
+function BTW_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Like a true nature's child. We are Bjorn, Bjorn-Toby Wild.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="We can climb so high. I never wanna die.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="BTW_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="BTW_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+--Wombatman Speech
+function Wombatman_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="This forest just showed you that it's full of critters ready to believe in good.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Vengeance won't change the past. I have to become more.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="Wombatman_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="Wombatman_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+--Elfred Nobel Speech
+function Elfred_Nobel_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Contentment is the only real wealth.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Good wishes alone will not ensure peace.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="Elfred_Nobel_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="Elfred_Nobel_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+--Doc_Orc Speech
+function Doc_Orc_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="The power of the sun, in the palm of my hand.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="My dream is dead.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="Doc_Orc_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="Doc_Orc_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+--Boudicarnage Speech
+function Boudicarnage_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="See your gods tremble and fall before the wrath of Boudica!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="…",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="Boudicarnage_win",
+ name = "AI Win",
+ abilities = {
+ createAbility({
+ id="Boudicarnage_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+
+--generic speech
+
+function cleric_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Ah. God grant me time to rest.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Where were you, O Lord?",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="cleric_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="cleric_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function rando1_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Everything you've heard about me is true.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Why you slimy, double-crossing, no-good swindler.",
+ waitForClick= constBoolExpression(false)
+ })
+
+return createGlobalBuff({
+ id="rando1_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="rando1_winlose",
+ trigger = onZeroHealthTrigger,
+ aiPriority = toIntExpression(-300),
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function rando2_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="They drew first blood, not me.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Nothing is over. Nothing.",
+ waitForClick= constBoolExpression(false)
+ })
+
+return createGlobalBuff({
+ id="rando2_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="rando2_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function morgana_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Goodness, gracious! Great balls of fire!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Fizzle sticks!",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="morgana_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="morgana_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function illegalas_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="The enemy is diminished.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="A red sun rises, blood has been spilled this night.",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Oh, wait. It's my blood...",
+ waitForClick= constBoolExpression(false)
+ }))
+
+
+return createGlobalBuff({
+ id="illegalas_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="illegalas_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function drawback_winlose_buff_def()
+
+ local ef_win = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Victory is mine!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_lose = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="'Tis but a scratch.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+return createGlobalBuff({
+ id="drawback_winlose",
+ name = "AI WinLose",
+ abilities = {
+ createAbility({
+ id="drawback_winlose",
+ trigger = onZeroHealthTrigger,
+ effect = ifElseEffect(getPlayerHealth(ownerPid).gte(1), ef_win, nullEffect())
+ .seq(ifElseEffect(getPlayerHealth(ownerPid).lte(0), ef_lose, nullEffect())),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+
+--custom monk tao lu Reset
+ local dualmonktaoresetbuff = createGlobalBuff({
+ id="dualmonktaoresetbuff",
+ name = "Dual Monk Tao Reset",
+ abilities = {
+ createAbility({
+ id="dualmonktaoresetbuff",
+ trigger = endOfTurnTrigger,
+ effect = gainCustomValueEffect(getCustomValue(currentPid).negate()),
+
+ })
+ }
+ })
+
+-- Ancestries Base
+ local ef_orc = createCardEffect(orc_battle_rage_carddef(), loc(ownerPid, skillsPloc))
+ .seq(createCardEffect(orc_bully_carddef(), loc(ownerPid, deckPloc)))
+ .seq(createCardEffect(orc_ragged_blade_carddef(), loc(ownerPid, deckPloc)))
+ .seq(gainMaxHealthEffect(ownerPid, const(4))).seq(healPlayerEffect(ownerPid,4))
+ .seq(createCardEffect(orc_buff(), loc(ownerPid, buffsPloc)))
+
+ local ef_elf = createCardEffect(elf_elven_wisdom_carddef(), loc(ownerPid, skillsPloc))
+ .seq(createCardEffect(elf_sunstone_brooch_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(elf_elven_grace_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(elf_buff(), loc(ownerPid, buffsPloc)))
+ .seq(gainMaxHealthEffect(ownerPid, const(-8))).seq(healPlayerEffect(ownerPid,-8))
+
+ local ef_smallfolk = createCardEffect(smallfolk_hide_carddef(), loc(ownerPid, skillsPloc))
+ .seq(createCardEffect(smallfolk_friendly_banter_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(smallfolk_burgle_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(smallfolk_buff(), loc(ownerPid, buffsPloc)))
+ .seq(gainMaxHealthEffect(ownerPid, const(-15))).seq(healPlayerEffect(ownerPid,-15))
+
+ local ef_dwarf = createCardEffect(dwarf_hammer_strike_carddef(), loc(ownerPid, skillsPloc))
+ .seq(createCardEffect(dwarf_hammer_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(dwarf_pick_carddef(), loc(ownerPid, asidePloc)))
+ .seq(gainMaxHealthEffect(ownerPid, const(6))).seq(healPlayerEffect(ownerPid,6))
+
+ local ef_ogre = createCardEffect(ogre_crush_you_carddef(), loc(ownerPid, skillsPloc))
+ .seq(createCardEffect(ogre_shiny_rock_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ogre_war_club_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ogre_buff(), loc(ownerPid, buffsPloc)))
+ .seq(gainMaxHealthEffect(ownerPid, const(10))).seq(healPlayerEffect(ownerPid,10))
+
+local ef_halfdemon = createCardEffect(half_demon_hellfire_carddef(), loc(ownerPid, skillsPloc))
+ .seq(createCardEffect(half_demon_demon_blood_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(half_demon_demonic_strength_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(half_demon_buff(), loc(ownerPid, buffsPloc)))
+ .seq(gainMaxHealthEffect(ownerPid, const(5))).seq(healPlayerEffect(ownerPid,5))
+
+
+--Rando Ancestries
+ local ef_rando_smallfolk = ef_smallfolk
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(clericType)).count().gte(1),setPlayerAvatarEffect("smallfolk_cleric_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(fighterType)).count().gte(1),setPlayerAvatarEffect("smallfolk_fighter_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(thiefType)).count().gte(1),setPlayerAvatarEffect("smallfolk_thief_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(wizardType)).count().gte(1),setPlayerAvatarEffect("smallfolk_wizard_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(rangerType)).count().gte(1),setPlayerAvatarEffect("smallfolk_ranger_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(alchemistType)).count().gte(1),setPlayerAvatarEffect("smallfolk_alchemist_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(barbarianType)).count().gte(1),setPlayerAvatarEffect("smallfolk_barbarian_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(bardType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(druidType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(monkType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(necromancerType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+
+ local ef_rando_ogre = ef_ogre
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(clericType)).count().gte(1),setPlayerAvatarEffect("ogre_cleric_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(fighterType)).count().gte(1),setPlayerAvatarEffect("ogre_fighter_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(thiefType)).count().gte(1),setPlayerAvatarEffect("ogre_thief_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(wizardType)).count().gte(1),setPlayerAvatarEffect("ogre_wizard_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(rangerType)).count().gte(1),setPlayerAvatarEffect("ogre_ranger_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(alchemistType)).count().gte(1),setPlayerAvatarEffect("ogre_alchemist_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(barbarianType)).count().gte(1),setPlayerAvatarEffect("ogre_barbarian_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(bardType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(druidType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(monkType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(necromancerType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+
+local ef_rando_dwarf = ef_dwarf
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(clericType)).count().gte(1),setPlayerAvatarEffect("dwarf_cleric_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(fighterType)).count().gte(1),setPlayerAvatarEffect("dwarf_fighter_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(thiefType)).count().gte(1),setPlayerAvatarEffect("dwarf_thief_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(wizardType)).count().gte(1),setPlayerAvatarEffect("dwarf_wizard_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(rangerType)).count().gte(1),setPlayerAvatarEffect("dwarf_ranger_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(alchemistType)).count().gte(1),setPlayerAvatarEffect("dwarf_alchemist_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(barbarianType)).count().gte(1),setPlayerAvatarEffect("dwarf_barbarian_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(bardType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(druidType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(monkType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(necromancerType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+
+local ef_rando_orc = ef_orc
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(clericType)).count().gte(1),setPlayerAvatarEffect("orc_cleric_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(fighterType)).count().gte(1),setPlayerAvatarEffect("orc_fighter_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(thiefType)).count().gte(1),setPlayerAvatarEffect("orc_thief_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(wizardType)).count().gte(1),setPlayerAvatarEffect("orc_wizard_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(rangerType)).count().gte(1),setPlayerAvatarEffect("orc_ranger_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(alchemistType)).count().gte(1),setPlayerAvatarEffect("orc_alchemist_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(barbarianType)).count().gte(1),setPlayerAvatarEffect("orc_barbarian_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(bardType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(druidType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(monkType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(necromancerType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+
+
+local ef_rando_elf = ef_elf
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(clericType)).count().gte(1),setPlayerAvatarEffect("elf_cleric_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(fighterType)).count().gte(1),setPlayerAvatarEffect("elf_fighter_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(thiefType)).count().gte(1),setPlayerAvatarEffect("elf_thief_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(wizardType)).count().gte(1),setPlayerAvatarEffect("elf_wizard_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(rangerType)).count().gte(1),setPlayerAvatarEffect("elf_ranger_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(alchemistType)).count().gte(1),setPlayerAvatarEffect("elf_alchemist_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(barbarianType)).count().gte(1),setPlayerAvatarEffect("elf_barbarian_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(bardType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(druidType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(monkType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(necromancerType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+
+ local ef_rando_halfdemon = ef_halfdemon
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(clericType)).count().gte(1),setPlayerAvatarEffect("halfdemon_cleric_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(fighterType)).count().gte(1),setPlayerAvatarEffect("halfdemon_fighter_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(thiefType)).count().gte(1),setPlayerAvatarEffect("halfdemon_thief_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(wizardType)).count().gte(1),setPlayerAvatarEffect("halfdemon_wizard_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(rangerType)).count().gte(1),setPlayerAvatarEffect("halfdemon_ranger_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(alchemistType)).count().gte(1),setPlayerAvatarEffect("halfdemon_alchemist_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(barbarianType)).count().gte(1),setPlayerAvatarEffect("halfdemon_barbarian_male_01", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(bardType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(druidType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(monkType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardType(necromancerType)).count().gte(1),setPlayerAvatarEffect("assassin_flipped", ownerPid),nullEffect()))
+
+local ef_rando_ancestry = randomEffect({
+ valueItem(1, nullEffect()),
+ valueItem(1, ef_rando_orc),
+ valueItem(1, ef_rando_elf),
+ valueItem(1, ef_rando_ogre),
+ valueItem(1, ef_rando_dwarf),
+ valueItem(1, ef_rando_smallfolk),
+ valueItem(1, ef_rando_halfdemon),
+ })
+
+
+-- Thelonious levels
+
+ local ef4_Thelonious = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_favored_technique")))
+ .seq(createCardEffect(monk_practiced_technique_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_Thelonious = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("ruby")).take(1))
+ .seq(createCardEffect(monk_staff_of_meditation_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_Thelonious = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_practiced_technique")))
+ .seq(createCardEffect(monk_masterful_technique_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_Thelonious = createCardEffect(monk_ring_of_1000_palms_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_Thelonious = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_qi")))
+ .seq(createCardEffect(monk_jing_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_Thelonious = createCardEffect(monk_slippers_of_the_crane_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_Thelonious = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_jing")))
+ .seq(createCardEffect(monk_qigong_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_Thelonious = createCardEffect(monk_tonfas_of_balance_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_Thelonious = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9)) .seq(sacrificeSelf())
+
+ local ef13_Thelonious = createCardEffect(monk_amulet_of_resolve_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_Thelonious = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9)) .seq(sacrificeSelf())
+
+ local ef15_Thelonious = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("monk_spring_blossom")).take(1))
+ .seq(createCardEffect(monk_resplendent_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_Thelonious = gainMaxHealthEffect(ownerPid, const(9)).seq(healPlayerEffect(ownerPid,9)).seq(sacrificeSelf())
+
+ local ef17_Thelonious = createCardEffect(monk_tranquil_wind_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_Thelonious = gainMaxHealthEffect(ownerPid, const(9)).seq(healPlayerEffect(ownerPid,9)).seq(sacrificeSelf())
+
+local ef_thelonious_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Ohm… CawCaw!", waitForClick= constBoolExpression(false)})
+
+
+ local ef_thelonious =
+ setPlayerNameEffect("Thelonious", ownerPid)
+ .seq(setPlayerAvatarEffect("monk_01_2", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(59)))
+ .seq(healPlayerEffect(ownerPid,59))
+ .seq(createCardEffect(monk_favored_technique_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(monk_qi_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_striking_cobra_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_serene_wind_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(dualmonktaoresetbuff, loc(ownerPid, buffsPloc)))
+
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_Thelonious, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_Thelonious, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_thelonious_start)
+ --.seq(createCardEffect(thelonious_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+-- Boudicarnage levels
+
+ local ef4_Boudicarnage = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_inner_rage")))
+ .seq(createCardEffect(barbarian_flaring_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_Boudicarnage = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("barbarian_headbutt")).take(1))
+ .seq(createCardEffect(barbarian_serrated_hand_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_Boudicarnage = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_flaring_rage")))
+ .seq(createCardEffect(barbarian_fiery_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_Boudicarnage = createCardEffect(barbarian_flail_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_Boudicarnage = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_roar")))
+ .seq(createCardEffect(barbarian_battle_cry_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_Boudicarnage = createCardEffect(barbarian_razor_bracers_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_Boudicarnage = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_battle_cry")))
+ .seq(createCardEffect(barbarian_battle_roar_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_Boudicarnage = createCardEffect(barbarian_crushed_coin_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_Boudicarnage = gainMaxHealthEffect(ownerPid, const(10))
+ .seq(healPlayerEffect(ownerPid,10)) .seq(sacrificeSelf())
+
+ local ef13_Boudicarnage = createCardEffect(barbarian_earthshaker_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_Boudicarnage = gainMaxHealthEffect(ownerPid, const(10))
+ .seq(healPlayerEffect(ownerPid,10)) .seq(sacrificeSelf())
+
+ local ef15_Boudicarnage = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("barbarian_headbutt")))
+ .seq(createCardEffect(barbarian_shattering_headbutt_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_Boudicarnage = gainMaxHealthEffect(ownerPid, const(10)).seq(healPlayerEffect(ownerPid,10)).seq(sacrificeSelf())
+
+ local ef17_Boudicarnage = createCardEffect(barbarian_seething_spear_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_Boudicarnage = gainMaxHealthEffect(ownerPid, const(10)).seq(healPlayerEffect(ownerPid,10)).seq(sacrificeSelf())
+
+local ef_Boudicarnage_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="They are no match for our fierce hearts.", waitForClick= constBoolExpression(false)})
+
+ local ef_Boudicarnage =
+ setPlayerNameEffect("Boudicarnage", ownerPid)
+ .seq(setPlayerAvatarEffect("halfdemon_barbarian_female_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(62)))
+ .seq(healPlayerEffect(ownerPid,62))
+ .seq(createCardEffect(barbarian_inner_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(barbarian_roar_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_hand_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_hand_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_plunder_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_headbutt_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ef_halfdemon)
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_Boudicarnage, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_Boudicarnage, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_Boudicarnage_start)
+ .seq(createCardEffect(Boudicarnage_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+-- Doc_Orc levels
+
+ local ef4_Doc_Orc = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_reflect")))
+ .seq(createCardEffect(alchemist_refraction_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_Doc_Orc = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("philosophers_stone")).take(1))
+ .seq(createCardEffect(alchemist_fools_gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_Doc_Orc = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_refraction")))
+ .seq(createCardEffect(alchemist_prismatic_dispersion_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_Doc_Orc = createCardEffect(alchemist_crucible_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_Doc_Orc = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_transmutation")))
+ .seq(createCardEffect(alchemist_transmogrification_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_Doc_Orc = createCardEffect(alchemist_spectrum_spectacles_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_Doc_Orc = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_transmogrification")))
+ .seq(createCardEffect(alchemist_major_transmogrification_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_Doc_Orc = createCardEffect(alchemist_alchemy_powders_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_Doc_Orc = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)) .seq(sacrificeSelf())
+
+ local ef13_Doc_Orc = createCardEffect(alchemist_fireworks_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_Doc_Orc = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)) .seq(sacrificeSelf())
+
+ local ef15_Doc_Orc = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("alchemist_philosophers_stone")))
+ .seq(createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_Doc_Orc = gainMaxHealthEffect(ownerPid, const(6)).seq(healPlayerEffect(ownerPid,6)).seq(sacrificeSelf())
+
+ local ef17_Doc_Orc = createCardEffect(alchemist_kaleidoscope_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_Doc_Orc = gainMaxHealthEffect(ownerPid, const(6)).seq(healPlayerEffect(ownerPid,6)).seq(sacrificeSelf())
+
+ local ef_Doc_Orc_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="The real crime would be not to finish what we started.", waitForClick= constBoolExpression(false)})
+
+
+
+ local ef_Doc_Orc =
+ setPlayerNameEffect("Doc Orc", ownerPid)
+ .seq(setPlayerAvatarEffect("orc_alchemist_male_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(53)))
+ .seq(healPlayerEffect(ownerPid,53))
+ .seq(createCardEffect(alchemist_reflect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(alchemist_transmutation_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ef_elf)
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_Doc_Orc, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_Doc_Orc, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_Doc_Orc_start)
+ .seq(createCardEffect(Doc_Orc_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+-- BTW levels
+
+ local ef4_BTW = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_forest_rage")))
+ .seq(createCardEffect(druid_spirit_of_the_forest_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_BTW = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("animal_strength")).take(1))
+ .seq(createCardEffect(druid_honeycomb_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_BTW = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_spirit_of_the_forest")))
+ .seq(createCardEffect(druid_way_of_the_forest_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_BTW = createCardEffect(druid_heartwood_splinter_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_BTW = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_bear_form")))
+ .seq(createCardEffect(druid_grizzly_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_BTW = createCardEffect(druid_grass_weave_sash_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_BTW = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_grizzly_form")))
+ .seq(createCardEffect(druid_polar_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_BTW = createCardEffect(druid_rabbit_carddef(), loc(ownerPid, asidePloc)).seq(createCardEffect(druid_rabbit_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef12_BTW = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7)) .seq(sacrificeSelf())
+
+ local ef13_BTW = createCardEffect(druid_entangling_roots_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_BTW = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7)) .seq(sacrificeSelf())
+
+ local ef15_BTW = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_animal_strength")))
+ .seq(createCardEffect(druid_nimble_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_BTW = gainMaxHealthEffect(ownerPid, const(7)).seq(healPlayerEffect(ownerPid,7)).seq(sacrificeSelf())
+
+ local ef17_BTW = createCardEffect(druid_sunbird_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_BTW = gainMaxHealthEffect(ownerPid, const(7)).seq(healPlayerEffect(ownerPid,7)).seq(sacrificeSelf())
+
+local ef_BTW_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Get your grizzly running. Head out in the forest.", waitForClick= constBoolExpression(false)})
+
+
+ local ef_BTW =
+ setPlayerNameEffect("Bjorn-Toby Wild", ownerPid)
+ .seq(setPlayerAvatarEffect("druid_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(54)))
+ .seq(healPlayerEffect(ownerPid,54))
+ .seq(createCardEffect(druid_forest_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(druid_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_gnarled_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_squirrel_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_hedgehog_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ef_elf)
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_BTW, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_BTW, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_BTW_start)
+ .seq(createCardEffect(BTW_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+-- Wombatman levels
+
+ local ef4_Wombatman = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_forest_rage")))
+ .seq(createCardEffect(druid_spirit_of_the_forest_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_Wombatman = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_gnarled_staff")).take(1))
+ .seq(createCardEffect(druid_flourishing_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_Wombatman = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_spirit_of_the_forest")))
+ .seq(createCardEffect(druid_way_of_the_forest_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_Wombatman = createCardEffect(druid_owl_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_Wombatman = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_bear_form")))
+ .seq(createCardEffect(druid_spirit_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_Wombatman = createCardEffect(druid_circlet_of_flowers_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_Wombatman = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_spirit_bear_form")))
+ .seq(createCardEffect(druid_pure_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_Wombatman = createCardEffect(druid_rabbit_carddef(), loc(ownerPid, asidePloc)).seq(createCardEffect(druid_rabbit_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef12_Wombatman = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7)) .seq(sacrificeSelf())
+
+ local ef13_Wombatman = createCardEffect(druid_panther_eye_ring_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_Wombatman = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7)) .seq(sacrificeSelf())
+
+ local ef15_Wombatman = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_fox")))
+ .seq(createCardEffect(druid_feral_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_Wombatman = gainMaxHealthEffect(ownerPid, const(7)).seq(healPlayerEffect(ownerPid,7)).seq(sacrificeSelf())
+
+ local ef17_Wombatman = createCardEffect(druid_sunbird_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_Wombatman = gainMaxHealthEffect(ownerPid, const(7)).seq(healPlayerEffect(ownerPid,7)).seq(sacrificeSelf())
+
+local ef_Wombatman_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="I'm Wombatman.", waitForClick= constBoolExpression(false)})
+
+ local ef_Wombatman =
+ setPlayerNameEffect("Wombatman", ownerPid)
+ .seq(setPlayerAvatarEffect("druid_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(54)))
+ .seq(healPlayerEffect(ownerPid,54))
+ .seq(createCardEffect(druid_forest_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(druid_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_gnarled_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_squirrel_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_hedgehog_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_Wombatman, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_Wombatman, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_Wombatman_start)
+ .seq(createCardEffect(Wombatman_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+-- Elfred Nobel levels
+
+ local ef4_Elfred_Nobel = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_reflect")))
+ .seq(createCardEffect(alchemist_refraction_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_Elfred_Nobel = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("philosophers_stone")).take(1))
+ .seq(createCardEffect(alchemist_fools_gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_Elfred_Nobel = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_refraction")))
+ .seq(createCardEffect(alchemist_prismatic_dispersion_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_Elfred_Nobel = createCardEffect(alchemist_crucible_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_Elfred_Nobel = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_transmutation")))
+ .seq(createCardEffect(alchemist_transmogrification_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_Elfred_Nobel = createCardEffect(alchemist_spectrum_spectacles_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_Elfred_Nobel = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_transmogrification")))
+ .seq(createCardEffect(alchemist_major_transmogrification_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_Elfred_Nobel = createCardEffect(alchemist_alchemy_powders_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_Elfred_Nobel = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)) .seq(sacrificeSelf())
+
+ local ef13_Elfred_Nobel = createCardEffect(alchemist_fireworks_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_Elfred_Nobel = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)) .seq(sacrificeSelf())
+
+ local ef15_Elfred_Nobel = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("alchemist_philosophers_stone")))
+ .seq(createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_Elfred_Nobel = gainMaxHealthEffect(ownerPid, const(6)).seq(healPlayerEffect(ownerPid,6)).seq(sacrificeSelf())
+
+ local ef17_Elfred_Nobel = createCardEffect(alchemist_kaleidoscope_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_Elfred_Nobel = gainMaxHealthEffect(ownerPid, const(6)).seq(healPlayerEffect(ownerPid,6)).seq(sacrificeSelf())
+
+local ef_Elfred_Nobel_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="If I have a thousand ideas and only one turns out to be good, I am satisfied.", waitForClick= constBoolExpression(false)})
+
+ local ef_Elfred_Nobel =
+ setPlayerNameEffect("Elfred Nobel", ownerPid)
+ .seq(setPlayerAvatarEffect("elf_alchemist_male_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(53)))
+ .seq(healPlayerEffect(ownerPid,53))
+ .seq(createCardEffect(alchemist_reflect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(alchemist_transmutation_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ef_elf)
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_Elfred_Nobel, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_Elfred_Nobel, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+
+ --.seq(drawCardsEffect(3))
+ .seq(ef_Elfred_Nobel_start)
+ .seq(createCardEffect(Elfred_Nobel_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+-- Ranger levels
+
+ local ef4_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_track")))
+ .seq(createCardEffect(ranger_careful_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1))
+ .seq(createCardEffect(ranger_light_crossbow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_careful_track")))
+ .seq(createCardEffect(ranger_flawless_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_ranger = createCardEffect(ranger_unending_quiver_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_headshot")))
+ .seq(createCardEffect(ranger_quickshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_ranger = createCardEffect(ranger_hunters_cloak_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_quickshot")))
+ .seq(createCardEffect(ranger_snapshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_ranger = createCardEffect(ranger_flashfire_arrow_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef13_ranger = createCardEffect(ranger_spyglass_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+
+ local ef15_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("ranger_horn_of_calling")).take(1))
+ .seq(createCardEffect(ranger_horn_of_need_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef17_ranger = createCardEffect(ranger_death_arrow_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+
+local ef_major_drawback_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Arrow there! 'Ow are you?", waitForClick= constBoolExpression(false)})
+
+ local ef_ranger =
+ setPlayerNameEffect("Major Drawback", ownerPid)
+ .seq(setPlayerAvatarEffect("ranger_alt_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(58)))
+ .seq(healPlayerEffect(ownerPid,58))
+ .seq(createCardEffect(ranger_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(ranger_headshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_horn_of_calling_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_hunting_bow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_ranger, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_major_drawback_start)
+ .seq(createCardEffect(drawback_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+
+-- Illegalas Ranger levels
+ local ef4_illegalas = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_track")))
+ .seq(createCardEffect(ranger_careful_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_illegalas = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1))
+ .seq(createCardEffect(ranger_light_crossbow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_illegalas = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_careful_track")))
+ .seq(createCardEffect(ranger_flawless_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_illegalas = createCardEffect(ranger_unending_quiver_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_illegalas = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_headshot")))
+ .seq(createCardEffect(ranger_quickshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_illegalas = createCardEffect(ranger_sureshot_bracer_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_illegalas = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_quickshot")))
+ .seq(createCardEffect(ranger_snapshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_illegalas = createCardEffect(ranger_flashfire_arrow_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_illegalas = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef13_illegalas = createCardEffect(ranger_parrot_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_illegalas = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef15_illegalas = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("ranger_horn_of_calling")))
+ .seq(createCardEffect(ranger_horn_of_need_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_illegalas = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef17_illegalas = createCardEffect(ranger_death_arrow_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_illegalas = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+
+local ef_illegalas_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Bow to me. (Get it? 'Bow'!)", waitForClick= constBoolExpression(false)})
+
+local ef_illegalas =
+ setPlayerNameEffect("Illegalas", ownerPid)
+ .seq(setPlayerAvatarEffect("elf_ranger_male_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(50)))
+ .seq(healPlayerEffect(ownerPid,50))
+ .seq(createCardEffect(ranger_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(ranger_headshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(ef_elf)
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_horn_of_calling_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_hunting_bow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_illegalas, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_illegalas, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_illegalas_start)
+ .seq(createCardEffect(illegalas_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+
+-- Wizard levels
+
+ local ef4_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_channel")))
+ .seq(createCardEffect(wizard_calm_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("fire_staff")).take(1))
+ .seq(createCardEffect(wizard_blazing_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_calm_channel")))
+ .seq(createCardEffect(wizard_pure_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_wizard = createCardEffect(wizard_arcane_wand_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ .seq(createCardEffect(wizard_rolling_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_wizard = createCardEffect(wizard_runic_robes_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_rolling_fireball")))
+ .seq(createCardEffect(wizard_explosive_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_wizard = createCardEffect(wizard_magic_mirror_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef13_wizard = createCardEffect(wizard_treasure_map_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef15_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ .seq(createCardEffect(wizard_wizened_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef17_wizard = createCardEffect(wizard_clock_of_ages_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef_morgana_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="I can't seem to tune into the right channel.", waitForClick= constBoolExpression(false)})
+
+ local ef_wizard =
+ setPlayerNameEffect("Morgana Le Fail", ownerPid)
+ .seq(setPlayerAvatarEffect("wizard_alt_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(50)))
+ .seq(healPlayerEffect(ownerPid,50))
+ .seq(createCardEffect(wizard_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(wizard_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_spell_components_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_fire_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_wizard, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ --.seq(drawCardsEffect(3))
+ .seq(ef_morgana_start)
+ .seq(createCardEffect(morgana_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+-- Cleric levels
+
+ local ef4_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_bless")))
+ .seq(createCardEffect(cleric_bless_of_heart_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1))
+ .seq(createCardEffect(cleric_everburning_candle_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_bless_of_heart")))
+ .seq(createCardEffect(cleric_bless_of_soul_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_cleric = createCardEffect(cleric_brightstar_shield_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_resurrect")))
+ .seq(createCardEffect(cleric_holy_resurrect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_cleric = createCardEffect(cleric_phoenix_helm_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_holy_resurrect")))
+ .seq(createCardEffect(cleric_divine_resurrect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_cleric = createCardEffect(cleric_hammer_of_light_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_cleric = createCardEffect(cleric_minor_resurrect_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef13_cleric = createCardEffect(cleric_ship_s_bell_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_minor_resurrect")))
+ .seq(createCardEffect(cleric_lesser_resurrect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef15_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("cleric_spiked_mace")))
+ .seq(createCardEffect(cleric_spiked_mace_of_glory_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_cleric = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef17_cleric = createCardEffect(cleric_holy_water_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_cleric = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef_cleric_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Do we really have to do this?", waitForClick= constBoolExpression(false)})
+
+ local ef_cleric =
+ setPlayerNameEffect("Friar Tuckered-out", ownerPid)
+ .seq(setPlayerAvatarEffect("cleric_alt_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(55)))
+ .seq(healPlayerEffect(ownerPid,55))
+ .seq(createCardEffect(cleric_bless_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(cleric_resurrect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_spiked_mace_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_follower_a_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_follower_b_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_cleric, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_cleric_start)
+ .seq(createCardEffect(cleric_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+-- zembu levels
+
+ local ef4_zembu = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_pickpocket")))
+ .seq(createCardEffect(thief_swipe_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_zembu = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("thief_throwing_knife")).take(1))
+ .seq(createCardEffect(thief_keen_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_zembu = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_swipe")))
+ .seq(createCardEffect(thief_lift_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_zembu = createCardEffect(thief_knife_belt_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_zembu = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_heist")))
+ .seq(createCardEffect(thief_skillful_heist_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_zembu = createCardEffect(thief_shadow_mask_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_zembu = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_skillful_heist")))
+ .seq(createCardEffect(thief_smooth_heist_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_zembu = createCardEffect(thief_blackjack_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_zembu = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef13_zembu = createCardEffect(thief_trick_dice_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_zembu = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef15_zembu = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("thief_ruby")))
+ .seq(createCardEffect(thief_sharpened_ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_zembu = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef17_zembu = createCardEffect(thief_blinding_powder_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_zembu = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+
+local ef_zembu_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Shhh!", waitForClick= constBoolExpression(false)})
+
+ local ef_zembu =
+ setPlayerNameEffect("Kachiko", ownerPid)
+ .seq(setPlayerAvatarEffect("thief_alt_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(52)))
+ .seq(healPlayerEffect(ownerPid,52))
+ .seq(createCardEffect(thief_pickpocket_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(thief_heist_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_zembu, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_zembu_start)
+
+
+-- wardenslayer levels
+
+ local ef4_wardenslayer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_shoulder_bash")))
+ .seq(createCardEffect(fighter_shoulder_smash_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_wardenslayer = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1))
+ .seq(createCardEffect(fighter_hand_scythe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_wardenslayer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_shoulder_smash")))
+ .seq(createCardEffect(fighter_shoulder_crush_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_wardenslayer = createCardEffect(fighter_jagged_spear_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_wardenslayer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_crushing_blow")))
+ .seq(createCardEffect(fighter_smashing_blow_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_wardenslayer = createCardEffect(fighter_spiked_pauldrons_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_wardenslayer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_smashing_blow")))
+ .seq(createCardEffect(fighter_devastating_blow_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_wardenslayer = createCardEffect(fighter_sharpening_stone_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_wardenslayer = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef13_wardenslayer = createCardEffect(fighter_bottle_of_rum_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_wardenslayer = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef15_wardenslayer = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("fighter_longsword")))
+ .seq(createCardEffect(fighter_lightning_longsword_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_wardenslayer = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef17_wardenslayer = createCardEffect(fighter_chain_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_wardenslayer = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+local ef_wardenslayer_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="I'm here to slay!", waitForClick= constBoolExpression(false)})
+
+ local ef_wardenslayer =
+ setPlayerNameEffect("Warden Slayer", ownerPid)
+ .seq(setPlayerAvatarEffect("orc_fighter_male_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(60)))
+ .seq(healPlayerEffect(ownerPid,60))
+ .seq(createCardEffect(fighter_shoulder_bash_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(fighter_crushing_blow_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(ef_orc)
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(fighter_shield_bearer_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(fighter_throwing_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(fighter_longsword_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_wardenslayer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_wardenslayer, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_wardenslayer_start)
+
+
+-- lgnkstwrt levels
+
+ local ef4_lgnkstwrt = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_moving_melody")))
+ .seq(createCardEffect(bard_rousing_ode_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_lgnkstwrt = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("dagger")).take(1))
+ .seq(createCardEffect(bard_dancing_blade_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_lgnkstwrt = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_rousing_ode")))
+ .seq(createCardEffect(bard_rally_hymn_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_lgnkstwrt = createCardEffect(bard_summoning_drum_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_lgnkstwrt = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_valiant_verse")))
+ .seq(createCardEffect(bard_heroic_fable_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_lgnkstwrt = createCardEffect(bard_collecting_cap_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_lgnkstwrt = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_heroic_fable")))
+ .seq(createCardEffect(bard_mythic_chronicle_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_lgnkstwrt = createCardEffect(bard_goblet_of_whimsy_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_lgnkstwrt = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)) .seq(sacrificeSelf())
+
+ local ef13_lgnkstwrt = createCardEffect(bard_musical_darts_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_lgnkstwrt = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)) .seq(sacrificeSelf())
+
+ local ef15_lgnkstwrt = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("bard_harp")))
+ .seq(createCardEffect(bard_lullaby_harp_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_lgnkstwrt = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)).seq(sacrificeSelf())
+
+ local ef17_lgnkstwrt = createCardEffect(bard_muse_s_paper_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_lgnkstwrt = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6)).seq(sacrificeSelf())
+
+ local ef_lgnkstwrt_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="How about a song? Any requests?", waitForClick= constBoolExpression(false)})
+
+--Say 1 Trigger = After opponent shuffles their first deck
+
+local ef_lgnkstwrt_2 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Encore! Encore!", waitForClick= constBoolExpression(false)})
+--Say 2 Trigger = After opponent shuffles their first deck
+
+local ef_lgnkstwrt_3 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Sacrebleu! What'd you do?", waitForClick= constBoolExpression(false)})
+--Say 3 Trigger = After opponent shuffles their first deck
+
+ local ef_lgnkstwrt =
+ setPlayerNameEffect("Lgnkstwrt", ownerPid)
+ .seq(setPlayerAvatarEffect("bard_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(51)))
+ .seq(healPlayerEffect(ownerPid,51))
+ .seq(createCardEffect(bard_moving_melody_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(bard_valiant_verse_carddef(), loc(ownerPid, skillsPloc)))
+
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(dagger_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_herald_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_guild_tale_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_song_of_the_wild_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_imperial_anthem_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_harp_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_flute_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_lgnkstwrt, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_lgnkstwrt, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_lgnkstwrt_start)
+ .seq(createCardEffect(lgnkstwrt_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+-- Jigmelingpa levels
+
+ local ef4_jigmelingpa = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_channel")))
+ .seq(createCardEffect(wizard_calm_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_jigmelingpa = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("cat_familiar")).take(1))
+ .seq(createCardEffect(wizard_blazing_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_jigmelingpa = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_calm_channel")))
+ .seq(createCardEffect(wizard_serene_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_jigmelingpa = createCardEffect(wizard_arcane_wand_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_jigmelingpa = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5)) .seq(sacrificeSelf())
+ .seq(sacrificeSelf())
+
+ local ef9_jigmelingpa = createCardEffect(wizard_runic_robes_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_jigmelingpa = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ .seq(createCardEffect(wizard_rolling_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_jigmelingpa = createCardEffect(wizard_alchemist_s_stone_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_jigmelingpa = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5)) .seq(sacrificeSelf())
+
+ local ef13_jigmelingpa = createCardEffect(wizard_treasure_map_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_jigmelingpa = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_rolling_fireball")))
+ .seq(createCardEffect(wizard_explosive_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef15_jigmelingpa = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ .seq(createCardEffect(wizard_wizened_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_jigmelingpa = gainMaxHealthEffect(ownerPid, const(5)).seq(healPlayerEffect(ownerPid,5)).seq(sacrificeSelf())
+
+ local ef17_jigmelingpa = createCardEffect(wizard_clock_of_ages_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_jigmelingpa = gainMaxHealthEffect(ownerPid, const(5)).seq(healPlayerEffect(ownerPid,5)).seq(sacrificeSelf())
+
+
+
+local ef_jigmelingpa_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="I'm going on an adventure!", waitForClick= constBoolExpression(false)})
+
+local ef_say_1 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Time for second breakfast!", waitForClick= constBoolExpression(false)})
+--Say 1 Trigger = Turn 2
+
+local ef_say_2 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Don't judge a Small Folk by his size!", waitForClick= constBoolExpression(false)})
+--Say 2 Trigger = Turn 2
+
+local ef_say_3 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Small Folk are full of surprises!", waitForClick= constBoolExpression(false)})
+--Say 3 Trigger = Turn 2
+
+ local ef_jigmelingpa =
+ setPlayerNameEffect("Shizzbo Baggins", ownerPid)
+ .seq(setPlayerAvatarEffect("smallfolk_wizard_male_01", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(50)))
+ .seq(healPlayerEffect(ownerPid,50))
+ .seq(createCardEffect(wizard_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(wizard_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_spell_components_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_fire_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ef_smallfolk)
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_jigmelingpa, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_jigmelingpa, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_jigmelingpa_start)
+ .seq(createCardEffect(jigmelingpa_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+-- Scrapforce levels
+
+ local ef4_scrapforce = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_channel")))
+ .seq(createCardEffect(wizard_calm_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_scrapforce = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("wizard_fire_staff")).take(1))
+ .seq(createCardEffect(wizard_blazing_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_scrapforce = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_calm_channel")))
+ .seq(createCardEffect(wizard_serene_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_scrapforce = createCardEffect(wizard_magic_mirror_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_scrapforce = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5)) .seq(sacrificeSelf())
+
+ local ef9_scrapforce = createCardEffect(wizard_spellcaster_gloves_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_scrapforce = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ .seq(createCardEffect(wizard_rolling_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_scrapforce = createCardEffect(wizard_alchemist_s_stone_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_scrapforce = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_rolling_fireball")))
+ .seq(createCardEffect(wizard_explosive_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef13_scrapforce = createCardEffect(wizard_treasure_map_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_scrapforce = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5)) .seq(sacrificeSelf())
+
+ local ef15_scrapforce = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ .seq(createCardEffect(wizard_content_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_scrapforce = gainMaxHealthEffect(ownerPid, const(5)).seq(healPlayerEffect(ownerPid,5)).seq(sacrificeSelf())
+
+ local ef17_scrapforce = createCardEffect(wizard_clock_of_ages_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_scrapforce = gainMaxHealthEffect(ownerPid, const(5)).seq(healPlayerEffect(ownerPid,5)).seq(sacrificeSelf())
+
+
+local ef_scrapforce_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Time to scrap, suckers!", waitForClick= constBoolExpression(false)})
+
+local ef_say_1 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Oh you know how I like that!", waitForClick= constBoolExpression(false)})
+--Say 1 Trigger = Scrap or trash a card 1
+
+local ef_say_2 = showSpeechBubbleEffect({playerExpression=ownerPid, text="I'm full mast now, daddy!", waitForClick= constBoolExpression(false)})
+--Say 2 Trigger = Scrap or trash a card 1
+
+local ef_say_3 = showSpeechBubbleEffect({playerExpression=ownerPid, text="I just emptied my sackforce!!!", waitForClick= constBoolExpression(false)})
+--Say 3 Trigger = Scrap or trash a card 1
+
+ local ef_scrapforce =
+ setPlayerNameEffect("Hechicero", ownerPid)
+ .seq(setPlayerAvatarEffect("smallfolk_wizard_male_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(50)))
+ .seq(healPlayerEffect(ownerPid,50))
+ .seq(createCardEffect(wizard_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(wizard_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc))) --here--
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_spell_components_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_fire_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ef_smallfolk)
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_scrapforce, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_scrapforce, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_scrapforce_start)
+ .seq(createCardEffect(scrapforce_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+
+-- nudeltulpe levels
+
+ local ef4_nudeltulpe = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_forest_rage")))
+ .seq(createCardEffect(druid_forest_fury_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_nudeltulpe = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_gnarled_staff")).take(1))
+ .seq(createCardEffect(druid_flourishing_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_nudeltulpe = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_forest_fury")))
+ .seq(createCardEffect(druid_forest_vengeance_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_nudeltulpe = createCardEffect(druid_owl_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_nudeltulpe = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_bear_form")))
+ .seq(createCardEffect(druid_grizzly_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_nudeltulpe = createCardEffect(druid_circlet_of_flowers_carddef(), loc(ownerPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_nudeltulpe = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_grizzly_form")))
+ .seq(createCardEffect(druid_polar_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_nudeltulpe = createCardEffect(druid_ursine_rod_carddef(), loc(ownerPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_nudeltulpe = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7)) .seq(sacrificeSelf())
+
+ local ef13_nudeltulpe = createCardEffect(druid_panther_eye_ring_carddef(), loc(ownerPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_nudeltulpe = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7)) .seq(sacrificeSelf())
+
+ local ef15_nudeltulpe = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_fox")))
+ .seq(createCardEffect(druid_feral_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_nudeltulpe = gainMaxHealthEffect(ownerPid, const(7)).seq(healPlayerEffect(ownerPid,7)).seq(sacrificeSelf())
+
+ local ef17_nudeltulpe = createCardEffect(druid_sunbird_carddef(), loc(ownerPid, reservePloc)).seq(sacrificeSelf())
+
+ local ef18_nudeltulpe = gainMaxHealthEffect(ownerPid, const(7)).seq(healPlayerEffect(ownerPid,7)).seq(sacrificeSelf())
+
+local ef_nudeltulpe_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="Grrrr", waitForClick= constBoolExpression(false)})
+
+--local ef_nudeltulpe_winlose = createCardEffect(nudeltulpe_win_buff_def(), loc(oppPid, buffsPloc))
+-- .seq(createCardEffect(nudeltulpe_lose_buff_def(), loc(curentPid, buffsPloc)))
+
+local ef_say_1 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Grrrr", waitForClick= constBoolExpression(false)})
+--Say 1 Trigger = On use of ability
+
+local ef_say_2 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Grrrr", waitForClick= constBoolExpression(false)})
+--Say 2 Trigger = On use of ability
+
+local ef_say_3 = showSpeechBubbleEffect({playerExpression=ownerPid, text="Grrrr", waitForClick= constBoolExpression(false)})
+--Say 3 Trigger = On use of ability
+
+
+
+ local ef_nudeltulpe =
+ setPlayerNameEffect("Cocaine Bear", ownerPid)
+ .seq(setPlayerAvatarEffect("druid_02", ownerPid))
+ .seq(gainMaxHealthEffect(ownerPid, const(54)))
+ .seq(healPlayerEffect(ownerPid,54))
+ .seq(createCardEffect(druid_forest_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(druid_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_gnarled_staff_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_squirrel_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_hedgehog_carddef(), loc(ownerPid, asidePloc)))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_nudeltulpe, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_nudeltulpe, nullEffect()))
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ef_nudeltulpe_start)
+ --.seq(createCardEffect(nudeltulpe_winlose_buff_def(), loc(nextOppPid, buffsPloc)))
+
+local ef_rando1_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="This deal is getting worse all the time.", waitForClick= constBoolExpression(false)})
+local ef_rando2_start = showSpeechBubbleEffect({playerExpression=ownerPid, text="You picked the wrong man to push.", waitForClick= constBoolExpression(false)})
+
+ local ef4_random_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_track")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_fast_track_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_careful_track_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_ranger = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(ranger_light_crossbow_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("ranger_black_arrow")).take(1)).seq(createCardEffect(ranger_honed_black_arrow_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_fast_track").Or(isCardName("ranger_careful_track"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_instinctive_track_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_relentless_track_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_flawless_track_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_unending_quiver_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(ranger_snake_pet_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_headshot")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_quickshot_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_twin_shot_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_sureshot_bracer_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_hunters_cloak_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("ranger_quickshot").Or(isCardName("ranger_twin_shot"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_snapshot_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_longshot_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(ranger_triple_shot_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_flashfire_arrow_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(ranger_pathfinder_compass_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef13_random_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_parrot_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(ranger_spyglass_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef15_random_ranger = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("ranger_horn_of_calling")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(ranger_horn_of_command_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(ranger_horn_of_need_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+ local ef17_random_ranger = randomEffect({
+ valueItem(1, createCardEffect(ranger_death_arrow_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(ranger_veiled_trap_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_ranger = gainMaxHealthEffect(ownerPid, const(8))
+ .seq(healPlayerEffect(ownerPid,8))
+ .seq(sacrificeSelf())
+
+local ef_base_ranger =
+ setPlayerAvatarEffect("ranger_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(50)))
+ .seq(healPlayerEffect(ownerPid,50))
+ .seq(createCardEffect(ranger_track_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(ranger_headshot_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_horn_of_calling_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ranger_hunting_bow_carddef(), loc(ownerPid, asidePloc)))
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_ranger, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_ranger, nullEffect()))
+
+
+
+ local ef4_random_fighter = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_shoulder_bash")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_knock_back_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_shoulder_smash_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_fighter = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(fighter_hand_scythe_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("fighter_shield_bearer")).take(1)).seq(createCardEffect(fighter_seasoned_shield_bearer_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_fighter = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_knock_back").Or(isCardName("fighter_shoulder_smash"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_group_tackle_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_knock_down_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_shoulder_crush_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_double_bladed_axe_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_jagged_spear_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_fighter = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_crushing_blow")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_sweeping_blow_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_smashing_blow_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_helm_of_fury_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_spiked_pauldrons_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_fighter = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("fighter_sweeping_blow").Or(isCardName("fighter_smashing_blow"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_whirling_blow_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_mighty_blow_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_devastating_blow_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_fighter = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(fighter_rallying_flag_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, createCardEffect(fighter_sharpening_stone_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_fighter = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef13_random_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_cutlass_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(fighter_bottle_of_rum_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_fighter = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef15_random_fighter = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("fighter_longsword")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(fighter_flaming_longsword_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_lightning_longsword_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_fighter = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef17_random_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_chain_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(fighter_javelin_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_fighter = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+local ef_base_fighter =
+setPlayerAvatarEffect("fighter_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(60)))
+ .seq(healPlayerEffect(ownerPid,60))
+ .seq(createCardEffect(fighter_shoulder_bash_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(fighter_crushing_blow_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(fighter_shield_bearer_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(fighter_throwing_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(fighter_longsword_carddef(), loc(ownerPid, asidePloc)))
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_fighter, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_fighter, nullEffect()))
+
+ local ef4_random_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_bless")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_bless_of_iron_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_bless_of_heart_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_cleric = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(cleric_everburning_candle_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("cleric_follower_a")).take(1)).seq(createCardEffect(cleric_veteran_follower_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_bless_of_iron").Or(isCardName("cleric_bless_of_heart"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_bless_of_steel_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_bless_the_flock_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_bless_of_soul_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_brightstar_shield_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(cleric_redeemed_ruinos_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_resurrect")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_battle_resurrect_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_holy_resurrect_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_phoenix_helm_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_shining_breastplate_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("cleric_battle_resurrect").Or(isCardName("cleric_holy_resurrect"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_mass_resurrect_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_righteous_resurrect_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(cleric_divine_resurrect_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_hammer_of_light_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(cleric_talisman_of_renewal_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_cleric = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef13_random_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_ship_s_bell_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(cleric_imperial_sailor_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_cleric = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef15_random_cleric = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("cleric_spiked_mace")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(cleric_spiked_mace_of_glory_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(cleric_spiked_mace_of_might_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_cleric = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef17_random_cleric = randomEffect({
+ valueItem(1, createCardEffect(cleric_sacred_censer_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(cleric_holy_water_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_cleric = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+local ef_base_cleric =
+setPlayerAvatarEffect("cleric_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(55)))
+ .seq(healPlayerEffect(ownerPid,55))
+ .seq(createCardEffect(cleric_bless_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(cleric_resurrect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_follower_a_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_follower_b_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_spiked_mace_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(cleric_prayer_beads_carddef(), loc(ownerPid, asidePloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_cleric, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_cleric, nullEffect()))
+
+
+ local ef4_random_thief = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_pickpocket")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_sleight_of_hand_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_swipe_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_thief = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(thief_enchanted_garrote_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("thief_throwing_knife")).take(1)).seq(createCardEffect(thief_keen_throwing_knife_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_thief = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_sleight_of_hand").Or(isCardName("thief_swipe"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_misdirection_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_distracted_exchange_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_lift_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_knife_belt_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_sacrificial_dagger_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_thief = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_heist")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_timely_heist_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_skillful_heist_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_shadow_mask_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_silent_boots_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_thief = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("thief_timely_heist").Or(isCardName("thief_skillful_heist"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_practiced_heist_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_smooth_heist_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_masterful_heist_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_blackjack_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_jewelers_loupe_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_thief = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef13_random_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_hook_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(thief_trick_dice_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_thief = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef15_random_thief = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("thief_ruby")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(thief_brilliant_ruby_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_sharpened_ruby_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_thief = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef17_random_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_kunai_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(thief_blinding_powder_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_thief = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+local ef_base_thief =
+setPlayerAvatarEffect("thief_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(52)))
+ .seq(healPlayerEffect(ownerPid,52))
+ .seq(createCardEffect(thief_pickpocket_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(thief_heist_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(ownerPid, asidePloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_thief, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_thief, nullEffect()))
+
+ local ef4_random_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_channel")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_deep_channel_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_calm_channel_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_wizard = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(wizard_serpentine_staff_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("wizard_fire_staff")).take(1)).seq(createCardEffect(wizard_blazing_staff_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_deep_channel").Or(isCardName("wizard_calm_channel"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_soul_channel_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_pure_channel_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_serene_channel_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_arcane_wand_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(wizard_silverskull_amulet_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_rolling_fireball_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_scorching_fireball_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_runic_robes_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_spellcaster_gloves_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("wizard_rolling_fireball").Or(isCardName("wizard_scorching_fireball"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_barreling_fireball_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_explosive_fireball_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(wizard_searing_fireball_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_alchemist_s_stone_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(wizard_magic_mirror_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef13_random_wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_ship_in_a_bottle_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(wizard_treasure_map_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef15_random_wizard = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(wizard_wizened_familiar_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(wizard_content_familiar_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef17_random_wizard = randomEffect({
+ valueItem(1, createCardEffect(wizard_prestidigitation_charm_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(wizard_clock_of_ages_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_wizard = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+local ef_base_wizard =
+setPlayerAvatarEffect("wizard_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(50)))
+ .seq(healPlayerEffect(ownerPid,50))
+ .seq(createCardEffect(wizard_channel_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(wizard_fireball_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_ignite_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_ignite_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(wizard_fire_staff_carddef(), loc(ownerPid, asidePloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_wizard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_wizard, nullEffect()))
+
+ local ef4_random_alchemist = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_reflect")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_dispersion_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_refraction_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_alchemist = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("alchemist_frothing_potion")).take(1)).seq(createCardEffect(alchemist_sloshing_potion_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(alchemist_fools_gold_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_alchemist = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_dispersion").Or(isCardName("alchemist_refraction"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_wide_diffusion_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_prismatic_dispersion_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_perfect_refraction_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_crucible_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(alchemist_bottled_tempest_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_alchemist = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_transmutation")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_rapid_transmutation_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_transmogrification_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_spectrum_spectacles_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_auric_gloves_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_alchemist = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("alchemist_rapid_transmutation").Or(isCardName("alchemist_transmogrification"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_instant_transmutation_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_rapid_transmogrification_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(alchemist_major_transmogrification_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_alchemist = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(alchemist_alchemy_powders_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, createCardEffect(alchemist_brittle_gas_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_alchemist = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef13_random_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_fireworks_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(alchemist_recalibration_crystal_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_alchemist = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef15_random_alchemist = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("alchemist_philosophers_stone")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(alchemist_swirling_philosophers_stone_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_alchemist = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef17_random_alchemist = randomEffect({
+ valueItem(1, createCardEffect(alchemist_kaleidoscope_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(alchemist_vial_of_acid_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_alchemist = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+local ef_base_alchemist =
+setPlayerAvatarEffect("alchemist_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(53)))
+ .seq(healPlayerEffect(ownerPid,53))
+ .seq(createCardEffect(alchemist_reflect_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(alchemist_transmutation_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_frothing_potion_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(ownerPid, asidePloc)))
+
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_alchemist, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_alchemist, nullEffect()))
+
+ local ef4_random_barbarian = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_inner_rage")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_smoldering_rage_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_flaring_rage_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_barbarian = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("barbarian_hand_axe")).take(1)).seq(createCardEffect(barbarian_serrated_hand_axe_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(barbarian_amulet_of_stifled_pain_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_barbarian = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_smoldering_rage").Or(isCardName("barbarian_flaring_rage"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_eternal_rage_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_fiery_rage_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_explosive_rage_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_wolf_companion_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(barbarian_flail_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_barbarian = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_roar")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_terrifying_roar_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_battle_cry_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_stomping_boots_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_razor_bracers_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_barbarian = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("barbarian_terrifying_roar").Or(isCardName("barbarian_battle_cry"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_terrifying_howl_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_battle_roar_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(barbarian_war_cry_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_bone_axe_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(barbarian_crushed_coin_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_barbarian = gainMaxHealthEffect(ownerPid, const(10))
+ .seq(healPlayerEffect(ownerPid,10))
+ .seq(sacrificeSelf())
+
+ local ef13_random_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_ring_of_rage_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(barbarian_earthshaker_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_barbarian = gainMaxHealthEffect(ownerPid, const(10))
+ .seq(healPlayerEffect(ownerPid,10))
+ .seq(sacrificeSelf())
+
+ local ef15_random_barbarian = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("barbarian_headbutt")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(barbarian_disorienting_headbutt_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(barbarian_shattering_headbutt_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_barbarian = gainMaxHealthEffect(ownerPid, const(10))
+ .seq(healPlayerEffect(ownerPid,10))
+ .seq(sacrificeSelf())
+
+ local ef17_random_barbarian = randomEffect({
+ valueItem(1, createCardEffect(barbarian_caltrops_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(barbarian_seething_spear_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_barbarian = gainMaxHealthEffect(ownerPid, const(10))
+ .seq(healPlayerEffect(ownerPid,10))
+ .seq(sacrificeSelf())
+
+local ef_base_barbarian =
+setPlayerAvatarEffect("barbarian_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(62)))
+ .seq(healPlayerEffect(ownerPid,62))
+ .seq(createCardEffect(barbarian_inner_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(barbarian_roar_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_hand_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_hand_axe_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_plunder_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(barbarian_headbutt_carddef(), loc(ownerPid, asidePloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_barbarian, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_barbarian, nullEffect()))
+
+
+ local ef4_random_bard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_moving_melody")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_inspiring_tune_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_rousing_ode_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_bard = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("dagger")).take(1)).seq(createCardEffect(bard_dancing_blade_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(bard_necros_dirge_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_bard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_inspiring_tune").Or(isCardName("bard_rousing_ode"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_battle_march_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_rally_hymn_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_stirring_song_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_summoning_drum_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_silencing_scepter_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_bard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_valiant_verse")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_intrepid_tale_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_heroic_fable_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_coat_of_encores_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_collecting_cap_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_bard = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("bard_intrepid_tale").Or(isCardName("bard_heroic_fable"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_grand_legend_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_bold_saga_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(bard_mythic_chronicle_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_bard = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(bard_goblet_of_whimsy_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, createCardEffect(bard_lute_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_bard = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef13_random_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_songbook_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(bard_musical_darts_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_bard = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef15_random_bard = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("bard_harp")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_lullaby_harp_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_golden_harp_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_bard = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+ local ef17_random_bard = randomEffect({
+ valueItem(1, createCardEffect(bard_muse_s_paper_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(bard_music_box_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_bard = gainMaxHealthEffect(ownerPid, const(6))
+ .seq(healPlayerEffect(ownerPid,6))
+ .seq(sacrificeSelf())
+
+local ef_base_bard =
+setPlayerAvatarEffect("bard_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(51)))
+ .seq(healPlayerEffect(ownerPid,51))
+ .seq(createCardEffect(bard_moving_melody_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(bard_valiant_verse_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(dagger_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_flute_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_harp_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_herald_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_imperial_anthem_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_guild_tale_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(bard_song_of_the_wild_carddef(), loc(ownerPid, asidePloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_bard, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_bard, nullEffect()))
+
+ local ef4_random_druid = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_forest_rage")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_forest_fury_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_spirit_of_the_forest_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_druid = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_gnarled_staff")).take(1)).seq(createCardEffect(druid_flourishing_staff_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(druid_honeycomb_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_druid = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_forest_fury").Or(isCardName("druid_spirit_of_the_forest"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_forest_vengeance_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_way_of_the_forest_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_soul_of_the_forest_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_owl_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(druid_heartwood_splinter_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_druid = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_bear_form")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_grizzly_form_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_spirit_bear_form_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_circlet_of_flowers_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_grass_weave_sash_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_druid = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("druid_grizzly_form").Or(isCardName("druid_spirit_bear_form"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_polar_bear_form_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_spirit_grizzly_form_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(druid_pure_bear_form_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_rabbit_carddef(), loc(ownerPid, asidePloc)).seq(createCardEffect(druid_rabbit_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, createCardEffect(druid_ursine_rod_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_druid = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef13_random_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_panther_eye_ring_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(druid_entangling_roots_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_druid = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef15_random_druid = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("druid_fox")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(druid_nimble_fox_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(druid_feral_fox_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_druid = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+ local ef17_random_druid = randomEffect({
+ valueItem(1, createCardEffect(druid_wisdom_of_the_woods_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(druid_sunbird_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_druid = gainMaxHealthEffect(ownerPid, const(7))
+ .seq(healPlayerEffect(ownerPid,7))
+ .seq(sacrificeSelf())
+
+local ef_base_druid =
+setPlayerAvatarEffect("druid_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(54)))
+ .seq(healPlayerEffect(ownerPid,54))
+ .seq(createCardEffect(druid_forest_rage_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(druid_bear_form_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_fox_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_hedgehog_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_squirrel_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(druid_gnarled_staff_carddef(), loc(ownerPid, asidePloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_druid, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_druid, nullEffect()))
+
+ local ef4_random_monk = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_favored_technique")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_flowing_technique_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_practiced_technique_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_monk = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("ruby")).take(1)).seq(createCardEffect(monk_staff_of_meditation_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("monk_striking_cobra")).take(1)).seq(createCardEffect(monk_cobra_fang_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_monk = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_flowing_technique").Or(isCardName("monk_practiced_technique"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_fluid_technique_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_precise_technique_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_masterful_technique_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_ring_of_1000_palms_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_stillness_of_water_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_monk = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_qi")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_jing_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_focused_strike_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_slippers_of_the_crane_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_wraps_of_strength_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_monk = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("monk_jing").Or(isCardName("monk_focused_strike"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_qigong_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_yin_yang_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_dim_mak_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_tonfas_of_balance_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("monk_spring_blossom")).take(1)).seq(createCardEffect(monk_resplendent_blossom_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_monk = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef13_random_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_horn_of_ascendance_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(monk_amulet_of_resolve_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_monk = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef15_random_monk = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("monk_spring_blossom")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_resplendent_blossom_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_magnificent_blossom_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_monk = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+ local ef17_random_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_dragon_staff_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(monk_tranquil_wind_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_monk = gainMaxHealthEffect(ownerPid, const(9))
+ .seq(healPlayerEffect(ownerPid,9))
+ .seq(sacrificeSelf())
+
+local ef_base_monk =
+setPlayerAvatarEffect("monk_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(59)))
+ .seq(healPlayerEffect(ownerPid,59))
+ .seq(createCardEffect(monk_favored_technique_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(monk_qi_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_spring_blossom_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_striking_cobra_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(monk_serene_wind_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(dualmonktaoresetbuff, loc(ownerPid, buffsPloc)))
+ --add in extras
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_monk, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_monk, nullEffect()))
+
+
+ local ef4_random_necromancer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("necromancer_bone_raising")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_fresh_harvest_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_raise_skeleton_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef5_random_necromancer = randomEffect({
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(necromancer_bone_dance_carddef(), loc(ownerPid, asidePloc)))),
+ valueItem(1, sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("gold")).take(1)).seq(createCardEffect(necromancer_bloodrose_carddef(), loc(ownerPid, asidePloc)))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef6_random_necromancer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("necromancer_fresh_harvest").Or(isCardName("necromancer_raise_skeleton"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_skull_swarm_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_corpse_horde_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_strong_bones_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef7_random_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_anguish_blade_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_puzzle_box_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef8_random_necromancer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("necromancer_raise_dead")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_animate_dead_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_corpse_raising_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef9_random_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_rotting_crown_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_plague_belt_carddef(), loc(ownerPid, skillsPloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef10_random_necromancer = sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("necromancer_animate_dead").Or(isCardName("necromancer_corpse_raising"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_empty_graves_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_grave_robbery_carddef(), loc(ownerPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_reawaken_carddef(), loc(ownerPid, skillsPloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef11_random_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_voidstone_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_onyx_skull_carddef(), loc(ownerPid, asidePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef12_random_necromancer = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef13_random_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_stitcher_s_kit_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(necromancer_severing_scythe_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef14_random_necromancer = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef15_random_necromancer = sacrificeTarget().apply(selectLoc(loc(ownerPid, asidePloc)).where(isCardName("necromancer_rod_of_unlife")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_rod_of_spite_carddef(), loc(ownerPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_rod_of_reanimation_carddef(), loc(ownerPid, asidePloc))),
+ }))
+ .seq(sacrificeSelf())
+
+ local ef16_random_necromancer = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+ local ef17_random_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_preserved_heart_carddef(), loc(ownerPid, reservePloc))),
+ valueItem(1, createCardEffect(necromancer_dread_cauldron_carddef(), loc(ownerPid, reservePloc))),
+ })
+ .seq(sacrificeSelf())
+
+ local ef18_random_necromancer = gainMaxHealthEffect(ownerPid, const(5))
+ .seq(healPlayerEffect(ownerPid,5))
+ .seq(sacrificeSelf())
+
+local ef_base_necromancer =
+setPlayerAvatarEffect("necromancer_02", ownerPid)
+ .seq(gainMaxHealthEffect(ownerPid, const(49)))
+ .seq(healPlayerEffect(ownerPid,49))
+ .seq(createCardEffect(necromancer_bone_raising_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(necromancer_raise_dead_carddef(), loc(ownerPid, skillsPloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(dagger_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(necromancer_rod_of_unlife_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(necromancer_soul_prism_carddef(), loc(ownerPid, asidePloc)))
+ .seq(createCardEffect(necromancer_collection_of_corpses_carddef(), loc(ownerPid, asidePloc)))
+ --levels
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(4), ef4_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(6), ef6_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(8), ef8_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(10), ef10_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(12), ef12_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(14), ef14_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(16), ef16_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_random_necromancer, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(18), ef18_random_necromancer, nullEffect()))
+
+local ef_rando_calrissian = setPlayerNameEffect("Rando Calrissian", ownerPid).seq(ef_rando1_start)
+ .seq(createCardEffect(rando1_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+local ef_john_rando = setPlayerNameEffect("John Rando", ownerPid).seq(ef_rando2_start)
+ .seq(createCardEffect(rando2_winlose_buff_def(), loc(ownerPid, buffsPloc)))
+
+local ef_rando = randomEffect({
+ valueItem(1, ef_base_ranger),
+ valueItem(1, ef_base_fighter),
+ valueItem(1, ef_base_cleric),
+ valueItem(1, ef_base_wizard),
+ valueItem(1, ef_base_thief),
+ valueItem(1, ef_base_alchemist),
+ valueItem(1, ef_base_bard),
+ valueItem(1, ef_base_barbarian),
+ valueItem(1, ef_base_druid),
+ valueItem(1, ef_base_monk),
+ valueItem(1, ef_base_necromancer),
+
+ })
+ .seq(ef_rando_ancestry)
+ .seq(moveTarget(loc(ownerPid, deckPloc)).apply(selectLoc(loc(ownerPid, asidePloc))))
+ .seq(shuffleEffect(loc(ownerPid, deckPloc)))
+ .seq(ifElseEffect(getTurnsPlayed(nextAllyPid).eq(1), ef_john_rando, ef_rando_calrissian))
+
+
+local ef_no_cleric = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(0, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_ranger = randomEffect({
+ valueItem(0, ef_ranger),
+ valueItem(0, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_wizard = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(0, ef_wizard),
+ valueItem(0, ef_jigmelingpa),
+ valueItem(0, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_fighter = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(0, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_thief = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(0, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_bard = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(0, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_druid = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(0, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(0, ef_Wombatman),
+ valueItem(0, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_barbarian = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(0, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_monk = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(0, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_no_alchemist = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(0, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(0, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+local ef_no_necromancer = randomEffect({
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(5, ef_rando),
+ })
+
+local ef_draw3 = moveTarget(loc(ownerPid, handPloc)).apply(selectLoc(loc(ownerPid, deckPloc)).take(3))
+local ef_draw5 = moveTarget(loc(ownerPid, handPloc)).apply(selectLoc(loc(ownerPid, deckPloc)).take(5))
+
+local function AI_1_hero_select_BuffDef()
+ local buff_name = "ai_1_hero_select_buff"
+
+return createGlobalBuff({
+ id="ai_selector",
+ name = "AI Selector",
+ abilities = {
+ createAbility({
+ id="ai_selector",
+ trigger = startOfGameTrigger,
+ aiPriority = toIntExpression(200),
+ effect = randomEffect({
+ valueItem(1, ef_cleric),
+ valueItem(1, ef_ranger),
+ valueItem(1, ef_illegalas),
+ valueItem(1, ef_wizard),
+ valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+ valueItem(1, ef_lgnkstwrt),
+ valueItem(1, ef_nudeltulpe),
+ valueItem(1, ef_jigmelingpa),
+ valueItem(1, ef_scrapforce),
+ valueItem(1, ef_Boudicarnage),
+ valueItem(1, ef_Doc_Orc),
+ valueItem(1, ef_Wombatman),
+ valueItem(1, ef_BTW),
+ valueItem(1, ef_thelonious),
+ valueItem(1, ef_Elfred_Nobel),
+ valueItem(8, ef_rando),
+
+ })
+ .seq(ifElseEffect(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(elfType)).count().gte(1),
+ ef_draw3,
+ ef_draw5))
+ .seq(sacrificeSelf()),
+ cost = noCost
+
+ })
+ },
+ --[[buffDetails = createBuffDetails({
+ name = "",
+ art = "",
+ text = ""
+ })
+ ]]
+ })
+end
+
+local function AI_2_hero_select_BuffDef()
+ local buff_name = "ai_1_hero_select_buff"
+
+
+return createGlobalBuff({
+ id="ai_2_selector",
+ name = "AI Selector",
+ abilities = {
+ createAbility({
+ id="ai_selector",
+ trigger = startOfGameTrigger,
+ aiPriority = toIntExpression(300),
+ effect =
+
+ ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(clericType)).count().gte(1), ef_no_cleric ,nullEffect())
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(rangerType)).count().gte(1), ef_no_ranger ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(wizardType)).count().gte(1), ef_no_wizard ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(thiefType)).count().gte(1), ef_no_thief ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(fighterType)).count().gte(1), ef_no_fighter ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(bardType)).count().gte(1), ef_no_bard ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(druidType)).count().gte(1), ef_no_druid ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(alchemistType)).count().gte(1), ef_no_cleric ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(monkType)).count().gte(1), ef_no_monk ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(necromancerType)).count().gte(1), ef_no_necromancer ,nullEffect()))
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, deckPloc)).where(isCardType(barbarianType)).count().gte(1), ef_no_barbarian ,nullEffect()))
+
+ .seq(ifElseEffect(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(elfType)).count().gte(1),
+ ef_draw3,
+ ef_draw5))
+ .seq(sacrificeSelf()),
+ cost = noCost
+
+ })
+ },
+ --[[buffDetails = createBuffDetails({
+ name = "",
+ art = "",
+ text = ""
+ })
+ ]]
+ })
+end
+
+local function share_card_2v2_skilldef()
+
+
+ local ef_speech1 = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Take this.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_speech2 = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="Here, this may help.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_speech3 = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="This is for you.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_speech4 = showSpeechBubbleEffect({
+ playerExpression=ownerPid,
+ text="You need this more than I do.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local card_name = "share_card_2v2"
+
+ local cardLayout = createLayout({
+ name = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ frame = "frames/generic_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "share_card_skill_2v2_skill",
+ name = "Helping Hand",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+
+ abilities = {
+ createAbility({
+ id = "share_card_skill_2v2_skill",
+ trigger = uiTrigger,
+ --check = getTurnsPlayed(currentPid).gte(0),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Move a card with a cost from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(nil, nullPloc)).seq(moveTarget(loc(nextAllyPid, discardPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ })
+
+ .seq(randomEffect({
+ valueItem(1, ef_speech1),
+ valueItem(1, ef_speech2),
+ valueItem(1, ef_speech3),
+ valueItem(1, ef_speech4),
+ })),
+ check = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {},
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().eq(0), --note -- double check?
+ cost = combineCosts({expendCost,goldCost(1)}),
+ }),
+ },
+
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/epicart/arcane_research"
+ })
+end
+
+
+local function ee_demon_hunter_carddef()
+ local card_name = "Demon Hunter"
+ return createChampionDef(
+ {
+ id = "demon_hunter",
+ name = "Demon Hunter",
+ types = {championType},
+ factions = { imperialFaction },
+ acquireCost = 6,
+ health = 6,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "demon_hunter",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ effect = gainCombatEffect(4),
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Hit up to 3 champions for 2 damage each.",
+ validTargets = oppStunnableSelector(),
+ min = 1,
+ max = 3,
+ targetEffect = damageTarget(2),
+ }),
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ }
+ })
+ }),
+
+ createAbility({
+ id = "demon_hunter_ally",
+ trigger = uiTrigger,
+ effect = gainHealthEffect(selectLoc(loc(oppPid, discardPloc)).where(isCardStunned()).count().multiply(2)),
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = noCost,
+ activations = singleActivation,
+ check = constBoolExpression(true),
+ allyFactions = {imperialFaction}
+ }),
+
+ createAbility({
+ id = "demon_hunter_ally2",
+ trigger = uiTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = drawCardsEffect(1),
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ allyFactions = {imperialFaction, imperialFaction}
+ }),
+
+ },
+ layout = createLayout(
+ {
+ name = "Demon Hunter",
+ art = "art/epicart/white_knight",
+ frame = "frames/imperial_champion_cardframe",
+ cost = 6,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 6,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+---- game setup
+function setupGame(g)
+
+registerCards(
+ g,
+ {
+ ee_demon_hunter_carddef()
+ })
+
+ standardSetup(g, {
+ description = "2v2 Co-op. Created by Aarkenell 22/06/2025. Updated 16/07/2025.",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid1, plid4, plid2, plid3 },
+ --ai = createHardAi(),
+ opponents = { { plid1, plid3 }, { plid2, plid4 }},
+ --centerRow = { "taxation", "taxation", "taxation", "taxation" },
+ tradeDeckExceptions = {
+ { qty=1, cardId="demon_hunter" }
+ },
+ players = {
+ {
+ id = plid1,
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ init = {
+ fromEnv = plid1
+ },
+ avatar = "",
+ --health = 10,
+ cards = {
+ skills = {
+ { qty=1, card= share_card_2v2_skilldef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ P1_difficultyBuffs()
+ }
+ }
+ },
+ {
+ id = plid2,
+ canAttackAllyOppChampions = true,
+ startDraw = 5,
+ init = {
+ fromEnv = plid2
+ },
+ avatar = "",
+ --health = 1,
+ cards = {
+ skills = {
+ { qty=1, card= share_card_2v2_skilldef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+ }
+ }
+ },
+ {
+ id = plid3,
+ canAttackAllyOppChampions = true,
+ isAi = true,
+ name = "Unknown",
+ syncHealth = true,
+ startDraw = 0,
+ avatar = "",
+ health = 0,
+ cards = {
+ deck = {
+ },
+ skills = {
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ --aiTurnBuffDef(),
+ AI_1_hero_select_BuffDef()
+
+
+
+ }
+ }
+ },
+ {
+ id = plid4,
+ canAttackAllyOppChampions = true,
+ isAi = true,
+ name = "Unknown",
+ syncHealth = true,
+ startDraw = 0,
+ avatar = "assassin",
+ health = 0,
+ cards = {
+ deck = {
+ },
+ skills = {
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ --aiTurnBuffDef(),
+ AI_2_hero_select_BuffDef(),
+
+
+
+ }
+ }
+ },
+ }
+ })
+end
+
+
+function endGame(g)
+end
+
+
+
+
+
+
+
+ function setupMeta(meta)
+ meta.name = "2v2 Co-op"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/2v2 Co-op.lua"
+ meta.features = {
+}
+
+ end
+
+function setupCoopIntro(encounter)
+ encounter.name = "2v2 Co-op"
+ encounter.description = "Battle it out against a pair of heroes based on our very own community members. Now with optional modifiers for a more challenging experience."
+ encounter.minlevel = 1
+ encounter.maxlevel = 18
+ encounter.avatar = "avatars/WarInTheWild/the_call"
+ encounter.heroname = "2v2 Co-op"
+ encounter.backgroundPath = "scenariointrobackgrounds/journeys/command"
+ encounter.features = {
+ encounter.feature("avatars/dwarf_cleric_female_01", "Battle it out against a pair of heroes based on our very own community members. You and your ally will have your normal health. However your opponents share a combined health pool."),
+ encounter.feature("avatars/halfdemon_fighter_male_02", "You may spend 1 gold each turn to move a card from your discard pile to your Ally's discard pile. Use this to your team's advantage."),
+ encounter.feature("avatars/druid_02", "There are some bugs with skill & ability icons getting mixed up between players. Switching to Ally view and back may fix this. If not, skills will still work correctly. Created by Aarkenell 22.06.2025. Updated 16.07.2025. (And still in development.)")
+ }
+end
\ No newline at end of file
diff --git a/Aarkenell/2v2 Competitive.lua b/Aarkenell/2v2 Competitive.lua
new file mode 100644
index 0000000..d940467
--- /dev/null
+++ b/Aarkenell/2v2 Competitive.lua
@@ -0,0 +1,235 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+require 'coopai'
+require 'timeoutai'
+
+-- need to fix combined health process
+
+isCoop = true
+
+local function share_card_2v2_skilldef()
+ local card_name = "share_card_2v2"
+
+ local cardLayout = createLayout({
+ name = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ frame = "frames/generic_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "share_card_skill_2v2_skill",
+ name = "Helping Hand",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+
+ abilities = {
+ createAbility({
+ id = "share_card_skill_2v2_skill",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(nextAllyPid, discardPloc))
+ }),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(currentPid, discardPloc))
+ }),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ }
+ }
+ }),
+ cost = goldCost(1),
+ }),
+ },
+
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/epicart/arcane_research"
+ })
+end
+
+---- game setup
+function setupGame(g)
+
+ standardSetup(g, {
+ description = "Defender (No Heroes) - 2v2 Competitive. Each player is teamed up with an AI bot. You must defend them whilst battling your opponent. Knock out either of your opponents to win. Created by Aarkenell 24/06/2025.",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid1, plid2, plid3, plid4 },
+ opponents = { { plid1, plid3 }, { plid2, plid4 }},
+ players = {
+ {
+ id = plid1,
+ isAi = false,
+ syncHealth = flase,
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ name = "Player 1",
+ avatar="wizard_01",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ skills = {
+ --{ qty=1, card= share_card_2v2_skilldef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ }
+ }
+ },
+ {
+ id = plid2,
+ isAi = true,
+ syncHealth = false,
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ name = "AI 1",
+ avatar="journeys/veteran_squire",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+ }
+ }
+ },
+ {
+ id = plid3,
+ isAi = true,
+ syncHealth = false,
+ startDraw = 5,
+ canAttackAllyOppChampions = true,
+ name = "AI 2",
+ avatar="profit",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+ }
+ }
+ },
+ {
+ id = plid4,
+ isAi = false,
+ syncHealth = false,
+ startDraw = 5,
+ canAttackAllyOppChampions = true,
+ name = "Player 2",
+ avatar="fighter_01",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ skills = {
+ --{ qty=1, card= share_card_2v2_skilldef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ }
+ }
+ },
+ }
+ })
+end
+
+function endGame(g)
+end
+
+
+
+
+
+
+
+ function setupMeta(meta)
+ meta.name = "2v2 Co-op"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/2v2 Co-op.lua"
+ meta.features = {
+}
+
+ end
\ No newline at end of file
diff --git a/Aarkenell/Co-op Vikings.lua b/Aarkenell/Co-op Vikings.lua
new file mode 100644
index 0000000..cce3dce
--- /dev/null
+++ b/Aarkenell/Co-op Vikings.lua
@@ -0,0 +1,738 @@
+require "herorealms"
+require "decks"
+require "stdlib"
+require "stdcards"
+require "hardai"
+require "mediumai"
+require "easyai"
+
+isCoop = true
+
+broadsidesType = "Broadsides"
+marauderType = "Marauder"
+
+--add cards here
+
+
+local function viking_boss_berserker_elite_carddef()
+ local card_name = "viking_boss_berserker_elite"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_berserker_elite",
+ name = "Berserker Elite",
+ types = {championType, nosteaalType},
+ acquireCost = 0,
+ health = 6,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "berserker_elite_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4)
+ .seq(addSlotToPlayerEffect(currentPlayer(), createPlayerSlot({
+ key = berserkSlotKey,
+ expiry = { endOfTurnExpiry }
+ })))
+
+ }
+ ),
+ --spawn ability
+ createAbility(
+ {
+ id = "berserker_elite_spawn",
+ trigger = onPlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = createCardEffect(viking_boss_berserker_token_carddef(), loc(controllerPid, inPlayPloc))
+ .seq(createCardEffect(viking_boss_berserker_token_carddef(), loc(controllerPid, inPlayPloc)))
+ }
+ ),
+
+ --health ability
+ createAbility(
+ {
+ id = "berserker_elite_health",
+ trigger = endOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = grantHealthTarget(-2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "").apply(selectSource())
+ }
+ ),
+
+ },
+
+ layout = createLayout(
+ {
+ name = "Berserker Elite",
+ art = "art/epicart/velden__frost_titan",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 6,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function viking_boss_berserker_token_carddef()
+ local card_name = "viking_boss_berserker_token"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_berserker_token",
+ name = "Berserker",
+ types = {championType, nosteaalType, tokenType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "berserker_token_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ ),
+
+ --health ability
+ createAbility(
+ {
+ id = "berserker_token_health",
+ trigger = endOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = grantHealthTarget(-2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "").apply(selectSource())
+ }
+ ),
+
+ --self sac ability
+ createAbility(
+ {
+ id = "viking_boss_berserker_token_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Berserker token",
+ art = "art/epicart/scarred_berserker",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 4,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_huskarl_carddef()
+ local card_name = "viking_boss_huskarl"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_huskarl",
+ name = "Huskarl",
+ types = {championType, nosteaalType},
+ acquireCost = 0,
+ health = 3,
+ isGuard = true,
+ aiPriority = toIntExpression(5),
+ abilities = {
+ createAbility(
+ {
+ id = "huskarl_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3),
+ aiPriority = toIntExpression(5)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Huskarl",
+ art = "art/epicart/brand__rebel_fighter",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_karl_carddef()
+ local card_name = "viking_boss_karl"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_karl",
+ name = "Karl",
+ types = {championType, nosteaalType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "karl_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Karl",
+ art = "art/classes/barbarian/growl",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_axe_maker_carddef()
+ local card_name = "viking_boss_axe_maker"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_axe_maker",
+ name = "Axe Maker",
+ types = { championType,nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "axe_maker_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = createCardEffect(fighter_throwing_axe_carddef(), loc(currentPid, deckPloc)).seq(moveToTopDeckTarget(true).apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("fighter_throwing_axe")).take(1)))
+
+ }
+ ),
+
+
+ --[[createAbility(
+ {
+ id = "axe_maker_protect",
+ effect = addSlotToTarget(createNoAttackSlot({ startOfOwnerTurnExpiry, leavesPlayExpiry })).apply(selectSource()),
+ cost = noCost,
+ trigger = onPlayTrigger,
+ aiPriority = toIntExpression(100)
+
+ }
+ )
+ ]]
+ },
+ layout = createLayout(
+ {
+ name = "Axe Maker",
+ art = "art/classes/barbarian/smoldering_rage_calm",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function summon_axe_maker_BuffDef()
+ local buff_name = "summon_axe_maker_buff"
+
+return createGlobalBuff({
+ id="summon_axe_maker_buff",
+ name = "Get Some Axes",
+ abilities = {
+ createAbility({
+ id="summon_axe_maker_effect",
+ trigger = startOfTurnTrigger,
+ condition = selectLoc(currentDiscardLoc).where(isCardName('viking_boss_axe_maker')).count().gte(1),
+ check = getPlayerHealth(currentPid).lte(30),
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Get back here and hand me some axes!!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(moveTarget(inPlayPloc).apply(selectLoc(loc(ownerPid, discardPloc)).where(isCardName('viking_boss_axe_maker')).take(1)))
+ .seq(addSlotToTarget(createNoAttackSlot({ startOfOwnerTurnExpiry, leavesPlayExpiry })).apply(selectLoc(loc(ownerPid, inPlayPloc)).where(isCardName('viking_boss_axe_maker'))))
+ .seq(createCardEffect(fighter_runic_throwing_axe_carddef(), loc(currentPid, handPloc))),
+ cost = sacrificeSelfCost
+
+ })
+ },
+ --[[buffDetails = createBuffDetails({
+ name = "",
+ art = "",
+ text = ""
+ })
+ ]]
+ })
+end
+
+local function viking_boss_bogmær_carddef()
+ local card_name = "viking_boss_bogmær"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_bogmær",
+ name = "Bogmær",
+ types = { championType,nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "bogmær_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Bogmær",
+ art = "art/epicart/keira__wolf_caller",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function god_of_plunder_skill_def()
+ local card_name = "god_of_plunder_custom"
+
+ local cardLayout = createLayout({
+ name = "God of Plunder",
+ art = "art/treasures/barbarian_pillage",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "god_of_plunder_custom",
+ name = "God of Plunder",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "godofplunderActivate",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost four or less for free.",
+ validTargets = selectLoc(centerRowLoc).where(isCardAcquirable().And(getCardCost().lte(4))),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ --pillage = Acquire a card for free. If it cost 3 or less put it into your hand. Draw 1.
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ promptType = showPrompt,
+ cost = noCost
+ })
+ },
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/treasures/barbarian_pillage"
+ })
+end
+
+local function god_of_plunder_upgrade_skill_def()
+ local card_name = "god_of_plunder_upgrade_custom"
+
+ local cardLayout = createLayout({
+ name = "God of Plunder",
+ art = "art/treasures/barbarian_pillage",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "god_of_plunder_upgrade_custom",
+ name = "God of Plunder",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "godofplunderActivate",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = acquireForFreeTarget().apply(selectLoc(centerRowLoc).where(isCardAcquirable()).order(getCardCost()).reverse().take(1)),
+
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ promptType = showPrompt,
+ cost = noCost
+ })
+ },
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/treasures/barbarian_pillage"
+ })
+end
+
+local function god_of_plunder_upgrade_BuffDef()
+ local buff_name = "god_of_plunder_upgrade_buff"
+
+return createGlobalBuff({
+ id="god_of_plunder_upgrade_buff",
+ name = "God of Plunder Upgrade",
+ abilities = {
+ createAbility({
+ id="god_of_plunder_upgrade_effect",
+ trigger = deckShuffledTrigger,
+ --check = selectLoc(oppDiscardLoc).sum(getCardCost()).gte(16),
+ condition = getTurnsPlayed(currentPid).gte(7),
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Plunder!",
+ waitForClick=constBoolExpression(false)
+ })
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Nah nah nah nah nah nah nah nah nah.",
+ waitForClick=constBoolExpression(false)
+ }))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Plunder!",
+ waitForClick=constBoolExpression(false)
+ }))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("god_of_plunder_custom"))))
+ .seq(createCardEffect(god_of_plunder_upgrade_skill_def(), currentSkillsLoc))
+ .seq(waitForClickEffect("The Vikings can now plunder one card of any cost each turn.")),
+ cost = sacrificeSelfCost
+
+ })
+ },
+
+ })
+end
+
+local function viking_boss_mead_carddef()
+ local card_name = "viking_boss_mead"
+
+ return createItemDef({
+ id = "viking_boss_mead",
+ name = "Mead",
+ types = { itemType },
+ aiPriority = toIntExpression(-1),
+ acquireCost = 0,
+ abilities = {
+ createAbility({
+ id = "viking_boss_mead",
+ effect = gainHealthEffect(1),
+ cost = noCost,
+ trigger = onPlayTrigger,
+ tags = { },
+ aiPriority = toIntExpression(-2)
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Mead",
+ art = "art/treasures/T_Fighter_Elixir_Red",
+ frame = "frames/barbarian_frames/barbarian_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ )
+ })
+end
+
+function setupGame(g)
+
+ standardSetup(
+ g,
+ {
+ description = "Vikings Co-op. Created by Aarkenell 18/04/2025.",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid3, plid1, plid4, plid2 },
+ opponents = { { plid1, plid3 }, { plid2, plid4 }},
+ players = {
+ {
+ id = plid1,
+ canAttackAllyOppChampions = true,
+ startDraw = 5,
+ init = {
+ fromEnv = plid1
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+ }
+ }
+ },
+
+ {
+ id = plid2,
+ canAttackAllyOppChampions = true,
+ startDraw = 5,
+ init = {
+ fromEnv = plid2
+ },
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+ }
+ }
+ },
+
+ {
+ id = plid3,
+ isAi = true,
+ name = "Vikings",
+ syncHealth = true,
+ startDraw = 3,
+ avatar = "Barbarian_01",
+ health = 80,
+ cards = {
+ reserve = {
+ },
+ hand = {
+ --30 card deck
+ {qty = 1, card = viking_boss_huskarl_carddef()},
+ {qty = 1, card = viking_boss_berserker_elite_carddef()},
+ {qty = 2, card = viking_boss_karl_carddef()},
+ {qty = 1, card = viking_boss_mead_carddef()},
+
+ },
+ deck = {
+
+
+ --[[30 card deck
+ {qty = 4, card = shortsword_carddef()},
+ {qty = 4, card = barbarian_hand_axe_carddef()},
+ {qty = 2, card = viking_boss_huskarl_carddef()},
+
+ {qty = 5, card = viking_boss_karl_carddef()},
+
+ {qty = 2, card = viking_boss_berserker_elite_carddef()},
+ {qty = 2, card = viking_boss_axe_maker_carddef()},
+ {qty = 4, card = viking_boss_mead_carddef()},
+ {qty = 2, card = viking_boss_bogmær_carddef()},
+ ]]
+
+ --20 card deck
+ {qty = 0, card = shortsword_carddef()},
+ {qty = 3, card = barbarian_hand_axe_carddef()},
+ {qty = 2, card = viking_boss_huskarl_carddef()},
+
+ {qty = 4, card = viking_boss_karl_carddef()},
+
+ {qty = 1, card = viking_boss_berserker_elite_carddef()},
+ {qty = 1, card = viking_boss_axe_maker_carddef()},
+ {qty = 3, card = viking_boss_mead_carddef()},
+ {qty = 1, card = viking_boss_bogmær_carddef()},
+
+ },
+ skills = {
+ {qty = 1, card = god_of_plunder_skill_def()},
+
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ --summon_axe_maker_BuffDef(),
+ --god_of_plunder_upgrade_BuffDef(),
+ bossMoveCardsAtTurnEndDef(),
+ shareDiscardsAtTurnStartDef(),
+ aiTurnBuffDef(),
+ }
+ }
+ },
+
+ {
+ id = plid4,
+ isAi = true,
+ name = "Vikings",
+ syncHealth = true,
+ startDraw = 0,
+ avatar="Barbarian_01",
+ health = 80,
+ cards = {
+ skills =
+ {qty = 1, card = god_of_plunder_skill_def()},
+ buffs = {
+ bossMoveCardsAtTurnEndDef(),
+ shareDiscardsAtTurnStartDef(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ aiTurnBuffDef(),
+ --summon_axe_maker_BuffDef(),
+ --god_of_plunder_upgrade_BuffDef()
+ }
+ }
+ }
+
+ }
+ }
+ )
+end
+
+function endGame(g)
+end
+
+
+ function setupMeta(meta)
+ meta.name = "Co-op Vikings"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/Co-op Vikings.lua"
+ meta.features = {
+}
+
+ end
\ No newline at end of file
diff --git a/Aarkenell/Defender (No Heroes) - 2v2 Competitive.lua b/Aarkenell/Defender (No Heroes) - 2v2 Competitive.lua
new file mode 100644
index 0000000..4f0d324
--- /dev/null
+++ b/Aarkenell/Defender (No Heroes) - 2v2 Competitive.lua
@@ -0,0 +1,473 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+require 'coopai'
+require 'timeoutai'
+
+-- need to fix combined health process
+
+isCoop = false
+
+function startOfGameBuffDef()
+
+ local defender_SoG_buff = createGlobalBuff({
+ id="defender_SoG_buff",
+ name = "Intro text",
+ abilities = {
+ createAbility({
+ id="defender_SoG_buff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect()
+ })
+ },
+ })
+
+ return createGlobalBuff({
+ id="startOfGameBuff",
+ name = "Start of Game Story",
+ abilities = {
+ createAbility({
+ id="SoG_effect",
+ trigger = startOfTurnTrigger,
+ effect = waitForClickEffect("Alert! This is NOT a co-op.", "")
+ .seq(waitForClickEffect("You are allied with an AI player.", ""))
+ .seq(waitForClickEffect("You must defend it whilst eliminating your opponent.", ""))
+ .seq(waitForClickEffect("If your AI ally's health reaches 0, you lose.", ""))
+ .seq(waitForClickEffect("Enjoy!", ""))
+ .seq(sacrificeSelf())
+ })
+ }
+ })
+end
+
+
+ local team1buff = createGlobalBuff({
+ id="team1buff",
+ name = "Team 1",
+ abilities = {
+ createAbility({
+ id="Team 1",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 1",
+ art = "art/epicart/angel_of_the_gate",
+ text = "You are paired with an AI Bot. If either of you fall, you lose."
+ })
+ })
+
+ local team2buff = createGlobalBuff({
+ id="team2buff",
+ name = "Team 2",
+ abilities = {
+ createAbility({
+ id="Team 2",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 2",
+ art = "art/epicart/anguish_demon",
+ text = "You are paired with an AI Bot. If either of you fall, you lose."
+ })
+ })
+
+ local team1AIbuff = createGlobalBuff({
+ id="team1AIbuff",
+ name = "Team 1",
+ abilities = {
+ createAbility({
+ id="Team 1",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 1",
+ art = "art/epicart/angel_of_the_gate",
+ text = "You are paired with a Human. If either of you fall, you lose."
+ })
+ })
+
+ local team2AIbuff = createGlobalBuff({
+ id="team1buff",
+ name = "Team 2",
+ abilities = {
+ createAbility({
+ id="Team 2",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 2",
+ art = "art/epicart/anguish_demon",
+ text = "You are paired with a Human. If either of you fall, you lose."
+ })
+ })
+
+local function ouch_AI1_buff_def()
+ local card_name = "defenders_ouch_buff"
+
+ local ef_ouch_1 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="That hurt.",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_ouch_2 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Haha! Tis but a flesh wound!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_ouch_0 = randomEffect({
+ valueItem(2, ef_ouch_1),
+ valueItem(1, ef_ouch_2),
+ })
+
+
+return createGlobalBuff({
+ id="ouch_1_buff",
+ name = "Hit Hard",
+ abilities = {
+ createAbility({
+ id="ouch_1_buff_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(getPlayerDamageReceivedThisTurn(oppPid).gte(10), ef_ouch_0, nullEffect()),
+ cost = noCost
+
+ }),
+ createAbility({
+ id="last_stand_effect",
+ trigger = endOfTurnTrigger,
+ check = getPlayerHealth(oppPid).lte(10),
+ effect = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="I'm done for.",
+ waitForClick= constBoolExpression(false)
+ }),
+ cost = sacrificeSelfCost
+
+ })
+ },
+
+ })
+end
+
+local function ouch_AI2_buff_def()
+ local card_name = "defenders_ouch_buff"
+
+ local ef_ouch_1 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Grrrr!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_ouch_2 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Hiss!!",
+ waitForClick= constBoolExpression(false)
+ })
+
+ local ef_ouch_0 = randomEffect({
+ valueItem(2, ef_ouch_1),
+ valueItem(1, ef_ouch_2),
+ })
+
+
+return createGlobalBuff({
+ id="ouch_1_buff",
+ name = "Hit Hard",
+ abilities = {
+ createAbility({
+ id="ouch_1_buff_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(getPlayerDamageReceivedThisTurn(oppPid).gte(10), ef_ouch_0, nullEffect()),
+ cost = noCost
+ }),
+ createAbility({
+ id="last_stand_effect",
+ trigger = endOfTurnTrigger,
+ check = getPlayerHealth(oppPid).lte(10),
+ effect = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Masssster! Heeelp!",
+ waitForClick= constBoolExpression(false)
+ }),
+ cost = sacrificeSelfCost
+
+ }),
+
+ },
+
+ })
+end
+
+local function share_card_2v2_skilldef()
+ local card_name = "share_card_2v2"
+
+ local cardLayout = createLayout({
+ name = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ frame = "frames/generic_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "share_card_skill_2v2_skill",
+ name = "Helping Hand",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+
+ abilities = {
+ createAbility({
+ id = "share_card_skill_2v2_skill",
+ trigger = uiTrigger,
+ check = getTurnsPlayed(currentPid).gte(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(nextAllyPid, discardPloc))
+ }),
+ condition = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(currentPid, discardPloc))
+ }),
+ condition = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ }
+ }
+ }),
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().eq(0),
+ cost = combineCosts({expendCost,goldCost(1)}),
+ }),
+ },
+
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/epicart/arcane_research"
+ })
+end
+
+---- game setup
+function setupGame(g)
+
+ standardSetup(g, {
+ description = "Defender (No Heroes) - 2v2 Competitive. This is NOT a Co-op. Each player is teamed up with an AI bot. You must defend them whilst battling your opponent. Knock out either of your opponents to win. Created by Aarkenell 24/06/2025.",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid1, plid4, plid2, plid3 },
+ opponents = { { plid1, plid3 }, { plid4, plid2 }},
+ players = {
+ {
+ id = plid1,
+ isAi = false,
+ syncHealth = false,
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ name = "Player 1",
+ avatar="cristov__the_just",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ skills = {
+ { qty=1, card= share_card_2v2_skilldef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team1buff,
+ startOfGameBuffDef(),
+ ouch_AI2_buff_def()
+ }
+ }
+ },
+ {
+ id = plid2,
+ isAi = false,
+ syncHealth = false,
+ startDraw = 5,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ name = "Player 2",
+ avatar="WarInTheWild/the_summoning",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ skills = {
+ { qty=1, card= share_card_2v2_skilldef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team2buff,
+ ouch_AI1_buff_def(),
+
+ }
+ }
+ },
+ {
+ id = plid3, -- player 2 ally
+ isAi = true,
+ syncHealth = false,
+ startDraw = 5,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ name = "AI 2",
+ avatar="WarInTheWild/slaughterclaw",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team2AIbuff,
+
+ }
+ }
+ },
+ {
+ id = plid4, -- player 1 ally
+ isAi = true,
+ syncHealth = false,
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ name = "AI 1",
+ avatar="cristov_s_recruits",
+ health = 50,
+ cards = {
+ deck = {
+ { qty=1, card=dagger_carddef() },
+ { qty=1, card=shortsword_carddef() },
+ { qty=7, card=gold_carddef() },
+ { qty=1, card=ruby_carddef() },
+ },
+
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team1AIbuff,
+ }
+ }
+ },
+ }
+ })
+end
+
+function endGame(g)
+end
+
+
+
+
+
+
+
+ function setupMeta(meta)
+ meta.name = "2v2 Co-op"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/2v2 Co-op.lua"
+ meta.features = {
+}
+
+ end
+
+function setupCoopIntro(encounter)
+ encounter.name = "Defender (No Heroes)"
+ encounter.description = "This is NOT a Co-op. Each player teams up with an AI Bot in a 2vs2 match-up. Defend your AI Ally and knock out your opponent first. Created by Aarkenell 24.06.2025"
+ encounter.minlevel = 1
+ encounter.maxlevel = 24
+ encounter.avatar = "avatars/chest"
+ encounter.heroname = "Defender (No Heroes)"
+ encounter.backgroundPath = "scenariointrobackgrounds/test_of_mettle"
+ encounter.features = {
+ encounter.feature("avatars/cristov__the_just", "This is NOT a co-op. Each human player teams up with an AI Bot in a 2vs2 match-up. Defend your AI Ally and knock out your opponent first."),
+ encounter.feature("avatars/cristov_s_recruits", "You may spend 1 gold each turn to move a card between your discard pile and your Ally's. Use this to your team's advantage."),
+ encounter.feature("avatars/WarInTheWild/the_summoning", "Created by Aarkenell 24.06.2025")
+ }
+end
\ No newline at end of file
diff --git a/Aarkenell/Defender (with Heroes) - 2v2 Competitive.lua b/Aarkenell/Defender (with Heroes) - 2v2 Competitive.lua
new file mode 100644
index 0000000..9da1664
--- /dev/null
+++ b/Aarkenell/Defender (with Heroes) - 2v2 Competitive.lua
@@ -0,0 +1,439 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+require 'coopai'
+require 'timeoutai'
+
+-- need to fix combined health process
+
+isCoop = false
+
+-- zembu levels
+
+ local ef4_zembu = sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("thief_pickpocket")))
+ .seq(createCardEffect(thief_swipe_carddef(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef5_zembu = sacrificeTarget().apply(selectLoc(loc(nextAllyPid, asidePloc)).where(isCardName("thief_throwing_knife")).take(1))
+ .seq(createCardEffect(thief_keen_throwing_knife_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(sacrificeSelf())
+
+ local ef6_zembu = sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("thief_swipe")))
+ .seq(createCardEffect(thief_lift_carddef(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef7_zembu = createCardEffect(thief_knife_belt_carddef(), loc(currentPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef8_zembu = sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("thief_heist")))
+ .seq(createCardEffect(thief_skillful_heist_carddef(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef9_zembu = createCardEffect(thief_shadow_mask_carddef(), loc(nextAllyPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local ef10_zembu = sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("thief_skillful_heist")))
+ .seq(createCardEffect(thief_smooth_heist_carddef(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ local ef11_zembu = createCardEffect(thief_blackjack_carddef(), loc(currentPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ local ef12_zembu = gainMaxHealthEffect(currentPid, const(6))
+ .seq(gainHealthEffect(6))
+ .seq(sacrificeSelf())
+
+ local ef13_zembu = createCardEffect(thief_trick_dice_carddef(), loc(currentPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef14_zembu = gainMaxHealthEffect(currentPid, const(6))
+ .seq(gainHealthEffect(6))
+ .seq(sacrificeSelf())
+
+ local ef15_zembu = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("thief_ruby")))
+ .seq(createCardEffect(thief_sharpened_ruby_carddef(), loc(nextAllyPid, deckPloc)))
+ .seq(sacrificeSelf())
+
+ local ef16_zembu = gainMaxHealthEffect(currentPid, const(6))
+ .seq(gainHealthEffect(6))
+ .seq(sacrificeSelf())
+
+ local ef17_zembu = createCardEffect(thief_blinding_powder_carddef(), loc(currentPid, reservePloc))
+ .seq(sacrificeSelf())
+
+ local ef18_zembu = gainMaxHealthEffect(currentPid, const(6))
+ .seq(gainHealthEffect(6))
+ .seq(sacrificeSelf())
+
+
+ local ef_zembu =
+ setPlayerNameEffect("Kachiko", currentPid)
+ .seq(setPlayerAvatarEffect("thief_alt_01", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(52)))
+ .seq(gainHealthEffect(52))
+ .seq(createCardEffect(thief_pickpocket_carddef(), nextAllySkillsLoc))
+ .seq(createCardEffect(thief_heist_carddef(), nextAllySLoc))
+ .seq(createCardEffect(gold_carddef(), locloc(nextAllyPid, deckPloc))) --here--
+ .seq(createCardEffect(gold_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(gold_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(gold_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(gold_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(ruby_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(ruby_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), locloc(nextAllyPid, deckPloc)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), locloc(nextAllyPid, deckPloc)))
+ --[[.seq(ifElseEffect(getHeroLevel(oppPid).gte(4), ef4_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(5), ef5_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(6), ef6_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7), ef7_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(8), ef8_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(9), ef9_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(10), ef10_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(11), ef11_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12), ef12_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(13), ef13_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(14), ef14_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(15), ef15_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(16), ef16_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(17), ef17_zembu, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(18), ef18_zembu, nullEffect()))]]
+ .seq(moveTarget(selectLoc(loc(nextAllyPid, deckPloc))).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(selectLoc(locloc(nextAllyPid, deckPloc))))
+
+local function AI_1_hero_select_BuffDef()
+ local buff_name = "ai_1_hero_select_buff"
+
+return createGlobalBuff({
+ id="ai_selector",
+ name = "AI Selector",
+ abilities = {
+ createAbility({
+ id="ai_selector",
+ trigger = startOfGameTrigger,
+ aiPriority = toIntExpression(300),
+ effect = randomEffect({
+ --valueItem(1, ef_ranger),
+ --valueItem(1, ef_illegalas),
+ --valueItem(1, ef_wizard),
+ --valueItem(1, ef_cleric),
+ --valueItem(1, ef_wardenslayer),
+ valueItem(1, ef_zembu),
+
+ })
+ .seq(ifElseEffect(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardType(elfType)).count().gte(1),
+ drawCardsEffect(1),
+ drawCardsEffect(3)))
+ .seq(sacrificeSelf()),
+ cost = noCost
+
+ })
+ },
+ --[[buffDetails = createBuffDetails({
+ name = "",
+ art = "",
+ text = ""
+ })
+ ]]
+ })
+end
+
+
+ local team1buff = createGlobalBuff({
+ id="team1buff",
+ name = "Team 1",
+ abilities = {
+ createAbility({
+ id="Team 1",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 1",
+ art = "art/epicart/angel_of_the_gate",
+ text = "You are paired with an AI Bot. If either of you fall, you lose."
+ })
+ })
+
+ local team2buff = createGlobalBuff({
+ id="team2buff",
+ name = "Team 2",
+ abilities = {
+ createAbility({
+ id="Team 2",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 2",
+ art = "art/epicart/anguish_demon",
+ text = "You are paired with an AI Bot. If either of you fall, you lose."
+ })
+ })
+
+ local team1AIbuff = createGlobalBuff({
+ id="team1AIbuff",
+ name = "Team 1",
+ abilities = {
+ createAbility({
+ id="Team 1",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 1",
+ art = "art/epicart/angel_of_the_gate",
+ text = "You are paired with a Human. If either of you fall, you lose."
+ })
+ })
+
+ local team2AIbuff = createGlobalBuff({
+ id="team1buff",
+ name = "Team 2",
+ abilities = {
+ createAbility({
+ id="Team 2",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Team 2",
+ art = "art/epicart/anguish_demon",
+ text = "You are paired with a Human. If either of you fall, you lose."
+ })
+ })
+
+local function share_card_2v2_skilldef()
+ local card_name = "share_card_2v2"
+
+ local cardLayout = createLayout({
+ name = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ frame = "frames/generic_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "share_card_skill_2v2_skill",
+ name = "Helping Hand",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+
+ abilities = {
+ createAbility({
+ id = "share_card_skill_2v2_skill",
+ trigger = uiTrigger,
+ check = getTurnsPlayed(currentPid).gte(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(nextAllyPid, discardPloc))
+ }),
+ condition = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(currentPid, discardPloc))
+ }),
+ condition = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ }
+ }
+ }),
+ cost = goldCost(1),
+ }),
+ },
+
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/epicart/arcane_research"
+ })
+end
+
+---- game setup
+function setupGame(g)
+
+ standardSetup(g, {
+ description = "Defender (No Heroes) - 2v2 Competitive. This is NOT a Co-op. Each player is teamed up with an AI bot. You must defend them whilst battling your opponent. Knock out either of your opponents to win. Created by Aarkenell 24/06/2025.",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid1, plid4, plid2, plid3 },
+ opponents = { { plid1, plid3 }, { plid4, plid2 }},
+ players = {
+ {
+ id = plid1,
+ init = {
+ fromEnv = plid1
+ },
+ avatar = "",
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ cards = {
+ deck = {
+ },
+ skills = {
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team1buff,
+ AI_1_hero_select_BuffDef(),
+ }
+ }
+ },
+ {
+ id = plid2,
+ isAi = false,
+ syncHealth = false, init = {
+ fromEnv = plid2
+ },
+ avatar = "",
+ startDraw = 5,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ cards = {
+ deck = {
+ },
+ skills = {
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team2buff,
+
+ }
+ }
+ },
+ {
+ id = plid3, -- player 2 ally
+ isAi = true,
+ syncHealth = false,
+ startDraw = 5,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ name = "AI 2",
+ avatar="WarInTheWild/slaughterclaw",
+ health = 0,
+ cards = {
+ deck = {
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team2AIbuff,
+ --AI_2_hero_select_BuffDef(),
+
+ }
+ }
+ },
+ {
+ id = plid4, -- player 1 ally
+ isAi = true,
+ syncHealth = false,
+ startDraw = 3,
+ canAttackAllyOppChampions = true,
+ --canAttackAllyOpp = true,
+ name = "AI 1",
+ avatar="cristov_s_recruits",
+ health = 0,
+ cards = {
+ deck = {
+ },
+
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ team1AIbuff,
+
+ }
+ }
+ },
+ }
+ })
+end
+
+function endGame(g)
+end
+
+
+
+
+
+
+
+
+ function setupMeta(meta)
+ meta.name = "Defender (with Heroes) - 2v2 Competitive"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/Defender (with Heroes) - 2v2 Competitive.lua"
+ meta.features = {
+}
+
+ end
\ No newline at end of file
diff --git a/Aarkenell/Dual class.lua b/Aarkenell/Dual class.lua
index 8a0f33e..ff40d95 100644
--- a/Aarkenell/Dual class.lua
+++ b/Aarkenell/Dual class.lua
@@ -5,25 +5,67 @@ require 'timeoutai'
require 'hardai_2'
require 'aggressiveai'
---=======================================================================================================
--- This is a proof of concept script to be able to play a custom class at any level without needing
--- to remember what level to send a challenge.
+--[[ This script offers full choice on all class upgrades as well as full random feature
+Updates:
+19.04.2025 - art and frame assets - decapitalisation post WWG patch
+]]
+-- Game start --
+
+
+function startOfGameBuffDef()
+
+ local dual_class_buff = createGlobalBuff({
+ id="dual_class_buff",
+ name = "Dual Class Forest",
+ abilities = {
+ createAbility({
+ id="dual_class_buff",
+ trigger = startOfTurnTrigger,
+ effect = nullEffect()
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Dual Class",
+ art = "art/epicart/halt_",
+ text = "You may only use 1 Skill and 1 Ability each turn."
+ })
+ })
+
+ return createGlobalBuff({
+ id="startOfGameBuff",
+ name = "Start of Game Story",
+ abilities = {
+ createAbility({
+ id="SoG_effect",
+ trigger = startOfTurnTrigger,
+ effect = waitForClickEffect("After years of competition and arguing between the various Guilds and Schools in Thandar...", "")
+ .seq(waitForClickEffect("...the Emperor decreed that they should open their doors to each other...", ""))
+ .seq(waitForClickEffect("...so that the Heroes of the Realm could learn new skills and diversify their battle tactics.", ""))
+ .seq(leftStoryTellEffectWithPortrait("inquisition", "Remember, Hero: You may soon have 2 Skills and more than 1 Ability, but you can still only use one of each, each turn."))
+ .seq(createCardEffect(dual_class_buff, loc(currentPid, buffsPloc)))
+ .seq(sacrificeSelf())
+ })
+ }
+ })
+end
---=======================================================================================================
--- simple choice effect, showing two layouts and executing selected one, triggers at the game start
local function chooseTheClass()
local ef_learn_levels = leftStoryTellEffectWithPortrait("ambushers", "Because of this, it is recommended you play this mod with characters at level 5 or higher, as this is when the secondary skill is granted.")
+ .seq(storyTellEffectWithPortrait("ambushers", "You may choose your dual-class yourself, or have it randomly selected by our highly trained AI Imp."))
+ .seq(storyTellEffectWithPortrait("ambushers", "If you choose yourself, you have full choice over the upgrades at each level."))
+ .seq(storyTellEffectWithPortrait("ambushers", "If you let the imp choose for you, both your class and all upgrades will be chosen randomly for you."))
.seq(leftStoryTellEffectWithPortrait("ambushers", "Whatever level you choose to play at though, I hope you enjoy the chaos...err.. I mean fun, of the Dual-class experience."))
+ .seq(leftStoryTellEffectWithPortrait("ambushers", "Just remember - you may have 2 Skills and more than 1 Ability, but you can still only use one of each, each turn."))
.seq(pushChoiceEffect({
choices = {
{
effect = nullEffect(),
layout = createLayout({
- name = "Return to Select Card Packs",
+ name = "Return to Select Dual-Class",
art = "avatars/ambushers",
- frame = "frames/Treasure_CardFrame",
+ frame = "frames/treasure_cardframe",
xmlText = [[
@@ -35,147 +77,148 @@ local function chooseTheClass()
}}))
local RandomWiz = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomThief = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomRanger = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomFighter = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomCleric = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomBard = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomBarb = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomAlch = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomMonk = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
})
local RandomDruid = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_necromancer_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
local RandomNecro = randomEffect({
- valueItem(1, createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))),
- valueItem(1, createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_cleric_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_wizard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_fighter_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_thief_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_ranger_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_bard_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_druid_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_barbarian_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_alchemist_carddef(), loc(currentPid, handPloc))),
+ valueItem(1, createCardEffect(random_choose_monk_carddef(), loc(currentPid, handPloc))),
})
+
return cardChoiceSelectorEffect({
id = "SoG_Choice",
@@ -185,29 +228,30 @@ local function chooseTheClass()
upperTitle = "Welcome! How would you like to proceed?",
lowerTitle = "",
-- 1. choose and play
- effectFirst= pushChoiceEffectWithTitle(
+ effectFirst= expendTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(pushChoiceEffectWithTitle(
{
choices = {
-- Choice 1.1: Choose dual
{
effect = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(clericType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_cleric_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(fighterType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_fighter_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(rangerType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_ranger_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(thiefType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_thief_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(wizardType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_wizard_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(alchemistType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_alchemist_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(barbarianType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_barbarian_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(bardType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_bard_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(druidType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_druid_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(monkType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_monk_carddef(), loc(currentPid, handPloc))))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(necromancerType)).count().gte(1),nullEffect(),createCardEffect(ST_TG_choose_necromancer_carddef(), loc(currentPid, handPloc)))),
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(clericType)).count().gte(1),nullEffect(),createCardEffect(choose_cleric_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(fighterType)).count().gte(1),nullEffect(),createCardEffect(choose_fighter_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(rangerType)).count().gte(1),nullEffect(),createCardEffect(choose_ranger_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(thiefType)).count().gte(1),nullEffect(),createCardEffect(choose_thief_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(wizardType)).count().gte(1),nullEffect(),createCardEffect(choose_wizard_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(alchemistType)).count().gte(1),nullEffect(),createCardEffect(choose_alchemist_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(barbarianType)).count().gte(1),nullEffect(),createCardEffect(choose_barbarian_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(bardType)).count().gte(1),nullEffect(),createCardEffect(choose_bard_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(druidType)).count().gte(1),nullEffect(),createCardEffect(choose_druid_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(monkType)).count().gte(1),nullEffect(),createCardEffect(choose_monk_carddef(), loc(currentPid, handPloc))))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(necromancerType)).count().gte(1),nullEffect(),createCardEffect(choose_necromancer_carddef(), loc(currentPid, handPloc)))),
layout = layoutCard(
{
title = "Dual Class",
- art = "art/T_Storm_Siregar",
+ art = "art/t_storm_siregar",
xmlText=[[
@@ -243,6 +287,7 @@ and get playing." fontsize="26" />
.seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(druidType)).count().gte(1),addEffect(RandomDruid),nullEffect()))
.seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(monkType)).count().gte(1),addEffect(RandomMonk),nullEffect()))
.seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(necromancerType)).count().gte(1),addEffect(RandomNecro),nullEffect()))
+
,
layout = layoutCard(
{
@@ -270,14 +315,10 @@ and get playing." fontsize="26" />
upperTitle = "Choose yourself or let our AI Imp decide.",
lowerTitle = "",
- }),
+ })),
-- 1.2 choice
- effectSecond = waitForClickEffect("After years of competition and arguing between the various Guilds and Schools in Thandar...", "")
- .seq(waitForClickEffect("...the Emperor decreed that they should open their doors to each other...", ""))
- .seq(waitForClickEffect("...so that the Heroes of the Realm could learn new skills and diversify their battle tactics.", ""))
-
-.seq(leftStoryTellEffectWithPortrait("ambushers", "Welcome to the Dual-class mod!"))
+ effectSecond = leftStoryTellEffectWithPortrait("ambushers", "Welcome to the Dual-class mod!")
.seq(leftStoryTellEffectWithPortrait("ambushers", "This mod allows you to choose a second class to utilise alongside that of your hero."))
.seq(leftStoryTellEffectWithPortrait("ambushers", "Selecting a secondary class will do a number of things."))
.seq(leftStoryTellEffectWithPortrait("ambushers", "For most classes, one Gold in your starting deck will be replaced with an economy card from your new secondary class."))
@@ -401,8 +442,8 @@ Level 23: Gain a level 15 upgrade
-- 1.1 layout
layoutFirst = createLayout({
name = "Choose a Dual Class",
- art = "art/T_Storm_Siregar",
- frame = "frames/generic_CardFrame",
+ art = "art/t_storm_siregar",
+ frame = "frames/generic_cardframe",
xmlText=[[
@@ -423,8 +464,8 @@ and get playing." fontsize="26" />
-- 1.2 layout
layoutSecond = createLayout({
name = "Learn about the mod",
- art = "art/treasures/T_Magic_Scroll_Souveraine",
- frame = "frames/generic_CardFrame",
+ art = "art/treasures/t_magic_scroll_souveraine",
+ frame = "frames/generic_cardframe",
xmlText=[[
@@ -438,8 +479,8 @@ and get playing." fontsize="26" />
end
-
local function goFirstEffect()
+-- this is a dirty hack to make player going first only draw three cards for their first turn. Feel free to replace it with a better implementation.
return createGlobalBuff({
id="draw_three_start_buff",
name = "Go First",
@@ -447,9 +488,9 @@ local function goFirstEffect()
createAbility({
id="go_first_draw_effect",
trigger = endOfTurnTrigger,
- effect = ElseEffect(
+ effect = ifElseEffect(
getTurnsPlayed(oppPid).eq(1),
- nullEffectif(),
+ nullEffect(),
drawCardsEffect(2)
)
})
@@ -457,17 +498,76 @@ local function goFirstEffect()
})
end
+
+local function disableAbilityBuff()
+
+local ab = createAbility({
+ id = "disable_ability_buff",
+ effect = disableTarget({ endOfTurnExpiry }).apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardType(abilityType))),
+ cost = noCost,
+ trigger = onSacrificeTrigger,
+ activations = singleActivation,
+ tags = { }
+})
+
+ return createGlobalBuff({
+ id = "disable_ability_buff",
+ name = "Disable Abilities",
+ abilities = {
+ createAbility({
+ id = "disable_ability_buff",
+ trigger = endOfTurnTrigger,
+ effect = addSlotToTarget(createAbilitySlot({
+ ability = ab,
+ expiry = { neverExpiry },
+ displayText = "",
+ })).apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardType(abilityType)))
+ .seq(sacrificeSelf())
+ })
+ }
+ })
+end
+
+local function disableSkillBuff()
+
+local ab = createAbility({
+ id = "disable_skill_buff",
+ effect = disableTarget({ endOfTurnExpiry }).apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardSkill().And(isCardType(magicArmorType).invert()))),
+ cost = noCost,
+ trigger = onExpendTrigger,
+ activations = singleActivation,
+ tags = { }
+})
+
+ return createGlobalBuff({
+ id = "disable_ability_buff",
+ name = "Disable Abilities",
+ abilities = {
+ createAbility({
+ id = "disable_ability_buff",
+ trigger = endOfTurnTrigger,
+ effect = addSlotToTarget(createAbilitySlot({
+ ability = ab,
+ expiry = { neverExpiry },
+ displayText = "",
+ })).apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardSkill().And(isCardType(magicArmorType).invert())))
+ .seq(sacrificeSelf())
+ })
+ }
+ })
+end
--=======================================================================================================
function setupGame(g)
registerCards(g, {
})
standardSetup(g, {
- description = "Dual-class Heroes - by Aarkenell (utilising WardenSlayer's Balanced Random Script). Updated 31.10.2024",
+ description = "Dual-class Heroes by Aarkenell. Special thanks to WardenSlayer and Userkaffe in making this mod work. Updated 14.11.2024",
playerOrder = { plid1, plid2 },
ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
timeoutAi = createTimeoutAi(),
opponents = { { plid1, plid2 } },
+ centerRow = { "the_rot" },
players = {
{
id = plid1,
@@ -478,8 +578,12 @@ function setupGame(g)
},
cards = {
buffs = {
+ startOfGameBuffDef(),
chooseTheClass(),
- drawCardsCountAtTurnEndDef(5),
+ drawCardsCountAtTurnEndDef(3),
+ disableAbilityBuff(),
+ disableSkillBuff(),
+ goFirstEffect(),
discardCardsAtTurnStartDef(),
fatigueCount(42, 1, "FatigueP1"),
}
@@ -494,8 +598,11 @@ function setupGame(g)
},
cards = {
buffs = {
+ startOfGameBuffDef(),
chooseTheClass(),
drawCardsCountAtTurnEndDef(5),
+ disableAbilityBuff(),
+ disableSkillBuff(),
discardCardsAtTurnStartDef(),
fatigueCount(42, 1, "FatigueP2"),
}
@@ -508,51 +615,279 @@ end
function endGame(g)
end
--- Created by WardenSlayer
-
function setupMeta(meta)
- meta.name = "wardenslayer_level_agnostic"
+ meta.name = "w"
meta.minLevel = 0
meta.maxLevel = 0
meta.introbackground = ""
meta.introheader = ""
meta.introdescription = ""
- meta.path = "C:/Users/xTheC/Desktop/Git Repositories/hero-realms-lua-scripts/WardenSlayer/wardenslayer_level_agnostic.lua"
+ meta.path = ""
meta.features = {
}
end
--- Buff to disable skills after first used each turn
--- from Randomnoob, based on buff to turn off second abilityType
---[[ It checks if there's non ancestry ability in sacrifice location and disables ability left until end of turn
-not sure it will work for your case
-yet you might make a custom trigger which fires when either skill is activated and a have an ability listening to that trigger on both skills. When it triggers - put disable buff on the skill
-]]
-
---[[function disableSkillsBuff()
- return createGlobalBuff({
- id = "disable_skills_buff",
- name = "Disable Skills",
- abilities = {
- createAbility({
- id = "disable_skills_buff_ability",
- trigger = onSacrificeGlobalTrigger,
- effect = disableTarget({ endOfTurnExpiry }).apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardType(abilityType).And(isCardType(ancestryType).invert())))
- .seq(sacrificeSelf()),
- check = selectLoc(loc(currentPid, skillSacrificePloc)).where(isCardType(abilityType).And(isCardType(ancestryType).invert())).count().gte(1),
- })
- }
- })
-end]]
------
-function ST_TG_choose_wizard_carddef()
+function choose_wizard_carddef()
+
+ local ef1_wizard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("wizard_spell_components").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(wizard_cat_familiar_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(wizard_flame_burst_carddef(), loc(currentPid, skillsPloc)))
+
+
+ --Level 3
+ local ef3_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_flame_burst")))
+ .seq(createCardEffect(wizard_fire_blast_carddef(), loc(currentPid, skillsPloc)))
+
+
+ --Level 5
+ local ef5_wizard = createCardEffect(wizard_channel_carddef(), loc(currentPid, skillsPloc))
+
+
+ --Level 7
+ local ef7_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fire_blast")))
+ .seq(createCardEffect(wizard_fireball_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9
+ local ef9_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_channel")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_deep_channel_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_deep_channel"),
+ },
+
+ {
+ effect = createCardEffect(wizard_calm_channel_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_calm_channel"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+
+--Level 11 -- Lvl 7 card add
+ local ef11_wizard = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_arcane_wand_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/wizard_arcane_wand"),
+ },
+
+ {
+ effect = createCardEffect(wizard_silverskull_amulet_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/wizard_silverskull_amulet"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_rolling_fireball_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_rolling_fireball"),
+ },
+
+ {
+ effect = createCardEffect(wizard_scorching_fireball_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_scorching_fireball"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_wizard = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_runic_robes_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_runic_robes"),
+ },
+
+ {
+ effect = createCardEffect(wizard_spellcaster_gloves_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_spellcaster_gloves"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_wizard = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_magic_mirror_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/wizard_magic_mirror"),
+ },
+
+ {
+ effect = createCardEffect(wizard_alchemist_s_stone_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/wizard_alchemist_s_stone"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_calm_channel").Or(isCardName("wizard_deep_channel"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_soul_channel_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_soul_channel"),
+ },
+
+ {
+ effect = createCardEffect(wizard_serene_channel_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_serene_channel"),
+ },
+
+ {
+ effect = createCardEffect(wizard_pure_channel_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_pure_channel"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_rolling_fireball").Or(isCardName("wizard_scorching_fireball"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_barreling_fireball_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_barreling_fireball"),
+ },
+
+ {
+ effect = createCardEffect(wizard_searing_fireball_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_searing_fireball"),
+ },
+
+ {
+ effect = createCardEffect(wizard_explosive_fireball_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/wizard_explosive_fireball"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(wizard_wizened_familiar_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/wizard_wizened_familiar"),
+ },
+
+ {
+ effect = createCardEffect(wizard_content_familiar_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/wizard_content_familiar"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
return createDef(
{
- id = "ST_TG_choose_wizard",
+ id = "choose_wizard",
name = "Dual-class Wizard",
types = {itemType},
cardTypeLabel = "Item",
@@ -564,11 +899,24 @@ function ST_TG_choose_wizard_carddef()
id = "choose_wizard",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualWizard", expiry = { Never } }))
- .seq(createCardEffect(dualWizardBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ cost = noCost,
+ activations = singleActivations,
+ effect = sacrificeTarget().apply(selectSource())
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_wizard, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_wizard, nullEffect())),
}
),
@@ -577,7 +925,7 @@ function ST_TG_choose_wizard_carddef()
{
name = "Dual-class Wizard",
art = "avatars/wizard_01",
- frame = "frames/generic_CardFrame",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
@@ -598,62 +946,265 @@ Add a Cat Familiar." fontsize="20"/>
)
end
-function ST_TG_choose_cleric_carddef()
- return createDef(
- {
- id = "ST_TG_choose_cleric",
- name = "Dual-class Cleric",
- types = {itemType},
- cardTypeLabel = "Item",
- playLocation = castPloc,
- acquireCost = 0,
- abilities = {
- createAbility(
- {
- id = "ST_TG_choose_cleric",
- trigger = onPlayTrigger,
- playAllType = noPlayPlayType,
- cost = noCost,
- activations = singleActivations,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualcleric", expiry = { Never } }))
- .seq(createCardEffect(dualclericBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
- .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+function choose_cleric_carddef()
+
+ local ef1_cleric = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("cleric_spiked_mace").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(cleric_follower_a_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cleric_minor_resurrect_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_minor_resurrect")))
+ .seq(createCardEffect(cleric_lesser_resurrect_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_cleric = createCardEffect(cleric_bless_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_lesser_resurrect")))
+ .seq(createCardEffect(cleric_resurrect_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_bless")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_bless_of_iron_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_bless_of_iron"),
+ },
+
+ {
+ effect = createCardEffect(cleric_bless_of_heart_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_bless_of_heart"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_cleric = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_redeemed_ruinos_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/cleric_redeemed_ruinos"),
+ },
+
+ {
+ effect = createCardEffect(cleric_brightstar_shield_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/cleric_brightstar_shield"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_resurrect")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_battle_resurrect_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_battle_resurrect"),
+ },
+
+ {
+ effect = createCardEffect(cleric_holy_resurrect_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_holy_resurrect"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_cleric = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_phoenix_helm_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_phoenix_helm"),
+ },
+
+ {
+ effect = createCardEffect(cleric_shining_breastplate_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_shining_breastplate"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_cleric = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_hammer_of_light_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/cleric_hammer_of_light"),
+ },
+
+ {
+ effect = createCardEffect(cleric_talisman_of_renewal_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/cleric_talisman_of_renewal"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_bless_of_iron").Or(isCardName("cleric_bless_of_heart"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_bless_of_steel_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_bless_of_steel"),
+ },
+
+ {
+ effect = createCardEffect(cleric_bless_the_flock_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_bless_the_flock"),
+ },
+
+ {
+ effect = createCardEffect(cleric_bless_of_soul_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_bless_of_soul"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cleric_battle_resurrect").Or(isCardName("cleric_holy_resurrect"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_mass_resurrect_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_mass_resurrect"),
+ },
+
+ {
+ effect = createCardEffect(cleric_righteous_resurrect_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_righteous_resurrect"),
+ },
+
+ {
+ effect = createCardEffect(cleric_divine_resurrect_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/cleric_divine_resurrect"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
- }
- )
- },
- layout = createLayout(
+
+ --Level 23
+ local ef23_cleric = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("cleric_spiked_mace")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cleric_spiked_mace_of_glory_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/cleric_spiked_mace_of_glory"),
+ },
+
+ {
+ effect = createCardEffect(cleric_spiked_mace_of_might_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/cleric_spiked_mace_of_might"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
{
- name = "Dual-class Cleric",
- art = "avatars/cleric_02",
- frame = "frames/generic_CardFrame",
- cost = 0,
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
+
+
+
+ ]],
-Add a Follower." fontsize="20"/>
-
-
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
]],
}
- )
- }
- )
-end
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
-function ST_TG_choose_fighter_carddef()
return createDef(
{
- id = "ST_TG_choose_fighter",
- name = "Dual-class Fighter",
+ id = "choose_cleric",
+ name = "Dual-class Cleric",
types = {itemType},
cardTypeLabel = "Item",
playLocation = castPloc,
@@ -661,30 +1212,44 @@ function ST_TG_choose_fighter_carddef()
abilities = {
createAbility(
{
- id = "ST_TG_choose_fighter",
+ id = "choose_cleric",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
cost = noCost,
activations = singleActivations,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualfighter", expiry = { Never } }))
- .seq(createCardEffect(dualFighterBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ effect = sacrificeTarget().apply(selectSource())
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_cleric, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_cleric, nullEffect())),
}
)
},
layout = createLayout(
{
- name = "Dual-class Fighter",
- art = "avatars/fighter_01",
- frame = "frames/generic_CardFrame",
+ name = "Dual-class Cleric",
+ art = "avatars/cleric_02",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
-
+
@@ -697,61 +1262,266 @@ function ST_TG_choose_fighter_carddef()
)
end
-function ST_TG_choose_thief_carddef()
- return createDef(
- {
- id = "ST_TG_choose_thief",
- name = "Dual-class Thief",
- types = {itemType},
- cardTypeLabel = "Item",
- playLocation = castPloc,
- acquireCost = 0,
- abilities = {
- createAbility(
- {
- id = "choose_thief",
- trigger = onPlayTrigger,
- playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualthief", expiry = { Never } }))
- .seq(createCardEffect(dualThiefBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
- .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+function choose_fighter_carddef()
+
+ local ef1_fighter = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ --no gold substitute for fighter
+ .seq(createCardEffect(fighter_longsword_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(fighter_precision_blow_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_precision_blow")))
+ .seq(createCardEffect(fighter_powerful_blow_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_fighter = createCardEffect(fighter_shoulder_bash_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_powerful_blow")))
+ .seq(createCardEffect(fighter_crushing_blow_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_shoulder_bash")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_knock_back_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_knock_back"),
+ },
+
+ {
+ effect = createCardEffect(fighter_shoulder_smash_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_shoulder_smash"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_fighter = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_double_bladed_axe_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/fighter_double_bladed_axe"),
+ },
+
+ {
+ effect = createCardEffect(fighter_jagged_spear_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/fighter_jagged_spear"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_crushing_blow")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_sweeping_blow_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_sweeping_blow"),
+ },
+
+ {
+ effect = createCardEffect(fighter_smashing_blow_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_smashing_blow"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_fighter = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_helm_of_fury_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_helm_of_fury"),
+ },
+
+ {
+ effect = createCardEffect(fighter_spiked_pauldrons_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_spiked_pauldrons"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_fighter = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_sharpening_stone_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/fighter_sharpening_stone"),
+ },
+
+ {
+ effect = createCardEffect(fighter_rallying_flag_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/fighter_rallying_flag"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_knock_back").Or(isCardName("fighter_shoulder_smash"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_group_tackle_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_group_tackle"),
+ },
+
+ {
+ effect = createCardEffect(fighter_knock_down_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_knock_down"),
+ },
+
+ {
+ effect = createCardEffect(fighter_shoulder_crush_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_shoulder_crush"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_sweeping_blow").Or(isCardName("fighter_smashing_blow"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_devastating_blow_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_devastating_blow"),
+ },
+
+ {
+ effect = createCardEffect(fighter_mighty_blow_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_mighty_blow"),
+ },
+
+ {
+ effect = createCardEffect(fighter_whirling_blow_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/fighter_whirling_blow"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
- }
- ),
- },
- layout = createLayout(
+
+ --Level 23
+ local ef23_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("fighter_longsword")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(fighter_flaming_longsword_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/fighter_flaming_longsword"),
+ },
+
+ {
+ effect = createCardEffect(fighter_lightning_longsword_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/fighter_lightning_longsword"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
{
- name = "Dual-class Thief",
- art = "avatars/thief_01",
- frame = "frames/generic_CardFrame",
- cost = 0,
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
+
+
+
]],
}
- )
- }
- )
-end
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
-function ST_TG_choose_ranger_carddef()
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
return createDef(
{
- id = "ST_TG_choose_ranger",
- name = "Dual-class ranger",
+ id = "choose_fighter",
+ name = "Dual-class Fighter",
types = {itemType},
cardTypeLabel = "Item",
playLocation = castPloc,
@@ -759,34 +1529,41 @@ function ST_TG_choose_ranger_carddef()
abilities = {
createAbility(
{
- id = "ST_TG_choose_ranger",
+ id = "choose_fighter",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
cost = noCost,
activations = singleActivations,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualranger", expiry = { Never } }))
- .seq(createCardEffect(dualrangerBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ effect = sacrificeTarget().apply(selectSource())
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_fighter, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_fighter, nullEffect())),
}
)
},
layout = createLayout(
{
- name = "Dual-class Ranger",
- art = "avatars/ranger_02",
- frame = "frames/generic_CardFrame",
+ name = "Dual-class Fighter",
+ art = "avatars/fighter_01",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
-
+
@@ -799,110 +1576,268 @@ and a Black Arrow." fontsize="20"/>
)
end
-function ST_TG_choose_bard_carddef()
- return createDef(
- {
- id = "ST_TG_choose_bard",
- name = "Dual-class Bard",
- types = {itemType},
- cardTypeLabel = "Item",
- playLocation = castPloc,
- acquireCost = 0,
- abilities = {
- createAbility(
- {
- id = "choose_bard",
- trigger = onPlayTrigger,
- playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualbard", expiry = { Never } }))
- .seq(createCardEffect(dualbardBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
- .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+function choose_thief_carddef()
+
+ local ef1_thief = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("ruby").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(currentPid, asidePloc)))
+ --Extra gold-transform for thief/ranger/bard?
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(currentPid, asidePloc))).seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(thief_pilfer_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pilfer")))
+ .seq(createCardEffect(thief_theft_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_thief = createCardEffect(thief_pickpocket_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_theft")))
+ .seq(createCardEffect(thief_heist_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pickpocket")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_sleight_of_hand_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_sleight_of_hand"),
+ },
+
+ {
+ effect = createCardEffect(thief_swipe_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_swipe"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_thief = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_knife_belt_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/thief_knife_belt"),
+ },
+
+ {
+ effect = createCardEffect(thief_sacrificial_dagger_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/thief_sacrificial_dagger"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_heist")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_timely_heist_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_timely_heist"),
+ },
+
+ {
+ effect = createCardEffect(thief_skillful_heist_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_skillful_heist"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_thief = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_shadow_mask_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_shadow_mask"),
+ },
+
+ {
+ effect = createCardEffect(thief_silent_boots_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_silent_boots"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_thief = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_blackjack_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/thief_blackjack"),
+ },
+
+ {
+ effect = createCardEffect(thief_jewelers_loupe_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/thief_jewelers_loupe"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_sleight_of_hand").Or(isCardName("thief_swipe"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_misdirection_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_misdirection"),
+ },
+
+ {
+ effect = createCardEffect(thief_distracted_exchange_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_distracted_exchange"),
+ },
+
+ {
+ effect = createCardEffect(thief_lift_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_lift"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_timely_heist").Or(isCardName("thief_skillful_heist"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_practiced_heist_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_practiced_heist"),
+ },
+
+ {
+ effect = createCardEffect(thief_smooth_heist_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_smooth_heist"),
+ },
+
+ {
+ effect = createCardEffect(thief_masterful_heist_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/thief_masterful_heist"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
- }
- ),
- },
- layout = createLayout(
+
+ --Level 23
+ local ef23_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("thief_ruby")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(thief_brilliant_ruby_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/thief_brilliant_ruby"),
+ },
+
+ {
+ effect = createCardEffect(thief_sharpened_ruby_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/thief_sharpened_ruby"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
{
- name = "Dual-class Bard",
- art = "avatars/bard_01",
- frame = "frames/generic_CardFrame",
- cost = 0,
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
+
+
+
]],
}
- )
- }
- )
-end
-
-function ST_TG_choose_druid_carddef()
- return createDef(
- {
- id = "ST_TG_choose_druid",
- name = "Dual-class Druid",
- types = {itemType},
- cardTypeLabel = "Item",
- playLocation = castPloc,
- acquireCost = 0,
- abilities = {
- createAbility(
- {
- id = "choose_druid",
- trigger = onPlayTrigger,
- playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualdruid", expiry = { Never } }))
- .seq(createCardEffect(dualdruidBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
- .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
-
- }
- ),
- },
- layout = createLayout(
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
{
- name = "Dual-class druid",
- art = "avatars/druid_01",
- frame = "frames/generic_CardFrame",
- cost = 0,
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
+
+
+
]],
}
- )
- }
- )
-end
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
-function ST_TG_choose_barbarian_carddef()
return createDef(
{
- id = "ST_TG_choose_barbarian",
- name = "Dual-class Barbarian",
+ id = "choose_thief",
+ name = "Dual-class Thief",
types = {itemType},
cardTypeLabel = "Item",
playLocation = castPloc,
@@ -910,31 +1845,42 @@ function ST_TG_choose_barbarian_carddef()
abilities = {
createAbility(
{
- id = "choose_barbarian",
+ id = "choose_thief",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualbarbarian", expiry = { Never } }))
- .seq(createCardEffect(dualbarbarianBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ effect = sacrificeTarget().apply(selectSource())
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_thief, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_thief, nullEffect())),
}
),
},
layout = createLayout(
{
- name = "Dual-class barbarian",
- art = "avatars/barbarian_01",
- frame = "frames/generic_CardFrame",
+ name = "Dual-class Thief",
+ art = "avatars/thief_01",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
+Add 2 Throwing Knives." fontsize="20"/>
@@ -947,27 +1893,1609 @@ Add Headbutt." fontsize="20"/>
)
end
-function ST_TG_choose_monk_carddef()
- return createDef(
- {
- id = "ST_TG_choose_monk",
- name = "Dual-class Monk",
- types = {itemType},
- cardTypeLabel = "Item",
- playLocation = castPloc,
- acquireCost = 0,
- abilities = {
+function choose_ranger_carddef()
+
+ local ef1_ranger = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("ranger_horn_of_calling").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(ranger_black_arrow_carddef(), loc(currentPid, asidePloc)))
+ --Extra gold-transform for thief/ranger/bard?
+ .seq(createCardEffect(ranger_hunting_bow_carddef(), loc(currentPid, asidePloc))).seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(ranger_steady_shot_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_steady_shot")))
+ .seq(createCardEffect(ranger_well_placed_shot_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_ranger = createCardEffect(ranger_track_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_well_placed_shot")))
+ .seq(createCardEffect(ranger_headshot_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_track")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_fast_track_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_fast_track"),
+ },
+
+ {
+ effect = createCardEffect(ranger_careful_track_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_careful_track"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_ranger = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_snake_pet_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/ranger_snake_pet"),
+ },
+
+ {
+ effect = createCardEffect(ranger_unending_quiver_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/ranger_unending_quiver"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_headshot")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_quickshot_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_quickshot"),
+ },
+
+ {
+ effect = createCardEffect(ranger_twin_shot_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_twin_shot"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_ranger = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_hunters_cloak_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_hunters_cloak"),
+ },
+
+ {
+ effect = createCardEffect(ranger_sureshot_bracer_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_sureshot_bracer"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_ranger = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_pathfinder_compass_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/ranger_pathfinder_compass"),
+ },
+
+ {
+ effect = createCardEffect(ranger_flashfire_arrow_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/ranger_flashfire_arrow"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_fast_track").Or(isCardName("ranger_careful_track"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_flawless_track_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_flawless_track"),
+ },
+
+ {
+ effect = createCardEffect(ranger_instinctive_track_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_instinctive_track"),
+ },
+
+ {
+ effect = createCardEffect(ranger_relentless_track_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_relentless_track"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("ranger_quickshot").Or(isCardName("ranger_twin_shot"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_snapshot_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_snapshot"),
+ },
+
+ {
+ effect = createCardEffect(ranger_longshot_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_longshot"),
+ },
+
+ {
+ effect = createCardEffect(ranger_triple_shot_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutTexture("Textures/ranger_triple_shot"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_ranger = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("ranger_horn_of_calling")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(ranger_horn_of_need_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/ranger_horn_of_need"),
+ },
+
+ {
+ effect = createCardEffect(ranger_horn_of_command_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutTexture("Textures/ranger_horn_of_command"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
+ return createDef(
+ {
+ id = "choose_ranger",
+ name = "Dual-class ranger",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_ranger",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_ranger, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_ranger, nullEffect())),
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Ranger",
+ art = "avatars/ranger_02",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function choose_bard_carddef()
+
+ local ef1_bard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("bard_harp").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(bard_guild_tale_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_song_of_the_wild_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(bard_imperial_anthem_carddef(), loc(currentPid, asidePloc)))
+ }))
+ .seq(createCardEffect(bard_brave_story_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_brave_story")))
+ .seq(createCardEffect(bard_epic_poem_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_bard = createCardEffect(bard_moving_melody_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_epic_poem")))
+ .seq(createCardEffect(bard_valiant_verse_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_moving_melody")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_inspiring_tune_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_inspiring_tune"),
+ },
+
+ {
+ effect = createCardEffect(bard_rousing_ode_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_rousing_ode"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_bard = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_silencing_scepter_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/bard/bard_silencing_scepter"),
+ },
+
+ {
+ effect = createCardEffect(bard_summoning_drum_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/bard/bard_summoning_drum"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_valiant_verse")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_intrepid_tale_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_intrepid_tale"),
+ },
+
+ {
+ effect = createCardEffect(bard_heroic_fable_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_heroic_fable"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_bard = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_collecting_cap_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/bard/bard_collecting_cap"),
+ },
+
+ {
+ effect = createCardEffect(bard_coat_of_encores_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/bard/bard_coat_of_encores"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_bard = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_goblet_of_whimsy_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/bard/bard_goblet_of_whimsy"),
+ },
+
+ {
+ effect = createCardEffect(bard_lute_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/bard/bard_lute"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_inspiring_tune").Or(isCardName("bard_rousing_ode"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_battle_march_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_battle_march"),
+ },
+
+ {
+ effect = createCardEffect(bard_rally_hymn_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_rally_hymn"),
+ },
+
+ {
+ effect = createCardEffect(bard_stirring_song_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_stirring_song"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("bard_intrepid_tale").Or(isCardName("bard_heroic_fable"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_grand_legend_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_grand_legend"),
+ },
+
+ {
+ effect = createCardEffect(bard_bold_saga_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_bold_saga"),
+ },
+
+ {
+ effect = createCardEffect(bard_grand_legend_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/bard/bard_grand_legend"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_bard = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("bard_harp")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(bard_golden_harp_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/bard/bard_golden_harp"),
+ },
+
+ {
+ effect = createCardEffect(bard_lullaby_harp_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/bard/bard_lullaby_harp"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
+
+
+ --
+
+
+
+
+ return createDef(
+ {
+ id = "choose_bard",
+ name = "Dual-class Bard",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_bard",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_bard, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_bard, nullEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Bard",
+ art = "avatars/bard_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function choose_druid_carddef()
+
+ local ef1_druid = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("druid_squirrel").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(druid_fox_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(druid_animal_strength_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3
+ local ef3_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_animal_strength")))
+ .seq(createCardEffect(druid_bear_strength_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5
+ local ef5_druid = createCardEffect(druid_forest_rage_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7
+ local ef7_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_bear_strength")))
+ .seq(createCardEffect(druid_bear_form_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_forest_rage")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_forest_fury_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_forest_fury"),
+ },
+
+ {
+ effect = createCardEffect(druid_spirit_of_the_forest_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_spirit_of_the_forest"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_druid = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_owl_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/druid/druid_owl"),
+ },
+
+ {
+ effect = createCardEffect(druid_heartwood_splinter_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/druid/druid_heartwood_splinter"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_bear_form")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_grizzly_form_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_grizzly_form"),
+ },
+
+ {
+ effect = createCardEffect(druid_spirit_bear_form_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_spirit_bear_form"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_druid = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_circlet_of_flowers_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/druid/druid_circlet_of_flowers"),
+ },
+
+ {
+ effect = createCardEffect(druid_grass_weave_sash_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/druid/druid_grass_weave_sash"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_druid = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_rabbit_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/druid/druid_rabbit"),
+ },
+
+ {
+ effect = createCardEffect(druid_ursine_rod_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/druid/druid_ursine_rod"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_forest_fury").Or(isCardName("druid_spirit_of_the_forest"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_forest_vengeance_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_forest_vengeance"),
+ },
+
+ {
+ effect = createCardEffect(druid_way_of_the_forest_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_way_of_the_forest"),
+ },
+
+ {
+ effect = createCardEffect(druid_soul_of_the_forest_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_soul_of_the_forest"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("druid_grizzly_form").Or(isCardName("druid_spirit_bear_form"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_polar_bear_form_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_polar_bear_form"),
+ },
+
+ {
+ effect = createCardEffect(druid_spirit_grizzly_form_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_spirit_grizzly_form"),
+ },
+
+ {
+ effect = createCardEffect(druid_pure_bear_form_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/druid/druid_pure_bear_form"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_druid = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("druid_fox")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(druid_feral_fox_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/druid/druid_feral_fox"),
+ },
+
+ {
+ effect = createCardEffect(druid_nimble_fox_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/druid/druid_nimble_fox"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
+
+ return createDef(
+ {
+ id = "choose_druid",
+ name = "Dual-class Druid",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_druid",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_druid, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_druid, nullEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class druid",
+ art = "avatars/druid_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function choose_barbarian_carddef()
+
+ local ef1_barbarian = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("barbarian_plunder").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(barbarian_headbutt_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(barbarian_growl_carddef(), loc(currentPid, skillsPloc)))
+
+
+ --Level 3 -- Ab 2
+ local ef3_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_growl")))
+ .seq(createCardEffect(barbarian_bellow_carddef(), loc(currentPid, skillsPloc)))
+
+
+ --Level 5 -- Skill 3
+ local ef5_barbarian = createCardEffect(barbarian_inner_rage_carddef(), loc(currentPid, skillsPloc))
+
+
+ --Level 7 -- Ab 3
+ local ef7_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_bellow")))
+ .seq(createCardEffect(barbarian_roar_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_inner_rage")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_smoldering_rage_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_smoldering_rage"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_flaring_rage_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_flaring_rage"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_barbarian = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_wolf_companion_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_wolf_companion"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_flail_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_flail"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_roar")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_terrifying_roar_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_terrifying_roar"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_battle_cry_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_battle_cry"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_barbarian = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_razor_bracers_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_razor_bracers"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_stomping_boots_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_stomping_boots"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_barbarian = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_bone_axe_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_bone_axe"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_crushed_coin_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_crushed_coin"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_smoldering_rage").Or(isCardName("barbarian_flaring_rage"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_eternal_rage_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_eternal_rage"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_fiery_rage_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_fiery_rage"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_explosive_rage_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_explosive_rage"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("barbarian_terrifying_roar").Or(isCardName("barbarian_battle_cry"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_terrifying_howl_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_terrifying_howl"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_battle_roar_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_battle_roar"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_war_cry_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/barbarian/barbarian_war_cry"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_barbarian = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("barbarian_headbutt")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(barbarian_disorienting_headbutt_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_disorienting_headbutt"),
+ },
+
+ {
+ effect = createCardEffect(barbarian_shattering_headbutt_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/barbarian/barbarian_shattering_headbutt"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
+
+
+ return createDef(
+ {
+ id = "choose_barbarian",
+ name = "Dual-class Barbarian",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "choose_barbarian",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_barbarian, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_barbarian, nullEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class barbarian",
+ art = "avatars/barbarian_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function choose_monk_carddef()
+
+ local dualmonktaoresetbuff = createGlobalBuff({
+ id="dualmonktaoresetbuff",
+ name = "Dual Monk Tao Reset",
+ abilities = {
+ createAbility({
+ id="dualmonktaoresetbuff",
+ trigger = endOfTurnTrigger,
+ effect = gainCustomValueEffect(getCustomValue(currentPid).negate()),
+
+ })
+ }
+ })
+
+ local ef1_monk = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("monk_spring_blossom").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(transformTarget("monk_spring_blossom").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_cobra_fang_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_serene_wind_carddef(), loc(currentPid, asidePloc)))
+ }))
+ .seq(createCardEffect(monk_calm_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_calm")))
+ .seq(createCardEffect(monk_focus_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_monk = createCardEffect(monk_favored_technique_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_focus")))
+ .seq(createCardEffect(monk_qi_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_favored_technique")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_flowing_technique_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_flowing_technique"),
+ },
+
+ {
+ effect = createCardEffect(monk_practiced_technique_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_practiced_technique"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_monk = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_ring_of_1000_palms_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/monk/monk_ring_of_1000_palms"),
+ },
+
+ {
+ effect = createCardEffect(monk_stillness_of_water_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/monk/monk_stillness_of_water"),
+
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_qi")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_jing_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_jing"),
+ },
+
+ {
+ effect = createCardEffect(monk_focused_strike_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_focused_strike"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_monk = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_slippers_of_the_crane_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/monk/monk_slippers_of_the_crane"),
+
+ },
+
+ {
+ effect = createCardEffect(monk_wraps_of_strength_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/monk/monk_wraps_of_strength"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_monk = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_tonfas_of_balance_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/monk/monk_tonfas_of_balance"),
+ },
+
+ },
+
+ upperTitle = "You must take Tonfas of Balance. (We're all out of Spring Blossoms unfortunately.)",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_flowing_technique").Or(isCardName("monk_practiced_technique"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_fluid_technique_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_fluid_technique"),
+ },
+
+ {
+ effect = createCardEffect(monk_precise_technique_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_precise_technique"),
+ },
+
+ {
+ effect = createCardEffect(monk_masterful_technique_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_masterful_technique"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_jing").Or(isCardName("monk_focused_strike"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_qigong_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_qigong"),
+ },
+
+ {
+ effect = createCardEffect(monk_yin_yang_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_yin_yang"),
+ },
+
+ {
+ effect = createCardEffect(monk_dim_mak_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/monk/monk_dim_mak"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("monk_spring_blossom")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(monk_resplendent_blossom_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/monk/monk_resplendent_blossom"),
+ },
+
+ {
+ effect = createCardEffect(monk_magnificent_blossom_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/monk/monk_magnificent_blossom"),
+ --older card = radiant blossom
+ --effect = createCardEffect(monk_radiant_blossom_carddef(), loc(currentPid, asidePloc)),
+ --layout = loadLayoutData("layouts/monk/monk_radiant_blossom"),
+
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
+
+ local dualmonktaoresetbuff = createGlobalBuff({
+ id="dualmonktaoresetbuff",
+ name = "Dual Monk Tao Reset",
+ abilities = {
+ createAbility({
+ id="dualmonktaoresetbuff",
+ trigger = endOfTurnTrigger,
+ effect = gainCustomValueEffect(getCustomValue(currentPid).negate()),
+
+ })
+ }
+ })
+
+
+ return createDef(
+ {
+ id = "choose_monk",
+ name = "Dual-class Monk",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
createAbility(
{
id = "choose_monk",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualmonk", expiry = { Never } }))
- .seq(createCardEffect(dualmonkBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(createCardEffect(dualmonktaoresetbuff, loc(currentPid, buffsPloc)))
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
-
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_monk, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_monk, nullEffect())),
}
),
},
@@ -975,7 +3503,7 @@ function ST_TG_choose_monk_carddef()
{
name = "Dual-class Monk",
art = "avatars/monk_02",
- frame = "frames/generic_CardFrame",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
@@ -997,10 +3525,265 @@ Cobra Fang or Serene Wind." fontsize="20"/>
)
end
-function ST_TG_choose_alchemist_carddef()
+function choose_alchemist_carddef()
+
+ local ef1_alchemist = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("alchemist_philosophers_stone").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(alchemist_dissolve_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_dissolve")))
+ .seq(createCardEffect(alchemist_minor_transmutation_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_alchemist = createCardEffect(alchemist_reflect_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_minor_transmutation")))
+ .seq(createCardEffect(alchemist_transmutation_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_reflect")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_dispersion_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_dispersion"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_refraction_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_refraction"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_alchemist = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_bottled_tempest_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_bottled_tempest"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_crucible_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_crucible"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_transmutation")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_rapid_transmutation_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_rapid_transmutation"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_transmogrification_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_transmogrification"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_alchemist = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_spectrum_spectacles_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_spectrum_spectacles"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_auric_gloves_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_auric_gloves"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_alchemist = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_brittle_gas_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_brittle_gas"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_alchemy_powders_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_alchemy_powders"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_dispersion").Or(isCardName("alchemist_refraction"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_wide_diffusion_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_wide_diffusion"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_prismatic_dispersion_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_prismatic_dispersion"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_perfect_refraction_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_perfect_refraction"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("alchemist_rapid_transmutation").Or(isCardName("alchemist_transmogrification"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_instant_transmutation_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_instant_transmutation"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_rapid_transmogrification_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_rapid_transmogrification"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_major_transmogrification_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/alchemist/alchemist_major_transmogrification"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_alchemist = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("alchemist_philosophers_stone")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(alchemist_swirling_philosophers_stone_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_swirling_philosophers_stone"),
+ },
+
+ {
+ effect = createCardEffect(alchemist_polished_philosophers_stone_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/alchemist/alchemist_polished_philosophers_stone"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
return createDef(
{
- id = "ST_TG_choose_alchemist",
+ id = "choose_alchemist",
name = "Dual-class Alchemist",
types = {itemType},
cardTypeLabel = "Item",
@@ -1012,12 +3795,22 @@ function ST_TG_choose_alchemist_carddef()
id = "choose_alchemist",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualalchemist", expiry = { Never } }))
- .seq(createCardEffect(dualalchemistBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ effect = sacrificeTarget().apply(selectSource())
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
-
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_alchemist, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_alchemist, nullEffect())),
}
),
},
@@ -1025,7 +3818,7 @@ function ST_TG_choose_alchemist_carddef()
{
name = "Dual-class Alchemist",
art = "avatars/alchemist_02",
- frame = "frames/generic_CardFrame",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
@@ -1040,16 +3833,272 @@ Philosopher's Stone." fontsize="20"/>
]],
- }
- )
- }
- )
-end
+ }
+ )
+ }
+ )
+end
+
+function choose_necromancer_carddef()
+
+ local ef1_necromancer = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("necromancer_soul_prism").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(necromancer_rod_of_unlife_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(necromancer_reanimate_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_reanimate")))
+ .seq(createCardEffect(necromancer_final_return_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_necromancer = createCardEffect(necromancer_bone_raising_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_final_return")))
+ .seq(createCardEffect(necromancer_raise_dead_carddef(), loc(currentPid, skillsPloc)))
+
+
+
+ --Level 9
+ local ef9_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_bone_raising")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_fresh_harvest_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_fresh_harvest"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_raise_skeleton_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_raise_skeleton"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+--Level 11 -- Lvl 7 card add
+ local ef11_necromancer = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_anguish_blade_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_anguish_blade"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_puzzle_box_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_puzzle_box"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 13 -- Ab 4
+ local ef13_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_dead")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_animate_dead_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_animate_dead"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_corpse_raising_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_corpse_raising"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+ )
+
+ --Level 15 -- Armour (9)
+ local ef15_necromancer = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_rotting_crown_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_rotting_crown"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_plague_belt_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_plague_belt"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_necromancer = pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_voidstone_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_voidstone"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_onyx_skull_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_onyx_skull"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ })
+
+
+ --Level 19 -- Skill 5
+ local ef19_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_fresh_harvest").Or(isCardName("necromancer_raise_skeleton"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_skull_swarm_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_skull_swarm"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_corpse_horde_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_corpse_horde"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_strong_bones_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_strong_bones"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 21 -- Ab 5
+ local ef21_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_animate_dead").Or(isCardName("necromancer_corpse_raising"))))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_empty_graves_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_empty_graves"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_grave_robbery_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_grave_robbery"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_reawaken_carddef(), loc(currentPid, skillsPloc)),
+ layout = loadLayoutData("layouts/skills_abilities/necromancer/necromancer_reawaken"),
+ }
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Level 23
+ local ef23_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("necromancer_rod_of_unlife")))
+ .seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(necromancer_rod_of_spite_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_rod_of_spite"),
+ },
+
+ {
+ effect = createCardEffect(necromancer_rod_of_reanimation_carddef(), loc(currentPid, asidePloc)),
+ layout = loadLayoutData("layouts/necromancer/necromancer_rod_of_reanimation"),
+ }
+
+ },
+
+ upperTitle = "Choose your upgrade",
+ lowerTitle = "",
+
+ }))
+
+
+ --Last
+ local efShuffle =
+ pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc)))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice.",
+ lowerTitle = ""
+ })
+ --
+
+
-function ST_TG_choose_necromancer_carddef()
return createDef(
{
- id = "ST_TG_choose_necromancer",
+ id = "choose_necromancer",
name = "Dual-class Necromancer",
types = {itemType},
cardTypeLabel = "Item",
@@ -1061,12 +4110,22 @@ function ST_TG_choose_necromancer_carddef()
id = "choose_necromancer",
trigger = onPlayTrigger,
playAllType = noPlayPlayType,
- effect = addSlotToPlayerEffect(currentPid, createPlayerSlot({ key = "dualnecromancer", expiry = { Never } }))
- .seq(createCardEffect(dualnecromancerBuffDef(), loc(currentPid, buffsPloc)))
- .seq(sacrificeTarget().apply(selectSource()))
+ effect = sacrificeTarget().apply(selectSource())
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
- .seq(addEffect(endTurnEffect())),
-
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_necromancer, nullEffect()))
+-- pushChoiceEffects run in reverse order
+.seq(efShuffle)
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_necromancer, nullEffect())),
}
),
},
@@ -1074,7 +4133,7 @@ function ST_TG_choose_necromancer_carddef()
{
name = "Dual-class Necromancer",
art = "avatars/necromancer_01",
- frame = "frames/generic_CardFrame",
+ frame = "frames/generic_cardframe",
cost = 0,
xmlText=[[
@@ -1094,46 +4153,43 @@ Add Rod of Unlife." fontsize="20"/>
)
end
+--Random choices
+function random_choose_wizard_carddef()
---=======================================================================================================
---Buffs
-function dualWizardBuffDef()
- --
- local name = "Dual Wizard"
- local ef1_Wizard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ local ef1_wizard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("wizard_spell_components").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(wizard_cat_familiar_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(wizard_flame_burst_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
--Level 3
- local ef3_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_flame_burst")))
+ local ef3_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_flame_burst")))
.seq(createCardEffect(wizard_fire_blast_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
--Level 5
- local ef5_Wizard = createCardEffect(wizard_channel_carddef(), loc(currentPid, skillsPloc))
+ local ef5_wizard = createCardEffect(wizard_channel_carddef(), loc(currentPid, skillsPloc))
.seq(sacrificeSelf())
--Level 7
- local ef7_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fire_blast")))
+ local ef7_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fire_blast")))
.seq(createCardEffect(wizard_fireball_carddef(), loc(currentPid, skillsPloc)))
--Level 9
- local ef9_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_channel")))
+ local ef9_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_channel")))
.seq(randomEffect({
valueItem(1, createCardEffect(wizard_calm_channel_carddef(), loc(currentPid, skillsPloc))),
valueItem(1, createCardEffect(wizard_deep_channel_carddef(), loc(currentPid, skillsPloc)))
}))
--Level 11 -- Lvl 7 card add
- local ef11_Wizard = randomEffect({
+ local ef11_wizard = randomEffect({
valueItem(1, createCardEffect(wizard_arcane_wand_carddef(), loc(currentPid, asidePloc))),
valueItem(1, createCardEffect(wizard_silverskull_amulet_carddef(), loc(currentPid, asidePloc)))
})
.seq(sacrificeSelf())
--Level 13 -- Ab 4
- local ef13_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fireball")))
+ local ef13_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_fireball")))
.seq(randomEffect({
valueItem(1, createCardEffect(wizard_rolling_fireball_carddef(), loc(currentPid, skillsPloc))),
valueItem(1, createCardEffect(wizard_scorching_fireball_carddef(), loc(currentPid, skillsPloc)))
@@ -1141,21 +4197,21 @@ function dualWizardBuffDef()
.seq(sacrificeSelf())
--Level 15 -- Armour (9)
- local ef15_Wizard = randomEffect({
+ local ef15_wizard = randomEffect({
valueItem(1, createCardEffect(wizard_runic_robes_carddef(), loc(currentPid, skillsPloc))),
valueItem(1, createCardEffect(wizard_spellcaster_gloves_carddef(), loc(currentPid, skillsPloc)))
})
.seq(sacrificeSelf())
--Level 17 -- Lvl 11 card add
- local ef17_Wizard = randomEffect({
+ local ef17_wizard = randomEffect({
valueItem(1, createCardEffect(wizard_magic_mirror_carddef(), loc(currentPid, asidePloc))),
valueItem(1, createCardEffect(wizard_alchemist_s_stone_carddef(), loc(currentPid, asidePloc)))
})
.seq(sacrificeSelf())
--Level 19 -- Skill 5
- local ef19_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_calm_channel").Or(isCardName("wizard_deep_channel"))))
+ local ef19_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_calm_channel").Or(isCardName("wizard_deep_channel"))))
.seq(randomEffect({
valueItem(1, createCardEffect(wizard_soul_channel_carddef(), loc(currentPid, skillsPloc))),
valueItem(1, createCardEffect(wizard_serene_channel_carddef(), loc(currentPid, skillsPloc))),
@@ -1164,7 +4220,7 @@ function dualWizardBuffDef()
.seq(sacrificeSelf())
--Level 21 -- Ab 5
- local ef21_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_rolling_fireball").Or(isCardName("wizard_scorching_fireball"))))
+ local ef21_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("wizard_rolling_fireball").Or(isCardName("wizard_scorching_fireball"))))
.seq(randomEffect({
valueItem(1, createCardEffect(wizard_barreling_fireball_carddef(), loc(currentPid, skillsPloc))),
valueItem(1, createCardEffect(wizard_searing_fireball_carddef(), loc(currentPid, skillsPloc))),
@@ -1173,7 +4229,7 @@ function dualWizardBuffDef()
.seq(sacrificeSelf())
--Level 23
- local ef23_Wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
+ local ef23_wizard = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("wizard_cat_familiar")))
.seq(randomEffect({
valueItem(1, createCardEffect(wizard_wizened_familiar_carddef(), loc(currentPid, asidePloc))),
valueItem(1, createCardEffect(wizard_content_familiar_carddef(), loc(currentPid, asidePloc)))
@@ -1182,101 +4238,72 @@ function dualWizardBuffDef()
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_Wizard
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_Wizard
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_Wizard
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_Wizard
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_Wizard
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_Wizard
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_Wizard
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_Wizard
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_Wizard
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_Wizard
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_Wizard
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_Wizard
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualWizard"),
- effect = efShuffle
+ --
+
+ return createDef(
+ {
+ id = "random_choose_wizard",
+ name = "Dual-class Wizard",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_wizard",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_wizard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_wizard, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Wizard",
+ art = "avatars/wizard_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualclericBuffDef()
- --
- local name = "Dual Cleric"
+function random_choose_cleric_carddef()
+
local ef1_cleric = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("cleric_spiked_mace").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(cleric_follower_a_carddef(), loc(currentPid, asidePloc)))
@@ -1359,464 +4386,368 @@ function dualclericBuffDef()
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_cleric
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_cleric
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_cleric
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_cleric
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_cleric
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_cleric
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_cleric
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_cleric
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_cleric
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_cleric
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_cleric
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_cleric
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualcleric"),
- effect = efShuffle
+ --
+
+ return createDef(
+ {
+ id = "random_choose_cleric",
+ name = "Dual-class Cleric",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_cleric",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_cleric, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_cleric, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Cleric",
+ art = "avatars/cleric_02",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualThiefBuffDef()
- --
- local name = "Dual thief"
- local ef1_thief = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
- .seq(transformTarget("ruby").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
- .seq(createCardEffect(thief_throwing_knife_carddef(), loc(currentPid, asidePloc)))
- --Extra gold-transform for thief/ranger/bard?
- .seq(transformTarget("thief_throwing_knife").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
- .seq(createCardEffect(thief_pilfer_carddef(), loc(currentPid, skillsPloc)))
+function random_choose_fighter_carddef()
+
+ local ef1_fighter = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ --no gold substitute for fighter
+ .seq(createCardEffect(fighter_longsword_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(fighter_precision_blow_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
--Level 3
- local ef3_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pilfer")))
- .seq(createCardEffect(thief_theft_carddef(), loc(currentPid, skillsPloc)))
+ local ef3_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_precision_blow")))
+ .seq(createCardEffect(fighter_powerful_blow_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
--Level 5
- local ef5_thief = createCardEffect(thief_pickpocket_carddef(), loc(currentPid, skillsPloc))
+ local ef5_fighter = createCardEffect(fighter_shoulder_bash_carddef(), loc(currentPid, skillsPloc))
.seq(sacrificeSelf())
--Level 7
- local ef7_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_theft")))
- .seq(createCardEffect(thief_heist_carddef(), loc(currentPid, skillsPloc)))
+ local ef7_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_powerful_blow")))
+ .seq(createCardEffect(fighter_crushing_blow_carddef(), loc(currentPid, skillsPloc)))
--Level 9
- local ef9_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pickpocket")))
+ local ef9_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_shoulder_bash")))
.seq(randomEffect({
- valueItem(1, createCardEffect(thief_sleight_of_hand_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_swipe_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(fighter_knock_back_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_shoulder_smash_carddef(), loc(currentPid, skillsPloc)))
}))
--Level 11 -- Lvl 7 card add
- local ef11_thief = randomEffect({
- valueItem(1, createCardEffect(thief_knife_belt_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(thief_sacrificial_dagger_carddef(), loc(currentPid, asidePloc)))
+ local ef11_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_double_bladed_axe_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_jagged_spear_carddef(), loc(currentPid, asidePloc)))
})
.seq(sacrificeSelf())
--Level 13 -- Ab 4
- local ef13_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_heist")))
+ local ef13_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_crushing_blow")))
.seq(randomEffect({
- valueItem(1, createCardEffect(thief_skillful_heist_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_timely_heist_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(fighter_smashing_blow_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_sweeping_blow_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 15 -- Armour (9)
- local ef15_thief = randomEffect({
- valueItem(1, createCardEffect(thief_shadow_mask_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_silent_boots_carddef(), loc(currentPid, skillsPloc)))
+ local ef15_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_helm_of_fury_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_spiked_pauldrons_carddef(), loc(currentPid, skillsPloc)))
})
.seq(sacrificeSelf())
--Level 17 -- Lvl 11 card add
- local ef17_thief = randomEffect({
- valueItem(1, createCardEffect(thief_blackjack_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(thief_jewelers_loupe_carddef(), loc(currentPid, asidePloc)))
+ local ef17_fighter = randomEffect({
+ valueItem(1, createCardEffect(fighter_sharpening_stone_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_rallying_flag_carddef(), loc(currentPid, asidePloc)))
})
.seq(sacrificeSelf())
--Level 19 -- Skill 5
- local ef19_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_sleight_of_hand").Or(isCardName("thief_swipe"))))
+ local ef19_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_knock_back").Or(isCardName("fighter_shoulder_smash"))))
.seq(randomEffect({
- valueItem(1, createCardEffect(thief_distracted_exchange_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_misdirection_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_lift_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(fighter_knock_down_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_group_tackle_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_shoulder_crush_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 21 -- Ab 5
- local ef21_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_skillful_heist").Or(isCardName("thief_timely_heist"))))
+ local ef21_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_smashing_blow").Or(isCardName("fighter_sweeping_blow"))))
.seq(randomEffect({
- valueItem(1, createCardEffect(thief_masterful_heist_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_practiced_heist_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(thief_smooth_heist_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(fighter_devastating_blow_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_mighty_blow_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(fighter_whirling_blow_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 23
- local ef23_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("ruby")).take(1))
+ local ef23_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("fighter_longsword")))
.seq(randomEffect({
- valueItem(1, createCardEffect(thief_brilliant_ruby_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(thief_sharpened_ruby_carddef(), loc(currentPid, asidePloc)))
+ valueItem(1, createCardEffect(fighter_flaming_longsword_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(fighter_lightning_longsword_carddef(), loc(currentPid, asidePloc)))
}))
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_thief
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_thief
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_thief
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_thief
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_thief
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_thief
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_thief
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_thief
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_thief
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_thief
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_thief
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_thief
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualthief"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_fighter",
+ name = "Dual-class Fighter",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_fighter",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_fighter, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_fighter, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Fighter",
+ art = "avatars/fighter_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualFighterBuffDef()
- --
- local name = "Dual Fighter"
- local ef1_fighter = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
- --no gold substitute for fighter
- .seq(createCardEffect(fighter_longsword_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(fighter_precision_blow_carddef(), loc(currentPid, skillsPloc)))
+function random_choose_thief_carddef()
+
+ local ef1_thief = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("ruby").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(currentPid, asidePloc)))
+ --Extra gold-transform for thief/ranger/bard?
+ .seq(createCardEffect(thief_throwing_knife_carddef(), loc(currentPid, asidePloc))).seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(thief_pilfer_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
--Level 3
- local ef3_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_precision_blow")))
- .seq(createCardEffect(fighter_powerful_blow_carddef(), loc(currentPid, skillsPloc)))
+ local ef3_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pilfer")))
+ .seq(createCardEffect(thief_theft_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
--Level 5
- local ef5_fighter = createCardEffect(fighter_shoulder_bash_carddef(), loc(currentPid, skillsPloc))
+ local ef5_thief = createCardEffect(thief_pickpocket_carddef(), loc(currentPid, skillsPloc))
.seq(sacrificeSelf())
--Level 7
- local ef7_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_powerful_blow")))
- .seq(createCardEffect(fighter_crushing_blow_carddef(), loc(currentPid, skillsPloc)))
+ local ef7_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_theft")))
+ .seq(createCardEffect(thief_heist_carddef(), loc(currentPid, skillsPloc)))
--Level 9
- local ef9_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_shoulder_bash")))
+ local ef9_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_pickpocket")))
.seq(randomEffect({
- valueItem(1, createCardEffect(fighter_knock_back_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_shoulder_smash_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(thief_sleight_of_hand_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_swipe_carddef(), loc(currentPid, skillsPloc)))
}))
--Level 11 -- Lvl 7 card add
- local ef11_fighter = randomEffect({
- valueItem(1, createCardEffect(fighter_double_bladed_axe_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(fighter_jagged_spear_carddef(), loc(currentPid, asidePloc)))
+ local ef11_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_knife_belt_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_sacrificial_dagger_carddef(), loc(currentPid, asidePloc)))
})
.seq(sacrificeSelf())
--Level 13 -- Ab 4
- local ef13_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_crushing_blow")))
+ local ef13_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_heist")))
.seq(randomEffect({
- valueItem(1, createCardEffect(fighter_smashing_blow_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_sweeping_blow_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(thief_skillful_heist_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_timely_heist_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 15 -- Armour (9)
- local ef15_fighter = randomEffect({
- valueItem(1, createCardEffect(fighter_helm_of_fury_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_spiked_pauldrons_carddef(), loc(currentPid, skillsPloc)))
+ local ef15_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_shadow_mask_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_silent_boots_carddef(), loc(currentPid, skillsPloc)))
})
.seq(sacrificeSelf())
--Level 17 -- Lvl 11 card add
- local ef17_fighter = randomEffect({
- valueItem(1, createCardEffect(fighter_sharpening_stone_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(fighter_rallying_flag_carddef(), loc(currentPid, asidePloc)))
+ local ef17_thief = randomEffect({
+ valueItem(1, createCardEffect(thief_blackjack_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_jewelers_loupe_carddef(), loc(currentPid, asidePloc)))
})
.seq(sacrificeSelf())
--Level 19 -- Skill 5
- local ef19_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_knock_back").Or(isCardName("fighter_shoulder_smash"))))
+ local ef19_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_sleight_of_hand").Or(isCardName("thief_swipe"))))
.seq(randomEffect({
- valueItem(1, createCardEffect(fighter_knock_down_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_group_tackle_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_shoulder_crush_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(thief_distracted_exchange_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_misdirection_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_lift_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 21 -- Ab 5
- local ef21_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("fighter_smashing_blow").Or(isCardName("fighter_sweeping_blow"))))
+ local ef21_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("thief_skillful_heist").Or(isCardName("thief_timely_heist"))))
.seq(randomEffect({
- valueItem(1, createCardEffect(fighter_devastating_blow_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_mighty_blow_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(fighter_whirling_blow_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(thief_masterful_heist_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_practiced_heist_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(thief_smooth_heist_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 23
- local ef23_fighter = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("fighter_longsword")))
+ local ef23_thief = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("ruby")).take(1))
.seq(randomEffect({
- valueItem(1, createCardEffect(fighter_flaming_longsword_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(fighter_lightning_longsword_carddef(), loc(currentPid, asidePloc)))
+ valueItem(1, createCardEffect(thief_brilliant_ruby_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(thief_sharpened_ruby_carddef(), loc(currentPid, asidePloc)))
}))
-
--- P1 draws 5 for fighter, even though only 3 for Wiz
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="dual_fighter_class_buff",
- name = "Fighter Dual Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_fighter
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_fighter
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_fighter
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_fighter
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_fighter
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_fighter
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_fighter
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_fighter
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_fighter
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_fighter
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_fighter
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_fighter
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualfighter"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_thief",
+ name = "Dual-class Thief",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_thief",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_thief, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_thief, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Thief",
+ art = "avatars/thief_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualrangerBuffDef()
- --
- local name = "Dual Ranger"
+function random_choose_ranger_carddef()
+
local ef1_ranger = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("ranger_horn_of_calling").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(ranger_black_arrow_carddef(), loc(currentPid, asidePloc)))
--Extra gold-transform for thief/ranger/bard?
- .seq(transformTarget("ranger_hunting_bow").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(ranger_hunting_bow_carddef(), loc(currentPid, asidePloc))).seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(ranger_steady_shot_carddef(), loc(currentPid, skillsPloc)))
.seq(sacrificeSelf())
@@ -1896,101 +4827,72 @@ function dualrangerBuffDef()
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_ranger
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_ranger
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_ranger
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_ranger
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_ranger
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_ranger
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_ranger
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_ranger
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_ranger
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_ranger
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_ranger
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_ranger
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualranger"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_ranger",
+ name = "Dual-class ranger",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_ranger",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ cost = noCost,
+ activations = singleActivations,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_ranger, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_ranger, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Ranger",
+ art = "avatars/ranger_02",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualbardBuffDef()
- --
- local name = "Dual bard"
+function random_choose_bard_carddef()
+
local ef1_bard = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("bard_harp").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(randomEffect({
@@ -2077,101 +4979,70 @@ function dualbardBuffDef()
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_bard
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_bard
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_bard
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_bard
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_bard
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_bard
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_bard
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_bard
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_bard
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_bard
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_bard
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_bard
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbard"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_bard",
+ name = "Dual-class Bard",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_bard",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_bard, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_bard, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Bard",
+ art = "avatars/bard_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualdruidBuffDef()
- --
- local name = "Dual Druid"
+function random_choose_druid_carddef()
+
local ef1_druid = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("druid_squirrel").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(druid_fox_carddef(), loc(currentPid, asidePloc)))
@@ -2254,101 +5125,69 @@ function dualdruidBuffDef()
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_druid
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_druid
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_druid
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_druid
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_druid
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_druid
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_druid
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_druid
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_druid
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_druid
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_druid
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_druid
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualdruid"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_druid",
+ name = "Dual-class Druid",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_druid",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_druid, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_druid, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class druid",
+ art = "avatars/druid_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualbarbarianBuffDef()
- --
- local name = "Dual barbarian"
+function random_choose_barbarian_carddef()
+
local ef1_barbarian = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("barbarian_plunder").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(barbarian_headbutt_carddef(), loc(currentPid, asidePloc)))
@@ -2431,103 +5270,72 @@ function dualbarbarianBuffDef()
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_barbarian
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_barbarian
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_barbarian
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_barbarian
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_barbarian
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_barbarian
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_barbarian
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_barbarian
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_barbarian
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_barbarian
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_barbarian
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_barbarian
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualbarbarian"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_barbarian",
+ name = "Dual-class Barbarian",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_barbarian",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_barbarian, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_barbarian, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class barbarian",
+ art = "avatars/barbarian_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualmonkBuffDef()
- --
- local name = "Dual Monk"
+function random_choose_monk_carddef()
+
local ef1_monk = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
- .seq(transformTarget("monk_spring_blossom").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(2)))
+ .seq(transformTarget("monk_spring_blossom").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(transformTarget("monk_spring_blossom").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(randomEffect({
valueItem(1, createCardEffect(monk_cobra_fang_carddef(), loc(currentPid, asidePloc))),
valueItem(1, createCardEffect(monk_serene_wind_carddef(), loc(currentPid, asidePloc)))
@@ -2570,139 +5378,266 @@ function dualmonkBuffDef()
.seq(sacrificeSelf())
--Level 15 -- Armour (9)
- local ef15_monk = randomEffect({
- valueItem(1, createCardEffect(monk_wraps_of_strength_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(monk_slippers_of_the_crane_carddef(), loc(currentPid, skillsPloc)))
+ local ef15_monk = randomEffect({
+ valueItem(1, createCardEffect(monk_wraps_of_strength_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_slippers_of_the_crane_carddef(), loc(currentPid, skillsPloc)))
+ })
+ .seq(sacrificeSelf())
+
+ --Level 17 -- Lvl 11 card add
+ local ef17_monk = createCardEffect(monk_tonfas_of_balance_carddef(), loc(currentPid, asidePloc))
+ .seq(sacrificeSelf())
+
+ --Level 19 -- Skill 5
+ local ef19_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_flowing_technique").Or(isCardName("monk_practiced_technique"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_fluid_technique_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_masterful_technique_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_precise_technique_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 21 -- Ab 5
+ local ef21_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_jing").Or(isCardName("monk_focused_strike"))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_yin_yang_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_qigong_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(monk_dim_mak_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 23
+ local ef23_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("monk_spring_blossom")).take(1))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(monk_resplendent_blossom_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(monk_radiant_blossom_carddef(), loc(currentPid, asidePloc)))
+ }))
+
+ --Last
+ local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeSelf())
+
+ local dualmonktaoresetbuff = createGlobalBuff({
+ id="dualmonktaoresetbuff",
+ name = "Dual Monk Tao Reset",
+ abilities = {
+ createAbility({
+ id="dualmonktaoresetbuff",
+ trigger = endOfTurnTrigger,
+ effect = gainCustomValueEffect(getCustomValue(currentPid).negate()),
+
+ })
+ }
+ })
+
+
+ return createDef(
+ {
+ id = "random_choose_monk",
+ name = "Dual-class Monk",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_monk",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_monk, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_monk, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Monk",
+ art = "avatars/monk_02",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function random_choose_necromancer_carddef()
+
+ local ef1_necromancer = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
+ .seq(transformTarget("necromancer_soul_prism").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
+ .seq(createCardEffect(necromancer_rod_of_unlife_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(necromancer_reanimate_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 3 -- Ab 2
+ local ef3_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_reanimate")))
+ .seq(createCardEffect(necromancer_final_return_carddef(), loc(currentPid, skillsPloc)))
+ .seq(sacrificeSelf())
+
+ --Level 5 -- Skill 3
+ local ef5_necromancer = createCardEffect(necromancer_bone_raising_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ --Level 7 -- Ab 3
+ local ef7_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_final_return")))
+ .seq(createCardEffect(necromancer_raise_dead_carddef(), loc(currentPid, skillsPloc)))
+
+ --Level 9 -- Skill 4
+ local ef9_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_bone_raising")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_raise_skeleton_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_fresh_harvest_carddef(), loc(currentPid, skillsPloc)))
+ }))
+
+--Level 11 -- Lvl 7 card add
+ local ef11_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_puzzle_box_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_anguish_blade_carddef(), loc(currentPid, asidePloc)))
+ })
+ .seq(sacrificeSelf())
+ --Level 13 -- Ab 4
+ local ef13_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_dead")))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(necromancer_corpse_raising_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_animate_dead_carddef(), loc(currentPid, skillsPloc)))
+ }))
+ .seq(sacrificeSelf())
+
+ --Level 15 -- Armour (9)
+ local ef15_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_rotting_crown_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_plague_belt_carddef(), loc(currentPid, skillsPloc)))
})
.seq(sacrificeSelf())
--Level 17 -- Lvl 11 card add
- local ef17_monk = createCardEffect(monk_tonfas_of_balance_carddef(), loc(currentPid, asidePloc))
+ local ef17_necromancer = randomEffect({
+ valueItem(1, createCardEffect(necromancer_voidstone_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_onyx_skull_carddef(), loc(currentPid, skillsPloc)))
+ })
.seq(sacrificeSelf())
--Level 19 -- Skill 5
- local ef19_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_flowing_technique").Or(isCardName("monk_practiced_technique"))))
+ local ef19_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_skeleton").Or(isCardName("necromancer_fresh_harvest"))))
.seq(randomEffect({
- valueItem(1, createCardEffect(monk_fluid_technique_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(monk_masterful_technique_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(monk_precise_technique_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(necromancer_strong_bones_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_skull_swarm_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_corpse_horde_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 21 -- Ab 5
- local ef21_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("monk_jing").Or(isCardName("monk_focused_strike"))))
+ local ef21_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_corpse_raising").Or(isCardName("necromancer_animate_dead"))))
.seq(randomEffect({
- valueItem(1, createCardEffect(monk_yin_yang_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(monk_qigong_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(monk_dim_mak_carddef(), loc(currentPid, skillsPloc)))
+ valueItem(1, createCardEffect(necromancer_empty_graves_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_grave_robbery_carddef(), loc(currentPid, skillsPloc))),
+ valueItem(1, createCardEffect(necromancer_reawaken_carddef(), loc(currentPid, skillsPloc)))
}))
.seq(sacrificeSelf())
--Level 23
- local ef23_monk = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("monk_spring_blossom")).take(1))
+ local ef23_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("necromancer_rod_of_unlife")))
.seq(randomEffect({
- valueItem(1, createCardEffect(monk_resplendent_blossom_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(monk_radiant_blossom_carddef(), loc(currentPid, asidePloc)))
+ valueItem(1, createCardEffect(necromancer_rod_of_spite_carddef(), loc(currentPid, asidePloc))),
+ valueItem(1, createCardEffect(necromancer_rod_of_reanimation_carddef(), loc(currentPid, asidePloc)))
}))
--Last
local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
.seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_monk
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_monk
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_monk
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_monk
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_monk
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_monk
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_monk
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_monk
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_monk
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_monk
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_monk
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_monk
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualmonk"),
- effect = efShuffle
+
+ return createDef(
+ {
+ id = "random_choose_necromancer",
+ name = "Dual-class Necromancer",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_necromancer",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_necromancer, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_necromancer, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Necromancer",
+ art = "avatars/necromancer_01",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
-function dualalchemistBuffDef()
- --
- local name = "Dual Alchemist"
+function random_choose_alchemist_carddef()
+
local ef1_alchemist = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
.seq(transformTarget("alchemist_philosophers_stone").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
.seq(createCardEffect(alchemist_philosophers_stone_carddef(), loc(currentPid, asidePloc)))
@@ -2787,269 +5722,63 @@ function dualalchemistBuffDef()
.seq(shuffleEffect(currentDeckLoc))
.seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
.seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_alchemist
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_alchemist
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_alchemist
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_alchemist
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_alchemist
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_alchemist
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_alchemist
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_alchemist
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_alchemist
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_alchemist
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_alchemist
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_alchemist
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualalchemist"),
- effect = efShuffle
-
-
- })
- }
- })
-end
-
-function dualnecromancerBuffDef()
- --
- local name = "Dual necromancer"
- local ef1_necromancer = moveTarget(asidePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))))
- .seq(transformTarget("necromancer_soul_prism").apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("gold")).take(1)))
- .seq(createCardEffect(necromancer_rod_of_unlife_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(necromancer_reanimate_carddef(), loc(currentPid, skillsPloc)))
- .seq(sacrificeSelf())
-
- --Level 3 -- Ab 2
- local ef3_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_reanimate")))
- .seq(createCardEffect(necromancer_final_return_carddef(), loc(currentPid, skillsPloc)))
- .seq(sacrificeSelf())
-
- --Level 5 -- Skill 3
- local ef5_necromancer = createCardEffect(necromancer_bone_raising_carddef(), loc(currentPid, skillsPloc))
- .seq(sacrificeSelf())
-
- --Level 7 -- Ab 3
- local ef7_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_final_return")))
- .seq(createCardEffect(necromancer_raise_dead_carddef(), loc(currentPid, skillsPloc)))
-
- --Level 9 -- Skill 4
- local ef9_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_bone_raising")))
- .seq(randomEffect({
- valueItem(1, createCardEffect(necromancer_raise_skeleton_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_fresh_harvest_carddef(), loc(currentPid, skillsPloc)))
- }))
-
---Level 11 -- Lvl 7 card add
- local ef11_necromancer = randomEffect({
- valueItem(1, createCardEffect(necromancer_puzzle_box_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(necromancer_anguish_blade_carddef(), loc(currentPid, asidePloc)))
- })
- .seq(sacrificeSelf())
- --Level 13 -- Ab 4
- local ef13_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_dead")))
- .seq(randomEffect({
- valueItem(1, createCardEffect(necromancer_corpse_raising_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_animate_dead_carddef(), loc(currentPid, skillsPloc)))
- }))
- .seq(sacrificeSelf())
-
- --Level 15 -- Armour (9)
- local ef15_necromancer = randomEffect({
- valueItem(1, createCardEffect(necromancer_rotting_crown_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_plague_belt_carddef(), loc(currentPid, skillsPloc)))
- })
- .seq(sacrificeSelf())
-
- --Level 17 -- Lvl 11 card add
- local ef17_necromancer = randomEffect({
- valueItem(1, createCardEffect(necromancer_voidstone_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_onyx_skull_carddef(), loc(currentPid, skillsPloc)))
- })
- .seq(sacrificeSelf())
-
- --Level 19 -- Skill 5
- local ef19_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_raise_skeleton").Or(isCardName("necromancer_fresh_harvest"))))
- .seq(randomEffect({
- valueItem(1, createCardEffect(necromancer_strong_bones_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_skull_swarm_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_corpse_horde_carddef(), loc(currentPid, skillsPloc)))
- }))
- .seq(sacrificeSelf())
-
- --Level 21 -- Ab 5
- local ef21_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("necromancer_corpse_raising").Or(isCardName("necromancer_animate_dead"))))
- .seq(randomEffect({
- valueItem(1, createCardEffect(necromancer_empty_graves_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_grave_robbery_carddef(), loc(currentPid, skillsPloc))),
- valueItem(1, createCardEffect(necromancer_reawaken_carddef(), loc(currentPid, skillsPloc)))
- }))
- .seq(sacrificeSelf())
-
- --Level 23
- local ef23_necromancer = sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc)).where(isCardName("necromancer_rod_of_unlife")))
- .seq(randomEffect({
- valueItem(1, createCardEffect(necromancer_rod_of_spite_carddef(), loc(currentPid, asidePloc))),
- valueItem(1, createCardEffect(necromancer_rod_of_reanimation_carddef(), loc(currentPid, asidePloc)))
- }))
+ --
- --Last
- local efShuffle = moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc)))
- .seq(shuffleEffect(currentDeckLoc))
- .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(2), drawCardsEffect(3), drawCardsEffect(5)))
- .seq(sacrificeSelf())
- --
- return createGlobalBuff({
- id="custom_class_buff",
- name = "Custom Class",
- abilities = {
- createAbility({
- id="level_1_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(1)),
- effect = ef1_necromancer
- }),
- createAbility({
- id="level_3_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(3)),
- effect = ef3_necromancer
- }),
- createAbility({
- id="level_5_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(5)),
- effect = ef5_necromancer
- }),
- createAbility({
- id="level_7_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(7)),
- effect = ef7_necromancer
- }),
- createAbility({
- id="level_9_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(9)),
- effect = ef9_necromancer
- }),
- createAbility({
- id="level_11_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(11)),
- effect = ef11_necromancer
- }),
- createAbility({
- id="level_13_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(13)),
- effect = ef13_necromancer
- }),
- createAbility({
- id="level_15_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(15)),
- effect = ef15_necromancer
- }),
- createAbility({
- id="level_17_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(17)),
- effect = ef17_necromancer
- }),
- createAbility({
- id="level_19_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(19)),
- effect = ef19_necromancer
- }),
- createAbility({
- id="level_21_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(21)),
- effect = ef21_necromancer
- }),
- createAbility({
- id="level_23_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer").And(getHeroLevel(currentPid).gte(23)),
- effect = ef23_necromancer
- }),
-
- createAbility({
- id="shuffle_effect",
- trigger = startOfTurnTrigger,
- check = hasPlayerSlot(currentPid, "dualnecromancer"),
- effect = efShuffle
+ return createDef(
+ {
+ id = "random_choose_alchemist",
+ name = "Dual-class Alchemist - Random",
+ types = {itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "random_choose_alchemist",
+ trigger = onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectSource())
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(ifElseEffect(getHeroLevel(currentPid).gte(1), ef1_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(3), ef3_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(5), ef5_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(7), ef7_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(9), ef9_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(11), ef11_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(13), ef13_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(15), ef15_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(17), ef17_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(19), ef19_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(21), ef21_alchemist, nullEffect()))
+.seq(ifElseEffect(getHeroLevel(currentPid).gte(23), ef23_alchemist, nullEffect()))
+.seq(efShuffle)
+.seq(addEffect(endTurnEffect())),
-
- })
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Dual-class Alchemist",
+ art = "avatars/alchemist_02",
+ frame = "frames/generic_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+ ]],
+
+ }
+ )
}
- })
+ )
end
diff --git a/Aarkenell/Lich - Co-op.lua b/Aarkenell/Lich - Co-op.lua
new file mode 100644
index 0000000..e99e60f
--- /dev/null
+++ b/Aarkenell/Lich - Co-op.lua
@@ -0,0 +1,2236 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+require 'coopai'
+require 'timeoutai'
+
+isCoop = true
+
+
+
+
+local function lich_extra_souljar_buff()
+
+local ef_new_jar = showCardEffect(layoutCard({
+ name = "Soul Jar",
+ art = "art/treasures/t_wizard_elixir_blue",
+ frame = "frames/ancestry_frames/smallfolk_ability_cardframe",
+ text = "A new soul is released."
+ }))
+
+
+local ef_DI = ef_new_jar
+
+ .seq(randomEffect({
+ valueItem(0, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_DI")))).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_DI")))).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_DI")))).seq(createCardEffect(lich_SJ_UR_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_DI")))).seq(createCardEffect(lich_SJ_M_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_DI")))).seq(createCardEffect(lich_SJ_V_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_DI")))).seq(createCardEffect(lich_SJ_IW_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+
+ .seq(sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_DI"))))
+
+local ef_HoE = ef_new_jar.seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_HoE")))).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(0, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_HoE")))).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_HoE")))).seq(createCardEffect(lich_SJ_UR_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_HoE")))).seq(createCardEffect(lich_SJ_M_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_HoE")))).seq(createCardEffect(lich_SJ_V_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_HoE")))).seq(createCardEffect(lich_SJ_IW_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+ .seq(sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_HoE"))))
+
+
+local ef_UR = ef_new_jar.seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_UR")))).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_UR")))).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(0, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_UR")))).seq(createCardEffect(lich_SJ_UR_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_UR")))).seq(createCardEffect(lich_SJ_M_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_UR")))).seq(createCardEffect(lich_SJ_V_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_UR")))).seq(createCardEffect(lich_SJ_IW_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+ .seq(sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_UR"))))
+
+local ef_M = ef_new_jar.seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_M")))).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_M")))).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_M")))).seq(createCardEffect(lich_SJ_UR_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(0, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_M")))).seq(createCardEffect(lich_SJ_M_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_M")))).seq(createCardEffect(lich_SJ_V_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_M")))).seq(createCardEffect(lich_SJ_IW_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+ .seq(sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_M"))))
+
+local ef_V = ef_new_jar.seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_V")))).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_V")))).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_V")))).seq(createCardEffect(lich_SJ_UR_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_V")))).seq(createCardEffect(lich_SJ_M_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(0, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_V")))).seq(createCardEffect(lich_SJ_V_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_V")))).seq(createCardEffect(lich_SJ_IW_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+ .seq(sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_V"))))
+
+local ef_IW = ef_new_jar.seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_IW")))).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_IW")))).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_IW")))).seq(createCardEffect(lich_SJ_UR_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_IW")))).seq(createCardEffect(lich_SJ_M_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_IW")))).seq(createCardEffect(lich_SJ_V_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(0, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, skillsPloc)).where(isCardName("SJ_IW")))).seq(createCardEffect(lich_SJ_IW_carddef(), loc(nextOppPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+ .seq(sacrificeTarget().apply(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_IW"))))
+
+ return createGlobalBuff({
+ id = "lich_extra_souljar_buff",
+ name = "Soul Jar",
+ abilities = {
+ createAbility({
+ id = "lich_souljar_buff_ability",
+ trigger = onZeroHealthTrigger,
+ aiPriority = toIntExpression(300),
+ activations = multipleActivations,
+ effect = sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("SJ_DI").Or(isCardName("SJ_HoE")).Or(isCardName("SJ_UR")).Or(isCardName("SJ_M")).Or(isCardName("SJ_V")).Or(isCardName("SJ_IW"))))
+
+ .seq(ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_DI")).count().gte(1), ef_DI,
+ ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_HoE")).count().gte(1), ef_HoE,
+ ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_UR")).count().gte(1), ef_UR,
+ ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_M")).count().gte(1), ef_M,
+ ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_V")).count().gte(1), ef_M,
+ ifElseEffect(selectLoc(loc(ownerPid, skillsPloc)).where(isCardName("SJ_IW")).count().gte(1), ef_M,
+ nullEffect()
+ )
+ )
+ )
+ )
+ )
+))
+
+ .seq(addSlotToPlayerEffect(currentPid, createPlayerSlot({
+ key = undamageablePlayerSlot,
+ expiry = { startOfOwnerTurnExpiry }
+ })))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("lich_extra_souljar_buff"))))
+ .seq(sacrificeSelf()),
+
+ check = getPlayerHealth(controllerPid).lte(0)
+ })
+ }
+ })
+end
+
+local function lich_30_hp_buff()
+
+ return createGlobalBuff({
+ id = "lich_30_hp_buff",
+ name = "Embrace death",
+ abilities = {
+ createAbility({
+ id = "lich_30_hp_buff_ability",
+ trigger = onZeroHealthTrigger,
+ aiPriority = toIntExpression(1),
+ activations = multipleActivations,
+ effect =
+ gainMaxHealthEffect(ownerPid, const(25)).seq(healPlayerEffect(ownerPid, 25))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextOppPid, buffsPloc)).where(isCardName("lich_30_hp_buff"))))
+ .seq(sacrificeSelf())
+
+ })
+ }
+ })
+end
+
+function lichSetupBuffDef()
+
+local ef_low3 = grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "Puny creature debuff").apply(selectLoc(loc(nil, nullPloc)).where(isCardName("lich_zombie_minion").invert()))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Puny creature. I feel weak just looking at you.",
+ waitForClick= constBoolExpression(false)
+ }))
+local ef_low8 = grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "Puny creature debuff").apply(selectLoc(loc(nil, nullPloc)).where(isCardName("lich_zombie_minion").invert()))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="My minions may be weakened, but you're so tiny you won't stop them.",
+ waitForClick= constBoolExpression(false)
+ }))
+ --.seq(sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("lich_major_summoning"))))
+ --.seq(createCardEffect(lich_minor_summoning_carddef(), loc(currentPid, asidePloc)))
+
+
+local ef_12 = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="A worthy foe, at last.",
+ waitForClick= constBoolExpression(false)
+ })
+
+
+local ef_18plus = gainMaxHealthEffect(currentPid, const(20)).seq(healPlayerEffect(currentPid, 20))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Your strength feeds my power!",
+ waitForClick= constBoolExpression(false)
+ }))
+
+
+local ef_20plus = grantHealthTarget(1, { SlotExpireEnum.never }, nullEffect(), "Heroic debuff").apply(selectLoc(loc(nil, nullPloc)))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Mwuhahahaha!",
+ waitForClick= constBoolExpression(false)
+ }))
+
+ local efLichSetup =
+ --grimoire minions
+ createCardEffect(lich_abomination_minion_carddef(), loc(nil, nullPloc))
+ .seq(createCardEffect(lich_banshee_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_ghoul_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_revenant_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_bones_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_fire_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_zombie_minion_carddef(), loc(nil, nullPloc)))
+
+
+ -- First Soul Jar
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(ownerPid, skillsPloc)).seq(createCardEffect(lich_SJ_DI_carddef(), loc(nextAllyPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(35))).seq(healPlayerEffect(ownerPid, 35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(ownerPid, skillsPloc)).seq(createCardEffect(lich_SJ_HoE_carddef(), loc(nextAllyPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(30))).seq(healPlayerEffect(ownerPid, 30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(ownerPid, skillsPloc)).seq(createCardEffect(lich_SJ_UR_carddef(),loc(nextAllyPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(55))).seq(healPlayerEffect(ownerPid, 55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(ownerPid, skillsPloc)).seq(createCardEffect(lich_SJ_M_carddef(),loc(nextAllyPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(45))).seq(healPlayerEffect(ownerPid, 45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(ownerPid, skillsPloc)).seq(createCardEffect(lich_SJ_V_carddef(),loc(nextAllyPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(50))).seq(healPlayerEffect(ownerPid, 50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(ownerPid, skillsPloc)).seq(createCardEffect(lich_SJ_IW_carddef(),loc(nextAllyPid, skillsPloc))).seq(gainMaxHealthEffect(ownerPid, const(40))).seq(healPlayerEffect(ownerPid, 40))),
+ }))
+
+ -- levels 1-3
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(3),
+ ef_low3, nullEffect()))
+
+ -- levels 1-8
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(8),
+ ef_low8, nullEffect()))
+
+ -- levels 6+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(6),
+ createCardEffect(lich_extra_souljar_buff(), loc(currentPid, buffsPloc)),
+ nullEffect() ))
+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(6),
+ createCardEffect(lich_extra_souljar_buff(), loc(nextAllyPid, buffsPloc)),
+ nullEffect() ))
+
+ -- levels 12+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ createCardEffect(lich_30_hp_buff(), loc(currentPid, buffsPloc)),
+ nullEffect() ))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ createCardEffect(lich_30_hp_buff(), loc(nextAllyPid, buffsPloc)),
+ nullEffect() ))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ ef_12,
+ nullEffect() ))
+
+ -- levels 18+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(18),
+ ef_18plus,
+ nullEffect() ))
+
+ -- levels 20+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(20),
+ ef_20plus,
+ nullEffect() ))
+ --
+
+ return createGlobalBuff({
+ id="lichSetupBuff",
+ name = "Setup",
+ abilities = {
+
+ createAbility({
+ id="lich_setup_effect",
+ trigger = startOfGameTrigger,
+ effect = efLichSetup
+
+
+ })
+ }
+ })
+end
+
+
+
+ local Grimoirebuff = createGlobalBuff({
+ id="Grimoirebuff",
+ name = "Grimoire",
+ abilities = {
+ createAbility({
+ id= "Grimoirebuff",
+ trigger = startOfTurnTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Grimoire",
+ art = "art/t_rayla_endweaver",
+ text = "You start with 10 cards (8 unique minions) in your Grimoire. Whenever you perform a Summoning, randomly take one card from your Grimoire and put it into play. When a minion is stunned it returns to your Grimoire."
+ })
+ })
+
+ local souljarbuff = createGlobalBuff({
+ id="souljarbuff",
+ name = "Soul Jar",
+ abilities = {
+ createAbility({
+ id= "souljarbuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Soul Jar",
+ art = "art/treasures/t_wizard_elixir_blue",
+ text = "Each game 1 of 6 Soul Jars are randomly chosen to determine the Lich's Health and Skill."
+ })
+ })
+
+-- Additional cards
+local function lich_corruption_carddef()
+local card_name = "lich_corruption"
+
+ local cardLayout = createLayout({
+ name = "Corruption",
+ art = "art/epicart/necromancer_apprentice",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "corruption_skill",
+ name = "Corruption",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/necromancer_apprentice",
+ abilities = {
+ createAbility({
+ id="corruption20buff_combat",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(1)
+ .seq(randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ .seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+local function lich_control_carddef()
+local card_name = "lich_control"
+
+ local cardLayout = createLayout({
+ name = "Control",
+ art = "art/epicart/necromancer_lord",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "control_skill",
+ name = "Control",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/necromancer_lord",
+ abilities = {
+ createAbility({
+ id="control30buff_combat",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(2)
+ .seq(randomTarget(const(2), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ .seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(2),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+local function lich_soul_diamond_carddef()
+local card_name = "lich_soul_diamond"
+
+ return createItemDef({
+ id = "lich_soul_diamond",
+ name = "Lich Soul Diamond",
+ playLocation = castPloc,
+ acquireCost = 0,
+ types = { itemType, currencyType, gemType, nostealType },
+ layout = createLayout({
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer_soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_soul_diamond_item_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = ifElseEffect(isPlayerAi(oppPid),gainGoldEffect(3),gainGoldEffect(1)),
+ }),
+
+ createAbility({
+ id = "lich_soul_diamond_item_stun",
+ trigger = uiTrigger,
+
+ activations = singleActivation,
+ effect = pushChoiceEffectWithTitle(
+ {
+
+ choices =
+ {
+ {
+ effect = stunTarget().apply(selectLoc(loc(oppPid, inPlayPloc))),
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardStunnable()),
+ layout = createLayout({
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer_soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ },
+
+ },
+
+ }
+ ),
+ cost = sacrificeSelfCost,
+
+ }),
+ },
+
+ layout = createLayout(
+ {
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer_soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ })
+end
+
+local function lich_frozen_touch_carddef()
+local card_name = "lich_frozen_touch"
+
+ return createActionDef({
+ id = "lich_frozen_touch",
+ name = "Frozen Touch",
+ types = {actionType, nostealType},
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "frozen_touch_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(1),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Frozen Touch",
+ art = "art/epicart/zannos__corpse_lord",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+local function lich_soul_crush_carddef()
+local card_name = "lich_soul_crush"
+
+ return createActionDef({
+ id = "lich_soul_crush_curse",
+ name = "Lich Soul Crush Curse",
+ acquireCost = 0,
+
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Soul Crush",
+ art = "art/epicart/consume",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_soul_crush_curse_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 3 combat
+ {
+ effect = gainCombatEffect(3),
+ layout = layoutCard(
+ {
+ title = "Soul Crush",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Soul Crush",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ })
+
+ },
+ })
+end
+
+local function lich_wake_dead_carddef()
+ local card_name = "Wake dead"
+
+ return createActionDef({
+ id = "lich_wake_dead",
+ name = "Wake Dead",
+ types = { actionType, curseType, nostealType },
+ aiPriority = toIntExpression(1),
+ acquireCost = 0,
+ abilities = {
+ createAbility({
+ id = "lich_minor_summoning",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = createCardEffect(necromancer_skeleton_warrior_carddef(), currentInPlayLoc),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ tags = { },
+ aiPriority = toIntExpression(-2)
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Wake Dead",
+ art = "art/epicart/the_risen",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ })
+end
+
+local function lich_minor_summoning_carddef()
+ local card_name = "lich_minor_summoning"
+
+ return createActionDef({
+ id = "lich_minor_summoning",
+ name = "Minor Summoning",
+ types = { actionType, curseType, nostealType },
+ aiPriority = toIntExpression(1),
+ acquireCost = 0,
+ abilities = {
+ createAbility({
+ id = "lich_minor_summoning",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ tags = { },
+ aiPriority = toIntExpression(-2)
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Minor Summoning",
+ art = "art/epicart/necrovirus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ })
+end
+
+
+
+local function lich_major_summoning_carddef()
+local card_name = "lich_major_summoning"
+
+ return createActionDef({
+ id = "lich_major_summoning",
+ name = "Major Summoning",
+ playLocation = castPloc,
+ acquireCost = 0,
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Major Summoning",
+ art = "art/epicart/abyss_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_major_summoning",
+ trigger = autoTrigger,
+ cost = expendCost,
+ effect = randomTarget(const(2), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(2),
+ }),
+ },
+ })
+end
+
+function lich_abomination_minion_carddef()
+ return createChampionDef({
+ id = "lich_abomination_minion",
+ name = "Lich Abomination Minion",
+ acquireCost = 0,
+ health = 6,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Abomination",
+ art = "art/epicart/scrap_golem_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 6,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_abomination_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4),
+ }),
+
+ createAbility({
+ id = "lich_abomination_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_banshee_minion_carddef()
+ return createChampionDef({
+ id = "lich_banshee_minion",
+ name = "Lich Banshee Minion",
+ acquireCost = 0,
+ health = 3,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Banshee",
+ art = "art/t_banshee",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 3,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_banshee_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc))))
+ }),
+
+ createAbility({
+ id = "lich_banshee_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_ghoul_minion_carddef()
+ return createChampionDef({
+ id = "lich_ghoul_minion",
+ name = "Lich Ghoul Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_ghoul_minion_main",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3).seq(gainCombatEffect(selectLoc(currentDiscardLoc).where(isCardChampion()).count())),
+ --ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(1),gainCombatEffect(3),gainCombatEffect(1))
+ }),
+
+ createAbility({
+ id = "lich_ghoul_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_revenant_minion_carddef()
+ return createChampionDef({
+ id = "lich_revenant_minion",
+ name = "Lich Revenant Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_revenant_minion_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 5 health
+ {
+ effect = gainHealthEffect(5),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun an opposing champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ }),
+
+ createAbility({
+ id = "lich_revenant_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_skeleton_horde_minion_carddef()
+ return createChampionDef({
+ id = "lich_skeleton_horde_minion",
+ name = "Lich Skeleton Horde Minion",
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Skeleton Horde",
+ art = "art/t_angry_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 4,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_skeleton_horde_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3),
+ }),
+
+ createAbility({
+ id = "lich_skeleton_horde_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_bones_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_bones_minion",
+ name = "Lich Wall of Bones Minion",
+ acquireCost = 0,
+ health = 8,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Wall of Bones",
+ art = "art/t_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 8,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_bones_minion_main",
+ trigger = autoTrigger,
+ --cost = expendCost,
+ effect = nullEffect()
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_fire_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_fire_minion",
+ name = "Lich Wall of Fire Minion",
+ acquireCost = 0,
+ health = 7,
+ isGuard = false,
+ types = { minionType, magicType, constructType },
+ layout = createLayout({
+ name = "Wall of Fire",
+ art = "art/t_charing_guardian",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 7,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_fire_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2),
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_zombie_minion_carddef()
+ return createChampionDef({
+ id = "lich_zombie_minion",
+ name = "Lich Zombie Minion",
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ cardTypeLabel = "undeadType",
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Zombie",
+ art = "art/epicart/zombie_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 1,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_zombie_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+ }),
+
+ createAbility({
+ id = "lich_zombie_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+
+ },
+ })
+end
+
+--Lich Soul jars (Skills)
+
+function lich_SJ_HoE_carddef()
+ local cardLayout = createLayout({
+ name = "Heart of Evil",
+ tags = { "Soul Jar" },
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+ >
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "SJ_HoE",
+ name = "Heart of Evil",
+ tags = { "Soul Jar" },
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_concentration",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_HoE_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_DI_carddef()
+ local cardLayout = createLayout({
+ name = "Deep Insight",
+ tags = { "Soul Jar" },
+ art = "art/t_elixir_of_wisdom",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "SJ_DI",
+ name = "Deep Insight",
+ tags = { "Soul Jar" },
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_wisdom",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_DI_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = drawCardsEffect(1).seq(forceDiscard(1)),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_IW_carddef()
+ local cardLayout = createLayout({
+ name = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ tags = { "Soul Jar" },
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "SJ_IW",
+ name = "Infernal Wealth",
+ tags = { "Soul Jar" },
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_endurance",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_IW_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ ),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_UR_carddef()
+ local cardLayout = createLayout({
+ name = "Unending Rage",
+ tags = { "Soul Jar" },
+ art = "art/treasures/t_wizard_elixir_orange",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "SJ_UR",
+ name = "Unending Rage",
+ tags = { "Soul Jar" },
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_orange",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_UR_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(7),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_V_carddef()
+ local cardLayout = createLayout({
+ name = "Void",
+ tags = { "Soul Jar" },
+ art = "art/treasures/t_wizard_elixir_silver",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "SJ_V",
+ name = "Void",
+ tags = { "Soul Jar" },
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_silver",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_V_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = hitOpponentEffect(3),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_M_carddef()
+ local cardLayout = createLayout({
+ name = "Manipulation",
+ tags = { "Soul Jar" },
+ art = "art/treasures/t_wizard_elixir_orange",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "SJ_M",
+ name = "Manipulation",
+ tags = { "Soul Jar" },
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_orange",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_M_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost four or less for free.",
+ validTargets = selectLoc(centerRowLoc).union(selectLoc(fireGemsLoc)).where(isCardAcquirable().And(getCardCost().lte(4))),
+ min = 0,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+local function share_card_2v2_skilldef()
+ local card_name = "share_card_2v2"
+
+ local cardLayout = createLayout({
+ name = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ frame = "frames/generic_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "share_card_skill_2v2_skill",
+ name = "Helping Hand",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+
+ abilities = {
+ createAbility({
+ id = "share_card_skill_2v2_skill",
+ trigger = uiTrigger,
+ check = getTurnsPlayed(currentPid).gte(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(nextAllyPid, discardPloc))
+ }),
+ condition = selectLoc(loc(currentPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Move a card from your discard pile to your ally's discard pile.",
+ min=1,
+ max=1,
+ validTargets = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)),
+ targetEffect = moveTarget(loc(currentPid, discardPloc))
+ }),
+ condition = selectLoc(loc(nextAllyPid, discardPloc)).where(getCardCost().gte(1)).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Helping Hand",
+ art = "art/epicart/arcane_research",
+ xmlText=[[
+
+
+
+
+
+]],
+
+ }
+ ),
+ tags = {}
+ }
+ }
+ }),
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().eq(0),
+ cost = combineCosts({expendCost,goldCost(1)}),
+ }),
+ },
+
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/epicart/arcane_research"
+ })
+end
+
+-- buffs
+
+function lich_taunt_skill_def()
+
+ local cardLayout = createLayout({
+ name = "Taunt",
+ art = "art/epicart/second_wind",
+ xmlText = [[
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "lich_taunt_custom",
+ name = "lich_taunt",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath= "art/epicart/second_wind",
+ abilities = {
+ createAbility({
+ id = "taunt",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Move 1-2 enemy champions from your Ally's area into your area.",
+ validTargets = selectLoc(loc(nextOppPid, inPlayPloc)).where(isCardChampion()),
+ min = 1,
+ max = 2,
+ targetEffect = moveTarget(loc(oppPid, inPlayPloc)),
+ }),
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().eq(0)
+ .And(selectLoc(loc(nextOppPid, inPlayPloc)).where(isCardChampion()).count().gte(1)),
+ cost = expendCost
+ })
+ },
+
+ })
+end
+
+function lich_show_grimoire_skill_def()
+
+ local cardLayout = createLayout({
+ name = "Show Grimoire",
+ art = "art/epicart/zealous_necromancer",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "lich_show_grimoire_custom",
+ name = "Show Grimoire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath= "art/epicart/zealous_necromancer",
+ abilities = {
+ createAbility({
+ id = "show_grimoire",
+ trigger = uiTrigger,
+ activations = multipleActivations,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = moveTarget(currentRevealLoc).apply(selectLoc(loc(nil, nullPloc)))
+ .seq(waitForClickEffect("Cards currently in the Lich's Grimoire.", "Cards currently in the Lich's Grimoire."))
+
+ .seq(pushTargetedEffect({
+ desc = "Click one to resume play.",
+ validTargets = selectLoc(currentRevealLoc),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(nullPloc).seq(moveTarget(nullPloc).apply(selectLoc(currentRevealLoc))),
+ })),
+
+ cost = noCost
+ })
+ },
+
+ })
+end
+-- Speech
+
+local function ee_demon_hunter_carddef()
+ local card_name = "Aarkenell, Demonsbane"
+ return createChampionDef(
+ {
+ id = "demon_hunter",
+ name = "Aarkenell, Demonsbane",
+ types = {championType},
+ factions = { imperialFaction },
+ acquireCost = 6,
+ health = 6,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "demon_hunter",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ effect = pushChoiceEffect({
+ choices = {
+ {
+ effect = gainCombatEffect(4),
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Hit up to 3 champions for 2 damage each.",
+ validTargets = oppStunnableSelector(),
+ min = 1,
+ max = 3,
+ targetEffect = damageTarget(2),
+ }),
+ layout = createLayout({
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText = [[
+
+
+
+ ]],
+ }),
+ tags = { }
+ },
+ }
+ })
+ }),
+
+ createAbility({
+ id = "demon_hunter_ally",
+ trigger = uiTrigger,
+ effect = gainHealthEffect(selectLoc(loc(oppPid, discardPloc)).where(isCardStunned()).count().multiply(2)),
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = noCost,
+ activations = singleActivation,
+ check = constBoolExpression(true),
+ allyFactions = {imperialFaction}
+ }),
+
+ createAbility({
+ id = "demon_hunter_ally2",
+ trigger = uiTrigger,
+ cost = noCost,
+ activations = singleActivation,
+ effect = drawCardsEffect(1),
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Demon Hunter",
+ art = "art/t_paladin_sword",
+ frame = "frames/imperial_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ allyFactions = {imperialFaction, imperialFaction}
+ }),
+
+ },
+ layout = createLayout(
+ {
+ name = "Aarkenell, Demonsbane",
+ art = "art/epicart/white_knight",
+ frame = "frames/imperial_champion_cardframe",
+ cost = 6,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 6,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+
+
+---- game setup
+function setupGame(g)
+
+registerCards(
+ g,
+ {
+ ee_demon_hunter_carddef()
+ })
+
+ standardSetup(g, {
+ description = "Lich class - based on WWG's Boss Deck. Script created for digital Co-op 26.06.2025. Updated 25.07.2025",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid3, plid1, plid4, plid2 },
+ opponents = { { plid1, plid3 }, { plid2, plid4 }},
+ tradeDeckExceptions = {
+ { qty=1, cardId="demon_hunter" }
+ },
+ players = {
+ {
+ id = plid1,
+ canAttackAllyOppChampions = true,
+ startDraw = 5,
+ init = {
+ fromEnv = plid1
+ },
+ avatar = "",
+ cards = {
+ skills = {
+ { qty=1, card= share_card_2v2_skilldef() },
+ { qty=1, card= lich_taunt_skill_def() },
+ { qty=1, card= lich_show_grimoire_skill_def() },
+
+
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ --lichSetup2BuffDef(),
+ }
+ }
+ },
+ {
+ id = plid2,
+ canAttackAllyOppChampions = true,
+ startDraw = 5,
+ init = {
+ fromEnv = plid2
+ },
+ avatar = "",
+ cards = {
+ skills = {
+ { qty=1, card= share_card_2v2_skilldef() },
+ { qty=1, card= lich_taunt_skill_def() },
+ { qty=1, card= lich_show_grimoire_skill_def() },
+ },
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+
+ }
+ }
+ },
+ {
+ id = plid3,
+ isAi = true,
+ name = "Lich",
+ syncHealth = true,
+ startDraw = 3,
+ avatar = "WarInTheWild/krythos_master_vampire",
+ health = 0,
+ cards = {
+ deck = {
+ {qty = 7, card = gold_carddef()},
+ {qty = 0, card = lich_soul_diamond_carddef()},
+ {qty = 3, card = ruby_carddef()},
+ {qty = 2, card = lich_soul_crush_carddef()},
+ {qty = 2, card = lich_frozen_touch_carddef()},
+ {qty = 2, card = lich_minor_summoning_carddef()},
+ {qty = 1, card = lich_major_summoning_carddef()},
+ {qty = 1, card = lich_wake_dead_carddef()},
+
+
+ },
+ skills = {
+
+ },
+ buffs = {
+ bossMoveCardsAtTurnEndDef(),
+ shareDiscardsAtTurnStartDef(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ aiTurnBuffDef(),
+ lichSetupBuffDef(),
+
+ corruption20_BuffDef(),
+ Grimoirebuff,
+ souljarbuff,
+
+
+ }
+ }
+ },
+ {
+ id = plid4,
+ isAi = true,
+ name = "Lich",
+ syncHealth = true,
+ startDraw = 0,
+ avatar="WarInTheWild/krythos_master_vampire",
+ health = 0,
+ cards = {
+ skills = {
+ },
+ buffs = {
+ bossMoveCardsAtTurnEndDef(),
+ shareDiscardsAtTurnStartDef(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ aiTurnBuffDef(),
+
+ corruption20_BuffDef(),
+ Grimoirebuff,
+ souljarbuff,
+
+
+ }
+ }
+ }
+ }
+ })
+end
+
+
+function corruption20_BuffDef()
+ local ef_Corruption =
+ createCardEffect(lich_corruption_carddef(), loc(currentPid, skillsPloc))
+ .seq(createCardEffect(lich_corruption_carddef(), loc(nextAllyPid, skillsPloc)))
+ .seq(createCardEffect(corruption30_BuffDef(), loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(corruption30_BuffDef(), loc(nextAllyPid, buffsPloc)))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("corruption20buff"))))
+ .seq(sacrificeSelf())
+
+ return createGlobalBuff({
+ id="corruption20buff",
+ name = "Corruption",
+ abilities = {
+ createAbility({
+ id= "corruption20buff",
+ trigger = deckShuffledTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, inPlayPloc))).union(selectLoc(loc(currentPid, deckPloc))).where(isCardType(minionType).invert()).count().gte(20), ef_Corruption, nullEffect()),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Corruption",
+ art = "art/t_charing_guardian",
+ text = "When you shuffle your deck, if you have 20 or more cards in your deck, hand and in play (not including minions), gain the Corruption skill (which performs a Summoning)."
+ })
+ })
+end
+
+function corruption30_BuffDef()
+ local ef_Corruption =
+
+ createCardEffect(lich_control_carddef(), loc(currentPid, skillsPloc))
+ .seq(createCardEffect(lich_control_carddef(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("corruption_skill"))))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("corruption_skill"))))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("corruption30buff"))))
+ .seq(sacrificeSelf())
+
+ return createGlobalBuff({
+ id="corruption30buff",
+ name = "Control",
+ abilities = {
+ createAbility({
+ id= "corruption30buff",
+ trigger = deckShuffledTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, inPlayPloc))).union(selectLoc(loc(currentPid, deckPloc))).where(isCardType(minionType).invert()).count().gte(30), ef_Corruption, nullEffect()),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Corruption",
+ art = "art/t_charing_guardian",
+ text = "When you shuffle your deck, if you have 30 or more cards in your deck, hand and in play (not including minions), gain the Control skill (which performs 2 Summonings)."
+ })
+ })
+end
+
+
+
+function endGame(g)
+end
+
+
+
+
+ function setupMeta(meta)
+ meta.name = "Lich Co-Op"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = ""
+ meta.features = {
+}
+
+ end
+
+
+function setupCoopIntro(encounter)
+ encounter.name = "Lich Co-Op"
+ encounter.description = "Lich class - based on WWG's Boss Deck. Script created for digital Co-op 26.06.2025. Updated 25.07.2025"
+ encounter.minlevel = 1
+ encounter.maxlevel = 24
+ encounter.avatar = "avatars/vampire_lord"
+ encounter.heroname = "The Lich"
+ encounter.backgroundPath = "scenariointrobackgrounds/warInthewild/krythos_master_vampire"
+ encounter.features = {
+ encounter.feature("avatars/journeys/abomination", "The Lich has arisen. It is corrupting the city through the power of its Grimoire and it's undead minions. Stop the Lich before the city falls."),
+ encounter.feature("avatars/vampire_lord", "The Lich is made undead through the power of Soul Jars. Each Soul Jar grants the Lich a unique skill to use each turn and grants it a various amount of health."),
+ encounter.feature("avatars/skeleton", " Each game, one of six Soul Jars is selected at random. At level 6 and above, the Lich will use a second Soul Jar when it's life is first reduced to 0. (Other effects change the difficulty for various levels. Recommended for level 12+.")
+ }
+end
\ No newline at end of file
From db605dec235c0051907833e6e8ea9a0da6ca96d6 Mon Sep 17 00:00:00 2001
From: Aarkenell <143031422+Aarkenell@users.noreply.github.com>
Date: Thu, 12 Feb 2026 09:43:03 +0000
Subject: [PATCH 3/6] Update Custom Class Clash (lvl 12).lua
---
Aarkenell/Custom Class Clash (lvl 12).lua | 11197 ++++++++++++--------
1 file changed, 6816 insertions(+), 4381 deletions(-)
diff --git a/Aarkenell/Custom Class Clash (lvl 12).lua b/Aarkenell/Custom Class Clash (lvl 12).lua
index d3ea95f..1143048 100644
--- a/Aarkenell/Custom Class Clash (lvl 12).lua
+++ b/Aarkenell/Custom Class Clash (lvl 12).lua
@@ -12,6 +12,10 @@ Quickstart (cards move direct to sacrificePloc)
Succubus self-sac fixed
Demonic Leech rework - now explodes once at 6 health]]
+--[[
+Updates19.04.2025 - art and cardframe decapitalisation post WWG patch
+]]
+
-- Game start --
local function chooseStart()
return cardChoiceSelectorEffect({
@@ -43,20 +47,21 @@ local function chooseStart()
.seq(createCardEffect(choose_brewmaster_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(choose_thandarlorian_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(choose_terramancer_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_cryomancer_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(choose_apothecary_carddef(), loc(currentPid, asidePloc)))]]
.seq(createCardEffect(choose_demonologist_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_cryomancer_carddef(), loc(currentPid, asidePloc)))
.seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
- .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", "")),
+ .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", ""))
+ .seq(waitForClickEffect("Please note: Cryomancer abilities are still in development.", ""))
+ .seq(waitForClickEffect("If both players choose Cryomancer AND the same abilities and activate them at the same time the game will crash.", "")),
layout = createLayout({
name = "Pick a custom class",
- art = "art/T_Storm_Siregar",
+ art = "art/t_storm_siregar",
xmlText=[[
-
@@ -79,7 +84,7 @@ level 12 Custom Characters to play." fontsize="26"/>
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -100,7 +105,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -121,7 +126,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
}),
layout = createLayout({
name = "Selected class",
- art = "art/T_All_Heroes",
+ art = "art/t_all_heroes",
xmlText=[[
@@ -148,14 +153,13 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout({
name = "Updates to this mod",
- art = "art/T_fighter_sharpening_stone",
+ art = "art/t_fighter_sharpening_stone",
xmlText=[[
-
@@ -168,17 +172,19 @@ Demon Hunter custom card added to market deck
effect = nullEffect(),
layout = createLayout({
name = "Other mods to try",
- art = "art/treasures/T_spyglass",
+ art = "art/treasures/t_spyglass",
xmlText=[[
+<size=90%>Look out for these games in the custom lobby, or join the RealmsRising Discord to request custom challenges." fontsize="14"/>
]] }),
@@ -187,26 +193,26 @@ Demon Hunter custom card added to market deck
-- 1.2c choice - Community news
{
- effect = storyTellEffectWithPortrait("ogre", "Hi! I’m Rob d’Ogrety, CEO of ‘Why’s Wizard Games?’")
- .seq(leftStoryTellEffectWithPortrait("inquisition", "And I’m Dwarfin Kastle – creator of the award-winning deckbuilding game about growing trees in space – Star Elms."))
- .seq(storyTellEffectWithPortrait("ogre", "We just wanted to take a moment to say how much we love the community that has sprung up around Hero Realms…"))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "We love you!"))
- .seq(storyTellEffectWithPortrait("ogre", " …and how much we love the experiments and new ideas being offered through custom lua scripting."))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "Yeah! We love lua!"))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "Lua, Lua! Oh baby! Me gotta go! Aye-yi-yi-yi!"))
- .seq(storyTellEffectWithPortrait("ogre", " Thanks DK."))
- .seq(storyTellEffectWithPortrait("ogre", "Be sure to join the Realms Rising server on Discord to share your feedback on this mod and to discover new custom games to play."))
- .seq(storyTellEffectWithPortrait("ogre", "And listen to the Sparks and Recreation podcast for information on Community events, meta-analysis, and everything Hero Realms."))
- .seq(storyTellEffectWithPortrait("ogre", "Or jump over to RealmsRising.com for in-depth articles on strategy and gameplay."))
+ effect = storyTellEffectWithPortrait("ogre_fighter_male_02", "Hi! I’m Rob d’Ogrety, CEO of ‘Why’s Wizard Games?’")
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "And I’m Dwarfin Kastle – creator of the award-winning deckbuilding game about growing trees in space – Star Elms."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "We just wanted to take a moment to say how much we love the community that has sprung up around Hero Realms…"))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "We love you!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", " …and how much we love the experiments and new ideas being offered through custom lua scripting."))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Yeah! We love lua!"))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Lua, Lua! Oh baby! We gotta code! Aye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", " Thanks DK."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Be sure to join the Realms Rising server on Discord to share your feedback on this mod and to discover new custom games to play."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_0", "And listen to the Sparks and Recreation podcast for information on Community events, meta-analysis, and everything Hero Realms."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Or jump over to RealmsRising.com for in-depth articles on strategy and gameplay."))
.seq(storyTellEffectWithPortrait("origins_flawless_track", "And if you have ideas for new custom classes or scenarios you’d like to see, drop me, Aarkenell, a message in the Realms Rising Discord."))
- .seq(storyTellEffectWithPortrait("ogre", "Whether you join the Realms Rising community or not, we hope you keep enjoying the game and all the custom content from our great community. "))
- .seq(storyTellEffectWithPortrait("ogre", "Bye for now."))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "Lua, Lua! Oh baby! We gotta go. Bye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Whether you join the Realms Rising community or not, we hope you keep enjoying the game and all the custom content from our great community."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Bye for now."))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Lua, Lua! Oh baby! We gotta go. Bye-yi-yi-yi!"))
.seq(storyTellEffectWithPortrait("origins_flawless_track", "Please hit 'Undo' to return to the menu."))
,
layout = createLayout({
name = "Community News",
- art = "art/T_borg_ogre_mercenary",
+ art = "art/t_borg_ogre_mercenary",
xmlText=[[
@@ -227,7 +233,7 @@ Demon Hunter custom card added to market deck
-- 1.1 layout
layoutFirst = createLayout({
name = "To Battle!",
- art = "art/T_Unify_Apsara",
+ art = "art/t_unify_apsara",
xmlText=[[
@@ -240,7 +246,7 @@ Demon Hunter custom card added to market deck
-- 1.2 layout
layoutSecond = createLayout({
name = "Updates & Info",
- art = "art/treasures/T_Magic_Scroll_Souveraine",
+ art = "art/treasures/t_magic_scroll_souveraine",
xmlText=[[
@@ -306,7 +312,7 @@ function choose_demonologist_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -327,7 +333,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -376,7 +382,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "Summon Demon Minion",
- art = "icons/The_Summoning",
+ art = "icons/the_summoning",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -446,13 +452,13 @@ Start playing." fontsize="30" flexiblewidth="1" />
isGuard = false,
xmlText=[[
-
-
-
+
+
+
-
-
+
+
]]
@@ -570,7 +576,7 @@ into play.
layout = createLayout(
{
name = "Demonic Amulet",
- art = "art/T_wizard_silverskull_amulet",
+ art = "art/t_wizard_silverskull_amulet",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -594,7 +600,7 @@ into play.
layout = createLayout(
{
name = "Summoner's Robes",
- art = "art/T_wizard_runic_robes",
+ art = "art/t_wizard_runic_robes",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -691,8 +697,8 @@ into play.
layout = createLayout(
{
name = "Grimoire",
- art = "art/T_Evangelize",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_evangelize",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -719,8 +725,8 @@ Gain {health_1} for each demon minion already in play." fontsize="24" />
layout = createLayout(
{
name = "Scroll of Summoning",
- art = "art/treasures/T_Magic_Scroll_Souveraine",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/t_magic_scroll_souveraine",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -866,7 +872,7 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
{
name = "Devourer",
art = "art/epicart/thrasher_demon",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -1002,15 +1008,20 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
layout = createLayout({
name = "Demonologist",
art = "art/epicart/dirge_of_scara",
- frame = "frames/Coop_Campaign_CardFrame",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
-
-
+
+
-
+
+- Class by Aarkenell -" fontsize="22" fontstyle="italic"/>
+
+
+
+
@@ -1070,8 +1081,8 @@ function choose_pyromancer_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1091,8 +1102,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1120,7 +1131,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
{
name = "Additional Health",
art = "avatars/summoner",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1139,8 +1150,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "Play with fire",
- art = "art/T_Spreading_Sparks",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_spreading_sparks",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1175,7 +1186,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
{
name = "Patronage",
art = "art/treasures/thief_brillant_ruby",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1203,7 +1214,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
{
name = "Volatile Chemicals",
art = "art/treasures/wizard_adept_s_components",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1235,8 +1246,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "Phoenix Fury",
- art = "art/T_pillar_of_fire",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_pillar_of_fire",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1270,7 +1281,7 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
{
name = "Phoenix Flames",
art = "art/epicart/flames_of_furios",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1303,8 +1314,8 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
layout = createLayout(
{
name = "Spirit of the Phoenix",
- art = "art/T_darian_war_mage",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_darian_war_mage",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1341,8 +1352,8 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
layout = createLayout(
{
name = "Fire Gem Amulet",
- art = "art/T_fire_gem",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_fire_gem",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1367,7 +1378,7 @@ Otherwise give a Fire Bird +1{shield} until it leaves play." fontsize="19" />
{
name = "Flame Hood",
art = "avatars/summoner",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1407,7 +1418,7 @@ If you have used your Ability, gain {combat_2}." fontsize="24" />
{
name = "Phoenix Frenzy",
art = "art/epicart/fireball",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1440,7 +1451,7 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
{
name = "Phoenix Flare",
art = "art/epicart/ascendant_pyromancer",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1477,8 +1488,8 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
layout = createLayout(
{
name = "Hearth",
- art = "art/T_Blistering_Blaze",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_blistering_blaze",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1500,7 +1511,7 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
{
name = "Fire Elemental",
art = "art/epicart/fire_spirit",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1539,7 +1550,7 @@ and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
{
name = "Reckless Research",
art = "art/epicart/erratic_research",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1573,7 +1584,7 @@ Add 3-7{combat} to your Ability. Increase the value of this skill by {combat_1}
{
name = "Obsessive Research",
art = "art/epicart/mystic_researcher",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1606,7 +1617,7 @@ Draw 1. Put a card on the top of your deck." fontsize="19" flexibleheight="0.5"/
{
name = "Focussed Research",
art = "art/epicart/lesson_learned",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1644,7 +1655,7 @@ Draw 1. Put a card on the top of your deck." fontsize="19" flexibleheight="0.5"/
{
name = "Explode",
art = "art/epicart/zaltessa_s_fire",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -1668,7 +1679,7 @@ Draw 1. Put a card on the top of your deck." fontsize="19" flexibleheight="0.5"/
{
name = "Incinerate",
art = "art/epicart/flame_strike",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1705,7 +1716,7 @@ Draw 1. Put a card on the top of your deck." fontsize="19" flexibleheight="0.5"/
{
name = "Compulsive Research",
art = "art/epicart/frantic_digging",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1734,7 +1745,7 @@ Draw 1. Put a card on the top of your deck." fontsize="19" flexibleheight="0.5"/
{
name = "Considered Research",
art = "art/epicart/forbidden_research",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -1767,8 +1778,8 @@ Draw 1. Put a card on the top of your deck." fontsize="19" flexibleheight="0.5"/
},
layout = createLayout({
name = "Pyromancer",
- art = "art/T_Blistering_Blaze",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_blistering_blaze",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1789,1186 +1800,1104 @@ Pyromancer" fontsize="26"/>
})
end
+function choose_cryomancer_carddef()
+ return createDef({
+ id="choose_cryomancer",
+ name="Choose the Cryomancer",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_cryomancer",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)))) --here--
+ .seq(setPlayerNameEffect("Cryomancer", currentPid))
+ .seq(setPlayerAvatarEffect("rayla__endweaver_flipped", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(52).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(52))
+ .seq(createCardEffect(cryomancer_frostbiteskill_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(cryomancer_freezing_fog_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_ice_sickle_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_frostwulf_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_ice_gem_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_freeze_carddef(), loc(currentPid, asidePloc)))
--- Demonologist cards -----------------------------------------------------------------------------------------------------------------------
-function demonologist_shadow_gem_carddef()
- return createDef(
- {
- id = "demonologist_shadow_gem",
- name = "Shadow Gem",
- types = {gemType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "demonologist_shadow_gem_sac",
- PlayAllType = noPlayPlayType,
- cost = noCost,
- trigger = autoTrigger,
- activations = singleActivations,
- effect = pushChoiceEffect(
+--Confirm--
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
{
- choices = {
- {
- effect = gainGoldEffect(2),
- layout = layoutCard(
- {
- title = "Shadow Gem",
- art = "art/treasures/thief_brillant_ruby",
- xmlText=[[
-
-
-
-
-
-
-
- ]]
- }
- ),
- tags = {gainCombatTag}
- },
- {
- effect = pushTargetedEffect({
- desc = "Lose to give one minion +2 until your next turn.",
- validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
- min = 0,
- max = 1,
- check = minHealthCurrent(2),
- targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow").seq(hitSelfEffect(1)),
- }),
- layout = layoutCard(
- {
- title = "Shadow Gem",
- art = "art/treasures/thief_brillant_ruby",
- xmlText=[[
-
-
-
-
-
-
-
-
- ]]
- }
- ),
- }
- }
- }
- ),
- tags = {}
- }
- )
- },
- layout = createLayout(
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
{
- name = "Shadow Gem",
- art = "art/treasures/thief_brillant_ruby",
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
-
+
+
+
- ]]
- }
- )
- }
- )
-end
+ ]],
-function demonologist_shadow_feeder_carddef()
- return createChampionDef(
- {
- id = "demonologist_shadow_feeder",
- name = "Shadow Feeder",
- types = {minionType, demonType, championType, nosteaalType},
- acquireCost = 0,
- health = 1,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "Shadow_feeder_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(2),gainCombatEffect(3),gainCombatEffect(1))
- }
- )
- },
- layout = createLayout(
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
{
- name = "Shadow Feeder",
- art = "art/epicart/deathbringer",
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
-
-
+
+
+
]],
- health = 2,
- isGuard = false
+
}
- )
- }
- )
-end
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the cryomancer?",
+ lowerTitle = ""
+ }))
-function demonologist_void_guard_carddef()
- return createChampionDef(
- {
- id = "demonologist_void_guard",
- name = "Void guard",
- types = {minionType, championType, demonType, nosteaalType},
- acquireCost = 0,
- health = 2,
- isGuard = true,
- abilities = {
- createAbility(
- {
- id = "void_guard_main",
- trigger = autoTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(1)
-
- }
- )
- },
- layout = createLayout(
+--Level 12 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = gainMaxHealthEffect(currentPid, const(58).add(getPlayerMaxHealth(currentPid).negate()))
+ .seq(gainHealthEffect(58)),
+ layout = createLayout(
{
- name = "Void guard",
- art = "art/T_Midnight_Knight",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ name = "Additional Health",
+ art = "avatars/rayla__endweaver_flipped",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+]]
+ }
+ )
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(cryomancer_fog_carddef(), currentSkillsLoc),
+ layout = createLayout(
+ {
+ name = "Fog",
+ art = "art/t_blow_away",
+ frame = "frames/wizard_cardframe",
xmlText=[[
-
-
-
+
+
+
+
+
+
+
-
-
-
-
- ]],
- health = 2,
- isGuard = true
- }
- )
- }
- )
-end
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 12: Choose an upgrade.",
+ lowerTitle = "Gain max health, or gain a level 1 Ability."
+ }))
-function demonologist_lesser_devourer_carddef()
- return createChampionDef(
- {
- id = "demonologist_lesser_devourer",
- name = "Lesser Devourer",
- types = {minionType, championType, demonType, nosteaalType},
- acquireCost = 0,
- health = 2,
- isGuard = true,
- abilities = {
- createAbility(
- {
- id = "lesser_devourer_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource())),
- }
- )
- },
- layout = createLayout(
+--Level 11 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cryomancer_eternal_frost_carddef(), currentDeckLoc),
+ layout = createLayout(
{
- name = "Lesser Devourer",
- art = "art/T_Demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
+ name = "External Frost",
+ art = "art/epicart/forced_exile",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
-
-
-
-
-
-
-
+
+
+
- ]],
- health = 2,
- isGuard = true
- }
+]]
+ }
)
- }
- )
-end
+ ,
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(cyromancer_cryonics_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Cryonics",
+ art = "art/epicart/transfigure",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+Draw 1." fontsize="22" />
+
- ]]
- })
-
- return createSkillDef({
- id = "demonologist_summon_demon_skill",
- name = "Summon Demon",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "icons/The_Summoning",
- abilities = {
- createAbility({
- id = "demonologist_summon_demon_ab",
- trigger = uiTrigger,
- check = minHealthCurrent(2),
- activations = singleActivation,
- layout = cardLayout,
- promptType = showPrompt,
- effect =pushChoiceEffectWithTitle(
+ ]]
+ }
+ ),
+
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 11: Choose a card to add to your deck.",
+ lowerTitle = "Add Eternal Frost or Cryonics to your deck."
+ }))
+
+--Level 10 Ability choice--
+ .seq(pushChoiceEffectWithTitle(
{
choices = {
{
- effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_hoarfrost").Or(isCardName("cryomancer_ice_floe_ab"))))
+ .seq(createCardEffect(cryomancer_snow_squall_carddef(), currentSkillsLoc)),
layout = createLayout(
{
- name = "Demonic leech",
- art = "art/T_wurm",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
-
-
+ name = "Snow Squall",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
-
-
-
-
+Set aside a card of cost 8{gold} or less in your opponent's discard pile. The next time your opponent shuffles their deck, put that card on the bottom of their deck." fontsize="14" flexiblewidth="10" />
+
+
+
+
+
- ]],
- health = 1,
- isGuard = false
+ ]]
}
),
- tags = {gainCombatTag}
+ tags = {}
},
{
- effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_hoarfrost").Or(isCardName("cryomancer_ice_floe_ab"))))
+ .seq(createCardEffect(cryomancer_ice_sheet_ab_carddef(), currentSkillsLoc)),
layout = createLayout(
{
- name = "Fel hound",
- art = "art/epicart/demon_token",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
+ name = "Ice Sheet",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- ]],
- health = 1,
- isGuard = false
+ ]]
}
),
- tags = {gainCombatTag}
+ tags = {}
},
{
- effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_hoarfrost").Or(isCardName("cryomancer_ice_floe_ab"))))
+ .seq(createCardEffect(cryomancer_permafrost_ab_carddef(), currentSkillsLoc)),
layout = createLayout(
{
- name = "Succubus",
- art = "art/epicart/Succubus",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
+ name = "Permafrost",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
- ]],
- health = 1,
- isGuard = false
+ ]]
}
),
- }
+ tags = {}
+ }
+
},
- upperTitle = "Summon one of these 3 demon tokens, randomly.",
- lowerTitle = "Click any card to proceed."
- }),
- cost = goldCost(2),
- }),
- },
- layout = createLayout(
+ upperTitle = "Level 10: Choose which ability you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 9 Armour choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cryomancer_ice_mail_carddef(), currentSkillsLoc),
+ layout = createLayout(
{
- name = "Summon Demon",
- art = "icons/The_Summoning",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
+ name = "Ice Mail",
+ art = "art/epicart/crystal_golem",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
+
+
]]
- }
- )
-
- })
-end
-
-function demonologist_demonic_leech_carddef()
- return createChampionDef(
- {
- id = "demonologist_demonic_leech",
- name = "Demonic leech",
- types = {minionType, championType, demonType, nostealType, tokenType},
- acquireCost = 0,
- health = 1,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "demonic_leech_main",
- trigger = autoTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = hitOpponentEffect(1)
- .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
- }
- ),
- createAbility(
- {
- id = "demonic_leech_explode",
- trigger = startOfTurnTrigger,
- cost = noCost,
- activations = singleActivations,
- effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(5))).count().gte(1),
- hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
- nullEffect()),
- }),
-
- createAbility(
- {
- id = "demonic_leech_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = singleActivations,
- effect = nullEffect()
- }
-
- )
- },
- layout = createLayout(
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(cryomancer_ice_crown_carddef(), currentSkillsLoc),
+ layout = createLayout(
{
- name = "Demonic leech",
- art = "art/T_wurm",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
+ name = "Ice Crown",
+ art = "art/classes/necromancer/rotting_crown",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
-
+
-
-
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 9: Choose your armour.",
+ lowerTitle = ""
+ }))
-
-
+--Level 8 Ability choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_freezing_fog")))
+ .seq(createCardEffect(cryomancer_hoarfrost_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Hoarfrost",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
-
-
-
-
+Set aside a card of cost 6{gold} or less in your opponent's discard pile. The next time your opponent shuffles their deck, put that card on the bottom of their deck." fontsize="14" flexiblewidth="10" />
+
+
+
+
+
- ]],
- health = 1,
- isGuard = false
+ ]]
}
- )
- }
- )
-end
-
-function demonologist_fel_hound_carddef()
---This is a token champion, that self-sacrifices when it leaves play
- return createChampionDef(
- {
- id = "demonologist_fel_hound",
- name = "Fel hound",
- types = {minionType, championType, demonType, nostealType, tokenType},
- acquireCost = 0,
- health = 1,
- isGuard = false,
- abilities = {
- --base ability
- createAbility(
- {
- id = "fel_hound_main",
- trigger = autoTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(2)
-
- }
- )
- ,
- --self-sac ability
- createAbility(
- {
- id = "fel_hound_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = singleActivations,
- effect = nullEffect()
- }
-
- )},
- layout = createLayout(
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_freezing_fog")))
+ .seq(createCardEffect(cryomancer_ice_floe_ab_carddef(), currentSkillsLoc)),
+ layout = createLayout(
{
- name = "Fel hound",
- art = "art/epicart/demon_token",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
+ name = "Ice Floe",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- ]],
- health = 1,
- isGuard = false
+ ]]
}
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 8: Choose which ability you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 7 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = createCardEffect(cryomancer_cold_snap_carddef(), currentDeckLoc),
+ layout = createLayout(
+ {
+ name = "Cold Snap",
+ art = "art/epicart/ice_drake",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+]]
+ }
)
- }
- )
-end
-
-function demonologist_succubus_carddef()
- return createChampionDef(
- {
- id = "demonologist_succubus",
- name = "Succubus",
- types = {minionType, championType, demonType, nostealType, tokenType},
- acquireCost = 0,
- health = 1,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "succubus_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = pushTargetedEffect({
- desc = "Give target champion -1 permanently.",
- validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
- min = 0,
- max = 1,
- targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
- }),
-
- }
- )
,
- --self-sac ability
- createAbility(
- {
- id = "fel_hound_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = singleActivations,
- effect = nullEffect()
- }
-
- )},
- layout = createLayout(
+ tags = {}
+ },
+
+ {
+ effect = createCardEffect(cyromancer_polarmour_carddef(), currentDeckLoc),
+ layout = createLayout(
{
- name = "Succubus",
- art = "art/epicart/Succubus",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ name = "Polarmour",
+ art = "art/epicart/force_field",
+ frame = "frames/wizard_cardframe",
xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 1,
- isGuard = false
- }
- )
- }
- )
-end
-
-function demonologist_summon_demon_master_carddef()
- local cardLayout = createLayout({
- name = "Summon Demon Master",
- art = "art/T_Angry_Skeleton",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
+
+
+
- ]]
- })
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 7: Choose a card to add to your deck.",
+ lowerTitle = ""
+ }))
+
- return createSkillDef({
- id = "demonologist_summon_demon_master_ability",
- name = "Summon Demon Master",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/T_Angry_Skeleton",
- abilities = {
- createAbility({
- id = "demonologist_summon_demon_master_ab",
- trigger = uiTrigger,
- activations = singleActivation,
- layout = cardLayout,
- promptType = showPrompt,
- effect = createCardEffect(demonologist_demon_master_carddef(), currentInPlayLoc),
- cost = sacrificeSelfCost,
- }),
- },
- layout = createLayout(
+--Level 6 skill choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_rapid_frostbiteskill").Or(isCardName("cryomancer_deep_frostbiteskill"))))
+ .seq(createCardEffect(cryomancer_instant_frostbiteskill_carddef(), currentSkillsLoc)),
+ layout = createLayout(
{
- name = "Summon Demon Master",
- art = "art/T_Angry_Skeleton",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
+ name = "Instant Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
]]
}
- )
-
- })
-end
-
-function demonologist_demon_master_carddef()
- return createChampionDef(
- {
- id = "demonologist_demon_master",
- name = "Demon Master",
- types = {championType, demonType, minionType, nostealType},
- acquireCost = 0,
- health = 4,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "demonologist_demon_master_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(1).seq(pushTargetedEffect({
- desc = "Prepare up to 2 other demon minions in play.",
- validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType).And(isCardName("demonologist_demon_master").invert())),
- min = 0,
- max = 2,
- targetEffect = prepareTarget()
-
- }))
- }
- ),
- createAbility(
- {
- id = "demonologist_demon_master_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = multipleActivations,
- effect = nullEffect()
- }
-
- )
- },
- layout = createLayout({
- name = "Demon Master",
- art = "art/T_Angry_Skeleton",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_rapid_frostbiteskill").Or(isCardName("cryomancer_deep_frostbiteskill"))))
+ .seq(createCardEffect(cryomancer_severe_frostbiteskill_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Severe Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
-
-
+
+
+
-]],
- health = 4,
- isGuard = false
- })
- }
- )
-end
-
-function demonologist_summon_incubus_carddef()
- local cardLayout = createLayout({
- name = "Summon Incubus",
- art = "art/epicart/guilt_demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
- ]]
- })
-
- return createSkillDef({
- id = "demonologist_summon_incubus_ability",
- name = "Summon Incubus",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/guilt_demon",
- abilities = {
- createAbility({
- id = "demonologist_summon_incubus_ab",
- trigger = uiTrigger,
- activations = singleActivation,
- layout = cardLayout,
- promptType = showPrompt,
- effect = createCardEffect(demonologist_incubus_carddef(), currentInPlayLoc),
- cost = sacrificeSelfCost,
- }),
- },
- layout = createLayout(
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_rapid_frostbiteskill").Or(isCardName("cryomancer_deep_frostbiteskill"))))
+ .seq(createCardEffect(cryomancer_extreme_frostbiteskill_carddef(), currentSkillsLoc)),
+ layout = createLayout(
{
- name = "Summon Incubus",
- art = "art/epicart/guilt_demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
+ name = "Extreme Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
]]
}
- )
-
- })
-end
-
-function demonologist_incubus_carddef()
- return createChampionDef(
- {
- id = "demonologist_incubus",
- name = "Incubus",
- types = {championType, demonType, minionType, nostealType},
- acquireCost = 0,
- health = 4,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "demonologist_incubus_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(3).seq(gainCombatEffect(getCounter("incubus")))
- }
- ),
-
- createAbility(
- {
- id = "demonologist_incubus_main",
- trigger = startOfTurnTrigger,
- cost = noCost,
- activations = multipleActivations,
- effect = incrementCounterEffect("incubus", 1)
- }
- ),
-
- createAbility(
- {
- id = "demonologist_incubus_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = multipleActivations,
- effect = nullEffect()
- }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 6: Choose which skill you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+--Level 5 card choice--
+.seq(pushChoiceEffectWithTitle({
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("cryomancer_freeze")))
+.seq(createCardEffect(cryomancer_deep_freeze_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Deep Freeze",
+ art = "art/epicart/polar_shock",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
- )
- },
- layout = createLayout({
- name = "Incubus",
- art = "art/epicart/guilt_demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
+ })
+ ,
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("cryomancer_ice_sickle")))
+.seq(createCardEffect(cryomancer_ice_sickles_carddef(), currentDeckLoc)),
+ layout = createLayout(
+ {
+ name = "Ice Sickles",
+ art = "art/epicart/shock_trooper",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 5: Choose which card you would like to upgrade to.",
+ lowerTitle = "Replace Freeze or Ice Sickle."
+ }))
+
+--Level 4 skill choice--
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_frostbiteskill_skill")))
+ .seq(createCardEffect(cryomancer_rapid_frostbiteskill_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Rapid Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
-
-
+
+
-]],
- health = 4,
- isGuard = false
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("cryomancer_frostbiteskill_skill")))
+ .seq(createCardEffect(cryomancer_deep_frostbiteskill_carddef(), currentSkillsLoc)),
+ layout = createLayout(
+ {
+ name = "Deep Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {}
+ },
+
+ },
+ upperTitle = "Level 4: Choose which skill you would like to upgrade to.",
+ lowerTitle = "Click your choice to proceed."
+ }))
+
+ })
+ },
+ layout = createLayout({
+ name = "Cryomancer",
+ art = "avatars/rayla__endweaver_flipped",
+ frame = "frames/coop_campaign_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
})
- }
- )
-end
+ end
-function demonologist_summon_keeper_of_the_void_carddef()
- local cardLayout = createLayout({
- name = "Summon Keeper of the Void",
- art = "art/epicart/spawning_demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
+
+-- Demonologist cards -----------------------------------------------------------------------------------------------------------------------
+function demonologist_shadow_gem_carddef()
+ return createDef(
+ {
+ id = "demonologist_shadow_gem",
+ name = "Shadow Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_shadow_gem_sac",
+ PlayAllType = noPlayPlayType,
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
-
-
-
-
+
- ]]
- })
-
- return createSkillDef({
- id = "demonologist_summon_keeper_of_the_void_ability",
- name = "Summon Keeper of the Void",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/spawning_demon",
- abilities = {
- createAbility({
- id = "demonologist_summon_keeper_of_the_void_ab",
- trigger = uiTrigger,
- activations = singleActivation,
- layout = cardLayout,
- promptType = showPrompt,
- effect = createCardEffect(demonologist_keeper_of_the_void_carddef(), currentInPlayLoc),
- cost = sacrificeSelfCost,
- }),
- },
- layout = createLayout(
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = pushTargetedEffect({
+ desc = "Lose to give one minion +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 0,
+ max = 1,
+ check = minHealthCurrent(2),
+ targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow").seq(hitSelfEffect(1)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
{
- name = "Summon Keeper of the Void",
- art = "art/epicart/spawning_demon",
+ name = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
-
-
-
+
+
+
+
+
+
]]
}
)
-
- })
+ }
+ )
end
-function demonologist_keeper_of_the_void_carddef()
+function demonologist_shadow_feeder_carddef()
return createChampionDef(
{
- id = "demonologist_keeper_of_the_void",
- name = "Keeper of the Void",
- types = {championType, demonType, minionType, nostealType},
+ id = "demonologist_shadow_feeder",
+ name = "Shadow Feeder",
+ types = {minionType, demonType, championType, nosteaalType},
acquireCost = 0,
- health = 4,
- isGuard = true,
+ health = 1,
+ isGuard = false,
abilities = {
createAbility(
{
- id = "demonologist_keeper_of_the_void_main",
+ id = "Shadow_feeder_main",
trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(2)
- .seq(grantHealthTarget(divide(getCounter(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion").And(isCardName("demonologist_keeper_of_the_void").invert())).count()), 2), { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Void Keeper").apply(selectSource())),
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(2),gainCombatEffect(3),gainCombatEffect(1))
}
- ),
-
- createAbility(
- {
- id = "demonologist_keeper_of_the_void_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = multipleActivations,
- effect = nullEffect()
- }
-
)
},
- layout = createLayout({
- name = "Keeper of the Void",
- art = "art/epicart/spawning_demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
+ layout = createLayout(
+ {
+ name = "Shadow Feeder",
+ art = "art/epicart/deathbringer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
-
-
-
-]],
- health = 4,
- isGuard = true
- })
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
}
)
end
-function demonologist_summon_karamight_carddef()
- local cardLayout = createLayout({
- name = "Summon Karamight",
- art = "art/epicart/raxxa_s_enforcer",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
- ]]
- })
-
- return createSkillDef({
- id = "demonologist_summon_karamight_ability",
- name = "Summon Karamight",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/raxxa_s_enforcer",
- abilities = {
- createAbility({
- id = "demonologist_summon_karamight_ab",
- trigger = uiTrigger,
- activations = singleActivation,
- layout = cardLayout,
- promptType = showPrompt,
- effect = createCardEffect(demonologist_karamight_carddef(), currentInPlayLoc),
- cost = sacrificeSelfCost,
- }),
- },
- layout = createLayout(
+function demonologist_void_guard_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_void_guard",
+ name = "Void guard",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "void_guard_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ )
+ },
+ layout = createLayout(
{
- name = "Summon Karamight",
- art = "art/epicart/raxxa_s_enforcer",
+ name = "Void guard",
+ art = "art/t_midnight_knight",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
+
+
-
-
-
+
+
+
- ]]
+ ]],
+ health = 2,
+ isGuard = true
}
)
-
- })
+ }
+ )
end
-function demonologist_karamight_carddef()
+function demonologist_lesser_devourer_carddef()
return createChampionDef(
{
- id = "demonologist_karamight",
- name = "Karamight",
- types = {championType, demonType, minionType, nostealType},
+ id = "demonologist_lesser_devourer",
+ name = "Lesser Devourer",
+ types = {minionType, championType, demonType, nosteaalType},
acquireCost = 0,
- health = 5,
+ health = 2,
isGuard = true,
abilities = {
createAbility(
{
- id = "demonologist_karamight_main",
- trigger = autoTrigger,
+ id = "lesser_devourer_main",
+ trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(6),
- }
- ),
-
- createAbility(
- {
- id = "demonologist_karamight_stun",
- trigger = uiTrigger,
- cost = noCost,
- activations = singleActivations,
- effect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Karamight").apply(selectSource())
- .seq(pushTargetedEffect({
- desc = "Stun a demon minion you own to gain +2 until your next turn.",
- validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
- min = 1,
- max = 1,
- targetEffect = stunTarget(),
-
- })),
- check = selectLoc(currentInPlayLoc).where(isCardType(minionType)).count().gte(1)
+ effect = hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource())),
}
- ),
-
- createAbility(
- {
- id = "demonologist_karamight_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = multipleActivations,
- effect = nullEffect()
- }
-
)
},
- layout = createLayout({
- name = "Karamight",
- art = "art/epicart/raxxa_s_enforcer",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
+ layout = createLayout(
+ {
+ name = "Lesser Devourer",
+ art = "art/t_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
-
-
-
-
-]],
- health = 5,
+ ]],
+ health = 2,
isGuard = true
- })
+ }
+ )
}
)
end
-function demonologist_summon_laughing_shade_carddef()
+function demonologist_summon_demon_carddef()
local cardLayout = createLayout({
- name = "Summon Laughing Shade",
- art = "art/epicart/dark_prince",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ name = "Summon",
+ art = "icons/the_summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
+
+
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
]]
})
- return createSkillDef({
- id = "demonologist_summon_laughing_shade_ability",
- name = "Summon Laughing Shade",
+ return createSkillDef({
+ id = "demonologist_summon_demon_skill",
+ name = "Summon Demon",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/dark_prince",
+ layoutPath = "icons/the_summoning",
abilities = {
createAbility({
- id = "demonologist_summon_laughing_shade_ab",
+ id = "demonologist_summon_demon_ab",
trigger = uiTrigger,
+ check = minHealthCurrent(2),
activations = singleActivation,
layout = cardLayout,
promptType = showPrompt,
- effect = createCardEffect(demonologist_laughing_shade_carddef(), currentInPlayLoc),
- cost = sacrificeSelfCost,
- }),
- },
- layout = createLayout(
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
{
- name = "Summon Laughing Shade",
- art = "art/epicart/dark_prince",
+ name = "Demonic leech",
+ art = "art/t_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
-
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon",
+ art = "icons/the_summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
]]
}
@@ -2977,130 +2906,225 @@ into play.
})
end
-function demonologist_laughing_shade_carddef()
+function demonologist_demonic_leech_carddef()
return createChampionDef(
{
- id = "demonologist_laughing_shade",
- name = "Laughing Shade",
- types = {championType, demonType, minionType, nostealType},
+ id = "demonologist_demonic_leech",
+ name = "Demonic leech",
+ types = {minionType, championType, demonType, nostealType, tokenType},
acquireCost = 0,
- health = 5,
+ health = 1,
isGuard = false,
abilities = {
createAbility(
{
- id = "demonologist_laughing_shade_main",
- trigger = uiTrigger,
+ id = "demonic_leech_main",
+ trigger = autoTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(4)
- .seq(pushChoiceEffect(
- {
- choices = {
- {
- effect = pushTargetedEffect({
- desc = "Sacrifice a Action from the market. ",
- validTargets = selectLoc(centerRowLoc).where(isCardType(actionType)),
- min = 0,
- max = 1,
- targetEffect = sacrificeTarget().seq(gainCombatEffect(2)),
- }),
- layout = layoutCard(
- {
- title = "Laughing Shade",
- art = "art/epicart/dark_prince",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- tags = {gainCombatTag}
- },
- {
- effect = pushTargetedEffect({
- desc = "Sacrifice a Champion from the market. ",
- validTargets = selectLoc(centerRowLoc).where(isCardType(championType)),
- min = 0,
- max = 1,
- targetEffect = sacrificeTarget().seq(gainHealthEffect(3)),
- }),
- layout = layoutCard(
- {
- title = "Laughing Shade",
- art = "art/epicart/dark_prince",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- }
- }
- }
- )),
-
+ effect = hitOpponentEffect(1)
+ .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
}
),
-
- createAbility(
+ createAbility(
{
- id = "demonologist_laughing_shade_sac",
+ id = "demonic_leech_explode",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(5))).count().gte(1),
+ hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
+ nullEffect()),
+ }),
+
+ createAbility(
+ {
+ id = "demonic_leech_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
- activations = multipleActivations,
+ activations = singleActivations,
effect = nullEffect()
}
)
},
- layout = createLayout({
- name = "Laughing Shade",
- art = "art/epicart/dark_prince",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/t_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-]],
- health = 5,
+ ]],
+ health = 1,
isGuard = false
- })
+ }
+ )
}
)
end
-function demonologist_summon_ingaitch_carddef()
+function demonologist_fel_hound_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "demonologist_fel_hound",
+ name = "Fel hound",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "fel_hound_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_succubus_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_succubus",
+ name = "Succubus",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "succubus_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushTargetedEffect({
+ desc = "Give target champion -1 permanently.",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
+ min = 0,
+ max = 1,
+ targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
+ }),
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function demonologist_summon_demon_master_carddef()
local cardLayout = createLayout({
- name = "Summon Ingaitch the Ravenous",
- art = "art/epicart/mythic_monster",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ name = "Summon Demon Master",
+ art = "art/t_angry_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
+
+
-
+(It has {combat_1} and 4{shield} and can prepare up to 2 other demon minions.)" fontsize="24" flexiblewidth="10" />
@@ -3108,41 +3132,38 @@ function demonologist_summon_ingaitch_carddef()
})
return createSkillDef({
- id = "demonologist_summon_ingaitch_ability",
- name = "Summon Ingaitch the Ravenous",
+ id = "demonologist_summon_demon_master_ability",
+ name = "Summon Demon Master",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/mythic_monster",
+ layoutPath = "art/t_angry_skeleton",
abilities = {
createAbility({
- id = "demonologist_summon_ingaitch_ab",
+ id = "demonologist_summon_demon_master_ab",
trigger = uiTrigger,
activations = singleActivation,
layout = cardLayout,
promptType = showPrompt,
- effect = createCardEffect(demonologist_ingaitch_carddef(), currentInPlayLoc),
- check = getTurnsPlayed(currentPid).gte(3),
+ effect = createCardEffect(demonologist_demon_master_carddef(), currentInPlayLoc),
cost = sacrificeSelfCost,
}),
},
-
layout = createLayout(
{
- name = "Summon Ingaitch the Ravenous",
- art = "art/epicart/mythic_monster",
+ name = "Summon Demon Master",
+ art = "art/t_angry_skeleton",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
+
+
-
+(It has {combat_1} and 4{shield} and can prepare up to 2 other demon minions.)" fontsize="24" flexiblewidth="10" />
@@ -3153,79 +3174,35 @@ function demonologist_summon_ingaitch_carddef()
})
end
-function demonologist_ingaitch_carddef()
+function demonologist_demon_master_carddef()
return createChampionDef(
{
- id = "demonologist_ingaitch",
- name = "Ingaitch the Ravenous",
+ id = "demonologist_demon_master",
+ name = "Demon Master",
types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- health = 7,
+ health = 4,
isGuard = false,
abilities = {
- createAbility(
+ createAbility(
{
- id = "demonologist_ingaitch_main",
+ id = "demonologist_demon_master_main",
trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(7)
- }
- ),
+ effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ desc = "Prepare up to 2 other demon minions in play.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType).And(isCardName("demonologist_demon_master").invert())),
+ min = 0,
+ max = 2,
+ targetEffect = prepareTarget()
- createAbility(
+ }))
+ }
+ ),
+ createAbility(
{
- id = "demonologist_ingaitch_choice",
- trigger = onExpendTrigger,
- cost = noCost,
- activations = singleActivations,
- effect = gainCombatEffect(4)
- .seq(pushChoiceEffect(
- {
- choices = {
- {
- effect = gainHealthEffect(-3),
- layout = layoutCard(
- {
- title = "Ingaitch the Ravenous",
- art = "art/epicart/mythic_monster",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- tags = {gainCombatTag}
- },
- {
- effect = grantHealthTarget(-1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Ingaitch").apply(selectSource()),
- layout = layoutCard(
- {
- title = "Ingaitch the Ravenous",
- art = "art/epicart/mythic_monster",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- }
- }
- }
- )),
-
- }
- ),
-
- createAbility(
- {
- id = "demonologist_ingaitch_sac",
+ id = "demonologist_demon_master_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
activations = multipleActivations,
@@ -3235,209 +3212,82 @@ function demonologist_ingaitch_carddef()
)
},
layout = createLayout({
- name = "Ingaitch the Ravenous",
- art = "art/epicart/mythic_monster",
+ name = "Demon Master",
+ art = "art/t_angry_skeleton",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
-
-
-
+
+
+
-
-
-
+
+
]],
- health = 7,
+ health = 4,
isGuard = false
})
}
)
end
-
--- START Dark Summon SKILL
-function demonologist_dark_summon_carddef()
+function demonologist_summon_incubus_carddef()
local cardLayout = createLayout({
- name = "Dark Summon",
- art = "art/epicart/dark_leader",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ name = "Summon Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
]]
})
- return createSkillDef({
- id = "demonologist_dark_summon_skill",
- name = "Dark Summon",
+ return createSkillDef({
+ id = "demonologist_summon_incubus_ability",
+ name = "Summon Incubus",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/dark_leader",
+ layoutPath = "art/epicart/guilt_demon",
abilities = {
createAbility({
- id = "demonologist_dark_summon_ab",
+ id = "demonologist_summon_incubus_ab",
trigger = uiTrigger,
- check = minHealthCurrent(2),
activations = singleActivation,
layout = cardLayout,
promptType = showPrompt,
- effect =pushChoiceEffectWithTitle(
- {
- choices = {
- {
- effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
- layout = createLayout(
- {
- name = "Giant Demonic Leech",
- art = "art/T_wurm",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 2,
- isGuard = false
- }
- ),
- tags = {gainCombatTag}
- },
-
- {
- effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
- layout = createLayout(
- {
- name = "Raging Fel Hound",
- art = "art/epicart/demon_token",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 2,
- isGuard = false
- }
- ),
- tags = {gainCombatTag}
- },
-
- {
- effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
- layout = createLayout(
- {
- name = "Dark Succubus",
- art = "art/epicart/Succubus",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 2,
- isGuard = false
- }
- ),
- }
- },
- upperTitle = "Randomly summon one of these 3 demon tokens into play.",
- lowerTitle = "Click any card to proceed."
- }),
- cost = goldCost(2),
+ effect = createCardEffect(demonologist_incubus_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
}),
},
layout = createLayout(
{
- name = "Dark Summon",
- art = "art/epicart/dark_leader",
+ name = "Summon Incubus",
+ art = "art/epicart/guilt_demon",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
]]
}
@@ -3445,512 +3295,557 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
})
end
--- END Summon Demon Skill
-function demonologist_giant_demonic_leech_carddef()
+function demonologist_incubus_carddef()
return createChampionDef(
{
- id = "demonologist_giant_demonic_leech",
- name = "Demonic leech",
- types = {minionType, championType, demonType, nostealType, tokenType},
+ id = "demonologist_incubus",
+ name = "Incubus",
+ types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- health = 2,
+ health = 4,
isGuard = false,
abilities = {
createAbility(
{
- id = "giant_demonic_leech_main",
- trigger = autoTrigger,
+ id = "demonologist_incubus_main",
+ trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = hitOpponentEffect(1)
- .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
+ effect = gainCombatEffect(3).seq(gainCombatEffect(getCounter("incubus")))
}
),
+
createAbility(
{
- id = "giant_demonic_leech_explode",
+ id = "demonologist_incubus_main",
trigger = startOfTurnTrigger,
cost = noCost,
- activations = singleActivations,
- effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(6))).count().gte(1),
- hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
- nullEffect()),
- }),
-
- createAbility(
+ activations = multipleActivations,
+ effect = incrementCounterEffect("incubus", 1)
+ }
+ ),
+
+ createAbility(
{
- id = "giant_demonic_leech_sac",
+ id = "demonologist_incubus_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
- activations = singleActivations,
+ activations = multipleActivations,
effect = nullEffect()
}
)
},
- layout = createLayout(
- {
- name = "Giant Demonic Leech",
- art = "art/epicart/sand_wurm",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
+ layout = createLayout({
+ name = "Incubus",
+ art = "art/epicart/guilt_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_summon_keeper_of_the_void_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
-
+
-
-
+
+
+ ]]
+ })
-
-
+ return createSkillDef({
+ id = "demonologist_summon_keeper_of_the_void_ability",
+ name = "Summon Keeper of the Void",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/spawning_demon",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_keeper_of_the_void_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_keeper_of_the_void_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
-
+
- ]],
- health = 2,
- isGuard = false
+ ]]
}
)
- }
- )
+
+ })
end
-function demonologist_raging_fel_hound_carddef()
---This is a token champion, that self-sacrifices when it leaves play
+function demonologist_keeper_of_the_void_carddef()
return createChampionDef(
{
- id = "demonologist_raging_fel_hound",
- name = "Raging Fel Hound",
- types = {minionType, championType, demonType, nostealType, tokenType},
+ id = "demonologist_keeper_of_the_void",
+ name = "Keeper of the Void",
+ types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- health = 2,
- isGuard = false,
+ health = 4,
+ isGuard = true,
abilities = {
- --base ability
createAbility(
{
- id = "raging_fel_hound_main",
- trigger = autoTrigger,
+ id = "demonologist_keeper_of_the_void_main",
+ trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
effect = gainCombatEffect(2)
-
+ .seq(grantHealthTarget(divide(getCounter(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion").And(isCardName("demonologist_keeper_of_the_void").invert())).count()), 2), { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Void Keeper").apply(selectSource())),
}
- )
- ,
- --self-sac ability
- createAbility(
+ ),
+
+ createAbility(
{
- id = "raging_fel_hound_sac",
+ id = "demonologist_keeper_of_the_void_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
- activations = singleActivations,
+ activations = multipleActivations,
effect = nullEffect()
}
- )},
- layout = createLayout(
- {
- name = "Raging Fel Hound",
- art = "art/epicart/trihorror",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
+ )
+ },
+ layout = createLayout({
+ name = "Keeper of the Void",
+ art = "art/epicart/spawning_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 4,
+ isGuard = true
+ })
+ }
+ )
+end
+
+function demonologist_summon_karamight_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
-
+
-
+
- ]],
- health = 2,
- isGuard = false
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_karamight_ability",
+ name = "Summon Karamight",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/raxxa_s_enforcer",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_karamight_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_karamight_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}
)
- }
- )
+
+ })
end
-function demonologist_dark_succubus_carddef()
+function demonologist_karamight_carddef()
return createChampionDef(
{
- id = "demonologist_dark_succubus",
- name = "Dark Succubus",
- types = {minionType, championType, demonType, nostealType, tokenType},
+ id = "demonologist_karamight",
+ name = "Karamight",
+ types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- health = 2,
- isGuard = false,
+ health = 5,
+ isGuard = true,
abilities = {
createAbility(
{
- id = "dark_succubus_main",
- trigger = uiTrigger,
+ id = "demonologist_karamight_main",
+ trigger = autoTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = pushTargetedEffect({
- desc = "Give target champion -1 permanently.",
- validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
- min = 0,
- max = 1,
- targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
- }),
-
+ effect = gainCombatEffect(6),
}
- )
- ,
- --self-sac ability
- createAbility(
+ ),
+
+ createAbility(
{
- id = "dark_succubus_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = singleActivations,
- effect = nullEffect()
- }
-
- )},
- layout = createLayout(
- {
- name = "Dark Succubus",
- art = "art/epicart/mirage_wielder",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 2,
- isGuard = false
- }
- )
- }
- )
-end
-
--- START Void sentinel CARD
-function demonologist_void_sentinel_carddef()
- return createChampionDef(
- {
- id = "demonologist_void_sentinel",
- name = "Void Sentinel",
- types = {minionType, championType, demonType, nosteaalType},
- acquireCost = 0,
- health = 2,
- isGuard = true,
- abilities = {
- createAbility(
- {
- id = "void_sentinel_main",
- trigger = autoTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(1)
-
- }
- ),
- createAbility(
- {
- id = "void_sentinel_combo",
+ id = "demonologist_karamight_stun",
trigger = uiTrigger,
cost = noCost,
activations = singleActivations,
- check = selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion")).count().gte(3),
- effect = hitOpponentEffect(3)
-
- }
- ),
- },
- layout = createLayout(
- {
- name = "Void Sentinel",
- art = "art/epicart/dark_knight",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 2,
- isGuard = true
- }
- )
- }
- )
-end
--- END Void sentinel CARD
-
--- START Devourer CARD
-function demonologist_devourer_carddef()
- return createChampionDef(
- {
- id = "demonologist_devourer",
- name = "Devourer",
- types = {minionType, championType, demonType, nostealType},
- acquireCost = 0,
- health = 2,
- isGuard = true,
- abilities = {
- createAbility(
- {
- id = "devourer_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(1).seq(hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource()))),
+ effect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Karamight").apply(selectSource())
+ .seq(pushTargetedEffect({
+ desc = "Stun a demon minion you own to gain +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 1,
+ max = 1,
+ targetEffect = stunTarget(),
+
+ })),
+ check = selectLoc(currentInPlayLoc).where(isCardType(minionType)).count().gte(1)
}
),
- createAbility(
+
+ createAbility(
{
- id = "devourer_leaveplay",
+ id = "demonologist_karamight_sac",
trigger = onLeavePlayTrigger,
- cost= noCost,
- activations = singleActivations,
- effect = gainHealthEffect(2),
- }
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
)
},
- layout = createLayout(
- {
- name = "Devourer",
- art = "art/epicart/thrasher_demon",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
+ layout = createLayout({
+ name = "Karamight",
+ art = "art/epicart/raxxa_s_enforcer",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
-
+
-
-
-
+
+
+
- ]],
- health = 2,
+]],
+ health = 5,
isGuard = true
- }
- )
+ })
}
)
end
--- END Devourer CARD
-
--- START Fel Summon
-function demonologist_fel_summon_carddef()
+function demonologist_summon_laughing_shade_carddef()
local cardLayout = createLayout({
- name = "Fel Summon",
- art = "art/epicart/corpsemonger",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ name = "Summon Laughing Shade",
+ art = "art/epicart/dark_prince",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
]]
})
- return createSkillDef({
- id = "demonologist_fel_summon_skill",
- name = "Summon Demon",
+ return createSkillDef({
+ id = "demonologist_summon_laughing_shade_ability",
+ name = "Summon Laughing Shade",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/corpsemonger",
+ layoutPath = "art/epicart/dark_prince",
abilities = {
createAbility({
- id = "demonologist_fel_summon_demon_ab",
+ id = "demonologist_summon_laughing_shade_ab",
trigger = uiTrigger,
- check = minHealthCurrent(2),
activations = singleActivation,
layout = cardLayout,
promptType = showPrompt,
- effect =pushChoiceEffectWithTitle(
- {
- choices = {
- {
- effect = hitSelfEffect(1)
- .seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()).seq(drawCardsEffect(1)),
- layout = createLayout(
+ effect = createCardEffect(demonologist_laughing_shade_carddef(), currentInPlayLoc),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
{
- name = "Demonic leech",
- art = "art/T_wurm",
+ name = "Summon Laughing Shade",
+ art = "art/epicart/dark_prince",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
+ xmlText=[[
+
-
+
-
-
-
-
-
-
-
-
-
+
- ]],
- health = 1,
- isGuard = false
+ ]]
}
- ),
- tags = {gainCombatTag}
- },
-
- {
- effect = hitSelfEffect(1)
- .seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
- layout = createLayout(
- {
- name = "Fel hound",
- art = "art/epicart/demon_token",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
+ )
+
+ })
+end
+
+function demonologist_laughing_shade_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_laughing_shade",
+ name = "Laughing Shade",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 5,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_laughing_shade_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4)
+ .seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a Action from the market. ",
+ validTargets = selectLoc(centerRowLoc).where(isCardType(actionType)),
+ min = 0,
+ max = 1,
+ targetEffect = sacrificeTarget().seq(gainCombatEffect(2)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Laughing Shade",
+ art = "art/epicart/dark_prince",
+ xmlText=[[
+
+
+
+
- ]],
- health = 1,
- isGuard = false
- }
- ),
+ ]]
+ }
+ ),
tags = {gainCombatTag}
},
-
- {
- effect = hitSelfEffect(1)
- .seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
- layout = createLayout(
- {
- name = "Succubus",
- art = "art/epicart/Succubus",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
+ {
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a Champion from the market. ",
+ validTargets = selectLoc(centerRowLoc).where(isCardType(championType)),
+ min = 0,
+ max = 1,
+ targetEffect = sacrificeTarget().seq(gainHealthEffect(3)),
+ }),
+ layout = layoutCard(
+ {
+ title = "Laughing Shade",
+ art = "art/epicart/dark_prince",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )),
+
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_laughing_shade_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Laughing Shade",
+ art = "art/epicart/dark_prince",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+]],
+ health = 5,
+ isGuard = false
+ })
+ }
+ )
+end
+
+function demonologist_summon_ingaitch_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
-
+
-
+
-
-
-
- ]],
- health = 1,
- isGuard = false
- }
- ),
- }
- },
- upperTitle = "Summon one of these 3 demon tokens, randomly. Then draw a card.",
- lowerTitle = "Click any card to proceed."
- })
- .seq(drawCardsEffect(1)),
- cost = goldCost(2),
+ ]]
+ })
+
+ return createSkillDef({
+ id = "demonologist_summon_ingaitch_ability",
+ name = "Summon Ingaitch the Ravenous",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/mythic_monster",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_ingaitch_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = createCardEffect(demonologist_ingaitch_carddef(), currentInPlayLoc),
+ check = getTurnsPlayed(currentPid).gte(3),
+ cost = sacrificeSelfCost,
}),
},
+
layout = createLayout(
{
- name = "Fel Summon",
- art = "art/epicart/corpsemonger",
+ name = "Summon Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
]]
}
@@ -3959,31 +3854,135 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
})
end
-
--- START Infernal Summon SKILL
-function demonologist_infernal_summon_carddef()
- local cardLayout = createLayout({
- name = "Infernal Summon",
- art = "art/epicart/abyss_summoner",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+function demonologist_ingaitch_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_ingaitch",
+ name = "Ingaitch the Ravenous",
+ types = {championType, demonType, minionType, nostealType},
+ acquireCost = 0,
+ health = 7,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_ingaitch_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(7)
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_ingaitch_choice",
+ trigger = onExpendTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(4)
+ .seq(pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainHealthEffect(-3),
+ layout = layoutCard(
+ {
+ title = "Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = grantHealthTarget(-1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Ingaitch").apply(selectSource()),
+ layout = layoutCard(
+ {
+ title = "Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ )),
+
+ }
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_ingaitch_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = multipleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+ layout = createLayout({
+ name = "Ingaitch the Ravenous",
+ art = "art/epicart/mythic_monster",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+]],
+ health = 7,
+ isGuard = false
+ })
+ }
+ )
+end
+
+
+-- START Dark Summon SKILL
+function demonologist_dark_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Dark Summon",
+ art = "art/epicart/dark_leader",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3991,14 +3990,14 @@ function demonologist_infernal_summon_carddef()
})
return createSkillDef({
- id = "demonologist_infernal_summon_skill",
- name = "Infernal Summon",
+ id = "demonologist_dark_summon_skill",
+ name = "Dark Summon",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/abyss_summoner",
+ layoutPath = "art/epicart/dark_leader",
abilities = {
createAbility({
- id = "demonologist_infernal_summon_ab",
+ id = "demonologist_dark_summon_ab",
trigger = uiTrigger,
check = minHealthCurrent(2),
activations = singleActivation,
@@ -4009,14 +4008,14 @@ function demonologist_infernal_summon_carddef()
choices = {
{
effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Demonic Tyrant Leech",
- art = "art/epicart/rampaging_wurm",
+ name = "Giant Demonic Leech",
+ art = "art/t_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -4025,7 +4024,8 @@ function demonologist_infernal_summon_carddef()
-
+
@@ -4033,7 +4033,7 @@ function demonologist_infernal_summon_carddef()
-
+
@@ -4047,14 +4047,14 @@ function demonologist_infernal_summon_carddef()
{
effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Flaming Fel Hound",
- art = "art/epicart/scarros__hound_of_draka",
+ name = "Raging Fel Hound",
+ art = "art/epicart/demon_token",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4063,12 +4063,12 @@ function demonologist_infernal_summon_carddef()
-
+
]],
- health = 3,
+ health = 2,
isGuard = false
}
),
@@ -4077,14 +4077,14 @@ function demonologist_infernal_summon_carddef()
{
effect = hitSelfEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Succubus Queen",
- art = "art/epicart/drain_essence",
+ name = "Dark Succubus",
+ art = "art/epicart/succubus",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4093,8 +4093,7 @@ function demonologist_infernal_summon_carddef()
-
@@ -4118,8 +4117,8 @@ function demonologist_infernal_summon_carddef()
},
layout = createLayout(
{
- name = "Infernal Summon",
- art = "art/epicart/abyss_summoner",
+ name = "Dark Summon",
+ art = "art/epicart/dark_leader",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4137,8 +4136,7 @@ function demonologist_infernal_summon_carddef()
-
+
@@ -4148,12 +4146,13 @@ function demonologist_infernal_summon_carddef()
})
end
+-- END Summon Demon Skill
-function demonologist_demonic_tyrant_leech_carddef()
+function demonologist_giant_demonic_leech_carddef()
return createChampionDef(
{
- id = "demonologist_demonic_tyrant_leech",
- name = "Demonic Tyrant Leech",
+ id = "demonologist_giant_demonic_leech",
+ name = "Demonic leech",
types = {minionType, championType, demonType, nostealType, tokenType},
acquireCost = 0,
health = 2,
@@ -4165,13 +4164,13 @@ function demonologist_demonic_tyrant_leech_carddef()
trigger = autoTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = hitOpponentEffect(1).seq(gainCombatEffect(1))
+ effect = hitOpponentEffect(1)
.seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
}
),
createAbility(
{
- id = "demonic_tyrant_leech_explode",
+ id = "giant_demonic_leech_explode",
trigger = startOfTurnTrigger,
cost = noCost,
activations = singleActivations,
@@ -4182,7 +4181,7 @@ function demonologist_demonic_tyrant_leech_carddef()
createAbility(
{
- id = "demonic_tyrant_leech_sac",
+ id = "giant_demonic_leech_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
activations = singleActivations,
@@ -4193,8 +4192,8 @@ function demonologist_demonic_tyrant_leech_carddef()
},
layout = createLayout(
{
- name = "Demonic Tyrant Leech",
- art = "art/epicart/rampaging_wurm",
+ name = "Giant Demonic Leech",
+ art = "art/epicart/sand_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -4203,7 +4202,8 @@ function demonologist_demonic_tyrant_leech_carddef()
-
+
@@ -4211,7 +4211,7 @@ function demonologist_demonic_tyrant_leech_carddef()
-
+
@@ -4224,7 +4224,7 @@ function demonologist_demonic_tyrant_leech_carddef()
)
end
-function demonologist_flaming_fel_hound_carddef()
+function demonologist_raging_fel_hound_carddef()
--This is a token champion, that self-sacrifices when it leaves play
return createChampionDef(
{
@@ -4238,11 +4238,11 @@ function demonologist_flaming_fel_hound_carddef()
--base ability
createAbility(
{
- id = "flaming_fel_hound_main",
+ id = "raging_fel_hound_main",
trigger = autoTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(3)
+ effect = gainCombatEffect(2)
}
)
@@ -4250,7 +4250,7 @@ function demonologist_flaming_fel_hound_carddef()
--self-sac ability
createAbility(
{
- id = "flaming_fel_hound_sac",
+ id = "raging_fel_hound_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
activations = singleActivations,
@@ -4260,8 +4260,8 @@ function demonologist_flaming_fel_hound_carddef()
)},
layout = createLayout(
{
- name = "Flaming Fel Hound",
- art = "art/epicart/scarros__hound_of_draka",
+ name = "Raging Fel Hound",
+ art = "art/epicart/trihorror",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4270,7 +4270,7 @@ function demonologist_flaming_fel_hound_carddef()
-
+
@@ -4283,11 +4283,11 @@ function demonologist_flaming_fel_hound_carddef()
)
end
-function demonologist_succubus_queen_carddef()
+function demonologist_dark_succubus_carddef()
return createChampionDef(
{
- id = "demonologist_succubus_queen",
- name = "Succubus Queen",
+ id = "demonologist_dark_succubus",
+ name = "Dark Succubus",
types = {minionType, championType, demonType, nostealType, tokenType},
acquireCost = 0,
health = 2,
@@ -4295,17 +4295,17 @@ function demonologist_succubus_queen_carddef()
abilities = {
createAbility(
{
- id = "succubus_queen_main",
+ id = "dark_succubus_main",
trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ effect = pushTargetedEffect({
desc = "Give target champion -1 permanently.",
validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
min = 0,
max = 1,
targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
- })),
+ }),
}
)
@@ -4313,7 +4313,7 @@ function demonologist_succubus_queen_carddef()
--self-sac ability
createAbility(
{
- id = "succubus_queen_sac",
+ id = "dark_succubus_sac",
trigger = onLeavePlayTrigger,
cost = sacrificeSelfCost,
activations = singleActivations,
@@ -4323,8 +4323,8 @@ function demonologist_succubus_queen_carddef()
)},
layout = createLayout(
{
- name = "Succubus Quuen",
- art = "art/epicart/drain_essence",
+ name = "Dark Succubus",
+ art = "art/epicart/mirage_wielder",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4333,8 +4333,7 @@ function demonologist_succubus_queen_carddef()
-
@@ -4352,29 +4351,147 @@ function demonologist_succubus_queen_carddef()
)
end
--- START Malevolent Summon SKILL
-function demonologist_malevolent_summon_carddef()
- local cardLayout = createLayout({
- name = "Malevolent Summon",
- art = "icons/The_Summoning",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
+-- START Void sentinel CARD
+function demonologist_void_sentinel_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_void_sentinel",
+ name = "Void Sentinel",
+ types = {minionType, championType, demonType, nosteaalType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "void_sentinel_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ ),
+ createAbility(
+ {
+ id = "void_sentinel_combo",
+ trigger = uiTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion")).count().gte(3),
+ effect = hitOpponentEffect(3)
+
+ }
+ ),
+ },
+ layout = createLayout(
+ {
+ name = "Void Sentinel",
+ art = "art/epicart/dark_knight",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+-- END Void sentinel CARD
+
+-- START Devourer CARD
+function demonologist_devourer_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_devourer",
+ name = "Devourer",
+ types = {minionType, championType, demonType, nostealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "devourer_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1).seq(hitSelfEffect(1).seq(grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow").apply(selectSource()))),
+ }
+ ),
+ createAbility(
+ {
+ id = "devourer_leaveplay",
+ trigger = onLeavePlayTrigger,
+ cost= noCost,
+ activations = singleActivations,
+ effect = gainHealthEffect(2),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Devourer",
+ art = "art/epicart/thrasher_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+-- END Devourer CARD
+
+
+-- START Fel Summon
+function demonologist_fel_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Fel Summon",
+ art = "art/epicart/corpsemonger",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
-
+
@@ -4382,14 +4499,14 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
})
return createSkillDef({
- id = "demonologist_malevolent_summon_skill",
- name = "Malevolent Summon",
+ id = "demonologist_fel_summon_skill",
+ name = "Summon Demon",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/rift_summoner",
+ layoutPath = "art/epicart/corpsemonger",
abilities = {
createAbility({
- id = "demonologist_malevolent_summon_ab",
+ id = "demonologist_fel_summon_demon_ab",
trigger = uiTrigger,
check = minHealthCurrent(2),
activations = singleActivation,
@@ -4401,14 +4518,14 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
{
effect = hitSelfEffect(1)
.seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()).seq(drawCardsEffect(1)),
layout = createLayout(
{
- name = "Giant Demonic Leech",
- art = "art/epicart/sand_wurm",
+ name = "Demonic leech",
+ art = "art/t_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -4431,7 +4548,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 2,
+ health = 1,
isGuard = false
}
),
@@ -4441,14 +4558,14 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
{
effect = hitSelfEffect(1)
.seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Raging Fel Hound",
- art = "art/epicart/trihorror",
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4462,7 +4579,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 2,
+ health = 1,
isGuard = false
}
),
@@ -4472,14 +4589,14 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
{
effect = hitSelfEffect(1)
.seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Dark Succubus",
- art = "art/epicart/mirage_wielder",
+ name = "Succubus",
+ art = "art/epicart/succubus",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4498,24 +4615,23 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 2,
+ health = 1,
isGuard = false
}
),
}
},
- upperTitle = "Randomly summon one of these 3 demon tokens into play.",
+ upperTitle = "Summon one of these 3 demon tokens, randomly. Then draw a card.",
lowerTitle = "Click any card to proceed."
})
- .seq(drawCardsEffect(1))
- ,
+ .seq(drawCardsEffect(1)),
cost = goldCost(2),
}),
},
layout = createLayout(
{
- name = "Malevolent Summon",
- art = "art/epicart/rift_summoner",
+ name = "Fel Summon",
+ art = "art/epicart/corpsemonger",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4533,7 +4649,7 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
-
+
@@ -4545,29 +4661,30 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
end
--- START Sinister Summon
-function demonologist_sinister_summon_carddef()
+-- START Infernal Summon SKILL
+function demonologist_infernal_summon_carddef()
local cardLayout = createLayout({
- name = "Sinister Summon",
- art = "icons/The_Summoning",
+ name = "Infernal Summon",
+ art = "art/epicart/abyss_summoner",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
-
+
-
+
@@ -4575,14 +4692,14 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
})
return createSkillDef({
- id = "demonologist_sinister_summon_skill",
- name = "Summon Demon",
+ id = "demonologist_infernal_summon_skill",
+ name = "Infernal Summon",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/infernal_gatekeeper",
+ layoutPath = "art/epicart/abyss_summoner",
abilities = {
createAbility({
- id = "demonologist_sinister_summon_demon_ab",
+ id = "demonologist_infernal_summon_ab",
trigger = uiTrigger,
check = minHealthCurrent(2),
activations = singleActivation,
@@ -4592,15 +4709,15 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
{
choices = {
{
- effect = gainHealthEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Demonic leech",
- art = "art/T_wurm",
+ name = "Demonic Tyrant Leech",
+ art = "art/epicart/rampaging_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -4609,8 +4726,7 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
-
+
@@ -4618,12 +4734,12 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
+
]],
- health = 1,
+ health = 2,
isGuard = false
}
),
@@ -4631,15 +4747,15 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
},
{
- effect = gainHealthEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Fel hound",
- art = "art/epicart/demon_token",
+ name = "Flaming Fel Hound",
+ art = "art/epicart/scarros__hound_of_draka",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4648,12 +4764,12 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
+
]],
- health = 1,
+ health = 3,
isGuard = false
}
),
@@ -4661,15 +4777,15 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
},
{
- effect = gainHealthEffect(1).seq(randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-})).seq(noUndoEffect()),
- layout = createLayout(
- {
- name = "Succubus",
- art = "art/epicart/Succubus",
+ effect = hitSelfEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_tyrant_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_queen_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_flaming_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus Queen",
+ art = "art/epicart/drain_essence",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4678,7 +4794,8 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
@@ -4688,23 +4805,22 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 1,
+ health = 2,
isGuard = false
}
),
}
},
- upperTitle = "Summon one of these 3 demon tokens, randomly. Then draw a card.",
+ upperTitle = "Randomly summon one of these 3 demon tokens into play.",
lowerTitle = "Click any card to proceed."
- })
- .seq(drawCardsEffect(1)),
+ }),
cost = goldCost(2),
}),
},
layout = createLayout(
{
- name = "Sinister Summon",
- art = "art/epicart/infernal_gatekeeper",
+ name = "Infernal Summon",
+ art = "art/epicart/abyss_summoner",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4714,15 +4830,16 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
+
-
+
@@ -4733,76 +4850,52 @@ Randomly summon 1 of 3 demon tokens into play." fontsize="20" />
})
end
-
-function demonologist_grimoire_carddef()
- return createDef(
+function demonologist_demonic_tyrant_leech_carddef()
+ return createChampionDef(
{
- id = "demonologist_grimoire",
- name = "Grimoire",
- types = {noStealType, itemType, noPlayType},
+ id = "demonologist_demonic_tyrant_leech",
+ name = "Demonic Tyrant Leech",
+ types = {minionType, championType, demonType, nostealType, tokenType},
acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
+ health = 2,
+ isGuard = false,
abilities = {
createAbility(
{
- id = "demonologist_grimoire",
- layout = cardLayout,
- effect = gainHealthEffect((selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("Minion"))).count()).seq(drawCardsEffect(1)),
+ id = "giant_demonic_leech_main",
trigger = autoTrigger,
- tags = {}
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(1).seq(gainCombatEffect(1))
+ .seq((grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "shadow")).apply(selectSource()))
}
+ ),
+ createAbility(
+ {
+ id = "demonic_tyrant_leech_explode",
+ trigger = startOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardSelf().And(getCardHealth().gte(6))).count().gte(1),
+ hitOpponentEffect(5).seq(sacrificeTarget().apply(selectSource())),
+ nullEffect()),
+ }),
+
+ createAbility(
+ {
+ id = "demonic_tyrant_leech_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
)
},
layout = createLayout(
{
- name = "Grimoire",
- art = "art/T_Evangelize",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
- ]],
- }
- )
- }
- )
-end
-
-function demonologist_scroll_of_summoning_carddef()
- return createDef(
- {
- id = "demonologist_sos",
- name = "Scroll of Summoning",
- types = {noStealType, itemType, noPlayType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "demonologist_sos",
- layout = cardLayout,
- effect = pushChoiceEffectWithTitle(
- {
- choices = {
- {
- effect = createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc),
- layout = createLayout(
- {
- name = "Demonic leech",
- art = "art/T_wurm",
+ name = "Demonic Tyrant Leech",
+ art = "art/epicart/rampaging_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -4811,8 +4904,7 @@ function demonologist_scroll_of_summoning_carddef()
-
+
@@ -4820,24 +4912,57 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
+
]],
- health = 1,
+ health = 2,
isGuard = false
}
- ),
- tags = {gainCombatTag}
- },
-
- {
- effect = createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc),
- layout = createLayout(
+ )
+ }
+ )
+end
+
+function demonologist_flaming_fel_hound_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "demonologist_raging_fel_hound",
+ name = "Raging Fel Hound",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "flaming_fel_hound_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3)
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "flaming_fel_hound_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
{
- name = "Fel hound",
- art = "art/epicart/demon_token",
+ name = "Flaming Fel Hound",
+ art = "art/epicart/scarros__hound_of_draka",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4846,24 +4971,61 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
+
]],
- health = 1,
+ health = 2,
isGuard = false
}
- ),
- tags = {gainCombatTag}
- },
-
- {
- effect = createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc),
- layout = createLayout(
+ )
+ }
+ )
+end
+
+function demonologist_succubus_queen_carddef()
+ return createChampionDef(
+ {
+ id = "demonologist_succubus_queen",
+ name = "Succubus Queen",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "succubus_queen_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1).seq(pushTargetedEffect({
+ desc = "Give target champion -1 permanently.",
+ validTargets = oppStunnableSelector().where(isCardChampion().And(getCardHealth().gte(2))),
+ min = 0,
+ max = 1,
+ targetEffect = (grantHealthTarget(-1, { SlotExpireEnum.never }, nullEffect(), "shadow")),
+ })),
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "succubus_queen_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
{
- name = "Succubus",
- art = "art/epicart/Succubus",
+ name = "Succubus Quuen",
+ art = "art/epicart/drain_essence",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -4872,7 +5034,8 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
-
@@ -4882,225 +5045,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 1,
- isGuard = false
- }
- ),
- }
- },
- upperTitle = "Choose one of these 3 demon tokens to summon.",
- lowerTitle = "Click the card you want to summon."
- })
- .seq(drawCardsEffect(1)),
- trigger = autoTrigger,
- tags = {}
- }
- )
- },
- layout = createLayout(
- {
- name = "Scroll of Summoning",
- art = "art/treasures/T_Magic_Scroll_Souveraine",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
-
-
-
-
-
-
-
-
- ]]
- }
- )
- }
- )
-end
-
-function demonologist_flawless_shadow_gem_carddef()
- return createDef(
- {
- id = "demonologist_flawless_shadow_gem",
- name = "Flawless Shadow Gem",
- types = {gemType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "demonologist_flawless_shadow_gem_sac",
- cost = noCost,
- trigger = autoTrigger,
- activations = singleActivations,
- effect = gainGoldEffect(2),
- tags = {}
- }
- ),
-
- createAbility(
- {
- id = "demonologist_flawless_shadow_gem_buff",
- cost = noCost,
- trigger = uiTrigger,
- activations = singleActivations,
- effect = pushTargetedEffect({
- desc = "Give one minion +2 until your next turn.",
- validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
- min = 0,
- max = 1,
- targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow"),
- }),
- tags = {}
- }
- ),
-
- },
- layout = createLayout(
- {
- name = "Flawless Shadow Gem",
- art = "art/treasures/thief_brillant_ruby",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
-
-
-
-
-
- ]]
- }
- )
- }
- )
-end
-
-function demonologist_butcherclaw_carddef()
- return createChampionDef(
- {
- id = "demonologist_butcherclaw",
- name = "Butcherclaw",
- types = {championType, demonType, minionType, nostealType},
- acquireCost = 0,
- health = 2,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "demonologist_butcherclaw_main",
- trigger = autoTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(2),
- }
- ),
-
- createAbility(
- {
- id = "demonologist_butcherclaw_spike",
- trigger = uiTrigger,
- activations = singleActivations,
- prompt = showPrompt,
- effect = pushTargetedEffect({
- desc = "Sacrifice a champion in your discard pile. Sprout a spike equal to its cost.",
- validTargets = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion().And(getCardCost().gte(1))),
- min = 1,
- max = 1,
- targetEffect = moveTarget(loc(currentPid, asidePloc))
- .seq(incrementCounterEffect("black_spike_guard", selectLoc(loc(currentPid, asidePloc)).take(1).sum(getCardCost())))
- .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc))))
- .seq(createCardEffect(demonologist_spike_carddef(), revealLoc))
- .seq(grantHealthTarget(getCounter("black_spike_guard")).apply(selectLoc(revealLoc)))
- .seq(moveTarget(currentInPlayLoc).apply(selectLoc(revealLoc)))
- .seq(resetCounterEffect("black_spike_guard"))
- })
-
-
- ,
- check = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion()).count().gte(1)
-
- }
- ),
-
- },
- layout = createLayout({
- name = "Butcherclaw",
- prompt = showPrompt,
- art = "icons/slaughterclaw",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
-
-
-]],
- health = 2,
- isGuard = false
- })
- }
- )
-end
-
-function demonologist_spike_carddef()
- return createChampionDef(
- {
- id = "demonologist_spike",
- name = "Spike",
- types = {championType, demonType, nostealType, tokenType},
- acquireCost = 0,
- health = 0,
- isGuard = false,
- abilities = {
- createAbility(
- {
- id = "spike_main",
- trigger = autoTrigger,
- cost = expendCost,
- activations = singleActivations,
- effect = gainCombatEffect(selectSource().sum(getCardHealth()))
- }
- ),
-
- createAbility(
- {
- id = "spike_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = singleActivations,
- effect = hitSelfEffect(2)
- }
-
- )
- },
- layout = createLayout(
- {
- name = "Spike",
- art = "features/warinthewild/slaughterclaw_spike",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
-
-
- ]],
- health = 0,
+ health = 2,
isGuard = false
}
)
@@ -5108,27 +5053,29 @@ function demonologist_spike_carddef()
)
end
-function demonologist_summon_demon_ability_carddef()
+-- START Malevolent Summon SKILL
+function demonologist_malevolent_summon_carddef()
local cardLayout = createLayout({
- name = "Summon Demon Minion",
- art = "icons/The_Summoning",
+ name = "Malevolent Summon",
+ art = "icons/the_summoning",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
-
+
-
+
-
+
@@ -5136,15 +5083,16 @@ function demonologist_summon_demon_ability_carddef()
})
return createSkillDef({
- id = "demonologist_summon_demon_ability",
- name = "Summon Demon Minion",
- types = { abilityType },
+ id = "demonologist_malevolent_summon_skill",
+ name = "Malevolent Summon",
+ types = { skillType },
layout = cardLayout,
- layoutPath = "icons/The_Summoning",
+ layoutPath = "art/epicart/rift_summoner",
abilities = {
createAbility({
- id = "demonologist_summon_demon_minion_ab",
+ id = "demonologist_malevolent_summon_ab",
trigger = uiTrigger,
+ check = minHealthCurrent(2),
activations = singleActivation,
layout = cardLayout,
promptType = showPrompt,
@@ -5152,15 +5100,16 @@ function demonologist_summon_demon_ability_carddef()
{
choices = {
{
- effect = randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-}).seq(noUndoEffect()),
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Demonic leech",
- art = "art/T_wurm",
+ name = "Giant Demonic Leech",
+ art = "art/epicart/sand_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -5183,7 +5132,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 1,
+ health = 2,
isGuard = false
}
),
@@ -5191,15 +5140,16 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
},
{
- effect = randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-}).seq(noUndoEffect()),
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Fel hound",
- art = "art/epicart/demon_token",
+ name = "Raging Fel Hound",
+ art = "art/epicart/trihorror",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -5213,7 +5163,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 1,
+ health = 2,
isGuard = false
}
),
@@ -5221,15 +5171,16 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
},
{
- effect = randomEffect({
- valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
- valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
-}).seq(noUndoEffect()),
+ effect = hitSelfEffect(1)
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_giant_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_dark_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_raging_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
layout = createLayout(
{
- name = "Succubus",
- art = "art/epicart/Succubus",
+ name = "Dark Succubus",
+ art = "art/epicart/mirage_wielder",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -5248,39 +5199,42 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
]],
- health = 1,
+ health = 2,
isGuard = false
}
),
}
},
- upperTitle = "Summon one of these 3 demon tokens, randomly.",
+ upperTitle = "Randomly summon one of these 3 demon tokens into play.",
lowerTitle = "Click any card to proceed."
- }),
- cost = sacrificeSelfCost,
+ })
+ .seq(drawCardsEffect(1))
+ ,
+ cost = goldCost(2),
}),
},
layout = createLayout(
{
- name = "Summon Demon Minion",
- art = "icons/The_Summoning",
+ name = "Malevolent Summon",
+ art = "art/epicart/rift_summoner",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
-
+
-
+
@@ -5291,152 +5245,234 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
})
end
-function demonologist_demonic_amulet_carddef()
- local cardLayout = createLayout({
- name = "Demonic Amulet",
- art = "art/T_wizard_silverskull_amulet",
+-- START Sinister Summon
+function demonologist_sinister_summon_carddef()
+ local cardLayout = createLayout({
+ name = "Sinister Summon",
+ art = "icons/the_summoning",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
-
-
-
+ xmlText=[[
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
- ]]
+ ]]
})
-
- return createMagicArmorDef(
- {
- id = "demonologist_demonic_amulet",
- name = "Demonic Amulet",
- types = {magicArmorType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Armour",
- layout = cardLayout,
- layoutPath = "icons/wizard_pure_channel",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "demonologist_demonic_amulet",
- cost = expendCost,
- trigger = autoTrigger,
- promptType = showPrompt,
- layout = cardLayout,
- activations = singleActivations,
- effect = gainHealthEffect(2),
- check= minHealthCurrent(35)
- .And(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType(demonType).And(isCardType(tokenType))).count().gte(1)),
- tags = {}
- }
- ),
-
- },
-
-
- }
- )
-end
-function demonologist_summoner_s_robes_carddef()
+ return createSkillDef({
+ id = "demonologist_sinister_summon_skill",
+ name = "Summon Demon",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/infernal_gatekeeper",
+ abilities = {
+ createAbility({
+ id = "demonologist_sinister_summon_demon_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = gainHealthEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/t_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
- local cardLayout = createLayout({
- name = "Summoner's Robes",
- art = "art/T_wizard_runic_robes",
- frame = "frames/necromancer_frames/necromancer_item_cardframe",
- xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = gainHealthEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
-
+
-
-
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = gainHealthEffect(1).seq(randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+})).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly. Then draw a card.",
+ lowerTitle = "Click any card to proceed."
+ })
+ .seq(drawCardsEffect(1)),
+ cost = goldCost(2),
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Sinister Summon",
+ art = "art/epicart/infernal_gatekeeper",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
]]
+ }
+ )
+
})
-
- return createMagicArmorDef(
+end
+
+
+function demonologist_grimoire_carddef()
+ return createDef(
{
- id = "demonologist_summoner_s_robes",
- name = "Demonic Amulet",
- types = {magicArmorType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Armour",
- layout = cardLayout,
- layoutPath = "icons/wizard_runic_robes",
+ id = "demonologist_grimoire",
+ name = "Grimoire",
+ types = {noStealType, itemType, noPlayType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
playLocation = castPloc,
abilities = {
- createAbility(
+ createAbility(
{
- id = "demonologist_summoner_s_robes",
- cost = expendCost,
- trigger = uiTrigger,
- promptType = showPrompt,
- layout = cardLayout,
- activations = singleActivations,
- effect = gainHealthEffect(-2).seq(addSlotToPlayerEffect(controllerPid, createPlayerIntExpressionSlot(skillCostModKey, toIntExpression(-1), { endOfTurnExpiry }))),
- check= minHealthCurrent(25),
+ id = "demonologist_grimoire",
+ layout = cardLayout,
+ effect = gainHealthEffect((selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("Minion"))).count()).seq(drawCardsEffect(1)),
+ trigger = autoTrigger,
tags = {}
}
- ),
-
- },
-
-
- }
- )
-end
-
-
--- Pyromancer cards -----------------------------------------------------------------------------------------------------------------------
-function pyromancer_combust_carddef()
- return createDef(
- {
- id = "Pyromancer_Combust",
- name = "combust",
- types = {noStealType, actionType},
- acquireCost = 0,
- cardTypeLabel = "Action",
- playLocation = castPloc,
- abilities = {
- createAbility({
- id="Pyromancer_Combust_combat",
- trigger= autoTrigger,
- effect = gainCombatEffect(1)
- }),
- createAbility({
- id="Pyromancer_Combust_FGsac",
- trigger= autoTrigger,
- activations = singleActivations,
- check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
- effect = gainCombatEffect(2)
-
- })
+ )
},
layout = createLayout(
{
- name = "Combust",
- art = "art/epicart/zaltessa_s_fire",
- frame = "frames/Wizard_CardFrame",
+ name = "Grimoire",
+ art = "art/t_evangelize",
+ frame = "frames/wizard_cardframe",
xmlText=[[
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
]],
}
@@ -5445,57 +5481,118 @@ function pyromancer_combust_carddef()
)
end
-function pyromancer_sear_carddef()
+function demonologist_scroll_of_summoning_carddef()
return createDef(
{
- id = "Pyromancer_Sear",
- name = "sear",
- types = {noStealType, actionType},
+ id = "demonologist_sos",
+ name = "Scroll of Summoning",
+ types = {noStealType, itemType, noPlayType},
acquireCost = 0,
- cardTypeLabel = "Action",
+ cardTypeLabel = "Item",
playLocation = castPloc,
abilities = {
- createAbility({
- id = "Pyromancer_Sear",
+ createAbility(
+ {
+ id = "demonologist_sos",
layout = cardLayout,
- effect = gainCombatEffect(2),
- trigger = autoTrigger,
- tags = {}
- }
- )
- },
- layout = createLayout(
+ effect = pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc),
+ layout = createLayout(
{
- name = "Sear",
- art = "art/epicart/flame_spike",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
+ name = "Demonic leech",
+ art = "art/t_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
]],
+ health = 1,
+ isGuard = false
}
- )
- }
- )
-end
-
-function pyromancer_scorch_carddef()
- return createDef(
- {
- id = "pyromancer_scorch",
- name = "Scorch",
- types = {noStealType, actionType},
- acquireCost = 0,
- cardTypeLabel = "Action",
- playLocation = castPloc,
- abilities = {
- createAbility({
- id = "Pyromancer_Scorch",
- layout = cardLayout,
- effect = gainCombatEffect(1).seq(damageTarget(1).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc),
+ layout = createLayout(
+ {
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc),
+ layout = createLayout(
+ {
+ name = "Succubus",
+ art = "art/epicart/succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Choose one of these 3 demon tokens to summon.",
+ lowerTitle = "Click the card you want to summon."
+ })
+ .seq(drawCardsEffect(1)),
trigger = autoTrigger,
tags = {}
}
@@ -5503,554 +5600,412 @@ function pyromancer_scorch_carddef()
},
layout = createLayout(
{
- name = "Scorch",
- art = "art/epicart/flame_strike",
- frame = "frames/Wizard_CardFrame",
+ name = "Scroll of Summoning",
+ art = "art/treasures/t_magic_scroll_souveraine",
+ frame = "frames/wizard_cardframe",
xmlText=[[
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- ]],
- }
+ ]]
+ }
)
}
)
end
-function pyromancer_fire_shard_carddef()
+function demonologist_flawless_shadow_gem_carddef()
return createDef(
{
- id = "pyromancer_fire_shard",
- name = "Fire Shard",
+ id = "demonologist_flawless_shadow_gem",
+ name = "Flawless Shadow Gem",
types = {gemType, noStealType, itemType},
- acquireCost = 0,
+ acquireCost = 0,
cardTypeLabel = "Item",
playLocation = castPloc,
abilities = {
- createAbility(
+ createAbility(
{
- id = "pyromancer_fire_shard",
- layout = cardLayout,
- effect =
- pushChoiceEffect(
- {
- choices = {
- {
- effect = gainGoldEffect(1),
- layout = layoutCard(
- {
- title = "Fire Shard",
- art = "art/treasures/Thief_Sharpened_ruby",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- tags = {gainGold1Tag}
- },
- {
- effect = createCardEffect(fire_gem_carddef(), currentDiscardLoc),
- layout = layoutCard(
- {
- title = "Fire Shard",
- art = "art/treasures/Thief_Sharpened_ruby",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- }
- }
- }
- ),
- trigger = autoTrigger,
+ id = "demonologist_flawless_shadow_gem_sac",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(2),
tags = {}
}
- )
- },
- layout = createLayout(
- {
- name = "Fire Shard",
- art = "art/treasures/Thief_Sharpened_ruby",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
-
-
-
-
-
-
-
- ]],
- }
- )
- }
- )
-end
-
-function pyromancer_conflagration_1p_carddef()
- return createHeroAbilityDef({
- id = "conflagration_1p",
- name = "Phoenix Fire",
- types = { heroAbilityType },
- abilities = {
- createAbility({
- id = "conflagration_1pActivate",
- trigger = uiTrigger,
- promptType = showPrompt,
- layout = createLayout({
- name = "Phoenix Fire",
- art = "art/epicart/fiery_demise",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_1p"))
- .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
- .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
- cost = sacrificeSelfCost
- }),
- },
- layout = createLayout({
- name = "Phoenix Fire",
- art = "art/epicart/fiery_demise",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- layoutPath = "art/epicart/fiery_demise",
- })
-end
-
-function pyromancer_conflagration_2p_carddef()
- return createHeroAbilityDef({
- id = "conflagration_2p",
- name = "Phoenix Fire",
- types = { heroAbilityType },
- abilities = {
- createAbility({
- id = "conflagration_2pActivate",
- trigger = uiTrigger,
- promptType = showPrompt,
- layout = createLayout({
- name = "Phoenix Fire",
- art = "art/epicart/fiery_demise",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_2p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_2p"))
- .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
- .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
- cost = sacrificeSelfCost
- }),
- },
- layout = createLayout({
- name = "Phoenix Fire",
- art = "art/epicart/fiery_demise",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_2p") })
- }),
- layoutPath = "art/epicart/fiery_demise",
- })
-end
-
-function pyromancer_explode_carddef()
- return createDef(
- {
- id = "Pyromancer_Explode",
- name = "explode",
- types = {noStealType, actionType},
- acquireCost = 0,
- cardTypeLabel = "Action",
- playLocation = castPloc,
- abilities = {
- createAbility({
- id="Pyromancer_explode_combat",
- trigger= autoTrigger,
- effect = gainCombatEffect(3)
- }),
- createAbility({
- id="Pyromancer_explode_FGsac",
- trigger= autoTrigger,
- activations = singleActivations,
- check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
- effect = gainCombatEffect(2)
+ ),
+
+ createAbility(
+ {
+ id = "demonologist_flawless_shadow_gem_buff",
+ cost = noCost,
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Give one minion +2 until your next turn.",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardType(minionType)),
+ min = 0,
+ max = 1,
+ targetEffect = grantHealthTarget(2, { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "shadow"),
+ }),
+ tags = {}
+ }
+ ),
- })
},
layout = createLayout(
{
- name = "Explode",
- art = "art/epicart/zaltessa_s_fire",
- frame = "frames/Wizard_CardFrame",
+ name = "Flawless Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
-
-
-
+
-
+
+
+
+
- ]],
+ ]]
}
)
}
)
end
-function pyromancer_incinerate_carddef()
- return createDef(
+function demonologist_butcherclaw_carddef()
+ return createChampionDef(
{
- id = "Pyromancer_incinerate",
- name = "Incinerate",
- types = {noStealType, actionType},
+ id = "demonologist_butcherclaw",
+ name = "Butcherclaw",
+ types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- cardTypeLabel = "Action",
- playLocation = castPloc,
+ health = 2,
+ isGuard = false,
abilities = {
- createAbility({
- id = "Pyromancer_Incinerate",
- layout = cardLayout,
- effect = gainCombatEffect(1).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ createAbility(
+ {
+ id = "demonologist_butcherclaw_main",
trigger = autoTrigger,
- tags = {}
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2),
}
- )
- },
- layout = createLayout(
- {
- name = "Incinerate",
- art = "art/epicart/flame_strike",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
-
-
-
-
-
-
-
- ]],
- }
- )
- }
- )
-end
-
-function pyromancer_patronage_carddef()
- return createDef(
- {
- id = "pyromancer_patronage",
- name = "Patronage",
- types = {gemType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
+ ),
+
+ createAbility(
{
- id = "pyromancer_patronage",
- cost = noCost,
- trigger = autoTrigger,
+ id = "demonologist_butcherclaw_spike",
+ trigger = uiTrigger,
activations = singleActivations,
- effect = gainGoldEffect(2),
- tags = {}
+ prompt = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Sacrifice a champion in your discard pile. Sprout a spike equal to its cost.",
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion().And(getCardCost().gte(1))),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, asidePloc))
+ .seq(incrementCounterEffect("black_spike_guard", selectLoc(loc(currentPid, asidePloc)).take(1).sum(getCardCost())))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(createCardEffect(demonologist_spike_carddef(), revealLoc))
+ .seq(grantHealthTarget(getCounter("black_spike_guard")).apply(selectLoc(revealLoc)))
+ .seq(moveTarget(currentInPlayLoc).apply(selectLoc(revealLoc)))
+ .seq(resetCounterEffect("black_spike_guard"))
+ })
+
+
+ ,
+ check = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion()).count().gte(1)
+
}
),
- createAbility(
- {
- id = "pyromancer_patronage_sac",
- cost = sacrificeSelfCost,
- trigger = uiTrigger,
- activations = singleActivations,
- effect = prepareTarget().apply(selectLoc(currentSkillsLoc)),
- tags = {}
- }
- )
},
- layout = createLayout(
- {
- name = "Patronage",
- art = "art/treasures/thief_brillant_ruby",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
-
-
-
-
-
-
+ layout = createLayout({
+ name = "Butcherclaw",
+ art = "icons/slaughterclaw",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
+
-
-
-
-
- ]]
- }
- )
+
+
+
+
+]],
+ health = 2,
+ isGuard = false
+ })
}
)
end
-function pyromancer_fire_elemental_carddef()
+function demonologist_spike_carddef()
return createChampionDef(
{
- id = "pyromancer_fire_elemental",
- name = "Fire Elemental",
- types = { championType, nosteaalType},
+ id = "demonologist_spike",
+ name = "Spike",
+ types = {championType, demonType, nostealType, tokenType},
acquireCost = 0,
- health = 3,
- isGuard = true,
+ health = 0,
+ isGuard = false,
abilities = {
createAbility(
{
- id = "Fire_elemental_main",
+ id = "spike_main",
trigger = autoTrigger,
cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(2)
-
+ activations = singleActivations,
+ effect = gainCombatEffect(selectSource().sum(getCardHealth()))
}
+ ),
+
+ createAbility(
+ {
+ id = "spike_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = hitSelfEffect(2)
+ }
+
)
},
layout = createLayout(
{
- name = "Fire Elemental",
- art = "art/epicart/fire_spirit",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
+ name = "Spike",
+ art = "features/warinthewild/slaughterclaw_spike",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
-
-
+
+
-
+
]],
- health = 3,
- isGuard = true
+ health = 0,
+ isGuard = false
}
)
}
)
end
-function pyromancer_hearth_carddef()
+function demonologist_summon_demon_ability_carddef()
+ local cardLayout = createLayout({
+ name = "Summon Demon Minion",
+ art = "icons/the_summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
- return createDef(
- {
- id = "pyromancer_hearth",
- name = "Hearth",
- types = {gemType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "pyromancer_hearth",
- cost = noCost,
- trigger = autoTrigger,
- activations = singleActivations,
- effect = pushChoiceEffect(
+ return createSkillDef({
+ id = "demonologist_summon_demon_ability",
+ name = "Summon Demon Minion",
+ types = { abilityType },
+ layout = cardLayout,
+ layoutPath = "icons/the_summoning",
+ abilities = {
+ createAbility({
+ id = "demonologist_summon_demon_minion_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect =pushChoiceEffectWithTitle(
{
choices = {
{
- effect = gainHealthEffect(3),
- layout = layoutCard(
- {
- title = "Hearth",
- art = "art/T_Blistering_Blaze",
- xmlText=[[
-
+ effect = randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+}).seq(noUndoEffect()),
+ layout = createLayout(
+ {
+ name = "Demonic leech",
+ art = "art/t_wurm",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText = [[
+
+
+
+
-
+
+
+
+
+
+
+
+
+
- ]]
- }
- ),
- tags = {gainCombatTag}
- },
- {
- effect = drawCardsEffect(1),
- layout = layoutCard(
- {
- title = "Hearth",
- art = "art/T_Blistering_Blaze",
- xmlText=[[
-
-
-
-
-
- ]]
- }
- ),
- }
- }
- }
- ),
- tags = {}
- }
- )
- },
- layout = createLayout(
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+}).seq(noUndoEffect()),
+ layout = createLayout(
{
- name = "Hearth",
- art = "art/T_Blistering_Blaze",
- frame = "frames/Wizard_CardFrame",
+ name = "Fel hound",
+ art = "art/epicart/demon_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
+
+
+
-
+
- ]]
+ ]],
+ health = 1,
+ isGuard = false
}
- )
- }
- )
-end
-
-function pyromancer_volatile_chemicals_carddef()
-
- return createDef(
- {
- id = "pyromancer_volatile_chemicals",
- name = "Volatile Chemicals",
- types = {gemType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "pyromancer_volatile_chemicals",
- cost = noCost,
- trigger = autoTrigger,
- activations = singleActivations,
- effect = gainGoldEffect(1).seq(gainCombatEffect(2)),
- tags = {}
- }
- )
- },
- layout = createLayout(
+ ),
+ tags = {gainCombatTag}
+ },
+
+ {
+ effect = randomEffect({
+ valueItem(1, createCardEffect(demonologist_demonic_leech_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_succubus_carddef(), currentInPlayLoc)),
+ valueItem(1, createCardEffect(demonologist_fel_hound_carddef(), currentInPlayLoc))
+}).seq(noUndoEffect()),
+ layout = createLayout(
{
- name = "Volatile Chemicals",
- art = "art/treasures/wizard_adept_s_components",
- frame = "frames/Wizard_CardFrame",
+ name = "Succubus",
+ art = "art/epicart/succubus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
+
+
+
-
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ }
+ },
+ upperTitle = "Summon one of these 3 demon tokens, randomly.",
+ lowerTitle = "Click any card to proceed."
+ }),
+ cost = sacrificeSelfCost,
+ }),
+ },
+ layout = createLayout(
+ {
+ name = "Summon Demon Minion",
+ art = "icons/the_summoning",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
]]
}
)
- }
- )
+
+ })
end
-function pyromancer_fire_gem_amulet_carddef()
+function demonologist_demonic_amulet_carddef()
local cardLayout = createLayout({
- name = "Fire Gem Amulet",
- art = "art/T_fire_gem",
- frame = "frames/Wizard_CardFrame",
+ name = "Demonic Amulet",
+ art = "art/t_wizard_silverskull_amulet",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
-
+
-
+
@@ -6059,41 +6014,79 @@ Otherwise give a Fire Bird +1{shield} until it leaves play." fontsize="19" />
return createMagicArmorDef(
{
- id = "pyromancer_fire_gem_amulet",
- name = "Fire Gem Amulet",
+ id = "demonologist_demonic_amulet",
+ name = "Demonic Amulet",
types = {magicArmorType, noStealType, itemType},
acquireCost = 0,
cardTypeLabel = "Armour",
layout = cardLayout,
- layoutPath = "art/T_fire_gem",
+ layoutPath = "icons/wizard_pure_channel",
playLocation = castPloc,
abilities = {
createAbility(
{
- id = "pyromancer_fire_gem_amulet",
+ id = "demonologist_demonic_amulet",
cost = expendCost,
trigger = autoTrigger,
+ promptType = showPrompt,
layout = cardLayout,
activations = singleActivations,
- effect = createCardEffect(pyromancer_fire_bird_carddef(), currentInPlayLoc),
- check= minHealthCurrent(25)
- .And(selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1))
- .And(((selectLoc(loc(currentPid, inPlayPloc))).where(isCardName("pyromancer_fire_bird")).count().eq(0))),
+ effect = gainHealthEffect(2),
+ check= minHealthCurrent(35)
+ .And(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType(demonType).And(isCardType(tokenType))).count().gte(1)),
tags = {}
}
),
-
+
+ },
+
+
+ }
+ )
+end
+
+function demonologist_summoner_s_robes_carddef()
+
+ local cardLayout = createLayout({
+ name = "Summoner's Robes",
+ art = "art/t_wizard_runic_robes",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "demonologist_summoner_s_robes",
+ name = "Demonic Amulet",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "icons/wizard_runic_robes",
+ playLocation = castPloc,
+ abilities = {
createAbility(
{
- id = "pyromancer_fire_gem_amulet2",
+ id = "demonologist_summoner_s_robes",
cost = expendCost,
- trigger = autoTrigger,
+ trigger = uiTrigger,
+ promptType = showPrompt,
layout = cardLayout,
activations = singleActivations,
- effect = grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Fire Gem Amulet").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardName("pyromancer_fire_bird"))),
- check= minHealthCurrent(25)
- .And(selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1))
- .And(((selectLoc(loc(currentPid, inPlayPloc))).where(isCardName("pyromancer_fire_bird")).count().eq(1))),
+ effect = gainHealthEffect(-2).seq(addSlotToPlayerEffect(controllerPid, createPlayerIntExpressionSlot(skillCostModKey, toIntExpression(-1), { endOfTurnExpiry }))),
+ check= minHealthCurrent(25),
tags = {}
}
),
@@ -6105,1769 +6098,4183 @@ Otherwise give a Fire Bird +1{shield} until it leaves play." fontsize="19" />
)
end
-function pyromancer_fire_bird_carddef()
---This is a token champion, that self-sacrifices when it leaves play
- return createChampionDef(
+
+-- Pyromancer cards -----------------------------------------------------------------------------------------------------------------------
+function pyromancer_combust_carddef()
+ return createDef(
{
- id = "pyromancer_fire_bird",
- name = "Fire Bird",
- types = {minionType, championType, demonType, nostealType, tokenType},
+ id = "Pyromancer_Combust",
+ name = "combust",
+ types = {noStealType, actionType},
acquireCost = 0,
- health = 1,
- isGuard = false,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
abilities = {
- --base ability
- createAbility(
- {
- id = "fire_bird_main",
- trigger = uiTrigger,
- cost = expendCost,
- activations = multipleActivations,
- effect = gainCombatEffect(selectSource().sum(getCardHealth()))
-
- }
- )
- ,
- --self-sac ability
- createAbility(
- {
- id = "fire_bird_sac",
- trigger = onLeavePlayTrigger,
- cost = sacrificeSelfCost,
- activations = singleActivations,
- effect = nullEffect()
- }
-
- )},
+ createAbility({
+ id="Pyromancer_Combust_combat",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(1)
+ }),
+ createAbility({
+ id="Pyromancer_Combust_FGsac",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
+ effect = gainCombatEffect(2)
+
+ })
+ },
layout = createLayout(
{
- name = "Fire Bird",
- art = "art/epicart/fire_shaman",
- frame = "frames/Wizard_CardFrame",
+ name = "Combust",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/wizard_cardframe",
xmlText=[[
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
]],
- health = 1,
- isGuard = false
}
)
}
)
end
-function pyromancer1_flame_hood_carddef()
+function pyromancer_sear_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Sear",
+ name = "sear",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Sear",
+ layout = cardLayout,
+ effect = gainCombatEffect(2),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Sear",
+ art = "art/epicart/flame_spike",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
- local cardLayout = createLayout({
- name = "Flame Hood",
- art = "avatars/summoner",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
+function pyromancer_scorch_carddef()
+ return createDef(
+ {
+ id = "pyromancer_scorch",
+ name = "Scorch",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Scorch",
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(damageTarget(1).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Scorch",
+ art = "art/epicart/flame_strike",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
-
-
-
-
-
-
-
-
+
+
+
+
+
+
- ]]
- })
-
- return createMagicArmorDef(
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_shard_carddef()
+ return createDef(
{
- id = "pyromancer1_flame_hood",
- name = "Flame Hood",
- types = {magicArmorType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Armour",
- layout = cardLayout,
- layoutPath = "avatars/summoner",
+ id = "pyromancer_fire_shard",
+ name = "Fire Shard",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
playLocation = castPloc,
abilities = {
- createAbility(
+ createAbility(
{
- id = "pyromancer1_flame_hood",
- cost = expendCost,
- trigger = uiTrigger,
- layout = cardLayout,
- promptType = showPrompt,
- activations = singleActivations,
- effect = gainGoldEffect(-1).seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(abilityType)).count().eq(0),
- gainCombatEffect(2),
- incrementCounterEffect("conflagration_1p", (2)))),
- check = minHealthCurrent(25).And(getPlayerGold(ownerPid).gte(1)),
-
+ id = "pyromancer_fire_shard",
+ layout = cardLayout,
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(1),
+ layout = layoutCard(
+ {
+ title = "Fire Shard",
+ art = "art/treasures/thief_sharpened_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainGold1Tag}
+ },
+ {
+ effect = createCardEffect(fire_gem_carddef(), currentDiscardLoc),
+ layout = layoutCard(
+ {
+ title = "Fire Shard",
+ art = "art/treasures/thief_sharpened_ruby",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ trigger = autoTrigger,
tags = {}
}
- ),
-
-
+ )
},
-
-
+ layout = createLayout(
+ {
+ name = "Fire Shard",
+ art = "art/treasures/thief_sharpened_ruby",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
}
)
end
-function pyromancer2_flame_hood_carddef()
+function pyromancer_conflagration_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
+
+function pyromancer_conflagration_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
+
+function pyromancer_explode_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_Explode",
+ name = "explode",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="Pyromancer_explode_combat",
+ trigger= autoTrigger,
+ effect = gainCombatEffect(3)
+ }),
+ createAbility({
+ id="Pyromancer_explode_FGsac",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ check = selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1),
+ effect = gainCombatEffect(2)
+
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Explode",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_incinerate_carddef()
+ return createDef(
+ {
+ id = "Pyromancer_incinerate",
+ name = "Incinerate",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "Pyromancer_Incinerate",
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc)))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Incinerate",
+ art = "art/epicart/flame_strike",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_patronage_carddef()
+ return createDef(
+ {
+ id = "pyromancer_patronage",
+ name = "Patronage",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_patronage",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(2),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "pyromancer_patronage_sac",
+ cost = sacrificeSelfCost,
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = prepareTarget().apply(selectLoc(currentSkillsLoc)),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Patronage",
+ art = "art/treasures/thief_brillant_ruby",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_elemental_carddef()
+ return createChampionDef(
+ {
+ id = "pyromancer_fire_elemental",
+ name = "Fire Elemental",
+ types = { championType, nosteaalType},
+ acquireCost = 0,
+ health = 3,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "Fire_elemental_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Fire Elemental",
+ art = "art/epicart/fire_spirit",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_hearth_carddef()
+
+ return createDef(
+ {
+ id = "pyromancer_hearth",
+ name = "Hearth",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_hearth",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainHealthEffect(3),
+ layout = layoutCard(
+ {
+ title = "Hearth",
+ art = "art/t_blistering_blaze",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ tags = {gainCombatTag}
+ },
+ {
+ effect = drawCardsEffect(1),
+ layout = layoutCard(
+ {
+ title = "Hearth",
+ art = "art/t_blistering_blaze",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Hearth",
+ art = "art/t_blistering_blaze",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_volatile_chemicals_carddef()
+
+ return createDef(
+ {
+ id = "pyromancer_volatile_chemicals",
+ name = "Volatile Chemicals",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_volatile_chemicals",
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = gainGoldEffect(1).seq(gainCombatEffect(2)),
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Volatile Chemicals",
+ art = "art/treasures/wizard_adept_s_components",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ )
+ }
+ )
+end
+
+function pyromancer_fire_gem_amulet_carddef()
+
+ local cardLayout = createLayout({
+ name = "Fire Gem Amulet",
+ art = "art/t_fire_gem",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "pyromancer_fire_gem_amulet",
+ name = "Fire Gem Amulet",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "art/t_fire_gem",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer_fire_gem_amulet",
+ cost = expendCost,
+ trigger = autoTrigger,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = createCardEffect(pyromancer_fire_bird_carddef(), currentInPlayLoc),
+ check= minHealthCurrent(25)
+ .And(selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1))
+ .And(((selectLoc(loc(currentPid, inPlayPloc))).where(isCardName("pyromancer_fire_bird")).count().eq(0))),
+ tags = {}
+ }
+ ),
+
+ createAbility(
+ {
+ id = "pyromancer_fire_gem_amulet2",
+ cost = expendCost,
+ trigger = autoTrigger,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = grantHealthTarget(1, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Fire Gem Amulet").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardName("pyromancer_fire_bird"))),
+ check= minHealthCurrent(25)
+ .And(selectLoc(loc(currentPid, castPloc)).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("fire_gem")).count().gte(1))
+ .And(((selectLoc(loc(currentPid, inPlayPloc))).where(isCardName("pyromancer_fire_bird")).count().eq(1))),
+ tags = {}
+ }
+ ),
+
+ },
+
+
+ }
+ )
+end
+
+function pyromancer_fire_bird_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "pyromancer_fire_bird",
+ name = "Fire Bird",
+ types = {minionType, championType, demonType, nostealType, tokenType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "fire_bird_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(selectSource().sum(getCardHealth()))
+
+ }
+ )
+ ,
+ --self-sac ability
+ createAbility(
+ {
+ id = "fire_bird_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Fire Bird",
+ art = "art/epicart/fire_shaman",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function pyromancer1_flame_hood_carddef()
+
+ local cardLayout = createLayout({
+ name = "Flame Hood",
+ art = "avatars/summoner",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "pyromancer1_flame_hood",
+ name = "Flame Hood",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "avatars/summoner",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer1_flame_hood",
+ cost = expendCost,
+ trigger = uiTrigger,
+ layout = cardLayout,
+ promptType = showPrompt,
+ activations = singleActivations,
+ effect = gainGoldEffect(-1).seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(abilityType)).count().eq(0),
+ gainCombatEffect(2),
+ incrementCounterEffect("conflagration_1p", (2)))),
+ check = minHealthCurrent(25).And(getPlayerGold(ownerPid).gte(1)),
+
+ tags = {}
+ }
+ ),
+
+
+ },
+
+
+ }
+ )
+end
+
+function pyromancer2_flame_hood_carddef()
+
+ local cardLayout = createLayout({
+ name = "Flame Hood",
+ art = "avatars/summoner",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "pyromancer2_flame_hood",
+ name = "Flame Hood",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "avatars/summoner",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "pyromancer2_flame_hood",
+ cost = expendCost,
+ trigger = uiTrigger,
+ layout = cardLayout,
+ promptType = showPrompt,
+ activations = singleActivations,
+ effect = gainGoldEffect(-1).seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(abilityType)).count().eq(0),
+ gainCombatEffect(2),
+ incrementCounterEffect("conflagration_2p", (2)))),
+ check = minHealthCurrent(25).And(getPlayerGold(ownerPid).gte(1)),
+
+ tags = {}
+ }
+ ),
+
+
+ },
+
+
+ }
+ )
+end
+
+--START skills - Research Phoenix Fire (for level 3 heroes) (Skill-1)
+function pyromancer_1p_fuel_1carddef()
+ local cardLayout = createLayout({
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_fuel_1_skill",
+ name = "Research Phoenix Fire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/arcane_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_fuel_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_fuel_1carddef()
+ local cardLayout = createLayout({
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_fuel_1_skill",
+ name = "Research Phoenix Fire",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/arcane_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_fuel_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = singleActivation,
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(gainHealthEffect(1)),
+ cost = goldCost(2)
+ }),
+ }
+
+ })
+end
+
+
+-- START Compulsive Research (Skill-2a)
+function pyromancer_1p_compulsive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Compulsive Research",
+ art = "art/epicart/frantic_digging",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_compulsive_research_1_skill",
+ name = "Compulsive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/frantic_digging",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_compulsive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(5)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_compulsive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Compulsive Research",
+ art = "art/epicart/frantic_digging",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_compulsive_research_1_skill",
+ name = "Compulsive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/frantic_digging",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_compulsive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(5)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Crazed Research (Skill-3a)
+function pyromancer_1p_reckless_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Reckless Research",
+ art = "art/epicart/erratic_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_reckless_research_1_skill",
+ name = "Reckless Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/erratic_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_reckless_research_1_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainHealthEffect(-1).seq(incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p"))))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(6)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_reckless_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Reckless Research",
+ art = "art/epicart/erratic_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_reckless_research_1_skill",
+ name = "Reckless Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/erratic_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_reckless_research_1_ab",
+ trigger = uiTrigger,
+ check = minHealthCurrent(2),
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainHealthEffect(-1).seq(incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p"))))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(6)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Obsessive Research (Skill-3b)
+function pyromancer_1p_obsessive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Obsessive Research",
+ art = "art/epicart/mystic_researcher",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_obsessive_research_1_skill",
+ name = "Obsessive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/mystic_researcher",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_obsessive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(5)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_obsessive_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Obsessive Research",
+ art = "art/epicart/mystic_researcher",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_obsessive_research_1_skill",
+ name = "Obsessive Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/mystic_researcher",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_obsessive_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(5)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Considered Research (Skill-2b)
+function pyromancer_1p_considered_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Considered Research",
+ art = "art/epicart/forbidden_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_considered_research_1_skill",
+ name = "Considered Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/forbidden_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_considered_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_considered_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Considered Research",
+ art = "art/epicart/forbidden_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_considered_research_1_skill",
+ name = "Considered Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/forbidden_research",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_considered_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+-- START Focussed Research (Skill-3c)
+function pyromancer_1p_focussed_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Focussed Research",
+ art = "art/epicart/lesson_learned",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_1p_focussed_research_1_skill",
+ name = "Focussed Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/lesson_learned",
+ abilities = {
+ createAbility({
+ id = "pyromancer_1p_focussed_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
+ .seq(gainHealthEffect(2)).seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_2p_focussed_research_1carddef()
+ local cardLayout = createLayout({
+ name = "Focussed Research",
+ art = "art/epicart/lesson_learned",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
+ })
+
+ return createSkillDef({
+ id = "pyromancer_2p_focussed_research_1_skill",
+ name = "Focussed Research",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/lesson_learned",
+ abilities = {
+ createAbility({
+ id = "pyromancer_2p_focussed_research_1_ab",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
+ .seq(gainHealthEffect(2)).seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+--START Afterburn upgrades
+function pyromancer_after_burn_3a_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_3a_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_3a",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainCombatEffect(3).seq(gainHealthEffect(1)),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_3b_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_3b_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_3b",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainCombatEffect(3).seq(gainHealthEffect(1))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+function pyromancer_after_burn_3c_carddef()
+ local cardLayout = createLayout({
+ name = "After Burn",
+ art = "icons/growing_flame",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+]]
+ })
+
+ return createSkillDef({
+ id = "pyromancer_after_burn_3c_skill",
+ name = "After Burn",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "icons/growing_flame",
+ abilities = {
+ createAbility({
+ id = "after_burn_3c",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ activations = multipleActivations,
+ layout = cardLayout,
+ effect = gainCombatEffect(1).seq(gainHealthEffect(3))
+ .seq(drawCardsEffect(1))
+ .seq(pushTargetedEffect({
+ desc="Put a card on the top of your deck.",
+ min=1,
+ max=1,
+ validTargets= selectLoc(loc(currentPid, handPloc)),
+ targetEffect= moveToTopDeckTarget(true),
+ tags = {}
+ })),
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ }),
+ }),
+ }
+
+ })
+end
+
+
+-- START Ability upgrades 1p
+--4a Phoenix Frenzy
+function pyromancer_phoenix_frenzy_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Frenzy",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/fireball",
+ })
+end
+
+--5a Phoenix Fury
+function pyromancer_phoenix_fury_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Fury",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/t_pillar_of_fire",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/t_pillar_of_fire",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/t_pillar_of_fire",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+
+ layoutPath = "art/t_pillar_of_fire",
+ })
+end
+
+--4b Phoenix Flare
+function pyromancer_phoenix_flare_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Flare",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(6))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+
+ layoutPath = "art/epicart/ascendant_pyromancer",
+ })
+end
+
+--5b Phoenix Flames
+function pyromancer_phoenix_flames_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Phoenix Flames",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(6))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/epicart/flames_of_furios",
+ })
+end
+
+--5c Spirit of the Phoenix
+function pyromancer_spirit_of_the_phoenix_1p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_1p",
+ name = "Spirit of the Phoenix",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_1pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/t_darian_war_mage",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(11))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/t_darian_war_mage",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ layoutPath = "art/t_darian_war_mage",
+ })
+end
+
+-- START Ability upgrades 2p
+--4a Phoenix Frenzy
+function pyromancer_phoenix_frenzy_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Frenzy",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Frenzy",
+ art = "art/epicart/fireball",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/fireball",
+ })
+end
+
+--5a Phoenix Fury
+function pyromancer_phoenix_fury_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Fury",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/t_pillar_of_fire",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fury",
+ art = "art/t_pillar_of_fire",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/t_pillar_of_fire",
+ })
+end
+
+--4b Phoenix Flare
+function pyromancer_phoenix_flare_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Flare",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p")).seq(gainHealthEffect(6))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flare",
+ art = "art/epicart/ascendant_pyromancer",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
- local cardLayout = createLayout({
- name = "Flame Hood",
- art = "avatars/summoner",
- frame = "frames/Wizard_CardFrame",
- xmlText=[[
-
-
-
-
-
-
-
-
-
-
-
- ]]
- })
-
- return createMagicArmorDef(
- {
- id = "pyromancer2_flame_hood",
- name = "Flame Hood",
- types = {magicArmorType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Armour",
- layout = cardLayout,
- layoutPath = "avatars/summoner",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "pyromancer2_flame_hood",
- cost = expendCost,
- trigger = uiTrigger,
- layout = cardLayout,
- promptType = showPrompt,
- activations = singleActivations,
- effect = gainGoldEffect(-1).seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardType(abilityType)).count().eq(0),
- gainCombatEffect(2),
- incrementCounterEffect("conflagration_2p", (2)))),
- check = minHealthCurrent(25).And(getPlayerGold(ownerPid).gte(1)),
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/ascendant_pyromancer",
+ })
+end
- tags = {}
- }
- ),
+--5b Phoenix Flames
+function pyromancer_phoenix_flames_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Flames",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p")).seq(gainHealthEffect(6))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
-
- },
-
-
- }
- )
-end
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Flames",
+ art = "art/epicart/flames_of_furios",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
-
+<size=50%>{combat} gained starts at {combat_7}
+and increases with each use of your skill." fontsize="32" flexibleheight="3"/>
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/flames_of_furios",
+ })
+end
+
+--5c Spirit of the Phoenix
+function pyromancer_spirit_of_the_phoenix_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Spirit of the Phoenix",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/t_darian_war_mage",
+ xmlText = format([[
+
+
+
-
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p")).seq(gainHealthEffect(11))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
+ .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
+
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Spirit of the Phoenix",
+ art = "art/t_darian_war_mage",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
-
+
]],
- { getCounter("fuel_1p") })
- })
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/t_darian_war_mage",
+ })
+end
- return createSkillDef({
- id = "pyromancer_1p_fuel_1_skill",
- name = "Research Phoenix Fire",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/arcane_research",
+function pyromancer_play_with_fire_carddef()
+ return createHeroAbilityDef({
+ id = "play_with_fire",
+ name = "Play With Fire",
+ types = { heroAbilityType },
abilities = {
- createAbility({
- id = "pyromancer_1p_fuel_1_ab",
+ createAbility( {
+ id = "play_with_fire_ab",
trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
- .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
+ activations = singleActivation,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Play With Fire",
+ art = "art/t_spreading_sparks",
+ xmlText = [[
+
+
+
+ ]]
+
+ }),
+ effect = gainCombatEffect(2),
+ cost = sacrificeSelfCost,
}),
- }
-
- })
-end
+ },
+ layout = createLayout({
+ name = "Play With Fire",
+ art = "art/t_spreading_sparks",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+ ]]
+ }),
+ layoutPath = "art/t_spreading_sparks",
+ })
+end
-function pyromancer_2p_fuel_1carddef()
- local cardLayout = createLayout({
- name = "Research Phoenix Fire",
- art = "art/epicart/arcane_research",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_2p") })
- })
+-- End of Pyro Cards -----------------------------------------------------------------------------------------------------------------------
- return createSkillDef({
- id = "pyromancer_2p_fuel_1_skill",
- name = "Research Phoenix Fire",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/arcane_research",
- abilities = {
- createAbility({
- id = "pyromancer_2p_fuel_1_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
- .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+
+-- START of Cryomancer Cards ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+function cryomancer_ice_sickle_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_sickle",
+ name = "Ice Sickle",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_ice_sickle",
+ layout = cardLayout,
+ effect = gainCombatEffect(2),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Ice Sickle",
+ art = "art/t_longsword",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
-function pyromancer_after_burn_carddef()
- local cardLayout = createLayout({
- name = "After Burn",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
+function cryomancer_frostwulf_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
+ {
+ id = "cryomancer_frostwulf",
+ name = "Frostwulf",
+ types = {championType, nostealType },
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ --base ability
+ createAbility(
+ {
+ id = "frostwulf_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ )},
+ layout = createLayout(
+ {
+ name = "Frostwulf",
+ art = "art/epicart/den_mother",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
-
+
-
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_ice_gem_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_gem",
+ name = "Ice Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "cryomancer_ice_gem",
+ layout = cardLayout,
+ effect =
+ pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Ice Gem",
+ art = "art/t_wizard_alchemist_s_stone",
+ xmlText=[[
+
+
+
+
-]]
- })
-
- return createSkillDef({
- id = "pyromancer_after_burn_skill",
- name = "After Burn",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "icons/growing_flame",
- abilities = {
- createAbility({
- id = "after_burn_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = singleActivation,
- layout = cardLayout,
- effect = gainCombatEffect(1).seq(gainHealthEffect(1)),
- cost = goldCost(2)
- }),
+
+]]
+ }
+ ),
+ tags = {gainGold2Tag}
+ },
+ {
+ effect = oppDiscardEffect(1),
+ layout = layoutCard(
+ {
+ title = "Ice Gem",
+ art = "art/t_wizard_alchemist_s_stone",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ }
+ }
+ }
+ ),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Ice Gem",
+ art = "art/t_wizard_alchemist_s_stone",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
-
--- START Compulsive Research (Skill-2a)
-function pyromancer_1p_compulsive_research_1carddef()
- local cardLayout = createLayout({
- name = "Compulsive Research",
- art = "art/epicart/frantic_digging",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_1p") })
- })
-
- return createSkillDef({
- id = "pyromancer_1p_compulsive_research_1_skill",
- name = "Compulsive Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/frantic_digging",
- abilities = {
- createAbility({
- id = "pyromancer_1p_compulsive_research_1_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
- .seq(ifElseEffect((getCounter("fuel_1p").lte(5)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+function cryomancer_freeze_carddef()
+ return createDef(
+ {
+ id = "cryomancer_freeze",
+ name = "Freeze",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_freeze",
+ layout = cardLayout,
+ effect = pushTargetedEffect({
+ desc = "Brrr. It's cold in here. (Expend a champion.)",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = expendTarget().seq(gainCombatEffect(1)),
+ }),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Freeze",
+ art = "art/epicart/polar_shock",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
-function pyromancer_2p_compulsive_research_1carddef()
- local cardLayout = createLayout({
- name = "Compulsive Research",
- art = "art/epicart/frantic_digging",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_2p") })
- })
- return createSkillDef({
- id = "pyromancer_2p_compulsive_research_1_skill",
- name = "Compulsive Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/frantic_digging",
- abilities = {
- createAbility({
- id = "pyromancer_2p_compulsive_research_1_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
- .seq(ifElseEffect((getCounter("fuel_2p").lte(5)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+--Upgrade Cards
+-- Level 5
+function cryomancer_deep_freeze_carddef()
+ return createDef(
+ {
+ id = "cryomancer_deep_freeze",
+ name = "Deep Freeze",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_deep_freeze",
+ layout = cardLayout,
+ effect = expendTarget().apply(selectLoc(loc(oppPid, inPlayPloc))).seq(damageTarget(1).apply(selectLoc(loc(oppPid, inPlayPloc)))).seq(gainCombatEffect(1)),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Deep Freeze",
+ art = "art/epicart/polar_shock",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
--- START Crazed Research (Skill-3a)
-function pyromancer_1p_reckless_research_1carddef()
- local cardLayout = createLayout({
- name = "Reckless Research",
- art = "art/epicart/erratic_research",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_1p") })
- })
+function cryomancer_ice_sickles_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_sickles",
+ name = "Ice Sickles",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_ice_sickles",
+ layout = cardLayout,
+ effect = gainCombatEffect(2)
+ .seq(gainCombatEffect(selectLoc(loc(currentPid, inPlayPloc)).count())),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Ice Sickles",
+ art = "art/epicart/shock_trooper",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
- return createSkillDef({
- id = "pyromancer_1p_reckless_research_1_skill",
- name = "Reckless Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/erratic_research",
- abilities = {
- createAbility({
- id = "pyromancer_1p_reckless_research_1_ab",
- trigger = uiTrigger,
- check = minHealthCurrent(2),
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = gainHealthEffect(-1).seq(incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p"))))
- .seq(ifElseEffect((getCounter("fuel_1p").lte(6)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+
+
+
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
-function pyromancer_2p_reckless_research_1carddef()
- local cardLayout = createLayout({
- name = "Reckless Research",
- art = "art/epicart/erratic_research",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_2p") })
- })
- return createSkillDef({
- id = "pyromancer_2p_reckless_research_1_skill",
- name = "Reckless Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/erratic_research",
- abilities = {
- createAbility({
- id = "pyromancer_2p_reckless_research_1_ab",
- trigger = uiTrigger,
- check = minHealthCurrent(2),
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = gainHealthEffect(-1).seq(incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p"))))
- .seq(ifElseEffect((getCounter("fuel_2p").lte(6)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+-- Level 7
+function cryomancer_cold_snap_carddef()
+ return createDef(
+ {
+ id = "cryomancer_cold_snap",
+ name = "Cold Snap",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_cold_snap",
+ layout = cardLayout,
+ effect = drawCardsEffect(1)
+ .seq(hitOpponentEffect(selectLoc(loc(oppPid, deckPloc)).union(selectLoc(loc(oppPid, discardPloc))).union(selectLoc(loc(oppPid, handPloc))).where(isCardName("cryomancer_frostbite")).count())),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Cold Snap",
+ art = "art/epicart/ice_drake",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
--- START Obsessive Research (Skill-3b)
-function pyromancer_1p_obsessive_research_1carddef()
- local cardLayout = createLayout({
- name = "Obsessive Research",
- art = "art/epicart/mystic_researcher",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_1p") })
- })
+function cyromancer_polarmour_carddef()
+ return createDef(
+ {
+ id = "cyromancer_polarmour",
+ name = "Polarmour",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="cyromancer_polarmour",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ effect = drawCardsEffect(1)
+ .seq(pushTargetedEffect({
+ desc = "Select a champion",
+ validTargets = selectLoc(currentInPlayLoc).where(isCardChampion()),
+ min = 0,
+ max = 1,
+ targetEffect = grantHealthTarget(1, { leavesPlayExpiry }, moveTarget(loc(ownerPid, discardPloc)).apply(selectSource()).seq(hitSelfEffect(3)), "shield")
+ }))
+ .seq(moveTarget(asidePloc).apply(selectSource())),
- return createSkillDef({
- id = "pyromancer_1p_obsessive_research_1_skill",
- name = "Obsessive Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/mystic_researcher",
- abilities = {
- createAbility({
- id = "pyromancer_1p_obsessive_research_1_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
- .seq(ifElseEffect((getCounter("fuel_1p").lte(5)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
- .seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
- min=1,
- max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Polarmour",
+ art = "art/epicart/force_field",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
-function pyromancer_2p_obsessive_research_1carddef()
- local cardLayout = createLayout({
- name = "Obsessive Research",
- art = "art/epicart/mystic_researcher",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_2p") })
- })
+-- Level 11
+function cryomancer_eternal_frost_carddef()
+ return createDef(
+ {
+ id = "cryomancer_eternal_frost",
+ name = "Eternal Frost",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_eternal_frost",
+ layout = cardLayout,
+ effect = drawCardsEffect(1)
+ .seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc))),
+ trigger = autoTrigger,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Eternal Frost",
+ art = "art/epicart/forced_exile",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
--- START Considered Research (Skill-2b)
-function pyromancer_1p_considered_research_1carddef()
- local cardLayout = createLayout({
- name = "Considered Research",
- art = "art/epicart/forbidden_research",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_1p") })
- })
+function cyromancer_cryonics_carddef()
- return createSkillDef({
- id = "pyromancer_1p_considered_research_1_skill",
- name = "Considered Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/forbidden_research",
- abilities = {
- createAbility({
- id = "pyromancer_1p_considered_research_1_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
- .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
- .seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
- min=1,
+ return createDef(
+ {
+ id = "cyromancer_cryonics",
+ name = "Cryonics",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id="cyromancer_cryonics",
+ trigger= autoTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Put a champion from your discard pile to the bottom of your deck. It gets +3{shield} until it leaves play.",
+ min=0,
max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+ validTargets = selectLoc(loc(currentPid, discardPloc)).where(isCardChampion()),
+ targetEffect = grantHealthTarget(3, { leavesPlayExpiry }, nullEffect(), "shield").seq(moveToBottomDeckTarget(false, 0)).seq(drawCardsEffect(1))
+ })
+
+
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Cryonics",
+ art = "art/epicart/transfigure",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+ }
+ )
}
-
- })
+ )
end
-function pyromancer_2p_considered_research_1carddef()
- local cardLayout = createLayout({
- name = "Considered Research",
- art = "art/epicart/forbidden_research",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_2p") })
- })
+-- Armour
- return createSkillDef({
- id = "pyromancer_2p_considered_research_1_skill",
- name = "Considered Research",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "art/epicart/forbidden_research",
+function cryomancer_ice_mail_carddef()
+
+ local priceBuff = getCostDiscountBuff("brewmaster_serve_the_strong_stuff_buff", 1, selectSavedTargets("Frozen Asset"))
+
+ local discountCreator = createGlobalBuff({
+ id="ice_mail_discount",
+ name = "Ice Mail",
abilities = {
createAbility({
- id = "pyromancer_2p_considered_research_1_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
- .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
- .seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
+ id="ice_mail_buff",
+ trigger = startOfTurnTrigger,
+ effect = createCardEffect(priceBuff, loc(currentPid, buffsPloc)).seq(clearTargets("Frozen Asset")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Ice Mail",
+ art = "art/epicart/crystal_golem",
+ text = " discount for 1 card in the market marked as a Frozen Asset."
+ })
+
+ })
+
+ local buffCreator = createGlobalBuff({
+ id="ice_mail_buff",
+ name = "Ice Mail",
+ abilities = {
+ createAbility({
+ id="ice_mail_buff",
+ trigger = startOfTurnTrigger,
+ effect = addSlotToTarget(createSlot({ id = slotNoBuy, expiresArray = { endOfTurnExpiry } })).apply(selectSavedTargets("Frozen Asset")).seq(sacrificeSelf())
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Ice Mail",
+ art = "art/epicart/crystal_golem",
+ text = "One card has become a Frozen Asset. You cannot buy it this turn."
+ })
+
+ })
+
+ local cardLayout = createLayout({
+ name = "Ice Mail",
+ art = "art/epicart/crystal_golem",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createMagicArmorDef(
+ {
+ id = "cryomancer_ice_mail",
+ name = "Ice Mail",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "art/epicart/crystal_golem",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "cryomancer_ice_mail",
+ cost = expendCost,
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Freeze a card in the market. Your opponent can't buy it next turn. It will cost you 1 gold less to buy on your next turn.",
min=1,
max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
+ validTargets = selectLoc(centerRowLoc),
+ targetEffect = saveTarget("Frozen Asset")
+ .seq(createCardEffect(buffCreator, loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(discountCreator, loc(currentPid, buffsPloc)))
+
+
+ }),
+
+ check= minHealthCurrent(40),
+ tags = {}
+ }
+ ),
+
+ },
+
+
}
-
+ )
+end
+
+function cryomancer_ice_crown_carddef()
+
+ local cardLayout = createLayout({
+ name = "Ice Crown",
+ art = "art/classes/necromancer/rotting_crown",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+ ]]
})
+
+ return createMagicArmorDef(
+ {
+ id = "cryomancer_ice_crown",
+ name = "Ice crown",
+ types = {magicArmorType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Armour",
+ layout = cardLayout,
+ layoutPath = "art/classes/necromancer/rotting_crown",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "cryomancer_ice_crown",
+ cost = expendCost,
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ activations = singleActivations,
+ effect = drawCardsEffect(1),
+ check= minHealthCurrent(35)
+ .And(selectLoc(loc(oppPid, discardPloc)).where(isCardChampion()).where(isCardStunned()).count().gte(1))
+ .Or(minHealthCurrent(35)
+ .And(getChampionsPlayedThisTurn().gte(1))),
+ tags = {}
+ }
+ ),
+
+ },
+
+
+ }
+ )
end
--- START Focussed Research (Skill-3c)
-function pyromancer_1p_focussed_research_1carddef()
- local cardLayout = createLayout({
- name = "Focussed Research",
- art = "art/epicart/lesson_learned",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+-- Skills
-
-
- ]],
- { getCounter("fuel_1p") })
+--START skills - Frostbite (for level 3 heroes) (Skill-1)
+function cryomancer_frostbiteskill_carddef()
+ local cardLayout = createLayout({
+ name = "Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
})
return createSkillDef({
- id = "pyromancer_1p_focussed_research_1_skill",
- name = "Focussed Research",
+ id = "cryomancer_frostbiteskill_skill",
+ name = "Frostbite",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/lesson_learned",
+ layoutPath = "art/epicart/frost_giant",
abilities = {
createAbility({
- id = "pyromancer_1p_focussed_research_1_ab",
+ id = "cryomancer_frostbiteskill_ab",
trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
+ activations = singleActivation,
layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
- .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect()))
- .seq(gainHealthEffect(2)).seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
- min=1,
- max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
+ promptType = showPrompt,
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc)),
+ cost = goldCost(2),
}),
}
})
end
-function pyromancer_2p_focussed_research_1carddef()
+function cryomancer_frostbite_carddef()
+-- Frostbite CARD v1.03
+ return createDef(
+ {
+ id = "cryomancer_frostbite",
+ name = "Frostbite",
+ types = {noStealType, actionType},
+ acquireCost = 0,
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ abilities = {
+ createAbility({
+ id = "cryomancer_frostbite",
+ layout = cardLayout,
+ effect = hitSelfEffect(1),
+ cost = sacrificeSelfCost,
+ trigger = autoTrigger,
+ playAllType = noPlayPlayType,
+ tags = {}
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+]],
+ }
+ )
+ }
+ )
+end
+
+-- START Rapid Frostbite (Skill-2a)
+function cryomancer_rapid_frostbiteskill_carddef()
local cardLayout = createLayout({
- name = "Focussed Research",
- art = "art/epicart/lesson_learned",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("fuel_2p") })
+ name = "Rapid Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
})
return createSkillDef({
- id = "pyromancer_2p_focussed_research_1_skill",
- name = "Focussed Research",
+ id = "cryomancer_deep_frostbiteskill",
+ name = "Rapid Frostbite",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/epicart/lesson_learned",
+ layoutPath = "art/epicart/frost_giant",
abilities = {
createAbility({
- id = "pyromancer_2p_focussed_research_1_ab",
+ id = "cryomancer_rapid_frostbiteskill_ab",
trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
+ activations = singleActivation,
layout = cardLayout,
- effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
- .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect()))
- .seq(gainHealthEffect(2)).seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
- min=1,
- max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
+ promptType = showPrompt,
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, deckPloc)),
+ cost = goldCost(2),
}),
}
})
end
---START Afterburn upgrades
-function pyromancer_after_burn_3a_carddef()
+-- START Deep Frostbite (Skill-2b)
+function cryomancer_deep_frostbiteskill_carddef()
local cardLayout = createLayout({
- name = "After Burn",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
+ name = "Deep Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
-]]
+
+
+
+
+
+ ]]
})
return createSkillDef({
- id = "pyromancer_after_burn_3a_skill",
- name = "After Burn",
+ id = "cryomancer_deep_frostbiteskill",
+ name = "Deep Frostbite",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/growing_flame",
+ layoutPath = "art/epicart/frost_giant",
abilities = {
createAbility({
- id = "after_burn_3a",
+ id = "cryomancer_deep_frostbiteskill_ab",
trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
+ activations = singleActivation,
layout = cardLayout,
- effect = gainCombatEffect(3).seq(gainHealthEffect(1)),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
+ promptType = showPrompt,
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc)).seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc))),
+ cost = goldCost(2),
}),
- }
-
- })
-end
-
-function pyromancer_after_burn_3b_carddef()
- local cardLayout = createLayout({
- name = "After Burn",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
+ }
+
+ })
+end
+
+
+
+-- START Instant Frostbite (Skill-3a)
+function cryomancer_instant_frostbiteskill_carddef()
+ local cardLayout = createLayout({
+ name = "Instant Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
-]]
+
+
+
+
+
+ ]]
})
return createSkillDef({
- id = "pyromancer_after_burn_3b_skill",
- name = "After Burn",
+ id = "cryomancer_instant_frostbiteskill",
+ name = "Instant Frostbite",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/growing_flame",
+ layoutPath = "art/epicart/frost_giant",
abilities = {
createAbility({
- id = "after_burn_3b",
+ id = "cryomancer_instant_frostbiteskill_ab",
trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
+ activations = singleActivation,
layout = cardLayout,
- effect = gainCombatEffect(3).seq(gainHealthEffect(1))
- .seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
- min=1,
- max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
+ promptType = showPrompt,
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, castPloc)).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_frostbite")).take(1))),
+ cost = goldCost(1),
}),
}
})
end
-function pyromancer_after_burn_3c_carddef()
+-- START Severe Frostbite (Skill-3b)
+function cryomancer_severe_frostbiteskill_carddef()
local cardLayout = createLayout({
- name = "After Burn",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
+ name = "Severe Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
-]]
+
+
+
+
+
+ ]]
})
return createSkillDef({
- id = "pyromancer_after_burn_3c_skill",
- name = "After Burn",
+ id = "cryomancer_severe_frostbiteskill",
+ name = "Severe Frostbite",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/growing_flame",
+ layoutPath = "art/epicart/frost_giant",
abilities = {
createAbility({
- id = "after_burn_3c",
+ id = "cryomancer_severe_frostbiteskill_ab",
trigger = uiTrigger,
- promptType = showPrompt,
- activations = multipleActivations,
+ activations = singleActivation,
layout = cardLayout,
- effect = gainCombatEffect(1).seq(gainHealthEffect(3))
- .seq(drawCardsEffect(1))
- .seq(pushTargetedEffect({
- desc="Put a card on the top of your deck.",
- min=1,
- max=1,
- validTargets= selectLoc(loc(currentPid, handPloc)),
- targetEffect= moveToTopDeckTarget(true),
- tags = {}
- })),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
+ promptType = showPrompt,
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, castPloc)).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_frostbite")).take(1)))
+ .seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc))),
+ cost = goldCost(2),
}),
}
})
end
+-- START Extreme Frostbite (Skill-3c)
+function cryomancer_extreme_frostbiteskill_carddef()
+ local cardLayout = createLayout({
+ name = "Extreme Frostbite",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ })
--- START Ability upgrades 1p
---4a Phoenix Frenzy
-function pyromancer_phoenix_frenzy_1p_carddef()
- return createHeroAbilityDef({
- id = "conflagration_1p",
- name = "Phoenix Frenzy",
- types = { heroAbilityType },
- abilities = {
- createAbility({
- id = "conflagration_1pActivate",
- trigger = uiTrigger,
- promptType = showPrompt,
- layout = createLayout({
- name = "Phoenix Frenzy",
- art = "art/epicart/fireball",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_1p"))
- .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
- .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
- cost = sacrificeSelfCost
- }),
- },
- layout = createLayout({
- name = "Phoenix Frenzy",
- art = "art/epicart/fireball",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- layout = createLayout({
- name = "Phoenix Frenzy",
- art = "art/epicart/fireball",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- layoutPath = "art/epicart/fireball",
- })
-end
-
---5a Phoenix Fury
-function pyromancer_phoenix_fury_1p_carddef()
- return createHeroAbilityDef({
- id = "conflagration_1p",
- name = "Phoenix Fury",
- types = { heroAbilityType },
- abilities = {
- createAbility({
- id = "conflagration_1pActivate",
- trigger = uiTrigger,
- promptType = showPrompt,
- layout = createLayout({
- name = "Phoenix Fury",
- art = "art/T_pillar_of_fire",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_1p"))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
-
- cost = sacrificeSelfCost
- }),
- },
- layout = createLayout({
- name = "Phoenix Fury",
- art = "art/T_pillar_of_fire",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- layout = createLayout({
- name = "Phoenix Fury",
- art = "art/T_pillar_of_fire",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
-
- layoutPath = "art/T_pillar_of_fire",
- })
-end
-
---4b Phoenix Flare
-function pyromancer_phoenix_flare_1p_carddef()
- return createHeroAbilityDef({
- id = "conflagration_1p",
- name = "Phoenix Flare",
- types = { heroAbilityType },
+ return createSkillDef({
+ id = "cryomancer_extreme_frostbiteskill",
+ name = "Extreme Frostbite",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/frost_giant",
abilities = {
- createAbility({
- id = "conflagration_1pActivate",
- trigger = uiTrigger,
+ createAbility({
+ id = "cryomancer_extreme_frostbiteskill_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
promptType = showPrompt,
- layout = createLayout({
- name = "Phoenix Flare",
- art = "art/epicart/ascendant_pyromancer",
- xmlText = format([[
-
-
-
-
-
-
-
+ effect = createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc)).seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, discardPloc))).seq(gainCombatEffect(2)),
+ cost = goldCost(2),
+ }),
+ }
+
+ })
+end
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(6))
- .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
- .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
- cost = sacrificeSelfCost
- }),
- },
- layout = createLayout({
- name = "Phoenix Flare",
- art = "art/epicart/ascendant_pyromancer",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+-- Abilities
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- layout = createLayout({
- name = "Phoenix Flare",
- art = "art/epicart/ascendant_pyromancer",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+local CryoHvFogBuff = createGlobalBuff({
+ id="cryomancer_heavy_fog_ability",
+ name = "Heavy Fog",
+ abilities = {
+ createAbility({
+ id="cryomancer_heavy_fog_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Heavy Fog")).seq(clearTargets("Heavy Fog")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Heavy Fog",
+ art = "art/t_blow_away",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
-
- layoutPath = "art/epicart/ascendant_pyromancer",
- })
-end
+local CryoFrFogBuff = createGlobalBuff({
+ id="cryomancer_freezing_fog_ability",
+ name = "Freezing Fog",
+ abilities = {
+ createAbility({
+ id="cryomancer_freezing_fog_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Freezing Fog")).seq(clearTargets("Freezing Fog")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Freezing Fog",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
---5b Phoenix Flames
-function pyromancer_phoenix_flames_1p_carddef()
+local CryoHFBuff = createGlobalBuff({
+ id="cryomancer_hoarfrost_ability",
+ name = "Hoarfrost",
+ abilities = {
+ createAbility({
+ id="cryomancer_hoarfrost_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Hoarfrost")).seq(clearTargets("Hoarfrost")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Hoarfrost",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+local CryoSSBuff = createGlobalBuff({
+ id="cryomancer_snow_sqall_ability",
+ name = "Snow Squall",
+ abilities = {
+ createAbility({
+ id="cryomancer_snow_sqall_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Snow Squall")).seq(clearTargets("Snow Squall")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Snow Squall",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+local CryoISBuff = createGlobalBuff({
+ id="cryomancer_ice_sheet_ability",
+ name = "Ice Sheet",
+ abilities = {
+ createAbility({
+ id="cryomancer_ice_sheet_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Ice Sheet")).seq(clearTargets("Ice Sheet")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Ice Sheet",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+local CryoIFBuff = createGlobalBuff({
+ id="cryomancer_ice_floe_ability",
+ name = "Ice Floe",
+ abilities = {
+ createAbility({
+ id="cryomancer_ice_floe_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Ice Floe")).seq(clearTargets("Ice Floe")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Ice Floe",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+local CryoPFBuff = createGlobalBuff({
+ id="cryomancer_permafrost_ability",
+ name = "Permafrost",
+ abilities = {
+ createAbility({
+ id="cryomancer_permafrost_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Permafrost")).seq(clearTargets("Permafrost")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Permafrost",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+--1 Fog
+function cryomancer_fog_carddef()
return createHeroAbilityDef({
- id = "conflagration_1p",
- name = "Phoenix Flames",
+ id = "cryomancer_fog",
+ name = "Fog",
types = { heroAbilityType },
abilities = {
createAbility({
- id = "conflagration_1pActivate",
+ id = "fog_Activate",
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Phoenix Flames",
- art = "art/epicart/flames_of_furios",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(6))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
-
+ name = "Fog",
+ art = "art/t_blow_away",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 2 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(2)),
+ targetEffect = saveTarget("Fog").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoFogBuff, loc(oppPid, buffsPloc)))
+ }),
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Phoenix Flames",
- art = "art/epicart/flames_of_furios",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
+ name = "Fog",
+ art = "art/t_blow_away",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}),
- layoutPath = "art/epicart/flames_of_furios",
+ layoutPath = "art/t_blow_away",
})
end
---5c Spirit of the Phoenix
-function pyromancer_spirit_of_the_phoenix_1p_carddef()
- return createHeroAbilityDef({
- id = "conflagration_1p",
- name = "Spirit of the Phoenix",
- types = { heroAbilityType },
- abilities = {
- createAbility({
- id = "conflagration_1pActivate",
- trigger = uiTrigger,
- promptType = showPrompt,
- layout = createLayout({
- name = "Spirit of the Phoenix",
- art = "art/T_darian_war_mage",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_1p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_1p")).seq(gainHealthEffect(11))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_reckless_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_obsessive_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_1p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_focussed_research_1_skill"))), nullEffect())),
+--2 Heavy Fog
+function cryomancer_heavy_fog_carddef()
+ return createHeroAbilityDef({
+ id = "cryomancer_heavy_fog",
+ name = "Heavy Fog",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "heavy_fog_Activate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Heavy Fog",
+ art = "art/t_blow_away",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 2 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(2)),
+ targetEffect = saveTarget("Heavy Fog").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoHvFogBuff, loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_frostbite")).take(1)))
+ }),
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Spirit of the Phoenix",
- art = "art/T_darian_war_mage",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Heavy Fog",
+ art = "art/t_blow_away",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}),
- layoutPath = "art/T_darian_war_mage",
+ layoutPath = "art/t_blow_away",
})
end
--- START Ability upgrades 2p
---4a Phoenix Frenzy
-function pyromancer_phoenix_frenzy_2p_carddef()
+
+--3 Freezing Fog
+
+function cryomancer_freezing_fog_carddef()
return createHeroAbilityDef({
- id = "conflagration_2p",
- name = "Phoenix Frenzy",
+ id = "cryomancer_freezing_fog",
+ name = "Freezing Fog",
types = { heroAbilityType },
abilities = {
createAbility({
- id = "conflagration_2pActivate",
+ id = "Freezing_fog_Activate",
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Phoenix Frenzy",
- art = "art/epicart/fireball",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Freezing Fog",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 4 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(4)),
+ targetEffect = saveTarget("Freezing Fog").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoFrFogBuff, loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_frostbite")).take(1)))
+ }),
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Phoenix Frenzy",
- art = "art/epicart/fireball",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Freezing Fog",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}),
- layoutPath = "art/epicart/fireball",
+ layoutPath = "art/t_chaotic_gust",
})
end
---5a Phoenix Fury
-function pyromancer_phoenix_fury_2p_carddef()
+
+-- START Ability upgrades
+
+--4a Hoarfrost
+function cryomancer_hoarfrost_carddef()
return createHeroAbilityDef({
- id = "conflagration_2p",
- name = "Phoenix Fury",
+ id = "cryomancer_hoarfrost",
+ name = "Hoarfrost",
types = { heroAbilityType },
abilities = {
createAbility({
- id = "conflagration_2pActivate",
+ id = "hoarfrost_Activate",
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Phoenix Fury",
- art = "art/T_pillar_of_fire",
- xmlText = format([[
-
-
-
-
-
-
-
-
-
-
- ]],
- { getCounter("conflagration_2p") })
- }),
- effect = gainCombatEffect(getCounter("conflagration_2p"))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3a_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_reckless_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_reckless_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3b_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_obsessive_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_obsessive_research_1_skill"))), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),createCardEffect(pyromancer_after_burn_3c_carddef(), currentSkillsLoc), nullEffect()))
- .seq(ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("pyromancer_2p_focussed_research_1_skill")).count().gte(1),sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_focussed_research_1_skill"))), nullEffect())),
+ name = "Hoarfrost",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 6 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(6)),
+ targetEffect = saveTarget("Hoarfrost").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoHFBuff, loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_frostbite")).take(1)))
+ }),
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Phoenix Fury",
- art = "art/T_pillar_of_fire",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Hoarfrost",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}),
- layoutPath = "art/T_pillar_of_fire",
+ layoutPath = "art/t_chaotic_gust",
})
end
---4b Phoenix Flare
-function pyromancer_phoenix_flare_2p_carddef()
+
+--5a Snow squall
+function cryomancer_snow_squall_carddef()
return createHeroAbilityDef({
- id = "conflagration_2p",
- name = "Phoenix Flare",
+ id = "cryomancer_snow_squall",
+ name = "Snow Squall",
types = { heroAbilityType },
abilities = {
createAbility({
- id = "conflagration_2pActivate",
+ id = "snow_squall_Activate",
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Phoenix Flare",
- art = "art/epicart/ascendant_pyromancer",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Snow Squall",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 8 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(8)),
+ targetEffect = saveTarget("Snow Squall").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoSSBuff, loc(oppPid, buffsPloc)))
+ .seq(createCardEffect(cryomancer_frostbite_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_frostbite")).take(1)))
+ }),
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Phoenix Flare",
- art = "art/epicart/ascendant_pyromancer",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+
+
+
+Set aside a card of cost 8{gold} or less in your opponent's discard pile. The next time your opponent shuffles their deck, put that card on the bottom of their deck." fontsize="14" flexiblewidth="10" />
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/t_chaotic_gust",
+ })
+end
+
+--4b Ice Floe
+function cryomancer_ice_floe_carddef()
+ return createDef(
+ {
+ id = "cryomancer_ice_floe",
+ name = "Ice Floe",
+ types = {itemType, noSacrifice},
+ cardTypeLabel = "item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "ice_floe_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Ice Floe",
+ art = "art/t_heavy_gust",
+ frame = "frames/wizard_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
-
-
- ]],
- { getCounter("conflagration_2p") })
- }),
- layoutPath = "art/epicart/ascendant_pyromancer",
- })
-end
+ }
+ )
+ }
+ )
+end
---5b Phoenix Flames
-function pyromancer_phoenix_flames_2p_carddef()
+function cryomancer_ice_floe_ab_carddef()
return createHeroAbilityDef({
- id = "conflagration_2p",
- name = "Phoenix Flames",
+ id = "cryomancer_ice_floe_ab",
+ name = "Ice Floe",
types = { heroAbilityType },
abilities = {
createAbility({
- id = "conflagration_2pActivate",
+ id = "ice_floe_Activate",
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Phoenix Flames",
- art = "art/epicart/flames_of_furios",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Ice Floe",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 4 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(4)),
+ targetEffect = saveTarget("Ice Floe").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoIFBuff, loc(oppPid, buffsPloc)))
+ })
+ .seq(createCardEffect(cryomancer_ice_floe_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_ice_floe")))),
+
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Phoenix Flames",
- art = "art/epicart/flames_of_furios",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Ice Floe",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}),
- layoutPath = "art/epicart/flames_of_furios",
+ layoutPath = "art/t_chaotic_gust",
})
end
---5c Spirit of the Phoenix
-function pyromancer_spirit_of_the_phoenix_2p_carddef()
+--5b Ice Sheet
+function cryomancer_ice_sheet_ab_carddef()
return createHeroAbilityDef({
- id = "conflagration_2p",
- name = "Spirit of the Phoenix",
+ id = "cryomancer_ice_sheet",
+ name = "Ice Sheet",
types = { heroAbilityType },
abilities = {
createAbility({
- id = "conflagration_2pActivate",
+ id = "ice_sheet_Activate",
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Spirit of the Phoenix",
- art = "art/T_darian_war_mage",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Ice Sheet",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 6 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(6)),
+ targetEffect = saveTarget("Ice Sheet").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoISBuff, loc(oppPid, buffsPloc)))
+ })
+ .seq(createCardEffect(cryomancer_ice_floe_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cryomancer_ice_floe")))),
cost = sacrificeSelfCost
- }),
+ })
},
layout = createLayout({
- name = "Spirit of the Phoenix",
- art = "art/T_darian_war_mage",
- frame = "frames/Wizard_CardFrame",
- xmlText = format([[
-
-
-
-
-
-
-
+ name = "Ice Sheet",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
}),
- layoutPath = "art/T_darian_war_mage",
+ layoutPath = "art/t_chaotic_gust",
})
end
-function pyromancer_play_with_fire_carddef()
+--5c Permafrost
+
+function cryomancer_permafrost_carddef()
+
+ return createDef(
+ {
+ id = "cyromancer_permafrost",
+ name = "Permafrost",
+ types = {itemType, noSacrifice},
+ cardTypeLabel = "item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "permafrost_no_sac",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = addSlotToTarget(createSlot({ id = slotNoSacrifice, expiresArray = { neverExpiry } })).apply(selectSource())
+
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Permafrost",
+ art = "art/t_heavy_gust",
+ frame = "frames/wizard_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+function cryomancer_permafrost_ab_carddef()
return createHeroAbilityDef({
- id = "play_with_fire",
- name = "Play With Fire",
+ id = "cryomancer_permafrost_ab",
+ name = "Permafrost",
types = { heroAbilityType },
abilities = {
- createAbility( {
- id = "play_with_fire_ab",
- trigger = uiTrigger,
- activations = singleActivation,
- promptType = showPrompt,
- layout = createLayout({
- name = "Play With Fire",
- art = "art/T_Spreading_Sparks",
- xmlText = [[
-
-
-
- ]]
-
- }),
- effect = gainCombatEffect(2),
- cost = sacrificeSelfCost,
- }),
- },
+ createAbility({
+ id = "permafrost_Activate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Permafrost",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a card of cost 4 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(4)),
+ targetEffect = saveTarget("Permafrost").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoPFBuff, loc(oppPid, buffsPloc)))
+ })
+ .seq(createCardEffect(cryomancer_permafrost_carddef(), loc(oppPid, castPloc))).seq(moveTargetWithLocAndPlayer(deckPloc, oppPid).apply(selectLoc(loc(oppPid, castPloc)).where(isCardName("cyromancer_permafrost")))),
+
+ cost = sacrificeSelfCost
+ })
+ },
layout = createLayout({
- name = "Play With Fire",
- art = "art/T_Spreading_Sparks",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
- ]]
- }),
- layoutPath = "art/T_Spreading_Sparks",
+ name = "Permafrost",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/t_chaotic_gust",
})
end
+-- End of Cryomancer cards ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
--- End of Pyro Cards -----------------------------------------------------------------------------------------------------------------------
-- Auxiliary effects
local function goFirstEffect()
@@ -7951,7 +10358,35 @@ choose_pyromancer_carddef(),
pyromancer2_flame_hood_carddef(),
pyromancer_after_burn_3a_carddef(),
pyromancer_after_burn_3b_carddef(),
- pyromancer_after_burn_3c_carddef()
+ pyromancer_after_burn_3c_carddef(),
+
+choose_pyromancer_carddef(),
+ cryomancer_ice_sickle_carddef(),
+ cryomancer_frostwulf_carddef(),
+ cryomancer_ice_gem_carddef(),
+ cryomancer_freeze_carddef(),
+ cryomancer_deep_freeze_carddef(),
+ cryomancer_ice_sickles_carddef(),
+ cryomancer_cold_snap_carddef(),
+ cyromancer_polarmour_carddef(),
+ cryomancer_eternal_frost_carddef(),
+ cyromancer_cryonics_carddef(),
+ cryomancer_frostbite_carddef(),
+ cryomancer_rapid_frostbiteskill_carddef(),
+ cryomancer_deep_frostbiteskill_carddef(),
+ cryomancer_instant_frostbiteskill_carddef(),
+ cryomancer_severe_frostbiteskill_carddef(),
+ cryomancer_extreme_frostbiteskill_carddef(),
+ cryomancer_freezing_fog_carddef(),
+ cryomancer_hoarfrost_carddef(),
+ cryomancer_snow_squall_carddef(),
+ cryomancer_ice_floe_ab_carddef(),
+ cryomancer_ice_floe_carddef(),
+ cryomancer_ice_sheet_ab_carddef(),
+ cryomancer_permafrost_carddef(),
+ cryomancer_permafrost_ab_carddef(),
+ cryomancer_ice_mail_carddef()
+
--[[
choose_apothecary_carddef(),
apothecary_apprentice_potion_maker_carddef(),
@@ -8036,7 +10471,7 @@ choose_pyromancer_carddef(),
standardSetup(
g,
{
- description = "Custom Class Clash (level 12) script and classes by Aarkenell. Created 12.04.2024. Updated 08.10.24",
+ description = "Custom Class Clash (level 12) script and classes by Aarkenell. Created 12.04.2024. Updated 19.04.2025",
playerOrder = { plid1, plid2 },
ai = ai.CreateKillSwitchAi(createAggressiveAI(), createHardAi2()),
timeoutAi = createTimeoutAi(),
@@ -8093,16 +10528,16 @@ function endGame(g)
end
-
-function setupMeta(meta)
- meta.name = "Custom Class Clash (lvl 12)"
- meta.minLevel = 0
- meta.maxLevel = 0
- meta.introbackground = ""
- meta.introheader = ""
- meta.introdescription = ""
- meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/Custom Class Clash (lvl 12).lua"
+
+function setupMeta(meta)
+ meta.name = "Custom Class Clash (lvl 12)"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/Custom Class Clash (lvl 12).lua"
meta.features = {
}
-
-end
\ No newline at end of file
+
+end
From 561fb1077e798035ca9f059165711ea5f2d17ed2 Mon Sep 17 00:00:00 2001
From: Aarkenell <143031422+Aarkenell@users.noreply.github.com>
Date: Thu, 12 Feb 2026 09:48:37 +0000
Subject: [PATCH 4/6] Add files via upload
---
Aarkenell/Vikings - Co-op.lua | 1495 +++++++++++++++++++++++++++++++++
1 file changed, 1495 insertions(+)
create mode 100644 Aarkenell/Vikings - Co-op.lua
diff --git a/Aarkenell/Vikings - Co-op.lua b/Aarkenell/Vikings - Co-op.lua
new file mode 100644
index 0000000..43c9b42
--- /dev/null
+++ b/Aarkenell/Vikings - Co-op.lua
@@ -0,0 +1,1495 @@
+require 'herorealms'
+require 'decks'
+require 'stdlib'
+require 'coopai'
+require 'timeoutai'
+
+isCoop = true
+
+local function viking_boss_mead_carddef()
+ local card_name = "viking_boss_mead"
+
+ return createItemDef({
+ id = "viking_boss_mead",
+ name = "Mead",
+ types = { itemType },
+ aiPriority = toIntExpression(-1),
+ acquireCost = 0,
+ abilities = {
+ createAbility({
+ id = "viking_boss_mead",
+ effect = gainHealthEffect(1),
+ cost = noCost,
+ trigger = onPlayTrigger,
+ tags = { },
+ aiPriority = toIntExpression(-2)
+ })
+ },
+ layout = createLayout(
+ {
+ name = "Mead",
+ art = "art/treasures/T_Fighter_Elixir_Red",
+ frame = "frames/barbarian_frames/barbarian_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]]
+ }
+ )
+ })
+end
+
+
+function vikingSetupBuffDef()
+
+local ef_4 = gainMaxHealthEffect(currentPid, const(-20)).seq(healPlayerEffect(currentPid, -20))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="What a feeble lot of peasants.",
+ waitForClick= constBoolExpression(false)
+ }))
+
+local ef_6 = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Bring me mead.",
+ waitForClick= constBoolExpression(false)
+ })
+
+local ef_14 = gainMaxHealthEffect(currentPid, const(20)).seq(healPlayerEffect(currentPid, 20))
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="I will carve my name in your shield with my axe!",
+ waitForClick= constBoolExpression(false)
+ }))
+
+
+ local efvikingSetup =
+ --level 1-4
+ ifElseEffect(getHeroLevel(oppPid).lte(4),
+ ef_4, nullEffect())
+
+ --level 1-6
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ ef_6, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(shields_a_buff_def(), loc(oppPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(shields_a_buff_def(), loc(nextOppPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(plunderstruck_0_skill_def(), loc(currentPid, skillsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(plunderstruck_0_skill_def(), loc(nextAllyPid, skillsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(plunderstruck_0_upgrade_BuffDef(), loc(currentPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(plunderstruck_0_upgrade_BuffDef(), loc(nextAllyPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("viking_boss_berserker_elite")).take(1)), nullEffect())) --removes both
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("viking_boss_bogmær")).take(1)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("viking_boss_axe_maker")).take(1)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("viking_boss_karl")).take(1)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(viking_boss_mead_carddef(), loc(currentPid, deckPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(viking_boss_mead_carddef(), loc(currentPid, deckPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(viking_boss_mead_carddef(), loc(currentPid, deckPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).lte(6),
+ createCardEffect(viking_boss_mead_carddef(), loc(currentPid, deckPloc)), nullEffect()))
+ .seq(shuffleEffect(currentDeckLoc))
+
+ --level 7+
+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7),
+ createCardEffect(shields_buff_def(), loc(oppPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7),
+ createCardEffect(shields_buff_def(), loc(nextOppPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7),
+ createCardEffect(plunderstruck_skill_def(), loc(currentPid, skillsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7),
+ createCardEffect(plunderstruck_skill_def(), loc(nextAllyPid, skillsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7),
+ createCardEffect(plunderstruck_upgrade_BuffDef(), loc(currentPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(7),
+ createCardEffect(plunderstruck_upgrade_BuffDef(), loc(nextAllyPid, buffsPloc)), nullEffect()))
+
+ --level 9+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(9),
+ createCardEffect(flamesword_BuffDef(), loc(currentPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(9),
+ createCardEffect(flamesword_BuffDef(), loc(nextAllyPid, buffsPloc)), nullEffect()))
+
+
+ --level 12+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("dagger"))), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ sacrificeTarget().apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("dagger"))), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ createCardEffect(shortsword_carddef(), loc(currentPid, deckPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(12),
+ createCardEffect(shortsword_carddef(), loc(currentPid, deckPloc)), nullEffect()))
+ .seq(shuffleEffect(currentDeckLoc))
+
+ --level 14+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(14),
+ ef_14, nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(14),
+ createCardEffect(summon_axe_maker_BuffDef(), loc(currentPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(14),
+ createCardEffect(summon_axe_maker_BuffDef(), loc(nextAllyPid, buffsPloc)), nullEffect()))
+
+
+ --level 16+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(16),
+ createCardEffect(thors_blessing_BuffDef(), loc(currentPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(16),
+ createCardEffect(thors_blessing_BuffDef(), loc(nextAllyPid, buffsPloc)), nullEffect()))
+
+ --level 18+
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(18),
+ createCardEffect(last_stand_BuffDef(), loc(currentPid, buffsPloc)), nullEffect()))
+ .seq(ifElseEffect(getHeroLevel(oppPid).gte(18),
+ createCardEffect(last_stand_BuffDef(), loc(nextAllyPid, buffsPloc)), nullEffect()))
+
+
+
+ return createGlobalBuff({
+ id="vikingSetupBuff",
+ name = "Viking Setup",
+ abilities = {
+
+ createAbility({
+ id="viking_setup_effect",
+ trigger = startOfGameTrigger,
+ effect = efvikingSetup
+
+
+ })
+ }
+ })
+end
+
+ local hitHardbuff = createGlobalBuff({
+ id="hitHardbuff",
+ name = "Hit Hard",
+ abilities = {
+ createAbility({
+ id= "hitHardbuff",
+ trigger = startOfGameTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Hit Hard",
+ art = "art/classes/barbarian/terrifying_howl",
+ text = "Doesn't like being hit too hard."
+ })
+ })
+
+
+
+
+-- Additional cards
+
+local function vikings_shield_token_carddef()
+local card_name = "vikings_shield_token"
+
+ return createChampionDef(
+ {
+ id = "vikings_shield_token",
+ name = "Shields",
+ types = {eliteMinionType, championType, tokenType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "shield_token_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )},
+ layout = createLayout(
+ {
+ name = "Shield",
+ art = "art/epicart/white_knight",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_berserker_token_carddef()
+ local card_name = "viking_boss_berserker_token"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_berserker_token",
+ name = "Berserker",
+ types = {championType, noStealType, tokenType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "berserker_token_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
+ }
+ ),
+
+ --health ability
+ createAbility(
+ {
+ id = "berserker_token_health",
+ trigger = endOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = grantHealthTarget(-2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "").apply(selectSource())
+ }
+ ),
+
+ --self sac ability
+ createAbility(
+ {
+ id = "viking_boss_berserker_token_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Berserker token",
+ art = "art/epicart/scarred_berserker",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 4,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+
+local function viking_boss_berserker_elite_carddef()
+ local card_name = "viking_boss_berserker_elite"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_berserker_elite",
+ name = "Berserker Elite",
+ types = {championType, eliteMinionType, noStealType},
+ acquireCost = 0,
+ health = 6,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "berserker_elite_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4)
+ .seq(addSlotToPlayerEffect(currentPlayer(), createPlayerSlot({
+ key = berserkSlotKey,
+ expiry = { endOfTurnExpiry }
+ })))
+
+ }
+ ),
+
+ --spawn ability
+ createAbility(
+ {
+ id = "berserker_elite_spawn",
+ trigger = onPlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = createCardEffect(viking_boss_berserker_token_carddef(), loc(currentPid, inPlayPloc))
+ .seq(createCardEffect(viking_boss_berserker_token_carddef(), loc(nextAllyPid, inPlayPloc)))
+
+ }
+ ),
+
+ --health ability
+ createAbility(
+ {
+ id = "berserker_elite_health",
+ trigger = endOfTurnTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = grantHealthTarget(-2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "").apply(selectSource())
+ }
+ ),
+
+ },
+
+ layout = createLayout(
+ {
+ name = "Berserker Elite",
+ art = "art/epicart/velden__frost_titan",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 6,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_huskarl_carddef()
+ local card_name = "viking_boss_huskarl"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_huskarl",
+ name = "Huskarl",
+ types = {championType, eliteMinionType, noStealType},
+ acquireCost = 0,
+ health = 3,
+ isGuard = true,
+ aiPriority = toIntExpression(5),
+ abilities = {
+ createAbility(
+ {
+ id = "huskarl_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3),
+ aiPriority = toIntExpression(5)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Huskarl",
+ art = "art/epicart/brand__rebel_fighter",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_karl_carddef()
+ local card_name = "viking_boss_karl"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_karl",
+ name = "Karl",
+ types = {championType, eliteMinionType, noStealType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "karl_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Karl",
+ art = "art/classes/barbarian/growl",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_axe_maker_carddef()
+ local card_name = "viking_boss_axe_maker"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_axe_maker",
+ name = "Axe Maker",
+ types = { championType, eliteMinionType, noStealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "axe_maker_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = createCardEffect(fighter_throwing_axe_carddef(), loc(currentPid, deckPloc)).seq(moveToTopDeckTarget(true).apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("fighter_throwing_axe")).take(1)))
+
+ }
+ ),
+
+
+ --[[createAbility(
+ {
+ id = "axe_maker_protect",
+ effect = addSlotToTarget(createNoAttackSlot({ startOfOwnerTurnExpiry, leavesPlayExpiry })).apply(selectSource()),
+ cost = noCost,
+ trigger = onPlayTrigger,
+ aiPriority = toIntExpression(100)
+
+ }
+ )
+ ]]
+ },
+ layout = createLayout(
+ {
+ name = "Axe Maker",
+ art = "art/classes/barbarian/smoldering_rage_calm",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+
+local function viking_boss_bogmær_carddef()
+ local card_name = "viking_boss_bogmær"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_bogmær",
+ name = "Bogmær",
+ types = { championType, eliteMinionType, nostealType},
+ acquireCost = 0,
+ health = 2,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "bogmær_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2)
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Bogmær",
+ art = "art/epicart/keira__wolf_caller",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+ ]],
+ health = 2,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+
+local function viking_boss_valkyrie1_token_carddef()
+ local card_name = "viking_boss_valkyrie1_token"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_valkyrie1_token",
+ name = "Valkyrie",
+ types = {championType, eliteMinionType, noStealType, tokenType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "valkyrie1_token_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3)
+
+ }
+ ),
+
+ --self sac ability
+ createAbility(
+ {
+ id = "viking_boss_valkyrie1_token_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Valkyrie",
+ art = "art/epicart/angel_of_mercy",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 4,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+local function viking_boss_valkyrie2_token_carddef()
+ local card_name = "viking_boss_valkyrie2_token"
+
+ return createChampionDef(
+ {
+ id = "viking_boss_valkyrie2_token",
+ name = "Valkyrie",
+ types = {championType, eliteMinionType, noStealType, tokenType},
+ acquireCost = 0,
+ health = 4,
+ isGuard = true,
+ abilities = {
+ createAbility(
+ {
+ id = "valkyrie2_token_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3)
+
+ }
+ ),
+
+ --self sac ability
+ createAbility(
+ {
+ id = "viking_boss_valkyrie2_token_sac",
+ trigger = onLeavePlayTrigger,
+ cost = sacrificeSelfCost,
+ activations = singleActivations,
+ effect = nullEffect()
+ }
+
+ )
+ },
+
+ layout = createLayout(
+ {
+ name = "Valkyrie",
+ art = "art/epicart/angelic_protector",
+ frame = "frames/barbarian_frames/barbarian_champion_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 4,
+ isGuard = true
+ }
+ )
+ }
+ )
+end
+
+
+---- game setup
+function setupGame(g)
+
+ standardSetup(g, {
+ description = "Vikings Co-op. Created by Aarkenell 09/06/2025. Updated 01/09/2025",
+ ai = createCoopAi(),
+ timeoutAi = createTimeoutAi(),
+ playerOrder = { plid3, plid1, plid4, plid2 },
+ opponents = { { plid1, plid3 }, { plid2, plid4 }},
+ players = {
+ {
+ id = plid1,
+ canAttackAllyOppChampions = true,
+ init = {
+ fromEnv = plid1
+ },
+ avatar = "cleric_01",
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+ }
+ }
+ },
+ {
+ id = plid2,
+ canAttackAllyOppChampions = true,
+ startDraw = 5,
+ init = {
+ fromEnv = plid2
+ },
+ avatar = "fighter_01",
+ cards = {
+ buffs = {
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+
+
+ }
+ }
+ },
+ {
+ id = plid3,
+ isAi = true,
+ name = "Vikings",
+ syncHealth = true,
+ startDraw = 3,
+ avatar = "Barbarian_01",
+ health = 100,
+ cards = {
+ deck = {
+ {qty = 2, card = dagger_carddef()},
+ {qty = 2, card = shortsword_carddef()},
+ {qty = 4, card = barbarian_hand_axe_carddef()},
+ {qty = 2, card = viking_boss_huskarl_carddef()},
+
+ {qty = 5, card = viking_boss_karl_carddef()},
+
+ {qty = 2, card = viking_boss_berserker_elite_carddef()},
+ {qty = 2, card = viking_boss_axe_maker_carddef()},
+ {qty = 4, card = viking_boss_mead_carddef()},
+ {qty = 2, card = viking_boss_bogmær_carddef()},
+
+ },
+ skills = {
+ },
+ buffs = {
+ bossMoveCardsAtTurnEndDef(),
+ shareDiscardsAtTurnStartDef(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ aiTurnBuffDef(),
+ vikingSetupBuffDef(),
+ hitHardbuff
+
+
+ }
+ }
+ },
+ {
+ id = plid4,
+ isAi = true,
+ name = "Vikings",
+ syncHealth = true,
+ startDraw = 0,
+ avatar="Barbarian_01",
+ health = 100,
+ cards = {
+ skills = {
+ },
+ buffs = {
+ bossMoveCardsAtTurnEndDef(),
+ shareDiscardsAtTurnStartDef(),
+ drawCardsCountAtTurnEndDef(5),
+ discardCardsAtTurnStartDef(),
+ aiTurnBuffDef(),
+ hitHardbuff
+
+
+ }
+ }
+ }
+ }
+ })
+end
+
+-- buffs
+function summon_axe_maker_BuffDef()
+
+
+ local ef_Summon_AM = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Get back here and hand me some axes!!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(moveTarget(inPlayPloc).apply(selectLoc(loc(ownerPid, discardPloc)).where(isCardName('viking_boss_axe_maker')).take(1)))
+ .seq(addSlotToTarget(createNoAttackSlot({ startOfOwnerTurnExpiry, leavesPlayExpiry })).apply(selectLoc(loc(ownerPid, inPlayPloc)).where(isCardName('viking_boss_axe_maker'))))
+ .seq(createCardEffect(fighter_runic_throwing_axe_carddef(), loc(currentPid, handPloc)))
+ .seq(createCardEffect(fighter_runic_throwing_axe_carddef(), loc(currentPid, deckPloc)))
+ .seq(createCardEffect(fighter_runic_throwing_axe_carddef(), loc(currentPid, deckPloc)))
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("summon_axe_maker_buff"))))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, buffsPloc)).where(isCardName("summon_axe_maker_buff"))))
+
+return createGlobalBuff({
+ id="summon_axe_maker_buff",
+ name = "Get Some Axes",
+ abilities = {
+ createAbility({
+ id="summon_axe_maker_effect",
+ trigger = startOfTurnTrigger,
+ check = selectLoc(currentDiscardLoc).where(isCardName('viking_boss_axe_maker')).count().gte(1),
+ effect = ifElseEffect(getPlayerHealth(currentPid).lte(65), ef_Summon_AM, nullEffect()),
+ cost = noCost
+
+ })
+ },
+ --[[buffDetails = createBuffDetails({
+ name = "",
+ art = "",
+ text = ""
+ })
+ ]]
+ })
+end
+
+function plunderstruck_0_skill_def()
+
+
+ local cardLayout = createLayout({
+ name = "Plunderstruck",
+ art = "art/treasures/barbarian_pillage",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "plunderstruck_0_custom",
+ name = "Plunderstruck",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "godofplunderActivate",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost three or less for free.",
+ validTargets = selectLoc(centerRowLoc).where(isCardAcquirable().And(getCardCost().lte(3))),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+
+ layout = layoutCard(
+ {
+ title = "Plunderstruck",
+ art = "art/epicart/ceasefire",
+
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ promptType = showPrompt,
+ cost = noCost
+ })
+ },
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/treasures/barbarian_pillage"
+ })
+end
+
+function plunderstruck_0_upgrade_skill_def()
+
+
+ local cardLayout = createLayout({
+ name = "Plunderstruck",
+ art = "art/treasures/barbarian_pillage",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "plunderstruck_0_upgrade_custom",
+ name = "Plunderstruck",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "godofplunderActivate",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost six or less for free.",
+ validTargets = selectLoc(centerRowLoc).where(isCardAcquirable().And(getCardCost().lte(6))),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ promptType = showPrompt,
+ cost = noCost
+ })
+ },
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/treasures/barbarian_pillage"
+ })
+end
+
+function plunderstruck_0_upgrade_BuffDef()
+
+
+return createGlobalBuff({
+ id="plunderstruck_0_upgrade_buff",
+ name = "Plunderstruck Upgrade",
+ abilities = {
+ createAbility({
+ id="plunderstruck_0_upgrade_effect",
+ trigger = deckShuffledTrigger,
+ check = getTurnsPlayed(currentPid).gte(5),
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Plunder!",
+ waitForClick=constBoolExpression(false)
+ })
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Ah-aaah, ah-aaah, aaah-aaah! Plunder!",
+ waitForClick=constBoolExpression(false)
+ }))
+
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("plunderstruck_0_custom"))))
+ .seq(createCardEffect(plunderstruck_0_upgrade_skill_def(), currentSkillsLoc))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("plunderstruck_0_custom"))))
+ .seq(createCardEffect(plunderstruck_0_upgrade_skill_def(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, buffsPloc)).where(isCardName("plunderstruck_0_upgrade_buff"))))
+ .seq(waitForClickEffect("The Vikings can now plunder one card up to cost six each turn.")),
+ cost = sacrificeSelfCost
+
+ })
+ },
+
+ })
+end
+
+
+
+function plunderstruck_skill_def()
+
+
+ local cardLayout = createLayout({
+ name = "Plunderstruck",
+ art = "art/treasures/barbarian_pillage",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "plunderstruck_custom",
+ name = "Plunderstruck",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "godofplunderActivate",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost four or less for free.",
+ validTargets = selectLoc(centerRowLoc).where(isCardAcquirable().And(getCardCost().lte(4))),
+ min = 1,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ --pillage = Acquire a card for free. If it cost 3 or less put it into your hand. Draw 1.
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ promptType = showPrompt,
+ cost = noCost
+ })
+ },
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/treasures/barbarian_pillage"
+ })
+end
+
+function plunderstruck_upgrade_skill_def()
+
+ local cardLayout = createLayout({
+ name = "Plunderstruck",
+ art = "art/treasures/barbarian_pillage",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "plunderstruck_upgrade_custom",
+ name = "Plunderstruck",
+ cardTypeLabel = "Skill",
+ types = { skillType },
+ abilities = {
+ createAbility({
+ id = "godofplunderActivate",
+ trigger = uiTrigger,
+ activations = singleActivations,
+ effect = acquireForFreeTarget().apply(selectLoc(centerRowLoc).where(isCardAcquirable()).order(getCardCost()).reverse().take(1)),
+
+ layout = layoutCard(
+ {
+ title = "Splintered Thandar",
+ art = "art/epicart/ceasefire",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ promptType = showPrompt,
+ cost = noCost
+ })
+ },
+ cardEffectAbilities = {},
+ layout = cardLayout,
+ layoutPath= "art/treasures/barbarian_pillage"
+ })
+end
+
+function plunderstruck_upgrade_BuffDef()
+
+
+return createGlobalBuff({
+ id="plunderstruck_upgrade_buff",
+ name = "Plunderstruck Upgrade",
+ abilities = {
+ createAbility({
+ id="plunderstruck_upgrade_effect",
+ trigger = deckShuffledTrigger,
+ check = getTurnsPlayed(currentPid).gte(4),
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Plunder!",
+ waitForClick=constBoolExpression(false)
+ })
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Ah-ah, ah-ah, aaaaah! Plunder!",
+ waitForClick=constBoolExpression(false)
+ }))
+
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("plunderstruck_custom"))))
+ .seq(createCardEffect(plunderstruck_upgrade_skill_def(), currentSkillsLoc))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("plunderstruck_custom"))))
+ .seq(createCardEffect(plunderstruck_upgrade_skill_def(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("plunderstruck_upgrade_buff"))))
+ .seq(waitForClickEffect("The Vikings can now plunder one card of any cost each turn.")),
+ cost = sacrificeSelfCost
+
+ })
+ },
+
+ })
+end
+
+function shields_a_buff_def()
+
+
+ local ef_Shields1 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Shields!!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(createCardEffect(vikings_shield_token_carddef(), loc(oppPid, inPlayPloc)))
+
+ local ef_Shields2 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Arrgh!!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(hitSelfEffect(2))
+
+ local ef_Shields0 = randomEffect({
+ valueItem(2, ef_Shields1),
+ valueItem(1, ef_Shields2),
+ })
+
+
+return createGlobalBuff({
+ id="shields_buff_buff",
+ name = "Hit Hard",
+ abilities = {
+ createAbility({
+ id="shields_buff_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(getPlayerDamageReceivedThisTurn(oppPid).gte(10), ef_Shields0, nullEffect()),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function shields_buff_def()
+
+
+ local ef_Shields1 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Shields!!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(createCardEffect(vikings_shield_token_carddef(), loc(oppPid, inPlayPloc)))
+ .seq(createCardEffect(vikings_shield_token_carddef(), loc(oppPid, inPlayPloc)))
+
+ local ef_Shields2 = showSpeechBubbleEffect({
+ playerExpression=oppPid,
+ text="Arrgh!!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(hitSelfEffect(4))
+
+ local ef_Shields0 = randomEffect({
+ valueItem(2, ef_Shields1),
+ valueItem(1, ef_Shields2),
+ })
+
+
+return createGlobalBuff({
+ id="shields_buff_buff",
+ name = "Hit Hard",
+ abilities = {
+ createAbility({
+ id="shields_buff_effect",
+ trigger = endOfTurnTrigger,
+ effect = ifElseEffect(getPlayerDamageReceivedThisTurn(oppPid).gte(10), ef_Shields0, nullEffect()),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function thors_blessing_skill_def()
+
+
+ local cardLayout = createLayout({
+ name = "Thor's Blessing",
+ art = "art/treasures/fighter_lightning_longsword",
+ xmlText = [[
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "thors_blessing_custom",
+ name = "Thor's blessing",
+ abilities = {
+ createAbility({
+ id="thors_blessing_skill",
+ trigger = endOfTurnTrigger,
+ effect = moveTarget(loc(nextAllyPid, handPloc)).apply(selectLoc(loc(currentPid, discardPloc)).where(isCardName("fighter_lightning_longsword"))),
+ cost = noCost
+
+ })
+ },
+ cardTypeLabel = "Skill",
+ types = { skillType },
+
+ layout = cardLayout,
+ layoutPath= "art/treasures/fighter_lightning_longsword"
+ })
+end
+
+--[[function thors_blessing_return_BuffDef()
+ local buff_name = "thors_blessing_return_buff"
+
+return createGlobalBuff({
+ id="thors_blessing_return_buff",
+ name = "Thor's Blessing Return",
+ abilities = {
+ createAbility({
+ id="thors_blessing_return_effect",
+ trigger = endOfTurnTrigger,
+ effect = moveTarget(loc(nextAllyPid, handPloc)).apply(selectLoc(loc(currentPid, discardPloc)).where(isCardName("fighter_lightning_longsword"))),
+ cost = noCost
+
+ })
+ },
+
+ })
+end]]
+
+function thors_blessing_BuffDef()
+
+return createGlobalBuff({
+ id="thors_blessing_buff",
+ name = "Thor's Blessing",
+ abilities = {
+ createAbility({
+ id="thors_blessing_effect",
+ trigger = startOfTurnTrigger,
+ check = getPlayerHealth(currentPid).lte(40),
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Thor watches over us!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(createCardEffect(fighter_lightning_longsword_carddef(), loc(currentPid, handPloc)))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("thors_blessing_buff"))))
+ .seq(waitForClickEffect("Thor's Lightning Sword will return to the Viking's hand each turn."))
+ .seq(createCardEffect(thors_blessing_skill_def(), loc(currentPid, skillsPloc)))
+ .seq(createCardEffect(thors_blessing_skill_def(), loc(nextAllyPid, skillsPloc)))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("thors_blessing_buff")))),
+ cost = sacrificeSelfCost
+
+ })
+ },
+ --[[buffDetails = createBuffDetails({
+ name = "Thor's Blessing",
+ art = "art/treasures/fighter_lightning_longsword",
+ text = "Return your Lightning Sword to your hand at the end of each turn."
+ })
+ ]]
+ })
+end
+
+function flamesword_BuffDef()
+
+ local ef_flame_sword = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="What are these foul creatures?",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Let's see how they handle a flame.",
+ waitForClick= constBoolExpression(false)
+ }))
+ .seq(transformTarget("fighter_flaming_longsword").apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc))).union(selectLoc(loc(currentPid, discardPloc))).where(isCardName("shortsword"))))
+ .seq(waitForClickEffect("All the Viking's swords are now Flaming Longswords."))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, skillsPloc)).where(isCardName("flamesword_custom"))))
+ .seq(sacrificeSelf())
+
+return createGlobalBuff({
+ id="flamesword_buff",
+ name = "Flame Sword Buff",
+ abilities = {
+ createAbility({
+ id="flamesword_effect",
+ trigger = startOfTurnTrigger,
+ effect = ifElseEffect(selectLoc(loc(oppPid, inPlayPloc)).where(isCardType(tokenType).Or(isCardType(woodlandType))).count().gte(3), ef_flame_sword, nullEffect()),
+ cost = noCost
+
+ })
+ },
+
+ })
+end
+
+function last_stand_BuffDef()
+
+return createGlobalBuff({
+ id="last_stand_buff",
+ name = "Last stand",
+ abilities = {
+ createAbility({
+ id="last_stand_effect",
+ trigger = startOfTurnTrigger,
+ check = getPlayerHealth(currentPid).lte(20),
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Til Valhalla!",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(createCardEffect(viking_boss_valkyrie1_token_carddef(), loc(currentPid, inPlayPloc)))
+ .seq(createCardEffect(viking_boss_valkyrie2_token_carddef(), loc(currentPid, inPlayPloc))).seq(createCardEffect(viking_boss_berserker_token_carddef(), loc(currentPid, inPlayPloc)))
+ .seq(addSlotToTarget(createNoAttackSlot({ startOfOwnerTurnExpiry, startOfTurnExpiry })).apply(selectLoc(loc(ownerPid, inPlayPloc)).where(isCardName('viking_boss_valkyrie1_token'))))
+ .seq(addSlotToTarget(createNoAttackSlot({ startOfOwnerTurnExpiry, startOfTurnExpiry })).apply(selectLoc(loc(ownerPid, inPlayPloc)).where(isCardName('viking_boss_berserker_token'))))
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("last_stand_buff")))),
+ cost = sacrificeSelfCost
+
+ })
+ },
+
+ })
+end
+
+function last_stand2_BuffDef()
+
+return createGlobalBuff({
+ id="last_stand2_buff",
+ name = "Last stand...again",
+ abilities = {
+ createAbility({
+ id="last_stand2_effect",
+ trigger = onZeroHealthTrigger,
+ effect = showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="Soon I will drink with Odin.",
+ waitForClick= constBoolExpression(false)
+ })
+ .seq(showSpeechBubbleEffect({
+ playerExpression=currentPid,
+ text="But not yet... Not yet.",
+ waitForClick= constBoolExpression(false)
+ }))
+ .seq(gainMaxHealthEffect(ownerPid, const(5).add(getPlayerMaxHealth(ownerPid).negate()))).seq(healPlayerEffect(ownerPid, 5))
+ .gainToughnessEffect(10)
+
+ .seq(sacrificeTarget().apply(selectLoc(loc(nextAllyPid, buffsPloc)).where(isCardName("last_stand2_buff")))),
+ cost = sacrificeSelfCost
+
+ })
+ },
+
+ })
+end
+
+
+
+function endGame(g)
+end
+
+
+ function setupMeta(meta)
+ meta.name = "Vikings - Co-op"
+ meta.minLevel = 0
+ meta.maxLevel = 0
+ meta.introbackground = ""
+ meta.introheader = ""
+ meta.introdescription = ""
+ meta.path = "C:/Users/aaron/OneDrive/Documents/Aaron/Hero Realms/Lua/Vikings - Co-op.lua"
+ meta.features = {
+}
+
+ end
+
+ function setupCoopIntro(encounter)
+ encounter.name = "Vikings - Co-op"
+ encounter.description = "Created by Aarkenell"
+ encounter.minlevel = 1
+ encounter.maxlevel = 24
+ encounter.avatar = "avatars/WarInTheWild/droga__guild_enforcer"
+ encounter.heroname = "Vikings"
+ encounter.backgroundPath = "scenariointrobackgrounds/smuggling_operation"
+ encounter.features = {
+ encounter.feature("avatars/warinthewild/droga__guild_enforcer", "I was caught, In the middle of a Thandarian track. (Plunder). I looked 'round, And I knew there was no turning back. (Plunder) My mind raced, And I thought, 'What could I do?' (Plunder)"),
+ encounter.feature("avatars/smugglers", "And I knew, there was no help, no help from you. (Plunder) Sound of the drums. Beating in my heart. The plunder of gems. Tore me apart. You've been... Plunderstruck."),
+ encounter.feature("avatars/cristov_s_recruits", "The Vikings are coming to Plunder the city. Repel them. But don't hit them too hard. And watch out for assistance from their gods and legendary Valkyrie.")
+ }
+end
+
+
+
From bcf1114edb7c6995e27062078cf51b13817c2e7a Mon Sep 17 00:00:00 2001
From: Aarkenell <143031422+Aarkenell@users.noreply.github.com>
Date: Thu, 12 Feb 2026 20:12:21 +0000
Subject: [PATCH 5/6] Update 12 classes in one
Updated to decapitalise art and framework filepaths - post WWG update 19.04.2025
---
Aarkenell/12 classes in one | 3461 ++++++++++++++++++++++++++---------
1 file changed, 2619 insertions(+), 842 deletions(-)
diff --git a/Aarkenell/12 classes in one b/Aarkenell/12 classes in one
index 0583c00..88a606a 100644
--- a/Aarkenell/12 classes in one
+++ b/Aarkenell/12 classes in one
@@ -6,7 +6,14 @@ require "hardai"
require "mediumai"
require "easyai"
---[[ Updated 12.04.2024 by Aarkenell
+--[[ Updated 28/2/2025 by Aarkenell
+Terramancer & Pyromancer now have unique cards generated for eacFh player, for cards that have custom counters. This enables mirror matches with these classes.
+Dynamic text added to Pyro & Terra cards with counters.
+]]
+
+--[[
+Updates
+19.04.2025 - art and cardframe decapitalisation post WWG patch
]]
-- Game start --
@@ -18,51 +25,124 @@ local function chooseStart()
upperTitle = "Welcome! How would you like to proceed?",
lowerTitle = "",
--- 1.1 choice
- effectFirst= pushChoiceEffectWithTitle(
- {
-
- choices = {
- -- 1.1a choice - choose custom
- {
- effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+-- 1.1 choose class
+ effectFirst = pushChoiceEffect(
+{
+choices = {
+-- Choice 1: Classes by Aarkenell
+ {
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+ .union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
+ .seq(gainCombatEffect(-1))
+ .seq(setPlayerNameEffect("Unknown", currentPid))
+ .seq(setPlayerAvatarEffect("assassin", currentPid))
+ .seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
+ .seq(gainHealthEffect(50))
+ --.seq(createCardEffect(choose_lich_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_brewmaster_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_thandarlorian_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_terramancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_cryomancer_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_apothecary_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_demonologist_carddef(), loc(currentPid, asidePloc)))
+
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", "")),
+
+ layout = createLayout({
+ name = "Classes by Aarkenell",
+ art = "art/epicart/the_people_s_champion",
+ xmlText=[[
+
+
+
+
+ ]]
+ }),
+
+ tags = {}
+ },
+
+-- Choice 2: Class by other Designers
+{
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
.union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
.seq(gainCombatEffect(-1))
.seq(setPlayerNameEffect("Unknown", currentPid))
.seq(setPlayerAvatarEffect("assassin", currentPid))
.seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate())))
.seq(gainHealthEffect(50))
- .seq(createCardEffect(choose_S_and_R_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_paladin_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_witch_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_shaman_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_king_midas_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_brewmaster_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_thandarlorian_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_terramancer_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_pyromancer_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_cryomancer_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_apothecary_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(choose_demonologist_carddef(), loc(currentPid, asidePloc)))
- .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
- .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", ""))
- .seq(waitForClickEffect("Note: Game does not currently work properly if both players choose Pyromancer or both choose Terramancer.")),
+ .seq(createCardEffect(choose_S_and_R_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_paladin_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_witch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_shaman_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(choose_king_midas_carddef(), loc(currentPid, asidePloc)))
+
+ .seq(moveTarget(handPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ .seq(waitForClickEffect("Please play the card corresponding to the class you wish to play.", "")),
+
+ layout = createLayout({
+ name = "Classes by Other Designers",
+ art = "art/epicart/insurgency",
+ xmlText=[[
+
+
+
+
+ ]]
+ }) ,
+
+ tags = {}
+ },
+
+-- Choice 3: Random
+{
+ effect = moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, deckPloc)).union(selectLoc(loc(currentPid, skillsPloc)).union(selectLoc(loc(currentPid, reservePloc))
+ .union(selectLoc(loc(currentPid, buffsPloc)).where(isCardType(ogreType).Or(isCardType(orcType)).Or(isCardType(elfType).Or(isCardType(dwarfType).Or(isCardType(smallfolkType)).Or(isCardType(halfDemonType)).Or(isCardType(magicArmorType)).Or(isCardName("smallfolk_hide_buff"))))))))))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc))))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(choose_demonologist_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_apothecary_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_cryomancer_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_pyromancer_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_terramancer_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_thandarlorian_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_brewmaster_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_paladin_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_shaman_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_king_midas_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_witch_carddef(), currentHandLoc)),
+ valueItem(1, createCardEffect(choose_S_and_R_carddef(), currentHandLoc)),
+ --valueItem(1, createCardEffect(choose_lich_carddef(), currentHandLoc))
+ }))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(noUndoEffect()),
layout = createLayout({
- name = "Pick a custom class",
- art = "art/T_Storm_Siregar",
- xmlText=[[
-
-
-
+ name = "Random Class",
+ art = "art/t_confused_apparition",
+ xmlText=[[
+
+
+
+
+
+
+
+
-
]]
}),
tags = {}
- },
- -- 1.1b choice - choose standard
+ },
+
+-- Choice 4- choose standard
{
effect = pushChoiceEffectWithTitle(
{
@@ -75,7 +155,7 @@ level 3 Custom Characters to play." fontsize="26"/>
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -96,7 +176,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -115,9 +195,10 @@ Start playing." fontsize="30" flexiblewidth="1" />
upperTitle = "Confirm your choice. Do you want to use your standard Hero?",
lowerTitle = ""
}),
+ condition = getHeroLevel(currentPid).lte(4),
layout = createLayout({
name = "Selected class",
- art = "art/T_All_Heroes",
+ art = "art/t_storm_siregar",
xmlText=[[
@@ -126,14 +207,11 @@ Start playing." fontsize="30" flexiblewidth="1" />
]] }),
tags = {}
- }
- },
-
- upperTitle = "Make your choice.",
- lowerTitle = "Do you want to play as a custom class, or use the character you picked when starting the game?",
-
- }),
--- 1.2 choice
+ }
+}
+}
+),
+-- 1.2 choice - learn about the mod
effectSecond = pushChoiceEffectWithTitle(
{
@@ -144,18 +222,28 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout({
name = "Updates to this mod",
- art = "art/T_fighter_sharpening_stone",
- xmlText=[[
+ art = "art/t_fighter_sharpening_stone",
+ xmlText=[[
+
-
+
- ]]
+ ]]
+
}),
tags = {}
},
@@ -164,79 +252,47 @@ Demon Hunter custom card added to market deck
effect = nullEffect(),
layout = createLayout({
name = "Other mods to try",
- art = "art/treasures/T_spyglass",
+ art = "art/treasures/t_spyglass",
xmlText=[[
-
+
+<size=90%>Look out for these games in the custom lobby, or join the RealmsRising Discord to request custom challenges." fontsize="14"/>
]] }),
tags = {}
},
-
- -- 1.2c choice - Resolving game crashes
- {
- effect = storyTellEffectWithPortrait("origins_flawless_track", "Hi Folks – Aarkenell here – thanks for playing this mod. I hope you’re enjoying it.")
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "If you play HR on a mobile device and you’ve been playing custom games for a while"))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "you may notice that your games take longer to load or that the app crashes if you try to play more than one custom game in your queue."))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "A few community members and I have flagged this issue with the WWG team."))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "We know many people play exclusively on mobile, and this issue really detracts from your play experience."))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "We don’t know if/when they will be able to resolve this. So in the meantime, here’s a temporary fix:"))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "If you encounter game crashes whilst playing custom games, uninstalling and reinstalling the HR app will fix this issue. "))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "At least until you play a bunch more custom games."))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "(I play a lot of custom games and have only had to reinstall the game 2-3 times in about 18 months.)"))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "This will, of course, mean the app needs to download all of the file packages again, "))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "so you may want to do this whilst you’ve got access to a decent wifi connection. "))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "But at least you’ll be able to get back to your regular playing experience."))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "If/when WWG inform us of a more permanent fix, I’ll let you know."))
- .seq(storyTellEffectWithPortrait("origins_flawless_track", "Until then, happy gaming!"))
- .seq(leftStoryTellEffectWithPortrait("origins_flawless_track", "Now, please hit 'Undo' to return to the menu."))
- ,
-
- layout = createLayout({
- name = "Resolving game crashes",
- art = "art/T_word_of_power",
- xmlText=[[
-
-
-
-
-
- ]]
- }),
- tags = {}
- },
- -- 1.2d choice - Community news
+
+ -- 1.2c choice - Community news
{
- effect = storyTellEffectWithPortrait("ogre", "Hi! I’m Rob d’Ogrety, CEO of ‘Why’s Wizard Games?’")
- .seq(leftStoryTellEffectWithPortrait("inquisition", "And I’m Dwarfin Kastle – creator of the award-winning deckbuilding game about growing trees in space – Star Elms."))
- .seq(storyTellEffectWithPortrait("ogre", "We just wanted to take a moment to say how much we love the community that has sprung up around Hero Realms…"))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "We love you!"))
- .seq(storyTellEffectWithPortrait("ogre", " …and how much we love the experiments and new ideas being offered through custom lua scripting."))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "Yeah! We love lua!"))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "Lua, Lua! Oh baby! Me gotta go! Aye-yi-yi-yi!"))
- .seq(storyTellEffectWithPortrait("ogre", " Thanks DK."))
- .seq(storyTellEffectWithPortrait("ogre", "Be sure to join the Realms Rising server on Discord to share your feedback on this mod and to discover new custom games to play."))
- .seq(storyTellEffectWithPortrait("ogre", "And listen to the Sparks and Recreation podcast for information on Community events, meta-analysis, and everything Hero Realms."))
- .seq(storyTellEffectWithPortrait("ogre", "Or jump over to RealmsRising.com for in-depth articles on strategy and gameplay."))
+ effect = storyTellEffectWithPortrait("ogre_fighter_male_02", "Hi! I’m Rob d’Ogrety, CEO of ‘Why’s Wizard Games?’")
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "And I’m Dwarfin Kastle – creator of the award-winning deckbuilding game about growing trees in space – Star Elms."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "We just wanted to take a moment to say how much we love the community that has sprung up around Hero Realms…"))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "We love you!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", " …and how much we love the experiments and new ideas being offered through custom lua scripting."))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Yeah! We love lua!"))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Lua, Lua! Oh baby! We gotta code! Aye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", " Thanks DK."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Be sure to join the Realms Rising server on Discord to share your feedback on this mod and to discover new custom games to play."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_0", "And listen to the Sparks and Recreation podcast for information on Community events, meta-analysis, and everything Hero Realms."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Or jump over to RealmsRising.com for in-depth articles on strategy and gameplay."))
.seq(storyTellEffectWithPortrait("origins_flawless_track", "And if you have ideas for new custom classes or scenarios you’d like to see, drop me, Aarkenell, a message in the Realms Rising Discord."))
- .seq(storyTellEffectWithPortrait("ogre", "Whether you join the Realms Rising community or not, we hope you keep enjoying the game and all the custom content from our great community. "))
- .seq(storyTellEffectWithPortrait("ogre", "Bye for now."))
- .seq(leftStoryTellEffectWithPortrait("inquisition", "Lua, Lua! Oh baby! We gotta go. Bye-yi-yi-yi!"))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Whether you join the Realms Rising community or not, we hope you keep enjoying the game and all the custom content from our great community."))
+ .seq(storyTellEffectWithPortrait("ogre_fighter_male_02", "Bye for now."))
+ .seq(leftStoryTellEffectWithPortrait("dwarf_fighter_male_02", "Lua, Lua! Oh baby! We gotta go. Bye-yi-yi-yi!"))
.seq(storyTellEffectWithPortrait("origins_flawless_track", "Please hit 'Undo' to return to the menu."))
,
layout = createLayout({
name = "Community News",
- art = "art/T_borg_ogre_mercenary",
+ art = "art/t_borg_ogre_mercenary",
xmlText=[[
@@ -254,10 +310,10 @@ Here's how to fix it." fontsize="26"/>
}),
--- 1.1 layout
+-- 1.1 layout - choose class
layoutFirst = createLayout({
name = "To Battle!",
- art = "art/T_Unify_Apsara",
+ art = "art/t_unify_apsara",
xmlText=[[
@@ -267,17 +323,17 @@ Here's how to fix it." fontsize="26"/>
]]
}),
--- 1.2 layout
+-- 1.2 layout - learn about the mod
layoutSecond = createLayout({
name = "Updates & Info",
- art = "art/treasures/T_Magic_Scroll_Souveraine",
+ art = "art/treasures/t_magic_scroll_souveraine",
xmlText=[[
@@ -290,6 +346,220 @@ end
-- Custom Class Selection cards
+function choose_lich_carddef()
+
+ local ef_Corruption = createCardEffect(lich_corruption_carddef(), loc(currentPid, skillsPloc))
+ .seq(sacrificeSelf())
+
+ local corruption20buff = createGlobalBuff({
+ id="corruption20buff",
+ name = "Corruption",
+ abilities = {
+ createAbility({
+ id= "corruption20buff",
+ trigger = deckShuffledTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, inPlayPloc))).union(selectLoc(loc(currentPid, deckPloc))).where(isCardType(minionType).invert()).count().gte(20), ef_Corruption, nullEffect()),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Corruption",
+ art = "art/t_charing_guardian",
+ text = "When you shuffle your deck, if you have 20 or more cards in your deck, hand and in play (not including minions), gain the Corruption skill."
+ })
+ })
+
+
+ local Grimoirebuff = createGlobalBuff({
+ id="Grimoirebuff",
+ name = "Grimoire",
+ abilities = {
+ createAbility({
+ id= "Grimoirebuff",
+ trigger = startOfTurnTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Grimoire",
+ art = "art/t_rayla_endweaver",
+ text = "You start with 10 cards (8 unique minions) in your Grimoire. Whenever you perform a Summoning, randomly take one card from your Grimoire and put it into play. When a minion is stunned it returns to your Grimoire."
+ })
+ })
+
+ local souljarbuff = createGlobalBuff({
+ id="souljarbuff",
+ name = "Soul Jar",
+ abilities = {
+ createAbility({
+ id= "souljarbuff",
+ trigger = startOfTurnTrigger,
+ effect = nullEffect(),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Soul Jar",
+ art = "art/treasures/t_wizard_elixir_blue",
+ text = "Each game 1 of 6 Soul Jars are randomly chosen to determine the Lich's Health and Skill."
+ })
+ })
+
+
+ --[[local ef_Control = transformTarget("control_skill").apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("corruption_skill")).take(1))
+ .seq(sacrificeSelf())
+
+ local control30buff = createGlobalBuff({
+ id="control30buff",
+ name = "Control",
+ abilities = {
+ createAbility({
+ id= "control30buff",
+ trigger = deckShuffledTrigger,
+ effect = ifElseEffect(selectLoc(loc(currentPid, handPloc)).union(selectLoc(loc(currentPid, inPlayPloc))).union(selectLoc(loc(currentPid, deckPloc))).where(isCardType(minionType).invert()).count().gte(30), ef_Control, nullEffect()),
+ }),
+ },
+ buffDetails = createBuffDetails({
+ name = "Control",
+ art = "art/t_charing_guardian",
+ text = "When you shuffle your deck, if you have 30 or more cards in your deck, hand and in play (not including minions), replace Corruption skill with the Control skill."
+ })
+ })
+]]
+ return createDef({
+ id="choose_lich",
+ name="Choose the Lich",
+ types={noStealType, itemType},
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ acquireCost=0,
+ abilities = {
+ createAbility({
+ id="choose_lich",
+ trigger= onPlayTrigger,
+ playAllType = noPlayPlayType,
+ effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
+ .seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
+ .seq(setPlayerNameEffect("Lich", currentPid))
+ .seq(setPlayerAvatarEffect("WarInTheWild/krythos_master_vampire", currentPid))
+ --buffs
+ .seq(createCardEffect(corruption20buff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(Grimoirebuff, loc(currentPid, buffsPloc)))
+ .seq(createCardEffect(souljarbuff, loc(currentPid, buffsPloc)))
+ --.seq(createCardEffect(control30buff, loc(currentPid, buffsPloc)))
+
+ --soul jar skill
+ .seq(randomEffect({
+ valueItem(1, createCardEffect(lich_SJ_DI_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(35).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(35))),
+ valueItem(1, createCardEffect(lich_SJ_HoE_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(30).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(30))),
+ valueItem(1, createCardEffect(lich_SJ_UR_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(55).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(55))),
+ valueItem(1, createCardEffect(lich_SJ_M_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(45).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(45))),
+ valueItem(1, createCardEffect(lich_SJ_V_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(50).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(50))),
+ valueItem(1, createCardEffect(lich_SJ_IW_carddef(), loc(currentPid, skillsPloc)).seq(gainMaxHealthEffect(currentPid, const(40).add(getPlayerMaxHealth(currentPid).negate()))).seq(gainHealthEffect(40))),
+ }))
+
+ --deck
+ .seq(createCardEffect(lich_soul_diamond_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_soul_diamond_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(ruby_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_frozen_touch_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_soul_crush_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_minor_summoning_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(lich_major_summoning_carddef(), loc(currentPid, asidePloc)))
+ .seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
+ --grimoire minions
+ .seq(createCardEffect(lich_abomination_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_banshee_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_ghoul_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_revenant_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_skeleton_horde_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_bones_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_wall_of_fire_minion_carddef(), loc(nil, nullPloc)))
+ .seq(createCardEffect(lich_zombie_minion_carddef(), loc(nil, nullPloc)))
+ --setup
+ .seq(shuffleEffect(currentDeckLoc))
+ .seq(sacrificeTarget().apply(selectSource()))
+ .seq(pushChoiceEffectWithTitle(
+ {
+ choices = {
+ {
+ effect = moveTarget(tradeDeckLoc).apply(selectLoc(centerRowLoc))
+ .seq(shuffleTradeDeckEffect())
+ .seq(refillMarketEffect(const(0)).seq(refillMarketEffect(const(1))).seq(refillMarketEffect(const(2))).seq(refillMarketEffect(const(3))).seq(refillMarketEffect(const(4))))
+ .seq(addEffect(endTurnEffect())),
+ layout = createLayout(
+ {
+ name = "Yes",
+ art = "art/treasures/t_cleric_elixir_green",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ },
+
+ {
+ effect = nullEffect(),
+ layout = createLayout(
+ {
+ name = "No",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+ ]],
+
+ }
+ ),
+ tags = {}
+ }
+ },
+ upperTitle = "Confirm your choice. Do you want to use the lich?",
+ lowerTitle = ""
+ }))
+ })
+ },
+ layout = createLayout({
+ name = "Lich",
+ art = "art/t_charing_guardian",
+ frame = "frames/coop_campaign_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ })
+end
+
function choose_demonologist_carddef()
return createDef({
id="choose_demonologist",
@@ -335,7 +605,7 @@ function choose_demonologist_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -356,7 +626,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -379,8 +649,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "Demonologist",
- art = "art/T_Tyrannor_The_Devourer",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/epicart/dirge_of_scara",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -393,7 +663,7 @@ Demonologist" fontsize="26"/>
-
+
@@ -450,7 +720,7 @@ function choose_apothecary_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -471,7 +741,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -494,8 +764,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "Apothecary",
- art = "art/treasures/T_Green_Potions_Medium",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/treasures/t_green_potions_medium",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -530,15 +800,15 @@ function choose_cryomancer_carddef()
.seq(gainMaxHealthEffect(currentPid, const(52).add(getPlayerMaxHealth(currentPid).negate())))
.seq(gainHealthEffect(52))
.seq(createCardEffect(cryomancer_frostbiteskill_carddef(), currentSkillsLoc))
- .seq(createCardEffect(cryomancer_blizzard_carddef(), currentSkillsLoc))
+ .seq(createCardEffect(cryomancer_freezing_fog_carddef(), currentSkillsLoc))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(cryomancer_ice_burst_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(cryomancer_ice_shield_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_ice_sickle_carddef(), loc(currentPid, asidePloc)))
+ .seq(createCardEffect(cryomancer_frostwulf_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(cryomancer_ice_gem_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(cryomancer_freeze_carddef(), loc(currentPid, asidePloc)))
.seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
@@ -558,7 +828,7 @@ function choose_cryomancer_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -579,7 +849,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -602,15 +872,21 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "Cryomancer",
- art = "art/T_Heavy_Gust",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_heavy_gust",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
-
+
-
+
+
+
+
+
]]
@@ -637,8 +913,11 @@ function choose_pyromancer_carddef()
.seq(setPlayerAvatarEffect("summoner", currentPid))
.seq(gainMaxHealthEffect(currentPid, const(48).add(getPlayerMaxHealth(currentPid).negate())))
.seq(gainHealthEffect(48))
- .seq(createCardEffect(pyromancer_fuel_1carddef(), currentSkillsLoc))
- .seq(createCardEffect(pyromancer_conflagration_1p_carddef(), currentSkillsLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_1p_fuel_1carddef(), currentSkillsLoc), createCardEffect(pyromancer_2p_fuel_1carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(pyromancer_conflagration_1p_carddef(), currentSkillsLoc), createCardEffect(pyromancer_conflagration_2p_carddef(), currentSkillsLoc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("fuel_1p", 1), incrementCounterEffect("fuel_2p", 1)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), incrementCounterEffect("conflagration_1p", 5), incrementCounterEffect("conflagration_2p", 5)))
+ --.seq(addSlotToPlayerEffect(currentPlayer(), createPlayerSlot({ key = "pyroSkill", expiry = { neverExpiry } })))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
@@ -666,7 +945,7 @@ function choose_pyromancer_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -687,7 +966,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -704,25 +983,26 @@ Start playing." fontsize="30" flexiblewidth="1" />
}
},
upperTitle = "Confirm your choice. Do you want to use the Pyromancer?",
- lowerTitle = "Note: Skills and Abilities will not work properly if both players have chosen Pyromancer."
}))
})
},
layout = createLayout({
name = "Pyromancer",
- art = "art/T_Blistering_Blaze",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_blistering_blaze",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
-
+
-
+
-
+
]]
@@ -749,7 +1029,7 @@ function choose_terramancer_carddef()
.seq(setPlayerAvatarEffect("broelyn", currentPid))
.seq(gainMaxHealthEffect(currentPid, const(53).add(getPlayerMaxHealth(currentPid).negate())))
.seq(gainHealthEffect(53))
- .seq(createCardEffect(terramancer_move_earth_carddef(), currentSkillsLoc))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(terramancer_move_earth1_carddef(), currentSkillsLoc), createCardEffect(terramancer_move_earth2_carddef(), currentSkillsLoc)))
.seq(createCardEffect(terramancer_swallowed_by_the_earth_def(), currentSkillsLoc))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(gold_carddef(), loc(currentPid, asidePloc)))
@@ -760,7 +1040,7 @@ function choose_terramancer_carddef()
.seq(createCardEffect(terramancer_earth_gem_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(terramancer_hurl_boulder_carddef(), loc(currentPid, asidePloc)))
.seq(createCardEffect(terramancer_tremor_carddef(), loc(currentPid, asidePloc)))
- .seq(createCardEffect(terramancer_clay_golem_carddef(), loc(currentPid, asidePloc)))
+ .seq(ifElseEffect(getTurnsPlayed(oppPid).eq(1), createCardEffect(terramancer_clay_golem1_carddef(), loc(currentPid, asidePloc)), createCardEffect(terramancer_clay_golem2_carddef(), loc(currentPid, asidePloc))))
.seq(moveTarget(deckPloc).apply(selectLoc(loc(currentPid, asidePloc))))
.seq(shuffleEffect(currentDeckLoc))
.seq(sacrificeTarget().apply(selectSource()))
@@ -778,7 +1058,7 @@ function choose_terramancer_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -799,7 +1079,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -816,14 +1096,14 @@ Start playing." fontsize="30" flexiblewidth="1" />
}
},
upperTitle = "Confirm your choice. Do you want to use the Terramancer?",
- lowerTitle = "Note: Skills and Abilities will not work properly if both players have chosen Terramancer."
+
}))
})
},
layout = createLayout({
name = "Terramancer",
- art = "art/T_Broelyn_Loreweaver_Old",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_broelyn_loreweaver_old",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -834,10 +1114,9 @@ Terramancer" fontsize="26"/>
+
-
+
@@ -895,7 +1174,7 @@ function choose_thandarlorian_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -916,7 +1195,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -939,15 +1218,21 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "The Thandarlorian",
- art = "art/T_Domination",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_domination",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
-
+
-
+
+
+
+
+
]]
@@ -1003,7 +1288,7 @@ function choose_paladin_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1024,7 +1309,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1047,8 +1332,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "Paladin",
- art = "art/T_Cristov_The_Just",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_cristov_the_just",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1111,7 +1396,7 @@ function choose_witch_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1132,7 +1417,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1156,7 +1441,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout({
name = "Witch",
art = "avatars/chanting_cultist",
- frame = "frames/Coop_Campaign_CardFrame",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1219,7 +1504,7 @@ function choose_shaman_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1240,7 +1525,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1264,7 +1549,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout({
name = "Shaman",
art = "avatars/wolf_shaman",
- frame = "frames/Coop_Campaign_CardFrame",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1328,7 +1613,7 @@ function choose_king_midas_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1349,7 +1634,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1372,8 +1657,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "King Midas",
- art = "art/T_Bribe",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/t_bribe",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1405,7 +1690,7 @@ function choose_brewmaster_carddef()
effect = sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)))
.seq(moveTarget(sacrificePloc).apply(selectLoc(loc(currentPid, handPloc))))
.seq(setPlayerNameEffect("Brewmaster", currentPid))
- .seq(setPlayerAvatarEffect("lord_callum", currentPid))
+ .seq(setPlayerAvatarEffect("journeys/broken_tables_and_chairs", currentPid))
.seq(gainMaxHealthEffect(currentPid, const(55).add(getPlayerMaxHealth(currentPid).negate())))
.seq(gainHealthEffect(55))
.seq(createCardEffect(brewmaster_a_round_on_the_house_def(), currentSkillsLoc))
@@ -1437,7 +1722,7 @@ function choose_brewmaster_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1458,7 +1743,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1481,8 +1766,8 @@ Start playing." fontsize="30" flexiblewidth="1" />
},
layout = createLayout({
name = "Brewmaster",
- art = "art/treasures/T_Fighter_Elixir_Red",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "avatars/journeys/broken_tables_and_chairs",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1549,7 +1834,7 @@ function choose_S_and_R_carddef()
layout = createLayout(
{
name = "Yes",
- art = "art/treasures/T_cleric_elixir_green",
+ art = "art/treasures/t_cleric_elixir_green",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1570,7 +1855,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout(
{
name = "No",
- art = "art/treasures/T_cleric_elixir_blue_purple",
+ art = "art/treasures/t_cleric_elixir_blue_purple",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1594,7 +1879,7 @@ Start playing." fontsize="30" flexiblewidth="1" />
layout = createLayout({
name = "S&R Enjoyer",
art = "avatars/ambushers",
- frame = "frames/Coop_Campaign_CardFrame",
+ frame = "frames/coop_campaign_cardframe",
xmlText=[[
@@ -1616,41 +1901,1242 @@ Sparks and Recreations Enjoyer" fontsize="24"/>
end
+--Lich cards
+function lich_corruption_carddef()
+ local cardLayout = createLayout({
+ name = "Corruption",
+ art = "art/epicart/necromancer_apprentice",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ })
--- Demonologist cards
-function demonologist_shadow_gem_carddef()
- return createDef(
- {
- id = "demonologist_shadow_gem",
- name = "Shadow Gem",
- types = {gemType, noStealType, itemType},
- acquireCost = 0,
- cardTypeLabel = "Item",
- playLocation = castPloc,
- abilities = {
- createAbility(
- {
- id = "demonologist_shadow_gem_sac",
- PlayAllType = noPlayPlayType,
- cost = noCost,
- trigger = autoTrigger,
- activations = singleActivations,
- effect = pushChoiceEffect(
- {
- choices = {
- {
- effect = gainGoldEffect(2),
- layout = layoutCard(
- {
- title = "Shadow Gem",
- art = "art/treasures/T_Brillant_Ruby",
- xmlText=[[
-
-
-
-
-
+ return createSkillDef({
+ id = "corruption_skill",
+ name = "Corruption",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/necromancer_apprentice",
+ abilities = {
+ createAbility({
+ id="corruption20buff_combat",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(1)
+ .seq(randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ .seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_control_carddef()
+ local cardLayout = createLayout({
+ name = "Control",
+ art = "art/epicart/necromancer_lord",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "control_skill",
+ name = "Coontrol",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/epicart/necromancer_lord",
+ abilities = {
+ createAbility({
+ id="control30buff_combat",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(2)
+ .seq(randomTarget(const(2), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))))
+ .seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(2),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+
+function lich_soul_diamond_carddef()
+ return createItemDef({
+ id = "lich_soul_diamond",
+ name = "Lich Soul Diamond",
+ playLocation = castPloc,
+ acquireCost = 0,
+ isGuard = false,
+ types = { itemType, currencyType, gemType, nostealType },
+ layout = createLayout({
+ name = "Soul Diamond",
+ art = "art/classes/necromancer/soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_soul_diamond_item_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = ifElseEffect(isPlayerAi(oppPid),gainGoldEffect(3),gainGoldEffect(1)),
+ }),
+
+ createAbility({
+ id = "lich_soul_diamond_item_stun",
+ trigger = uiTrigger,
+
+ activations = singleActivation,
+ effect = pushChoiceEffectWithTitle(
+ {
+
+ choices =
+ {
+ {
+ effect = stunTarget().apply(selectLoc(loc(oppPid, inPlayPloc))),
+ check = selectLoc(loc(oppPid, inPlayPloc)).where(isCardStunnable()),
+ layout = createLayout({
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer/soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ }),
+ },
+
+ },
+
+ }
+ ),
+ cost = sacrificeSelfCost,
+
+ }),
+ },
+
+ layout = createLayout(
+ {
+ name = "Soul Diamond",
+ art = "art/treasures/necromancer/soul_cage",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ layoutPath = "art/t_gold",
+ })
+end
+
+function lich_frozen_touch_carddef()
+ return createActionDef({
+ id = "lich_frozen_touch",
+ name = "Frozen Touch",
+ types = {actionType, nostealType},
+ cardTypeLabel = "Action",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "frozen_touch_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = gainCombatEffect(1),
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Frozen Touch",
+ art = "art/epicart/zannos__corpse_lord",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+
+function lich_soul_crush_carddef()
+ return createActionDef({
+ id = "lich_soul_crush_curse",
+ name = "Lich Soul Crush Curse",
+ acquireCost = 0,
+
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Soul Crush",
+ art = "art/epicart/consume",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_soul_crush_curse_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 3 combat
+ {
+ effect = gainCombatEffect(3),
+ layout = layoutCard(
+ {
+ title = "Soul Crush",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Soul Crush",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ })
+
+ },
+ })
+end
+
+function lich_minor_summoning_carddef()
+ return createActionDef({
+ id = "lich_minor_summoning_curse",
+ name = "Minor Summoning",
+ playLocation = castPloc,
+ acquireCost = 0,
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Minor Summoning",
+ art = "art/epicart_necrovirus",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_minor_summoning",
+ trigger = autoTrigger,
+ cost = expendCost,
+ effect = createCardEffect(necromancer_skeleton_warrior_carddef(), currentInPlayLoc),
+ }),
+ },
+ })
+end
+
+function lich_major_summoning_carddef()
+ return createActionDef({
+ id = "lich_major_summoning",
+ name = "Major Summoning",
+ playLocation = castPloc,
+ acquireCost = 0,
+ types = { actionType, curseType, nostealType },
+ layout = createLayout({
+ name = "Major Summoning",
+ art = "art/epicart_abyss_summoner",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_major_summoning",
+ trigger = autoTrigger,
+ cost = expendCost,
+ effect = randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ }),
+ },
+ })
+end
+
+--Lich minions
+function lich_abomination_minion_carddef()
+ return createChampionDef({
+ id = "lich_abomination_minion",
+ name = "Lich Abomination Minion",
+ acquireCost = 0,
+ health = 6,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Abomination",
+ art = "art/epicart/scrap_golem_token",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 6,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_abomination_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(4),
+ }),
+
+ createAbility({
+ id = "lich_abomination_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_banshee_minion_carddef()
+ return createChampionDef({
+ id = "lich_banshee_minion",
+ name = "Lich Banshee Minion",
+ acquireCost = 0,
+ health = 3,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Banshee",
+ art = "art/t_banshee",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 3,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_banshee_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2).seq(damageTarget(2).apply(selectLoc(loc(oppPid, inPlayPloc))))
+ }),
+
+ createAbility({
+ id = "lich_banshee_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_ghoul_minion_carddef()
+ return createChampionDef({
+ id = "lich_ghoul_minion",
+ name = "Lich Ghoul Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = true,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_ghoul_minion_main",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = layoutCard(
+ {
+ name = "Ghoul",
+ art = "art/epicart/carrion_demon",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3).seq(gainCombatEffect(selectLoc(currentDiscardLoc).where(isCardChampion()).count())),
+ --ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(1),gainCombatEffect(3),gainCombatEffect(1))
+ }),
+
+ createAbility({
+ id = "lich_ghoul_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_revenant_minion_carddef()
+ return createChampionDef({
+ id = "lich_revenant_minion",
+ name = "Lich Revenant Minion",
+ acquireCost = 0,
+ health = 5,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 5,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_revenant_minion_main",
+ trigger = uiTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ -- Gain 5 health
+ {
+ effect = gainHealthEffect(5),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+ -- Stun an opposing champion
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun an opposing champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Revenant",
+ art = "art/epicart/scara_s_will",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ )
+ }),
+
+ createAbility({
+ id = "lich_revenant_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_skeleton_horde_minion_carddef()
+ return createChampionDef({
+ id = "lich_skeleton_horde_minion",
+ name = "Lich Skeleton Horde Minion",
+ acquireCost = 0,
+ health = 4,
+ isGuard = false,
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Skeleton Horde",
+ art = "art/t_angry_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 4,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_skeleton_horde_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(3),
+ }),
+
+ createAbility({
+ id = "lich_skeleton_horde_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_bones_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_bones_minion",
+ name = "Lich Wall of Bones Minion",
+ acquireCost = 0,
+ health = 8,
+ isGuard = true,
+ types = { minionType, undeadType, constructType },
+ layout = createLayout({
+ name = "Wall of Bones",
+ art = "art/t_skeleton",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 8,
+ isGuard = true,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_bones_minion_main",
+ trigger = autoTrigger,
+ --cost = expendCost,
+ effect = nullEffect()
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_wall_of_fire_minion_carddef()
+ return createChampionDef({
+ id = "lich_wall_of_fire_minion",
+ name = "Lich Wall of Fire Minion",
+ acquireCost = 0,
+ health = 7,
+ isGuard = false,
+ types = { minionType, magicType, constructType },
+ layout = createLayout({
+ name = "Wall of Fire",
+ art = "art/t_charing_guardian",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 7,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_wall_of_fire_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = hitOpponentEffect(2),
+ }),
+
+ createAbility({
+ id = "lich_wall_of_bones_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+ },
+ })
+end
+
+function lich_zombie_minion_carddef()
+ return createChampionDef({
+ id = "lich_zombie_minion",
+ name = "Lich Zombie Minion",
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ cardTypeLabel = "undeadType",
+ types = { minionType, undeadType },
+ layout = createLayout({
+ name = "Zombie",
+ art = "art/sets/promos1art/zombie",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ cost = 0,
+ health = 1,
+ isGuard = false,
+ xmlText=
+ [[
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ abilities = {
+ createAbility({
+ id = "lich_zombie_minion_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+ }),
+
+ createAbility({
+ id = "lich_zombie_minion_sac",
+ trigger = onLeavePlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = moveTarget(nullPloc).apply(selectSource())
+ })
+
+ },
+ })
+end
+
+--Lich Soul jars (Skills)
+
+function lich_SJ_HoE_carddef()
+ local cardLayout = createLayout({
+ name = "Heart of Evil",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+ >
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Heart of Evil",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_concentration",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_HoE_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = randomTarget(const(1), moveTarget(inPlayPloc)).apply(selectLoc(loc(nil, nullPloc))).seq(noUndoEffect()),
+ check = selectLoc(loc(nil, nullPloc)).count().gte(1),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_DI_carddef()
+ local cardLayout = createLayout({
+ name = "Deep Insight",
+ art = "art/t_elixir_of_wisdom",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Deep Insight",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_wisdom",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_DI_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = drawCardsEffect(1).seq(forceDiscard(1)),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_IW_carddef()
+ local cardLayout = createLayout({
+ name = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Infernal Wealth",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/t_elixir_of_endurance",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_IW_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushChoiceEffect
+ (
+ {
+ choices =
+ {
+
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ {
+ effect = pushTargetedEffect({
+ desc = "Stun target champion.",
+ validTargets = oppStunnableSelector(),
+ min = 0,
+ max = 1,
+ targetEffect = stunTarget(),
+ }),
+ condition = selectLoc(loc(oppPid, inPlayPloc)).where(isCardChampion()).count().gte(1),
+ layout = layoutCard(
+ {
+ title = "Infernal Wealth",
+ art = "art/t_elixir_of_endurance",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+
+
+
+
+
+
+ ]]
+ }
+ ),
+ },
+
+ }
+ }
+ ),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_UR_carddef()
+ local cardLayout = createLayout({
+ name = "Unending Rage",
+ art = "art/treasures/t_wizard_elixir_orange",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Unending Rage",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_orange",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_UR_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = gainCombatEffect(7),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_V_carddef()
+ local cardLayout = createLayout({
+ name = "Void",
+ art = "art/treasures/t_wizard_elixir_silver",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Void",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_silver",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_V_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = hitOpponentEffect(3),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+function lich_SJ_M_carddef()
+ local cardLayout = createLayout({
+ name = "Manipulation",
+ art = "art/treasures/t_wizard_elixir_orange",
+ frame = "frames/necromancer_frames/necromancer_item_cardframe",
+ xmlText =
+ [[
+
+
+>
+
+
+
+ ]]
+ })
+
+ return createSkillDef({
+ id = "cryptskill_skill",
+ name = "Manipulation",
+ types = { skillType },
+ layout = cardLayout,
+ layoutPath = "art/treasures/t_wizard_elixir_orange",
+ abilities = {
+ createAbility({
+ id = "lich_SJ_M_ab",
+ trigger = uiTrigger,
+ activations = singleActivation,
+ layout = cardLayout,
+ promptType = showPrompt,
+ effect = pushTargetedEffect({
+ desc = "Acquire a card of cost four or less for free.",
+ validTargets = selectLoc(centerRowLoc).union(selectLoc(fireGemsLoc)).where(isCardAcquirable().And(getCardCost().lte(4))),
+ min = 0,
+ max = 1,
+ targetEffect = moveTarget(loc(currentPid, discardPloc)),
+ }),
+ cost = expendCost,
+ }),
+
+ }
+
+ })
+end
+
+
+
+-- Demonologist cards
+function demonologist_shadow_gem_carddef()
+ return createDef(
+ {
+ id = "demonologist_shadow_gem",
+ name = "Shadow Gem",
+ types = {gemType, noStealType, itemType},
+ acquireCost = 0,
+ cardTypeLabel = "Item",
+ playLocation = castPloc,
+ abilities = {
+ createAbility(
+ {
+ id = "demonologist_shadow_gem_sac",
+ PlayAllType = noPlayPlayType,
+ cost = noCost,
+ trigger = autoTrigger,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = gainGoldEffect(2),
+ layout = layoutCard(
+ {
+ title = "Shadow Gem",
+ art = "art/treasures/thief_brillant_ruby",
+ xmlText=[[
+
+
+
+
+
]]
@@ -1670,7 +3156,7 @@ function demonologist_shadow_gem_carddef()
layout = layoutCard(
{
title = "Shadow Gem",
- art = "art/treasures/T_Brillant_Ruby",
+ art = "art/treasures/thief_brillant_ruby",
xmlText=[[
@@ -1694,7 +3180,7 @@ function demonologist_shadow_gem_carddef()
layout = createLayout(
{
name = "Shadow Gem",
- art = "art/treasures/T_Brillant_Ruby",
+ art = "art/treasures/thief_brillant_ruby",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1725,18 +3211,18 @@ function demonologist_shadow_feeder_carddef()
abilities = {
createAbility(
{
- id = "Shadow_feeder_main",
+ id = "shadow_feeder_main",
trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(1),gainCombatEffect(3),gainCombatEffect(1))
+ effect = ifElseEffect(selectLoc(currentInPlayLoc).where(isCardType(demonType)).count().gte(2),gainCombatEffect(3),gainCombatEffect(1))
}
)
},
layout = createLayout(
{
name = "Shadow Feeder",
- art = "art/T_Devil",
+ art = "art/epicart/deathbringer",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1781,7 +3267,7 @@ function demonologist_void_guard_carddef()
layout = createLayout(
{
name = "Void guard",
- art = "art/T_Midnight_Knight",
+ art = "art/t_midnight_knight",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1826,7 +3312,7 @@ function demonologist_lesser_devourer_carddef()
layout = createLayout(
{
name = "Lesser Devourer",
- art = "art/T_Demon",
+ art = "art/t_demon",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -1850,7 +3336,7 @@ end
function demonologist_summon_demon_carddef()
local cardLayout = createLayout({
name = "Summon",
- art = "icons/The_Summoning",
+ art = "icons/the_summoning",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1876,11 +3362,11 @@ function demonologist_summon_demon_carddef()
})
return createSkillDef({
- id = "demonologist_summon_skill",
+ id = "demonologist_summon_demon_skill",
name = "Summon Demon",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/The_Summoning",
+ layoutPath = "icons/the_summoning",
abilities = {
createAbility({
id = "demonologist_summon_demon_ab",
@@ -1901,7 +3387,7 @@ function demonologist_summon_demon_carddef()
layout = createLayout(
{
name = "Demonic leech",
- art = "art/T_wurm",
+ art = "art/t_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -1940,7 +3426,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
layout = createLayout(
{
name = "Fel hound",
- art = "art/T_Strength_of_the_wolf",
+ art = "art/epicart/demon_token",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -1970,7 +3456,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
layout = createLayout(
{
name = "Succubus",
- art = "art/T_Banshee",
+ art = "art/epicart/succubus",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -2004,7 +3490,7 @@ Demonic Leech gains 1{shield} until it leaves play. " fontsize="18"/>
layout = createLayout(
{
name = "Summon Demon",
- art = "icons/The_Summoning",
+ art = "icons/the_summoning",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -2078,7 +3564,7 @@ function demonologist_demonic_leech_carddef()
layout = createLayout(
{
name = "Demonic leech",
- art = "art/T_wurm",
+ art = "art/t_wurm",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -2146,7 +3632,7 @@ function demonologist_fel_hound_carddef()
layout = createLayout(
{
name = "Fel hound",
- art = "art/T_Strength_of_the_wolf",
+ art = "art/epicart/demon_token",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -2209,7 +3695,7 @@ function demonologist_succubus_carddef()
layout = createLayout(
{
name = "Succubus",
- art = "art/T_Banshee",
+ art = "art/epicart/succubus",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -2239,7 +3725,7 @@ end
function demonologist_summon_demon_master_carddef()
local cardLayout = createLayout({
name = "Summon Demon Master",
- art = "art/T_Angry_Skeleton",
+ art = "art/t_angry_skeleton",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -2263,7 +3749,7 @@ Master into play.
name = "Summon Demon Master",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/T_Angry_Skeleton",
+ layoutPath = "art/t_angry_skeleton",
abilities = {
createAbility({
id = "demonologist_summon_demon_master_ab",
@@ -2278,7 +3764,7 @@ Master into play.
layout = createLayout(
{
name = "Summon Demon Master",
- art = "art/T_Angry_Skeleton",
+ art = "art/t_angry_skeleton",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText=[[
@@ -2308,7 +3794,7 @@ function demonologist_incubus_carddef()
name = "Incubus",
types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- health = 3,
+ health = 4,
isGuard = false,
abilities = {
createAbility(
@@ -2317,7 +3803,7 @@ function demonologist_incubus_carddef()
trigger = uiTrigger,
cost = expendCost,
activations = multipleActivations,
- effect = gainCombatEffect(2).seq(gainCombatEffect(getCounter("incubus")))
+ effect = gainCombatEffect(3).seq(gainCombatEffect(getCounter("incubus")))
}
),
@@ -2344,13 +3830,13 @@ function demonologist_incubus_carddef()
},
layout = createLayout({
name = "Incubus",
- art = "art/T_Lesser_Vampire",
+ art = "art/epicart/guilt_demon",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
-
+
@@ -2358,7 +3844,7 @@ function demonologist_incubus_carddef()
]],
- health = 3,
+ health = 4,
isGuard = false
})
}
@@ -2372,7 +3858,7 @@ function demonologist_keeper_of_the_void_carddef()
name = "Keeper of the Void",
types = {championType, demonType, minionType, nostealType},
acquireCost = 0,
- health = 3,
+ health = 4,
isGuard = true,
abilities = {
createAbility(
@@ -2382,7 +3868,7 @@ function demonologist_keeper_of_the_void_carddef()
cost = expendCost,
activations = multipleActivations,
effect = gainCombatEffect(2)
- .seq(grantHealthTarget(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion").And(isCardName("demonologist_keeper_of_the_void").invert())).count(), { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Void Keeper").apply(selectSource())),
+ .seq(grantHealthTarget(divide(getCounter(selectLoc(loc(currentPid, inPlayPloc)).where(isCardType("minion").And(isCardName("demonologist_keeper_of_the_void").invert())).count()), 2), { SlotExpireEnum.startOfOwnerTurn }, nullEffect(), "Void Keeper").apply(selectSource())),
}
),
@@ -2399,21 +3885,20 @@ function demonologist_keeper_of_the_void_carddef()
},
layout = createLayout({
name = "Keeper of the Void",
- art = "art/T_Giant_Knight",
+ art = "art/epicart/spawning_demon",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
-
-
+
+
-
-
-
+
+
]],
- health = 3,
+ health = 4,
isGuard = true
})
}
@@ -2459,7 +3944,7 @@ function demonologist_demon_master_carddef()
},
layout = createLayout({
name = "Demon Master",
- art = "art/T_Angry_Skeleton",
+ art = "art/t_angry_skeleton",
frame = "frames/necromancer_frames/necromancer_item_cardframe",
xmlText = [[
@@ -2502,8 +3987,8 @@ function apothecary_mezzaluna_carddef()
layout = createLayout(
{
name = "Mezzaluna",
- art = "art/T_Spell_Components",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_spell_components",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2541,7 +4026,7 @@ function apothecary_apprentice_potion_maker_carddef()
layout = layoutCard(
{
title = "Apprentice Potion Maker",
- art = "art/T_Thief_Shadow_Mask",
+ art = "art/t_thief_shadow_mask",
xmlText=[[
@@ -2566,7 +4051,7 @@ function apothecary_apprentice_potion_maker_carddef()
layout = layoutCard(
{
title = "Apprentice Potion Maker",
- art = "art/T_Thief_Shadow_Mask",
+ art = "art/t_thief_shadow_mask",
xmlText=[[
@@ -2586,8 +4071,8 @@ function apothecary_apprentice_potion_maker_carddef()
layout = createLayout(
{
name = "Apprentice Potion Maker",
- art = "art/T_Thief_Shadow_Mask",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_thief_shadow_mask",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2633,8 +4118,8 @@ function apothecary_red_potion_carddef()
},
layout = createLayout({
name = "Red potion",
- art = "art/T_Elixir_of_strength",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_strength",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2670,8 +4155,8 @@ function apothecary_green_potion_carddef()
promptType = showPrompt,
layout = createLayout({
name = "Green Potion",
- art = "art/treasures/T_Green_Potions_Medium",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/t_green_potions_medium",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2690,8 +4175,8 @@ function apothecary_green_potion_carddef()
},
layout = createLayout({
name = "Green Potion",
- art = "art/treasures/T_Green_Potions_Medium",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/t_green_potions_medium",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2726,8 +4211,8 @@ function apothecary_yellow_potion_carddef()
prompt = showPrompt,
layout = layoutCard({
name = "yellow Potion",
- art = "art/T_Elixir_of_fortune",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_fortune",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2748,8 +4233,8 @@ function apothecary_yellow_potion_carddef()
},
layout = createLayout({
name = "yellow Potion",
- art = "art/T_Elixir_of_fortune",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_fortune",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2776,8 +4261,8 @@ function apothecary_custom_brew_carddef()
promptType = showPrompt,
layout = createLayout({
name = "Custom Brew",
- art = "art/T_Elixir_of_concentration",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -2802,8 +4287,8 @@ Draw 1 and opponent discards 1." fontsize="40" />
layout = layoutCard(
{
title = "Custom Brew",
- art = "art/T_Elixir_of_concentration",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -2822,8 +4307,8 @@ Draw 1 and opponent discards 1." fontsize="40" />
layout = layoutCard(
{
title = "Custom Brew",
- art = "art/T_Elixir_of_concentration",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -2842,8 +4327,8 @@ Draw 1 and opponent discards 1." fontsize="40" />
layout = layoutCard(
{
title = "Custom Brew",
- art = "art/T_Elixir_of_concentration",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -2865,19 +4350,19 @@ Opponent discards 1." fontsize="28" />
},
layout = createLayout({
name = "Custom Brew",
- art = "art/T_Elixir_of_concentration",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_elixir_of_concentration",
+ frame = "frames/wizard_cardframe",
text = " or or Draw 1 and opponent discards 1."
}),
- layoutPath = "art/T_Elixir_of_concentration",
+ layoutPath = "art/t_elixir_of_concentration",
})
end
function apothecary_restorative_draught_carddef()
local cardLayout = createLayout({
name = "Restorative Draught",
- art = "art/treasures/T_ranger_elixir_yellow",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/t_ranger_elixir_yellow",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -2897,7 +4382,7 @@ function apothecary_restorative_draught_carddef()
name = "Restorative Draught",
types = { skillType },
layout = cardLayout,
- layoutPath = "art/treasures/T_ranger_elixir_yellow",
+ layoutPath = "art/treasures/t_ranger_elixir_yellow",
abilities = {
createAbility({
id = "apothecary_restorative_draught_ab",
@@ -2922,18 +4407,18 @@ end
-- Cryomancer cards
-function cryomancer_ice_burst_carddef()
+function cryomancer_ice_sickle_carddef()
return createDef(
{
- id = "cryomancer_ice_burst",
- name = "Ice Burst",
+ id = "cryomancer_ice_sickle",
+ name = "Ice Sickle",
types = {noStealType, actionType},
acquireCost = 0,
cardTypeLabel = "Action",
playLocation = castPloc,
abilities = {
createAbility({
- id = "cryomancer_ice_burst",
+ id = "cryomancer_ice_sickle",
layout = cardLayout,
effect = gainCombatEffect(2),
trigger = autoTrigger,
@@ -2943,9 +4428,9 @@ function cryomancer_ice_burst_carddef()
},
layout = createLayout(
{
- name = "Ice Burst",
- art = "art/T_Flame_Burst",
- frame = "frames/Wizard_CardFrame",
+ name = "Ice Sickle",
+ art = "art/t_longsword",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -2953,7 +4438,7 @@ function cryomancer_ice_burst_carddef()
-
+
]],
@@ -2963,46 +4448,54 @@ function cryomancer_ice_burst_carddef()
)
end
-function cryomancer_ice_shield_carddef()
- return createDef(
+function cryomancer_frostwulf_carddef()
+--This is a token champion, that self-sacrifices when it leaves play
+ return createChampionDef(
{
- id = "cryomancer_ice_shield",
- name = "Ice Shield",
- types = {noStealType, actionType},
+ id = "cryomancer_frostwulf",
+ name = "Frostwulf",
+ types = {championType, nostealType },
acquireCost = 0,
- cardTypeLabel = "Action",
- playLocation = castPloc,
+ health = 1,
+ isGuard = false,
abilities = {
- createAbility({
- id = "cryomancer_ice_shield",
- layout = cardLayout,
- effect = ifElseEffect(selectLoc(loc(currentPid, castPloc)).where(isCardAction()).count().gte(3), gainToughnessEffect(2).seq(gainCombatEffect(2)), gainToughnessEffect(2)),
+ --base ability
+ createAbility(
+ {
+ id = "frostwulf_main",
trigger = autoTrigger,
- tags = {}
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(2)
+
}
- ),
-
- },
+ )},
layout = createLayout(
{
- name = "Ice Shield",
- art = "art/T_Glittering_Spray",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
+ name = "Frostwulf",
+ art = "art/epicart/den_mother",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
-]],
+
+ ]],
+ health = 1,
+ isGuard = false
}
)
}
)
end
+
function cryomancer_ice_gem_carddef()
return createDef(
{
@@ -3026,7 +4519,7 @@ function cryomancer_ice_gem_carddef()
layout = layoutCard(
{
title = "Ice Gem",
- art = "art/T_Wizard_Alchemist_S_Stone",
+ art = "art/t_wizard_alchemist_s_stone",
xmlText=[[
@@ -3045,7 +4538,7 @@ function cryomancer_ice_gem_carddef()
layout = layoutCard(
{
title = "Ice Gem",
- art = "art/T_Wizard_Alchemist_S_Stone",
+ art = "art/t_wizard_alchemist_s_stone",
xmlText=[[
@@ -3069,8 +4562,8 @@ function cryomancer_ice_gem_carddef()
layout = createLayout(
{
name = "Ice Gem",
- art = "art/T_Wizard_Alchemist_S_Stone",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_wizard_alchemist_s_stone",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -3116,8 +4609,8 @@ function cryomancer_freeze_carddef()
layout = createLayout(
{
name = "Freeze",
- art = "art/T_Wind_Tunnel",
- frame = "frames/Wizard_CardFrame",
+ art = "art/epicart/polar_shock",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -3137,8 +4630,8 @@ end
function cryomancer_frostbiteskill_carddef()
local cardLayout = createLayout({
name = "Frostbite",
- art = "icons/wind_storm",
- frame = "frames/Wizard_CardFrame",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
xmlText =
[[
@@ -3159,7 +4652,7 @@ function cryomancer_frostbiteskill_carddef()
name = "Frostbite",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/wind_storm",
+ layoutPath = "art/epicart/frost_giant",
abilities = {
createAbility({
id = "cryomancer_frostbiteskill_ab",
@@ -3200,8 +4693,8 @@ function cryomancer_frostbite_carddef()
layout = createLayout(
{
name = "Frostbite",
- art = "icons/wind_storm",
- frame = "frames/Wizard_CardFrame",
+ art = "art/epicart/frost_giant",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -3228,8 +4721,8 @@ function cryomancer_blizzard_carddef()
promptType = showPrompt,
layout = createLayout({
name = "Blizzard",
- art = "art/T_heavy_gust",
- frame = "frames/Wizard_CardFrame",
+ art = "art/t_heavy_gust",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -3245,13 +4738,13 @@ Deal 3 damage to ALL champions, including your own.
]]
}),
- effect = drawCardsEffect(2).seq(damageTarget(3).apply(selectLoc(loc(currentPid, inPlayPloc)).union(selectLoc(loc(oppPid, inPlayPloc))).where(isCardChampion()))),
+ effect = drawCardsEffect(2).seq(damageTarget(3).apply(selectLoc(loc(currentPid, inPlayPloc)).union(selectLoc(loc(oppPid, inPlayPloc))).where(isCardType(tokenType).And(isCardType(demonType))))),
cost = sacrificeSelfCost
})
},
layout = createLayout({
name = "Blizzard",
- art = "art/T_heavy_gust",
+ art = "art/t_heavy_gust",
xmlText = [[
@@ -3271,6 +4764,188 @@ Deal 3 damage to ALL champions, including your own.
})
end
+function cryomancer_permafrost_carddef()
+ return createDef(
+ {
+ id = "permafrost",
+ name = "Permafrost",
+ types = {itemType},
+ cardTypeLabel = "item",
+ playLocation = castPloc,
+ acquireCost = 0,
+ abilities = {
+ createAbility(
+ {
+ id = "permafrost_main",
+ trigger = autoTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = nullEffect()
+
+ }
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Permafrost",
+ art = "art/t_heavy_gust",
+ frame = "frames/wizard_cardframe",
+ cost = 0,
+ xmlText=[[
+
+
+
+
+
+
+
+ ]],
+
+ }
+ )
+ }
+ )
+end
+
+ local CryoFrFogBuff = createGlobalBuff({
+ id="cryomancer_freezing_fog_ability",
+ name = "Freezing Fog",
+ abilities = {
+ createAbility({
+ id="cryomancer_freezing_fog_ability",
+ trigger = deckShuffledTrigger,
+ effect = moveToBottomDeckTarget(false, 0).apply(selectSavedTargets("Freezing Fog")).seq(sacrificeSelf())
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Freezing Fog",
+ art = "art/t_chaotic_gust",
+ text = "One of your cards has been set aside. It will be placed on the bottom of your deck when you next shuffle."
+ })
+ })
+
+function cryomancer_freezing_fog_carddef()
+ return createHeroAbilityDef({
+ id = "Freezing_fog_buff",
+ name = "Freezing Fog",
+ types = { heroAbilityType },
+ abilities = {
+ createAbility({
+ id = "Freezing_fog_Activate",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = createLayout({
+ name = "Freezing Fog",
+ art = "art/t_chaotic_gust",
+ frame = "frames/generic_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ effect = pushTargetedEffect({
+ desc = "Set aside a champion of cost 5 or less from opponent's discard pile.",
+ min=0,
+ max=1,
+ validTargets = selectLoc(loc(oppPid, discardPloc)).where(getCardCost().lte(5)),
+ targetEffect = saveTarget("Freezing Fog").seq(moveTarget(sacrificePloc))
+ .seq(createCardEffect(CryoFrFogBuff, loc(oppPid, buffsPloc)))
+ }),
+ cost = sacrificeSelfCost
+ })
+ },
+ layout = createLayout({
+ name = "Freezing Fog",
+ art = "art/t_chaotic_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]]
+ }),
+ layoutPath = "art/t_chaotic_gust",
+ })
+end
+
+
+function Cryomancer_Permafrost_Ab_carddef()
+local cardLayout = createLayout({
+ name = "Permafrost",
+ art = "art/t_heavy_gust",
+ frame = "frames/wizard_cardframe",
+ xmlText = [[
+
+
+
+
+
+
+
+
+
+ ]]
+--Add later: That opponent reveals their hand and discards all champions and actions of cost 2{gold} or less.
+ })
+
+local permafrostBuff = createGlobalBuff({
+ id="permafrost_buff",
+ name = "Permafrost",
+ abilities = {
+ createAbility({
+ id="permafrost_effect",
+ trigger = startOfTurnTrigger,
+ effect = moveToTopDeckTarget(true).apply(selectLoc(loc(currentPid, deckPloc)).where(isCardName("permafrost"))).seq(sacrificeSelf())
+
+ })
+ },
+ buffDetails = createBuffDetails({
+ name = "Permafrost",
+ art = "art/t_heavy_gust",
+ text = "Winter is... here. (Puts Permafrost on top of your deck.)"
+ })
+ })
+
+ return createHeroAbilityDef({
+
+ id = "Permafrost_Ab",
+ name = "Permafrost",
+ types = {skillType},
+ layout = cardLayout,
+ layoutPath = "art/t_heavy_gust",
+ abilities = {
+ createAbility(
+ {
+ id = "Permafrost_Ab_main",
+ trigger = uiTrigger,
+ promptType = showPrompt,
+ layout = cardLayout,
+ effect = createCardEffect(cryomancer_permafrost_carddef(), loc(oppPid, deckPloc)).seq(createCardEffect(permafrostBuff, loc(oppPid, buffsPloc)))
+ --[[.seq(moveTarget(loc(oppPid, discardPloc)).apply(selectLoc(loc(oppPid, handPloc)).where(isCardChampion().And(getCardCost().lte(2)))))]],
+ cost = sacrificeSelfCost
+ }
+ )
+ },
+
+ }
+ )
+end
-- Pyromancer cards
function pyromancer_combust_carddef()
@@ -3300,8 +4975,8 @@ function pyromancer_combust_carddef()
layout = createLayout(
{
name = "Combust",
- art = "art/T_Spark",
- frame = "frames/Wizard_CardFrame",
+ art = "art/epicart/zaltessa_s_fire",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -3340,8 +5015,8 @@ function pyromancer_sear_carddef()
layout = createLayout(
{
name = "Sear",
- art = "art/T_Fire_Blast",
- frame = "frames/Wizard_CardFrame",
+ art = "art/epicart/flame_spike",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -3377,8 +5052,8 @@ function pyromancer_scorch_carddef()
layout = createLayout(
{
name = "Scorch",
- art = "art/T_Pillar_Of_Fire",
- frame = "frames/Wizard_CardFrame",
+ art = "art/epicart/flame_strike",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -3418,7 +5093,7 @@ function pyromancer_fire_shard_carddef()
layout = layoutCard(
{
title = "Fire Shard",
- art = "art/treasures/T_Sharpened_ruby",
+ art = "art/treasures/thief_sharpened_ruby",
xmlText=[[
@@ -3434,8 +5109,8 @@ function pyromancer_fire_shard_carddef()
effect = createCardEffect(fire_gem_carddef(), currentDiscardLoc),
layout = layoutCard(
{
- title = "Shadow Gem",
- art = "art/treasures/T_Sharpened_ruby",
+ title = "Fire Shard",
+ art = "art/treasures/thief_sharpened_ruby",
xmlText=[[
@@ -3457,8 +5132,8 @@ function pyromancer_fire_shard_carddef()
layout = createLayout(
{
name = "Fire Shard",
- art = "art/treasures/T_Sharpened_ruby",
- frame = "frames/Wizard_CardFrame",
+ art = "art/treasures/thief_sharpened_ruby",
+ frame = "frames/wizard_cardframe",
xmlText=[[
@@ -3476,10 +5151,13 @@ Acquire a Fire Gem for free." fontsize="26" />
)
end
+
+
+
function pyromancer_conflagration_1p_carddef()
return createHeroAbilityDef({
id = "conflagration_1p",
- name = "Conflagration",
+ name = "Phoenix Fire",
types = { heroAbilityType },
abilities = {
createAbility({
@@ -3487,202 +5165,155 @@ function pyromancer_conflagration_1p_carddef()
trigger = uiTrigger,
promptType = showPrompt,
layout = createLayout({
- name = "Conflagration",
- art = "icons/growing_flame",
- xmlText = [[
-
-
-
-
-
-
-
-
- ]]
- }),
- effect = gainCombatEffect(5).seq(gainCombatEffect(getCounter("conflagration_1p")))
- .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_fuel_1_skill").Or(isCardName("pyromancer_fuel_2_skill")).Or(isCardName("pyromancer_fuel_3_skill")).Or(isCardName("pyromancer_fuel_4_skill")).Or(isCardName("pyromancer_fuel_5_skill")))))
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_1p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_1p_fuel_1_skill"))))
.seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
cost = sacrificeSelfCost
}),
},
layout = createLayout({
- name = "Conflagration",
- art = "icons/growing_flame",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("conflagration_1p") })
}),
- layoutPath = "icons/fire_bomb",
+ layoutPath = "art/epicart/fiery_demise",
})
end
-
-
-function pyromancer_fuel_1carddef()
- local cardLayout = createLayout({
- name = "Fuel",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
- })
- return createSkillDef({
- id = "pyromancer_fuel_1_skill",
- name = "Fuel",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "icons/growing_flame",
+
+function pyromancer_conflagration_2p_carddef()
+ return createHeroAbilityDef({
+ id = "conflagration_2p",
+ name = "Phoenix Fire",
+ types = { heroAbilityType },
abilities = {
- createAbility({
- id = "pyromancer_fuel_1_ab",
- trigger = uiTrigger,
+ createAbility({
+ id = "conflagration_2pActivate",
+ trigger = uiTrigger,
promptType = showPrompt,
- activations = singleActivation,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", 1).seq(waitForClickEffect("Conflagration Total = 6"))
- .seq(transformTarget("pyromancer_fuel_2_skill").apply(selectSource())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
- }
-
- })
-end
-
-function pyromancer_fuel_2carddef()
- local cardLayout = createLayout({
- name = "Fuel",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
- })
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
- return createSkillDef({
- id = "pyromancer_fuel_2_skill",
- name = "Fuel",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "icons/growing_flame",
- abilities = {
- createAbility({
- id = "pyromancer_fuel_2_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = singleActivation,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", 2).seq(waitForClickEffect("Conflagration Total = 8"))
- .seq(transformTarget("pyromancer_fuel_3_skill").apply(selectSource())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
- }
-
- })
-end
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ effect = gainCombatEffect(getCounter("conflagration_2p"))
+ .seq(sacrificeTarget().apply(selectLoc(loc(currentPid, skillsPloc)).where(isCardName("pyromancer_2p_fuel_1_skill"))))
+ .seq(createCardEffect(pyromancer_after_burn_carddef(), currentSkillsLoc)),
+ cost = sacrificeSelfCost
+ }),
+ },
+ layout = createLayout({
+ name = "Phoenix Fire",
+ art = "art/epicart/fiery_demise",
+ xmlText = format([[
+
+
+
+
+
+
+
-function pyromancer_fuel_3carddef()
- local cardLayout = createLayout({
- name = "Fuel",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
- })
+
+
+ ]],
+ { getCounter("conflagration_2p") })
+ }),
+ layoutPath = "art/epicart/fiery_demise",
+ })
+end
- return createSkillDef({
- id = "pyromancer_fuel_3_skill",
- name = "Fuel",
- types = { skillType },
- layout = cardLayout,
- layoutPath = "icons/growing_flame",
- abilities = {
- createAbility({
- id = "pyromancer_fuel_3_ab",
- trigger = uiTrigger,
- promptType = showPrompt,
- activations = singleActivation,
- layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", 3).seq(waitForClickEffect("Conflagration Total = 11"))
- .seq(transformTarget("pyromancer_fuel_4_skill").apply(selectSource())),
- cost = combineCosts({
- expendCost,
- goldCost(2)
- }),
- }),
- }
-
- })
-end
+pyroSkill = "pyroSkill"
+pyroSkillValue = sumIntSlots(currentPlayer(), pyroSkill)
-function pyromancer_fuel_4carddef()
+function pyromancer_1p_fuel_1carddef()
local cardLayout = createLayout({
- name = "Fuel",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_1p") })
})
return createSkillDef({
- id = "pyromancer_fuel_4_skill",
- name = "Fuel",
+ id = "pyromancer_1p_fuel_1_skill",
+ name = "Research Phoenix Fire",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/growing_flame",
+ layoutPath = "art/epicart/arcane_research",
abilities = {
createAbility({
- id = "pyromancer_fuel_4_ab",
+ id = "pyromancer_1p_fuel_1_ab",
trigger = uiTrigger,
promptType = showPrompt,
activations = singleActivation,
layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", 4).seq(waitForClickEffect("Conflagration Total = 15"))
- .seq(transformTarget("pyromancer_fuel_5_skill").apply(selectSource())),
+ effect = incrementCounterEffect("conflagration_1p", (getCounter("fuel_1p")))
+ .seq(ifElseEffect((getCounter("fuel_1p").lte(4)),incrementCounterEffect("fuel_1p", 1),nullEffect())),
cost = combineCosts({
expendCost,
goldCost(2)
@@ -3693,37 +5324,43 @@ function pyromancer_fuel_4carddef()
})
end
-function pyromancer_fuel_5carddef()
+
+function pyromancer_2p_fuel_1carddef()
local cardLayout = createLayout({
- name = "Fuel",
- art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
+ name = "Research Phoenix Fire",
+ art = "art/epicart/arcane_research",
+ frame = "frames/wizard_cardframe",
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("fuel_2p") })
})
return createSkillDef({
- id = "pyromancer_fuel_5_skill",
- name = "Fuel",
+ id = "pyromancer_2p_fuel_1_skill",
+ name = "Research Phoenix Fire",
types = { skillType },
layout = cardLayout,
- layoutPath = "icons/growing_flame",
+ layoutPath = "art/epicart/arcane_research",
abilities = {
createAbility({
- id = "pyromancer_fuel_5_ab",
+ id = "pyromancer_2p_fuel_1_ab",
trigger = uiTrigger,
promptType = showPrompt,
activations = singleActivation,
layout = cardLayout,
- effect = incrementCounterEffect("conflagration_1p", 5).seq(waitForClickEffect("+5 to Conflagration")),
+ effect = incrementCounterEffect("conflagration_2p", (getCounter("fuel_2p")))
+ .seq(ifElseEffect((getCounter("fuel_2p").lte(4)),incrementCounterEffect("fuel_2p", 1),nullEffect())),
cost = combineCosts({
expendCost,
goldCost(2)
@@ -3738,7 +5375,7 @@ function pyromancer_after_burn_carddef()
local cardLayout = createLayout({
name = "After Burn",
art = "icons/growing_flame",
- frame = "frames/Wizard_CardFrame",
+ frame = "frames/wizard_cardframe",
xmlText = [[
@@ -3815,7 +5452,7 @@ function terramancer_earth_gem_carddef()
tags = {gainCombatTag}
},
{
- effect = transformTarget("terramancer_move_earth_skill_free").apply(selectLoc(currentSkillsLoc).where(isCardName("terramancer_move_earth_skill"))),
+ effect = addSlotToPlayerEffect(controllerPid, createPlayerIntExpressionSlot(skillCostModKey, toIntExpression(-2), { endOfTurnExpiry })),
layout = layoutCard(
{
title = "Earth Gem",
@@ -3823,7 +5460,8 @@ function terramancer_earth_gem_carddef()
xmlText=[[
-
+
]]
@@ -3849,7 +5487,8 @@ function terramancer_earth_gem_carddef()
+Your class skill costs
+2{gold} less this turn." fontsize="24" />
]]
@@ -3872,7 +5511,7 @@ function terramancer_hurl_boulder_carddef()
createAbility({
id = "terramancer_hurl_boulder",
layout = cardLayout,
- effect = ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("terramancer_move_earth_skill").Or(isCardName("terramancer_move_earth_skill_free")).And(isCardExpended())).count().gte(1),gainCombatEffect(4),gainCombatEffect(2)),
+ effect = ifElseEffect(selectLoc(currentSkillsLoc).where(isCardName("terramancer_move_earth1_skill").Or(isCardName("terramancer_move_earth2_skill")).And(isCardExpended())).count().gte(1),gainCombatEffect(4),gainCombatEffect(2)),
trigger = autoTrigger,
tags = {}
}
@@ -3882,7 +5521,7 @@ function terramancer_hurl_boulder_carddef()
layout = createLayout(
{
name = "Hurl Boulder",
- art = "icons/wizard_calm_channel",
+ art = "art/epicart/apocalypse",
frame = "frames/druid_frames/druid_action_cardframe",
xmlText=[[
@@ -3966,10 +5605,119 @@ function terramancer_tremor_carddef()
)
end
-function terramancer_clay_golem_carddef()
+function terramancer_clay_golem1_carddef()
+ return createChampionDef(
+ {
+ id = "terramancer_clay_golem1",
+ name = "Clay Golem",
+ types = {championType, nostealType},
+ acquireCost = 0,
+ health = 1,
+ isGuard = false,
+ abilities = {
+ createAbility(
+ {
+ id = "clay_golem1_main",
+ trigger = autoTrigger,
+ cost = expendCost,
+ activations = multipleActivations,
+ effect = gainCombatEffect(1)
+
+ }
+
+ ),
+ createAbility(
+ {
+ id = "clay_golem1_healthbuff",
+ trigger = onPlayTrigger,
+ cost = noCost,
+ activations = singleActivations,
+ effect = pushChoiceEffect(
+ {
+ choices = {
+ {
+ effect = nullEffect(),
+ layout = layoutCard(
+ {
+ title = "Clay Golem",
+ art = "art/t_stone_golem",
+ xmlText=[[
+
+
+
+
+
+
+]],
+ health = 1,
+ isGuard = false
+ }
+ ),
+ tags = {}
+ },
+ {
+ effect = grantHealthTarget(2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Golem. Golem.").apply(selectSource())
+ .seq(incrementCounterEffect("wallofEarth1Counter", -2)),
+ condition = getCounter("wallofEarth1Counter").gte(2),
+ layout = layoutCard(
+ {
+ title = "Clay Golem",
+ art = "art/t_stone_golem",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 3,
+ isGuard = false
+ }
+ ),
+ }
+ }
+ }
+ )
+
+ }
+
+ )
+ },
+ layout = createLayout(
+ {
+ name = "Clay Golem",
+ art = "art/t_stone_golem",
+ frame = "frames/druid_frames/druid_action_cardframe",
+ xmlText=[[
+
+
+
+
+
+
+
+
+
+
+ ]],
+ health = 1,
+ isGuard = false
+ }
+ )
+ }
+ )
+end
+
+function terramancer_clay_golem2_carddef()
return createChampionDef(
{
- id = "terramancer_clay_golem",
+ id = "terramancer_clay_golem2",
name = "Clay Golem",
types = {championType, nostealType},
acquireCost = 0,
@@ -3978,7 +5726,7 @@ function terramancer_clay_golem_carddef()
abilities = {
createAbility(
{
- id = "clay_golem_main",
+ id = "clay_golem2_main",
trigger = autoTrigger,
cost = expendCost,
activations = multipleActivations,
@@ -3989,7 +5737,7 @@ function terramancer_clay_golem_carddef()
),
createAbility(
{
- id = "clay_golem_healthbuff",
+ id = "clay_golem2_healthbuff",
trigger = onPlayTrigger,
cost = noCost,
activations = singleActivations,
@@ -4001,7 +5749,7 @@ function terramancer_clay_golem_carddef()
layout = layoutCard(
{
title = "Clay Golem",
- art = "art/T_stone_golem",
+ art = "art/t_stone_golem",
xmlText=[[
@@ -4018,13 +5766,12 @@ function terramancer_clay_golem_carddef()
},
{
effect = grantHealthTarget(2, { SlotExpireEnum.LeavesPlay }, nullEffect(), "Golem. Golem.").apply(selectSource())
- .seq(incrementCounterEffect("wallofEarthCounter", -2))
- .seq(simpleMessageExpressionEffect(format("Wall of Earth has {0} counters.", {getCounter("wallofEarthCounter")}))),
- condition = getCounter("wallofEarthCounter").gte(2),
+ .seq(incrementCounterEffect("wallofEarth2Counter", -2)),
+ condition = getCounter("wallofEarth2Counter").gte(2),
layout = layoutCard(
{
title = "Clay Golem",
- art = "art/T_stone_golem",
+ art = "art/t_stone_golem",
xmlText=[[
@@ -4054,7 +5801,7 @@ from your class skill." fontsize="20" flexiblewidth="10" />
layout = createLayout(
{
name = "Clay Golem",
- art = "art/T_stone_golem",
+ art = "art/t_stone_golem",
frame = "frames/druid_frames/druid_action_cardframe",
xmlText=[[
@@ -4076,33 +5823,41 @@ from your class skill." fontsize="20" flexiblewidth="10" />
)
end
-function terramancer_move_earth_carddef()
+function terramancer_move_earth1_carddef()
local cardLayout = createLayout({
name = "Move Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
frame = "frames/druid_frames/druid_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("wallofEarth1Counter"), getCounter("wallofEarth1Counter"), divide(getCounter("wallofEarth1Counter"), 2) }
+ )
})
return createSkillDef({
- id = "terramancer_move_earth_skill",
+ id = "terramancer_move_earth1_skill",
name = "move_earth",
types = { skillType },
layout = cardLayout,
layoutPath = "icons/wizard_serene_channel",
abilities = {
createAbility({
- id = "move_earth_ab",
+ id = "move_earth1_ab",
trigger = uiTrigger,
promptType = showPrompt,
activations = singleActivation,
@@ -4111,12 +5866,11 @@ Remove all counters. Put a Wall token into play with {guard} equal to the number
{
choices = {
{
- effect = incrementCounterEffect("wallofEarthCounter", 2)
- .seq(simpleMessageExpressionEffect(format("Wall of Earth has {0} counters.", {getCounter("wallofEarthCounter")}))),
+ effect = incrementCounterEffect("wallofEarth1Counter", 2),
layout = layoutCard(
{
title = "Wall of Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
xmlText=[[
@@ -4134,14 +5888,14 @@ to this card." fontsize="30"/>
{
--here --
effect = createCardEffect(terramancer_wall_of_earth_carddef(), currentInPlayLoc)
- .seq(grantHealthTarget((getCounter("wallofEarthCounter")), { SlotExpireEnum.LeavesPlay }, nullEffect(), "Wall of earth").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall_of_earth")))))
- .seq(gainHealthEffect(divide(getCounter("wallofEarthCounter"), 2)))
- .seq(resetCounterEffect("wallofEarthCounter")),
- condition = getCounter("wallofEarthCounter").gte(2),
+ .seq(grantHealthTarget((getCounter("wallofEarth1Counter")), { SlotExpireEnum.LeavesPlay }, nullEffect(), "Wall of earth").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall_of_earth")))))
+ .seq(gainHealthEffect(divide(getCounter("wallofEarth1Counter"), 2)))
+ .seq(resetCounterEffect("wallofEarth1Counter")),
+ condition = getCounter("wallofEarth1Counter").gte(2),
layout = layoutCard(
{
title = "Wall of Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
xmlText=[[
@@ -4169,33 +5923,41 @@ Gain {health} equal to half that number." fontsize="20" />
})
end
-function terramancer_move_earth_free_carddef()
+function terramancer_move_earth2_carddef()
local cardLayout = createLayout({
name = "Move Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
frame = "frames/druid_frames/druid_item_cardframe",
- xmlText = [[
-
-
-
-
-
-
-
-
-]]
+ xmlText = format([[
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ]],
+ { getCounter("wallofEarth2Counter"), getCounter("wallofEarth2Counter"), divide(getCounter("wallofEarth2Counter"), 2) }
+ )
})
return createSkillDef({
- id = "terramancer_move_earth_skill_free",
+ id = "terramancer_move_earth2_skill",
name = "move_earth",
types = { skillType },
layout = cardLayout,
layoutPath = "icons/wizard_serene_channel",
abilities = {
createAbility({
- id = "move_earth_ab",
+ id = "move_earth2_ab",
trigger = uiTrigger,
promptType = showPrompt,
activations = singleActivation,
@@ -4204,12 +5966,11 @@ function terramancer_move_earth_free_carddef()
{
choices = {
{
- effect = incrementCounterEffect("wallofEarthCounter", 2)
- .seq(simpleMessageExpressionEffect(format("Wall of Earth has {0} counters.", {getCounter("wallofEarthCounter")}))),
+ effect = incrementCounterEffect("wallofEarth2Counter", 2),
layout = layoutCard(
{
title = "Wall of Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
xmlText=[[
@@ -4227,14 +5988,14 @@ to this card." fontsize="30"/>
{
--here --
effect = createCardEffect(terramancer_wall_of_earth_carddef(), currentInPlayLoc)
- .seq(grantHealthTarget((getCounter("wallofEarthCounter")), { SlotExpireEnum.LeavesPlay }, nullEffect(), "Wall of earth").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall_of_earth")))))
- .seq(gainHealthEffect(divide(getCounter("wallofEarthCounter"), 2)))
- .seq(resetCounterEffect("wallofEarthCounter")),
- condition = getCounter("wallofEarthCounter").gte(2),
+ .seq(grantHealthTarget((getCounter("wallofEarth2Counter")), { SlotExpireEnum.LeavesPlay }, nullEffect(), "Wall of earth").apply(selectLoc(loc(currentPid, inPlayPloc)).where(isCardChampion().And(isCardName("terramancer_wall_of_earth")))))
+ .seq(gainHealthEffect(divide(getCounter("wallofEarth2Counter"), 2)))
+ .seq(resetCounterEffect("wallofEarth2Counter")),
+ condition = getCounter("wallofEarth2Counter").gte(2),
layout = layoutCard(
{
title = "Wall of Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
xmlText=[[
@@ -4252,16 +6013,11 @@ Gain {health} equal to half that number." fontsize="20" />
}
}
),
- cost = expendCost
+ cost = combineCosts({
+ expendCost,
+ goldCost(2)
+ })
}),
- createAbility({
- id = "terramancer_extract_earth_free_sac",
- trigger = endOfTurnTrigger,
- activations = singleActivation,
- layout = cardLayout,
- effect =transformTarget("terramancer_move_earth_skill").apply(selectSource()),
- cost = noCost,
- }),
}
})
@@ -4281,7 +6037,7 @@ function terramancer_wall_of_earth_carddef()
},
buffDetails = createBuffDetails({
name = "Wall of Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
text = "Champions cannot be targeted while Wall of Earth is in play."
})
})
@@ -4320,7 +6076,7 @@ function terramancer_wall_of_earth_carddef()
layout = createLayout(
{
name = "Wall of Earth",
- art = "art/T_Fissure",
+ art = "art/t_fissure",
frame = "frames/druid_frames/druid_action_cardframe",
xmlText=[[
@@ -4346,7 +6102,7 @@ function terramancer_swallowed_by_the_earth_def()
local abilityLayout = createLayout({
name = "Swallowed by the Earth",
- art = "art/sets/Dungeons/dragged_below",
+ art = "art/sets/dungeons/dragged_below",
frame = "frames/druid_frames/druid_item_cardframe",
xmlText=[[
@@ -4391,7 +6147,7 @@ function terramancer_swallowed_by_the_earth_def()
layout = layoutCard(
{
title = "Swallowed by the Earth",
- art = "art/sets/Dungeons/dragged_below",
+ art = "art/sets/dungeons/dragged_below",
xmlText=[[
@@ -4414,7 +6170,7 @@ function terramancer_swallowed_by_the_earth_def()
layout = layoutCard(
{
title = "Swallowed by the Earth",
- art = "art/sets/Dungeons/dragged_below",
+ art = "art/sets/dungeons/dragged_below",
xmlText=[[
@@ -4439,7 +6195,7 @@ function terramancer_swallowed_by_the_earth_def()
})
},
layout = abilityLayout,
- layoutPath= "art/sets/Dungeons/dragged_below"
+ layoutPath= "art/sets/dungeons/dragged_below"
})
end
@@ -4465,8 +6221,8 @@ function thandarlorian_combat_shield_carddef()
promptType = showPrompt,
layout = createLayout({
name = "Combat Shield",
- art = "art/T_Cleric_Brightstar_Shield",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/epicart/angeline_s_favor",
+ frame = "frames/coop_campaign_cardframe",
xmlText = [[
@@ -4484,8 +6240,8 @@ function thandarlorian_combat_shield_carddef()
},
layout = createLayout({
name = "Combat Shield",
- art = "art/T_Cleric_Brightstar_Shield",
- frame = "frames/Coop_Campaign_CardFrame",
+ art = "art/epicart/angeline_s_favor",
+ frame = "frames/coop_campaign_cardframe",
xmlText = [[