From 548407b177ece17af2b6620d1dce3abe64e764ef Mon Sep 17 00:00:00 2001 From: Eternalnacho Date: Fri, 15 May 2026 18:05:02 -0500 Subject: [PATCH] Add Solosis line --- functions/pokefamily.lua | 1 + functions/pokefunctions.lua | 38 +++++++++++++ localization/en-us.lua | 29 ++++++++++ pokemon/pokejokers_20.lua | 106 +++++++++++++++++++++++++++++++++++- 4 files changed, 173 insertions(+), 1 deletion(-) diff --git a/functions/pokefamily.lua b/functions/pokefamily.lua index befe931d..bf963b25 100644 --- a/functions/pokefamily.lua +++ b/functions/pokefamily.lua @@ -154,6 +154,7 @@ local default_family_list = { { "shaymin", "shaymin_sky" }, { "munna", "musharna"}, { "gothita", "gothorita", "gothitelle" }, + { "solosis", "duosion", "reuniclus" }, { "vanillite", "vanillish", "vanilluxe" }, { "frillish", "jellicent" }, { "elgyem", "beheeyem" }, diff --git a/functions/pokefunctions.lua b/functions/pokefunctions.lua index 68ed268c..a156ab8e 100644 --- a/functions/pokefunctions.lua +++ b/functions/pokefunctions.lua @@ -1432,3 +1432,41 @@ poke_drain_chips = function(card, amount) return base_drain + bonus_drain end + +poke_copy_card_to_play = function(joker, card) + for _ = 1, joker.ability.extra.card_dupes do + if #G.play.cards < 5 then + local copy = copy_card(card) + copy:add_to_deck() + G.deck.config.card_limit = G.deck.config.card_limit + 1 + table.insert(G.playing_cards, copy) + G.play:emplace(copy) + copy.states.visible = nil + copy:start_materialize() + G.E_MANAGER:add_event(Event({ + func = function() + G.play:add_to_highlighted(copy) + return true + end + })) + table.insert(joker.ability.extra.copied_cards, copy.unique_val) + if joker.ability.extra.copies_req then joker.ability.extra.copies_req = joker.ability.extra.copies_req + 1 end + playing_card_joker_effects(copy) + end + end +end + +-- context.mitosis is funny +if evaluate_play_intro then + local evaluate_play_intro_ref = evaluate_play_intro + evaluate_play_intro = function() + SMODS.calculate_context({mitosis = true}) + return evaluate_play_intro_ref() + end +else + local eval_play_ref = G.FUNCS.evaluate_play + G.FUNCS.evaluate_play = function(e) + SMODS.calculate_context({mitosis = true}) + return eval_play_ref(e) + end +end \ No newline at end of file diff --git a/localization/en-us.lua b/localization/en-us.lua index aeb8b93b..3df424f9 100644 --- a/localization/en-us.lua +++ b/localization/en-us.lua @@ -4900,6 +4900,35 @@ return { "Earn {C:money}$#1#{} when a {C:planet}Planet{} card is used" } }, + j_poke_solosis = { + name = "Solosis", + text = { + "Creates up to {C:attention}#1#{} temporary {C:attention}copy{}", + "of {C:attention}first{} scoring card of round,", + "then adds it to scoring hand", + "{C:inactive,s:0.8}(Changes played {C:attention,s:0.8}poker hand{C:inactive,s:0.8})", + "{C:inactive,s:0.8}(Evolves after copying {C:attention,s:0.8}#2#{C:inactive,s:0.8} cards)", + } + }, + j_poke_duosion = { + name = "Duosion", + text = { + "Creates up to {C:attention}#1#{} temporary {C:attention}copies{}", + "of {C:attention}first{} scoring card of round,", + "then adds them to scoring hand", + "{C:inactive,s:0.8}(Changes played {C:attention,s:0.8}poker hand{C:inactive,s:0.8})", + "{C:inactive,s:0.8}(Evolves after copying {C:attention,s:0.8}#2#{C:inactive,s:0.8} cards)", + } + }, + j_poke_reuniclus = { + name = "Reuniclus", + text = { + "Creates up to {C:attention}#1#{} temporary {C:attention}copies{}", + "of {C:attention}first{} scoring card in {C:attention}poker hand{},", + "then adds them to scoring hand", + "{C:inactive,s:0.8}(Changes played {C:attention,s:0.8}poker hand{C:inactive,s:0.8})", + } + }, j_poke_vanillite = { name = "Vanillite", text = { diff --git a/pokemon/pokejokers_20.lua b/pokemon/pokejokers_20.lua index f0fb2138..b3e888ef 100644 --- a/pokemon/pokejokers_20.lua +++ b/pokemon/pokejokers_20.lua @@ -230,8 +230,112 @@ local gothitelle={ attributes = {"passive", "planet", "economy", "space"}, } -- Solosis 577 +local solosis = { + name = "solosis", + pos = {x = 13, y = 5}, + config = { extra = { card_dupes = 1, copied_cards = {}, copies_req = 0 }, evo_rqmt = 4 }, + loc_vars = function(self, info_queue, card) + type_tooltip(self, info_queue, card) + return { vars = { card.ability.extra.card_dupes, math.max(0, self.config.evo_rqmt - card.ability.extra.copies_req) } } + end, + designer = "Eternalnacho", + rarity = 3, + cost = 7, + stage = "Basic", + ptype = "Psychic", + gen = 5, + perishable_compat = true, + blueprint_compat = true, + eternal_compat = true, + calculate = function(self, card, context) + -- First hand of round jiggle a la DNA + if context.first_hand_drawn and not context.blueprint then + local eval = function() return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES end + juice_card_until(card, eval, true) + end + -- I made a custom context for this effect + if context.mitosis and G.GAME.current_round.hands_played == 0 then + poke_copy_card_to_play(card, G.play.cards[1]) + end + -- destroy the temporary copies after scoring them + if context.destroy_card and card.ability.extra.copied_cards and not context.blueprint then + for _, v in pairs(card.ability.extra.copied_cards) do + if v == context.destroy_card.unique_val then return {remove = true} end + end + end + return scaling_evo(self, card, context, "j_poke_duosion", card.ability.extra.copies_req, self.config.evo_rqmt) + end, + attributes = {"generation", "hands", "condition_evo"}, +} -- Duosion 578 +local duosion = { + name = "duosion", + pos = {x = 14, y = 5}, + config = { extra = { card_dupes = 2, copied_cards = {}, copies_req = 0 }, evo_rqmt = 8 }, + loc_vars = function(self, info_queue, card) + type_tooltip(self, info_queue, card) + return { vars = { card.ability.extra.card_dupes, math.max(0, self.config.evo_rqmt - card.ability.extra.copies_req) } } + end, + designer = "Eternalnacho", + rarity = "poke_safari", + cost = 9, + stage = "One", + ptype = "Psychic", + gen = 5, + perishable_compat = true, + blueprint_compat = true, + eternal_compat = true, + calculate = function(self, card, context) + if context.first_hand_drawn and not context.blueprint then + local eval = function() return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES end + juice_card_until(card, eval, true) + end + -- I made a custom context for this effect + if context.mitosis and G.GAME.current_round.hands_played == 0 then + poke_copy_card_to_play(card, G.play.cards[1]) + end + -- destroy the temporary copies after scoring them + if context.destroy_card and card.ability.extra.copied_cards and not context.blueprint then + for _, v in pairs(card.ability.extra.copied_cards) do + if v == context.destroy_card.unique_val then return {remove = true} end + end + end + return scaling_evo(self, card, context, "j_poke_reuniclus", card.ability.extra.copies_req, self.config.evo_rqmt) + end, + attributes = {"generation", "hands", "condition_evo"}, +} -- Reuniclus 579 +local reuniclus = { + name = "reuniclus", + pos = {x = 15, y = 5}, + config = { extra = { card_dupes = 2, copied_cards = {} } }, + loc_vars = function(self, info_queue, card) + type_tooltip(self, info_queue, card) + return { vars = { card.ability.extra.card_dupes } } + end, + designer = "Eternalnacho", + rarity = "poke_safari", + cost = 11, + stage = "Two", + ptype = "Psychic", + gen = 5, + perishable_compat = true, + blueprint_compat = true, + eternal_compat = true, + calculate = function(self, card, context) + -- I made a custom context for this effect + if context.mitosis then + poke_copy_card_to_play(card, G.play.cards[1]) + end + -- destroy the temporary copies after scoring them + if context.destroy_card and card.ability.extra.copied_cards and not context.blueprint then + for _, v in pairs(card.ability.extra.copied_cards) do + if v == context.destroy_card.unique_val then return {remove = true} end + end + end + end, + attributes = {"generation"}, +} -- Ducklett 580 -- Swanna 581 -- Vanillite 582 @@ -581,5 +685,5 @@ local ferrothorn={ -- Klink 599 -- Klang 600 return {name = "Pokemon Jokers 570-600", - list = {zoroark, gothita, gothorita, gothitelle, vanillite, vanillish, vanilluxe, frillish, jellicent, ferroseed, ferrothorn}, + list = {zoroark, gothita, gothorita, gothitelle, solosis, duosion, reuniclus, vanillite, vanillish, vanilluxe, frillish, jellicent, ferroseed, ferrothorn}, }