diff --git a/Items/Blinds.lua b/Items/Blinds.lua index f067d4e3d..84cc09a35 100644 --- a/Items/Blinds.lua +++ b/Items/Blinds.lua @@ -3,7 +3,7 @@ function Blind:cry_ante_base_mod(dt) if not self.disabled then local obj = self.config.blind if obj.cry_ante_base_mod and type(obj.cry_ante_base_mod) == 'function' then - return obj:cry_ante_base_mod(dt) + return obj:cry_ante_base_mod(self, dt) end end return 0 @@ -12,7 +12,7 @@ function Blind:cry_round_base_mod(dt) if not self.disabled then local obj = self.config.blind if obj.cry_round_base_mod and type(obj.cry_round_base_mod) == 'function' then - return obj:cry_round_base_mod(dt) + return obj:cry_round_base_mod(self, dt) end end return 1 @@ -21,7 +21,7 @@ function Blind:cry_cap_score(score) if not self.disabled then local obj = self.config.blind if obj.cry_cap_score and type(obj.cry_cap_score) == 'function' then - return obj:cry_cap_score(score) + return obj:cry_cap_score(self, score) end end return score @@ -30,7 +30,7 @@ function Blind:cry_after_play() if not self.disabled then local obj = self.config.blind if obj.cry_after_play and type(obj.cry_after_play) == 'function' then - return obj:cry_after_play() + return obj:cry_after_play(self) end end end @@ -38,7 +38,7 @@ function Blind:cry_before_play() if not self.disabled then local obj = self.config.blind if obj.cry_before_play and type(obj.cry_before_play) == 'function' then - return obj:cry_before_play() + return obj:cry_before_play(self) end end end @@ -62,8 +62,8 @@ local tax = { atlas = "blinds", discovered = true, boss_colour = HEX('40ff40'), - cry_cap_score = function(self, score) - return math.floor(math.min(0.4*G.GAME.blind.chips,score)+0.5) + cry_cap_score = function(self, blind, score) + return math.floor(math.min(0.4*blind.chips,score)+0.5) end } @@ -87,14 +87,14 @@ local clock = { atlas = "blinds", discovered = true, boss_colour = HEX('853455'), - defeat = function(self, silent) + defeat = function(self, blind, silent) G.P_BLINDS.bl_cry_clock.mult = 0 end, - disable = function(self, silent) + disable = function(self, blind, silent) G.GAME.blind.chips = get_blind_amount(G.GAME.round_resets.ante)*G.GAME.starting_params.ante_scaling*2 G.GAME.blind.chip_text = number_format(G.GAME.blind.chips) end, - cry_ante_base_mod = function(self, dt) + cry_ante_base_mod = function(self, blind, dt) return 0.1*dt/3 end } @@ -117,7 +117,7 @@ local trick = { atlas = "blinds", discovered = true, boss_colour = HEX('babd24'), - cry_after_play = function(self) + cry_after_play = function(self, blind) --flip and shuffle all cards held in hand for k, v in ipairs(G.hand.cards) do if v.facing == "front" then @@ -179,11 +179,11 @@ local lavender_loop = { atlas = "blinds", discovered = true, boss_colour = HEX('ae00ff'), - disable = function(self, silent) + disable = function(self, blind, silent) G.GAME.blind.chips = get_blind_amount(G.GAME.round_resets.ante)*G.GAME.starting_params.ante_scaling*2 G.GAME.blind.chip_text = number_format(G.GAME.blind.chips) end, - cry_round_base_mod = function(self, dt) + cry_round_base_mod = function(self, blind, dt) return 1.25^(dt/1.5) end } @@ -208,7 +208,7 @@ local vermillion_virus = { atlas = "blinds", discovered = true, boss_colour = HEX('f65d34'), - cry_before_play = function(self) + cry_before_play = function(self, blind) if G.jokers.cards[1] then local idx = pseudorandom(pseudoseed('cry_vermillion_virus'),1,#G.jokers.cards) if G.jokers.cards[idx] then @@ -246,21 +246,21 @@ local sapphire_stamp = { atlas = "blinds", discovered = true, boss_colour = HEX('4057d6'), - cry_before_play = function(self) + cry_before_play = function(self, blind) local idx = pseudorandom(pseudoseed("cry_sapphire_stamp"), 1, #G.hand.highlighted) G.hand:remove_from_highlighted(G.hand.highlighted[idx]) end, - set_blind = function(self, reset, silent) + set_blind = function(self, blind, reset, silent) if not reset then G.hand.config.highlighted_limit = G.hand.config.highlighted_limit + 1 end end, - defeat = function(self, silent) + defeat = function(self, blind, silent) if not self.disabled then G.hand.config.highlighted_limit = G.hand.config.highlighted_limit - 1 end end, - disable = function(self, silent) + disable = function(self, blind, silent) G.hand.config.highlighted_limit = G.hand.config.highlighted_limit - 1 end, } @@ -286,12 +286,12 @@ local obsidian_orb = { atlas = "blinds", discovered = true, boss_colour = HEX('290759'), - set_blind = function(self, reset, silent) + set_blind = function(self, blind, reset, silent) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.set_blind then s:set_blind(reset,silent) end + if s.set_blind then s:set_blind(blind,reset,silent) end if s.name == 'The Eye' and not reset then - G.GAME.blind.hands = { + blind.hands = { ["Flush Five"] = false, ["Flush House"] = false, ["Five of a Kind"] = false, @@ -307,18 +307,18 @@ local obsidian_orb = { } end if s.name == 'The Mouth' and not reset then - G.GAME.blind.only_hand = false + blind.only_hand = false end if s.name == 'The Fish' and not reset then - G.GAME.blind.prepped = nil + blind.prepped = nil end if s.name == 'The Water' and not reset then - G.GAME.blind.discards_sub = G.GAME.current_round.discards_left - ease_discard(-G.GAME.blind.discards_sub) + blind.discards_sub = G.GAME.current_round.discards_left + ease_discard(-blind.discards_sub) end if s.name == 'The Needle' and not reset then - G.GAME.blind.hands_sub = G.GAME.round_resets.hands - 1 - ease_hands_played(-G.GAME.blind.hands_sub) + blind.hands_sub = G.GAME.round_resets.hands - 1 + ease_hands_played(-blind.hands_sub) end if s.name == 'The Manacle' and not reset then G.hand:change_size(-1) @@ -349,20 +349,20 @@ local obsidian_orb = { end end end, - defeat = function(self, silent) + defeat = function(self, blind, silent) for k, _ in pairs(G.GAME.defeated_blinds) do - if G.P_BLINDS[k].defeat then G.P_BLINDS[k]:defeat(silent) end + if G.P_BLINDS[k].defeat then G.P_BLINDS[k]:defeat(blind, silent) end if G.P_BLINDS[k].name == "The Manacle" and not self.disabled then G.hand:change_size(1) end end end, - disable = function(self, silent) + disable = function(self, blind, silent) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.disable then s:disable(silent) end + if s.disable then s:disable(blind, silent) end if s.name == 'The Water' then - ease_discard(G.GAME.blind.discards_sub) + ease_discard(blind.discards_sub) end if s.name == 'The Wheel' or s.name == 'The House' or s.name == 'The Mark' or s.name == 'The Fish' then for i = 1, #G.hand.cards do @@ -375,11 +375,11 @@ local obsidian_orb = { end end if s.name == 'The Needle' then - ease_hands_played(G.GAME.blind.hands_sub) + ease_hands_played(blind.hands_sub) end if s.name == 'The Wall' then - G.GAME.blind.chips = G.GAME.blind.chips/2 - G.GAME.blind.chip_text = number_format(G.GAME.blind.chips) + blind.chips = blind.chips/2 + blind.chip_text = number_format(blind.chips) end if s.name == 'Cerulean Bell' then for k, v in ipairs(G.playing_cards) do @@ -392,15 +392,15 @@ local obsidian_orb = { G.FUNCS.draw_from_deck_to_hand(1) end if s.name == 'Violet Vessel' then - G.GAME.blind.chips = G.GAME.blind.chips/3 - G.GAME.blind.chip_text = number_format(G.GAME.blind.chips) + blind.chips = blind.chips/3 + blind.chip_text = number_format(blind.chips) end end end, - press_play = function(self) + press_play = function(self, blind) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.press_play then s:press_play() end + if s.press_play then s:press_play(blind) end if s.name == "The Hook" then G.E_MANAGER:add_event(Event({ func = function() local any_selected = nil @@ -419,17 +419,17 @@ local obsidian_orb = { end if any_selected then G.FUNCS.discard_cards_from_highlighted(nil, true) end return true end })) - G.GAME.blind.triggered = true + blind.triggered = true delay(0.7) end if s.name == 'Crimson Heart' then if G.jokers.cards[1] then - G.GAME.blind.triggered = true - G.GAME.blind.prepped = true + blind.triggered = true + blind.prepped = true end end if s.name == 'The Fish' then - G.GAME.blind.prepped = true + blind.prepped = true end if s.name == "The Tooth" then G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.2, func = function() @@ -439,11 +439,11 @@ local obsidian_orb = { delay(0.23) end return true end })) - G.GAME.blind.triggered = true + blind.triggered = true end end end, - modify_hand = function(self, cards, poker_hands, text, mult, hand_chips) + modify_hand = function(self, blind, cards, poker_hands, text, mult, hand_chips) local new_mult = mult local new_chips = chips local trigger = false @@ -451,11 +451,11 @@ local obsidian_orb = { s = G.P_BLINDS[k] if s.modify_hand then local this_trigger = false - new_mult, new_chips, this_trigger = s:modify_hand(cards, poker_hands, text, new_mult, new_chips) + new_mult, new_chips, this_trigger = s:modify_hand(blind, cards, poker_hands, text, new_mult, new_chips) trigger = trigger or this_trigger end if s.name == "The Flint" then - G.GAME.blind.triggered = true + blind.triggered = true new_mult = math.max(math.floor(new_mult*0.5 + 0.5), 1) new_chips = math.max(math.floor(new_chips*0.5 + 0.5), 0) trigger = true @@ -463,75 +463,75 @@ local obsidian_orb = { end return new_mult or mult, new_chips or hand_chips, trigger end, - debuff_hand = function(self, cards, hand, handname, check) - G.GAME.blind.debuff_boss = nil + debuff_hand = function(self, blind, cards, hand, handname, check) + blind.debuff_boss = nil for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.debuff_hand and s:debuff_hand(cards, hand, handname, check) then - G.GAME.blind.debuff_boss = s + if s.debuff_hand and s:debuff_hand(blind, cards, hand, handname, check) then + blind.debuff_boss = s return true end if s.debuff then - G.GAME.blind.triggered = false + blind.triggered = false if s.debuff.hand and next(hand[s.debuff.hand]) then - G.GAME.blind.triggered = true - G.GAME.blind.debuff_boss = s + blind.triggered = true + blind.debuff_boss = s return true end if s.debuff.h_size_ge and #cards < s.debuff.h_size_ge then - G.GAME.blind.triggered = true - G.GAME.blind.debuff_boss = s + blind.triggered = true + blind.debuff_boss = s return true end if s.debuff.h_size_le and #cards > s.debuff.h_size_le then - G.GAME.blind.triggered = true - G.GAME.blind.debuff_boss = s + blind.triggered = true + blind.debuff_boss = s return true end if s.name == "The Eye" then - if G.GAME.blind.hands[handname] then - G.GAME.blind.triggered = true - G.GAME.blind.debuff_boss = s + if blind.hands[handname] then + blind.triggered = true + blind.debuff_boss = s return true end - if not check then G.GAME.blind.hands[handname] = true end + if not check then blind.hands[handname] = true end end if s.name == "The Mouth" then if s.only_hand and s.only_hand ~= handname then - G.GAME.blind.triggered = true - G.GAME.blind.debuff_boss = s + blind.triggered = true + blind.debuff_boss = s return true end if not check then s.only_hand = handname end end end if s.name == 'The Arm' then - G.GAME.blind.triggered = false + blind.triggered = false if G.GAME.hands[handname].level > 1 then - G.GAME.blind.triggered = true + blind.triggered = true if not check then level_up_hand(self.children.animatedSprite, handname, nil, -1) - G.GAME.blind:wiggle() + blind:wiggle() end end end if s.name == 'The Ox' then - G.GAME.blind.triggered = false + blind.triggered = false if handname == G.GAME.current_round.most_played_poker_hand then - G.GAME.blind.triggered = true + blind.triggered = true if not check then ease_dollars(-G.GAME.dollars, true) - G.GAME.blind:wiggle() + blind:wiggle() end end end end return false end, - drawn_to_hand = function(self) + drawn_to_hand = function(self, blind) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.drawn_to_hand then s:drawn_to_hand() end + if s.drawn_to_hand then s:drawn_to_hand(blind) end if s.name == 'Cerulean Bell' then local any_forced = nil for k, v in ipairs(G.hand.cards) do @@ -546,7 +546,7 @@ local obsidian_orb = { G.hand:add_to_highlighted(forced_card) end end - if s.name == 'Crimson Heart' and G.GAME.blind.prepped and G.jokers.cards[1] then + if s.name == 'Crimson Heart' and blind.prepped and G.jokers.cards[1] then local jokers = {} for i = 1, #G.jokers.cards do if not G.jokers.cards[i].debuff or #G.jokers.cards < 2 then jokers[#jokers+1] =G.jokers.cards[i] end @@ -561,10 +561,10 @@ local obsidian_orb = { end end end, - stay_flipped = function(self, area, card) + stay_flipped = function(self, blind, area, card) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.stay_flipped and s:stay_flipped(area, card) then return true end + if s.stay_flipped and s:stay_flipped(blind, area, card) then return true end if area == G.hand then if s.name == 'The Wheel' and pseudorandom(pseudoseed('wheel')) < G.GAME.probabilities.normal/7 then return true @@ -575,17 +575,17 @@ local obsidian_orb = { if s.name == 'The Mark' and card:is_face(true) then return true end - if s.name == 'The Fish' and G.GAME.blind.prepped then + if s.name == 'The Fish' and blind.prepped then return true end end end end, - debuff_card = function(self, card, from_blind) + debuff_card = function(self, blind, card, from_blind) if card and type(card) == 'table' and card.area then for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.debuff_card then s:debuff_card(card, from_blind) end + if s.debuff_card then s:debuff_card(blind, card, from_blind) end if s.debuff and not G.GAME.blind.disabled and card.area ~= G.jokers then --this part is buggy for some reason if s.debuff.suit and Card.is_suit(card, s.debuff.suit, true) then @@ -616,60 +616,60 @@ local obsidian_orb = { end end end, - cry_ante_base_mod = function(self, dt) + cry_ante_base_mod = function(self, blind, dt) local mod = 0 for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] if s.cry_ante_base_mod then - mod = mod + s:cry_ante_base_mod(dt) + mod = mod + s:cry_ante_base_mod(blind, dt) end end return mod end, - cry_round_base_mod = function(self, dt) + cry_round_base_mod = function(self, blind, dt) local mod = 1 for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] if s.cry_round_base_mod then - mod = mod * s:cry_round_base_mod(dt) + mod = mod * s:cry_round_base_mod(blind, dt) end end return mod end, - cry_cap_score = function(self, score) + cry_cap_score = function(self, blind, score) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] if s.cry_cap_score then - score = s:cry_cap_score(score) + score = s:cry_cap_score(blind, score) end end return score end, - cry_before_play = function(self) + cry_before_play = function(self, blind) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.cry_before_play then s:cry_before_play() end + if s.cry_before_play then s:cry_before_play(blind) end end end, - cry_after_play = function(self) + cry_after_play = function(self, blind) for k, _ in pairs(G.GAME.defeated_blinds) do s = G.P_BLINDS[k] - if s.cry_after_play then s:cry_after_play() end + if s.cry_after_play then s:cry_after_play(blind) end end end, - get_loc_debuff_text = function(self) - if not G.GAME.blind.debuff_boss then return "Applies abilities of all defeated bosses" end + get_loc_debuff_text = function(self, blind) + if not blind.debuff_boss then return "Applies abilities of all defeated bosses" end local loc_vars = nil - if G.GAME.blind.debuff_boss.name == 'The Ox' then + if blind.debuff_boss.name == 'The Ox' then loc_vars = {localize(G.GAME.current_round.most_played_poker_hand, 'poker_hands')} end - local loc_target = localize{type = 'raw_descriptions', key = G.GAME.blind.debuff_boss.key, set = 'Blind', vars = loc_vars} + local loc_target = localize{type = 'raw_descriptions', key = blind.debuff_boss.key, set = 'Blind', vars = loc_vars} local loc_debuff_text = '' for k, v in ipairs(loc_target) do loc_debuff_text = loc_debuff_text..v..(k <= #loc_target and ' ' or '') end - local disp_text = (G.GAME.blind.debuff_boss.name == 'The Wheel' and G.GAME.probabilities.normal or '')..loc_debuff_text - if (G.GAME.blind.debuff_boss.name == 'The Mouth') and G.GAME.blind.only_hand then disp_text = disp_text..' ['..localize(G.GAME.blind.only_hand, 'poker_hands')..']' end + local disp_text = (blind.debuff_boss.name == 'The Wheel' and G.GAME.probabilities.normal or '')..loc_debuff_text + if (blind.debuff_boss.name == 'The Mouth') and blind.only_hand then disp_text = disp_text..' ['..localize(blind.only_hand, 'poker_hands')..']' end return disp_text end } @@ -702,7 +702,7 @@ return {name = "Blinds", G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].mult_ante = G.GAME.round_resets.ante end if G.GAME.round_resets.blind_states.Boss ~= "Current" then - G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].mult = G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].mult + (G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].cry_ante_base_mod and G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss]:cry_ante_base_mod(dt) or 0) + G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].mult = G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].mult + (G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss].cry_ante_base_mod and G.P_BLINDS[G.GAME.round_resets.blind_choices.Boss]:cry_ante_base_mod(nil, dt) or 0) --Update UI if G.blind_select_opts then local blind_UI = G.blind_select_opts.boss.definition.nodes[1].nodes[1].nodes[1].nodes[1] diff --git a/Items/MiscJokers.lua b/Items/MiscJokers.lua index b0bd6dd11..8fe43cc12 100644 --- a/Items/MiscJokers.lua +++ b/Items/MiscJokers.lua @@ -8,7 +8,7 @@ local dropshot = { name = 'Dropshot', text = { "This Joker gains {X:mult,C:white} X#1# {} Mult", - "per played, nonscoring {V:1}#2#{} card,", + "per played, {C:attention}nonscoring{} {V:1}#2#{} card,", "suit changes every round", "{C:inactive}(Currently {X:mult,C:white} X#3# {C:inactive} Mult)" } @@ -337,7 +337,7 @@ local cursor = { name = 'Cursor', text = { "This Joker gains {C:chips}+#2#{} Chips", - "per card {C:attention}purchased{}", + "for each card {C:attention}purchased{}", "{C:inactive}(Currently {C:chips}+#1#{C:inactive} Chips)" } }, @@ -380,9 +380,9 @@ local pickle = { loc_txt = { name = 'Pickle', text = { - "When Blind skipped, create", + "When {C:attention}Blind{} is skipped, create", "{C:attention}#1#{} Tags, reduced by", - "{C:red}#2#{} when Blind selected" + "{C:red}#2#{} when {C:attention}Blind{} is selected" } }, rarity = 2, @@ -580,15 +580,15 @@ local chili_pepper = { loc_txt = { name = 'Chili Pepper', text = { - "{X:mult,C:white} X#1# {} Mult, increases by", - "{X:mult,C:white} X#2# {} Mult at end of round,", - "destroyed after {C:attention}#3#{} rounds" + "This joker gains {X:mult,C:white} X#2# {} Mult at end of round,", + "{C:red}self destructs{} after {C:attention}#3#{} rounds", + "{C:inactive}currently{} {X:mult,C:white} X#1# {} {C:inactive}Mult{}" } }, rarity = 2, cost = 6, discovered = true, - blueprint_compat = true, + blueprint_compat = false, eternal_compat = false, perishable_compat = false, atlas = "chili_pepper", @@ -727,7 +727,7 @@ local eternalflame = { name = 'Eternal Flame', text = { "This Joker gains {X:mult,C:white} X#1# {} Mult", - "per {C:attention}card{} sold", + "for each card {C:attention}sold{}", "{C:inactive}(Currently {X:mult,C:white} X#2# {C:inactive} Mult)" } }, @@ -812,8 +812,8 @@ local seal_the_deal = { loc_txt = { name = 'Seal the Deal', text = { - "All scored cards on {C:attention}last hand", - "{C:attention}of round{} gain a {C:attention}random seal" + "Add a {C:attention}random seal{} to all", + "cards scored on {C:attention}last hand{} played" } }, rarity = 2, @@ -869,7 +869,7 @@ local chad = { name = 'Chad', text = { "Retrigger {C:attention}leftmost{} Joker", - "{C:attention}#1#{} additional times" + "{C:attention}#1#{} additional time(s)" } }, rarity = 3, @@ -1036,7 +1036,7 @@ local fspinner = { text = { "This Joker gains {C:chips}+#2#{} Chips", "if hand played is {C:attention}not{}", - "most played poker hand", + "most played {C:attention}poker hand{}", "{C:inactive}(Currently {C:chips}+#1#{C:inactive} Chips)" } }, @@ -1181,8 +1181,8 @@ local blurred = { loc_txt = { name = 'Blurred Joker', text = { - "{C:blue}+#1#{} hand when", - "blind is selected" + "{C:blue}+#1#{} hand(s) when", + "{C:attention}Blind{} is selected" } }, rarity = 1, @@ -1196,7 +1196,7 @@ local blurred = { calculate = function(self, card, context) if context.setting_blind and not (context.blueprint_card or card).getting_sliced then return { - extra = {focus = card, message = localize('k_hand')}, --make this actually work in the future + message = localize('k_hand'), --make this actually work in the future ease_hands_played(card.ability.extra.hands), delay(0.6), } @@ -1237,7 +1237,7 @@ local gardenfork = { for j = 1, #context.full_hand do if SMODS.Ranks[context.full_hand[j].base.value].key == "7" then ease_dollars(card.ability.extra.money) - return {message = "+$" .. card.ability.extra.money, colour = G.C.MONEY} + return {message = "$" .. card.ability.extra.money, colour = G.C.MONEY} end end end @@ -1262,7 +1262,7 @@ local lightupthenight = { loc_txt = { name = 'Light Up the Night', text = { - "Each played {C:attention}7{} and {C:attention}2{}", + "Each played {C:attention}7{} or {C:attention}2{}", "gives {X:mult,C:white}X#1#{} Mult when scored", } }, @@ -1303,8 +1303,8 @@ local nosound = { loc_txt = { name = 'No Sound, No Memory', text = { - "Retrigger all played {C:attention}7s{}", - "{C:attention:}#1#{} additional times", + "Retrigger each played {C:attention}7{}", + "{C:attention:}#1#{} additional time(s)", } }, rarity = 3, @@ -1422,6 +1422,473 @@ local hunger_sprite = { px = 71, py = 95 } +local weegaming = { + object_type = "Joker", + name = "cry-weegaming", + key = "weegaming", + config = {extra = {retriggers = 2}}, + pos = {x = 0, y = 0}, + atlas = 'weegaming', + loc_txt = { + name = '2D', + text = { + "Retrigger each played {C:attention}2{}", --wee gaming + "{C:attention:}#1#{} additional time(s) when scored", --wee gaming? + } + }, + rarity = 1, + cost = 5, + discovered = true, + blueprint_compat = true, + loc_vars = function(self, info_queue, center) + return {vars = { center.ability.extra.retriggers}} + end, + calculate = function(self, card, context) + if context.repetition then + if context.cardarea == G.play then + local rank = SMODS.Ranks[context.other_card.base.value].key + if rank == "2" then + return { + message = localize('k_again_ex'), + repetitions = card.ability.extra.retriggers, + card = card + } + end + end + end + end +} +local weegaming_sprite = { + object_type = "Atlas", + key = "weegaming", + path = "j_placeholder.png", + px = 71, + py = 95 +} +local redbloon = { + object_type = "Joker", + name = "cry-redbloon", + key = "redbloon", + config = {extra = {money = 20, rounds_remaining = 2, text = "s"}}, + pos = {x = 0, y = 0}, + loc_txt = { + name = 'Red Bloon', + text = { + "Earn {C:money}$#1#{} in {C:attention}#2#{} round#3#", + "{C:red}self destructs{}" + } + }, + rarity = 1, + cost = 2, + discovered = true, + blueprint_compat = false, + eternal_compat = false, + perishable_compat = false, + atlas = "redbloon", + loc_vars = function(self, info_queue, center) + return {vars = {center.ability.extra.money, center.ability.extra.rounds_remaining, center.ability.extra.text}} + end, + calculate = function(self, card, context) + if context.end_of_round and not context.blueprint and not context.individual and not context.repetition and not context.retrigger_joker then + card.ability.extra.rounds_remaining = card.ability.extra.rounds_remaining - 1 + if card.ability.extra.rounds_remaining > 0 then + return { + message = {"-1 Round"}, + colour = G.C.FILTER + } + else + ease_dollars(card.ability.extra.money) + G.E_MANAGER:add_event(Event({ + func = function() + play_sound('tarot1') + card.T.r = -0.2 + card:juice_up(0.3, 0.4) + card.states.drag.is = true + card.children.center.pinch.x = true + G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.3, blockable = false, + func = function() + G.jokers:remove_card(card) + card:remove() + card = nil + return true; + end + })) + return true + end + })) + return { + message = "$" .. card.ability.extra.money, colour = G.C.MONEY + } + end + end + if card.ability.extra.rounds_remaining == 1 then + card.ability.extra.text = "" + end + end +} +local redbloon_sprite = { + object_type = "Atlas", + key = "redbloon", + path = "j_cry_redbloon.png", + px = 71, + py = 95 +} +local apjoker = { + object_type = "Joker", + name = "cry-apjoker", + key = "apjoker", + pos = {x = 0, y = 0}, + config = {extra = {x_mult = 4}}, + loc_txt = { + name = 'AP Joker', + text = { "{X:mult,C:white} X#1# {} Mult against {C:attention}Boss Blinds{}"} + }, + rarity = 2, + cost = 6, + discovered = true, + blueprint_compat = true, + perishable_compat = false, + atlas = "apjoker", + loc_vars = function(self, info_queue, center) + return {vars = {center.ability.extra.x_mult}} + end, + calculate = function(self, card, context) + if context.cardarea == G.jokers and G.GAME.blind.boss and not context.before and not context.after then + return { + message = localize{type='variable',key='a_xmult',vars={card.ability.extra.x_mult}}, + Xmult_mod = card.ability.extra.x_mult + } + end + end +} +local apjoker_sprite = { + object_type = "Atlas", + key = "apjoker", + path = "j_cry_apjoker.png", + px = 71, + py = 95 +} +local maze = { + object_type = "Joker", + name = "cry-maze", + key = "maze", + pos = {x = 0, y = 0}, + loc_txt = { + name = 'Labyrinth', + text = { + "All hands are considered the", + "{C:attention}first hand{} of each round,", + "all discards are considered the", + "{C:attention}first discard{} of each round" + } + }, + rarity = 1, + cost = 3, + discovered = true, + atlas = "maze", + calculate = function(self, card, context) + if (context.before or context.after or context.pre_discard or context.discard or context.cardarea == G.hand) and not context.blueprint and not context.retrigger_joker then + G.GAME.current_round.hands_played = 0 + G.GAME.current_round.discards_used = 0 + end + end, + add_to_deck = function(self, card, from_debuff) + G.GAME.current_round.hands_played = 0 + G.GAME.current_round.discards_used = 0 + end +} + +local maze_sprite = { + object_type = "Atlas", + key = "maze", + path = "j_cry_labyrinth.png", + px = 71, + py = 95 +} + +--Notes from my testing +-- I've found that DNA and Burnt Joker work SOMEWHAT but can be jank at times (ESPECIALLY so with retrigger jokers). i can only assume other modded jokers will behave in a similar way. Trading card and sixth sense work without any issues tho so yey +local unjust_dagger = { +object_type = "Joker", +name = "cry-Unjust Dagger", +key = "unjust_dagger", +pos = {x = 0, y = 0}, +config = {extra = {x_mult = 1}}, +loc_txt = { +name = 'Unjust Dagger', +text = { +"When {C:attention}Blind{} is selected,", +"destroy Joker to the left", +"and gain {C:attention}one-fifth{} of", +"its sell value as {X:mult,C:white} XMult {}", +"{C:inactive}(Currently {X:mult,C:white} X#1# {C:inactive} Mult)" +} +}, +rarity = 2, +cost = 7, +discovered = true, +perishable_compat = false, + loc_vars = function(self, info_queue, center) + return {vars = {center.ability.extra.x_mult}} + end, +atlas = "unjust_dagger", +calculate = function(self, card, context) + if context.cardarea == G.jokers and (card.ability.extra.x_mult > 1) and not context.before and not context.after then + return { + message = localize{type='variable',key='a_xmult',vars={card.ability.extra.x_mult}}, + Xmult_mod = card.ability.extra.x_mult + } + end + local my_pos = nil + for i = 1, #G.jokers.cards do + if G.jokers.cards[i] == card then my_pos = i; break end +end + if context.setting_blind and not (context.blueprint_card or self).getting_sliced and my_pos and G.jokers.cards[my_pos-1] and not G.jokers.cards[my_pos-1].ability.eternal and not G.jokers.cards[my_pos-1].getting_sliced then + local sliced_card = G.jokers.cards[my_pos-1] + sliced_card.getting_sliced = true + G.GAME.joker_buffer = G.GAME.joker_buffer - 1 + G.E_MANAGER:add_event(Event({func = function() + G.GAME.joker_buffer = 0 + card.ability.extra.x_mult = card.ability.extra.x_mult + sliced_card.sell_cost*0.2 + card:juice_up(0.8, 0.8) + sliced_card:start_dissolve({HEX("57ecab")}, nil, 1.6) + play_sound('slice1', 0.96+math.random()*0.08) + return true end })) + card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.extra.x_mult+0.2*sliced_card.sell_cost}}, colour = G.C.RED, no_juice = true}) +return {calculated = true} + end + end +} +local unjust_dagger_sprite = { +object_type = "Atlas", + key = "unjust_dagger", + path = "j_cry_unjust_dagger.png", + px = 71, + py = 95 +} +local jollysus = { + object_type = "Joker", + name = "cry-jollysus", + key = "jollysus", + pos = {x = 0, y = 0}, + config = {extra = {spawn = true, active = "Active!", inactive = ""}, jolly = {t_mult = 8, type = 'Pair'}}, + loc_txt = { + name = 'Jolly Joker?', + text = { + "Create a {C:attention}Jolly Joker{}", + "when a joker is {C:attention}sold{}", + "{C:red}Works 1 time per round{}", + "{C:inactive}#1##2#{}" + } + }, + rarity = 2, + cost = 5, + discovered = true, + blueprint_compat = true, + loc_vars = function(self, info_queue, center) + info_queue[#info_queue+1] = { set = 'Joker', key = 'j_jolly', specific_vars = {self.config.jolly.t_mult, self.config.jolly.type} } + return {vars = {center.ability.extra.active, center.ability.extra.inactive}} + end, + atlas = "jollysus", + calculate = function(self, card, context) + if context.end_of_round and not context.retrigger_joker and not context.blueprint then + if not card.ability.extra.spawn then + card.ability.extra.active = "Active!" + card.ability.extra.inactive = "" + card.ability.extra.spawn = true + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Reset", + colour = G.C.FILTER, + }) + } + end + end + if ((context.selling_card and context.card.ability.name == "cry-jollysus") or context.selling_self) and card.ability.extra.spawn and not context.retrigger_joker then --add support for selling itself (Blueprint compatible) + if not context.blueprint and not context.retrigger_joker then --ok tested this and making it sell itself next to blueprints doesn't make the blueprints create jokers, but it creates copies correctly when selling itself or blueprint so good enough for me + card.ability.extra.active = "" --also this doesn't work with brainstorm either (what is this jank????) + card.ability.extra.inactive = "No triggers left!" + card.ability.extra.spawn = false + end + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_jolly') + card:add_to_deck() + G.jokers:emplace(card) --man, now that I think about it this is probably the most complicated joker i've done so far + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "M!", + colour = G.C.FILTER, + }) + } + end + if context.selling_card and card.ability.extra.spawn and not context.retrigger_joker then + if context.card.ability.set == 'Joker' then + if not context.blueprint and not context.retrigger_joker then + card.ability.extra.active = "" + card.ability.extra.inactive = "No triggers left!" + card.ability.extra.spawn = false + end + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_jolly') + card:add_to_deck() + G.jokers:emplace(card) + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "M!", + colour = G.C.FILTER, + }) + } + end + end + end +} +local jollysus_sprite = { + object_type = "Atlas", + key = "jollysus", + path = "j_cry_jollysus.png", + px = 71, + py = 95 +} +local bubblem = { + object_type = "Joker", + name = "cry-bubblem", + key = "bubblem", + pos = {x = 0, y = 0}, + config = {extra = {spawn = false}, jolly = {t_mult = 8, type = 'Pair'}}, + loc_txt = { + name = 'Bubble M', + text = { + "Create a {C:dark_edition}Foil {C:attention}Jolly Joker{}", + "if hand played contains", + "a {C:attention}Four of a kind{}", + "{C:red}self destructs{}", + } + }, + rarity = 1, + cost = 2, + discovered = true, + loc_vars = function(self, info_queue, center) + info_queue[#info_queue+1] = { set = 'Joker', key = 'j_jolly', specific_vars = {self.config.jolly.t_mult, self.config.jolly.type} } + info_queue[#info_queue+1] = G.P_CENTERS.e_foil + end, + atlas = "bubblem", + calculate = function(self, card, context) + if context.scoring_name and (context.scoring_name == 'Five of a Kind' or context.scoring_name == 'Four of a Kind' or context.scoring_name == 'Flush Five') then + card.ability.extra.spawn = true + end + + if context.cardarea == G.jokers and card.ability.extra.spawn and context.before and not context.blueprint and not context.retrigger_joker then + G.E_MANAGER:add_event(Event({ + func = function() + play_sound('tarot1') + card.T.r = -0.2 + card:juice_up(0.3, 0.4) + card.states.drag.is = true + card.children.center.pinch.x = true + G.E_MANAGER:add_event(Event({ + trigger = 'after', delay = 0.3, blockable = false, + func = function() + G.jokers:remove_card(self) + card:remove() + card = nil + return true + end + })) + return true + end + })) + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_jolly') + card:set_edition({ + foil = true + }) + card:add_to_deck() + G.jokers:emplace(card) + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "M!", + colour = G.C.FILTER, + }) + } + end + end +} + +local bubblem_sprite = { + object_type = "Atlas", + key = "bubblem", + path = "j_cry_bubblem.png", + px = 71, + py = 95 +} +local mstack = { + object_type = "Joker", + name = "cry-mstack", + key = "mstack", + config = {extra = {sell = 0, retriggers = 0, text = ""}, jolly = {t_mult = 8, type = 'Pair'}}, + pos = {x = 0, y = 0}, + atlas = 'mstack', + loc_txt = { + name = 'M Stack', + text = { + "Retrigger all cards played", + "once for every {C:attention}2 Jolly Jokers{}", + "{C:attention}sold{}, up to {C:attention}8 sold{}", + "{C:inactive}Currently{}{C:attention:} #1#{}{C:inactive} retriggers #2#{}", + } + }, + rarity = 2, + cost = 7, + discovered = true, + blueprint_compat = true, + loc_vars = function(self, info_queue, center) + info_queue[#info_queue+1] = { set = 'Joker', key = 'j_jolly', specific_vars = {self.config.jolly.t_mult, self.config.jolly.type} } + return {vars = {center.ability.extra.retriggers, center.ability.extra.text}} + end, + calculate = function(self, card, context) --note: hardcoded like this intentionally + if context.repetition then + if context.cardarea == G.play then + return { + message = localize('k_again_ex'), + repetitions = card.ability.extra.retriggers, + card = card + } + end + end + + if context.selling_card and context.card.ability.name == "Jolly Joker" and card.ability.extra.retriggers < 4 and not context.blueprint and not context.retrigger_joker then + if card.ability.extra.sell == 1 then + if not context.blueprint or context.retrigger_joker then + card.ability.extra.retriggers = card.ability.extra.retriggers + 1 + end + card.ability.extra.sell = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Upgrade!", + colour = G.C.FILTER, + }) + } + else + card.ability.extra.sell = card.ability.extra.sell + 1 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "1/2", + colour = G.C.FILTER, + }) + } + end + end + + if card.ability.extra.retriggers == 4 then + card.ability.extra.text = "(MAX)" + end + end, +} + +local mstack_sprite = { + object_type = "Atlas", + key = "mstack", + path = "j_cry_mstack.png", + px = 71, + py = 95 +} return {name = "Misc. Jokers", init = function() --Dropshot Patches @@ -1503,4 +1970,4 @@ return {name = "Misc. Jokers", end end, - items = {dropshot_sprite, maximized_sprite, potofjokes_sprite, queensgambit_sprite, whip_sprite, lucky_joker_sprite, cursor_sprite, pickle_sprite, cube_sprite, triplet_rhythm_sprite, booster_sprite, chili_pepper_sprite, compound_interest_sprite, big_cube_sprite, eternalflame_sprite, nice_sprite, sus_sprite, chad_sprite, waluigi_sprite, seal_the_deal_sprite, jimball_sprite, fspinner_sprite, krustytheclown_sprite, blurred_sprite, gardenfork_sprite, lightupthenight_sprite, nosound_sprite, antennastoheaven_sprite, hunger_sprite, dropshot, maximized, potofjokes, queensgambit, wee_fib, compound_interest, whip, pickle, triplet_rhythm, booster, chili_pepper, lucky_joker, cursor, cube, big_cube, nice, sus, chad, jimball, waluigi, eternalflame, seal_the_deal, fspinner, krustytheclown, blurred, gardenfork, lightupthenight, nosound, antennastoheaven, hunger,}} + items = {dropshot_sprite, maximized_sprite, potofjokes_sprite, queensgambit_sprite, whip_sprite, lucky_joker_sprite, cursor_sprite, pickle_sprite, cube_sprite, triplet_rhythm_sprite, booster_sprite, chili_pepper_sprite, compound_interest_sprite, big_cube_sprite, eternalflame_sprite, nice_sprite, sus_sprite, chad_sprite, waluigi_sprite, seal_the_deal_sprite, jimball_sprite, fspinner_sprite, krustytheclown_sprite, blurred_sprite, gardenfork_sprite, lightupthenight_sprite, nosound_sprite, antennastoheaven_sprite, hunger_sprite, weegaming_sprite, redbloon_sprite, apjoker_sprite, maze_sprite, unjust_dagger_sprite, jollysus_sprite, bubblem_sprite, mstack_sprite, dropshot, maximized, potofjokes, queensgambit, wee_fib, compound_interest, whip, pickle, triplet_rhythm, booster, chili_pepper, lucky_joker, cursor, cube, big_cube, nice, sus, chad, jimball, waluigi, eternalflame, seal_the_deal, fspinner, krustytheclown, blurred, gardenfork, lightupthenight, nosound, antennastoheaven, hunger, weegaming, redbloon, apjoker, maze, unjust_dagger, jollysus, bubblem, mstack,}} diff --git a/Items/yEpicJokers.lua b/Items/yEpicJokers.lua index e9f666d7b..4b9ae0e5e 100644 --- a/Items/yEpicJokers.lua +++ b/Items/yEpicJokers.lua @@ -165,7 +165,7 @@ local error_joker = { pos = {x = 0, y = 0}, config = {extra = {sell_rounds = 0, active = false}}, loc_txt = { - name = 'ERROR', + name = '{C:red}ERR{}{C:dark_edition}O{}{C:red}R{}', text = { "" } @@ -250,7 +250,7 @@ local m = { end if context.selling_card and context.card.ability.name == "Jolly Joker" and not context.blueprint then card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.extra - card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.extra.x_mult}}}) + card_eval_status_text(card, 'extra', nil, nil, nil, {message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.extra.x_mult}}}) return {calculated = true} end end @@ -272,7 +272,7 @@ local M = { loc_txt = { name = 'M', text = { - "When any Blind is selected,", + "When {C:attention}Blind{} is selected,", "create a {C:dark_edition}Negative{}", "{C:attention}Jolly Joker{}" } @@ -282,6 +282,7 @@ local M = { discovered = true, blueprint_compat = true,loc_vars = function(self, info_queue, center) info_queue[#info_queue+1] = { set = 'Joker', key = 'j_jolly', specific_vars = {self.config.jolly.t_mult, self.config.jolly.type} } + info_queue[#info_queue+1] = G.P_CENTERS.e_negative end, atlas = "M", calculate = function(self, card, context) @@ -314,7 +315,7 @@ local boredom = { text = { "{C:green}#1# in #2#{} chance to", "{C:attention}retrigger{} each {C:attention}Joker{}", - "{C:attention}or played card{}", + "or {C:attention}played card{}", "{C:inactive,s:0.8}(Excludes itself){}" } }, @@ -408,7 +409,7 @@ local double_scale = { loc_txt = { name = 'Double Scale', text = { - "Scaling jokers", + "Scaling {C:attention}Jokers{}", "scale {C:attention}quadratically", "{C:inactive,s:0.8}(ex. +1, +3, +6, +10)", "{C:inactive,s:0.8}(grows by +1, +2, +3)" @@ -716,7 +717,223 @@ local caramel_sprite = { px = 71, py = 95 } -G.P_JOKER_RARITY_POOLS["cry_epic"] = {googol_play, sync_catalyst, negative, canvas, error_joker, M, m, boredom, double_scale, number_blocks, oldcandy, caramel} + +local curse = { + object_type = "Joker", + name = "cry_curse", + key = "curse", + pos = {x = 0, y = 0}, + loc_txt = { + name = 'Sob', + text = { + "{C:edition,E:1}you cannot{} {C:dark_edition,E:1}run...{}", + "{C:edition,E:1}you cannot{} {C:dark_edition,E:1}hide...{}", + "{C:edition,E:1}you cannot{} {C:dark_edition,E:1}escape...{}", + "{C:inactive}(Must have room){}" + } + }, + rarity = "cry_epic", + cost = 4, + discovered = true, + perishable_compat = true, + atlas = "curse", + calculate = function(self, card, context) + if context.selling_self and #G.jokers.cards + G.GAME.joker_buffer <= G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.discard and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.pre_discard and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.reroll_shop and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.destroying_card and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.buying_card and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.skip_blind and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.cardarea == G.jokers and context.before and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.using_consumable and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.selling_card and context.card.ability.name ~= "Obelisk" and #G.jokers.cards + G.GAME.joker_buffer <= G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.setting_blind and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + if context.skipping_booster and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit and not context.retrigger_joker and not context.blueprint then + local createjoker = math.min(1, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer)) + G.GAME.joker_buffer = G.GAME.joker_buffer + createjoker + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:add_to_deck() + G.jokers:emplace(card) + G.GAME.joker_buffer = 0 + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.FILTER, + }) + } + end + end, + add_to_deck = function(self, card, from_debuff) + local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_obelisk') + card:set_edition({ + negative = true + }) + card:set_eternal(true) + card:add_to_deck() + G.jokers:emplace(card) + return { + card_eval_status_text(card, 'extra', nil, nil, nil, { + message = "Curse!", + colour = G.C.DARK_EDITION, + }) + } + end +} + +local curse_sprite = { + object_type = "Atlas", + key = "curse", + path = "j_cry_curse.png", + px = 71, + py = 95 +} + + +G.P_JOKER_RARITY_POOLS["cry_epic"] = {googol_play, sync_catalyst, negative, canvas, error_joker, M, m, boredom, double_scale, number_blocks, oldcandy, caramel, curse} return {name = "Epic Jokers", @@ -806,4 +1023,4 @@ return {name = "Epic Jokers", loc_txt = {} }) end, - items = {googol_play_sprite, sync_catalyst_sprite, negative_sprite, canvas_sprite, error_sprite, M_sprite, m_sprite, boredom_sprite, double_scale_sprite, number_blocks_sprite, oldcandy_sprite, caramel_sprite, googol_play, sync_catalyst, negative, canvas, error_joker, M, m, boredom, double_scale, number_blocks, oldcandy, caramel}} + items = {googol_play_sprite, sync_catalyst_sprite, negative_sprite, canvas_sprite, error_sprite, M_sprite, m_sprite, boredom_sprite, double_scale_sprite, number_blocks_sprite, oldcandy_sprite, caramel_sprite, curse_sprite, googol_play, sync_catalyst, negative, canvas, error_joker, M, m, boredom, double_scale, number_blocks, oldcandy, caramel, curse}} diff --git a/Items/zExotic.lua b/Items/zExotic.lua index 2683fdcf1..08af3c9fc 100644 --- a/Items/zExotic.lua +++ b/Items/zExotic.lua @@ -184,7 +184,6 @@ local speculo = { text = { "Creates a {C:dark_edition}Negative{} copy", "of a random {C:attention}Joker{}", - "in your possession", "at the end of the {C:attention}shop", } }, @@ -280,8 +279,8 @@ local tenebris = { loc_txt = { name = 'Tenebris', text = { - "{C:dark_edition}+#1#{C:attention} Joker{} slots,", - "gives {C:money}$#2#{} at end of round" + "{C:dark_edition}+#1#{C:attention} Joker{} slots", + "Earn {C:money}$#2#{} at end of round" } }, rarity = "cry_exotic", @@ -320,9 +319,8 @@ local effarcire = { loc_txt = { name = 'Effarcire', text = { - "Always draw your", - "{C:green}entire deck{} to hand", - "at start of round" + "Always draw {C:green}full deck{} to hand", + "when {C:attention}Blind{} is selected" } }, rarity = 3, @@ -358,8 +356,8 @@ local crustulum = { loc_txt = { name = 'Crustulum', text = { - "This Joker gains", - "{C:chips}+#2#{} Chips per reroll,", + "This Joker gains {C:chips}+#2#{} Chips", + "per {C:attention}reroll{} in the shop,", "{C:green}all rerolls are free{}", "{C:inactive}(Currently {C:chips}+#1#{C:inactive} chips)" } diff --git a/assets/1x/j_cry_apjoker.png b/assets/1x/j_cry_apjoker.png new file mode 100644 index 000000000..493ae68ce Binary files /dev/null and b/assets/1x/j_cry_apjoker.png differ diff --git a/assets/1x/j_cry_big_m.png b/assets/1x/j_cry_big_m.png index 330118749..fa2d76615 100644 Binary files a/assets/1x/j_cry_big_m.png and b/assets/1x/j_cry_big_m.png differ diff --git a/assets/1x/j_cry_bubblem.png b/assets/1x/j_cry_bubblem.png new file mode 100644 index 000000000..1c8c85ad2 Binary files /dev/null and b/assets/1x/j_cry_bubblem.png differ diff --git a/assets/1x/j_cry_curse.png b/assets/1x/j_cry_curse.png new file mode 100644 index 000000000..6f9bdee6f Binary files /dev/null and b/assets/1x/j_cry_curse.png differ diff --git a/assets/1x/j_cry_double_scale.png b/assets/1x/j_cry_double_scale.png index 19f208e67..8134e886f 100644 Binary files a/assets/1x/j_cry_double_scale.png and b/assets/1x/j_cry_double_scale.png differ diff --git a/assets/1x/j_cry_jollysus.png b/assets/1x/j_cry_jollysus.png new file mode 100644 index 000000000..c47da9373 Binary files /dev/null and b/assets/1x/j_cry_jollysus.png differ diff --git a/assets/1x/j_cry_labyrinth.png b/assets/1x/j_cry_labyrinth.png new file mode 100644 index 000000000..fc3d94d63 Binary files /dev/null and b/assets/1x/j_cry_labyrinth.png differ diff --git a/assets/1x/j_cry_m.png b/assets/1x/j_cry_m.png index 984e01b9d..28beaffed 100644 Binary files a/assets/1x/j_cry_m.png and b/assets/1x/j_cry_m.png differ diff --git a/assets/1x/j_cry_mstack.png b/assets/1x/j_cry_mstack.png new file mode 100644 index 000000000..42b8ca3e7 Binary files /dev/null and b/assets/1x/j_cry_mstack.png differ diff --git a/assets/1x/j_cry_redbloon.png b/assets/1x/j_cry_redbloon.png new file mode 100644 index 000000000..b8e20302d Binary files /dev/null and b/assets/1x/j_cry_redbloon.png differ diff --git a/assets/2x/j_cry_apjoker.png b/assets/2x/j_cry_apjoker.png new file mode 100644 index 000000000..b06527c10 Binary files /dev/null and b/assets/2x/j_cry_apjoker.png differ diff --git a/assets/2x/j_cry_big_m.png b/assets/2x/j_cry_big_m.png index 3b7e5df92..7bb744941 100644 Binary files a/assets/2x/j_cry_big_m.png and b/assets/2x/j_cry_big_m.png differ diff --git a/assets/2x/j_cry_bubblem.png b/assets/2x/j_cry_bubblem.png new file mode 100644 index 000000000..ea50552ee Binary files /dev/null and b/assets/2x/j_cry_bubblem.png differ diff --git a/assets/2x/j_cry_curse.png b/assets/2x/j_cry_curse.png new file mode 100644 index 000000000..279a1391a Binary files /dev/null and b/assets/2x/j_cry_curse.png differ diff --git a/assets/2x/j_cry_double_scale.png b/assets/2x/j_cry_double_scale.png index 36884d3d6..e72bb3aa2 100644 Binary files a/assets/2x/j_cry_double_scale.png and b/assets/2x/j_cry_double_scale.png differ diff --git a/assets/2x/j_cry_jollysus.png b/assets/2x/j_cry_jollysus.png new file mode 100644 index 000000000..2e29d7e2c Binary files /dev/null and b/assets/2x/j_cry_jollysus.png differ diff --git a/assets/2x/j_cry_labyrinth.png b/assets/2x/j_cry_labyrinth.png new file mode 100644 index 000000000..e87392f95 Binary files /dev/null and b/assets/2x/j_cry_labyrinth.png differ diff --git a/assets/2x/j_cry_m.png b/assets/2x/j_cry_m.png index a418e475a..d271105f6 100644 Binary files a/assets/2x/j_cry_m.png and b/assets/2x/j_cry_m.png differ diff --git a/assets/2x/j_cry_mstack.png b/assets/2x/j_cry_mstack.png new file mode 100644 index 000000000..61760740b Binary files /dev/null and b/assets/2x/j_cry_mstack.png differ diff --git a/assets/2x/j_cry_redbloon.png b/assets/2x/j_cry_redbloon.png new file mode 100644 index 000000000..67b0992d9 Binary files /dev/null and b/assets/2x/j_cry_redbloon.png differ