diff --git a/.vscode/settings.json b/.vscode/settings.json index 811267a6..b59df412 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,38 +1,41 @@ -{ - "editor.tabSize": 2, - "editor.detectIndentation": false, - "editor.formatOnSave": true, - "Lua.format.defaultConfig": { - "align_continuous_assign_statement": "false" - }, - "Lua.workspace.library": [ - "../lovely/dump", - "../smods", - "../Steamodded", - "../JokerDisplay", - "../CardSleeves" - ], - "Lua.runtime.version": "Lua 5.1", - "Lua.codeLens.enable": true, - "Lua.completion.callSnippet": "Disable", - "Lua.hint.enable": true, - "Lua.hint.setType": true, - "Lua.type.inferParamType": false, - "editor.quickSuggestions": { - "other": "off" - }, - "Lua.diagnostics.globals": [ - "to_big", - "to_number", - "Event", - "create_UIBox_your_collection_stickers", - "create_UIBox_Other_GameObjects", - "hand_chips", - "mult", - "love", - "Back", - "PB_UTIL", - "G" - ], - "Lua.diagnostics.libraryFiles": "Disable" -} \ No newline at end of file +{ + "editor.tabSize": 2, + "editor.detectIndentation": false, + "editor.formatOnSave": true, + "Lua.format.defaultConfig": { + "align_continuous_assign_statement": "false", + "align_continuous_rect_table_field": "false", + "align_array_table": "false", + "never_indent_before_if_condition": "true", + }, + "Lua.workspace.library": [ + "../lovely/dump", + "../smods", + "../Steamodded", + "../JokerDisplay", + "../CardSleeves" + ], + "Lua.runtime.version": "Lua 5.1", + "Lua.codeLens.enable": true, + "Lua.completion.callSnippet": "Disable", + "Lua.hint.enable": true, + "Lua.hint.setType": true, + "Lua.type.inferParamType": false, + "editor.quickSuggestions": { + "other": "off" + }, + "Lua.diagnostics.globals": [ + "to_big", + "to_number", + "Event", + "create_UIBox_your_collection_stickers", + "create_UIBox_Other_GameObjects", + "hand_chips", + "mult", + "love", + "Back", + "PB_UTIL", + "G" + ], + "Lua.diagnostics.libraryFiles": "Disable" +} diff --git a/assets/1x/Boosters.png b/assets/1x/Boosters.png index 5b3ff8f4..564a3a90 100644 Binary files a/assets/1x/Boosters.png and b/assets/1x/Boosters.png differ diff --git a/assets/1x/Decks.png b/assets/1x/Decks.png index 0a74ee70..0f73cda9 100644 Binary files a/assets/1x/Decks.png and b/assets/1x/Decks.png differ diff --git a/assets/1x/EGOGifts.png b/assets/1x/EGOGifts.png new file mode 100644 index 00000000..c4c272d4 Binary files /dev/null and b/assets/1x/EGOGifts.png differ diff --git a/assets/1x/Enhancements.png b/assets/1x/Enhancements.png index 977b8c9d..634cbd8b 100644 Binary files a/assets/1x/Enhancements.png and b/assets/1x/Enhancements.png differ diff --git a/assets/1x/Jokers.png b/assets/1x/Jokers.png index fc5a6866..3d79bb67 100644 Binary files a/assets/1x/Jokers.png and b/assets/1x/Jokers.png differ diff --git a/assets/1x/MinorArcana.png b/assets/1x/MinorArcana.png index 20144130..ef8e3339 100644 Binary files a/assets/1x/MinorArcana.png and b/assets/1x/MinorArcana.png differ diff --git a/assets/1x/Spectrals.png b/assets/1x/Spectrals.png index a6a114ce..09fe9dd6 100644 Binary files a/assets/1x/Spectrals.png and b/assets/1x/Spectrals.png differ diff --git a/assets/1x/Stickers.png b/assets/1x/Stickers.png index 17e35f31..83a7ad0f 100644 Binary files a/assets/1x/Stickers.png and b/assets/1x/Stickers.png differ diff --git a/assets/1x/Vouchers.png b/assets/1x/Vouchers.png index 93552dea..f76993e8 100644 Binary files a/assets/1x/Vouchers.png and b/assets/1x/Vouchers.png differ diff --git a/assets/1x/paperclips.png b/assets/1x/paperclips.png index 86dbab56..ec8bcf96 100644 Binary files a/assets/1x/paperclips.png and b/assets/1x/paperclips.png differ diff --git a/assets/2x/Boosters.png b/assets/2x/Boosters.png index 2fef8ace..44468551 100644 Binary files a/assets/2x/Boosters.png and b/assets/2x/Boosters.png differ diff --git a/assets/2x/Decks.png b/assets/2x/Decks.png index 1038e7cf..64209651 100644 Binary files a/assets/2x/Decks.png and b/assets/2x/Decks.png differ diff --git a/assets/2x/EGOGifts.png b/assets/2x/EGOGifts.png new file mode 100644 index 00000000..2afd8c6b Binary files /dev/null and b/assets/2x/EGOGifts.png differ diff --git a/assets/2x/Enhancements.png b/assets/2x/Enhancements.png index d8d72f07..f076751e 100644 Binary files a/assets/2x/Enhancements.png and b/assets/2x/Enhancements.png differ diff --git a/assets/2x/Jokers.png b/assets/2x/Jokers.png index 698f6006..425e8c08 100644 Binary files a/assets/2x/Jokers.png and b/assets/2x/Jokers.png differ diff --git a/assets/2x/MinorArcana.png b/assets/2x/MinorArcana.png index 8ef69ead..4f148c2a 100644 Binary files a/assets/2x/MinorArcana.png and b/assets/2x/MinorArcana.png differ diff --git a/assets/2x/Spectrals.png b/assets/2x/Spectrals.png index a304c92c..c370f631 100644 Binary files a/assets/2x/Spectrals.png and b/assets/2x/Spectrals.png differ diff --git a/assets/2x/Stickers.png b/assets/2x/Stickers.png index 608b65e6..2eb00bd9 100644 Binary files a/assets/2x/Stickers.png and b/assets/2x/Stickers.png differ diff --git a/assets/2x/Vouchers.png b/assets/2x/Vouchers.png index 8e6aa0d4..da4bbd06 100644 Binary files a/assets/2x/Vouchers.png and b/assets/2x/Vouchers.png differ diff --git a/assets/2x/paperclips.png b/assets/2x/paperclips.png index 7da36917..db9ebe27 100644 Binary files a/assets/2x/paperclips.png and b/assets/2x/paperclips.png differ diff --git a/config.lua b/config.lua index 509ee340..ed36bb08 100644 --- a/config.lua +++ b/config.lua @@ -8,6 +8,7 @@ return { vouchers_enabled = true, tags_enabled = true, ranks_enabled = true, + ego_gifts_enabled = true, spectrals_enabled = true, plague_doctor_quotes_enabled = true } diff --git a/content/atlas.lua b/content/atlas.lua index 8970471c..0b573a89 100644 --- a/content/atlas.lua +++ b/content/atlas.lua @@ -14,6 +14,14 @@ SMODS.Atlas { path = 'MinorArcana.png' } +-- Registers the atlas for E.G.O. Gifts +SMODS.Atlas { + key = 'ego_gift_atlas', + px = 71, + py = 95, + path = 'EGOGifts.png' +} + -- Registers the atlas for Spectrals SMODS.Atlas { key = 'spectral_atlas', diff --git a/content/blind/taupe_treble.lua b/content/blind/taupe_treble.lua index b3350c0a..41342777 100644 --- a/content/blind/taupe_treble.lua +++ b/content/blind/taupe_treble.lua @@ -19,14 +19,10 @@ SMODS.Blind { atlas = 'music_blinds_atlas', pos = { y = 13 }, - debuff_hand = function(self, cards, hand, handname, check) - if cards then - for _, v in ipairs(cards) do - if next(SMODS.get_enhancements(v)) then - return false - end - end - return true + recalc_debuff = function(self, card, from_blind) + if next(SMODS.get_enhancements(card)) then + return false end + return true end } diff --git a/content/blind/whole.lua b/content/blind/whole.lua index e1fb84d9..ef7b69b7 100644 --- a/content/blind/whole.lua +++ b/content/blind/whole.lua @@ -3,19 +3,19 @@ SMODS.Blind { boss = { min = 3 }, - mult = 1, + mult = 2, boss_colour = HEX('B7C977'), atlas = 'music_blinds_atlas', pos = { y = 7 }, recalc_debuff = function(self, card, from_blind) - if card.area ~= G.jokers then + if card.playing_card then if not SMODS.has_no_rank(card) then if G.GAME.paperback.ranks_scored_this_ante[card:get_id()] then - return true + return false end + return true end end - return false end } diff --git a/content/booster/ego_gift_normal_1.lua b/content/booster/ego_gift_normal_1.lua new file mode 100644 index 00000000..e5b9a24a --- /dev/null +++ b/content/booster/ego_gift_normal_1.lua @@ -0,0 +1,12 @@ +PB_UTIL.EGO_GiftBooster { + key = 'ego_gift_normal_1', + atlas = 'boosters_atlas', + pos = { x = 0, y = 1 }, + config = { + extra = 2, + choose = 1 + }, + weight = 1, + cost = 4, + discovered = false, +} diff --git a/content/booster/minor_arcana_mega_2.lua b/content/booster/minor_arcana_mega_2.lua new file mode 100644 index 00000000..62a8acfe --- /dev/null +++ b/content/booster/minor_arcana_mega_2.lua @@ -0,0 +1,12 @@ +PB_UTIL.MinorArcanaBooster { + key = 'minor_arcana_mega_2', + atlas = 'boosters_atlas', + pos = { x = 6, y = 0 }, + config = { + extra = 5, + choose = 2 + }, + weight = 0.25, + cost = 8, + discovered = false, +} diff --git a/content/booster/minor_arcana_normal_4.lua b/content/booster/minor_arcana_normal_4.lua new file mode 100644 index 00000000..86a6810d --- /dev/null +++ b/content/booster/minor_arcana_normal_4.lua @@ -0,0 +1,12 @@ +PB_UTIL.MinorArcanaBooster { + key = 'minor_arcana_normal_4', + atlas = 'boosters_atlas', + pos = { x = 7, y = 0 }, + config = { + extra = 3, + choose = 1 + }, + weight = 1, + cost = 4, + discovered = false, +} diff --git a/content/deck/shimmering.lua b/content/deck/shimmering.lua new file mode 100644 index 00000000..b3a9641f --- /dev/null +++ b/content/deck/shimmering.lua @@ -0,0 +1,67 @@ +if PB_UTIL.config.ego_gifts_enabled then + SMODS.Back { + key = 'shimmering', + atlas = 'decks_atlas', + config = { + joker_slot = -2, + extra = { + a_slot = 1, + } + }, + pos = { x = 6, y = 0 }, + + locked_loc_vars = function(self, info_queue) + return { vars = { 10 } } + end, + + loc_vars = function(self) + return { + vars = { + self.config.extra.a_slot, + self.config.joker_slot, + } + } + end, + check_for_unlock = function(self, args) + if args.type == 'paperback_sold_ego_gifts' then + return #G.GAME.paperback.sold_ego_gifts >= 10 + end + end, + -- Utility function to recalculate consumable slot bonus + paperback_shimmering_update = function(self) + local sins = {} + local count = 0 + for _, v in ipairs(G.consumeables.cards) do + if v.ability.sin and v.ability.sin ~= 'none' then + if not sins[v.ability.sin] then + sins[v.ability.sin] = true + count = count + 1 + end + end + end + + + local change = count - G.GAME.paperback.shimmering_change + if change ~= 0 then + G.consumeables:change_size(change) + + G.GAME.paperback.shimmering_change = count + end + end + } + + local add_to_deck_ref = Card.add_to_deck + function Card.add_to_deck(...) + add_to_deck_ref(...) + if G.GAME.selected_back_key and G.GAME.selected_back_key.key == 'b_paperback_shimmering' then + G.GAME.selected_back_key:paperback_shimmering_update() + end + end + local remove_from_deck_ref = Card.remove_from_deck + function Card.remove_from_deck(...) + remove_from_deck_ref(...) + if G.GAME.selected_back_key and G.GAME.selected_back_key.key == 'b_paperback_shimmering' then + G.GAME.selected_back_key:paperback_shimmering_update() + end + end +end diff --git a/content/edition/dichrome.lua b/content/edition/dichrome.lua index 40da6a89..c9266dd6 100644 --- a/content/edition/dichrome.lua +++ b/content/edition/dichrome.lua @@ -26,6 +26,7 @@ SMODS.Edition { loc_vars = function(self, info_queue, card) return { + key = card.playing_card and 'e_paperback_dichrome_playing_card', vars = { (card.edition or {}).amount or self.config.amount } @@ -33,7 +34,22 @@ SMODS.Edition { end, calculate = function(self, card, context) - if context.setting_blind and card.ability.set == 'Joker' then + local should_trigger = (context.setting_blind and card.ability.set == 'Joker') + or (context.hand_drawn and card.playing_card) + + -- Checks whether this card was one of the drawn cards + if should_trigger and context.hand_drawn then + should_trigger = false + + for _, v in ipairs(context.hand_drawn) do + if v == card then + should_trigger = true + break + end + end + end + + if should_trigger then G.E_MANAGER:add_event(Event { trigger = 'after', delay = 1, diff --git a/content/ego_gift/blue_lighter.lua b/content/ego_gift/blue_lighter.lua new file mode 100644 index 00000000..f418be92 --- /dev/null +++ b/content/ego_gift/blue_lighter.lua @@ -0,0 +1,44 @@ +PB_UTIL.EGO_Gift { + key = 'blue_lighter', + config = { + sin = 'gloom', + xmult = 1, + a_xmult = 0.25 + }, + atlas = 'ego_gift_atlas', + pos = { x = 4, y = 1 }, + soul_pos = { x = 4, y = 4 }, + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.a_xmult, + card.ability.xmult + } } + end, + + ego_gift_calc = function(self, card, context) + if context.setting_blind then + if next(G.consumeables.cards) then + local targets = {} + for k, v in ipairs(G.consumeables.cards) do + if not (PB_UTIL.is_ego_gift(v) or SMODS.is_eternal(v)) then targets[#targets + 1] = v end + end + if next(targets) then + local to_destroy = pseudorandom_element(targets, pseudoseed('blue_lighter_destruction')) + SMODS.destroy_cards({ to_destroy }) + card.ability.xmult = card.ability.xmult + card.ability.a_xmult + SMODS.calculate_effect({ + message = localize('k_upgrade_ex'), + colour = G.C.MULT + }, card) + end + end + end + + if context.joker_main then + return { + xmult = card.ability.xmult + } + end + end +} diff --git a/content/ego_gift/broken_glasses.lua b/content/ego_gift/broken_glasses.lua new file mode 100644 index 00000000..d59e75d7 --- /dev/null +++ b/content/ego_gift/broken_glasses.lua @@ -0,0 +1,49 @@ +PB_UTIL.EGO_Gift { + key = 'broken_glasses', + config = { + sin = 'gloom', + odds = 4 + }, + atlas = 'ego_gift_atlas', + pos = { x = 4, y = 2 }, + soul_pos = { x = 4, y = 5 }, + + ego_loc_vars = function(self, info_queue, card) + local n, d = PB_UTIL.chance_vars(card, nil, 1, card.ability.odds) + return { vars = { + n, d + } } + end, + ego_gift_calc = function(self, card, context) + if context.remove_playing_cards and #context.removed > 0 and #context.removed <= 2 then + G.E_MANAGER:add_event(Event({ + func = function() + local fx = {} + local _first_dissolve = nil + for _, v in ipairs(context.removed) do + for i = 1, 2, 1 do + G.playing_card = (G.playing_card or 0) + 1 + local new_card = copy_card(v, nil, nil, G.playing_card) + new_card:add_to_deck() + G.deck.config.card_limit = G.deck.config.card_limit + 1 + table.insert(G.playing_cards, new_card) + G.hand:emplace(new_card) + new_card:start_materialize(nil, _first_dissolve) + _first_dissolve = true + fx[#fx + 1] = new_card + end + end + playing_card_joker_effects(fx) + return true + end + })) + + if PB_UTIL.chance(card, pseudoseed('broken_glasses'), nil, card.ability.odds) then + SMODS.destroy_cards({ card }) + return { + message = localize('paperback_broken_ex') + } + end + end + end +} diff --git a/content/ego_gift/chalice_of_trickle_down.lua b/content/ego_gift/chalice_of_trickle_down.lua new file mode 100644 index 00000000..2324aa48 --- /dev/null +++ b/content/ego_gift/chalice_of_trickle_down.lua @@ -0,0 +1,39 @@ +PB_UTIL.EGO_Gift { + key = 'chalice_of_trickle_down', + config = { + sin = 'envy', + }, + atlas = 'ego_gift_atlas', + pos = { x = 6, y = 1 }, + soul_pos = { x = 6, y = 4 }, + + ego_gift_calc = function(self, card, context) + if context.before and G.GAME.blind.boss then + local smallest, index + -- check if the scoring hand has atleast one rank card + for i, v in ipairs(context.scoring_hand) do + if not SMODS.has_no_rank(v) then + smallest, index = context.scoring_hand[i].base.nominal, i + break + end + end + -- check if a viable card has been found + if smallest then + -- find the smallest rank + for i, v in ipairs(context.scoring_hand) do + if not SMODS.has_no_rank(v) then + if smallest > v.base.nominal then + smallest = v.base.nominal + index = i + end + end + end + + return { + dollars = smallest, + card = context.scoring_hand[index] + } + end + end + end +} diff --git a/content/ego_gift/coffee_and_cranes.lua b/content/ego_gift/coffee_and_cranes.lua new file mode 100644 index 00000000..bd8e93f9 --- /dev/null +++ b/content/ego_gift/coffee_and_cranes.lua @@ -0,0 +1,20 @@ +PB_UTIL.EGO_Gift { + key = 'coffee_and_cranes', + config = { + sin = 'lust', + dollars = 3, + }, + + atlas = 'ego_gift_atlas', + pos = { x = 1, y = 0 }, + soul_pos = { x = 1, y = 3 }, + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.dollars + } } + end, + + calc_dollar_bonus = function(self, card) + return card.ability.dollars + end +} diff --git a/content/ego_gift/dark_vestige.lua b/content/ego_gift/dark_vestige.lua new file mode 100644 index 00000000..610dd09c --- /dev/null +++ b/content/ego_gift/dark_vestige.lua @@ -0,0 +1,15 @@ +PB_UTIL.EGO_Gift { + key = 'dark_vestige', + config = { + sin = 'none' + }, + atlas = 'ego_gift_atlas', + pos = { x = 7, y = 0 }, + soul_pos = { x = 7, y = 3 }, + cost = 5, + + in_pool = function(self, args) + -- bans dark vestige from appearing UNLESS it is the only spawnable card + return false + end +} diff --git a/content/ego_gift/death_seeker.lua b/content/ego_gift/death_seeker.lua new file mode 100644 index 00000000..755d67e3 --- /dev/null +++ b/content/ego_gift/death_seeker.lua @@ -0,0 +1,19 @@ +PB_UTIL.EGO_Gift { + key = 'death_seeker', + config = { + sin = 'gluttony', + }, + atlas = 'ego_gift_atlas', + pos = { x = 3, y = 2 }, + soul_pos = { x = 3, y = 5 }, + + ego_gift_calc = function(self, card, context) + if context.individual and context.cardarea == G.play then + if next(SMODS.get_enhancements(context.other_card)) and not SMODS.has_no_rank(context.other_card) then + return { + mult = context.other_card.base.nominal + } + end + end + end, +} diff --git a/content/ego_gift/decamillennial_stewpot.lua b/content/ego_gift/decamillennial_stewpot.lua new file mode 100644 index 00000000..2384374f --- /dev/null +++ b/content/ego_gift/decamillennial_stewpot.lua @@ -0,0 +1,20 @@ +PB_UTIL.EGO_Gift { + key = 'decamillennial_stewpot', + config = { + sin = 'lust', + }, + atlas = 'ego_gift_atlas', + pos = { x = 1, y = 2 }, + soul_pos = { x = 1, y = 5 }, + + ego_gift_calc = function(self, card, context) + if context.destroying_card and #context.full_hand == 1 and G.GAME.current_round.hands_played <= 0 and not context.blueprint then + return { + remove = true, + focus = card, + message = localize('paperback_destroyed_ex'), + colour = G.C.MULT + } + end + end, +} diff --git a/content/ego_gift/disk_fragment.lua b/content/ego_gift/disk_fragment.lua new file mode 100644 index 00000000..fa5a92fe --- /dev/null +++ b/content/ego_gift/disk_fragment.lua @@ -0,0 +1,47 @@ +PB_UTIL.EGO_Gift { + key = 'disk_fragment', + config = { + sin = 'gluttony', + cards = 2, + }, + atlas = 'ego_gift_atlas', + pos = { x = 3, y = 1 }, + soul_pos = { x = 3, y = 4 }, + + ego_loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.cards + } + } + end, + + ego_gift_calc = function(self, card, context) + if context.setting_blind and not G.GAME.blind.boss then + local no_planets = true + for _, c in ipairs(G.consumeables.cards) do + if c.ability.set == 'Planet' then + no_planets = false + end + end + if no_planets then + for i = 1, card.ability.cards, 1 do + G.E_MANAGER:add_event(Event({ + func = function() + local new_card = SMODS.add_card { + set = 'Planet', + key_append = 'paperback_disk_fragment', + edition = 'e_negative' + } + PB_UTIL.set_sell_value(new_card, 1) + return true + end + })) + end + return { + colour = G.C.BLUE + } + end + end + end, +} diff --git a/content/ego_gift/downpour.lua b/content/ego_gift/downpour.lua new file mode 100644 index 00000000..2ad6e3b7 --- /dev/null +++ b/content/ego_gift/downpour.lua @@ -0,0 +1,26 @@ +PB_UTIL.EGO_Gift { + key = 'downpour', + config = { + sin = 'sloth', + blind_mod = 0.05 + }, + atlas = 'ego_gift_atlas', + pos = { x = 2, y = 0 }, + soul_pos = { x = 2, y = 3 }, + + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.blind_mod * 100, + } } + end, + + ego_gift_calc = function(self, card, context) + if context.before then + G.GAME.blind.chips = G.GAME.blind.chips * (1 - card.ability.blind_mod) + G.GAME.blind.chip_text = number_format(G.GAME.blind.chips) + G.GAME.blind:wiggle() + card:juice_up() + end + end +} diff --git a/content/ego_gift/fiery_down.lua b/content/ego_gift/fiery_down.lua new file mode 100644 index 00000000..1254db1d --- /dev/null +++ b/content/ego_gift/fiery_down.lua @@ -0,0 +1,41 @@ +PB_UTIL.EGO_Gift { + key = 'fiery_down', + config = { + sin = 'lust', + threshold = 10, + discarded = 0 + }, + atlas = 'ego_gift_atlas', + pos = { x = 1, y = 1 }, + soul_pos = { x = 1, y = 4 }, + + + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.threshold, + card.ability.threshold - card.ability.discarded, + } } + end, + ego_gift_calc = function(self, card, context) + if context.pre_discard and not context.blueprint + and not (card.ability.discarded >= card.ability.threshold) then + card.ability.discarded = math.min(card.ability.threshold, card.ability.discarded + #context.full_hand) + if card.ability.discarded >= card.ability.threshold then + return { + message = localize('k_active_ex') + } + end + end + + if context.before then + if card.ability.discarded >= card.ability.threshold then + card.ability.discarded = 0 + return { + level_up = true, + message = localize('k_level_up_ex'), + } + end + end + end, +} diff --git a/content/ego_gift/fluorescent_lamp.lua b/content/ego_gift/fluorescent_lamp.lua new file mode 100644 index 00000000..57f37996 --- /dev/null +++ b/content/ego_gift/fluorescent_lamp.lua @@ -0,0 +1,50 @@ +PB_UTIL.EGO_Gift { + key = 'fluorescent_lamp', + config = { + sin = 'pride', + discards = 1, + threshold = 2, + total = 1 + }, + atlas = 'ego_gift_atlas', + pos = { x = 5, y = 2 }, + soul_pos = { x = 5, y = 5 }, + + + ego_gift_calc = function(self, card, context) + if context.setting_blind then + local selected_card = context.blueprint_card or card + G.E_MANAGER:add_event(Event({ + func = function() + card.ability.total = card.ability.discards + + card.ability.discards * + math.max(0, math.floor((G.jokers.config.card_limit - #G.jokers.cards) / card.ability.threshold)) + ease_discard(card.ability.total) + SMODS.calculate_effect({ + message = localize { type = 'variable', key = 'paperback_a_discards', vars = { card.ability.total } }, + colour = G.C.RED, + instant = true + }, + selected_card) + return true + end + })) + return nil, true + end + end, + + ego_loc_vars = function(self, info_queue, card) + if G.jokers then + card.ability.total = card.ability.discards + + card.ability.discards * + math.max(0, math.floor((G.jokers.config.card_limit - #G.jokers.cards) / card.ability.threshold)) + else + card.ability.total = card.ability.discards + end + return { vars = { + card.ability.discards, + card.ability.threshold, + card.ability.total + } } + end, +} diff --git a/content/ego_gift/golden_bough.lua b/content/ego_gift/golden_bough.lua new file mode 100644 index 00000000..c38891cb --- /dev/null +++ b/content/ego_gift/golden_bough.lua @@ -0,0 +1,66 @@ +PB_UTIL.EGO_Gift { + key = 'golden_bough', + config = { + sin = 'madness', + delta = -1, + }, + atlas = 'ego_gift_atlas', + pos = { x = 7, y = 2 }, + soul_pos = { x = 7, y = 5 }, + + hidden = true, + set = 'Spectral', + soul_set = "paperback_ego_gift", + soul_rate = 0.001, + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.delta + } } + end, + + ego_gift_calc = function(self, card, context) + if context.end_of_round and G.GAME.blind.boss and context.cardarea == G.consumeables then + local key + local filtered, gifts = {}, {} + for k, v in ipairs(PB_UTIL.ENABLED_EGO_GIFTS) do + if v ~= gifts[#gifts] and v ~= gifts[#gifts - 1] then + v = 'c_paperback_' .. v + gifts[#gifts + 1] = v + end + end + + for k, v in ipairs(G.consumeables) do + if v.ability.set == 'paperback_ego_gift' then + for _, name in ipairs(gifts) do + if v.config.center.key == name then + table.remove(gifts, _) + end + end + end + end + + + if #gifts > 0 then + key = pseudorandom_element(gifts, pseudoseed("golden_bough_spawn")) + else + key = 'c_paperback_dark_vestige' + end + + local new_gift = SMODS.create_card { + key = key, + edition = 'e_negative' + } + new_gift:add_to_deck() + G.consumeables:emplace(new_gift) + end + end, + + ego_add = function(self, card, from_debuff) + G.jokers:change_size(card.ability.delta) + end, + + ego_remove = function(self, card, from_debuff) + G.jokers:change_size(-card.ability.delta) + end +} diff --git a/content/ego_gift/imposed_weight.lua b/content/ego_gift/imposed_weight.lua new file mode 100644 index 00000000..975d1450 --- /dev/null +++ b/content/ego_gift/imposed_weight.lua @@ -0,0 +1,29 @@ +PB_UTIL.EGO_Gift { + key = 'imposed_weight', + config = { + sin = 'wrath', + a_rep = 1, + }, + atlas = 'ego_gift_atlas', + pos = { x = 0, y = 0 }, + soul_pos = { x = 0, y = 3 }, + + ego_gift_calc = function(self, card, context) + if context.repetition and context.scoring_hand then + if context.other_card == context.scoring_hand[#context.scoring_hand] then + local empty_slots = G.jokers.config.card_limit - #G.jokers.cards + if empty_slots > 0 then + return { + repetitions = card.ability.a_rep * empty_slots + } + end + end + end + end, + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.a_rep + } } + end, +} diff --git a/content/ego_gift/lightning_rod.lua b/content/ego_gift/lightning_rod.lua new file mode 100644 index 00000000..96230c9c --- /dev/null +++ b/content/ego_gift/lightning_rod.lua @@ -0,0 +1,30 @@ +PB_UTIL.EGO_Gift { + key = 'lightning_rod', + config = { + sin = 'envy', + odds = 2 + }, + atlas = 'ego_gift_atlas', + pos = { x = 6, y = 0 }, + soul_pos = { x = 6, y = 3 }, + + ego_loc_vars = function(self, info_queue, card) + local n, d = PB_UTIL.chance_vars(card, nil, 1, card.ability.odds) + + return { + vars = { + n, d + } + } + end, + + ego_gift_calc = function(self, card, context) + if context.repetition and context.cardarea == G.hand and next(context.card_effects[1]) then + if PB_UTIL.chance(card, 'lightning_rod', 1, card.ability.odds) then + return { + repetitions = 1, + } + end + end + end +} diff --git a/content/ego_gift/nebulizer.lua b/content/ego_gift/nebulizer.lua new file mode 100644 index 00000000..0b7a6cf3 --- /dev/null +++ b/content/ego_gift/nebulizer.lua @@ -0,0 +1,30 @@ +PB_UTIL.EGO_Gift { + key = 'nebulizer', + config = { + sin = 'pride', + xmult = 2, + extra = { + odds = 5 + } + }, + atlas = 'ego_gift_atlas', + pos = { x = 5, y = 0 }, + soul_pos = { x = 5, y = 3 }, + + ego_loc_vars = function(self, info_queue, card) + local n, d = PB_UTIL.chance_vars(card, nil) + return { vars = { + n, d, card.ability.xmult + } } + end, + + ego_gift_calc = function(self, card, context) + if context.individual and context.cardarea == G.play then + if PB_UTIL.chance(card, 'nebulizer_xmult') then + return { + xmult = card.ability.xmult + } + end + end + end, +} diff --git a/content/ego_gift/patrolling_flashlight.lua b/content/ego_gift/patrolling_flashlight.lua new file mode 100644 index 00000000..0a6ca8de --- /dev/null +++ b/content/ego_gift/patrolling_flashlight.lua @@ -0,0 +1,64 @@ +PB_UTIL.EGO_Gift { + key = 'patrolling_flashlight', + config = { + sin = 'envy', + active = true + }, + atlas = 'ego_gift_atlas', + pos = { x = 6, y = 2 }, + soul_pos = { x = 6, y = 5 }, + + ego_loc_vars = function(self, info_queue, card) + if G.consumeables then + local color = card.ability.active and G.C.GREEN or G.C.RED + local text = card.ability.active and 'k_active' or 'paperback_inactive' + return { + main_end = { + { + n = G.UIT.C, + config = { align = "bm", padding = 0.02 }, + nodes = { + { + n = G.UIT.C, + config = { align = "m", colour = color, r = 0.05, padding = 0.06 }, + nodes = { + { + n = G.UIT.T, + config = { + text = localize(text), + colour = G.C.UI.TEXT_LIGHT, + scale = 0.3 + } + }, + } + } + } + } + } + } + end + end, + + ego_gift_calc = function(self, card, context) + if context.using_consumeable and card.ability.active and not context.consumeable.ability.paperback_energized then + card.ability.active = false + G.E_MANAGER:add_event(Event({ func = function() + -- Doesn't need room + local copy = SMODS.create_card { + key = context.consumeable.config.center.key, + } + copy:add_sticker('paperback_energized', true) + copy:add_to_deck() + G.consumeables:emplace(copy) + return true + end})) + end + + if context.end_of_round and G.GAME.blind.boss and context.cardarea == G.consumeables then + card.ability.active = true + return { + message = localize('k_active_ex') + } + end + end +} diff --git a/content/ego_gift/pendant_of_nostalgia.lua b/content/ego_gift/pendant_of_nostalgia.lua new file mode 100644 index 00000000..bf2bd213 --- /dev/null +++ b/content/ego_gift/pendant_of_nostalgia.lua @@ -0,0 +1,69 @@ +if PB_UTIL.config.minor_arcana_enabled then + PB_UTIL.EGO_Gift { + key = 'pendant_of_nostalgia_minor_arcana', + config = { + sin = 'gloom', + }, + atlas = 'ego_gift_atlas', + pos = { x = 4, y = 0 }, + soul_pos = { x = 4, y = 3 }, + + + ego_gift_calc = function(self, card, context) + if context.remove_playing_cards then + for count = 1, #context.removed do + if PB_UTIL.can_spawn_card(G.consumeables) then + local roll = pseudorandom(pseudoseed('pendant_of_nostalgia')) + if roll > 0.49 then + PB_UTIL.try_spawn_card { set = 'paperback_minor_arcana', } + + SMODS.calculate_effect({ + message = localize('paperback_plus_minor_arcana'), + colour = G.C.PAPERBACK_MINOR_ARCANA, + card = card, + message_card = card + }) + else + PB_UTIL.try_spawn_card { set = 'Tarot', } + SMODS.calculate_effect({ + message = localize('k_plus_tarot'), + colour = G.C.TAROT, + card = card, + message_card = card + }) + end + end + end + end + end + } +else + PB_UTIL.EGO_Gift { + key = 'pendant_of_nostalgia', + config = { + sin = 'gloom', + }, + atlas = 'ego_gift_atlas', + pos = { x = 4, y = 0 }, + soul_pos = { x = 4, y = 3 }, + + + ego_gift_calc = function(self, card, context) + if context.remove_playing_cards then + for count = 1, #context.removed do + if PB_UTIL.can_spawn_card(G.consumeables) then + local roll = pseudorandom(pseudoseed('pendant_of_nostalgia')) + + PB_UTIL.try_spawn_card { set = 'Tarot', } + SMODS.calculate_effect({ + message = localize('k_plus_tarot'), + colour = G.C.TAROT, + card = card, + message_card = card + }) + end + end + end + end + } +end diff --git a/content/ego_gift/phlebotomy_pack.lua b/content/ego_gift/phlebotomy_pack.lua new file mode 100644 index 00000000..1ef462bb --- /dev/null +++ b/content/ego_gift/phlebotomy_pack.lua @@ -0,0 +1,36 @@ +PB_UTIL.EGO_Gift { + key = 'phlebotomy_pack', + config = { + sin = 'wrath', + a_hand = 1, + }, + atlas = 'ego_gift_atlas', + pos = { x = 0, y = 1 }, + soul_pos = { x = 0, y = 4 }, + + + ego_gift_calc = function(self, card, context) + if context.setting_blind then + local selected_card = context.blueprint_card or card + G.E_MANAGER:add_event(Event({ + func = function() + ease_hands_played(card.ability.a_hand) + SMODS.calculate_effect({ + message = localize { type = 'variable', key = 'a_hands', vars = { card.ability.a_hand } }, + colour = G.C.BLUE, + instant = true + }, + selected_card) + return true + end + })) + return nil, true + end + end, + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.a_hand + } } + end, +} diff --git a/content/ego_gift/ragged_umbrella.lua b/content/ego_gift/ragged_umbrella.lua new file mode 100644 index 00000000..1d298b86 --- /dev/null +++ b/content/ego_gift/ragged_umbrella.lua @@ -0,0 +1,40 @@ +PB_UTIL.EGO_Gift { + key = 'ragged_umbrella', + config = { + sin = 'sloth', + chip_mod = 5, + chips = 0 + }, + atlas = 'ego_gift_atlas', + pos = { x = 2, y = 2 }, + soul_pos = { x = 2, y = 5 }, + + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.chip_mod, + card.ability.chips + } } + end, + + ego_gift_calc = function(self, card, context) + if context.final_scoring_step and hand_chips then + if not (SMODS.calculate_round_score() + G.GAME.chips > G.GAME.blind.chips) then + card.ability.chips = card.ability.chips + card.ability.chip_mod + return { + message = localize { + type = 'variable', + key = 'a_chips', + vars = { card.ability.chip_mod } + }, + colour = G.C.CHIPS + } + end + end + if context.joker_main then + return { + chips = card.ability.chips + } + end + end +} diff --git a/content/ego_gift/rusty_coin.lua b/content/ego_gift/rusty_coin.lua new file mode 100644 index 00000000..1b5a5c99 --- /dev/null +++ b/content/ego_gift/rusty_coin.lua @@ -0,0 +1,30 @@ +PB_UTIL.EGO_Gift { + key = 'rusty_coin', + config = { + sin = 'sloth', + }, + atlas = 'ego_gift_atlas', + pos = { x = 2, y = 1 }, + soul_pos = { x = 2, y = 4 }, + + ego_gift_calc = function(self, card, context) + if context.before and #context.full_hand == 1 and G.GAME.current_round.hands_played <= 0 and not context.blueprint then + local coin = context.full_hand[1] + local seal = SMODS.poll_seal { + key = 'rusty_coin_seal', + guaranteed = true + } + + G.E_MANAGER:add_event(Event { + trigger = 'after', + delay = 0.5, + func = function() + coin:set_seal(seal, nil, true) + coin:juice_up() + card:juice_up() + return true + end + }) + end + end, +} diff --git a/content/ego_gift/smokes_and_wires.lua b/content/ego_gift/smokes_and_wires.lua new file mode 100644 index 00000000..b46e533f --- /dev/null +++ b/content/ego_gift/smokes_and_wires.lua @@ -0,0 +1,27 @@ +PB_UTIL.EGO_Gift { + key = 'smokes_and_wires', + config = { + sin = 'wrath', + xmult = 2, + }, + atlas = 'ego_gift_atlas', + pos = { x = 0, y = 2 }, + soul_pos = { x = 0, y = 5 }, + + + ego_gift_calc = function(self, card, context) + if context.joker_main then + if G.GAME.current_round.hands_left == 0 then + return { + xmult = card.ability.xmult + } + end + end + end, + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.xmult + } } + end, +} diff --git a/content/ego_gift/thrill.lua b/content/ego_gift/thrill.lua new file mode 100644 index 00000000..350644e6 --- /dev/null +++ b/content/ego_gift/thrill.lua @@ -0,0 +1,66 @@ +PB_UTIL.EGO_Gift { + key = 'thrill', + config = { + sin = 'gluttony', + a_xmult = 0.25, + starting_xmult = 1, + }, + atlas = 'ego_gift_atlas', + pos = { x = 3, y = 0 }, + soul_pos = { x = 3, y = 3 }, + + ego_loc_vars = function(self, info_queue, card) + -- Outside Blind + if not (G.GAME.blind and G.GAME.blind.in_blind) then + return { vars = { + card.ability.a_xmult, + card.ability.starting_xmult, + } } + end + -- In Blind, inactive + if not (G.GAME.current_round.hands_played <= 0) then + return { + key = self.key..'_inactive', + vars = { + card.ability.a_xmult, + }, + main_end = { + -- from Luchador + {n=G.UIT.C, config={align = "bm", minh = 0.4}, nodes={ + {n=G.UIT.C, config={ref_table = self, align = "m", colour = G.C.RED, r = 0.05, padding = 0.06}, nodes={ + {n=G.UIT.T, config={text = ' '..localize('paperback_inactive')..' ',colour = G.C.UI.TEXT_LIGHT, scale = 0.32*0.9}}, + }} + }} + } + } + end + -- In Blind, active + return { + vars = { + card.ability.a_xmult, + card.ability.a_xmult * G.GAME.current_round.discards_used + card.ability.starting_xmult, + } + } + end, + + ego_gift_calc = function(self, card, context) + if context.pre_discard and not context.hook and G.GAME.current_round.hands_played <= 0 then + return { + message = localize { + type = 'variable', + key = 'a_xmult', + vars = { card.ability.a_xmult * (1 + G.GAME.current_round.discards_used) + card.ability.starting_xmult } + }, + colour = G.C.MULT + } + end + + if context.joker_main then + if G.GAME.current_round.hands_played <= 0 then + return { + xmult = card.ability.a_xmult * G.GAME.current_round.discards_used + card.ability.starting_xmult + } + end + end + end, +} diff --git a/content/ego_gift/tomorrow_fortune.lua b/content/ego_gift/tomorrow_fortune.lua new file mode 100644 index 00000000..6bb4a790 --- /dev/null +++ b/content/ego_gift/tomorrow_fortune.lua @@ -0,0 +1,24 @@ +PB_UTIL.EGO_Gift { + key = 'tomorrow_fortune', + config = { + sin = 'pride', + bonus = 1, + }, + atlas = 'ego_gift_atlas', + pos = { x = 5, y = 1 }, + soul_pos = { x = 5, y = 4 }, + + ego_loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.bonus + } } + end, + + ego_add = function(self, card, from_debuff) + G.GAME.modifiers.booster_size_mod = (G.GAME.modifiers.booster_size_mod or 0) + card.ability.bonus + end, + + ego_remove = function(self, card, from_debuff) + G.GAME.modifiers.booster_size_mod = (G.GAME.modifiers.booster_size_mod or 0) - card.ability.bonus + end +} diff --git a/content/enhancement/antique.lua b/content/enhancement/antique.lua new file mode 100644 index 00000000..06b963ed --- /dev/null +++ b/content/enhancement/antique.lua @@ -0,0 +1,36 @@ +SMODS.Enhancement { + key = 'antique', + atlas = 'enhancements_atlas', + pos = { x = 8, y = 0 }, + config = { + extra = { + xchips = 1, + xchips_mod = 0.1 + } + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.xchips, + card.ability.extra.xchips_mod + } + } + end, + + calculate = function(self, card, context) + if context.cardarea == G.play and context.before then + card.ability.extra.xchips = card.ability.extra.xchips + card.ability.extra.xchips_mod + return { + message = localize('k_upgrade_ex'), + colour = G.C.CHIPS + } + end + + if context.cardarea == G.play and context.main_scoring then + return { + xchips = card.ability.extra.xchips + } + end + end +} diff --git a/content/enhancement/bandaged.lua b/content/enhancement/bandaged.lua index a1786fdf..9e03a749 100644 --- a/content/enhancement/bandaged.lua +++ b/content/enhancement/bandaged.lua @@ -50,7 +50,7 @@ SMODS.Enhancement { if (left == ctx.other_card or right == ctx.other_card) then return { - repetitions = math.max(1, 1 + G.GAME.paperback.bandaged_inc), + repetitions = 1 + G.GAME.paperback.bandaged_inc, message_card = ctx.other_card, juice_card = card, } diff --git a/content/enhancement/ceramic.lua b/content/enhancement/ceramic.lua index aea6865f..d5e95f40 100644 --- a/content/enhancement/ceramic.lua +++ b/content/enhancement/ceramic.lua @@ -14,7 +14,7 @@ SMODS.Enhancement { loc_vars = function(self, info_queue, card) return { vars = { - card.ability.extra.a_money_low, + card.ability.extra.a_money_low + G.GAME.paperback.ceramic_inc, card.ability.extra.a_money_high + G.GAME.paperback.ceramic_inc, } } @@ -22,7 +22,8 @@ SMODS.Enhancement { calculate = function(self, card, context) if context.cardarea == G.play and context.main_scoring then - local dollars = pseudorandom("Ceramic Money Amount", card.ability.extra.a_money_low, + local dollars = pseudorandom("Ceramic Money Amount", + card.ability.extra.a_money_low + G.GAME.paperback.ceramic_inc, card.ability.extra.a_money_high + G.GAME.paperback.ceramic_inc) return { @@ -34,7 +35,8 @@ SMODS.Enhancement { card.ability.extra.mult_gt_chip = mult > hand_chips end - if context.destroy_card and context.destroy_card == card then + if context.destroy_card and context.destroy_card == card and + (context.cardarea == G.play or context.cardarea == G.hand or context.cardarea == 'unscored') then return { remove = card.ability.extra.mult_gt_chip } diff --git a/content/enhancement/sleeved.lua b/content/enhancement/sleeved.lua new file mode 100644 index 00000000..9a00424c --- /dev/null +++ b/content/enhancement/sleeved.lua @@ -0,0 +1,44 @@ +SMODS.Enhancement { + key = "sleeved", + atlas = "enhancements_atlas", + pos = { x = 7, y = 0 }, + config = { extra = { + money = 5 + } }, + + loc_vars = function(self, info_queue, card) + return { vars = { card.ability.extra.money } } + end, + + calculate = function(self, card, context) + if context.stay_flipped and context.other_card == card then + return { prevent_stay_flipped = true } + end + + if context.remove_playing_cards then + for _, removed in ipairs(context.removed) do + if removed == card then return { dollars = card.ability.extra.money } end + end + end + end, + + -- the actual center sprite should just be the base unenhanced card + set_sprites = function(self, card, front) + card.children.center:set_sprite_pos({ x = 6, y = 0 }) + card.children.center.paperback_sleeved = true + end +} + +-- drawstep for sleeved graphic to draw over the top of the card front + edition +SMODS.DrawStep { + key = "sleeved", + order = 21, + func = function(self, layer) + if self.children.center.paperback_sleeved then + self.children.center:set_sprite_pos({ x = 7, y = 0 }) + self.children.center:draw_shader('dissolve') + self.children.center:set_sprite_pos({ x = 6, y = 0 }) + end + end, + conditions = { vortex = false, facing = 'front' } +} diff --git a/content/joker/a_balatro_movie.lua b/content/joker/a_balatro_movie.lua new file mode 100644 index 00000000..209022b7 --- /dev/null +++ b/content/joker/a_balatro_movie.lua @@ -0,0 +1,59 @@ +SMODS.Joker { + key = 'a_balatro_movie', + unlocked = true, + discovered = false, + config = { + extra = { + dollars = 2 + } + }, + atlas = "jokers_atlas", + rarity = 1, + blueprint_compat = false, + eternal_compat = true, + perishable_compat = true, + cost = 4, + pos = { x = 17, y = 2 }, + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.last_hand_played and localize(card.ability.extra.last_hand_played, 'poker_hands') or 'None', + card.ability.extra.dollars + } + } + end, + set_ability = function(self, card, initial, delay_sprites) + card.ability.extra.last_hand_played = G.GAME.last_hand_played + end, + calculate = function(self, card, context) + if context.joker_main then + if card.ability.extra.last_hand_played == G.GAME.last_hand_played then + return { dollars = card.ability.extra.dollars } + end + end + if context.after then + card.ability.extra.last_hand_played = G.GAME.last_hand_played + end + end, + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+$" }, + { ref_table = "card.joker_display_values", ref_value = "dollars", retrigger_type = "mult" }, + }, + text_config = { colour = G.C.GOLD }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "last_hand_played", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + local text, _, _ = JokerDisplay.evaluate_hand() + local is_last = text == card.ability.extra.last_hand_played + card.joker_display_values.dollars = is_last and card.ability.extra.dollars or 0 + card.joker_display_values.last_hand_played = card.ability.extra.last_hand_played and + localize(card.ability.extra.last_hand_played, 'poker_hands') or 'None' + end + } + end, +} diff --git a/content/joker/apple.lua b/content/joker/apple.lua index f86e8a1a..96615665 100644 --- a/content/joker/apple.lua +++ b/content/joker/apple.lua @@ -2,7 +2,8 @@ SMODS.Joker { key = "apple", config = { extra = { - odds = 4, + odds = 3, + break_odds = 6 } }, rarity = 1, @@ -22,11 +23,13 @@ SMODS.Joker { loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = G.P_CENTERS.e_negative local numerator, denominator = PB_UTIL.chance_vars(card) - + local num_break, dem_break = PB_UTIL.chance_vars(card, "apple_destruction", 1, card.ability.extra.break_odds) return { vars = { numerator, - denominator + denominator, + num_break, + dem_break } } end, @@ -36,7 +39,7 @@ SMODS.Joker { if context.buying_card and context.card.ability.consumeable then local bought_card = context.card - if PB_UTIL.chance(card, 'apple_creation') then + if PB_UTIL.chance(card, 'apple_creation', 1, card.ability.extra.odds) then -- Copy the consumable G.E_MANAGER:add_event(Event({ trigger = 'after', @@ -52,12 +55,12 @@ SMODS.Joker { })) -- Don't destroy the joker if it was triggered due to blueprint - if not context.blueprint then + if not context.blueprint and PB_UTIL.chance(card, 'apple_destruction', 1, card.ability.extra.break_odds) then PB_UTIL.destroy_joker(card) return { message = localize('paperback_destroyed_ex'), - colour = G.C.MULT + colour = G.C.RED } end diff --git a/content/joker/as_above_so_below.lua b/content/joker/as_above_so_below.lua index 649ee1c3..5f08f07e 100644 --- a/content/joker/as_above_so_below.lua +++ b/content/joker/as_above_so_below.lua @@ -35,7 +35,7 @@ SMODS.Joker { end, calculate = function(self, card, context) - if context.before and #context.scoring_hand == 5 then + if context.before and #context.scoring_hand >= 5 then local apostle = false -- Check for apostle for _, v in ipairs(context.scoring_hand) do @@ -62,5 +62,46 @@ SMODS.Joker { end end end - end + end, + joker_display_def = function (JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult" }, + }, + text_config = { colour = G.C.SECONDARY_SET.Tarot }, + calc_function = function(card) + local _, poker_hands, scoring_hand = JokerDisplay.evaluate_hand() + local card_type_given = nil + if #scoring_hand >= 5 then + local apostle = false + -- Check for apostle + for _, v in ipairs(scoring_hand) do + if PB_UTIL.is_rank(v, 'paperback_Apostle') then + apostle = true + break + end + end + if apostle then + if not next(poker_hands["Straight"]) then + card_type_given = "Tarot" + else + card_type_given = "Spectral" + end + end + end + card.joker_display_values.card_type_given = card_type_given + card.joker_display_values.count = card_type_given and 1 or 0 + end, + style_function = function(card, text, reminder_text, extra) + if text then + for _, child in ipairs(text.children) do + child.config.colour = card.joker_display_values.card_type_given == 'Spectral' and G.C.SECONDARY_SET.Spectral or + G.C.SECONDARY_SET.Tarot + end + end + return false + end + } + end, } diff --git a/content/joker/aurora_borealis.lua b/content/joker/aurora_borealis.lua index 047e5ba8..423fde61 100644 --- a/content/joker/aurora_borealis.lua +++ b/content/joker/aurora_borealis.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'aurora_borealis', config = { extra = { - a_xmult = 1, + a_xmult = 0.5, } }, rarity = 2, @@ -48,5 +48,31 @@ SMODS.Joker { xmult = xmult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "xmult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + local xmult = 1 + if G.jokers then + local count = 0 + for k, v in ipairs(G.jokers.cards) do + if v.edition and not v.edition.negative then + count = count + 1 + end + end + xmult = 1 + (count * card.ability.extra.a_xmult) + end + card.joker_display_values.xmult = xmult + end + } + end, } diff --git a/content/joker/b_soda.lua b/content/joker/b_soda.lua index 2e25969e..3b873529 100644 --- a/content/joker/b_soda.lua +++ b/content/joker/b_soda.lua @@ -38,7 +38,7 @@ SMODS.Joker { key = 'a_hands', vars = { card.ability.extra.hands } }, - colour = G.C.CHIPS + colour = G.C.BLUE } end diff --git a/content/joker/banana_man.lua b/content/joker/banana_man.lua new file mode 100644 index 00000000..2811c13c --- /dev/null +++ b/content/joker/banana_man.lua @@ -0,0 +1,78 @@ +SMODS.Joker { -- Banana Man + key = "banana_man", + config = { + extra = { + xmult = 2, + odds = 3, + } + }, + pos = { + x = 1, + y = 10 + }, + pools = { + Music = true + }, + cost = 8, + rarity = 3, + blueprint_compat = true, + eternal_compat = true, + unlocked = false, + discovered = false, + atlas = 'jokers_atlas', + + loc_vars = function(self, info_queue, card) + local new_numerator, new_denominator = PB_UTIL.chance_vars(card, 'banana_man') + return { vars = { new_numerator, new_denominator, card.ability.extra.xmult } } + end, + + calculate = function(self, card, context) + if context.other_joker and context.other_joker.ability.set == "Joker" then -- this is just baseball card's code, dont @ me + if PB_UTIL.chance(card, 'potassium') then + return { + x_mult = card.ability.extra.xmult, + message_card = context.other_joker + } + end + end + end, + + check_for_unlock = function(self, args) + if args.type == 'modify_jokers' and G.jokers then + if next(SMODS.find_card('j_cavendish')) then + return true + end + return false + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult" }, + { text = "x", scale = 0.35 }, + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "xmult" } + } + }, + }, + extra = { + { + { text = '(' }, + { ref_table = 'card.joker_display_values', ref_value = 'odds' }, + { text = ')' }, + }, + }, + extra_config = { + colour = G.C.GREEN, + scale = 0.3, + }, + calc_function = function(card) + card.joker_display_values.count = G.jokers and #G.jokers.cards or 0 + card.joker_display_values.odds = localize { type = 'variable', key = "jdis_odds", vars = { PB_UTIL.chance_vars(card, 'banana_man') } } + end + } + end, +} diff --git a/content/joker/better_call_jimbo.lua b/content/joker/better_call_jimbo.lua index 2a73a605..0b6dcb25 100644 --- a/content/joker/better_call_jimbo.lua +++ b/content/joker/better_call_jimbo.lua @@ -3,7 +3,7 @@ SMODS.Joker { config = { extra = { a_xMult = 0.1, - threshold = 5 + threshold = 4 }, }, rarity = 3, @@ -33,5 +33,22 @@ SMODS.Joker { card.ability.extra.a_xMult * math.floor(G.GAME.dollars / card.ability.extra.threshold)) } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + card.joker_display_values.x_mult = 1 + math.max(0, + card.ability.extra.a_xMult * math.floor(G.GAME.dollars / card.ability.extra.threshold)) + end, + } + end, } diff --git a/content/joker/bicycle.lua b/content/joker/bicycle.lua index 80398c22..2afaaba1 100644 --- a/content/joker/bicycle.lua +++ b/content/joker/bicycle.lua @@ -19,12 +19,6 @@ SMODS.Joker { loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = G.P_CENTERS.m_wild - - return { - vars = { - card.ability.extra.x_mult - } - } end, calculate = function(self, card, context) @@ -33,7 +27,6 @@ SMODS.Joker { if context.other_card.ability.name == 'Wild Card' then return { mult = context.other_card:get_chip_bonus(), - x_mult = card.ability.extra.x_mult, card = card } end @@ -46,13 +39,6 @@ SMODS.Joker { text = { { text = "+", colour = G.C.MULT }, { ref_table = "card.joker_display_values", ref_value = "mult", colour = G.C.MULT }, - { text = " " }, - { - border_nodes = { - { text = 'X' }, - { ref_table = 'card.joker_display_values', ref_value = 'xMult' } - } - } }, @@ -71,20 +57,17 @@ SMODS.Joker { calc_function = function(card) local text, _, scoring_hand = JokerDisplay.evaluate_hand() local total_mult = 0 - local total_xMult = 1 for k, v in pairs(scoring_hand) do if v.ability.name == "Wild Card" then local triggers = JokerDisplay.calculate_card_triggers(v, scoring_hand) for _ = 1, triggers do total_mult = total_mult + v:get_chip_bonus() - total_xMult = total_xMult * card.ability.extra.x_mult end end end card.joker_display_values.mult = total_mult - card.joker_display_values.xMult = total_xMult card.joker_display_values.localized_text = localize { type = 'name_text', key = 'm_wild', set = 'Enhanced' } end } diff --git a/content/joker/bismuth.lua b/content/joker/bismuth.lua index 86b06ac2..e282c8bb 100644 --- a/content/joker/bismuth.lua +++ b/content/joker/bismuth.lua @@ -54,7 +54,7 @@ SMODS.Joker { for k, v in pairs(ctx.full_hand) do local roll = PB_UTIL.chance(card, 'bismuth') - if not v.edition and not v.debuff and roll and + if not v.edition and roll and (v:is_suit(card.ability.extra.suit1) or v:is_suit(card.ability.extra.suit2)) then triggered = true diff --git a/content/joker/black_forest_cake.lua b/content/joker/black_forest_cake.lua new file mode 100644 index 00000000..cc1b2b47 --- /dev/null +++ b/content/joker/black_forest_cake.lua @@ -0,0 +1,68 @@ +SMODS.Joker { + key = "black_forest_cake", + config = { + extra = { + mult = 2, + a_mult = 2 + } + }, + rarity = 1, + pos = { x = 13, y = 10 }, + atlas = "jokers_atlas", + cost = 3, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = false, + perishable_compat = false, + soul_pos = nil, + pools = { + Food = true + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.mult, + card.ability.extra.a_mult, + } + } + end, + + calculate = function(self, card, context) + if context.joker_main and card.ability.extra.mult > 0 then + return { + mult = card.ability.extra.mult, + } + end + + if not context.blueprint and context.end_of_round and context.main_eval then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.a_mult + return { + message = localize('k_upgrade_ex'), + card = card, + colour = G.C.MULT, + } + end + + if not context.blueprint and PB_UTIL.count_destroyed_things(context) > 0 + and not (context.paperback and context.paperback.destroyed_joker and card == context.paperback.destroyed_joker) + then + PB_UTIL.destroy_joker(card) + return { + message = localize('k_eaten_ex'), + colour = G.C.FILTER + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, +} diff --git a/content/joker/black_rainbows.lua b/content/joker/black_rainbows.lua index 4f9e7351..50cbe3d4 100644 --- a/content/joker/black_rainbows.lua +++ b/content/joker/black_rainbows.lua @@ -40,7 +40,7 @@ SMODS.Joker { -- Go through each card in the scoring hand and check if it is a valid card for k, v in pairs(ctx.scoring_hand) do - if (v:is_suit(card.ability.extra.suit1) or v:is_suit(card.ability.extra.suit2)) and not v.debuff and not v.edition then + if (v:is_suit(card.ability.extra.suit1) or v:is_suit(card.ability.extra.suit2)) and not v.edition then -- If the odds succeed, set the card's edition to polychrome if PB_UTIL.chance(card, "black_rainbows") then polychrome_triggered = true diff --git a/content/joker/blade_dance.lua b/content/joker/blade_dance.lua index 392b842a..223e7bbd 100644 --- a/content/joker/blade_dance.lua +++ b/content/joker/blade_dance.lua @@ -65,6 +65,8 @@ SMODS.Joker { draw_card(G.play, G.hand, 90, 'up') end + save_run() + return true end }) diff --git a/content/joker/blue_marble.lua b/content/joker/blue_marble.lua index dc7dec06..03c5053c 100644 --- a/content/joker/blue_marble.lua +++ b/content/joker/blue_marble.lua @@ -2,8 +2,8 @@ SMODS.Joker { key = "blue_marble", config = { extra = { - suit = 'Clubs', - odds = 3, + mult = 0, + increment = 2, } }, rarity = 1, @@ -14,60 +14,38 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, loc_vars = function(self, info_queue, card) - local numerator, denominator = PB_UTIL.chance_vars(card) - return { vars = { - numerator, - denominator, - localize(card.ability.extra.suit, 'suits_singular'), - colours = { - G.C.SUITS[card.ability.extra.suit] - } + card.ability.extra.increment, + card.ability.extra.mult } } end, calculate = function(self, card, context) - if context.before then - -- Check scoring hand for any club - for _, v in ipairs(context.scoring_hand) do - if v:is_suit(card.ability.extra.suit) then - -- Planet spawn - if PB_UTIL.chance(card, 'blue_marble_planet') then - if PB_UTIL.try_spawn_card { set = 'Planet' } then - return { - message = localize('k_plus_planet'), - colour = G.C.SECONDARY_SET.Planet - } - end - break - end - end - end + if context.using_consumeable and context.consumeable.ability.set == "Planet" then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.increment + return { + message = localize('k_upgrade_ex') + } end - end, + if context.joker_main then + return { + mult = card.ability.extra.mult + } + end + end, joker_display_def = function(JokerDisplay) return { - reminder_text = { - { text = '(' }, - { ref_table = 'card.joker_display_values', ref_value = 'localized_suit' }, - { text = ')' } + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } }, - - calc_function = function(card) - card.joker_display_values.localized_suit = localize(card.ability.extra.suit, 'suits_singular') - end, - - style_function = function(card, text, reminder_text, extra) - if reminder_text and reminder_text.children[2] then - reminder_text.children[2].config.colour = G.C.SUITS[card.ability.extra.suit] - end - end, + text_config = { colour = G.C.MULT } } end } diff --git a/content/joker/blue_star.lua b/content/joker/blue_star.lua index f20f83fe..6963381b 100644 --- a/content/joker/blue_star.lua +++ b/content/joker/blue_star.lua @@ -19,7 +19,7 @@ SMODS.Joker { cost = 8, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, paperback = { requires_stars = true }, @@ -74,5 +74,19 @@ SMODS.Joker { x_chips = card.ability.extra.x_chips } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = 'X' }, + { ref_table = 'card.ability.extra', ref_value = 'x_chips' } + }, + border_colour = G.C.CHIPS + } + }, + } + end, } diff --git a/content/joker/boundary_of_death.lua b/content/joker/boundary_of_death.lua index 02384f24..984340f3 100644 --- a/content/joker/boundary_of_death.lua +++ b/content/joker/boundary_of_death.lua @@ -6,7 +6,7 @@ SMODS.Joker { mult = 46 } }, - rarity = 3, + rarity = 2, pos = { x = 11, y = 2 }, atlas = "jokers_atlas", cost = 8, @@ -35,6 +35,13 @@ SMODS.Joker { joker_display_def = function(JokerDisplay) return { + text = { + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult" }, + { text = "x", scale = 0.35 }, + { text = "+", colour = G.C.MULT }, + { ref_table = "card.ability.extra", ref_value = "mult", colour = G.C.MULT } + }, + reminder_text = { { text = "(" }, { @@ -59,6 +66,19 @@ SMODS.Joker { }, calc_function = function(card) + local count = 0 + if G.play then + local text, _, scoring_hand = JokerDisplay.evaluate_hand() + if text ~= 'Unknown' then + for _, scoring_card in pairs(scoring_hand) do + if SMODS.has_enhancement(scoring_card, "m_mult") then + count = count + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + end + end + card.joker_display_values.count = count + card.joker_display_values.odds = localize { type = 'variable', key = 'jdis_odds', diff --git a/content/joker/card_sleeve.lua b/content/joker/card_sleeve.lua index 0fa904de..06cb7192 100644 --- a/content/joker/card_sleeve.lua +++ b/content/joker/card_sleeve.lua @@ -20,8 +20,8 @@ SMODS.Joker { if other_joker then -- Conditions from `Card:set_eternal` - local compat = other_joker.config.center.eternal_compat and not other_joker.ability.perishable and - not other_joker.ability.paperback_temporary + local compat = other_joker.config.center.eternal_compat and + not other_joker.ability.paperback_temporary local color = compat and G.C.GREEN or G.C.RED local text = compat and 'k_compatible' or 'k_incompatible' @@ -59,6 +59,11 @@ SMODS.Joker { if G.jokers.cards[i] == card then other_joker = G.jokers.cards[i + 1] end end if other_joker ~= nil then + if other_joker.ability.perishable then + other_joker.ability.perishable = nil + other_joker.ability.perish_tally = nil + SMODS.recalc_debuff(other_joker) + end other_joker:set_eternal(true) end end diff --git a/content/joker/champagne.lua b/content/joker/champagne.lua index 0b7897c6..3a74f91d 100644 --- a/content/joker/champagne.lua +++ b/content/joker/champagne.lua @@ -64,9 +64,6 @@ SMODS.Joker { { text = '+$', colour = G.C.MONEY }, { ref_table = 'card.joker_display_values', ref_value = 'money', colour = G.C.MONEY }, }, - -- text_confg = { - -- colour = G.C.MONEY - -- }, extra = { { @@ -104,7 +101,7 @@ SMODS.Joker { style_function = function(card, text, reminder_text, extra) if reminder_text and reminder_text.children[1] then reminder_text.children[1].config.colour = card.joker_display_values.active == localize('k_active') and - G.C.GREEN or G.C.UI.TEXT_INACTIVE + G.C.GREEN or G.C.UI.TEXT_INACTIVE end end } diff --git a/content/joker/chocolate_joker.lua b/content/joker/chocolate_joker.lua index c85981f5..58d8f628 100644 --- a/content/joker/chocolate_joker.lua +++ b/content/joker/chocolate_joker.lua @@ -32,5 +32,24 @@ SMODS.Joker { xchips = 1 + (#G.jokers.cards * card.ability.extra.a_xchips) } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "xchips", retrigger_type = "exp" } + }, + border_colour = G.C.CHIPS + } + }, + calc_function = function(card) + local xchips = 1 + if G.jokers then xchips = 1 + (#G.jokers.cards * card.ability.extra.a_xchips) end + card.joker_display_values.xchips = xchips + end + } + end, } diff --git a/content/joker/claw.lua b/content/joker/claw.lua index 20ea8058..4d200263 100644 --- a/content/joker/claw.lua +++ b/content/joker/claw.lua @@ -2,15 +2,16 @@ SMODS.Joker { key = "claw", config = { extra = { - mult = 0, + mult = 3, mult_inc = 2, - rank = "3" + rank = "3", + starting_mult = 3 } }, - rarity = 2, + rarity = 1, pos = { x = 10, y = 1 }, atlas = "jokers_atlas", - cost = 6, + cost = 3, blueprint_compat = true, eternal_compat = true, perishable_compat = true, @@ -21,6 +22,7 @@ SMODS.Joker { localize(card.ability.extra.rank, 'ranks'), card.ability.extra.mult_inc, card.ability.extra.mult, + card.ability.extra.starting_mult } } end, @@ -34,20 +36,50 @@ SMODS.Joker { card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_inc end - if mult ~= 0 then - return { - mult = mult - } - end + return { + mult = mult + } end end if context.end_of_round and not context.blueprint and context.main_eval then - card.ability.extra.mult = 0 + card.ability.extra.mult = card.ability.extra.starting_mult return { message = localize('k_reset') } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "localized_text" }, + { text = ")" }, + }, + calc_function = function(card) + local count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if PB_UTIL.is_rank(scoring_card, card.ability.extra.rank) then + count = count + + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + count = count * JokerDisplay.calculate_joker_triggers(card) + + card.joker_display_values.mult = + count * card.ability.extra.mult + + count * (count - 1) / 2 * card.ability.extra.mult_inc + + card.joker_display_values.localized_text = localize(card.ability.extra.rank, 'ranks') + end + } + end, } diff --git a/content/joker/clothespin.lua b/content/joker/clothespin.lua index bcdf477b..bf6e78e6 100644 --- a/content/joker/clothespin.lua +++ b/content/joker/clothespin.lua @@ -14,7 +14,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, paperback = { requires_paperclips = true }, diff --git a/content/joker/coffee.lua b/content/joker/coffee.lua index fe093486..885235bf 100644 --- a/content/joker/coffee.lua +++ b/content/joker/coffee.lua @@ -2,9 +2,9 @@ SMODS.Joker { key = "coffee", config = { extra = { - hand_size = 0, + hand_size = 1, increase = 1, - odds = 5 + odds = 6 } }, rarity = 2, @@ -15,6 +15,7 @@ SMODS.Joker { discovered = false, blueprint_compat = false, eternal_compat = false, + perishable_compat = false, soul_pos = nil, pools = { Food = true @@ -33,6 +34,14 @@ SMODS.Joker { } end, + add_to_deck = function(self, card, from_debuff) + G.hand:change_size(card.ability.extra.hand_size) + end, + + remove_from_deck = function(self, card, from_debuff) + G.hand:change_size(-card.ability.extra.hand_size) + end, + calculate = function(self, card, context) if context.blueprint then return end @@ -50,9 +59,6 @@ SMODS.Joker { if PB_UTIL.chance(card, 'coffee') then PB_UTIL.destroy_joker(card) - -- Revert all the hand size increase when eaten - G.hand:change_size(-card.ability.extra.hand_size) - return { message = localize('paperback_consumed_ex'), colour = G.C.MULT diff --git a/content/joker/collector.lua b/content/joker/collector.lua new file mode 100644 index 00000000..1c7d51f0 --- /dev/null +++ b/content/joker/collector.lua @@ -0,0 +1,60 @@ +SMODS.Joker { + key = "collector", + config = { + extra = { + money = 1 + } + }, + rarity = 2, + pos = { x = 21, y = 3 }, + atlas = "jokers_atlas", + cost = 7, + unlocked = true, + discovered = false, + blueprint_compat = false, + eternal_compat = true, + perishable_compat = true, + paperback = { + requires_enhancements = true + }, + enhancement_gate = 'm_paperback_sleeved', + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = G.P_CENTERS.m_paperback_sleeved + + local sleeves = 0 + + for _, v in ipairs(G.playing_cards or {}) do + if SMODS.has_enhancement(v, 'm_paperback_sleeved') then + sleeves = sleeves + 1 + end + end + + return { + vars = { + card.ability.extra.money, + localize { + type = 'name_text', + set = 'Enhanced', + key = 'm_paperback_sleeved' + }, + card.ability.extra.money * sleeves + } + } + end, + + calc_dollar_bonus = function(self, card) + local sleeves = 0 + + for _, v in ipairs(G.playing_cards) do + if SMODS.has_enhancement(v, 'm_paperback_sleeved') then + sleeves = sleeves + 1 + end + end + + + if sleeves > 0 then + return sleeves * card.ability.extra.money + end + end +} diff --git a/content/joker/cream_liqueur.lua b/content/joker/cream_liqueur.lua index 69ec4597..a52827cc 100644 --- a/content/joker/cream_liqueur.lua +++ b/content/joker/cream_liqueur.lua @@ -24,7 +24,8 @@ SMODS.Joker { return { vars = { card.ability.extra.money, - card.ability.extra.rounds + card.ability.extra.rounds, + card.ability.extra.rounds == 1 and "" or "s" } } end, diff --git a/content/joker/da_capo.lua b/content/joker/da_capo.lua index fba1cec0..41bd30a7 100644 --- a/content/joker/da_capo.lua +++ b/content/joker/da_capo.lua @@ -81,7 +81,20 @@ SMODS.Joker { colour = G.C.SUITS[G.GAME.paperback.da_capo_suit] or G.C.PAPERBACK_SOLEMN_WHITE } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "xmult", retrigger_type = "exp" } + } + } + } + } + end, } -- We hook into the vanilla function used to update the debuffed status of cards @@ -93,7 +106,7 @@ function Blind.debuff_card(self, card, from_blind) return ret end for k, v in ipairs(SMODS.find_card('j_paperback_da_capo')) do - if not card:is_suit(G.GAME.paperback.da_capo_suit) then + if card.playing_card and not card:is_suit(G.GAME.paperback.da_capo_suit, true) then card:set_debuff(true) if card.debuff then card.debuffed_by_blind = true end end diff --git a/content/joker/deadringer.lua b/content/joker/deadringer.lua index 1148d1df..a7be1a2d 100644 --- a/content/joker/deadringer.lua +++ b/content/joker/deadringer.lua @@ -10,7 +10,7 @@ SMODS.Joker { pools = { Music = true }, - rarity = 2, + rarity = 3, pos = { x = 4, y = 8 }, atlas = 'jokers_atlas', cost = 7, @@ -40,13 +40,13 @@ SMODS.Joker { joker_display_def = function(JokerDisplay) return { reminder_text = { - { text = '(', colour = G.C.UI.TEXT_INACTIVE }, + { text = '(', colour = G.C.UI.TEXT_INACTIVE }, { text = 'Ace', colour = G.C.IMPORTANT }, - { text = ', ', colour = G.C.UI.TEXT_INACTIVE }, - { text = '7', colour = G.C.IMPORTANT }, - { text = ', ', colour = G.C.UI.TEXT_INACTIVE }, - { text = '9', colour = G.C.IMPORTANT }, - { text = ')', colour = G.C.UI.TEXT_INACTIVE }, + { text = ', ', colour = G.C.UI.TEXT_INACTIVE }, + { text = '7', colour = G.C.IMPORTANT }, + { text = ', ', colour = G.C.UI.TEXT_INACTIVE }, + { text = '9', colour = G.C.IMPORTANT }, + { text = 'x2)', colour = G.C.UI.TEXT_INACTIVE }, }, } end, diff --git a/content/joker/der_fluschutze.lua b/content/joker/der_fluschutze.lua index 829595d5..89517095 100644 --- a/content/joker/der_fluschutze.lua +++ b/content/joker/der_fluschutze.lua @@ -13,7 +13,7 @@ SMODS.Joker { cost = 9, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, loc_vars = function(self, info_queue, card) return { @@ -52,5 +52,18 @@ SMODS.Joker { x_mult = card.ability.extra.x_mult, } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + } + end, } diff --git a/content/joker/derecho.lua b/content/joker/derecho.lua index 9cd5cc82..fcf0e4e4 100644 --- a/content/joker/derecho.lua +++ b/content/joker/derecho.lua @@ -30,19 +30,19 @@ SMODS.Joker { calculate = function(self, card, context) -- Upgrade the Joker when hand is played if context.before and context.main_eval and not context.blueprint then + local bad_suit = false for _, v in ipairs(context.scoring_hand) do - if not SMODS.has_any_suit(v) and PB_UTIL.is_suit(v, 'light') then - return - end + bad_suit = bad_suit or PB_UTIL.is_non_suit(v, 'dark') end + if not bad_suit then + card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_mod - card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_mod - - return { - message = localize('k_upgrade_ex'), - colour = G.C.MULT, - card = card - } + return { + message = localize('k_upgrade_ex'), + colour = G.C.MULT, + card = card + } + end end -- Give the xMult during play @@ -52,6 +52,18 @@ SMODS.Joker { card = card, } end - end + end, + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + } + end, } diff --git a/content/joker/determination.lua b/content/joker/determination.lua index 3ad6588f..c38fb75a 100644 --- a/content/joker/determination.lua +++ b/content/joker/determination.lua @@ -13,7 +13,7 @@ SMODS.Joker { discovered = false, blueprint_compat = false, eternal_compat = false, - perishable_compat = false, + perishable_compat = true, soul_pos = nil, loc_vars = function(self, info_queue, card) diff --git a/content/joker/deviled_egg.lua b/content/joker/deviled_egg.lua index cd98367a..a00a149a 100644 --- a/content/joker/deviled_egg.lua +++ b/content/joker/deviled_egg.lua @@ -54,5 +54,17 @@ SMODS.Joker { } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + reminder_text = { + { text = "(" }, + { ref_table = "card.ability.extra", ref_value = "rounds_left" }, + { text = "/" }, + { ref_table = "card.config.center.config.extra", ref_value = "rounds_left" }, + { text = ")" }, + }, + } + end, } diff --git a/content/joker/disco.lua b/content/joker/disco.lua new file mode 100644 index 00000000..40013b0d --- /dev/null +++ b/content/joker/disco.lua @@ -0,0 +1,37 @@ +SMODS.Joker { + key = "disco", + blueprint_compat = true, + rarity = 2, + cost = 7, + pos = { x = 20, y = 3 }, + atlas = "jokers_atlas", + perishable_compat = false, + config = { extra = { mult_mod = 2, dollars = 25, mult = 0 } }, + loc_vars = function(self, info_queue, card) + return { vars = { card.ability.extra.mult_mod, card.ability.extra.dollars, card.ability.extra.mult } } + end, + calculate = function(self, card, context) + if not context.blueprint and context.buying_card and to_big(G.GAME.dollars) <= to_big(card.ability.extra.dollars) and context.card ~= card then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_mod + return { + message = localize('k_upgrade_ex'), + colour = G.C.ORANGE + } + end + if context.joker_main then + return { + mult = card.ability.extra.mult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, +} diff --git a/content/joker/double_dutchman.lua b/content/joker/double_dutchman.lua index 87bd8454..7baf9cdc 100644 --- a/content/joker/double_dutchman.lua +++ b/content/joker/double_dutchman.lua @@ -67,21 +67,6 @@ SMODS.Joker { end }) end - - if PB_UTIL.chance(card, 'dd_edition_roll') and not v.edition then - local edition = poll_edition('dd_edition', nil, true, true) - - G.E_MANAGER:add_event(Event { - trigger = 'after', - delay = 0.5, - func = function() - v:set_edition(edition, true) - v:juice_up() - card:juice_up() - return true - end - }) - end end card.ability.extra.hands_left = card.ability.extra.hands_left - 1 @@ -91,7 +76,7 @@ SMODS.Joker { return { message = localize('paperback_consumed_ex'), - colour = G.C.MULT + colour = G.C.RED } end end diff --git a/content/joker/emergency_broadcast.lua b/content/joker/emergency_broadcast.lua index bac73051..3188fe24 100644 --- a/content/joker/emergency_broadcast.lua +++ b/content/joker/emergency_broadcast.lua @@ -37,5 +37,32 @@ SMODS.Joker { end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+", colour = G.C.CHIPS }, + { ref_table = "card.joker_display_values", ref_value = "chips", colour = G.C.CHIPS, retrigger_type = "mult" }, + { text = " +", colour = G.C.MULT }, + { ref_table = "card.joker_display_values", ref_value = "mult", colour = G.C.MULT, retrigger_type = "mult" } + }, + reminder_text = { + { text = "(5,8)" } + }, + calc_function = function(card) + local chips, mult = 0, 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:get_id() == 5 or scoring_card:get_id() == 8 then + local retriggers = JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + chips = chips + card.ability.extra.a_chips * retriggers + mult = mult + card.ability.extra.a_mult * retriggers + end + end + card.joker_display_values.chips = chips + card.joker_display_values.mult = mult + end + } + end, } diff --git a/content/joker/epic_sauce.lua b/content/joker/epic_sauce.lua index 3bde8bed..7d40208c 100644 --- a/content/joker/epic_sauce.lua +++ b/content/joker/epic_sauce.lua @@ -50,10 +50,23 @@ SMODS.Joker { return { message = localize('paperback_too_hot_ex'), - colour = G.C.MULT + colour = G.C.RED } end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + } + end, } diff --git a/content/joker/eyelander.lua b/content/joker/eyelander.lua new file mode 100644 index 00000000..a22dd650 --- /dev/null +++ b/content/joker/eyelander.lua @@ -0,0 +1,71 @@ +SMODS.Joker { + key = "eyelander", + config = { + extra = { + heads = 0, + heads_req = 9 + } + }, + rarity = 3, + pos = { x = 10, y = 0 }, + atlas = 'jokers_atlas', + cost = 8, + unlocked = true, + discovered = false, + blueprint_compat = false, + eternal_compat = false, + perishable_compat = true, + loc_vars = function(self, info_queue, card) + return { + vars = { card.ability.extra.heads_req, card.ability.extra.heads } + } + end, + + calculate = function(self, card, context) + if context.destroy_card and context.cardarea == G.play then + if context.destroy_card:is_face() then + card.ability.extra.heads = card.ability.extra.heads + 1 + if card.ability.extra.heads < card.ability.extra.heads_req then + return { + remove = true, + --[[ If a message is decided upon + message = localize(), + colour = G.C.RED + ]] + } + else + juice_card_until(card, function() return true end, true) + return { + remove = true, + message = localize('k_active_ex'), + colour = G.C.ORANGE + } + end + end + end + + if context.selling_self and card.ability.extra.heads >= card.ability.extra.heads_req then + local editionless_jokers = SMODS.Edition:get_edition_cards(G.jokers, true) + -- this is literally just ectoplasm except we + -- remove this joker from the available jokers to negative + for i, v in ipairs(editionless_jokers) do + if v == card then + table.remove(editionless_jokers, i) + break + end + end + if next(editionless_jokers) then + G.E_MANAGER:add_event(Event({ + trigger = 'immediate', + delay = 0.4, + func = function() + local eligible_card = pseudorandom_element(editionless_jokers, 'THERE CAN ONLY BE ONE, EYE') + eligible_card:set_edition({ negative = true }) + eligible_card:juice_up(0.3, 0.5) + return true + end + })) + end + end + end +} diff --git a/content/joker/find_jimbo.lua b/content/joker/find_jimbo.lua index 0a01f671..3e22db6c 100644 --- a/content/joker/find_jimbo.lua +++ b/content/joker/find_jimbo.lua @@ -51,7 +51,42 @@ SMODS.Joker { if not context.blueprint and context.end_of_round and context.main_eval then PB_UTIL.reset_find_jimbo(card) end - end + end, + + -- Adapted from JokerDisplay's Idol + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+$" }, + { ref_table = "card.joker_display_values", ref_value = "dollars" }, + }, + text_config = { colour = G.C.GOLD }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "find_jimbo_card" }, + { text = ")" }, + }, + calc_function = function(card) + local count = 0 + local text, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, c in pairs(scoring_hand) do + if c:is_suit(card.ability.extra.suit) and PB_UTIL.is_rank(c, card.ability.extra.rank) then + count = count + JokerDisplay.calculate_card_triggers(c, scoring_hand) + end + end + card.joker_display_values.dollars = card.ability.extra.money * count + card.joker_display_values.find_jimbo_card = localize { + type = 'variable', key = "jdis_rank_of_suit", + vars = { localize(card.ability.extra.rank, 'ranks'), localize(card.ability.extra.suit, 'suits_plural'), } } + end, + style_function = function(card, text, reminder_text, extra) + if reminder_text and reminder_text.children[2] then + reminder_text.children[2].config.colour = lighten(G.C.SUITS[card.ability.extra.suit], 0.35) + end + return false + end + } + end, } function PB_UTIL.reset_find_jimbo(card) diff --git a/content/joker/fodder.lua b/content/joker/fodder.lua new file mode 100644 index 00000000..a4d88415 --- /dev/null +++ b/content/joker/fodder.lua @@ -0,0 +1,39 @@ +SMODS.Joker { + key = "fodder", + rarity = 1, + pos = { x = 12, y = 5 }, + atlas = "jokers_atlas", + cost = 4, + blueprint_compat = false, + eternal_compat = false, + perishable_compat = true, + paperback = { + requires_ego_gifts = true + }, + + in_pool = function(self, args) + for _, v in ipairs(G.consumeables or {}) do + if PB_UTIL.is_ego_gift(v) then return true end + end + end, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = SMODS.Stickers['paperback_corroded']:info_queue_entry() + end, + + calculate = function(self, card, context) + if context.selling_self and not context.blueprint then + local gift = nil + for i = 1, #G.consumeables.cards do + if G.consumeables.cards[i].ability.sin and not G.consumeables.cards[i].ability.paperback_corroded + then + gift = G.consumeables.cards[i] + end + end + if gift then + gift:add_sticker('paperback_corroded', true) + PB_UTIL.set_base_sell_value(gift, 0) + end + end + end +} diff --git a/content/joker/forlorn.lua b/content/joker/forlorn.lua index 5341b5ca..c45a04cf 100644 --- a/content/joker/forlorn.lua +++ b/content/joker/forlorn.lua @@ -28,20 +28,22 @@ SMODS.Joker { calculate = function(self, card, context) if context.after then - local destroy = true - -- Check scoring hand for only Spades + local bad_suit = false + local spade = false + -- Check scoring hand for only Spades/suitless, at least 1 Spade/Wild for _, v in ipairs(context.scoring_hand) do - if not v:is_suit(card.ability.extra.suit) then - destroy = false - end + bad_suit = bad_suit or PB_UTIL.is_non_suit(v, 'Spades') + spade = spade or v:is_suit('Spades') end - if destroy then + if not bad_suit and spade then local target = pseudorandom_element(G.hand.cards, pseudoseed('forlorn')) - SMODS.destroy_cards({ target }) - return { - message = localize('paperback_forlorn_destruction'), - colour = G.C.FILTER - } + if target then + SMODS.destroy_cards({ target }) + return { + message = localize('paperback_forlorn_destruction'), + colour = G.C.FILTER + } + end end end end diff --git a/content/joker/fraudulent_joker.lua b/content/joker/fraudulent_joker.lua index bd3e67e9..eaa9f072 100644 --- a/content/joker/fraudulent_joker.lua +++ b/content/joker/fraudulent_joker.lua @@ -25,5 +25,40 @@ SMODS.Joker { card.ability.extra.s_mult, } } - end + end, + + -- Copied from JokerDisplay + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { + ref_table = "card.joker_display_values", + ref_value = "localized_text", + colour = lighten(loc_colour(G.P_CENTERS["j_paperback_fraudulent_joker"].config.extra.suit:lower()), 0.35) + }, + { text = ")" }, + }, + calc_function = function(card) + local mult = 0 + local text, _, scoring_hand = JokerDisplay.evaluate_hand() + if text ~= 'Unknown' then + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:is_suit(card.ability.extra.suit) then + mult = mult + + card.ability.extra.s_mult * + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + end + card.joker_display_values.mult = mult + card.joker_display_values.localized_text = localize(card.ability.extra.suit, 'suits_plural') + end + } + end, } diff --git a/content/joker/full_moon.lua b/content/joker/full_moon.lua index ee7bcf6b..9da50c18 100644 --- a/content/joker/full_moon.lua +++ b/content/joker/full_moon.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'full_moon', config = { extra = { - odds = 3 + odds = 2 } }, rarity = 2, @@ -59,5 +59,24 @@ SMODS.Joker { return nil, true end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + extra = { + { + { text = '(' }, + { ref_table = 'card.joker_display_values', ref_value = 'odds' }, + { text = ')' }, + }, + }, + extra_config = { + colour = G.C.GREEN, + scale = 0.3, + }, + calc_function = function(card) + card.joker_display_values.odds = localize { type = 'variable', key = "jdis_odds", vars = { PB_UTIL.chance_vars(card) } } + end + } + end, } diff --git a/content/joker/furioso.lua b/content/joker/furioso.lua index e0577d98..10a74970 100644 --- a/content/joker/furioso.lua +++ b/content/joker/furioso.lua @@ -4,7 +4,7 @@ SMODS.Joker { extra = { x_mult_mod = 0.2, x_mult = 1, - ranks = {} + ranks = {}, } }, rarity = 2, @@ -20,7 +20,20 @@ SMODS.Joker { loc_vars = function(self, info_queue, card) local ranks_played = "" - for k, v in pairs(card.ability.extra.ranks) do + if not card.ability.extra.ranks_sorted then + card.ability.extra.ranks_sorted = {} + for _, v in pairs(card.ability.extra.ranks) do + table.insert(card.ability.extra.ranks_sorted, v) + end + + table.sort( + card.ability.extra.ranks_sorted, + function(a, b) + return SMODS.Ranks[a].sort_nominal < SMODS.Ranks[b].sort_nominal + end + ) + end + for k, v in ipairs(card.ability.extra.ranks_sorted) do ranks_played = ranks_played .. " " .. localize(v, 'ranks') end @@ -46,6 +59,8 @@ SMODS.Joker { if rank and not card.ability.extra.ranks[rank] then card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_mod card.ability.extra.ranks[rank] = context.other_card.base.value + -- recalc ranks_sorted + card.ability.extra.ranks_sorted = nil return { extra = { focus = card, message = localize('k_upgrade_ex'), colour = G.C.MULT }, @@ -66,6 +81,7 @@ SMODS.Joker { -- If boss blind defeated, reset all rank flags and reset x_mult if context.end_of_round and context.main_eval and G.GAME.blind.boss and not context.blueprint then card.ability.extra.ranks = {} + card.ability.extra.ranks_sorted = {} card.ability.extra.x_mult = 1 return { @@ -73,5 +89,33 @@ SMODS.Joker { colour = G.C.RED } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + local new_ranks = {} + local new_ranks_count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in ipairs(scoring_hand) do + if not scoring_card.debuff then + local rank = not SMODS.has_no_rank(scoring_card) and scoring_card:get_id() + if rank and not card.ability.extra.ranks[rank] and not new_ranks[rank] then + new_ranks[rank] = true + new_ranks_count = new_ranks_count + 1 + end + end + end + card.joker_display_values.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_mod * new_ranks_count + end, + } + end, } diff --git a/content/joker/gambit.lua b/content/joker/gambit.lua index e883134b..d7266726 100644 --- a/content/joker/gambit.lua +++ b/content/joker/gambit.lua @@ -3,7 +3,8 @@ SMODS.Joker { config = { extra = { suit = 'paperback_Crowns', - triggered = false + triggered = false, + chip_mult = 2 } }, rarity = 2, @@ -30,14 +31,16 @@ SMODS.Joker { calculate = function(self, card, context) if context.destroy_card and context.cardarea == G.hand and not card.ability.extra.triggered then - if not context.destroy_card:is_suit(card.ability.extra.suit) then + if not context.destroy_card:is_suit(card.ability.extra.suit, false, true) then for _, v in ipairs(context.scoring_hand) do if v:is_suit(card.ability.extra.suit) then + -- TODO if first crown debuffed, should say "Debuffed" if not context.blueprint then card.ability.extra.triggered = true end - v.ability.perma_bonus = (v.ability.perma_bonus or 0) + context.destroy_card:get_chip_bonus() + v.ability.perma_bonus = (v.ability.perma_bonus or 0) + + (context.destroy_card:get_chip_bonus() * card.ability.extra.chip_mult) return { remove = true, diff --git a/content/joker/ghost_cola.lua b/content/joker/ghost_cola.lua index 4bfa6157..bcb63283 100644 --- a/content/joker/ghost_cola.lua +++ b/content/joker/ghost_cola.lua @@ -1,7 +1,7 @@ SMODS.Joker { key = 'ghost_cola', config = {}, - rarity = 3, + rarity = 2, pos = { x = 5, y = 1 }, atlas = 'jokers_atlas', cost = 6, diff --git a/content/joker/giga_size.lua b/content/joker/giga_size.lua index 74654d8a..2fa216c0 100644 --- a/content/joker/giga_size.lua +++ b/content/joker/giga_size.lua @@ -9,13 +9,13 @@ SMODS.Joker { blueprint_compat = true, eternal_compat = true, perishable_compat = true, - config = { extra = { xmult = 0, xmult_mod = 1 } }, + config = { extra = { xmult = 1, xmult_mod = 1 } }, soul_pos = nil, loc_vars = function(self, info_queue, card) return { vars = { - card.ability.extra.xmult, + card.ability.extra.xmult + card.ability.extra.xmult_mod, card.ability.extra.xmult_mod } } @@ -33,10 +33,26 @@ SMODS.Joker { end if not context.blueprint and context.end_of_round and context.cardarea == G.jokers then - card.ability.extra.xmult = 0 + card.ability.extra.xmult = 1 return { message = localize('k_reset') } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "xmult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + card.joker_display_values.xmult = card.ability.extra.xmult + card.ability.extra.xmult_mod + end + } + end, } diff --git a/content/joker/grand_strategy.lua b/content/joker/grand_strategy.lua index b20a7bf7..4f59dde2 100644 --- a/content/joker/grand_strategy.lua +++ b/content/joker/grand_strategy.lua @@ -18,7 +18,7 @@ SMODS.Joker { soul_pos = nil, loc_vars = function(self, info_queue, card) - local unique_specials = PB_UTIL.special_cards_in_deck() + local unique_specials = PB_UTIL.special_cards_in_deck(true, false) return { vars = { @@ -31,7 +31,7 @@ SMODS.Joker { calculate = function(self, card, context) if context.joker_main then - if PB_UTIL.special_cards_in_deck() >= card.ability.extra.card_modifiers_required then + if PB_UTIL.special_cards_in_deck(true, false) >= card.ability.extra.card_modifiers_required then return { x_mult = card.ability.extra.xMult, card = card @@ -39,39 +39,30 @@ SMODS.Joker { end end end, -} - --- Returns a table of all the unique special effects in the deck -PB_UTIL.special_cards_in_deck = function() - local enhancements, seals = {}, {} - - if G.playing_cards then - for _, v in pairs(G.playing_cards) do - -- Check for an enhancement - for k, _ in pairs(SMODS.get_enhancements(v)) do - PB_UTIL.add_unique_value(enhancements, k) - end - -- Check for a seal - if v.Mid.seal then - PB_UTIL.add_unique_value(seals, v.Mid.seal) + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "unique_specials" }, + { text = "/" }, + { ref_table = "card.ability.extra", ref_value = "card_modifiers_required" }, + { text = ")" }, + }, + calc_function = function(card) + card.joker_display_values.unique_specials = PB_UTIL.special_cards_in_deck(true, false) + card.joker_display_values.x_mult = + card.joker_display_values.unique_specials >= card.ability.extra.card_modifiers_required + and card.ability.extra.xMult or 1 end - end - end - - local total = - (enhancements and #enhancements or 0) - + (seals and #seals or 0) - - return total -end - -PB_UTIL.add_unique_value = function(tbl, value) - for _, v in pairs(tbl) do - if v == value then - return - end - end - - table.insert(tbl, value) -end + } + end, +} diff --git a/content/joker/great_wave.lua b/content/joker/great_wave.lua index 5fd8dec5..75317577 100644 --- a/content/joker/great_wave.lua +++ b/content/joker/great_wave.lua @@ -14,13 +14,29 @@ SMODS.Joker { if not card.debuff then if context.repetition and context.cardarea == G.play then if context.other_card == context.scoring_hand[#context.scoring_hand] then - return { - message = localize('k_again_ex'), - repetitions = #context.scoring_hand, - card = card - } + if #context.scoring_hand > 1 then + return { + message = localize('k_again_ex'), + repetitions = #context.scoring_hand - 1, + card = card + } + end end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + retrigger_function = function(playing_card, scoring_hand, held_in_hand, joker_card) + if held_in_hand then return 0 end + if playing_card == JokerDisplay.calculate_rightmost_card(scoring_hand) then + if #scoring_hand > 1 then + return (#scoring_hand - 1) * JokerDisplay.calculate_joker_triggers(joker_card) + end + end + return 0 + end + } + end, } diff --git a/content/joker/greeting_card.lua b/content/joker/greeting_card.lua new file mode 100644 index 00000000..891a3355 --- /dev/null +++ b/content/joker/greeting_card.lua @@ -0,0 +1,52 @@ +SMODS.Joker { + key = "greeting_card", + config = { + extra = { + enhancement = "m_paperback_wrapped", + a_value = 2, + } + }, + rarity = 1, + pos = { x = 21, y = 6 }, + atlas = "jokers_atlas", + cost = 4, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + soul_pos = nil, + paperback = { + requires_enhancements = true + }, + enhancement_gate = 'm_paperback_wrapped', + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.extra.enhancement] + + return { + vars = { + card.ability.extra.a_value, + localize { + type = 'name_text', + set = 'Enhanced', + key = card.ability.extra.enhancement + }, + } + } + end, + + calculate = function(self, card, context) + if context.individual and context.cardarea == G.play and not context.blueprint then + if SMODS.has_enhancement(context.other_card, card.ability.extra.enhancement) then + PB_UTIL.modify_sell_value(card, card.ability.extra.a_value) + + return { + focus = card, + message = localize('k_val_up'), + colour = G.C.MONEY + } + end + end + end +} diff --git a/content/joker/guns_blazin.lua b/content/joker/guns_blazin.lua new file mode 100644 index 00000000..cd881b2a --- /dev/null +++ b/content/joker/guns_blazin.lua @@ -0,0 +1,66 @@ +SMODS.Joker { -- Guns Blazin' + key = "guns_blazin", + config = { + extra = { + xmult = 1.5, + } + }, + pos = { + x = 15, + y = 4 + }, + cost = 8, + rarity = 2, + blueprint_compat = true, + eternal_compat = true, + unlocked = true, + discovered = false, + atlas = 'jokers_atlas', + loc_vars = function(self, info_queue, card) + return { vars = { card.ability.extra.xmult } } + end, + + calculate = function(self, card, context) + if context.individual and context.cardarea == G.play then + if context.other_card:get_id() == 14 then + return { + x_mult = card.ability.extra.xmult + } + end + end + end, + + -- Taken from JokerDisplay's Triboulet + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "localized_text", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + local count = 0 + local text, _, scoring_hand = JokerDisplay.evaluate_hand() + if text ~= 'Unknown' then + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:get_id() == 14 then + count = count + + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + end + card.joker_display_values.x_mult = card.ability.extra.xmult ^ count + card.joker_display_values.localized_text = localize("Ace", "ranks") + end + } + end, + +} diff --git a/content/joker/heretical_joker.lua b/content/joker/heretical_joker.lua index 4118775e..8b4e47d4 100644 --- a/content/joker/heretical_joker.lua +++ b/content/joker/heretical_joker.lua @@ -25,5 +25,40 @@ SMODS.Joker { card.ability.extra.s_mult, } } - end + end, + + -- Copied from JokerDisplay + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { + ref_table = "card.joker_display_values", + ref_value = "localized_text", + colour = lighten(loc_colour(G.P_CENTERS["j_paperback_heretical_joker"].config.extra.suit:lower()), 0.35) + }, + { text = ")" }, + }, + calc_function = function(card) + local mult = 0 + local text, _, scoring_hand = JokerDisplay.evaluate_hand() + if text ~= 'Unknown' then + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:is_suit(card.ability.extra.suit) then + mult = mult + + card.ability.extra.s_mult * + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + end + card.joker_display_values.mult = mult + card.joker_display_values.localized_text = localize(card.ability.extra.suit, 'suits_plural') + end + } + end, } diff --git a/content/joker/high_speed_rail.lua b/content/joker/high_speed_rail.lua index b1658403..6c9204f9 100644 --- a/content/joker/high_speed_rail.lua +++ b/content/joker/high_speed_rail.lua @@ -68,5 +68,15 @@ SMODS.Joker { mult = card.ability.extra.mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } diff --git a/content/joker/hole_in_one.lua b/content/joker/hole_in_one.lua index 78145009..ce6807ea 100644 --- a/content/joker/hole_in_one.lua +++ b/content/joker/hole_in_one.lua @@ -25,7 +25,7 @@ SMODS.Joker { calculate = function(self, card, context) -- Double all sell values at end of round and if hands played == 1 if context.end_of_round and context.main_eval and not context.blueprint then - if G.GAME.current_round.hands_played == 1 then + if G.GAME.current_round.hands_played == 0 or 1 then -- Double all Joker sell values for _, v in ipairs(G.jokers.cards) do PB_UTIL.modify_sell_value(v, math.min(v.sell_cost, card.ability.extra.money_max)) diff --git a/content/joker/ice_cube.lua b/content/joker/ice_cube.lua index 96824844..a9075287 100644 --- a/content/joker/ice_cube.lua +++ b/content/joker/ice_cube.lua @@ -2,8 +2,7 @@ SMODS.Joker { key = "ice_cube", config = { extra = { - x_mult_mod = 1, - rounds_left = 4, + hands = 1, } }, rarity = 1, @@ -21,37 +20,29 @@ SMODS.Joker { loc_vars = function(self, info_queue, card) return { vars = { - card.ability.extra.x_mult_mod, - card.ability.extra.rounds_left, - (#PB_UTIL.get_owned_food() + (card.area ~= G.jokers and 1 or 0)) * card.ability.extra.x_mult_mod + card.ability.extra.hands, } } end, calculate = function(self, card, context) - if context.joker_main then - local x_mult = #PB_UTIL.get_owned_food() * card.ability.extra.x_mult_mod - - if x_mult > 1 then - return { - x_mult = x_mult - } - end + if context.setting_blind then + ease_hands_played(card.ability.extra.hands) + return { + message = localize { + type = 'variable', + key = 'a_hands', + vars = { card.ability.extra.hands } + }, + colour = G.C.BLUE + } end - -- At end of round decrease the amount of rounds left, destroying - -- itself if it ever goes below 1 - if context.final_scoring_step and (hand_chips * mult > G.GAME.blind.chips) and not context.blueprint then - G.E_MANAGER:add_event(Event { - trigger = 'after', - delay = 0.5, - func = function() - PB_UTIL.destroy_joker(card) - return true - end - }) + if context.after and SMODS.last_hand_oneshot and not context.blueprint then + PB_UTIL.destroy_joker(card) return { - message = localize('paperback_melted_ex') + message = localize('paperback_melted_ex'), + colour = G.C.BLUE } end end diff --git a/content/joker/insurance_policy.lua b/content/joker/insurance_policy.lua new file mode 100644 index 00000000..64ff4e5d --- /dev/null +++ b/content/joker/insurance_policy.lua @@ -0,0 +1,72 @@ +SMODS.Joker { + key = 'insurance_policy', + config = { + extra = { + a_mult = 8, + } + }, + rarity = 2, + pos = { x = 19, y = 7 }, + atlas = "jokers_atlas", + cost = 6, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + + + loc_vars = function(self, info_queue, card) + -- a reference to nothing in particular + local worker_tally = 0 + if G.playing_cards then + for k, v in pairs(G.playing_cards) do + -- Checks both in case a card counts as both a King and a Jack + if PB_UTIL.is_rank(v, 11) then worker_tally = worker_tally + 1 end + if PB_UTIL.is_rank(v, 13) then worker_tally = worker_tally - 1 end + end + end + return { + vars = { + card.ability.extra.a_mult, + PB_UTIL.force_signed(card.ability.extra.a_mult * worker_tally) + } + } + end, + + calculate = function(self, card, context) + if context.joker_main then + local worker_tally = 0 + for k, v in pairs(G.playing_cards) do + -- Checks both in case a card counts as both a King and a Jack + if PB_UTIL.is_rank(v, 11) then worker_tally = worker_tally + 1 end + if PB_UTIL.is_rank(v, 13) then worker_tally = worker_tally - 1 end + end + + return { + mult = card.ability.extra.a_mult * worker_tally, + card = card + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + calc_function = function(card) + local worker_tally = 0 + if G.playing_cards then + for k, v in pairs(G.playing_cards) do + -- Checks both in case a card counts as both a King and a Jack + if PB_UTIL.is_rank(v, 11) then worker_tally = worker_tally + 1 end + if PB_UTIL.is_rank(v, 13) then worker_tally = worker_tally - 1 end + end + end + card.joker_display_values.mult = PB_UTIL.force_signed(card.ability.extra.a_mult * worker_tally) + end + } + end, +} diff --git a/content/joker/jester_of_nihil.lua b/content/joker/jester_of_nihil.lua index f8789e58..075b4869 100644 --- a/content/joker/jester_of_nihil.lua +++ b/content/joker/jester_of_nihil.lua @@ -18,30 +18,7 @@ SMODS.Joker { soul_pos = nil, set_ability = function(self, card, initial, delay_sprites) - if G.STAGE == G.STAGES.RUN then - -- When first created, check if the player already owns this joker - local others = SMODS.find_card('j_paperback_jester_of_nihil') - - if #others > 0 then - -- If they do, copy the suit of the other joker to this new one - card.ability.extra.suit = others[1].ability.extra.suit - else - -- If they do not, select a random suit to debuff - local cards = {} - - for k, v in ipairs(G.playing_cards) do - if not SMODS.has_no_suit(v) then - cards[#cards + 1] = v - end - end - - local selected = pseudorandom_element(cards, pseudoseed('jester_of_nihil')) - - if selected then - card.ability.extra.suit = selected.base.suit - end - end - end + card.ability.extra.suit = G.GAME.paperback.last_scored_suit end, add_to_deck = function(self, card, from_debuff) @@ -85,23 +62,10 @@ SMODS.Joker { end, calculate = function(self, card, context) - -- If possible, swap suits after a hand is played if not context.blueprint and context.after and context.cardarea == G.jokers then - local last_scored = nil - - -- Only consider the last card with a suit - for i = #context.scoring_hand, 1, -1 do - local c = context.scoring_hand[i] - if not SMODS.has_no_suit(c) then - last_scored = c - break - end - end - -- Only update the suit if it's a different suit - if last_scored and last_scored.base.suit ~= card.ability.extra.suit then - card.ability.extra.suit = last_scored.base.suit - + if G.GAME.paperback.last_scored_suit ~= card.ability.extra.suit then + card.ability.extra.suit = G.GAME.paperback.last_scored_suit G.E_MANAGER:add_event(Event { func = function() -- Update the debuff of all playing cards when swapping suits @@ -125,7 +89,17 @@ SMODS.Joker { mult = card.ability.extra.mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } -- We hook into the vanilla function used to update the debuffed status of cards @@ -135,7 +109,7 @@ function Blind.debuff_card(self, card, from_blind) if card.area ~= G.jokers then for k, v in ipairs(SMODS.find_card('j_paperback_jester_of_nihil')) do - if card:is_suit(v.ability.extra.suit) then + if card:is_suit(v.ability.extra.suit, true) then card:set_debuff(true) if card.debuff then card.debuffed_by_blind = true end end diff --git a/content/joker/jestosterone.lua b/content/joker/jestosterone.lua index 22c07db9..98a50582 100644 --- a/content/joker/jestosterone.lua +++ b/content/joker/jestosterone.lua @@ -25,7 +25,7 @@ SMODS.Joker { end, calculate = function(self, card, context) - if context.final_scoring_step and context.cardarea == G.jokers and not context.blueprint then + if context.after and context.cardarea == G.jokers and not context.blueprint then local cracked_eggs = {} for _, v in ipairs(context.scoring_hand) do if v:get_id() == card.ability.extra.checked_rank then diff --git a/content/joker/jestrica.lua b/content/joker/jestrica.lua index 9dbc2167..6e1aecca 100644 --- a/content/joker/jestrica.lua +++ b/content/joker/jestrica.lua @@ -65,5 +65,15 @@ SMODS.Joker { -- Reset the scored flag after round ends card.ability.extra.scored = false end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } diff --git a/content/joker/jestrogen.lua b/content/joker/jestrogen.lua index af3a840d..42493e71 100644 --- a/content/joker/jestrogen.lua +++ b/content/joker/jestrogen.lua @@ -25,7 +25,7 @@ SMODS.Joker { } end, calculate = function(self, card, context) - if context.final_scoring_step and context.cardarea == G.jokers and not context.blueprint then + if context.after and context.cardarea == G.jokers and not context.blueprint then local cracked_eggs = {} for _, v in ipairs(context.scoring_hand) do if (v:get_id() == card.ability.extra.checked_rank1 or v:get_id() == card.ability.extra.checked_rank2) then diff --git a/content/joker/jimbo_adventure.lua b/content/joker/jimbo_adventure.lua index e4a735c6..ea7f6438 100644 --- a/content/joker/jimbo_adventure.lua +++ b/content/joker/jimbo_adventure.lua @@ -3,7 +3,7 @@ SMODS.Joker { rarity = 1, pos = { x = 1, y = 5 }, atlas = 'jokers_atlas', - cost = 6, + cost = 4, unlocked = true, discovered = false, blueprint_compat = true, diff --git a/content/joker/jimbocards.lua b/content/joker/jimbocards.lua new file mode 100644 index 00000000..a4151f4b --- /dev/null +++ b/content/joker/jimbocards.lua @@ -0,0 +1,116 @@ +SMODS.Joker { + key = "jimbocards", + config = { + extra = { + num_to_gen = 7, + hands_to_death = 3, + hands_reset = 3, + discount = 3, + } + }, + rarity = 3, + pos = { x = 8, y = 7 }, + atlas = "jokers_atlas", + cost = 14, + blueprint_compat = false, + eternal_compat = true, + perishable_compat = false, + paperback = { + permanently_eternal = true, + }, + + in_pool = function(self, args) + return args and args.source and (args.source == 'sho' or args.source == 'buf') + end, + + loc_vars = function(self, info_queue, card) + if card.area and card.area.config.collection then + info_queue[#info_queue+1] = { key = 'eternal', set = 'Other' } + end + return { + key = card.area and card.area.config.collection and 'j_paperback_jimbocards_collection' or nil, + vars = { + card.ability.extra.num_to_gen, + card.ability.extra.discount, + card.ability.extra.hands_reset, + card.ability.extra.hands_to_death, + } + } + end, + + set_ability = function(self, card, initial, delay_sprites) + card:add_sticker('eternal', true) + end, + + update = function(self, card, dt) + -- Remove eternal in collection (this is inefficient) + if card.ability.eternal and card.area and card.area.config.collection then + card.ability.eternal = nil + end + end, + + add_to_deck = function(self, card, from_debuff) + -- Apply discount + G.GAME.inflation = G.GAME.inflation - card.ability.extra.discount + -- Code taken from base game, search 'G.GAME.modifiers.inflation' + G.E_MANAGER:add_event(Event({ + func = function() + for k, v in pairs(G.I.CARD) do + if v.set_cost then v:set_cost() end + end + return true + end + })) + + -- Destroy all Jokers currently in possession (not itself) + G.E_MANAGER:add_event(Event { + trigger = 'immediate', + func = function() + for _, v in ipairs(G.jokers.cards) do + if v ~= card then + PB_UTIL.destroy_joker(v) + end + end + return true + end, + }) + + -- Generate the random negative Jokers + G.E_MANAGER:add_event(Event { + trigger = 'immediate', + func = function() + for i = 1, card.ability.extra.num_to_gen do + SMODS.add_card({ + set = 'Joker', + area = G.jokers, + edition = 'e_negative', + key_append = '_jimbocards', + }) + end + return true + end, + }) + end, + + remove_from_deck = function(self, card, from_debuff) + -- Remove discount + G.GAME.inflation = G.GAME.inflation + card.ability.extra.discount + G.E_MANAGER:add_event(Event({ + func = function() + for k, v in pairs(G.I.CARD) do + if v.set_cost then v:set_cost() end + end + return true + end + })) + end, + + calculate = function(self, card, context) + if context.before and not context.blueprint then + card.ability.extra.hands_to_death = math.max(card.ability.extra.hands_to_death - 1, 0) + end + if context.ante_change and context.ante_end and not context.blueprint then + card.ability.extra.hands_to_death = card.ability.extra.hands_reset + end + end +} diff --git a/content/joker/jimbos_inferno.lua b/content/joker/jimbos_inferno.lua new file mode 100644 index 00000000..499ae5a0 --- /dev/null +++ b/content/joker/jimbos_inferno.lua @@ -0,0 +1,52 @@ +SMODS.Joker { + key = 'jimbos_inferno', + config = { + extra = { + mult_per_dark = 2, + } + }, + rarity = 1, + pos = { x = 19, y = 8 }, + atlas = "jokers_atlas", + cost = 5, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = PB_UTIL.suit_tooltip('dark') + + local dark = 0 + if G.hand then + for k, v in pairs(G.hand.cards) do + if PB_UTIL.is_suit(v, 'dark', false, true) and not v.highlighted then dark = dark + 1 end + end + end + + return { + vars = { + card.ability.extra.mult_per_dark, + dark * card.ability.extra.mult_per_dark + } + } + end, + + calculate = function(self, card, context) + if context.individual and context.cardarea == G.play then + if context.other_card and PB_UTIL.is_suit(context.other_card, 'dark') then + local dark = 0 + + for k, v in pairs(G.hand.cards) do + if PB_UTIL.is_suit(v, 'dark', false, true) and not v.highlighted then dark = dark + 1 end + end + + return { + mult = dark * card.ability.extra.mult_per_dark, + } + end + end + end, +} diff --git a/content/joker/jimbos_joyous_joker_jamboree.lua b/content/joker/jimbos_joyous_joker_jamboree.lua index cf6e72ec..1689e8a9 100644 --- a/content/joker/jimbos_joyous_joker_jamboree.lua +++ b/content/joker/jimbos_joyous_joker_jamboree.lua @@ -58,7 +58,7 @@ SMODS.Joker { calculate = function(self, card, context) if context.individual and context.cardarea == G.play then - if G.GAME.paperback.jjjj_count % card.ability.extra.required == 0 and G.GAME.paperback.jjjj_count > 0 then + if G.GAME.paperback.jjjj_count % card.ability.extra.required == 0 then if PB_UTIL.try_spawn_card { set = 'paperback_minor_arcana', } then return { message = localize('paperback_plus_minor_arcana'), diff --git a/content/joker/joke_master.lua b/content/joker/joke_master.lua index f1e41f62..56ab5359 100644 --- a/content/joker/joke_master.lua +++ b/content/joker/joke_master.lua @@ -46,5 +46,24 @@ SMODS.Joker { mult = card.ability.extra.mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "joke_master_hand", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + card.joker_display_values.joke_master_hand = + localize(G.GAME.paperback.joke_master_hand, 'poker_hands') + end + } + end, } diff --git a/content/joker/joker_cd_i.lua b/content/joker/joker_cd_i.lua index 54cf3832..e19c8951 100644 --- a/content/joker/joker_cd_i.lua +++ b/content/joker/joker_cd_i.lua @@ -39,5 +39,27 @@ SMODS.Joker { end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult" }, + }, + text_config = { colour = G.C.SECONDARY_SET.Planet }, + extra = { + { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "odds" }, + { text = ")" }, + } + }, + extra_config = { colour = G.C.GREEN, scale = 0.3 }, + calc_function = function(card) + card.joker_display_values.count = #G.hand.highlighted == card.ability.extra.cards and 1 or 0 + card.joker_display_values.odds = localize { type = 'variable', key = "jdis_odds", vars = { PB_UTIL.chance_vars(card) } } + end + } + end, } diff --git a/content/joker/joker_cookie.lua b/content/joker/joker_cookie.lua index 9535addd..ad521fb1 100644 --- a/content/joker/joker_cookie.lua +++ b/content/joker/joker_cookie.lua @@ -3,7 +3,8 @@ SMODS.Joker { config = { extra = { dollar_bonus = 1, - dollar_gain = 1, + dollar_gain = 2, + dollar_max = 11, odds = 5 } }, @@ -27,6 +28,7 @@ SMODS.Joker { vars = { card.ability.extra.dollar_bonus, card.ability.extra.dollar_gain, + card.ability.extra.dollar_max, numerator, denominator } @@ -54,12 +56,14 @@ SMODS.Joker { -- Upgrade the Joker when the user cashes out if context.paperback and context.paperback.cashing_out then - card.ability.extra.dollar_bonus = card.ability.extra.dollar_bonus + card.ability.extra.dollar_gain + if card.ability.extra.dollar_bonus < card.ability.extra.dollar_max then + card.ability.extra.dollar_bonus = card.ability.extra.dollar_bonus + card.ability.extra.dollar_gain - return { - message = localize('k_upgrade_ex'), - colour = G.C.MONEY - } + return { + message = localize('k_upgrade_ex'), + colour = G.C.MONEY + } + end end end end, diff --git a/content/joker/joker_crossing.lua b/content/joker/joker_crossing.lua new file mode 100644 index 00000000..2c3191ac --- /dev/null +++ b/content/joker/joker_crossing.lua @@ -0,0 +1,45 @@ +SMODS.Joker { + key = "joker_crossing", + rarity = 2, + pos = { x = 12, y = 8 }, + atlas = "jokers_atlas", + cost = 8, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + config = { extra = { odds = 3 } }, + + loc_vars = function(self, info_queue, card) + local numerator, denominator = PB_UTIL.chance_vars(card) + + return { + vars = { + numerator, + denominator + } + } + end, + + calculate = function(self, card, context) + if context.repetition and (context.cardarea == G.play or context.cardarea == 'unscored') then + if next(SMODS.get_enhancements(context.other_card)) and PB_UTIL.chance(card, 'joker_crossing') then + return { + message = localize('k_again_ex'), + repetitions = 1, + } + end + end + if context.repetition and context.cardarea == G.hand then + if (next(context.card_effects[1]) or #context.card_effects > 1) then + if next(SMODS.get_enhancements(context.other_card)) and PB_UTIL.chance(card, 'joker_crossing') then + return { + message = localize('k_again_ex'), + repetitions = 1, + } + end + end + end + end +} diff --git a/content/joker/king_me.lua b/content/joker/king_me.lua index 9f9760f9..45478dec 100644 --- a/content/joker/king_me.lua +++ b/content/joker/king_me.lua @@ -34,7 +34,7 @@ SMODS.Joker { local cards = {} for _, v in ipairs(context.scoring_hand) do - if v:is_suit(card.ability.extra.suit) then + if v:is_suit(card.ability.extra.suit) and v:get_id() ~= 13 then cards[#cards + 1] = v end end diff --git a/content/joker/kintsugi_joker.lua b/content/joker/kintsugi_joker.lua index 661584e2..936ef15b 100644 --- a/content/joker/kintsugi_joker.lua +++ b/content/joker/kintsugi_joker.lua @@ -36,9 +36,7 @@ SMODS.Joker { end, add_to_deck = function(self, card, from_debuff) - if from_debuff then - G.GAME.paperback.ceramic_inc = G.GAME.paperback.ceramic_inc + card.ability.extra.total - end + G.GAME.paperback.ceramic_inc = G.GAME.paperback.ceramic_inc + card.ability.extra.total end, remove_from_deck = function(self, card, from_debuff) diff --git a/content/joker/legacy.lua b/content/joker/legacy.lua index 51be672e..fcb42cea 100644 --- a/content/joker/legacy.lua +++ b/content/joker/legacy.lua @@ -57,5 +57,15 @@ SMODS.Joker { mult = card.ability.extra.mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } diff --git a/content/joker/let_it_happen.lua b/content/joker/let_it_happen.lua index 4d5ca503..19e0f93e 100644 --- a/content/joker/let_it_happen.lua +++ b/content/joker/let_it_happen.lua @@ -57,6 +57,11 @@ SMODS.Joker { func = function() PB_UTIL.apply_plasma_effect(context.blueprint_card or card) table.insert(card.ability.extra.hands_played_this_ante, context.scoring_name) + table.sort(card.ability.extra.hands_played_this_ante, + function(a, b) + return SMODS.PokerHands[a].order > SMODS.PokerHands[b].order + end + ) end } end @@ -72,5 +77,33 @@ SMODS.Joker { colour = { 0.8, 0.45, 0.85, 1 } } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { ref_table = "card.joker_display_values", ref_value = "text" }, + }, + text_config = { colour = G.C.PURPLE }, + calc_function = function(card) + local scoring_name, _, _ = JokerDisplay.evaluate_hand() + card.joker_display_values.will_trigger = true + -- No trigger if hand has been played this ante + for i = 1, #card.ability.extra.hands_played_this_ante do + if scoring_name == card.ability.extra.hands_played_this_ante[i] then + card.joker_display_values.will_trigger = false + break + end + end + card.joker_display_values.text = card.joker_display_values.will_trigger and "Balance" or "-" + end, + style_function = function(card, text, reminder_text, extra) + if text and text.children[1] then + text.children[1].config.colour = card.joker_display_values.will_trigger and G.C.PURPLE or + G.C.UI.TEXT_INACTIVE + end + return false + end + } + end, } diff --git a/content/joker/lurid_joker.lua b/content/joker/lurid_joker.lua index c13db488..efbba657 100644 --- a/content/joker/lurid_joker.lua +++ b/content/joker/lurid_joker.lua @@ -24,6 +24,31 @@ if PB_UTIL.should_load_spectrum_items() then localize(card.ability.type, 'poker_hands') } } - end + end, + + -- Copied from JokerDisplay + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "localized_text", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + local chips = 0 + local _, poker_hands, _ = JokerDisplay.evaluate_hand() + if poker_hands[card.ability.type] and next(poker_hands[card.ability.type]) then + chips = card.ability.t_chips + end + card.joker_display_values.chips = chips + card.joker_display_values.localized_text = localize(card.ability.type, 'poker_hands') + end + } + end, } end diff --git a/content/joker/mandela_effect.lua b/content/joker/mandela_effect.lua new file mode 100644 index 00000000..50296145 --- /dev/null +++ b/content/joker/mandela_effect.lua @@ -0,0 +1,43 @@ +SMODS.Joker { + key = 'mandela_effect', + rarity = 1, + pos = { x = 20, y = 8 }, + atlas = 'jokers_atlas', + cost = 4, + unlocked = true, + discovered = false, + blueprint_compat = false, + eternal_compat = true, + + calculate = function(self, card, context) + if context.before and not context.blueprint then + -- find index of first scoring face + local idx + for i, c in ipairs(context.scoring_hand) do + if c:is_face(true) then + idx = i + break + end + end + if not idx then return end + + local first_face = context.scoring_hand[idx] + if not first_face.debuff then + local enhancement = SMODS.poll_enhancement { + key = 'mandela_effect_enh', + guaranteed = true + } + first_face:set_ability(enhancement, nil, true) + G.E_MANAGER:add_event(Event({ + func = function() + first_face:juice_up() + return true + end + })) + return { + message = localize('paperback_enhanced_ex'), + } + end + end + end, +} diff --git a/content/joker/manilla_folder.lua b/content/joker/manilla_folder.lua index 71f1a6c2..4d9bd621 100644 --- a/content/joker/manilla_folder.lua +++ b/content/joker/manilla_folder.lua @@ -59,5 +59,32 @@ SMODS.Joker { if amount > 0 then return amount * card.ability.extra.money end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+$" }, + { ref_table = "card.joker_display_values", ref_value = "dollars" }, + }, + text_config = { colour = G.C.GOLD }, + reminder_text = { + { ref_table = "card.joker_display_values", ref_value = "localized_text" }, + }, + calc_function = function(card) + local unique_clips = {} + local amount = 0 + + for _, v in ipairs(G.playing_cards or {}) do + local key = PB_UTIL.has_paperclip(v) + if key and not unique_clips[key] then + unique_clips[key] = true + amount = amount + 1 + end + end + card.joker_display_values.dollars = card.ability.extra.money * amount + card.joker_display_values.localized_text = "(" .. localize("k_round") .. ")" + end + } + end, } diff --git a/content/joker/marble_soda.lua b/content/joker/marble_soda.lua new file mode 100644 index 00000000..d0ab423e --- /dev/null +++ b/content/joker/marble_soda.lua @@ -0,0 +1,62 @@ +SMODS.Joker { + key = "marble_soda", + config = { + extra = { + enhancement = 'm_glass', + xmult = 1.5, + drank_after = 5 + } + }, + rarity = 2, + pos = { x = 18, y = 9 }, + atlas = "jokers_atlas", + cost = 6, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = false, + soul_pos = nil, + enhancement_gate = 'm_glass', + pools = { + Food = true + }, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.extra.enhancement] + + return { + vars = { + localize { + type = 'name_text', + set = 'Enhanced', + key = card.ability.extra.enhancement + }, + card.ability.extra.xmult, + card.ability.extra.drank_after, + card.ability.extra.drank_after == 1 and "" or "s", + card.ability.extra.drank_after == 1 and "is" or "are", + } + } + end, + + calculate = function(self, card, context) + if context.individual and context.cardarea == G.play then + if SMODS.has_enhancement(context.other_card, card.ability.extra.enhancement) then + return { + xmult = card.ability.extra.xmult, + } + end + end + + if not context.blueprint and context.remove_playing_cards and context.removed and #context.removed > 0 then + card.ability.extra.drank_after = math.max(0, card.ability.extra.drank_after - #context.removed) + if card.ability.extra.drank_after <= 0 then + PB_UTIL.destroy_joker(card) + return { + message = localize('k_drank_ex'), + colour = G.C.BLUE + } + end + end + end +} diff --git a/content/joker/master_plan.lua b/content/joker/master_plan.lua new file mode 100644 index 00000000..4f8bee83 --- /dev/null +++ b/content/joker/master_plan.lua @@ -0,0 +1,43 @@ +SMODS.Joker { + key = "master_plan", + rarity = 3, + pos = { x = 22, y = 4 }, + atlas = "jokers_atlas", + cost = 10, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + loc_vars = function(self, info_queue, card) + if card.area and card.area == G.jokers then + local other_joker + for i = 1, #G.jokers.cards do + if G.jokers.cards[i] == card then other_joker = G.jokers.cards[i - 1] end + end + local compatible = other_joker and other_joker ~= card and other_joker.config.center.blueprint_compat + main_end = { + { + n = G.UIT.C, + config = { align = "bm", minh = 0.4 }, + nodes = { + { + n = G.UIT.C, + config = { ref_table = card, align = "m", colour = compatible and mix_colours(G.C.GREEN, G.C.JOKER_GREY, 0.8) or mix_colours(G.C.RED, G.C.JOKER_GREY, 0.8), r = 0.05, padding = 0.06 }, + nodes = { + { n = G.UIT.T, config = { text = ' ' .. localize('k_' .. (compatible and 'compatible' or 'incompatible')) .. ' ', colour = G.C.UI.TEXT_LIGHT, scale = 0.32 * 0.8 } }, + } + } + } + } + } + return { main_end = main_end } + end + end, + + calculate = function(self, card, context) + local other_joker = nil + for i = 1, #G.jokers.cards do + if G.jokers.cards[i] == card then other_joker = G.jokers.cards[i - 1] end + end + return SMODS.blueprint_effect(card, other_joker, context) + end, +} diff --git a/content/joker/matcha.lua b/content/joker/matcha.lua index be8b2f4b..67a02dd0 100644 --- a/content/joker/matcha.lua +++ b/content/joker/matcha.lua @@ -15,7 +15,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = false, - perishable_compat = true, + perishable_compat = false, pools = { Food = true }, @@ -44,13 +44,13 @@ SMODS.Joker { } end - if not context.blueprint and context.discard then + if not context.blueprint and context.pre_discard and not context.hook then if PB_UTIL.chance(card, 'matcha') then PB_UTIL.destroy_joker(card) return { message = localize('paperback_consumed_ex'), - colour = G.C.MULT, + colour = G.C.RED, card = card } end @@ -61,5 +61,29 @@ SMODS.Joker { chips = card.ability.extra.chips } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + extra = { + { + { text = '(' }, + { ref_table = 'card.joker_display_values', ref_value = 'odds' }, + { text = ')' }, + }, + }, + extra_config = { + colour = G.C.GREEN, + scale = 0.3, + }, + calc_function = function(card) + card.joker_display_values.odds = localize { type = 'variable', key = 'jdis_odds', vars = { PB_UTIL.chance_vars(card) } } + end + } + end, } diff --git a/content/joker/mexican_train.lua b/content/joker/mexican_train.lua index 2c64c542..d1c97966 100644 --- a/content/joker/mexican_train.lua +++ b/content/joker/mexican_train.lua @@ -5,10 +5,10 @@ SMODS.Joker { dollars = 1, } }, - rarity = 2, + rarity = 1, pos = { x = 17, y = 10 }, atlas = "jokers_atlas", - cost = 8, + cost = 6, blueprint_compat = false, eternal_compat = true, perishable_compat = true, diff --git a/content/joker/milk_tea.lua b/content/joker/milk_tea.lua index 85dd96ca..69cdd2ee 100644 --- a/content/joker/milk_tea.lua +++ b/content/joker/milk_tea.lua @@ -28,45 +28,42 @@ SMODS.Joker { calculate = function(self, card, context) if context.joker_main then - local f_chips = math.floor(hand_chips * card.ability.extra.percent / 100) - local f_mult = math.floor(mult * card.ability.extra.percent / 100) - - hand_chips = mod_chips(hand_chips - f_chips) - mult = mod_mult(mult - f_mult) - - local total = f_chips + f_mult - hand_chips = mod_chips(math.floor(total / 2) + hand_chips) - mult = mod_mult(math.floor(total / 2) + mult) - - PB_UTIL.apply_plasma_effect(context.blueprint_card or card, true) - - -- Apply reduction if mult ended up greater than chips - if mult > hand_chips and not context.blueprint then - card.ability.extra.percent = card.ability.extra.percent - card.ability.extra.reduction + PB_UTIL.apply_plasma_effect(context.blueprint_card or card, false, card.ability.extra.percent / 100) + return nil, true + end - if card.ability.extra.percent <= 0 then - PB_UTIL.destroy_joker(card) + if context.final_scoring_step then + card.ability.extra.mult_gt_chip = mult > hand_chips + end - return { - message = localize('paperback_consumed_ex'), - colour = G.C.MULT - } - end + -- Apply reduction if final mult is greater than chips + if context.after and not context.blueprint and card.ability.extra.mult_gt_chip then + card.ability.extra.percent = card.ability.extra.percent - card.ability.extra.reduction + card.ability.extra.mult_gt_chip = false - G.E_MANAGER:add_event(Event { - delay = 0.4, - func = function() - SMODS.calculate_effect({ - message = localize('paperback_reduced_ex'), - colour = G.C.MULT - }, card) + if card.ability.extra.percent <= 0 then + PB_UTIL.destroy_joker(card) - return true - end - }) + return { + message = localize('paperback_consumed_ex'), + colour = G.C.MULT + } + else + return { + message = localize('paperback_reduced_ex'), + colour = G.C.MULT + } end - - return nil, true end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { ref_table = "card.ability.extra", ref_value = "percent" }, + { text = "%" }, + }, + text_config = { colour = G.C.PURPLE }, + } + end, } diff --git a/content/joker/mismatched_sock.lua b/content/joker/mismatched_sock.lua index ef2b45b6..279f97a5 100644 --- a/content/joker/mismatched_sock.lua +++ b/content/joker/mismatched_sock.lua @@ -4,7 +4,6 @@ SMODS.Joker { extra = { x_mult = 1, a_xmult = 0.1, - hand = 'Pair' } }, rarity = 2, @@ -21,21 +20,19 @@ SMODS.Joker { return { vars = { card.ability.extra.a_xmult, - localize(card.ability.extra.hand, 'poker_hands'), card.ability.extra.x_mult } } end, calculate = function(self, card, context) - -- Upgrade x mult if no pairs were played - if not context.blueprint and context.before and context.main_eval then - if not next(context.poker_hands[card.ability.extra.hand]) then + -- Upgrade x mult if discard contains only one card + if not context.blueprint and context.discard then + if #context.full_hand == 1 then card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.a_xmult - return { message = localize('k_upgrade_ex'), - colour = G.C.MULT + colour = G.C.ORANGE } end end @@ -46,5 +43,18 @@ SMODS.Joker { x_mult = card.ability.extra.x_mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + } + end, } diff --git a/content/joker/moribund.lua b/content/joker/moribund.lua index 0ef2ae89..f83a3b7f 100644 --- a/content/joker/moribund.lua +++ b/content/joker/moribund.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'moribund', config = { extra = { - a_mult = 7, + a_mult = 5, mult = 0, } }, @@ -29,9 +29,9 @@ SMODS.Joker { calculate = function(self, card, context) -- Prevent Blueprint or Brainstorm from copying these effects if not context.blueprint then - if context.end_of_round then + if context.end_of_round and context.main_eval then -- If blind not cleared, double current mult - if context.game_over then + if to_big(G.GAME.chips - G.GAME.blind.chips) < to_big(0) then card.ability.extra.mult = card.ability.extra.mult * 2 return { @@ -39,10 +39,8 @@ SMODS.Joker { colour = G.C.MULT, card = card } - end - - -- If blind cleared and 0 hands left, upgrade joker - if G.GAME.current_round.hands_left == 0 and context.main_eval then + elseif G.GAME.current_round.hands_left == 0 then + -- If blind cleared and 0 hands left, upgrade joker card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.a_mult return { @@ -62,5 +60,15 @@ SMODS.Joker { } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } diff --git a/content/joker/moving_out.lua b/content/joker/moving_out.lua new file mode 100644 index 00000000..49289af3 --- /dev/null +++ b/content/joker/moving_out.lua @@ -0,0 +1,72 @@ +SMODS.Joker { + key = "moving_out", + config = { + extra = { + a_mult = 4, + mult = 0, + } + }, + pools = { + Music = true + }, + rarity = 1, + pos = { x = 20, y = 10 }, + atlas = "jokers_atlas", + cost = 4, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.a_mult, + card.ability.extra.mult, + } + } + end, + + calculate = function(self, card, context) + if context.end_of_round and context.main_eval then + local other_played_count = 0 -- calculate highest played count for other hands + for k, v in pairs(G.GAME.hands) do + if v.visible and k ~= G.GAME.last_hand_played then + if v.played > other_played_count then + other_played_count = v.played + end + end + end + + if G.GAME.hands[G.GAME.last_hand_played].played > other_played_count then + -- If last hand played has a greater count than all others, it is most played. Exit + -- (Must be strictly bigger: this play incremented the count already) + return + end + + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.a_mult + return { + message = localize('k_upgrade_ex'), + card = card, + colour = G.C.MULT, + } + end + + if context.joker_main then + return { + mult = card.ability.extra.mult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, +} diff --git a/content/joker/nachos.lua b/content/joker/nachos.lua index a49df821..ff2b910b 100644 --- a/content/joker/nachos.lua +++ b/content/joker/nachos.lua @@ -52,7 +52,7 @@ SMODS.Joker { return { message = localize('k_eaten_ex'), - colour = G.C.FILTER, + colour = G.C.CHIPS, card = card } else @@ -68,5 +68,19 @@ SMODS.Joker { } end end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = 'X' }, + { ref_table = 'card.ability.extra', ref_value = 'X_chips' } + }, + border_colour = G.C.CHIPS + } + }, + } end } diff --git a/content/joker/ncj.lua b/content/joker/ncj.lua index 085218c0..bf695dac 100644 --- a/content/joker/ncj.lua +++ b/content/joker/ncj.lua @@ -49,5 +49,26 @@ SMODS.Joker { chips = math.max(0, sell_cost * card.ability.extra.scaling) } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + calc_function = function(card) + local sell_cost = 0 + if G.jokers then + for _, v in ipairs(G.jokers.cards) do + if v ~= card then + sell_cost = sell_cost + v.sell_cost + end + end + end + card.joker_display_values.chips = math.max(0, sell_cost * card.ability.extra.scaling) + end + } + end, } diff --git a/content/joker/nichola.lua b/content/joker/nichola.lua index 76ab3309..aa30e7ac 100644 --- a/content/joker/nichola.lua +++ b/content/joker/nichola.lua @@ -9,8 +9,9 @@ SMODS.Joker { eternal_compat = true, perishable_compat = true, + -- Also see SMODS.calculate_main_scoring hook calculate = function(self, card, context) - if context.final_scoring_step then + if context.paperback and context.paperback.nichola then local ctx = { cardarea = G.play, full_hand = G.play.cards, @@ -20,10 +21,18 @@ SMODS.Joker { } for _, v in ipairs(G.hand.cards) do - if v:can_calculate() and v:is_face() then + if v:can_calculate(true) and v:is_face(true) and v.debuff then + -- Copied from SMODS.calculate_main_scoring + G.GAME.blind.triggered = true + G.E_MANAGER:add_event(Event({ + trigger = 'immediate', + func = (function() SMODS.juice_up_blind();return true end) + })) + card_eval_status_text(v, 'debuff') + elseif v:can_calculate() and v:is_face() then SMODS.score_card(v, ctx) end end end end -} +} \ No newline at end of file diff --git a/content/joker/oracle.lua b/content/joker/oracle.lua index 5de1236f..bb3894ae 100644 --- a/content/joker/oracle.lua +++ b/content/joker/oracle.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = "oracle", config = { extra = { - Xchip_mod = 0.15, + Xchip_mod = 0.1, Xchip = 1 } }, @@ -39,9 +39,13 @@ SMODS.Joker { } end - if context.using_consumeable and context.consumeable.ability.set == 'paperback_minor_arcana' and G.GAME.consumeable_usage[context.consumeable.config.center_key].count == 1 then + if not context.blueprint and context.using_consumeable and context.consumeable.ability.set == 'paperback_minor_arcana' and G.GAME.consumeable_usage[context.consumeable.config.center_key].count == 1 then return { - message = localize('k_upgrade_ex') + message = localize { + type = 'variable', + key = 'a_xchips', + vars = { card.ability.extra.Xchip } + }, } end end, @@ -53,7 +57,8 @@ SMODS.Joker { border_nodes = { { text = 'X' }, { ref_table = 'card.ability.extra', ref_value = 'Xchip' } - } + }, + border_colour = G.C.CHIPS } }, } diff --git a/content/joker/paranoia.lua b/content/joker/paranoia.lua index 82addf3f..d471dd2f 100644 --- a/content/joker/paranoia.lua +++ b/content/joker/paranoia.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'paranoia', config = { extra = { - a_mult = 3 + a_mult = 2 } }, rarity = 3, @@ -29,20 +29,48 @@ SMODS.Joker { calculate = function(self, card, context) if context.individual and context.cardarea == G.play then - if PB_UTIL.is_suit(context.other_card, 'light') then + if PB_UTIL.is_suit(context.other_card, 'light') and (G.GAME.paperback.destroyed_dark_suits * card.ability.extra.a_mult ~= 0) then return { mult = G.GAME.paperback.destroyed_dark_suits * card.ability.extra.a_mult } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { + text = localize('paperback_light'), + colour = lighten(G.C.PAPERBACK_LIGHT_SUIT, 0.35) + }, + { text = ")" }, + }, + calc_function = function(card) + local count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if PB_UTIL.is_suit(scoring_card, 'light') then + count = count + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + card.joker_display_values.mult = G.GAME.paperback.destroyed_dark_suits * card.ability.extra.a_mult * count + end, + } + end, } local calc_context_ref = SMODS.calculate_context function SMODS.calculate_context(context, return_table) if context.remove_playing_cards then for _, v in ipairs(context.removed or {}) do - if PB_UTIL.is_suit(v, 'dark') then + if PB_UTIL.is_suit(v, 'dark', false, true) then G.GAME.paperback.destroyed_dark_suits = G.GAME.paperback.destroyed_dark_suits + 1 end end diff --git a/content/joker/pear.lua b/content/joker/pear.lua index 8a8f2452..23a06f7c 100644 --- a/content/joker/pear.lua +++ b/content/joker/pear.lua @@ -15,6 +15,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = false, + perishable_compat = false, pools = { Food = true }, @@ -65,5 +66,15 @@ SMODS.Joker { chips = card.ability.extra.chips } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + } + end, } diff --git a/content/joker/pedrillo.lua b/content/joker/pedrillo.lua index 29f70414..f3941774 100644 --- a/content/joker/pedrillo.lua +++ b/content/joker/pedrillo.lua @@ -18,17 +18,31 @@ SMODS.Joker { perishable_compat = true, calculate = function(self, card, context) - if context.before then - -- Check scoring hand for any Queen - for _, v in ipairs(context.scoring_hand) do - if PB_UTIL.is_rank(v, card.ability.extra.rank) then - -- Level up - return { - card = card, - level_up = true, - message = localize('k_level_up_ex') - } - end + if context.individual and context.cardarea == G.play then + -- Check if each card is a queen + if PB_UTIL.is_rank(context.other_card, card.ability.extra.rank) and (#G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit) then + -- Add the planet corresponding to the played hand type + G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1 + G.E_MANAGER:add_event(Event({ + trigger = 'before', + delay = 0.0, + func = function() + if G.GAME.last_hand_played then + local _planet = nil + for k, v in pairs(G.P_CENTER_POOLS.Planet) do + if v.config.hand_type == G.GAME.last_hand_played then + _planet = v.key + end + end + if _planet then + SMODS.add_card({ key = _planet }) + end + G.GAME.consumeable_buffer = 0 + end + return true + end + })) + return { message = localize('k_plus_planet'), colour = G.C.SECONDARY_SET.Planet } end end end, diff --git a/content/joker/penumbra_phantasm.lua b/content/joker/penumbra_phantasm.lua new file mode 100644 index 00000000..b1515e9c --- /dev/null +++ b/content/joker/penumbra_phantasm.lua @@ -0,0 +1,74 @@ +SMODS.Joker { + key = 'penumbra_phantasm', + config = { + extra = { + mult = 0, + a_mult = 1, + } + }, + rarity = 2, + pos = { x = 22, y = 2 }, + atlas = 'jokers_atlas', + cost = 9, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + pools = { + Music = true + }, + in_pool = function(self, args) + for _, v in ipairs(G.playing_cards or {}) do + if SMODS.has_no_rank(v) then return true end + end + end, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.a_mult, + card.ability.extra.mult, + } + } + end, + + calculate = function(self, card, context) + if context.joker_main and context.cardarea == G.jokers then + return { + mult = card.ability.extra.mult, + } + end + + -- Upgrade this Joker for every scored rankless card + if not context.blueprint and context.individual and context.cardarea == G.play then + if SMODS.has_no_rank(context.other_card) then + card.ability.extra.scored = true + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.a_mult + + return { + extra = { + focus = card, + message = localize { + type = 'variable', + key = 'a_mult', + vars = { card.ability.extra.mult }, + colour = G.C.MULT, + }, + card = card + } + } + end + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, +} diff --git a/content/joker/percussion_ensemble.lua b/content/joker/percussion_ensemble.lua new file mode 100644 index 00000000..340f6ec5 --- /dev/null +++ b/content/joker/percussion_ensemble.lua @@ -0,0 +1,54 @@ +SMODS.Joker { + key = "percussion_ensemble", + config = { + extra = { + xMult = 1, + xMult_mod = .25 + } + }, + rarity = 2, + pos = { x = 16, y = 5 }, + atlas = "jokers_atlas", + cost = 7, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + + loc_vars = function(self, info_queue, card) + local unique_specials = PB_UTIL.special_cards_in_deck(true, false) or 0 + + return { + vars = { + card.ability.extra.xMult_mod, + card.ability.extra.xMult_mod * unique_specials + card.ability.extra.xMult + } + } + end, + + calculate = function(self, card, context) + if context.joker_main then + if PB_UTIL.special_cards_in_deck(true, false) >= 1 then + return { + x_mult = card.ability.extra.xMult + card.ability.extra.xMult_mod * PB_UTIL.special_cards_in_deck(true, false) + } + end + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + local unique_specials = PB_UTIL.special_cards_in_deck(true, false) or 0 + card.joker_display_values.x_mult = card.ability.extra.xMult_mod * unique_specials + card.ability.extra.xMult + end + } + end, +} diff --git a/content/joker/photocopy.lua b/content/joker/photocopy.lua new file mode 100644 index 00000000..b70e0bd7 --- /dev/null +++ b/content/joker/photocopy.lua @@ -0,0 +1,40 @@ +SMODS.Joker { + key = "photocopy", + rarity = 3, + pos = { x = 22, y = 3 }, + atlas = "jokers_atlas", + cost = 10, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + loc_vars = function(self, info_queue, card) + if card.area == G.jokers and G.jokers.cards[#G.jokers.cards] ~= card and G.jokers.cards[#G.jokers.cards].config.center.blueprint_compat then + card.ability.blueprint_compat = ' ' .. localize('k_compatible') .. ' ' + card.ability.bubble_colour = mix_colours(G.C.GREEN, G.C.JOKER_GREY, 0.8) + else + card.ability.blueprint_compat = ' ' .. localize('k_incompatible') .. ' ' + card.ability.bubble_colour = mix_colours(G.C.RED, G.C.JOKER_GREY, 0.8) + end + return { + main_end = (card.area and card.area == G.jokers) and { + { + n = G.UIT.C, + config = { align = "bm", minh = 0.4 }, + nodes = { + { + n = G.UIT.C, + config = { ref_table = card, align = "m", colour = card.ability.bubble_colour, r = 0.05, padding = 0.06 }, + nodes = { + { n = G.UIT.T, config = { ref_table = card.ability, ref_value = 'blueprint_compat', colour = G.C.UI.TEXT_LIGHT, scale = 0.32 * 0.8 } }, + } + } + } + } + } + } + end, + + calculate = function(self, card, context) + return SMODS.blueprint_effect(card, G.jokers.cards[#G.jokers.cards], context) + end +} diff --git a/content/joker/pinot_noir.lua b/content/joker/pinot_noir.lua index 6f25704a..25dbc72a 100644 --- a/content/joker/pinot_noir.lua +++ b/content/joker/pinot_noir.lua @@ -50,7 +50,8 @@ SMODS.Joker { end, calculate = function(self, card, context) - if context.individual and context.cardarea == G.hand and not context.blueprint then + if context.individual and context.cardarea == G.hand and not context.blueprint + and not context.end_of_round then if SMODS.has_enhancement(context.other_card, 'm_paperback_stained') and card.ability.extra.remaining > 0 then card.ability.extra.remaining = card.ability.extra.remaining - 1 diff --git a/content/joker/plague_doctor.lua b/content/joker/plague_doctor.lua index 04888eaa..396d6949 100644 --- a/content/joker/plague_doctor.lua +++ b/content/joker/plague_doctor.lua @@ -26,78 +26,37 @@ SMODS.Joker { } end, - add_to_deck = function(self, card, from_debuff) - local apostleCount = 0 - for _, v in ipairs(G.playing_cards) do - if PB_UTIL.is_rank(v, 'paperback_Apostle') then - apostleCount = apostleCount + 1 - end - end - if apostleCount >= 12 then - G.GAME.pool_flags.plague_doctor_can_spawn = false - G.E_MANAGER:add_event(Event({ - func = function() - card.getting_sliced = true - card:start_dissolve() - SMODS.add_card({ - set = 'Joker', - key = 'j_paperback_white_night', - edition = card.edition, - stickers = { "eternal" } - }) - return true - end - })) - end - end, - in_pool = function(self, args) return G.GAME.pool_flags.plague_doctor_can_spawn end, calculate = function(self, card, context) - if context.final_scoring_step and context.cardarea == G.jokers and not context.blueprint then + if context.after and context.cardarea == G.jokers and not context.blueprint then local apostleCount = 0 for _, v in ipairs(G.playing_cards) do if PB_UTIL.is_rank(v, 'paperback_Apostle') then apostleCount = apostleCount + 1 end end - - local to_apostle = context.scoring_hand[1] - if context.scoring_name == 'High Card' and not PB_UTIL.is_rank(to_apostle, 'paperback_Apostle') then - apostleCount = apostleCount + 1 - G.E_MANAGER:add_event(Event({ - trigger = 'after', - delay = 0.15, - func = function() - to_apostle:flip() - play_sound('card1', 1) - to_apostle:juice_up(0.3, 0.3) - return true + if context.scoring_name == 'High Card' then + local to_apostle = {} + for _, scored in ipairs(context.scoring_hand) do + if not (scored.config.center.key == 'm_stone' or scored.config.center.overrides_base_rank) + and not PB_UTIL.is_rank(scored, 'paperback_Apostle') then + table.insert(to_apostle, scored) end - })) - delay(0.2) - G.E_MANAGER:add_event(Event({ - trigger = 'after', - delay = 0.1, - func = function() - assert(SMODS.change_base(to_apostle, nil, 'paperback_Apostle')) - return true - end - })) - G.E_MANAGER:add_event(Event({ - trigger = 'after', - delay = 0.15, - func = function() - to_apostle:flip() - play_sound('tarot2', 1, 0.6) - to_apostle:juice_up(0.3, 0.3) - return true - end - })) + end + if to_apostle[1] then + PB_UTIL.use_consumable_animation(card, to_apostle, + function() + for _, v in ipairs(to_apostle) do + assert(SMODS.change_base(v, nil, 'paperback_Apostle')) + end + end) + end + apostleCount = apostleCount + #to_apostle - if PB_UTIL.config.plague_doctor_quotes_enabled then + if #to_apostle > 0 and PB_UTIL.config.plague_doctor_quotes_enabled then local quote = (apostleCount > 12) and 12 or apostleCount G.E_MANAGER:add_event(Event({ trigger = 'after', @@ -135,7 +94,8 @@ SMODS.Joker { set = 'Joker', key = 'j_paperback_white_night', edition = card.edition, - stickers = { "eternal" } + stickers = { "eternal" }, + force_stickers = true }) return true end diff --git a/content/joker/pointy_stick.lua b/content/joker/pointy_stick.lua index 13164e41..24aef4d2 100644 --- a/content/joker/pointy_stick.lua +++ b/content/joker/pointy_stick.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'pointy_stick', config = { extra = { - xMult = 1 + xMult_if_stick = 2 } }, rarity = 1, @@ -21,7 +21,7 @@ SMODS.Joker { return { vars = { - card.ability.extra.xMult, + card.ability.extra.xMult_if_stick, xMult } } diff --git a/content/joker/pool_table.lua b/content/joker/pool_table.lua index 7e2110b8..cd9e024c 100644 --- a/content/joker/pool_table.lua +++ b/content/joker/pool_table.lua @@ -30,7 +30,7 @@ SMODS.Joker { func = function() local _planet = 0 for k, v in pairs(G.P_CENTER_POOLS.Planet) do - if v.config.hand_type == context.scoring_name then + if v.config.hand_type == context.scoring_name and not v.config.moon then _planet = v.key end end diff --git a/content/joker/pop_stick.lua b/content/joker/pop_stick.lua index 069fe8be..fd21fe4e 100644 --- a/content/joker/pop_stick.lua +++ b/content/joker/pop_stick.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'pop_stick', config = { extra = { - xMult = 1 + xMult_if_stick = 2 } }, rarity = 1, @@ -21,7 +21,7 @@ SMODS.Joker { return { vars = { - card.ability.extra.xMult, + card.ability.extra.xMult_if_stick, xMult } } diff --git a/content/joker/popsicle_stick.lua b/content/joker/popsicle_stick.lua index 72dc75e2..a6ac5042 100644 --- a/content/joker/popsicle_stick.lua +++ b/content/joker/popsicle_stick.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'popsicle_stick', config = { extra = { - xMult = 1 + xMult_if_stick = 2 } }, rarity = 1, @@ -21,7 +21,7 @@ SMODS.Joker { return { vars = { - card.ability.extra.xMult, + card.ability.extra.xMult_if_stick, xMult } } diff --git a/content/joker/power_surge.lua b/content/joker/power_surge.lua index fef299f9..f45159f0 100644 --- a/content/joker/power_surge.lua +++ b/content/joker/power_surge.lua @@ -3,7 +3,7 @@ SMODS.Joker { config = { extra = { rank = 7, - xMult = 2, + xMult = 1.5, odds = 4, } }, diff --git a/content/joker/pride_flag.lua b/content/joker/pride_flag.lua index 8485786c..d38c0d6e 100644 --- a/content/joker/pride_flag.lua +++ b/content/joker/pride_flag.lua @@ -39,13 +39,11 @@ if PB_UTIL.config.suits_enabled then SMODS.calculate_effect { message = localize('k_reset'), - colour = G.C.MULT, + colour = G.C.RED, card = card, } - end - - -- Give chips if hand contains a Spectrum - if PB_UTIL.get_unique_suits(context.scoring_hand, nil, true) >= 5 then + -- Give chips if hand contains a Spectrum + elseif PB_UTIL.get_unique_suits(context.full_hand, nil, true) >= 5 then card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.a_chips SMODS.calculate_effect { @@ -62,7 +60,17 @@ if PB_UTIL.config.suits_enabled then chips = card.ability.extra.chips } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + } + end, } else SMODS.Joker { @@ -118,6 +126,16 @@ else mult = card.ability.extra.mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } end diff --git a/content/joker/prince_of_darkness.lua b/content/joker/prince_of_darkness.lua index 6951674d..1cd89479 100644 --- a/content/joker/prince_of_darkness.lua +++ b/content/joker/prince_of_darkness.lua @@ -4,7 +4,7 @@ SMODS.Joker { extra = { unique_suits = 2, x_mult = 2, - hands = 2, + hands = 3, hands_remaining = 0 } }, @@ -35,11 +35,11 @@ SMODS.Joker { if not card.debuff then -- Check if the card is being calculated before the scoring hand is scored and not blueprinted if context.before and not context.blueprint then - local unique_suits = PB_UTIL.get_unique_suits(context.scoring_hand) + local unique_suits = PB_UTIL.get_unique_suits(context.scoring_hand, true) local heart_found = false for i = 1, #context.scoring_hand do - if context.scoring_hand[i]:is_suit("Hearts") then + if context.scoring_hand[i]:is_suit("Hearts", false, true) then heart_found = true break end diff --git a/content/joker/protocol.lua b/content/joker/protocol.lua new file mode 100644 index 00000000..61a1ace0 --- /dev/null +++ b/content/joker/protocol.lua @@ -0,0 +1,25 @@ +SMODS.Joker { + key = 'protocol', + rarity = 1, + pos = { x = 12, y = 6 }, + atlas = 'jokers_atlas', + cost = 5, + unlocked = true, + discovered = false, + blueprint_compat = false, + eternal_compat = true, + perishable_compat = true, + config = { extra = { pack_size = 1 } }, + + loc_vars = function(self, info_queue, card) + return { vars = { card.ability.extra.pack_size } } + end, + + add_to_deck = function(self, card, from_debuff) + G.GAME.modifiers.booster_size_mod = (G.GAME.modifiers.booster_size_mod or 0) + card.ability.extra.pack_size + end, + + remove_from_deck = function(self, card, from_debuff) + G.GAME.modifiers.booster_size_mod = (G.GAME.modifiers.booster_size_mod or 0) - card.ability.extra.pack_size + end +} diff --git a/content/joker/quartz.lua b/content/joker/quartz.lua index ce165601..244c0a30 100644 --- a/content/joker/quartz.lua +++ b/content/joker/quartz.lua @@ -43,5 +43,55 @@ SMODS.Joker { end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_chips", retrigger_type = "exp" } + }, + border_colour = G.C.CHIPS + } + }, + reminder_text = { + { text = "(" }, + { + ref_table = "card.joker_display_values", + ref_value = "localized_text", + colour = lighten(loc_colour('paperback_stars'), 0.35) + }, + { text = ")" }, + }, + calc_function = function(card) + local count, stars = 0, 0 + for _, v in ipairs(G.hand.highlighted) do + if v:is_suit('paperback_Stars') then + stars = stars + 1 + end + end + for _, v in ipairs(G.play.cards) do + if v:is_suit('paperback_Stars') then + stars = stars + 1 + end + end + if stars <= 1 then + card.joker_display_values.x_chips = 1; return + end + + -- Count star triggers + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:is_suit('paperback_Stars') then + count = count + + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + card.joker_display_values.x_chips = (1 + card.ability.extra.x_chips * (stars - 1)) ^ count + card.joker_display_values.localized_text = localize('paperback_Stars', 'suits_plural') + end + } + end, } diff --git a/content/joker/ready_to_fly.lua b/content/joker/ready_to_fly.lua index ecf7b65c..0a29230a 100644 --- a/content/joker/ready_to_fly.lua +++ b/content/joker/ready_to_fly.lua @@ -21,8 +21,12 @@ SMODS.Joker { scaling = 0.02 } }, + pools = { + Music = true + }, blueprint_compat = true, eternal_compat = true, + perishable_compat = false, loc_vars = function(self, info_queue, card) return { vars = { @@ -84,5 +88,19 @@ SMODS.Joker { xchips = card.ability.extra.xchips } end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = 'X' }, + { ref_table = 'card.ability.extra', ref_value = 'xchips' } + }, + border_colour = G.C.CHIPS + } + }, + } end } diff --git a/content/joker/reference_card.lua b/content/joker/reference_card.lua index b81d1748..0bdbc9f6 100644 --- a/content/joker/reference_card.lua +++ b/content/joker/reference_card.lua @@ -16,39 +16,67 @@ SMODS.Joker { eternal_compat = true, soul_pos = nil, - set_ability = function(self, card, initial, delay_sprites) - PB_UTIL.calculate_highest_shared_played(card) - end, - loc_vars = function(self, info_queue, card) + local x_mult = card.ability.extra.x_mult_mod * G.GAME.paperback.reference_card_ct + card.ability.extra.x_mult return { vars = { card.ability.extra.x_mult_mod, - card.ability.extra.x_mult + x_mult } } end, calculate = function(self, card, context) + if context.before then + PB_UTIL.calculate_highest_shared_played(card) + if card.ability.extra.message_flag then + card.ability.extra.message_flag = nil + SMODS.calculate_effect({ + message = localize('k_upgrade_ex'), + colour = G.C.MULT, + }, card) + end + end + -- Gives the xMult during play if context.joker_main then - PB_UTIL.calculate_highest_shared_played(card) + local x_mult = card.ability.extra.x_mult_mod * G.GAME.paperback.reference_card_ct + card.ability.extra.x_mult - if card.ability.extra.x_mult ~= 1 then + if x_mult ~= 1 then return { - x_mult = card.ability.extra.x_mult, + x_mult = x_mult, card = card } end end - end -} + end, + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + card.joker_display_values.x_mult = card.ability.extra.x_mult_mod * G.GAME.paperback.reference_card_ct + + card.ability.extra.x_mult + end, + } + end, +} --- Helper function to find the mininum played hand in G.GAME.hands in all base poker hands +-- Update global information for Reference Card. +-- See solar_system.lua function PB_UTIL.calculate_highest_shared_played(card) + local old = G.GAME.paperback.reference_card_ct local hands = G.GAME.hands + -- Finds the mininum played hand in G.GAME.hands in all base poker hands + local min_played = hands[PB_UTIL.base_poker_hands[1]].played for _, hand in ipairs(PB_UTIL.base_poker_hands) do @@ -59,6 +87,11 @@ function PB_UTIL.calculate_highest_shared_played(card) end end - -- set the card's x_mult to a value depending on the minimum played - card.ability.extra.x_mult = card.ability.extra.x_mult_mod * min_played + 1 + -- set global to minimum played + G.GAME.paperback.reference_card_ct = min_played + if old < G.GAME.paperback.reference_card_ct then + for _, v in ipairs(SMODS.find_card('j_paperback_reference_card')) do + v.ability.extra.message_flag = true + end + end end diff --git a/content/joker/resurrections.lua b/content/joker/resurrections.lua index 5fcb6721..5e86feb8 100644 --- a/content/joker/resurrections.lua +++ b/content/joker/resurrections.lua @@ -63,5 +63,27 @@ SMODS.Joker { card.ability.extra.chance_mult = card.ability.extra.chance_mult + 1 end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + extra = { + { + { text = '(' }, + { ref_table = 'card.joker_display_values', ref_value = 'odds' }, + { text = ')' }, + }, + }, + extra_config = { + colour = G.C.GREEN, + scale = 0.3, + }, + calc_function = function(card) + card.joker_display_values.odds = localize { + type = 'variable', key = "jdis_odds", + vars = { PB_UTIL.chance_vars(card, nil, card.ability.extra.chance_mult) } + } + end + } + end, } diff --git a/content/joker/rosary_beads.lua b/content/joker/rosary_beads.lua new file mode 100644 index 00000000..0c5f102a --- /dev/null +++ b/content/joker/rosary_beads.lua @@ -0,0 +1,35 @@ +SMODS.Joker { + key = 'rosary_beads', + unlocked = true, + discovered = false, + config = { + extra = { + hearts = 3, + dollars = 5 + } + }, + atlas = "jokers_atlas", + rarity = 1, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + cost = 4, + pos = { x = 13, y = 9 }, + loc_vars = function(self, info_queue, card) + return { vars = { card.ability.extra.hearts, card.ability.extra.dollars } } + end, + calculate = function(self, card, context) + + if context.joker_main then + local hearts = 0 + for _, v in ipairs(G.play.cards) do + if v:is_suit('Hearts', false, true) then + hearts = hearts + 1 + end + end + if hearts >= card.ability.extra.hearts then + return { dollars = card.ability.extra.dollars } + end + end + end +} diff --git a/content/joker/roulette.lua b/content/joker/roulette.lua new file mode 100644 index 00000000..597eef16 --- /dev/null +++ b/content/joker/roulette.lua @@ -0,0 +1,103 @@ +SMODS.Joker { + key = "roulette", + config = { + extra = { + money_for_suit = 1, + money_for_rank = 5, + money_for_both = 25, + } + }, + rarity = 2, + pos = { x = 11, y = 10 }, + atlas = "jokers_atlas", + cost = 7, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.money_for_suit, + card.ability.extra.money_for_rank, + card.ability.extra.money_for_both, + colours = { + G.C.SUITS[card.ability.extra.suit] + } + } + } + end, + + calculate = function(self, card, context) + if context.before and not context.blueprint then + card.ability.extra.suit = pseudorandom_element(PB_UTIL.base_suits, pseudoseed('roulette_suit')) + card.ability.extra.rank = pseudorandom_element(PB_UTIL.base_ranks, pseudoseed('roulette_rank')) + end + if context.individual and context.cardarea == G.play then + local c = context.other_card + if c then + local suit_match = c:is_suit(card.ability.extra.suit) + local rank_match = PB_UTIL.is_rank(c, card.ability.extra.rank) + if suit_match and rank_match then + return { + dollars = card.ability.extra.money_for_both, + message_card = c, + juice_card = context.blueprint_card or card + } + elseif suit_match then + return { + dollars = card.ability.extra.money_for_suit, + message_card = c, + juice_card = context.blueprint_card or card + } + elseif rank_match then + return { + dollars = card.ability.extra.money_for_rank, + message_card = c, + juice_card = context.blueprint_card or card + } + end + end + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+$" }, + { ref_table = "card.joker_display_values", ref_value = "dollars", retrigger_type = "mult" }, + { text = "?" }, + }, + text_config = { colour = G.C.GOLD }, + calc_function = function(card) + local dollars = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in ipairs(scoring_hand) do + local suit_matches = 0 + for _, suit in ipairs(PB_UTIL.base_suits) do + if scoring_card:is_suit(suit) then + suit_matches = suit_matches + 1 + end + end + local rank_matches = 0 + for _, rank in ipairs(PB_UTIL.base_ranks) do + if PB_UTIL.is_rank(scoring_card, rank) and not scoring_card.debuff then + rank_matches = rank_matches + 1 + end + end + local scoring_card_dollars = + card.ability.extra.money_for_suit * suit_matches / 4 + + card.ability.extra.money_for_rank * rank_matches / 13 + + (card.ability.extra.money_for_both + - card.ability.extra.money_for_suit + - card.ability.extra.money_for_rank + ) * suit_matches / 4 * rank_matches / 13 + dollars = dollars + scoring_card_dollars * + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + card.joker_display_values.dollars = dollars + end + } + end, +} diff --git a/content/joker/sacrificial_lamb.lua b/content/joker/sacrificial_lamb.lua index 2471c537..e574f17f 100644 --- a/content/joker/sacrificial_lamb.lua +++ b/content/joker/sacrificial_lamb.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'sacrificial_lamb', config = { extra = { - mult_mod = 4, + mult_mod = 3, mult = 0 } }, @@ -27,29 +27,22 @@ SMODS.Joker { end, calculate = function(self, card, context) - -- Gains mult when jokers are destroyed - if not context.blueprint and context.paperback and context.paperback.destroying_joker then - -- Make sure that this joker isn't being removed - if card ~= context.paperback.destroyed_joker then - card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.mult_mod + local count = PB_UTIL.count_destroyed_things(context) + -- Gains mult when any cards are destroyed. Each card destroyed provides the specified mult_mod + if not context.blueprint and count > 0 + -- Make sure that this joker isn't being removed + and not (context.paperback and context.paperback.destroyed_joker and card == context.paperback.destroyed_joker) + then + card.ability.extra.mult = card.ability.extra.mult + count * card.ability.extra.mult_mod - return { - message = localize { - type = 'variable', - key = 'a_mult', - vars = { card.ability.extra.mult_mod } - }, - colour = G.C.MULT - } - end - end - - -- Gains mult when playing cards are destroyed. Each card destroyed provides the specified mult_mod - if not context.blueprint and context.remove_playing_cards and context.removed and #context.removed > 0 then - card.ability.extra.mult = card.ability.extra.mult + (#context.removed * card.ability.extra.mult_mod) - - card_eval_status_text(card, 'extra', nil, nil, nil, - { message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult_mod * #context.removed } } }) + return { + message = localize { + type = 'variable', + key = 'a_mult', + vars = { count * card.ability.extra.mult_mod } + }, + colour = G.C.MULT + } end -- Gives the mult when scoring @@ -59,4 +52,14 @@ SMODS.Joker { } end end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } diff --git a/content/joker/sake_cup.lua b/content/joker/sake_cup.lua index d9f8e7b7..75c229a3 100644 --- a/content/joker/sake_cup.lua +++ b/content/joker/sake_cup.lua @@ -29,7 +29,8 @@ SMODS.Joker { -- Calculate function for the Joker calculate = function(self, card, context) - if context.individual and context.cardarea == G.hand and PB_UTIL.is_rank(context.other_card, card.ability.extra.rank) then + if context.individual and context.cardarea == G.hand and not context.end_of_round + and PB_UTIL.is_rank(context.other_card, card.ability.extra.rank) then if not context.other_card.debuff and PB_UTIL.chance(card, 'sake_cup') then local planet = PB_UTIL.get_planet_for_hand(context.scoring_name) local eff_card = context.blueprint_card or card @@ -53,5 +54,38 @@ SMODS.Joker { end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult" }, + }, + text_config = { colour = G.C.SECONDARY_SET.Planet }, + extra = { + { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "odds" }, + { text = ")" }, + } + }, + extra_config = { colour = G.C.GREEN, scale = 0.3 }, + calc_function = function(card) + local count = 0 + -- Taken from JokerDisplay's Shoot The Moon + for _, playing_card in ipairs(G.hand.cards) do + if not playing_card.highlighted then + if playing_card.facing and not (playing_card.facing == 'back') + and not playing_card.debuff + and PB_UTIL.is_rank(playing_card, card.ability.extra.rank) then + count = count + JokerDisplay.calculate_card_triggers(playing_card, nil, true) + end + end + end + card.joker_display_values.count = count + card.joker_display_values.odds = localize { type = 'variable', key = "jdis_odds", vars = { PB_UTIL.chance_vars(card) } } + end + } + end, } diff --git a/content/joker/satellite_array.lua b/content/joker/satellite_array.lua new file mode 100644 index 00000000..e2636755 --- /dev/null +++ b/content/joker/satellite_array.lua @@ -0,0 +1,43 @@ +SMODS.Joker { + key = "satellite_array", + blueprint_compat = true, + rarity = 2, + cost = 7, + pos = { x = 20, y = 1 }, + atlas = "jokers_atlas", + perishable_compat = false, + config = { extra = { chips_mod = 15, chips_rem = 5, chips = 0 } }, + loc_vars = function(self, info_queue, card) + return { vars = { card.ability.extra.chips_mod, card.ability.extra.chips_rem, card.ability.extra.chips } } + end, + calculate = function(self, card, context) + if context.joker_main and card.ability.extra.chips > 0 then + return { + chips = card.ability.extra.chips + } + end + if context.after and card.ability.extra.chips > 0 and not context.blueprint then + card.ability.extra.chips = card.ability.extra.chips - card.ability.extra.chips_rem + return { + message = localize('paperback_downgrade_ex'), + colour = G.C.ORANGE + } + end + if context.using_consumeable and not context.blueprint and context.consumeable.ability.set == 'Planet' then + card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chips_mod + return { + message = localize { type = 'variable', key = 'a_chips', vars = { card.ability.extra.chips } } + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + } + end, +} diff --git a/content/joker/shooting_star.lua b/content/joker/shooting_star.lua index fdff71be..760355cf 100644 --- a/content/joker/shooting_star.lua +++ b/content/joker/shooting_star.lua @@ -54,5 +54,46 @@ SMODS.Joker { end end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult" }, + }, + text_config = { colour = G.C.SECONDARY_SET.Planet }, + reminder_text = { + { text = "(" }, + { + ref_table = "card.joker_display_values", + ref_value = "localized_text", + colour = lighten(loc_colour(G.P_CENTERS["j_paperback_shooting_star"].config.extra.suit:lower()), 0.35) + }, + { text = ")" }, + }, + extra = { + { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "odds" }, + { text = ")" }, + } + }, + extra_config = { colour = G.C.GREEN, scale = 0.3 }, + calc_function = function(card) + local count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:is_suit(card.ability.extra.suit) then + count = count + + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + card.joker_display_values.count = count + card.joker_display_values.odds = localize { type = 'variable', key = "jdis_odds", vars = { PB_UTIL.chance_vars(card) } } + card.joker_display_values.localized_text = + localize(G.P_CENTERS["j_paperback_shooting_star"].config.extra.suit, 'suits_plural') + end + } + end, } diff --git a/content/joker/shopkeep.lua b/content/joker/shopkeep.lua new file mode 100644 index 00000000..db0a0f1a --- /dev/null +++ b/content/joker/shopkeep.lua @@ -0,0 +1,50 @@ +SMODS.Joker { + key = "shopkeep", + config = { + extra = { + count = 0, + coupon_blinds_needed = 2, + } + }, + rarity = 3, + pos = { x = 15, y = 7 }, + atlas = 'jokers_atlas', + cost = 10, + unlocked = false, + blueprint_compat = true, + eternal_compat = true, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = G.P_TAGS.tag_coupon + info_queue[#info_queue + 1] = G.P_TAGS.tag_voucher + return { vars = { + card.ability.extra.coupon_blinds_needed, + card.ability.extra.count % card.ability.extra.coupon_blinds_needed + } } + end, + + check_for_unlock = function(self, args) + if args.type == 'spend_in_one_shop' and to_number(args.spent) >= 50 then + unlock_card(self) + end + end, + + calculate = function(self, card, context) + if context.end_of_round and context.main_eval then + -- Hacky way to make this increment once, even with Blueprints + if not card.ability.extra.incremented then + card.ability.extra.count = card.ability.extra.count + 1 + card.ability.extra.incremented = true -- reset in reset_game_globals + end + if card.ability.extra.count % card.ability.extra.coupon_blinds_needed == 0 then + PB_UTIL.add_tag('tag_coupon') + card:juice_up() + end + end + + if context.end_of_round and G.GAME.blind.boss and context.main_eval then + PB_UTIL.add_tag('tag_voucher') + card:juice_up() + end + end +} diff --git a/content/joker/showdown.lua b/content/joker/showdown.lua new file mode 100644 index 00000000..18b4f345 --- /dev/null +++ b/content/joker/showdown.lua @@ -0,0 +1,57 @@ +SMODS.Joker { + key = "showdown", + config = { + extra = { + dollars = 1, + odds = 2, + suit1 = 'paperback_Stars', + suit2 = 'paperback_Crowns' + } + }, + rarity = 1, + pos = { x = 13, y = 6 }, + atlas = "jokers_atlas", + cost = 5, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + paperback = { + requires_custom_suits = true + }, + + in_pool = function(self, args) + for _, v in ipairs(G.deck.cards) do + if v:is_suit('paperback_Stars', true) or v:is_suit('paperback_Crowns', true) then return true end + end + end, + + loc_vars = function(self, info_queue, card) + local numerator, denominator = PB_UTIL.chance_vars(card) + + return { + vars = { + localize(card.ability.extra.suit1, 'suits_plural'), + localize(card.ability.extra.suit2, 'suits_plural'), + numerator, + denominator, + card.ability.extra.dollars, + colours = { + G.C.SUITS[card.ability.extra.suit1] or G.C.PAPERBACK_STARS_LC, + G.C.SUITS[card.ability.extra.suit2] or G.C.PAPERBACK_CROWNS_LC, + } + }, + + } + end, + + calculate = function(self, card, context) + if context.cardarea == G.hand and context.individual and not context.end_of_round then + if PB_UTIL.chance(card, "paperback_showdown_money") and context.other_card:is_suit(card.ability.extra.suit1) or context.other_card:is_suit(card.ability.extra.suit2) then + return { + dollars = card.ability.extra.dollars + } + end + end + end +} diff --git a/content/joker/skydiver.lua b/content/joker/skydiver.lua index bb51756e..9c4f58cb 100644 --- a/content/joker/skydiver.lua +++ b/content/joker/skydiver.lua @@ -95,7 +95,38 @@ SMODS.Joker { } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + reminder_text = { + { text = "(<=" }, + { ref_table = "card.ability.extra", ref_value = "lowest_rank", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + local active = true + -- If there is a scored card with a rank that has a higher rank than the lowest + -- recorded by this joker, do not trigger the effect + for _, v in ipairs(scoring_hand) do + if not SMODS.has_no_rank(v) and PB_UTIL.compare_ranks(v:get_id(), card.ability.extra.lowest_rank) then + active = false + break + end + end + card.joker_display_values.x_mult = active and card.ability.extra.x_mult or 1 + end + } + end, } function PB_UTIL.reset_skydiver(card) diff --git a/content/joker/small_scale_onshore_wind.lua b/content/joker/small_scale_onshore_wind.lua new file mode 100644 index 00000000..965a8bd8 --- /dev/null +++ b/content/joker/small_scale_onshore_wind.lua @@ -0,0 +1,57 @@ +SMODS.Joker { + key = "small_scale_onshore_wind", + config = { + extra = { + mult = 0, + bonus = 2, + card_req = 5 + } + }, + rarity = 1, + pos = { x = 16, y = 1 }, + atlas = 'jokers_atlas', + cost = 6, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + loc_vars = function(self, info_queue, card) + return { + vars = { card.ability.extra.bonus, card.ability.extra.card_req, card.ability.extra.mult } + } + end, + + calculate = function(self, card, context) + if context.pre_discard and not context.hook and not context.blueprint_card then + if #context.full_hand == card.ability.extra.card_req then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.bonus + return { + message = localize('k_upgrade_ex'), + colour = G.C.ORANGE + } + else + card.ability.extra.mult = 0 + return { + message = localize('k_reset'), + colour = G.C.ORANGE + } + end + end + if context.joker_main then + return { + mult = card.ability.extra.mult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, +} diff --git a/content/joker/solar_system.lua b/content/joker/solar_system.lua index 641df0f1..ad6d662a 100644 --- a/content/joker/solar_system.lua +++ b/content/joker/solar_system.lua @@ -2,11 +2,11 @@ SMODS.Joker { key = "solar_system", config = { extra = { - x_mult_mod = 2, - x_mult = 1 + x_mult_mod = 1.5, + x_mult = 1.5, } }, - rarity = 3, + rarity = 2, pos = { x = 7, y = 0 }, atlas = "jokers_atlas", cost = 8, @@ -16,15 +16,12 @@ SMODS.Joker { eternal_compat = true, soul_pos = nil, - set_ability = function(self, card, initial, delay_sprites) - PB_UTIL.update_solar_system(card) - end, - loc_vars = function(self, info_queue, card) + local x_mult = card.ability.extra.x_mult_mod * G.GAME.paperback.solar_system_ct return { vars = { card.ability.extra.x_mult_mod, - card.ability.extra.x_mult + x_mult } } end, @@ -33,19 +30,51 @@ SMODS.Joker { -- If a hand is being leveled up, recalculate the xMult bonus if context.paperback and context.paperback.level_up_hand then PB_UTIL.update_solar_system(card) + if card.ability.extra.message_flag then + card.ability.extra.message_flag = nil + SMODS.calculate_effect({ + message = localize('k_upgrade_ex'), + colour = G.C.MULT, + }, card) + end end -- Gives the xMult during play if context.joker_main then + local x_mult = card.ability.extra.x_mult_mod * G.GAME.paperback.solar_system_ct return { - x_mult = card.ability.extra.x_mult, + x_mult = x_mult, card = card } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + card.joker_display_values.x_mult = card.ability.extra.x_mult_mod * G.GAME.paperback.solar_system_ct + end, + } + end, } +-- Update global information for Solar System. +-- +-- Implementation notes: If a Solar System is owned, this function is called by its +-- calculate() function, in time for message_flag to work. +-- If no Solar System is owned, we also call this function in +-- mod-global calculate to keep it updated. +-- That means this function is redundantly called in both places, which is awkward function PB_UTIL.update_solar_system(card) + local old = G.GAME.paperback.solar_system_ct local hands = G.GAME.hands -- set the minimum level to the first planet in the subset @@ -61,6 +90,11 @@ function PB_UTIL.update_solar_system(card) end end - -- set the card's x_mult to a value depending on the minimum level - card.ability.extra.x_mult = card.ability.extra.x_mult_mod * math.max(1, to_number(min_level)) - 1 + -- set global to minimum level + G.GAME.paperback.solar_system_ct = math.max(1, to_number(min_level)) + if old < G.GAME.paperback.solar_system_ct then + for _, v in ipairs(SMODS.find_card('j_paperback_solar_system')) do + v.ability.extra.message_flag = true + end + end end diff --git a/content/joker/solemn_lament.lua b/content/joker/solemn_lament.lua index e158eea0..d7151bd9 100644 --- a/content/joker/solemn_lament.lua +++ b/content/joker/solemn_lament.lua @@ -15,6 +15,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, + perishable_compat = false, soul_pos = nil, loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = PB_UTIL.suit_tooltip('dark') @@ -36,35 +37,24 @@ SMODS.Joker { calculate = function(self, card, context) if context.before and not context.blueprint then local suits = { - dark = false, - light = false + dark = 0, -- max 1 + light = 0, -- max 1 + wild = 0, -- can fill in for the others } - - for _, v in ipairs(context.scoring_hand) do - if not SMODS.has_any_suit(v) then - if not suits.dark and PB_UTIL.is_suit(v, 'dark') then - suits.dark = true - else - if not suits.light and PB_UTIL.is_suit(v, 'light') then - suits.light = true - end - end - end - end for _, v in ipairs(context.scoring_hand) do - if SMODS.has_any_suit(v) then - if not suits.dark and PB_UTIL.is_suit(v, 'dark') then - suits.dark = true - else - if not suits.light and PB_UTIL.is_suit(v, 'light') then - suits.light = true - end - end + local is_dark = PB_UTIL.is_suit(v, 'dark', false, true) + local is_light = PB_UTIL.is_suit(v, 'light', false, true) + if is_dark and is_light then + suits.wild = suits.wild + 1 + elseif is_dark then + suits.dark = 1 + elseif is_light then + suits.light = 1 end end - if suits.dark and suits.light then + if suits.dark + suits.light + suits.wild >= 2 then local BGcolour card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_mod if card.ability.extra.is_white then @@ -90,5 +80,18 @@ SMODS.Joker { x_mult = card.ability.extra.x_mult, } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + } + end, } diff --git a/content/joker/spotty_joker.lua b/content/joker/spotty_joker.lua index f2c56d41..2056f952 100644 --- a/content/joker/spotty_joker.lua +++ b/content/joker/spotty_joker.lua @@ -3,7 +3,6 @@ SMODS.Joker { config = { extra = { xmult_mod = 0.1, - xmult_red = 0.1, xmult = 1, } }, @@ -15,7 +14,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, paperback = { requires_enhancements = true }, @@ -32,7 +31,6 @@ SMODS.Joker { set = 'Enhanced', key = 'm_paperback_domino' }, - card.ability.extra.xmult_red, card.ability.extra.xmult, } } @@ -40,18 +38,16 @@ SMODS.Joker { calculate = function(self, card, context) if context.before and not context.blueprint then + local upgraded for _, v in ipairs(context.scoring_hand) do if SMODS.has_enhancement(v, 'm_paperback_domino') then card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_mod - return { - message = localize('k_upgrade_ex'), - } + upgraded = true end end - if card.ability.extra.xmult - card.ability.extra.xmult_red > 1 then - card.ability.extra.xmult = card.ability.extra.xmult - card.ability.extra.xmult_red + if upgraded then return { - message = localize('paperback_downgrade_ex'), + message = localize('k_upgrade_ex'), } end end @@ -63,4 +59,17 @@ SMODS.Joker { } end end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "xmult", retrigger_type = "exp" } + } + } + }, + } + end, } diff --git a/content/joker/stamp.lua b/content/joker/stamp.lua index 9c149a08..375ce45c 100644 --- a/content/joker/stamp.lua +++ b/content/joker/stamp.lua @@ -4,7 +4,8 @@ SMODS.Joker { extra = { chips = 0, chip_mod = 25, - odds = 2 + numerator = 2, + denominator = 5, } }, rarity = 3, @@ -18,8 +19,19 @@ SMODS.Joker { perishable_compat = false, pixel_size = { w = 35, h = 45 }, + in_pool = function(self, args) + if G.playing_cards then + for _, card in ipairs(G.playing_cards) do + if card.seal then + return true + end + end + end + end, + loc_vars = function(self, info_queue, card) - local numerator, denominator = PB_UTIL.chance_vars(card) + local numerator, denominator = PB_UTIL.chance_vars(card, nil, card.ability.extra.numerator, + card.ability.extra.denominator) return { vars = { @@ -37,7 +49,7 @@ SMODS.Joker { if context.cardarea == G.play then if context.other_card:get_seal() then -- Gives chips if roll succeeds - if PB_UTIL.chance(card, 'stamp') then + if PB_UTIL.chance(card, 'stamp', self.ability.extra.numerator, self.ability.extra.denominator) then card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_mod card_eval_status_text(card, 'extra', nil, nil, nil, @@ -54,5 +66,34 @@ SMODS.Joker { card = card } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + extra = { + { + { text = '(' }, + { ref_table = 'card.joker_display_values', ref_value = 'odds' }, + { text = ')' }, + }, + }, + extra_config = { + colour = G.C.GREEN, + scale = 0.3, + }, + calc_function = function(card) + card.joker_display_values.odds = localize { type = 'variable', key = 'jdis_odds', + vars = { + PB_UTIL.chance_vars(card, nil, card.ability.extra.numerator, + card.ability.extra.denominator) + } + } + end + } + end, } diff --git a/content/joker/sticky_stick.lua b/content/joker/sticky_stick.lua index a150cd48..f90bc12c 100644 --- a/content/joker/sticky_stick.lua +++ b/content/joker/sticky_stick.lua @@ -2,7 +2,7 @@ SMODS.Joker { key = 'sticky_stick', config = { extra = { - xMult = 1 + xMult_if_stick = 2 } }, rarity = 1, @@ -21,7 +21,7 @@ SMODS.Joker { return { vars = { - card.ability.extra.xMult, + card.ability.extra.xMult_if_stick, xMult } } diff --git a/content/joker/subterfuge.lua b/content/joker/subterfuge.lua index c533d88d..6764cd81 100644 --- a/content/joker/subterfuge.lua +++ b/content/joker/subterfuge.lua @@ -15,21 +15,20 @@ SMODS.Joker { soul_pos = nil, calculate = function(self, card, context) - if not context.blueprint and context.after and context.main_eval then - local destroyed_cards = {} - - for _, v in ipairs(G.play.cards) do - destroyed_cards[#destroyed_cards + 1] = v - end - + if not context.blueprint and context.destroy_card and (context.cardarea == G.play or context.cardarea == 'unscored') then -- Destroy all cards in first hand if G.GAME.current_round.hands_played == 0 then - SMODS.destroy_cards(destroyed_cards) - - return { - message = localize('paperback_destroyed_ex'), - colour = G.C.MULT - } + if context.destroy_card == context.full_hand[#context.full_hand] then + return { + remove = true, + message = localize('paperback_destroyed_ex'), + colour = G.C.RED + } + else + return { + remove = true, + } + end end end end diff --git a/content/joker/summoning_circle.lua b/content/joker/summoning_circle.lua index 8f951b1f..20e21cc9 100644 --- a/content/joker/summoning_circle.lua +++ b/content/joker/summoning_circle.lua @@ -38,6 +38,16 @@ SMODS.Joker { main_end = main_end and main_end[1] } end, + in_pool = function(self, args) + -- Only in pool if you have played a Five of a Kind or a Flush Five + for k, v in pairs(G.GAME.hands) do + if string.find(k, "Five of a Kind", nil, true) or string.find(k, "Flush Five", nil, true) or string.find(k, "Spectrum Five", nil, true) then + if G.GAME.hands[k].played > 0 then + return true + end + end + end + end, calculate = function(self, card, context) if context.before and context.main_eval and next(context.poker_hands[card.ability.extra.hand]) then diff --git a/content/joker/surfer.lua b/content/joker/surfer.lua index f5eaa9bc..712b25c7 100644 --- a/content/joker/surfer.lua +++ b/content/joker/surfer.lua @@ -4,7 +4,6 @@ SMODS.Joker { extra = { chips = 0, a_chips_held = 10, - a_chips_scored = 5, rank = "10", } }, @@ -22,7 +21,6 @@ SMODS.Joker { return { vars = { card.ability.extra.a_chips_held, - card.ability.extra.a_chips_scored, localize(card.ability.extra.rank, 'ranks'), card.ability.extra.chips, } @@ -48,29 +46,21 @@ SMODS.Joker { end end - -- Gains +5 chips for each 10 scored - if context.individual and context.cardarea == G.play and not context.blueprint then - if PB_UTIL.is_rank(context.other_card, card.ability.extra.rank) then - card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.a_chips_scored - - return { - message = localize { - type = 'variable', - key = 'a_chips', - vars = { card.ability.extra.a_chips_scored } - }, - colour = G.C.CHIPS, - juice_card = context.other_card, - message_card = card, - } - end - end - -- Give chips during scoring if context.joker_main then return { chips = card.ability.extra.chips } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + } + end, } diff --git a/content/joker/teapot.lua b/content/joker/teapot.lua new file mode 100644 index 00000000..206a4aa4 --- /dev/null +++ b/content/joker/teapot.lua @@ -0,0 +1,72 @@ +SMODS.Joker { + key = "teapot", + config = { + extra = { + enhancement = "m_paperback_ceramic", + a_chips = 5, + chips = 0, + } + }, + rarity = 1, + pos = { x = 21, y = 7 }, + atlas = "jokers_atlas", + cost = 5, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + soul_pos = nil, + paperback = { + requires_enhancements = true + }, + enhancement_gate = 'm_paperback_ceramic', + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = G.P_CENTERS[card.ability.extra.enhancement] + + return { + vars = { + card.ability.extra.a_chips, + localize { + type = 'name_text', + set = 'Enhanced', + key = card.ability.extra.enhancement + }, + card.ability.extra.chips, + } + } + end, + + calculate = function(self, card, context) + if context.individual and context.cardarea == G.play and not context.blueprint then + if SMODS.has_enhancement(context.other_card, card.ability.extra.enhancement) then + card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.a_chips + return { + message = localize { + type = 'variable', + key = 'a_chips', + vars = { card.ability.extra.chips }, + colour = G.C.FILTER, + }, + } + end + end + + if context.joker_main then + return { + chips = card.ability.extra.chips + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + } + end, +} diff --git a/content/joker/telamon.lua b/content/joker/telamon.lua index 8bed8409..4559cd1d 100644 --- a/content/joker/telamon.lua +++ b/content/joker/telamon.lua @@ -36,17 +36,17 @@ SMODS.Joker { end end - if context.end_of_round and card.ability.extra.active and context.main_eval then - local index = pseudorandom("telamon_minor_arcana", 29, 42) - PB_UTIL.try_spawn_card { key = "c_paperback_" .. PB_UTIL.ENABLED_MINOR_ARCANA[index], func = function() - SMODS.calculate_effect { - message = localize('paperback_plus_minor_arcana'), - colour = G.C.PAPERBACK_MINOR_ARCANA, - card = context.blueprint_card or card - } - return nil, true - end } + return nil, PB_UTIL.try_spawn_card { + set = 'paperback_minor_arcana_swords', + area = G.consumeables, + func = function() + SMODS.calculate_effect { + message = localize('paperback_plus_minor_arcana'), + colour = G.C.PAPERBACK_MINOR_ARCANA, + card = context.blueprint_card or card + } + end } end end } diff --git a/content/joker/the_dynasty.lua b/content/joker/the_dynasty.lua index 41721650..fce34f79 100644 --- a/content/joker/the_dynasty.lua +++ b/content/joker/the_dynasty.lua @@ -24,6 +24,34 @@ if PB_UTIL.should_load_spectrum_items() then localize(card.ability.type, 'poker_hands') } } - end + end, + + -- Copied from JokerDisplay + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "localized_text", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + local x_mult = 1 + local _, poker_hands, _ = JokerDisplay.evaluate_hand() + if poker_hands[card.ability.type] and next(poker_hands[card.ability.type]) then + x_mult = card.ability.Xmult + end + card.joker_display_values.x_mult = x_mult + card.joker_display_values.localized_text = localize(card.ability.type, 'poker_hands') + end + } + end, } end diff --git a/content/joker/the_normal_joker.lua b/content/joker/the_normal_joker.lua index 5e41fc4d..6e62f10f 100644 --- a/content/joker/the_normal_joker.lua +++ b/content/joker/the_normal_joker.lua @@ -26,5 +26,13 @@ SMODS.Joker { } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + retrigger_joker_function = function(card, retrigger_joker) + return card.config.center.rarity == retrigger_joker.ability.extra.rarity and 1 or 0 + end + } + end, } diff --git a/content/joker/the_one_who_waits.lua b/content/joker/the_one_who_waits.lua index a124d98f..f92502a2 100644 --- a/content/joker/the_one_who_waits.lua +++ b/content/joker/the_one_who_waits.lua @@ -6,7 +6,7 @@ SMODS.Joker { upgrade_odds = 3, x_mult = 1, x_mult_mod = 0.1, - tarot_odds = 5 + tarot_odds = 6 } }, rarity = 3, @@ -15,7 +15,7 @@ SMODS.Joker { cost = 8, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, paperback = { requires_custom_suits = true }, @@ -52,20 +52,11 @@ SMODS.Joker { end, calculate = function(self, card, context) - if context.before and not context.blueprint then - local has_suit - - for _, v in ipairs(context.scoring_hand) do - if v:is_suit(card.ability.extra.suit) then - has_suit = true - break - end - end - - if has_suit then + if context.individual and context.cardarea == G.play then + if context.other_card:is_suit(card.ability.extra.suit) then local effects - if PB_UTIL.chance(card, "the_one_who_waits_upgrade", nil, card.ability.extra.upgrade_odds) then + if not context.blueprint and PB_UTIL.chance(card, "the_one_who_waits_upgrade", nil, card.ability.extra.upgrade_odds) then card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.x_mult_mod effects = { @@ -97,5 +88,54 @@ SMODS.Joker { x_mult = card.ability.extra.x_mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + }, + }, + { text = " +", colour = G.C.SECONDARY_SET.Tarot }, + { ref_table = "card.joker_display_values", ref_value = "count", retrigger_type = "mult", colour = G.C.SECONDARY_SET.Tarot }, + }, + extra = { + { + { + border_nodes = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "upgrade_odds" }, + { text = ")" }, + }, + }, + { text = " (", colour = G.C.SECONDARY_SET.Tarot }, + { ref_table = "card.joker_display_values", ref_value = "tarot_odds", colour = G.C.SECONDARY_SET.Tarot }, + { text = ")", colour = G.C.SECONDARY_SET.Tarot }, + } + }, + extra_config = { scale = 0.25 }, + calc_function = function(card) + local count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if scoring_card:is_suit(card.ability.extra.suit) then + count = count + + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + card.joker_display_values.count = count + card.joker_display_values.upgrade_odds = localize { + type = 'variable', key = "jdis_odds", + vars = { PB_UTIL.chance_vars(card, nil, nil, card.ability.extra.upgrade_odds) } + } + card.joker_display_values.tarot_odds = localize { + type = 'variable', key = "jdis_odds", + vars = { PB_UTIL.chance_vars(card, nil, nil, card.ability.extra.tarot_odds) } + } + end + } + end, } diff --git a/content/joker/the_quiet.lua b/content/joker/the_quiet.lua index 51870f32..2bb36115 100644 --- a/content/joker/the_quiet.lua +++ b/content/joker/the_quiet.lua @@ -35,5 +35,22 @@ SMODS.Joker { card.ability.extra.a_xMult * (G.playing_cards and (G.GAME.starting_deck_size - #G.playing_cards) or 0)) } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + calc_function = function(card) + card.joker_display_values.x_mult = 1 + math.max(0, + card.ability.extra.a_xMult * (G.playing_cards and (G.GAME.starting_deck_size - #G.playing_cards) or 0)) + end + } + end, } diff --git a/content/joker/the_strongest.lua b/content/joker/the_strongest.lua new file mode 100644 index 00000000..11cde2d7 --- /dev/null +++ b/content/joker/the_strongest.lua @@ -0,0 +1,81 @@ +SMODS.Joker { + key = "the_strongest", + rarity = 3, + pos = { x = 13, y = 5 }, + atlas = "jokers_atlas", + cost = 4, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + paperback = { + requires_ego_gifts = true + }, + config = { + extra = { + xmult = 1, + xmult_mod = 0.5 + } + }, + + in_pool = function(self, args) + for _, v in ipairs(G.consumeables or {}) do + if PB_UTIL.is_ego_gift(v) then return true end + end + end, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = SMODS.Stickers['paperback_corroded']:info_queue_entry() + return { + vars = { + card.ability.extra.xmult_mod, + card.ability.extra.xmult + } + } + end, + + calculate = function(self, card, context) + -- Upgrade when a sin is activated + if context.paperback and context.paperback.sold_ego_gift then + card.ability.extra.xmult = card.ability.extra.xmult + card.ability.extra.xmult_mod + return { + message = localize { + type = 'variable', + key = 'a_xmult', + vars = { card.ability.extra.xmult } + }, + colour = G.C.RED + } + end + + if context.end_of_round and context.cardarea == G.jokers and G.GAME.blind.boss then + local gifts = {} + for i = 1, #G.consumeables.cards do + if G.consumeables.cards[i].ability.set == 'paperback_ego_gift' and not G.consumeables.cards[i].ability.paperback_corroded then + gifts[#gifts + 1] = G.consumeables.cards[i] + end + end + if next(gifts) then + pseudorandom_element(gifts, pseudoseed("the_strongest_corrode")):add_sticker('paperback_corroded', true) + end + end + + if context.joker_main then + return { + xmult = card.ability.extra.xmult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "xmult", retrigger_type = "exp" } + } + } + }, + } + end, +} diff --git a/content/joker/the_sun.lua b/content/joker/the_sun.lua index b2a671d0..17371214 100644 --- a/content/joker/the_sun.lua +++ b/content/joker/the_sun.lua @@ -14,11 +14,10 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, - perishable_compat = true, + perishable_compat = false, loc_vars = function(self, info_queue, card) info_queue[#info_queue + 1] = PB_UTIL.suit_tooltip('light') - info_queue[#info_queue + 1] = PB_UTIL.suit_tooltip('dark') return { vars = { @@ -30,14 +29,12 @@ SMODS.Joker { calculate = function(self, card, context) if context.before and not context.blueprint then - local upgrade = true - -- Check scoring hand for only light suits + local bad_suit = false + -- Check for no scoring dark suit for _, v in ipairs(context.scoring_hand) do - if not PB_UTIL.is_suit(v, 'light') then - upgrade = false - end + bad_suit = bad_suit or PB_UTIL.is_non_suit(v, 'light') end - if upgrade then + if not bad_suit then card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.a_mult return { message = localize { @@ -52,7 +49,7 @@ SMODS.Joker { if context.individual and context.cardarea == G.play and not context.blueprint then if card.ability.extra.mult > 0 then - if PB_UTIL.is_suit(context.other_card, 'dark') then + if PB_UTIL.is_non_suit(context.other_card, 'light') then card.ability.extra.mult = card.ability.extra.mult - card.ability.extra.a_mult return { message = localize { @@ -71,5 +68,15 @@ SMODS.Joker { mult = card.ability.extra.mult } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, } diff --git a/content/joker/the_sun_rises.lua b/content/joker/the_sun_rises.lua new file mode 100644 index 00000000..8c9df6e7 --- /dev/null +++ b/content/joker/the_sun_rises.lua @@ -0,0 +1,85 @@ +SMODS.Joker { + key = 'the_sun_rises', + config = { + extra = { + set_base_chips = 1, + chips = 0, + chip_inc_per_light = 1, + } + }, + rarity = 3, + pos = { x = 22, y = 1 }, + atlas = 'jokers_atlas', + cost = 8, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = PB_UTIL.suit_tooltip('light') + + return { + vars = { + card.ability.extra.set_base_chips, + card.ability.extra.chips, + card.ability.extra.chip_inc_per_light, + } + } + end, + + calculate = function(self, card, context) + if context.modify_hand then + hand_chips = card.ability.extra.set_base_chips + update_hand_text({ sound = 'chips2', modded = true }, { chips = hand_chips, mult = mult }) + return + end + + if context.individual and context.cardarea == G.play + and PB_UTIL.is_suit(context.other_card, 'light') then + local chips = card.ability.extra.chips + if not context.blueprint then + card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_inc_per_light + end + return { + chips = chips + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "=" }, + { ref_table = "card.ability.extra", ref_value = "set_base_chips" }, + { text = " +" }, + { ref_table = "card.joker_display_values", ref_value = "chips" } + }, + text_config = { colour = G.C.CHIPS }, + reminder_text = { + { text = "(" }, + { + text = localize('paperback_light'), + colour = lighten(G.C.PAPERBACK_LIGHT_SUIT, 0.35) + }, + { text = ")" }, + }, + calc_function = function(card) + local count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if PB_UTIL.is_suit(scoring_card, 'light') then + count = count + + JokerDisplay.calculate_card_triggers(scoring_card, scoring_hand) + end + end + count = count * JokerDisplay.calculate_joker_triggers(card) + + card.joker_display_values.chips = + count * card.ability.extra.chips + + count * (count - 1) / 2 * card.ability.extra.chip_inc_per_light + end + } + end, +} diff --git a/content/joker/the_wonder_of_you.lua b/content/joker/the_wonder_of_you.lua index 3347f371..38ec44f0 100644 --- a/content/joker/the_wonder_of_you.lua +++ b/content/joker/the_wonder_of_you.lua @@ -1,6 +1,11 @@ SMODS.Joker { key = "the_wonder_of_you", - rarity = 3, + config = { + extra = { + tag_count = 2 + } + }, + rarity = 2, pos = { x = 18, y = 4 }, atlas = 'jokers_atlas', cost = 9, @@ -9,33 +14,23 @@ SMODS.Joker { perishable_compat = true, calculate = function(self, card, context) - --Check if the joker to the right has a probability roll - if context.pseudorandom_result and not context.result and context.trigger_obj then - if context.trigger_obj.config and context.trigger_obj.config.center and context.trigger_obj.config.center.set == 'Joker' then - local wonder_Pos = nil - local adjacent_Pos = nil - for i = 1, #G.jokers.cards do - if G.jokers.cards[i] == card then - wonder_Pos = i - end - if G.jokers.cards[i] == context.trigger_obj then - adjacent_Pos = i - end - end - - -- Only activate if the failed joker is to the right of WOU - if wonder_Pos and adjacent_Pos and adjacent_Pos == wonder_Pos + 1 then - if G.hand.cards and #G.hand.cards > 0 then - for i = #G.hand.cards, 1, -1 do - if not G.hand.cards[i].destroyed then - SMODS.destroy_cards(G.hand.cards[i]) - return { - message = localize('paperback_destroyed_ex') - } - end + if context.setting_blind and G.GAME.blind:get_type() == 'Boss' then + for _ = 1, card.ability.extra.tag_count, 1 do + G.E_MANAGER:add_event(Event({ + func = (function() + local tag_pool = get_current_pool('Tag') + local selected_tag = pseudorandom_element(tag_pool, 'modprefix_seed') + local it = 1 + while selected_tag == 'UNAVAILABLE' do + it = it + 1 + selected_tag = pseudorandom_element(tag_pool, 'modprefix_seed_resample' .. it) end - end - end + add_tag(Tag(selected_tag, false, 'Small')) + play_sound('generic1', 0.9 + math.random() * 0.1, 0.8) + play_sound('holo1', 1.2 + math.random() * 0.1, 0.4) + return true + end) + })) end end end diff --git a/content/joker/the_world.lua b/content/joker/the_world.lua index 23d52348..c5e13ccb 100644 --- a/content/joker/the_world.lua +++ b/content/joker/the_world.lua @@ -11,19 +11,23 @@ SMODS.Joker { soul_pos = nil, } -local function wrap_the_world(ignores, func) +local function wrap_the_world(ignores, func, context) local joker = next(SMODS.find_card('j_paperback_the_world')) local previous = { hands_played = G.GAME.current_round.hands_played, hands_left = G.GAME.current_round.hands_left, discards_used = G.GAME.current_round.discards_used, + discards_left = G.GAME.current_round.discards_left, } if joker and not ignores then for k, _ in pairs(previous) do G.GAME.current_round[k] = 0 end + if context and (context.discard or context.pre_discard) then + G.GAME.current_round.discards_left = 1 + end end local ret, ret2 = func() @@ -44,7 +48,7 @@ function Card.calculate_joker(self, context) return wrap_the_world(ignores, function() return calculate_joker_ref(self, context) - end) + end, context) end -- Just handles "The House" calculations for now @@ -52,5 +56,5 @@ local stay_flipped_ref = Blind.stay_flipped function Blind.stay_flipped(self, area, card) return wrap_the_world(nil, function() return stay_flipped_ref(self, area, card) - end) + end, nil) end diff --git a/content/joker/tian_tian.lua b/content/joker/tian_tian.lua new file mode 100644 index 00000000..93fc43fe --- /dev/null +++ b/content/joker/tian_tian.lua @@ -0,0 +1,61 @@ +SMODS.Joker { + key = 'tian_tian', + config = { + extra = { + a_xmult = 0.1, + x_mult = 1, + } + }, + rarity = 3, + pos = { x = 12, y = 9 }, + atlas = 'jokers_atlas', + pools = { + Music = true + }, + cost = 7, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + soul_pos = nil, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.a_xmult, + card.ability.extra.x_mult, + } + } + end, + + calculate = function(self, card, context) + -- Gains x_mult when playing cards are destroyed. Each card destroyed provides the specified xmult_mod + if not context.blueprint and context.remove_playing_cards and context.removed and #context.removed > 0 then + card.ability.extra.x_mult = card.ability.extra.x_mult + (#context.removed * card.ability.extra.a_xmult) + + card_eval_status_text(card, 'extra', nil, nil, nil, + { message = localize { type = 'variable', key = 'a_xmult', vars = { card.ability.extra.x_mult } } }) + end + + -- Gives the x_mult when scoring + if context.joker_main then + return { + x_mult = card.ability.extra.x_mult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.ability.extra", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + } + end, +} diff --git a/content/joker/time_regression_mix.lua b/content/joker/time_regression_mix.lua new file mode 100644 index 00000000..1116b024 --- /dev/null +++ b/content/joker/time_regression_mix.lua @@ -0,0 +1,62 @@ +SMODS.Joker { + key = "time_regression_mix", + config = { + extra = { + a_mult = 2, + mult = 0, + suits = 4 + } + }, + rarity = 1, + pos = { x = 19, y = 10 }, + atlas = "jokers_atlas", + cost = 3, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.suits, + card.ability.extra.a_mult, + card.ability.extra.mult, + } + } + end, + + calculate = function(self, card, context) + if context.before and not context.blueprint then + if PB_UTIL.get_unique_suits(context.scoring_hand, false, true) >= card.ability.extra.suits then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.a_mult + return { + message = localize { + type = 'variable', + key = 'a_mult', + vars = { card.ability.extra.a_mult } + }, + colour = G.C.FILTER + } + end + end + + + if context.joker_main then + return { + mult = card.ability.extra.mult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + } + end, +} diff --git a/content/joker/tome.lua b/content/joker/tome.lua new file mode 100644 index 00000000..ab51953b --- /dev/null +++ b/content/joker/tome.lua @@ -0,0 +1,56 @@ +SMODS.Joker { + key = 'tome', + rarity = 2, + pos = { x = 17, y = 5 }, + atlas = 'jokers_atlas', + cost = 6, + unlocked = true, + discovered = false, + blueprint_compat = false, + eternal_compat = true, + perishable_compat = true, + config = { extra = { slots_per = 1, slots = 1 } }, + + loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.extra.slots_per, + card.ability.extra.slots, + card.ability.extra.slots == 1 and "" or "s", + } } + end, + + add_to_deck = function(self, card, from_debuff) + G.consumeables:change_size(card.ability.extra.slots) + end, + + remove_from_deck = function(self, card, from_debuff) + G.consumeables:change_size(-card.ability.extra.slots) + end, + + update = function(self, card, dt) + if G.jokers then + -- Count the unique rarities using a set + local rarity_set = {} + local count = 0 + for _, joker in ipairs(G.jokers.cards) do + if not rarity_set[joker.config.center.rarity] then + rarity_set[joker.config.center.rarity] = true + count = count + 1 + end + end + if not rarity_set[card.config.center.rarity] then + rarity_set[card.config.center.rarity] = true + count = count + 1 + end + + -- Update consumable limit + if card.added_to_deck then + local change = count - card.ability.extra.slots + if change ~= 0 then + G.consumeables:change_size(change) + end + end + card.ability.extra.slots = count + end + end +} diff --git a/content/joker/trans_flag.lua b/content/joker/trans_flag.lua new file mode 100644 index 00000000..0fbc4e8b --- /dev/null +++ b/content/joker/trans_flag.lua @@ -0,0 +1,47 @@ +SMODS.Joker { + key = 'trans_flag', + config = { + extra = { + a_mult = 5, + } + }, + rarity = 1, + pos = { x = 22, y = 0 }, + atlas = 'jokers_atlas', + cost = 6, + unlocked = true, + discovered = false, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + + loc_vars = function(self, info_queue, card) + local discards = 0 + if G.GAME then discards = G.GAME.current_round.discards_left end + return { + vars = { + card.ability.extra.a_mult, + discards * card.ability.extra.a_mult } + } + end, + calculate = function(self, card, context) + if context.joker_main then + return { + mult = G.GAME.current_round.discards_left * card.ability.extra.a_mult + } + end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + calc_function = function(card) + card.joker_display_values.mult = G.GAME.current_round.discards_left * card.ability.extra.a_mult + end + } + end, +} diff --git a/content/joker/tutor.lua b/content/joker/tutor.lua index e9c980a9..0737fd07 100644 --- a/content/joker/tutor.lua +++ b/content/joker/tutor.lua @@ -10,22 +10,13 @@ SMODS.Joker { } local get_chip_bonus_ref = Card.get_chip_bonus function Card.get_chip_bonus(self) - if next(SMODS.find_card('j_paperback_tutor', false)) then - local exponent = 0 - for i, k in ipairs(G.jokers.cards) do - if k.config.center.key == 'j_paperback_tutor' then - exponent = exponent + 1 - end - end - local multiplier = math.pow(2, exponent) - if not self:is_face() then - if self.ability.extra_enhancement then return self.ability.bonus * multiplier end - - if self.ability.effect == 'Stone Card' or self.config.center.replace_base_card then - return self.ability.bonus + (self.ability.perma_bonus or 0) - end - return (self.base.nominal + self.ability.bonus + (self.ability.perma_bonus or 0)) * multiplier + local res = get_chip_bonus_ref(self) + local cnt = #SMODS.find_card('j_paperback_tutor', false) + if cnt > 0 then + local id = self:get_id() + if 2 <= id and id <= 10 then + res = res * math.pow(2, cnt) end end - return get_chip_bonus_ref(self) + return res end diff --git a/content/joker/unholy_alliance.lua b/content/joker/unholy_alliance.lua index 4c8ae925..c6103653 100644 --- a/content/joker/unholy_alliance.lua +++ b/content/joker/unholy_alliance.lua @@ -7,10 +7,10 @@ SMODS.Joker { revive_treshold = 666 } }, - rarity = 2, + rarity = 1, pos = { x = 6, y = 4 }, atlas = 'jokers_atlas', - cost = 7, + cost = 6, unlocked = true, discovered = false, blueprint_compat = true, @@ -28,33 +28,26 @@ SMODS.Joker { end, calculate = function(self, card, context) - -- Gains chips when jokers are destroyed - if not context.blueprint and context.paperback and context.paperback.destroying_joker then - -- Make sure that this joker isn't being removed - if card ~= context.paperback.destroyed_joker then - card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.a_chips + local count = PB_UTIL.count_destroyed_things(context) + -- Gains chips when any cards are destroyed. Each card destroyed provides the specified chip_mod + if not context.blueprint and count > 0 + -- Make sure that this joker isn't being removed + and not (context.paperback and context.paperback.destroyed_joker and card == context.paperback.destroyed_joker) + then + card.ability.extra.chips = card.ability.extra.chips + count * card.ability.extra.a_chips - return { - message = localize { - type = 'variable', - key = 'a_chips', - vars = { card.ability.extra.a_chips } - }, - colour = G.C.CHIPS - } - end - end - - -- Gains chips when playing cards are destroyed. Each card destroyed provides the specified chip_mod - if not context.blueprint and context.remove_playing_cards and context.removed and #context.removed > 0 then - card.ability.extra.chips = card.ability.extra.chips + (#context.removed * card.ability.extra.a_chips) - - card_eval_status_text(card, 'extra', nil, nil, nil, - { message = localize { type = 'variable', key = 'a_chips', vars = { card.ability.extra.chips } } }) + return { + message = localize { + type = 'variable', + key = 'a_chips', + vars = { count * card.ability.extra.a_chips } + }, + colour = G.C.CHIPS + } end -- Gives the chips when scoring - if context.joker_main then + if context.joker_main and card.ability.extra.chips > 0 then return { chips = card.ability.extra.chips } @@ -72,5 +65,15 @@ SMODS.Joker { } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.ability.extra", ref_value = "chips", retrigger_type = "mult" } + }, + text_config = { colour = G.C.CHIPS }, + } + end, } diff --git a/content/joker/union_card.lua b/content/joker/union_card.lua index 5fa853d8..0e5eb848 100644 --- a/content/joker/union_card.lua +++ b/content/joker/union_card.lua @@ -59,7 +59,38 @@ SMODS.Joker { } end end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { + border_nodes = { + { text = "X" }, + { ref_table = "card.joker_display_values", ref_value = "x_mult", retrigger_type = "exp" } + } + } + }, + reminder_text = { + { text = "(" }, + { + text = localize('paperback_light'), + colour = lighten(G.C.PAPERBACK_LIGHT_SUIT, 0.35) + }, + { text = ")" }, + }, + calc_function = function(card) + local count = 0 + local _, _, scoring_hand = JokerDisplay.evaluate_hand() + for _, scoring_card in pairs(scoring_hand) do + if PB_UTIL.is_suit(scoring_card, 'light') then + count = count + 1 + end + end + card.joker_display_values.x_mult = math.max(count, 1) + end, + } + end, } -- If user has Union Card, set the newly acquired card's sell cost to $0 diff --git a/content/joker/unionized_labor.lua b/content/joker/unionized_labor.lua new file mode 100644 index 00000000..07ec5f89 --- /dev/null +++ b/content/joker/unionized_labor.lua @@ -0,0 +1,31 @@ +SMODS.Joker { + key = "unionized_labor", + blueprint_compat = true, + rarity = 2, + cost = 7, + pos = { x = 20, y = 5 }, + atlas = "jokers_atlas", + perishable_compat = false, + config = { extra = { dollars = 25 } }, + loc_vars = function(self, info_queue, card) + local n, d = PB_UTIL.chance_vars(nil, nil, 1, 3) -- example + if not G.jokers then + -- outside game, manually modify + n = n * 3 + end + return { vars = { card.ability.extra.dollars, n, d } } + end, + calculate = function(self, card, context) + if context.mod_probability and not context.blueprint then + if to_big(G.GAME.dollars) <= to_big(card.ability.extra.dollars) then + return { + numerator = context.numerator * 3 + } + else + return { + denominator = context.denominator * 2 + } + end + end + end +} diff --git a/content/joker/vacation_juice.lua b/content/joker/vacation_juice.lua new file mode 100644 index 00000000..f3798733 --- /dev/null +++ b/content/joker/vacation_juice.lua @@ -0,0 +1,53 @@ +SMODS.Joker { + key = "vacation_juice", + config = { + extra = { + drank_after = 2 + } + }, + rarity = 3, + pos = { x = 14, y = 9 }, + atlas = "jokers_atlas", + cost = 10, + unlocked = true, + discovered = false, + blueprint_compat = false, + eternal_compat = false, + pools = { + Food = true + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.drank_after, + card.ability.extra.drank_after == 1 and "" or "s" + } + } + end, + + calculate = function(self, card, context) + if not context.blueprint and context.end_of_round and context.main_eval + and not G.GAME.paperback.vacation_juice_trigger + and G.GAME.paperback.last_blind_type_defeated_this_ante ~= G.GAME.blind:get_type() then + card.ability.extra.drank_after = card.ability.extra.drank_after - 1 + G.GAME.paperback.vacation_juice_trigger = true + + if card.ability.extra.drank_after <= 0 then + PB_UTIL.destroy_joker(card) + return { + message = localize('k_drank_ex'), + colour = G.C.BLUE + } + else + return { + message = localize { + type = 'variable', + key = 'a_remaining', + vars = { card.ability.extra.drank_after } + } + } + end + end + end, +} diff --git a/content/joker/weather_radio.lua b/content/joker/weather_radio.lua index b891da7a..54171bbb 100644 --- a/content/joker/weather_radio.lua +++ b/content/joker/weather_radio.lua @@ -16,6 +16,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, + perishable_compat = false, loc_vars = function(self, info_queue, card) local hand = G.GAME.paperback.weather_radio_hand diff --git a/content/joker/white_night.lua b/content/joker/white_night.lua index a310fd13..0b4d96c2 100644 --- a/content/joker/white_night.lua +++ b/content/joker/white_night.lua @@ -16,7 +16,9 @@ SMODS.Joker { eternal_compat = true, perishable_compat = false, paperback = { - requires_ranks = true + requires_ranks = true, + permanently_eternal = true, + indestructible = true, }, specific_vars = { diff --git a/content/joker/wild_plus_four.lua b/content/joker/wild_plus_four.lua index b4200f9f..75c767c8 100644 --- a/content/joker/wild_plus_four.lua +++ b/content/joker/wild_plus_four.lua @@ -9,17 +9,21 @@ SMODS.Joker { blueprint_compat = false, eternal_compat = true, perishable_compat = true, - config = { extra = { h_size = 4 } }, + config = { extra = { h_size = 4, hands = -1 } }, loc_vars = function(self, info_queue, card) - return { vars = { card.ability.extra.h_size } } + return { vars = { card.ability.extra.h_size, card.ability.extra.hands } } end, add_to_deck = function(self, card, from_debuff) G.hand:change_size(card.ability.extra.h_size) + G.GAME.round_resets.hands = G.GAME.round_resets.hands + card.ability.extra.hands + ease_hands_played(card.ability.extra.hands) end, remove_from_deck = function(self, card, from_debuff) G.hand:change_size(-card.ability.extra.h_size) + G.GAME.round_resets.hands = G.GAME.round_resets.hands - card.ability.extra.hands + ease_hands_played(-card.ability.extra.hands) end } diff --git a/content/joker/wish_you_were_here.lua b/content/joker/wish_you_were_here.lua index af919836..629dadae 100644 --- a/content/joker/wish_you_were_here.lua +++ b/content/joker/wish_you_were_here.lua @@ -3,7 +3,7 @@ SMODS.Joker { config = { extra = { sv_gain = 1, - mult_mod = 3 + mult_mod = 2 } }, rarity = 2, @@ -14,6 +14,7 @@ SMODS.Joker { discovered = false, blueprint_compat = true, eternal_compat = true, + perishable_compat = false, soul_pos = nil, loc_vars = function(self, info_queue, card) @@ -44,5 +45,25 @@ SMODS.Joker { colour = G.C.MONEY } end - end + end, + + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { text = "$", colour = G.C.GOLD }, + { ref_table = "card", ref_value = "sell_cost", colour = G.C.GOLD }, + { text = ")" }, + }, + reminder_text_config = { scale = 0.35 }, + calc_function = function(card) + card.joker_display_values.mult = card.ability.extra.mult_mod * card.sell_cost + end + } + end, } diff --git a/content/joker/zealous_joker.lua b/content/joker/zealous_joker.lua index 43cdc2ac..044ec8e8 100644 --- a/content/joker/zealous_joker.lua +++ b/content/joker/zealous_joker.lua @@ -24,6 +24,31 @@ if PB_UTIL.should_load_spectrum_items() then localize(card.ability.type, 'poker_hands') } } - end + end, + + -- Copied from JokerDisplay + joker_display_def = function(JokerDisplay) + return { + text = { + { text = "+" }, + { ref_table = "card.joker_display_values", ref_value = "mult", retrigger_type = "mult" } + }, + text_config = { colour = G.C.MULT }, + reminder_text = { + { text = "(" }, + { ref_table = "card.joker_display_values", ref_value = "localized_text", colour = G.C.ORANGE }, + { text = ")" }, + }, + calc_function = function(card) + local mult = 0 + local _, poker_hands, _ = JokerDisplay.evaluate_hand() + if poker_hands[card.ability.type] and next(poker_hands[card.ability.type]) then + mult = card.ability.t_mult + end + card.joker_display_values.mult = mult + card.joker_display_values.localized_text = localize(card.ability.type, 'poker_hands') + end + } + end, } end diff --git a/content/minor_arcana/eight_of_pentacles.lua b/content/minor_arcana/eight_of_pentacles.lua new file mode 100644 index 00000000..3b204dcd --- /dev/null +++ b/content/minor_arcana/eight_of_pentacles.lua @@ -0,0 +1,38 @@ +PB_UTIL.MinorArcana { + key = 'eight_of_pentacles', + config = { + extra = { + money = 1, + } + }, + atlas = 'minor_arcana_atlas', + pos = { x = 0, y = 7 }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.money, + (G.GAME.paperback.arcana_used and #G.GAME.paperback.arcana_used or 0) * card.ability.extra.money + } + } + end, + + can_use = function(self, card) + return true + end, + + use = function(self, card, area) + local amount = #G.GAME.paperback.arcana_used + + G.E_MANAGER:add_event(Event { + trigger = 'after', + delay = 0.4, + func = function() + if amount > 0 then + ease_dollars(amount * card.ability.extra.money) + end + return true + end + }) + end +} diff --git a/content/minor_arcana/five_of_pentacles.lua b/content/minor_arcana/five_of_pentacles.lua new file mode 100644 index 00000000..e67232af --- /dev/null +++ b/content/minor_arcana/five_of_pentacles.lua @@ -0,0 +1,14 @@ +PB_UTIL.MinorArcana { + key = 'five_of_pentacles', + config = { + max_highlighted = 1, + mod_conv = 'm_paperback_antique' + }, + atlas = 'minor_arcana_atlas', + pos = { x = 4, y = 6 }, + unlocked = true, + discovered = false, + paperback = { + requires_enhancements = true + } +} diff --git a/content/minor_arcana/five_of_swords.lua b/content/minor_arcana/five_of_swords.lua index 29b4aac9..52fe0ef2 100644 --- a/content/minor_arcana/five_of_swords.lua +++ b/content/minor_arcana/five_of_swords.lua @@ -3,8 +3,7 @@ PB_UTIL.MinorArcana { atlas = 'minor_arcana_atlas', pos = { x = 4, y = 4 }, config = { - min_highlighted = 3, - max_highlighted = 3, + max_highlighted = 1, }, loc_vars = function(self, info_queue, card) @@ -16,8 +15,7 @@ PB_UTIL.MinorArcana { end, use = function(self, card) - local cards = PB_UTIL.get_sorted_by_position(G.hand) - local target = table.remove(cards, 1) + local target = PB_UTIL.get_sorted_by_position(G.hand)[1] -- Collect which modifiers the target doesn't have local modifiers = {} @@ -61,8 +59,6 @@ PB_UTIL.MinorArcana { target:set_edition(edition, true) end - - SMODS.destroy_cards(cards) end) end } diff --git a/content/minor_arcana/four_of_pentacles.lua b/content/minor_arcana/four_of_pentacles.lua new file mode 100644 index 00000000..914153e3 --- /dev/null +++ b/content/minor_arcana/four_of_pentacles.lua @@ -0,0 +1,50 @@ +PB_UTIL.MinorArcana { + key = 'four_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 3, y = 6 }, + config = { + min_highlighted = 4, + max_highlighted = 4, + extra = { + numerator = 1, + denominator = 2 + } + }, + + loc_vars = function(self, info_queue, card) + local num, dem = SMODS.get_probability_vars( + card, + card.ability.extra.numerator, + card.ability.extra.denominator, + "paperback_four_of_pentacles" + ) + return { vars = { + card.ability.max_highlighted, + num, + dem + } } + end, + + use = function(self, card, area) + local cards = {} + + for _, v in ipairs(G.hand.cards) do + if (not v.highlighted) + and SMODS.pseudorandom_probability( + card, + "four_of_pentacles", + card.ability.extra.numerator, + card.ability.extra.denominator, + "paperback_four_of_pentacles") + then + cards[#cards + 1] = v + end + end + + PB_UTIL.use_consumable_animation(card, nil, function() + if #cards > 0 then + SMODS.destroy_cards(cards) + end + end) + end +} diff --git a/content/minor_arcana/king_of_pentacles.lua b/content/minor_arcana/king_of_pentacles.lua new file mode 100644 index 00000000..59c7e28a --- /dev/null +++ b/content/minor_arcana/king_of_pentacles.lua @@ -0,0 +1,51 @@ +PB_UTIL.MinorArcana { + key = 'king_of_pentacles', + config = { + extra = { + money = 1, + } + }, + atlas = 'minor_arcana_atlas', + pos = { x = 6, y = 7 }, + + loc_vars = function(self, info_queue, card) + local faces = 0 + if G.playing_cards then + for k, v in ipairs(G.playing_cards) do + if v:is_face(true) then faces = faces + 1 end + end + elseif G.STATE == G.STATES.MENU then + faces = 12 + end + return { + vars = { + card.ability.extra.money, + faces * card.ability.extra.money + } + } + end, + + can_use = function(self, card) + return true + end, + + use = function(self, card, area) + local faces = 0 + if G.playing_cards then + for k, v in ipairs(G.playing_cards) do + if v:is_face(true) then faces = faces + 1 end + end + end + + G.E_MANAGER:add_event(Event { + trigger = 'after', + delay = 0.4, + func = function() + if faces > 0 then + ease_dollars(faces * card.ability.extra.money) + end + return true + end + }) + end +} diff --git a/content/minor_arcana/knight_of_pentacles.lua b/content/minor_arcana/knight_of_pentacles.lua new file mode 100644 index 00000000..e3ecaff9 --- /dev/null +++ b/content/minor_arcana/knight_of_pentacles.lua @@ -0,0 +1,21 @@ +PB_UTIL.MinorArcana { + key = 'knight_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 4, y = 7 }, + + can_use = function(self, card) + return true + end, + + loc_vars = function(self, info_queue, card) + return { + vars = { + (G.STATE == G.STATES.MENU and 5) or G.GAME.round_resets.reroll_cost + } + } + end, + + use = function(self, card, area) + G.GAME.current_round.reroll_cost = G.GAME.round_resets.reroll_cost + end +} diff --git a/content/minor_arcana/nine_of_pentacles.lua b/content/minor_arcana/nine_of_pentacles.lua new file mode 100644 index 00000000..cc1b8bcc --- /dev/null +++ b/content/minor_arcana/nine_of_pentacles.lua @@ -0,0 +1,12 @@ +PB_UTIL.MinorArcana { + key = 'nine_of_pentacles', + config = { + max_highlighted = 1, + paperclip = 'purple' + }, + atlas = 'minor_arcana_atlas', + pos = { x = 1, y = 7 }, + paperback = { + requires_paperclips = true + } +} diff --git a/content/minor_arcana/nine_of_swords.lua b/content/minor_arcana/nine_of_swords.lua index bc5206da..ce92717c 100644 --- a/content/minor_arcana/nine_of_swords.lua +++ b/content/minor_arcana/nine_of_swords.lua @@ -2,32 +2,42 @@ PB_UTIL.MinorArcana { key = 'nine_of_swords', config = { extra = { - max_jokers = 1 + max_jokers = 1, + money = 5, } }, atlas = 'minor_arcana_atlas', pos = { x = 1, y = 5 }, can_use = function(self, card) - -- Prevent changing eternal jokers if #G.jokers.highlighted == card.ability.extra.max_jokers then - return not SMODS.is_eternal(G.jokers.highlighted[1], card) + return true end end, loc_vars = function(self, info_queue, card) return { vars = { - card.ability.extra.max_jokers + card.ability.extra.max_jokers, + card.ability.extra.money, } } end, use = function(self, card, area) local joker = G.jokers.highlighted[1] + if joker.config.center.paperback and joker.config.center.paperback.indestructible then + -- Same as two of pentacles, bit of a hack + G.P_CENTERS[card.config.center.key].shatters = true + SMODS.destroy_cards(card) + G.P_CENTERS[card.config.center.key].shatters = false + return + end + G.GAME.paperback.banned_run_keys[joker.config.center_key] = true PB_UTIL.destroy_joker(joker, function() card:juice_up() + ease_dollars(card.ability.extra.money, true) end) end } diff --git a/content/minor_arcana/page_of_pentacles.lua b/content/minor_arcana/page_of_pentacles.lua new file mode 100644 index 00000000..438672b7 --- /dev/null +++ b/content/minor_arcana/page_of_pentacles.lua @@ -0,0 +1,12 @@ +PB_UTIL.MinorArcana { + key = 'page_of_pentacles', + config = { + max_highlighted = 2, + mod_conv = 'm_paperback_sleeved' + }, + atlas = 'minor_arcana_atlas', + pos = { x = 3, y = 7 }, + paperback = { + requires_enhancements = true + } +} diff --git a/content/minor_arcana/queen_of_pentacles.lua b/content/minor_arcana/queen_of_pentacles.lua new file mode 100644 index 00000000..6e9d37bc --- /dev/null +++ b/content/minor_arcana/queen_of_pentacles.lua @@ -0,0 +1,37 @@ +PB_UTIL.MinorArcana { + key = 'queen_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 5, y = 7 }, + config = { + min_highlighted = 2, + max_highlighted = 2, + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.max_highlighted, + } + } + end, + + can_use = function(self, card) + if #G.hand.highlighted <= card.ability.max_highlighted and #G.hand.highlighted >= card.ability.min_highlighted then + local cards = PB_UTIL.get_sorted_by_position(G.hand) + local source = cards[1] + return not SMODS.has_no_rank(source) + end + end, + + use = function(self, card) + local cards = PB_UTIL.get_sorted_by_position(G.hand) + local source = cards[1] + local rank = source.base.value + + PB_UTIL.use_consumable_animation(card, cards, function() + for i = 2, #cards do + SMODS.change_base(cards[i], nil, rank) + end + end) + end +} diff --git a/content/minor_arcana/queen_of_swords.lua b/content/minor_arcana/queen_of_swords.lua index 92f60017..cf374942 100644 --- a/content/minor_arcana/queen_of_swords.lua +++ b/content/minor_arcana/queen_of_swords.lua @@ -21,14 +21,23 @@ PB_UTIL.MinorArcana { use = function(self, card, area) local ref = G.hand.highlighted[1].base.suit local targets = {} - local attempts = 0 + local possible_targets = {} + -- Collect the possible targets + for _, c in ipairs(G.playing_cards) do + if not SMODS.has_no_suit(c) and c.base.suit ~= ref then + table.insert(possible_targets, c) + end + end - while #targets < card.ability.targets and attempts <= #G.playing_cards do - local target = pseudorandom_element(G.playing_cards, pseudoseed('queen_of_swords')) - if not SMODS.has_no_suit(target) and target.base.suit ~= ref then - table.insert(targets, target) + while #targets < card.ability.targets and #possible_targets > 0 do + local target = pseudorandom_element(possible_targets, pseudoseed('queen_of_swords')) + table.insert(targets, target) + -- Get rid of possible targets with the same suit as chosen `target` + for i = #possible_targets, 1, -1 do + if possible_targets[i].base.suit == target.base.suit then + table.remove(possible_targets, i) + end end - attempts = attempts + 1 end PB_UTIL.use_consumable_animation(card, G.hand.highlighted, function() diff --git a/content/minor_arcana/seven_of_cups.lua b/content/minor_arcana/seven_of_cups.lua index ad83c186..a6e01d96 100644 --- a/content/minor_arcana/seven_of_cups.lua +++ b/content/minor_arcana/seven_of_cups.lua @@ -1,7 +1,7 @@ PB_UTIL.MinorArcana { key = 'seven_of_cups', config = { - max_highlighted = 3 + max_highlighted = 2 }, atlas = 'minor_arcana_atlas', pos = { x = 6, y = 0 }, diff --git a/content/minor_arcana/seven_of_pentacles.lua b/content/minor_arcana/seven_of_pentacles.lua new file mode 100644 index 00000000..d325aabf --- /dev/null +++ b/content/minor_arcana/seven_of_pentacles.lua @@ -0,0 +1,12 @@ +PB_UTIL.MinorArcana { + key = 'seven_of_pentacles', + config = { + max_highlighted = 2, + paperclip = 'green' + }, + atlas = 'minor_arcana_atlas', + pos = { x = 6, y = 6 }, + paperback = { + requires_paperclips = true + } +} diff --git a/content/minor_arcana/six_of_pentacles.lua b/content/minor_arcana/six_of_pentacles.lua new file mode 100644 index 00000000..945ed64d --- /dev/null +++ b/content/minor_arcana/six_of_pentacles.lua @@ -0,0 +1,32 @@ +PB_UTIL.MinorArcana { + key = 'six_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 5, y = 6 }, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = G.P_TAGS.tag_investment + info_queue[#info_queue + 1] = G.P_TAGS.tag_economy + info_queue[#info_queue + 1] = G.P_TAGS.tag_coupon + info_queue[#info_queue + 1] = G.P_TAGS.tag_d_six + info_queue[#info_queue + 1] = G.P_TAGS.tag_juggle + end, + + can_use = function(self, card) + return true + end, + + use = function(self, card, area) + local tags = { + 'tag_investment', + 'tag_economy', + 'tag_coupon', + 'tag_d_six', + 'tag_juggle' + } + local tag = PB_UTIL.poll_tag("six_of_pentacles", tags) + + PB_UTIL.use_consumable_animation(card, nil, function() + PB_UTIL.add_tag(tag) + end) + end +} diff --git a/content/minor_arcana/ten_of_pentacles.lua b/content/minor_arcana/ten_of_pentacles.lua new file mode 100644 index 00000000..80bd7ad8 --- /dev/null +++ b/content/minor_arcana/ten_of_pentacles.lua @@ -0,0 +1,25 @@ +PB_UTIL.MinorArcana { + key = 'ten_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 2, y = 7 }, + + config = { extra = { + min = 5, + max = 10 + } }, + + loc_vars = function(self, info_queue, card) + return { vars = { + card.ability.extra.min, + card.ability.extra.max + } } + end, + + can_use = function(self, card) + return true + end, + + use = function(self, card) + ease_dollars(pseudorandom("ten_of_pentacles", card.ability.extra.min, card.ability.extra.max)) + end +} diff --git a/content/minor_arcana/three_of_pentacles.lua b/content/minor_arcana/three_of_pentacles.lua new file mode 100644 index 00000000..5fdef772 --- /dev/null +++ b/content/minor_arcana/three_of_pentacles.lua @@ -0,0 +1,29 @@ +PB_UTIL.MinorArcana { + key = 'three_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 2, y = 6 }, + config = { + min_highlighted = 3, + max_highlighted = 3, + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.max_highlighted, + } + } + end, + + use = function(self, card) + local cards = PB_UTIL.get_sorted_by_position(G.hand) + local target = cards[1] + local enhancement = target.config.center.key + + PB_UTIL.use_consumable_animation(card, cards, function() + for i = 2, #cards do + cards[i]:set_ability(enhancement) + end + end) + end +} diff --git a/content/minor_arcana/two_of_pentacles.lua b/content/minor_arcana/two_of_pentacles.lua new file mode 100644 index 00000000..9766cc57 --- /dev/null +++ b/content/minor_arcana/two_of_pentacles.lua @@ -0,0 +1,55 @@ +PB_UTIL.MinorArcana { + key = 'two_of_pentacles', + atlas = 'minor_arcana_atlas', + pos = { x = 1, y = 6 }, + + in_pool = function(self, args) + if G.GAME.challenge then + -- if challenge starts with eternal jokers then return false + for i, v in ipairs(SMODS.Challenges[G.GAME.challenge].jokers) do + if v.eternal then return false end + end + if G.GAME.challenge == "c_non_perishable_1" or G.GAME.challenge == "c_typecast_1" then + return false + end + end + return true + end, + + can_use = function(self, card) + if G.jokers and #G.jokers.highlighted == 1 then + local joker = G.jokers.highlighted[1] + + -- checks for non-compatible jokers that have eternal anyway + -- just in case :P + return joker.config.center.eternal_compat or joker.ability.eternal + end + end, + + keep_on_use = function(self, card) + return G.jokers.highlighted[1].config.center.paperback and G.jokers.highlighted[1].config.center.paperback.permanently_eternal + end, + + use = function(self, card) + local joker = G.jokers.highlighted[1] + + if joker.config.center.paperback and joker.config.center.paperback.permanently_eternal then + G.P_CENTERS[card.config.center.key].shatters = true + SMODS.destroy_cards(card) + G.P_CENTERS[card.config.center.key].shatters = false + else + PB_UTIL.use_consumable_animation(card, joker, function() + if joker.ability.eternal then + joker:set_eternal(false) + else + if joker.ability.perishable then + joker.ability.perishable = nil + joker.ability.perish_tally = nil + SMODS.recalc_debuff(joker) + end + joker:set_eternal(true) + end + end) + end + end +} diff --git a/content/paperclip/black_clip.lua b/content/paperclip/black_clip.lua index 3741e11b..a0f50c07 100644 --- a/content/paperclip/black_clip.lua +++ b/content/paperclip/black_clip.lua @@ -5,19 +5,21 @@ PB_UTIL.Paperclip { badge_colour = G.C.PAPERBACK_BLACK, calculate = function(self, card, context) - if context.repetition and context.cardarea == G.play then - local reps = 0 + if context.repetition and context.cardarea == G.play and not context.platinum_trigger then + local clip_held = false for _, v in ipairs(G.hand.cards) do if not v.debuff and PB_UTIL.has_paperclip(v) then - reps = reps + 1 + clip_held = true break end end - return { - repetitions = reps - } + if clip_held then + return { + repetitions = 1 + } + end end end } diff --git a/content/paperclip/gold_clip.lua b/content/paperclip/gold_clip.lua index 39c86024..86d21aef 100644 --- a/content/paperclip/gold_clip.lua +++ b/content/paperclip/gold_clip.lua @@ -4,15 +4,20 @@ PB_UTIL.Paperclip { pos = { x = 2, y = 0 }, badge_colour = G.C.GOLD, badge_text_colour = G.C.WHITE, + shiny = true, config = { money = 1, + max_money = 10, }, loc_vars = function(self, info_queue, card) return { vars = { card.ability[self.key].money, - G.GAME.paperback.round.scored_clips or 0 + math.min( + card.ability[self.key].money * (G.GAME.paperback.round.scored_clips or 0), + card.ability[self.key].max_money), + card.ability[self.key].max_money } } end, @@ -21,7 +26,9 @@ PB_UTIL.Paperclip { if context.playing_card_end_of_round then if context.cardarea == G.hand and not context.repetition and not context.individual and G.GAME.paperback.round.scored_clips > 0 then return { - dollars = card.ability[self.key].money * (G.GAME.paperback.round.scored_clips or 0) + dollars = math.min( + card.ability[self.key].money * (G.GAME.paperback.round.scored_clips or 0), + card.ability[self.key].max_money) } end end diff --git a/content/paperclip/green_clip.lua b/content/paperclip/green_clip.lua new file mode 100644 index 00000000..38c3dddb --- /dev/null +++ b/content/paperclip/green_clip.lua @@ -0,0 +1,30 @@ +PB_UTIL.Paperclip { + key = 'green_clip', + atlas = 'paperclips_atlas', + pos = { x = 1, y = 1 }, + badge_colour = G.C.GREEN, + config = { + mult = 0, + mult_plus = 1, + mult_minus = 5, + odd = 0 + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability[self.key].mult, + card.ability[self.key].mult_plus, + -card.ability[self.key].mult_minus + } + } + end, + + calculate = function(self, card, context) + if context.main_scoring and context.cardarea == G.play and card.ability[self.key].mult > 0 then + return { + mult = card.ability[self.key].mult + } + end + end +} diff --git a/content/paperclip/pink_clip.lua b/content/paperclip/pink_clip.lua index 02affd73..0df9d42b 100644 --- a/content/paperclip/pink_clip.lua +++ b/content/paperclip/pink_clip.lua @@ -1,7 +1,7 @@ PB_UTIL.Paperclip { key = 'pink_clip', atlas = 'paperclips_atlas', - pos = { x = 3, y = 1 }, + pos = { x = 4, y = 1 }, badge_colour = G.C.PAPERBACK_PINK, config = { x_mult = 1, diff --git a/content/paperclip/platinum_clip.lua b/content/paperclip/platinum_clip.lua new file mode 100644 index 00000000..dd6ef4d1 --- /dev/null +++ b/content/paperclip/platinum_clip.lua @@ -0,0 +1,127 @@ +PB_UTIL.Paperclip { + key = 'platinum_clip', + atlas = 'paperclips_atlas', + pos = { x = 5, y = 0 }, + badge_colour = G.C.PAPERBACK_PLATINUM, + badge_text_colour = G.C.WHITE, + shiny = true, + + calculate = function(self, card, context) + if context.main_scoring and context.cardarea == G.play then + return { func = function() + for i, v in ipairs(G.hand.cards) do + local other_clip = not v.debuff and PB_UTIL.has_paperclip(v) + if other_clip then + local ctx = context + local effect = PB_UTIL.platinum_effects[other_clip](v, ctx) + if effect then + SMODS.calculate_effect(effect, v) + -- count as scored clip for consistency + G.GAME.paperback.round.scored_clips = G.GAME.paperback.round.scored_clips + 1 + end + end + end + end} + end + end +} + +PB_UTIL.platinum_effects = { + paperback_white_clip = function(card) + SMODS.calculate_effect( { chips = card.ability.paperback_white_clip.chips }, card) + end, + + paperback_black_clip = function(card, context) + local ctx = { + cardarea = G.play, + full_hand = G.play.cards, + scoring_hand = context.scoring_hand, + scoring_name = context.scoring_name, + poker_hands = context.poker_hands, + platinum_trigger = true + } + + if card:can_calculate() then + SMODS.score_card(card, ctx) + end + end, + + paperback_gold_clip = function(card) + local money = card.ability.paperback_gold_clip.money * (G.GAME.paperback.round.scored_clips or 0) + return { dollars = math.min(money, card.ability.paperback_gold_clip.max_money) } + end, + + paperback_red_clip = function(card) + local clips = PB_UTIL.count_paperclips { area = G.hand } + return { mult = card.ability.paperback_red_clip.mult_mod * clips } + end, + + paperback_orange_clip = function(card) + local clips = PB_UTIL.count_paperclips { area = G.hand } + if clips >= card.ability.paperback_orange_clip.every then + local clip_groups = math.floor(clips / card.ability.paperback_orange_clip.every) + local money = card.ability.paperback_orange_clip.money * clip_groups + return { dollars = money } + end + end, + + paperback_yellow_clip = function(card) + local clip = card.ability.paperback_yellow_clip + local effect = {} + if PB_UTIL.chance(card, 'yellow_clip_money', nil, clip.dollar_odds) then + effect.dollars = clip.dollars + end + if PB_UTIL.chance(card, 'yellow_clip_mult', nil, clip.mult_odds) then + effect.mult = clip.mult + end + if PB_UTIL.chance(card, 'yellow_clip_xmult', nil, clip.xmult_odds) then + effect.xmult = clip.xmult + end + return effect + end, + + paperback_green_clip = function(card) + return { mult = card.ability.paperback_green_clip.mult } + end, + + paperback_blue_clip = function(card) + local clips = PB_UTIL.count_paperclips { area = G.hand } + local clip = card.ability.paperback_blue_clip + return { x_chips = clip.x_chips_base + clips * clip.x_chips_mod } + end, + + paperback_purple_clip = function(card, context) + local ctx = { + cardarea = G.play, + full_hand = G.play.cards, + scoring_hand = context.scoring_hand, + scoring_name = context.scoring_name, + poker_hands = context.poker_hands, + platinum_trigger = true + } + + local index = 0 + for k, v in ipairs(G.hand.cards) do + if v == card then + index = k + break + end + end + + local left = G.hand.cards[index - 1] + local right = G.hand.cards[index + 1] + if left and PB_UTIL.has_paperclip(left) and left:can_calculate() then + SMODS.score_card(left, ctx) + end + if right and PB_UTIL.has_paperclip(right) and right:can_calculate() then + SMODS.score_card(right, ctx) + end + end, + + paperback_pink_clip = function(card) + return { x_mult = card.ability.paperback_pink_clip.x_mult } + end, + + paperback_platinum_clip = function() + end +} diff --git a/content/paperclip/purple_clip.lua b/content/paperclip/purple_clip.lua new file mode 100644 index 00000000..34948aef --- /dev/null +++ b/content/paperclip/purple_clip.lua @@ -0,0 +1,6 @@ +PB_UTIL.Paperclip { + key = 'purple_clip', + atlas = 'paperclips_atlas', + pos = { x = 3, y = 1 }, + badge_colour = G.C.PURPLE +} diff --git a/content/paperclip/white_clip.lua b/content/paperclip/white_clip.lua index 57883aaa..d83cfba5 100644 --- a/content/paperclip/white_clip.lua +++ b/content/paperclip/white_clip.lua @@ -5,7 +5,7 @@ PB_UTIL.Paperclip { badge_colour = G.C.WHITE, badge_text_colour = G.C.PAPERBACK_BLACK, config = { - chip_mod = 1, + chip_mod = 2, chips = 0 }, diff --git a/content/partner/virtual.lua b/content/partner/virtual.lua index 2f8e3a75..657aefb5 100644 --- a/content/partner/virtual.lua +++ b/content/partner/virtual.lua @@ -10,11 +10,11 @@ Partner_API.Partner { loc_vars = function(self, info_queue, card) if next(SMODS.find_card("j_paperback_paranoia")) then return { - vars = { card.ability.retriggers * 2 } + vars = { card.ability.extra.retriggers * 2 } } else return { - vars = { card.ability.retriggers } + vars = { card.ability.extra.retriggers } } end end, @@ -36,12 +36,13 @@ Partner_API.Partner { if context.repetition and context.cardarea == G.play then for k, v in ipairs(context.full_hand) do - if PB_UTIL.is_suit(v, 'dark') then + if PB_UTIL.is_suit(v, 'dark', false, true) then card.ability.extra.active = false break end end if PB_UTIL.is_suit(context.other_card, 'light') and card.ability.extra.active then + -- TODO if first light suit is debuffed, show "Debuffed" instead card.ability.extra.active = false if next(SMODS.find_card("j_paperback_paranoia")) then return { diff --git a/content/spectrals/apostle_of_pentacles.lua b/content/spectrals/apostle_of_pentacles.lua new file mode 100644 index 00000000..5154a3a6 --- /dev/null +++ b/content/spectrals/apostle_of_pentacles.lua @@ -0,0 +1,38 @@ +SMODS.Consumable { + key = 'apostle_of_pentacles', + config = { + max_highlighted = 1, + paperclip = 'platinum' + }, + set = 'Spectral', + atlas = 'spectral_atlas', + pos = { x = 3, y = 0 }, + + hidden = true, + soul_set = "paperback_minor_arcana", + soul_rate = 0.001, + + paperback = { + requires_paperclips = true, + }, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = PB_UTIL.paperclip_tooltip(card.ability.paperclip) + + return { + vars = { + card.ability.max_highlighted + } + } + end, + + use = function(self, card, area) + PB_UTIL.use_consumable_animation(card, G.hand.highlighted, function() + for _, v in ipairs(G.hand.highlighted) do + if card.ability.paperclip then + PB_UTIL.set_paperclip(v, card.ability.paperclip) + end + end + end) + end +} diff --git a/content/stickers/corroded.lua b/content/stickers/corroded.lua new file mode 100644 index 00000000..a03a8e93 --- /dev/null +++ b/content/stickers/corroded.lua @@ -0,0 +1,76 @@ +SMODS.Sticker { + key = 'corroded', + atlas = 'stickers_atlas', + pos = { x = 2, y = 0 }, + badge_colour = G.C.PAPERBACK_EGO_GIFT_RED, + rate = 0, + should_apply = function(self, card, center, area, bypass_roll) + return bypass_roll + end, + config = { + paperback_corrode_tally = 3 + }, + + -- Extra utility function + info_queue_entry = function(self) + return { + key = 'paperback_corroded', + set = 'Other', + vars = self:loc_vars({}, {}).vars + } + end, + + loc_vars = function(self, info_queue, card) + local rounds = (card.ability or {}).paperback_corrode_tally or G.GAME.paperback.corroded_rounds + return { + vars = { + rounds, + rounds == 1 and "" or "s" + } + } + end, + + draw = function(self, card) + -- Don't draw the shine over the sticker + G.shared_stickers[self.key].role.draw_major = card + G.shared_stickers[self.key]:draw_shader('dissolve', nil, nil, nil, card.children.center) + end, + + + apply = function(self, card, val) + card.ability[self.key] = val + card.ability.paperback_corrode_tally = G.GAME.paperback.corroded_rounds + end, + + calculate = function(self, card, context) + if context.end_of_round and context.cardarea == G.consumeables then + if card.ability.paperback_corroded then + if card.ability.paperback_corrode_tally then + if card.ability.paperback_corrode_tally > 1 then + card.ability.paperback_corrode_tally = card.ability.paperback_corrode_tally - 1 + SMODS.calculate_effect({ + message = localize { + type = 'variable', + key = 'paperback_a_round_minus', + vars = { 1 } + }, + colour = G.C.FILTER, + instant = false + }, card) + else + SMODS.calculate_context({ + paperback = { + sold_ego_gift = card, + } + }) + if card.ability.sin ~= 'wrath' then + SMODS.destroy_cards({ card }) + end + + return PB_UTIL.SIN_DEBUFF[card.ability.sin] + end + end + end + end + end +} diff --git a/content/stickers/energized.lua b/content/stickers/energized.lua index 1ff268e7..25f2e6cf 100644 --- a/content/stickers/energized.lua +++ b/content/stickers/energized.lua @@ -3,7 +3,9 @@ SMODS.Sticker { atlas = 'stickers_atlas', pos = { x = 0, y = 0 }, badge_colour = G.C.PAPERBACK_ENERGIZED, - should_apply = false, + should_apply = function(self, card, center, area, bypass_roll) + return bypass_roll + end, discovered = true, rate = 0, @@ -14,6 +16,11 @@ SMODS.Sticker { type = 'name_text', set = 'Joker', key = 'j_paperback_basic_energy' + }, + localize { + type = 'name_text', + set = 'paperback_ego_gift', + key = 'c_paperback_patrolling_flashlight' } } } diff --git a/content/stickers/temporary.lua b/content/stickers/temporary.lua index f902aaa6..ee9004f7 100644 --- a/content/stickers/temporary.lua +++ b/content/stickers/temporary.lua @@ -3,7 +3,9 @@ SMODS.Sticker { atlas = 'stickers_atlas', pos = { x = 1, y = 0 }, badge_colour = G.C.PAPERBACK_TEMPORARY, - should_apply = false, + should_apply = function(self, card, center, area, bypass_roll) + return bypass_roll + end, discovered = true, rate = 0, @@ -17,15 +19,15 @@ SMODS.Sticker { -- Hook end_round to destroy Jokers and Consumables with this sticker local end_round_ref = end_round function end_round() + local to_destroy = {} + -- Destroy jokers for _, v in ipairs(G.jokers and G.jokers.cards or {}) do if v.ability.paperback_temporary then - PB_UTIL.destroy_joker(v) + to_destroy[#to_destroy + 1] = v end end - local to_destroy = {} - -- Destroy consumables for _, v in ipairs(G.consumeables and G.consumeables.cards or {}) do if v.ability.paperback_temporary then @@ -41,7 +43,9 @@ function end_round() end if #to_destroy > 0 then + G.GAME.paperback.destroy_no_calc = true SMODS.destroy_cards(to_destroy) + G.GAME.paperback.destroy_no_calc = nil end return end_round_ref() diff --git a/content/voucher/rabbit_protocol.lua b/content/voucher/rabbit_protocol.lua new file mode 100644 index 00000000..d9ca910c --- /dev/null +++ b/content/voucher/rabbit_protocol.lua @@ -0,0 +1,36 @@ +SMODS.Voucher { + key = 'rabbit_protocol', + atlas = 'vouchers_atlas', + pos = { x = 2, y = 1 }, + unlocked = false, + discovered = false, + requires = { + 'v_paperback_second_trumpet' + }, + paperback = { + requires_ego_gifts = true, + }, + locked_loc_vars = function(self, info_queue) + return { vars = { 3 } } + end, + + check_for_unlock = function(self, args) + if args.type == 'paperback_sold_ego_gifts' then + return #G.GAME.paperback.sold_ego_gifts >= 3 + end + end, + + calculate = function(self, card, context) + if context.selling_card and G.GAME.blind then + if PB_UTIL.is_ego_gift(context.card) and G.GAME.blind.boss and not G.GAME.blind.disabled then + return { + focus = context.card, + message = localize('ph_boss_disabled'), + func = function() + G.GAME.blind:disable() + end + } + end + end + end +} diff --git a/content/voucher/second_trumpet.lua b/content/voucher/second_trumpet.lua new file mode 100644 index 00000000..a7976b7d --- /dev/null +++ b/content/voucher/second_trumpet.lua @@ -0,0 +1,61 @@ +SMODS.Voucher { + key = 'second_trumpet', + config = { + a_slot = 1, + }, + atlas = 'vouchers_atlas', + pos = { x = 2, y = 0 }, + unlocked = true, + discovered = false, + paperback = { + requires_ego_gifts = true, + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.a_slot or self.config.a_slot + } + } + end, + + redeem = function(self) + G.GAME.paperback.second_trumpets = G.GAME.paperback.second_trumpets + 1 + SMODS.Centers['v_paperback_second_trumpet']:update_second_trumpet() + end, + + -- Utility function + update_second_trumpet = function(self) + local found_gift = 0 + if G.consumeables then + for _, v in ipairs(G.consumeables.cards) do + if PB_UTIL.is_ego_gift(v) then + found_gift = 1 + break + end + end + + local slots = self.config.a_slot * found_gift * G.GAME.paperback.second_trumpets + local change = slots - G.GAME.paperback.second_trumpet_change + if change ~= 0 then + G.consumeables:change_size(change) + G.GAME.paperback.second_trumpet_change = slots + end + end + end +} + +local add_to_deck_ref = Card.add_to_deck +function Card.add_to_deck(self, ...) + add_to_deck_ref(self, ...) + if PB_UTIL.is_ego_gift(self) then + SMODS.Centers['v_paperback_second_trumpet']:update_second_trumpet() + end +end +local remove_from_deck_ref = Card.remove_from_deck +function Card.remove_from_deck(self, ...) + remove_from_deck_ref(self, ...) + if PB_UTIL.is_ego_gift(self) then + SMODS.Centers['v_paperback_second_trumpet']:update_second_trumpet() + end +end \ No newline at end of file diff --git a/localization/en-us.lua b/localization/en-us.lua index 127fb06a..64b7252f 100644 --- a/localization/en-us.lua +++ b/localization/en-us.lua @@ -52,6 +52,16 @@ return { "Earn no {C:money}Interest" } }, + b_paperback_shimmering = { + name = "Shimmering Deck", + text = { + "{C:attention}+#1#{} consumable slot for", + "every unique {C:attention}Sin{} owned", + "{C:red}#2#{} Joker Slots", + "{C:paperback_ego_gift}E.G.O. Gift Extraction Packs{}", + "are {C:attention}5X{} more common" + } + }, }, Blind = { bl_paperback_quarter = { @@ -71,8 +81,8 @@ return { bl_paperback_whole = { name = 'The Whole', text = { - 'Ranks scored previously', - 'this Ante are debuffed' + 'Unscored ranks this', + 'Ante are debuffed' } }, bl_paperback_rest = { @@ -100,9 +110,9 @@ return { bl_paperback_natural = { name = 'The Natural', text = { - 'Cards in poker hands', - 'above your lowest hand', - 'level are debuffed' + 'Play lowest level', + 'poker hand, or else', + 'debuff scored cards' } }, bl_paperback_coda = { @@ -115,12 +125,20 @@ return { bl_paperback_taupe_treble = { name = 'Taupe Treble', text = { - 'Must play an', - 'Enhanced card' + 'Unenhanced cards', + 'are debuffed' } }, }, Joker = { + j_paperback_showdown = { + name = "Showdown", + text = { + "{V:1}#1#{} and {V:2}#2#{} {C:attention}held", + "{C:attention}in hand{} have a {C:green}#3# in #4#", + "chance to earn {C:money}$#5#", + } + }, j_paperback_golden_egg = { name = "Golden Egg", text = { @@ -137,7 +155,7 @@ return { j_paperback_burning_pact = { name = "Burning Pact", text = { - "If a {C:attention}discard{} has only {C:attention}#1#{} card", + "If a {C:attention}discard{} has only {C:attention}#1#{} card,", "draw {C:attention}#2#{} additional cards" } }, @@ -145,16 +163,16 @@ return { name = "Blade Dance", text = { "When {C:attention}Blind{} is selected,", - "create {C:attention}#1#{} random {C:paperback_temporary}temporary", - "{C:attention}#2#s{} in your hand" + "add {C:attention}#1#{} random {C:paperback_temporary}temporary", + "{C:attention}#2#s{} to your hand" } }, j_paperback_claw = { name = "Claw", text = { - "When a {C:attention}#1#{} is scored, scored {C:attention}#1#s{}", - "give an additional {C:mult}+#2#{} Mult", - "Resets at the {C:attention}end of round", + "Scored {C:attention}#1#s{} give {C:mult}+#4#{} Mult,", + "{C:mult}+#2#{} more Mult for each", + "previously scored {C:attention}#1#{} this round", "{C:inactive}(Currently {C:mult}+#3#{C:inactive} Mult)" } }, @@ -162,22 +180,22 @@ return { name = "Chaplin", text = { "When buying a {C:attention}Voucher{}, also", - "gain the {C:attention}upgraded{} version" + "redeem the {C:attention}upgraded{} version" } }, j_paperback_milk_tea = { name = "Milk Tea", text = { "{C:purple}Balance{} {C:attention}#1#%{} of {C:chips}Chips{} and {C:mult}Mult", - "Reduces by {C:attention}#2#%{} if after balancing", - "{C:mult}Mult{} ended up {C:attention}greater{} than {C:chips}Chips" + "Reduces by {C:attention}#2#%{} if a hand's {C:attention{}final{}", + "{C:mult}Mult{} ends up {C:attention}greater{} than its {C:chips}Chips" } }, j_paperback_nichola = { name = "Nichola", text = { - "{C:attention}Face{} cards {C:attention}held in", - "{C:attention}hand{} count in {C:attention}scoring" + "After scoring played cards,", + "score {C:attention}face{} cards {C:attention}held in hand{}" } }, j_paperback_the_dynasty = { @@ -218,17 +236,26 @@ return { "This Joker gains {C:chips}+#2#{} Chips if played", "hand contains a {C:attention}#1#{}. Otherwise,", "this Joker loses {C:chips}-#3#{} Chips.", - "Eaten if Chips are lower than 0", + "Eaten if Chips fall below 0", "{C:inactive}(Currently {C:chips}+#4#{C:inactive} Chips)" } }, + j_paperback_teapot = { + name = "Teapot", + text = { + "This Joker gains {C:blue}+#1#{} Chips whenever", + "a {C:attention}#2#{} is {C:attention}scored", + "{C:inactive}(Currently {C:blue}+#3#{C:inactive} Chips)" + } + }, j_paperback_the_one_who_waits = { name = "The One Who Waits", text = { - "If played hand has a {C:attention}scoring{} {V:1}#1#", - "{C:green}#2# in #3#{} chance to gain {X:mult,C:white}X#4#{} Mult", - "{C:green}#5# in #6#{} chance to spawn a {C:tarot}#7#{} Tarot", - "{C:inactive}(Must have room) (Currently {X:mult,C:white}X#8#{C:inactive} Mult)", + "When a {V:1}#1#{} is scored,", + "{C:green}#2# in #3#{} chance this Joker gains {X:mult,C:white}X#4#{} Mult", + "{C:inactive}(Currently {X:mult,C:white}X#8#{C:inactive} Mult)", + "{C:green}#5# in #6#{} chance to create a {C:tarot}#7#{} Tarot", + "{C:inactive}(Must have room)", } }, j_paperback_blood_rain = { @@ -236,14 +263,15 @@ return { text = { "{C:attention}#1#s{} give {C:mult}Mult{} equal", "to the {C:attention}rank{} of held cards", - "instead of their {C:chips}chip value" + "instead of giving {C:chips}Chips" } }, j_paperback_pinot_noir = { name = "Pinot Noir", text = { - "The next {C:attention}#1#{} times a {C:attention}#2#", - "triggers, give {C:mult}#3#{} additional Mult" + "The next {C:attention}#1#{} times a", + "{C:attention}#2#{} triggers, it", + "gives {C:mult}+#3#{} more permanent Mult" } }, j_paperback_jestosterone = { @@ -261,53 +289,55 @@ return { j_paperback_langely = { name = "L'angely", text = { - "Earns half the {C:money}sell value{} of all", - "Jokers when defeating a {C:attention}Big Blind.", - "When defeating a {C:attention}Boss Blind{}, earn", - "the full {C:money}sell value{} of all Jokers" + "Earn {C:attention}half{} the {C:money}sell value{} of all", + "Jokers when defeating a {C:attention}Big Blind{}.", + "Earn the {C:attention}full{} {C:money}sell value{} of all", + "Jokers when defeating a {C:attention}Boss Blind{}", } }, j_paperback_pedrillo = { name = "Pedrillo", text = { - "If scoring hand contains a {C:attention}Queen{},", - "upgrade the played {C:attention}poker hand{}" + "Scored {C:attention}Queens{}", + "create the {C:planet}Planet{} card", + "for played {C:attention}poker hand", + "{C:inactive}(Must have room)" } }, j_paperback_double_dutchman = { name = "Double Dutchman", text = { - "Cards {C:attention}held in hand{} have a {C:green}#1# in #2#", - "chance to gain random", - "{C:attention}enhancements{}, {C:attention}seals{} or {C:attention}editions", - "for the next {C:attention}#3#{} hands" + "For the next {C:attention}#3#{} hands,", + "each card {C:attention}held in hand{} has a", + "{C:green}#1# in #2#{} chance to get a random {C:attention}enhancement{}", + "and a {C:green}#1# in #2#{} chance to get a random {C:attention}seal{}" } }, j_paperback_one_sin_and_hundreds_of_good_deeds = { name = "One Sin and Hundreds of Good Deeds", text = { - "Scored {C:attention}3s{} and {C:attention}Rankless Cards{}", - "give {C:mult}+#1#{} Mult when scored", - "{C:inactive}''It feeds on evil''", + "Scored {C:attention}3s{} and {C:attention}rankless{} cards", + "give {C:mult}+#1#{} Mult", + '{C:inactive}"It feeds on evil"', }, }, j_paperback_one_sin_and_hundreds_of_good_deeds_fed = { name = "{C:red}One Sin and Hundreds of Good Deeds{}", text = { - "Scored {C:attention}3s{} and {C:attention}Rankless Cards{}", - "give {C:mult}+Mult{} for each", - "remaining card in deck when scored", + "Scored {C:attention}3s{} and {C:attention}rankless{} cards", + "give {C:mult}+#1#{} Mult for each", + "remaining card in deck", "{C:inactive}(Currently {C:mult}+#2#{}{C:inactive})", }, }, j_paperback_white_night = { name = "WhiteNight", text = { - "Destroy all scored non-{C:attention}Apostle{} cards", - "at the end of the hand. Scored {C:attention}Apostles{}", - "give {X:mult,C:white}X#1#{} Mult. Playing a hand containing", - "no {C:attention}Apostles destroys{} a random Joker.", - "Discarded {C:attention}Apostles{} are {C:attention}destroyed{}" + "Scored {C:attention}Apostles{} give {X:mult,C:white}X#1#{} Mult.", + "Scored non-{C:attention}Apostles{} are {C:red}destroyed{}.", + "Playing a hand with no {C:attention}Apostles{}", + "{C:red}destroys{} a random Joker.", + "Discarded {C:attention}Apostles{} are {C:red}destroyed{}" }, unlock = { "Have #1# or more", @@ -318,7 +348,7 @@ return { j_paperback_as_above_so_below = { name = "As Above, So Below", text = { - "Playing a five-card poker hand with an", + "Playing a {C:attention}5{}-card poker hand with an", "{C:attention}Apostle{} creates a {C:purple}Tarot{} card,", "if poker hand also contains a {C:attention}Straight{}", "create a {C:spectral}Spectral{} card instead", @@ -340,8 +370,8 @@ return { j_paperback_king_me = { name = "King Me", text = { - "Scored {V:1}#1#{} increase", - "their rank by {C:attention}#2#" + "Scored non-{C:attention}King{} {V:1}#1#{}", + "increase their rank by {C:attention}#2#", } }, j_paperback_gambit = { @@ -350,7 +380,7 @@ return { "If played hand contains a scoring {V:1}#1#,", "the first scored {V:1}#1#{} {C:attention}destroys{}", "the first non-{V:1}#1#{} held in hand", - "and gains its {C:chips}Chip value{}", + "and gains {C:attention}twice{} its {C:chips}Chip value{}", } }, j_paperback_solar_eclipse = { @@ -373,8 +403,8 @@ return { text = { "If played hand contains a {C:attention}Spectrum{},", "destroy all cards {C:attention}held in hand{} and", - "all played cards gain {C:dark_edition}Polychrome", - "{S:1.1,C:red,E:2}self destructs", + "all played cards become {C:dark_edition}Polychrome", + "{S:1.1,C:red,E:2}self-destructs", } }, j_paperback_j_and_js = { @@ -427,6 +457,15 @@ return { "{C:inactive}(Currently {C:mult}+#1#{C:inactive} Mult)" } }, + j_paperback_small_scale_onshore_wind = { + name = "Small Scale Onshore Wind", + text = { + "This Joker gains {C:mult}+#1#{} Mult", + "per consecutive discard", + "of exactly {C:attention}#2#{} cards", + "{C:inactive}(Currently {C:mult}+#3# {C:inactive}Mult)" + } + }, j_paperback_aurora_borealis = { name = "Aurora Borealis", text = { @@ -458,8 +497,8 @@ return { name = "Manilla Folder", text = { "Earn {C:money}$#1#{} at end of round", - "for each {C:attention}unique", - "{C:attention}Clip{} in your full deck", + "for each {C:attention}unique Clip{}", + "in your full deck", "{C:inactive}(Currently {C:money}$#2#{C:inactive})" } }, @@ -474,8 +513,9 @@ return { j_paperback_jimbos_joyous_joker_jamboree = { name = "Jimbo's Joyous Joker Jamboree", text = { - "Create a random {C:paperback_minor_arcana}Minor Arcana{}", - "card for every {C:attention}#1#{C:inactive} [#2#]{} scored cards", + "Create a random {C:paperback_minor_arcana}Minor Arcana{} card", + "for every {C:attention}#1#{C:inactive} [#2#]{} scored cards", + "{C:inactive}(Must have room)", }, unlock = { "Have {C:attention}#1#{} or more", @@ -490,6 +530,32 @@ return { "{C:blue}Common {C:attention}Jokers" } }, + j_paperback_insurance_policy = { + name = "Insurance Policy", + text = { + "Gives {C:mult}+#1#{} Mult for each {C:attention}Jack{}", + "and {C:mult}-#1#{} Mult for each {C:attention}King{}", + "in your full deck", + "{C:inactive}(Currently {C:mult}#2#{C:inactive} Mult){}", + } + }, + j_paperback_jimbos_inferno = { + name = "Jimbo's Inferno", + text = { + "Scored {C:paperback_dark_suit}dark suits{} give", + "{C:mult}+#1#{} Mult for every", + "{C:paperback_dark_suit}dark suit{} {C:attention}held in hand{}", + "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult){}", + } + }, + j_paperback_tome = { + name = "Tome", + text = { + "{C:attention}+#1#{} Consumable Slot for every", + "unique Joker {C:attention}rarity{} you have", + "{C:inactive}(Currently {C:attention}+#2#{C:inactive} Slot#3#){}", + } + }, j_paperback_better_call_jimbo = { name = "Better Call Jimbo", text = { @@ -523,16 +589,15 @@ return { text = { "Prevents death, on death", "{C:attention}#1#{} Ante, {C:attention}#1#{} hand size", - "and {C:red}self destructs" + "and {C:red}self-destructs" } }, j_paperback_blue_marble = { name = "Blue Marble", text = { - "{C:green}#1# in #2#{} chance to create", - "a random {C:planet}Planet{} card if", - "{C:attention}scoring hand{} contains a {V:3}#3#{}", - "{C:inactive}(Must have room)", + "When a {C:attention}Planet{} card is used,", + "this Joker gains {C:mult}+#1#{} Mult", + "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" } }, j_paperback_boundary_of_death = { @@ -540,7 +605,7 @@ return { text = { "{C:attention}#1#s{} have a", "{C:green}#2# in #3#{} chance to", - "additionally give {C:red}+#4#{} Mult" + "give {C:red}+#4#{} additional Mult" } }, j_paperback_festive_joker = { @@ -552,24 +617,31 @@ return { "{C:inactive}(Must have room)" } }, + j_paperback_collector = { + name = "Collector", + text = { + "Earn {C:money}$#1#{} at end of round", + "for each {C:attention}#2#{}", + "in your full deck", + "{C:inactive}(Currently {C:money}$#3#{C:inactive})" + } + }, j_paperback_spotty_joker = { name = "Spotty Joker", text = { "This Joker gains {X:mult,C:white}X#1#{} Mult", - "if {C:attention}scoring hand{} contains a {C:attention}#2#,", - "otherwise lose {X:mult,C:white}X#3#{} Mult", - "{C:inactive}(Currently {X:mult,C:white}X#4#{}{C:inactive} Mult)" + "for every {C:attention}#2#{}", + "in {C:attention}scoring hand{}", + "{C:inactive}(Currently {X:mult,C:white}X#3#{}{C:inactive} Mult)" } }, j_paperback_sommelier = { name = "Sommelier", text = { - "If the {C:attention}first discard{}", - "of a round contains", - " a {C:attention}#1#{},", - "the first discarded", - "{C:attention}#1#{} gains", - "a random {C:attention}seal", + "If {C:attention}first discard{} of round", + "contains a {C:attention}#1#{},", + "the first discarded {C:attention}#1#{}", + "gets a random {C:attention}seal", } }, j_paperback_medic = { @@ -596,14 +668,14 @@ return { "or more {C:attention}face{} cards, convert", "{C:attention}all{} cards {C:attention}held in hand{} to", "the {C:attention}leftmost{} scored card", - "{S:1.1,C:red,E:2}self destructs", + "{S:1.1,C:red,E:2}self-destructs", } }, j_paperback_kintsugi_joker = { name = "Kintsugi Joker", text = { - "Increases the maximum payout", - "of {C:attention}#2#s{} by {C:money}$#1#{} when", + "Increases the payout of", + "{C:attention}#2#s{} by {C:money}$#1#{} when", "a {C:attention}#2#{} is destroyed", "{C:inactive}(Currently increased by {C:money}$#3#{C:inactive})" } @@ -634,13 +706,21 @@ return { j_paperback_power_surge = { name = "Power Surge", text = { - "Played {C:attention}#1#s{} give {X:mult,C:white}X#2#{}", - "Mult when scored and", - "have a {C:green}#3# in #4#{}", - "chance to {C:red}destroy{} a", - "card {C:attention}held in hand{}", + "Played {C:attention}#1#s{} give {X:mult,C:white}X#2#{} Mult when scored", + "and have a {C:green}#3# in #4#{} chance to", + "{C:red}destroy{} a card {C:attention}held in hand{}", } }, + j_paperback_time_regression_mix = { + name = "Time Regression Mix", + text = { + "If {C:attention}scoring hand{} contains", + "at least {C:attention}#1#{} suits,", + "this Joker gains {C:mult}+#2#{} Mult", + "{C:inactive}(Currently {C:mult}+#3#{C:inactive} Mult)", + } + }, + j_paperback_bismuth = { name = "Bismuth", text = { @@ -656,12 +736,20 @@ return { "once, and scored {C:attention}#3#s{} twice" } }, + j_paperback_penumbra_phantasm = { + name = "Penumbra Phantasm", + text = { + "This Joker gains {C:red}+#1#{} Mult whenever", + "a {C:attention}rankless{} card is {C:attention}scored", + "{C:inactive}(Currently {C:red}+#2#{C:inactive} Mult)" + } + }, j_paperback_ncj = { name = "NoCopyrightJokers", text = { - "This Joker gives {C:chips}+#1#{} Chips for", - "every {C:money}dollar{} of {C:attention}sell value", - "from all other owned Jokers", + "{C:chips}+#1#{} Chips for every", + "{C:money}$1{} of {C:attention}sell value{}", + "your other Jokers have", "{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)" } }, @@ -691,7 +779,7 @@ return { "an {C:attention}extra{} {C:dark_edition}Negative{} copy", "with {C:money}-$#3#{} sell value", "{s:0.8}Chance increases by {s:0.8,C:green}#4#{s:0.8} on fail", - "{S:1.1,C:red,E:2}self destructs", + "{S:1.1,C:red,E:2}self-destructs", } }, j_paperback_book_of_vengeance = { @@ -720,13 +808,39 @@ return { "an {C:money}Angel Investment Tag" } }, + j_paperback_marble_soda = { + name = "Marble Soda", + text = { + "Scored {C:attention}#1#s{}", + "give {X:mult,C:white}X#2#{} Mult", + "Drank after {C:attention}#3#{} playing", + "card#4# #5# {C:attention}destroyed{}" + } + }, + j_paperback_vacation_juice = { + name = "Vacation Juice", + text = { + "When clearing a {C:attention}Blind{}", + "for the first time,", + "do not advance to next {C:attention}Blind{}", + "Drank after {C:attention}#1#{} trigger#2#", + } + }, + j_paperback_black_forest_cake = { + name = "Black Forest Cake", + text = { + "This Joker gains {C:mult}+#2#{} Mult", + "for each {C:attention}Blind{} defeated", + "{C:red}Self-destructs{} if any", + "card or Joker is {C:attention}destroyed{}", + "{C:inactive}(Currently {C:mult}+#1#{C:inactive} Mult)" + } + }, j_paperback_ice_cube = { name = "Ice Cube", text = { - "{X:mult,C:white}X#1#{} Mult for every", - "{C:attention}Food Joker{} you have", - "{s:0.9}Melts if {s:0.9,C:attention}score catches fire", - "{C:inactive}(Currently {X:mult,C:white}X#3#{C:inactive} Mult)" + "{C:blue}+#1#{} Hand when {C:attention}Blind{} is selected", + "Melts if {C:attention}score catches fire", } }, j_paperback_champagne = { @@ -742,7 +856,7 @@ return { name = "Pocket Pair", text = { "Earn {C:money}$#1#{} per {C:attention}#2#{} drawn", - "at the start of round" + "at start of round" } }, j_paperback_the_quiet = { @@ -774,7 +888,7 @@ return { j_paperback_telamon = { name = "Telamon", text = { - "If {C:attention}final hand{} contains", + "If {C:attention}winning hand{} contains", "a {C:attention}#1#{}, create a random", "{C:attention}Swords{} {C:paperback_minor_arcana}Minor Arcana{} card", "{C:inactive}(Must have room)" @@ -783,15 +897,25 @@ return { j_paperback_backpack = { name = "Backpack", text = { - "{C:money}Shops{} have an additional", + "{C:money}Shops{} start with an additional", "free {C:attention}Buffoon Pack" } }, + j_paperback_roulette = { + name = "Roulette", + text = { + "Each hand played, this Joker chooses a", + "{C:attention}random rank{} and {C:attention}suit{}. Scored cards earn", + "{C:money}$#1#{} if they match suit,", + "{C:money}$#2#{} if they match rank,", + "or {C:money}$#3#{} if they match exactly", + } + }, j_paperback_mexican_train = { name = "Mexican Train", text = { "Scored {C:attention}#1#s{} give {C:money}$#2#", - "for every scoring {C:attention}#1#{}", + "for every played {C:attention}#1#{}", "{C:inactive}(Currently {C:money}$#3#{C:inactive})" } }, @@ -803,6 +927,13 @@ return { "{C:inactive}(Currently {X:chips,C:white}X#2#{C:inactive} Chips)" } }, + j_paperback_mandela_effect = { + name = "Mandela Effect", + text = { + "Randomly {C:attention}enhance{} the {C:attention}first", + "scored {C:attention}face{} card each hand" + } + }, j_paperback_jester_of_nihil = { name = "Jester of Nihil", text = { @@ -817,7 +948,7 @@ return { name = "Forgery", text = { "Copies ability of a random {C:attention}Joker", - "every hand, if it provides {X:mult,C:white}XMult{},", + "every hand, if it gives {X:mult,C:white}XMult{},", "{C:mult}Mult{} or {C:chips}Chips{}, multiply its values", "between {X:attention,C:white}X#1#{} and {X:attention,C:white}X#2#", "{C:inactive}(Currently {C:attention}#3#{C:inactive} at {X:attention,C:white}X#4#{C:inactive})" @@ -848,19 +979,54 @@ return { "{s:0.8}Card changes every round" }, }, + j_paperback_joker_crossing = { + name = "Joker Crossing", + text = { + "{C:attention}Enhanced{} cards", + "have a {C:green}#1# in #2#{}", + "chance to retrigger" + } + }, + j_paperback_jimbocards = { + name = "Jimbocards", + text = { + "When obtained, destroy all Jokers and", + "create {C:attention}#1#{} random {C:dark_edition}Negative{} Jokers.", + "All purchases cost {C:money}$#2#{} less.", + "Clear each {C:attention}Ante{} in {C:attention}#3#{} hands, or you {S:1.1,C:red,E:2}lose{}", + "{C:inactive}({C:attention}#4#{C:inactive} hands left)" + } + }, + j_paperback_jimbocards_collection = { + name = "Jimbocards", + text = { + "When obtained, destroy all Jokers and", + "create {C:attention}#1#{} random {C:dark_edition}Negative{} Jokers.", + "All purchases cost {C:money}$#2#{} less.", + "Clear each {C:attention}Ante{} in {C:attention}#3#{} hands, or you {S:1.1,C:red,E:2}lose{}", + "{C:inactive}({C:attention}#4#{C:inactive} hands left)", + "Always {C:paperback_eternal}Eternal", + } + }, j_paperback_forlorn = { name = "Forlorn", text = { - "If {C:attention}scoring hand{} contains only", - "{V:1}#1#{}, destroy a random", + "If played hand's only scored suit", + "is {V:1}#1#{}, destroy a random", "card {C:attention}held in hand", }, }, + j_paperback_protocol = { + name = "Protocol", + text = { + "{C:attention}+#1#{} Booster Pack size" + } + }, j_paperback_cream_liqueur = { name = "Cream Liqueur", text = { "{C:attention}Tags{} earn {C:money}$#1#{} when activated", - "Consumed in {C:attention}#2#{} rounds", + "Consumed in {C:attention}#2#{} round#3#", "{C:inactive}(Resets when a {C:attention}Tag{C:inactive} is acquired)" } }, @@ -890,6 +1056,24 @@ return { "{C:inactive}(Currently {X:mult,C:white}X#2#{}{C:inactive} Mult)" } }, + j_paperback_fodder = { + name = "Fodder", + text = { + "Sell this card to {C:paperback_ego_gift}corrode{}", + "the rightmost {C:paperback_ego_gift}E.G.O. Gift{}", + } + }, + j_paperback_the_strongest = { + name = "The Strongest", + text = { + "This Joker gains {X:mult,C:white}X#1#{} Mult", + "when an {C:paperback_ego_gift}E.G.O. Gift{} is sold", + "or corrodes", + "{C:paperback_ego_gift}Corrode{} an {C:paperback_ego_gift}E.G.O. Gift", + "when defeating a {C:attention}Boss Blind", + "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)" + } + }, j_paperback_freezer = { name = "Freezer", text = { @@ -904,17 +1088,26 @@ return { j_paperback_everything_must_go = { name = "Everything Must Go!", text = { - "Shops have {C:attention}#1#{} additional", - "{C:attention}Voucher{} for sale" + "Shops have {C:attention}+#1#{} additional", + "{C:attention}Voucher{} slot" } }, j_paperback_card_sleeve = { name = "Card Sleeve", text = { - "Sell this card to make the {C:attention}Joker", + "Sell this card to make {C:attention}Joker", "to the right {C:attention}Eternal{}", } }, + j_paperback_percussion_ensemble = { + name = "Percussion Ensemble", + text = { + "{X:mult,C:white}X#1#{} Mult for each", + "unique {C:attention}Enhancement{}", + "in your full deck", + "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult){}", + } + }, j_paperback_its_tv_time = { name = "It's TV Time!", text = { @@ -925,9 +1118,9 @@ return { j_paperback_da_capo = { name = "Da Capo", text = { - "Gives {X:mult,C:white}X#1#{} Mult and {C:attention}debuffs", - "all but one {C:attention}suit{} every hand", - "in the subsequent order:", + "{X:mult,C:white}X#1#{} Mult", + "{C:red}Debuffs{} all but one {C:attention}suit{}", + "every {C:attention}hand{}, in order:", "{C:clubs}Clubs{}, {C:spades}Spades{}, {C:diamonds}Diamonds{}, {C:hearts}Hearts{}, {C:inactive}None{}", "{C:inactive}(Currently: {V:1}#2#{C:inactive}){}", } @@ -972,7 +1165,7 @@ return { text = { "This Joker gains {X:mult,C:white}X#1#{} Mult for", "each unique scored {C:attention}rank{}.", - "Resets after defeating a {C:attention}Boss Blind", + "Resets after {C:attention}Boss Blind", "{C:inactive}(Currently {X:mult,C:white}X#2#{} {C:inactive}Mult)", "{C:inactive}(Ranks played:{C:attention}#3#{C:inactive})", }, @@ -998,15 +1191,16 @@ return { text = { "Earn {C:money}$#1#{} at end of round", "Payout increases by {C:money}$#2#{} when cashing out", - "{C:green}#3# in #4#{} chance this card", + "{C:green}#4# in #5#{} chance this card", "is eaten at end of round", + "{C:inactive}(Max of {C:money}$#3#{C:inactive})", }, }, j_paperback_pop_stick = { name = "Pop-Stick", text = { - "Gives {X:mult,C:white}X#1#{} Mult for every", - "{C:attention}\"Stick\"{} Joker you have", + "{X:mult,C:white}X#1#{} Mult if you have", + "another {C:attention}\"Stick\"{} Joker", "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, @@ -1015,8 +1209,8 @@ return { text = { "If first hand of round", "scores no {C:attention}face cards{},", - "create the {C:planet}Planet{} card of", - "the played {C:attention}poker hand", + "create the {C:planet}Planet{} card", + "for played {C:attention}poker hand", "{C:inactive}(Must have room)", }, }, @@ -1024,8 +1218,7 @@ return { name = "Bicycle", text = { "{C:attention}Wild Cards{} give {C:mult}Mult", - "equal to their {C:chips}Chip value{},", - "then {X:mult,C:white}X#1#{} Mult", + "equal to their {C:chips}Chip value{}", }, }, j_paperback_stamp = { @@ -1040,8 +1233,8 @@ return { j_paperback_sticky_stick = { name = "Sticky Stick", text = { - "Gives {X:mult,C:white}X#1#{} Mult for every", - "{C:attention}\"Stick\"{} Joker you have", + "{X:mult,C:white}X#1#{} Mult if you have", + "another {C:attention}\"Stick\"{} Joker", "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, @@ -1056,7 +1249,7 @@ return { name = "Tutor", text = { "{C:attention}Numbered cards{} have", - "{C:attention}double{} their total {C:chips}Chip{} value", + "{C:attention}double{} {C:chips}Chip value{}", }, }, j_paperback_ghost_cola = { @@ -1072,7 +1265,7 @@ return { text = { "If played hand contains {C:attention}5 scoring", "{C:attention}cards{}, earn half the lowest scoring", - "card's {C:chips}Chip Bonus{} as {C:money}money", + "card's {C:chips}Chip value{} as {C:money}money", "{C:inactive}(Max of {C:money}$#1#{C:inactive})", }, }, @@ -1080,8 +1273,8 @@ return { name = "Solemn Lament", text = { "This Joker gains {X:mult,C:white}X#1#{} Mult", - "if scored hand contains both {C:paperback_dark_suit}dark suits{}", - "and {C:paperback_light_suit}light suits{}", + "if scored hand contains both", + "{C:paperback_dark_suit}dark{} and {C:paperback_light_suit}light suits{}", "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, @@ -1099,15 +1292,16 @@ return { name = "Mismatched Sock", text = { "This Joker gains {X:mult,C:white}X#1#", - "Mult if played hand does", - "not contain a {C:attention}#2#", - "{C:inactive}(Currently {X:mult,C:white}X#3#{C:inactive} Mult)", + "Mult if discard contains", + "exactly {C:attention}one{} card", + "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, j_paperback_wild_plus_four = { name = "Wild +4", text = { - "{C:attention}+#1#{} hand size" + "{C:attention}+#1#{} hand size", + "{C:blue}#2#{} Hand" } }, j_paperback_quick_fix = { @@ -1122,7 +1316,7 @@ return { j_paperback_skydiver = { name = "Skydiver", text = { - "{C:white,X:mult}X#1#{} Mult if {C:attention}all scored cards{}", + "{C:white,X:mult}X#1#{} Mult if {C:attention}all scored{} cards", "are {C:attention}less than or equal{} to the", "{C:attention}lowest rank{} scored this round", "{C:inactive}(Updates at end of played hand)", @@ -1133,10 +1327,9 @@ return { name = "Surfer", text = { "This Joker gains {C:chips}+#1#{} Chips", - "for every {C:attention}#3#{} held in hand", - "at {C:attention}end of round{}, and {C:chips}+#2#", - "Chips for every {C:attention}#3#{} scored", - "{C:inactive}(Currently {C:chips}+#4#{C:inactive} chips)" + "for every {C:attention}#2#{} held in hand", + "at {C:attention}end of round{}", + "{C:inactive}(Currently {C:chips}+#3#{C:inactive} chips)" } }, j_paperback_blue_bonnets = { @@ -1152,7 +1345,7 @@ return { name = "Great Wave", text = { "Retrigger {C:attention}rightmost{} scoring card", - "{C:attention}once{} for every {C:attention}scoring card{}", + "{C:attention}once{} for each other {C:attention}scoring card{}", }, }, j_paperback_caramel_apple = { @@ -1171,6 +1364,14 @@ return { "per {C:attention}card{} discarded", }, }, + j_paperback_trans_flag = { + name = "Trans Flag", + text = { + "Gives {C:red}+#1#{} Mult for each", + "remaining {C:attention}discard{}", + "{C:inactive}(Currently {C:red}+#2#{} {C:inactive}Mult)" + }, + }, j_paperback_pride_flag_spectrums = { name = "Pride Flag", text = { @@ -1217,13 +1418,20 @@ return { j_paperback_wish_you_were_here = { name = "Wish You Were Here", text = { - "Gives {C:mult}Mult{} equal to {C:mult}#1#X{} the", + "Gives {C:mult}+Mult{} equal to {C:mult}#1#X{} the", "{C:attention}sell value{} of this card.", "Gains {C:money}$#2#{} of {C:attention}sell value{}", "at end of round", "{C:inactive}(Currently {C:mult}+#3# {C:inactive}Mult){}", }, }, + j_paperback_greeting_card = { + name = "Greeting Card", + text = { + "Gains {C:money}$#1#{} of {C:attention}sell value{} if a", + "played {C:attention}#2#{} is {C:attention}scored", + }, + }, j_paperback_calling_card = { name = "Calling Card", text = { @@ -1261,11 +1469,19 @@ return { j_paperback_derecho = { name = "Derecho", text = { - "Gains {X:mult,C:white}X#1#{} Mult if {C:attention}scored hand", - "contains only {C:paperback_dark_suit}dark suits", + "Gains {X:mult,C:white}X#1#{} Mult if", + "scored suits are all {C:paperback_dark_suit}dark{}", "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, + j_paperback_the_sun_rises = { + name = "The Sun Rises", + text = { + "Set base Chips to {C:chips}#1#{}", + "Scored {C:paperback_light_suit}light suits{} give {C:chips}+#2#{} Chips", + "and increase Chips given by {C:chips}+#3#{}", + }, + }, j_paperback_jestrica = { name = "Jestrica", text = { @@ -1282,15 +1498,24 @@ return { text = { "{X:mult,C:white}X#1#{} Mult if", "{C:attention}#2#{} unique {C:attention}enhancements{}", - "or {C:attention}seals{} are in your full deck", + "are in your full deck", "{C:inactive}(Currently {C:attention}#3#{C:inactive})", }, }, + j_paperback_moving_out = { + name = "Moving Out", + text = { + "This Joker gains {C:mult}+#1#{} Mult", + "if {C:attention}winning{} poker hand is", + "not your most played hand", + "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)", + }, + }, j_paperback_ready_to_fly = { name = "Ready to Fly", text = { "This Joker gains {X:chips,C:white}X#2#{} Chips", - "whenever an adjacent Joker is {C:attention}triggered", + "whenever an adjacent Joker {C:attention}triggers", "{C:inactive}(Currently {X:chips,C:white}X#1#{C:inactive} Chips)", }, }, @@ -1298,15 +1523,15 @@ return { name = "Solar System", text = { "Gives {X:mult,C:white}X#1#{} Mult for", - "every {C:attention}level{} over 1 {C:attention}all{}", - "9 base {C:planet}Planets{} share", + "every {C:attention}level{} all 9", + "base {C:planet}Planets{} share", "{C:inactive}(Currently {X:mult,C:white}X#2#{} {C:inactive}Mult)", }, }, j_paperback_reference_card = { name = "Reference Card", text = { - "Gains {X:mult,C:white}X#1#{} Mult for every time {C:attention}all{} 9", + "Gives {X:mult,C:white}X#1#{} Mult for every time {C:attention}all{} 9", "base {C:attention}poker hands{} have been played", "{C:inactive}(Currently {X:mult,C:white}X#2#{} {C:inactive}Mult)", }, @@ -1348,7 +1573,7 @@ return { name = "Paranoia", text = { "{C:paperback_light_suit}Light suits{} give {C:mult}+#1#{} Mult", - "when {C:attention}scored{} for every {C:paperback_dark_suit}dark suit", + "when scored for every {C:paperback_dark_suit}dark suit", "card {C:attention}destroyed{} this run", "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" }, @@ -1373,18 +1598,18 @@ return { j_paperback_the_sun = { name = "The Sun", text = { - "If played hand contains only", - "{C:paperback_light_suit}Light Suits{} this Joker", - "gains {C:mult}+#1#{}, lose {C:mult}+#1#{}", - "when a {C:paperback_dark_suit}Dark Suit{} is scored", + "If all scored suits are {C:paperback_light_suit}light{},", + "this Joker gains {C:mult}+#1#{} Mult", + "When a suit that isn't {C:paperback_light_suit}light{} scores,", + "this Joker loses {C:mult}-#1#{} Mult", "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)", }, }, j_paperback_pointy_stick = { name = "Pointy Stick", text = { - "Gives {X:mult,C:white}X#1#{} Mult for every", - "{C:attention}\"Stick\"{} Joker you have", + "{X:mult,C:white}X#1#{} Mult if you have", + "another {C:attention}\"Stick\"{} Joker", "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, @@ -1393,23 +1618,37 @@ return { text = { "If scoring hand contains a {C:hearts}Heart{} and", "{C:attention}#1#{} other unique suits, this Joker gives", - "{X:mult,C:white}X#2#{} Mult for {C:attention}this hand{} and {C:attention}the next #3#", + "{X:mult,C:white}X#2#{} Mult for {C:attention}this hand{} and the {C:attention}next #3#", "{C:inactive}(Currently the next {C:attention}#4#{C:inactive} hands)" }, }, j_paperback_giga_size = { name = "GIGA SIZE", text = { - "This Joker gains {X:mult,C:white}X#2#{} Mult", - "for every hand played in current {C:attention}Blind{}", - "{C:inactive}(Currently {X:mult,C:white}X#1#{C:inactive} Mult)" + "This Joker gains {X:mult,C:white}X#2#{} Mult for", + "every hand played in current {C:attention}Blind{}", + "{C:inactive}(Will give {X:mult,C:white}X#1#{C:inactive} Mult)" + }, + }, + j_paperback_photocopy = { + name = "Photocopy", + text = { + "Copies the ability", + "of rightmost {C:attention}Joker{}" + }, + }, + j_paperback_master_plan = { + name = "Master Plan", + text = { + "Copies ability of", + "{C:attention}Joker{} to the left" }, }, j_paperback_popsicle_stick = { name = "Popsicle Stick", text = { - "Gives {X:mult,C:white}X#1#{} Mult for every", - "{C:attention}\"Stick\"{} Joker you have", + "{X:mult,C:white}X#1#{} Mult if you have", + "another {C:attention}\"Stick\"{} Joker", "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", }, }, @@ -1442,28 +1681,38 @@ return { name = "Der Fluschütze", text = { "If {C:attention}first{} played hand of round", - "was a single {C:attention}face{} card, destroy it", - "and give this joker {X:mult,C:white}X#1#{} Mult", + "is a single {C:attention}face{} card, destroy it", + "and this Joker gains {X:mult,C:white}X#1#{} Mult", "{C:inactive}(Currently {X:mult,C:white}X#2#{} {C:inactive}Mult)" } }, j_paperback_the_wonder_of_you = { name = "The Wonder of You", text = { - "When the joker to the {C:attention}right{}", - "fails a {C:green}probability{} check,", - "the {C:attention}rightmost{} card held", - "in hand is {C:attention}destroyed{}" + "When selecting a {C:attention}Boss{} Blind,", + "create two random {C:attention}tags" } }, j_paperback_inner_peace = { name = "Inner Peace", text = { - "{C:attention}+3{} hand size before", - "the {C:attention}first{} hand", + "{C:attention}+3{} hand size", + "before {C:attention}first{} hand", "of round is played" } }, + j_paperback_shopkeep = { + name = "Shopkeep", + text = { + "Get a {C:attention}Coupon Tag{} every", + "{C:attention}#1#{} {C:attention}Blinds{} defeated {C:inactive}(#2#/#1#){}", + "Get a {C:attention}Voucher Tag{} when", + "{C:attention}Boss Blind{} is defeated" + }, + unlock = { + "Spend {C:money}$50{} in one shop" + } + }, j_paperback_cakepop = { name = "Cakepop", text = { @@ -1475,7 +1724,6 @@ return { j_paperback_black_rainbows = { name = "Black Rainbows", text = { - -- NOTE dark suits? "Scored {C:spades}Spades{} and {C:clubs}Clubs", "have a {C:green}#1# in #2#{} chance", "to become {C:dark_edition}Polychrome" @@ -1495,7 +1743,8 @@ return { text = { "When buying a {C:attention}Consumable{}, has a", "{C:green}#1# in #2#{} chance to create a", - "{C:dark_edition}Negative{} copy and {S:1.1,C:red,E:2}self destruct", + "{C:dark_edition}Negative{} copy and a", + "{C:green}#3# in #4#{} chance to {S:1.1,C:red,E:2}self-destruct", } }, j_paperback_heretical_joker = { @@ -1574,9 +1823,9 @@ return { j_paperback_clothespin = { name = "Clothespin", text = { - "This Joker gains {C:chips}+#1#{} Chips at", - "{C:attention}end of round{} for each", - "{C:attention}Clip{} {C:attention}held in hand", + "This Joker gains {C:chips}+#1#{} Chips", + "for each {C:attention}Clip{} {C:attention}held in hand", + "at {C:attention}end of round{}", "{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)" } }, @@ -1609,11 +1858,91 @@ return { name = "Punch Card", text = { "After {C:attention}#1#{} rounds,", - "sell this card to", - "gain {C:attention}#3#{} Ante", + "sell this card for", + "{C:attention}#3#{} Ante", "{C:inactive}(Currently {C:attention}#2#{C:inactive}/#1#)", }, }, + j_paperback_eyelander = { + name = "Eyelander", + text = { + "Scored {C:attention}face{} cards are destroyed.", + "After scoring {C:attention}#1# face{} cards,", + "{C:attention}selling{} this Joker adds {C:dark_edition}Negative{}", + "to a {C:attention}random{} Joker", + "{C:inactive}(Currently {C:attention}#2#{C:inactive} Heads)" + } + }, + j_paperback_banana_man = { + name = "Banana Man", + text = { + "Jokers have a {C:green}#1# in #2#{} chance", + "to give {X:mult,C:white} X#3# {} Mult" + }, + unlock = { + "Acquire", + "{C:attention}Cavendish", + "in a run" + } + }, + j_paperback_guns_blazin = { + name = "Guns Blazin'", + text = { + "Played {C:attention}Aces{}", + "give {X:mult,C:white}X#1#{} Mult", + "when scored", + }, + }, + j_paperback_satellite_array = { + name = "Satellite Array", + text = { + "This Joker gains {C:chips}+#1#{} Chips", + "for each {C:planet}Planet{} card used", + "and loses {C:chips}-#2#{} Chips", + "for every hand played", + "{C:inactive}(Currently {C:chips}+#3#{C:inactive} Chips)", + } + }, + j_paperback_rosary_beads = { + name = "Rosary Beads", + text = { + "If scored hand contains", + "{C:attention}#1#{} or more {C:hearts}Hearts{}, earn {C:money}$#2#{}" + } + }, + j_paperback_tian_tian = { + name = "Tian Tian", + text = { + "This Joker gains {X:mult,C:white}X#1#{} Mult when", + "a playing card is {C:attention}destroyed{}", + "{C:inactive}(Currently {X:mult,C:white} X#2# {C:inactive} Mult)" + } + }, + j_paperback_disco = { + name = "Disco Joker", + text = { + "This Joker gains {C:mult}+#1#{} Mult when", + "buying a card with {C:money}$#2#{} or less", + "{C:inactive}(Currently {C:mult}+#3#{C:inactive} Mult)" + } + }, + j_paperback_a_balatro_movie = { + name = "A Balatro Movie", + text = { + "If {C:attention}played hand{} is the {C:attention}same{}", + "as the {C:attention}previous hand{}, earn {C:money}$#2#{}", + "{C:inactive}(Last played: {C:attention}#1#{C:inactive})" + } + }, + j_paperback_unionized_labor = { + name = "Unionized Labor", + text = { + "{C:attention}Triples{} all listed {C:green,E:1,S:1.1}probabilities", + "while you have {C:money}$#1#{} or less", + "{C:attention}Halves{} probabilities otherwise", + "{C:inactive}(ex: {C:green}1 in 3{C:inactive} -> {C:green}#2# in #3#{C:inactive})" + } + }, -- Cross-Mod jokers start here j_paperback_moon_waltz = { name = "Moon Waltz", @@ -1649,6 +1978,21 @@ return { "{C:attention}#1#{} Antes" } }, + c_paperback_apostle_of_pentacles = { + name = "Apostle of Pentacles", + text = { + "Add a {C:paperback_platinum}Platinum Clip{} to", + "{C:attention}#1#{} selected card" + } + }, + c_paperback_golden_bough = { + name = "Golden Bough", + text = { + "Creates a random {C:dark_edition}Negative", + "{C:paperback_ego_gift}E.G.O. Gift{} after each {C:attention}Boss Blind", + "{C:red}#1#{} Joker Slot" + } + }, }, paperback_minor_arcana = { c_paperback_ace_of_cups = { @@ -1717,8 +2061,9 @@ return { name = "Nine of Cups", text = { "Destroy selected {C:attention}Joker{} and", - "create a new {C:attention}Joker{} of equal", - "{C:attention}rarity{}, or higher if possible", + "create a new {C:attention}Joker{} of higher", + "{C:attention}rarity{} if possible, otherwise", + "create one of equal rarity", "{C:inactive}(Cannot create a {C:legendary}Legendary{C:inactive})" } }, @@ -1907,11 +2252,9 @@ return { c_paperback_five_of_swords = { name = "Five of Swords", text = { - "Select {C:attention}#1#{} cards, destroy the", - "rightmost two and give the", - "leftmost a random {C:attention}edition{},", + "Give a random {C:attention}edition{},", "{C:attention}seal{} or {C:attention}enhancement", - "{C:inactive}(Drag to rearrange)" + "to {C:attention}#1#{} selected card" } }, c_paperback_six_of_swords = { @@ -1938,17 +2281,16 @@ return { c_paperback_nine_of_swords = { name = "Nine of Swords", text = { - "Destroy selected Joker", - "It is {C:red}unable{} to appear again", - "for {C:attention}the remainder of the run{}" + "Destroy selected Joker and earn {C:money}$#2#{}", + "It {C:red}cannot{} appear again this run", + "{C:inactive}(Can destroy {C:paperback_eternal}Eternals{C:inactive})" } }, c_paperback_ten_of_swords = { name = "Ten of Swords", text = { - "{C:attention}Destroy{} cards in deck", - "with the same {C:attention}rank", - "as selected card" + "{C:attention}Destroy{} all cards in full deck", + "with the same {C:attention}rank{} as selected card" } }, c_paperback_page_of_swords = { @@ -1967,13 +2309,6 @@ return { "{C:inactive}(Must have room)" } }, - c_paperback_king_of_swords = { - name = "King of Swords", - text = { - "Remove {C:money}Rental{} and {C:paperback_perishable}Perishable", - "from a selected Joker" - } - }, c_paperback_queen_of_swords = { name = "Queen of Swords", text = { @@ -1982,6 +2317,13 @@ return { "to the selected card's {C:attention}suit" } }, + c_paperback_king_of_swords = { + name = "King of Swords", + text = { + "Remove {C:money}Rental{} and {C:paperback_perishable}Perishable", + "from selected Joker" + } + }, c_paperback_ace_of_pentacles = { name = "Ace of Pentacles", text = { @@ -1989,7 +2331,293 @@ return { "{C:attention}#1#{} selected cards", "to {V:1}#2#{}", } - } + }, + c_paperback_two_of_pentacles = { + name = "Two of Pentacles", + text = { + "Selected Joker gains", + "or loses {C:paperback_eternal}Eternal{}" + } + }, + c_paperback_three_of_pentacles = { + name = "Three of Pentacles", + text = { + "Select {C:attention}#1#{} cards, the", + "{C:attention}rightmost two{} copy the", + "{C:attention}leftmost{} card's {C:attention}enhancement{}", + "{C:inactive}(Drag to rearrange)" + } + }, + c_paperback_four_of_pentacles = { + name = "Four of Pentacles", + text = { + "Select {C:attention}#1#{} cards.", + "{C:green}#2# in #3#{} chance to", + "destroy each {C:attention}unselected{}", + "card in hand" + } + }, + c_paperback_five_of_pentacles = { + name = "Five of Pentacles", + text = { + "Enhances {C:attention}#1#{}", + "selected card into", + "an {C:attention}#2#{}" + } + }, + c_paperback_six_of_pentacles = { + name = "Six of Pentacles", + text = { + "Gives an {C:money}Investment{},", + "{C:money}Economy{}, {C:red}Coupon{},", + "{C:green}D6{}, or {C:attention}Juggle Tag{}" + } + }, + c_paperback_seven_of_pentacles = { + name = "Seven of Pentacles", + text = { + "Add a {C:green}Green Clip{} to up", + "to {C:attention}#1#{} selected cards" + } + }, + c_paperback_eight_of_pentacles = { + name = "Eight of Pentacles", + text = { + "Earn {C:money}$#1#{} for every unique", + "{C:tarot}Tarot{} and {C:paperback_minor_arcana}Minor Arcana{}", + "card used this run", + "{C:inactive}(Currently {C:money}$#2#{C:inactive})" + } + }, + c_paperback_nine_of_pentacles = { + name = "Nine of Pentacles", + text = { + "Add a {C:purple}Purple Clip{} to", + "{C:attention}#1#{} selected card" + } + }, + c_paperback_ten_of_pentacles = { + name = "Ten of Pentacles", + text = { + "Earn between {C:money}$#1#{} and {C:money}$#2#{}" + } + }, + c_paperback_page_of_pentacles = { + name = "Page of Pentacles", + text = { + "Enhances {C:attention}#1#{}", + "selected cards to", + "{C:attention}#2#s{}" + } + }, + c_paperback_knight_of_pentacles = { + name = "Knight of Pentacles", + text = { + "Reset {C:green}Reroll{} cost to {C:money}$#1#{}" + } + }, + c_paperback_queen_of_pentacles = { + name = "Queen of Pentacles", + text = { + "Select {C:attention}#1#{} cards.", + "Copy the {C:attention}left{} card's", + "{C:attention}rank{} onto the {C:attention}right{} card", + "{C:inactive}(Drag to rearrange)" + } + }, + c_paperback_king_of_pentacles = { + name = "King of Pentacles", + text = { + "Earn {C:money}$#1#{} for each {C:attention}face{}", + "card in your full deck", + "{C:inactive}(Currently {C:money}$#2#{C:inactive})" + } + }, + }, + paperback_ego_gift = { + c_paperback_dark_vestige = { + name = "Dark Vestige", + text = { + "The result of attempting to", + "have duplicate {C:paperback_ego_gift}E.G.O Gifts{}...", + } + }, + c_paperback_imposed_weight = { + name = "Imposed Weight", + text = { + "Retrigger the {C:attention}rightmost scoring{} card", + "{C:attention}#1#{} time for each {C:attention}empty{} Joker slot", + } + }, + c_paperback_phlebotomy_pack = { + name = "Phlebotomy Pack", + text = { + "{C:blue}+#1#{} hand each round", + } + }, + c_paperback_smokes_and_wires = { + name = "Smokes and Wires", + text = { + "{X:red,C:white}X#1#{} Mult on {C:attention}final", + "{C:attention}hand{} of round", + } + }, + c_paperback_coffee_and_cranes = { + name = "Coffee and Cranes", + text = { + "Earn {C:money}$#1#{} at end of round", + } + }, + c_paperback_fiery_down = { + name = "Fiery Down", + text = { + "After discarding {C:attention}#1#{} {C:inactive}(#2#){}", + "cards, upgrade next", + "played {C:attention}poker hand" + } + }, + c_paperback_decamillennial_stewpot = { + name = "Decamillenial Stewpot", + text = { + "If {C:attention}first hand{} of round", + "is a {C:attention}single{} card, destroy it", + } + }, + c_paperback_downpour = { + name = "Downpour", + text = { + "Played hands lower the", + "{C:attention}blind requirement{} by {C:attention}#1#%", + } + }, + c_paperback_rusty_coin = { + name = "Rusty Commemorative Coin", + text = { + "If {C:attention}first hand{} of round", + "is a {C:attention}single{} card,", + "add a random {C:attention}seal{} to it" + } + }, + c_paperback_ragged_umbrella = { + name = "Ragged Umbrella", + text = { + "This {C:paperback_ego_gift}E.G.O. Gift{} gains {C:chips}+#1#{} Chips", + "every time a {C:attention}played hand", + "does not defeat the {C:attention}Blind", + "{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)", + } + }, + c_paperback_thrill = { + name = "Thrill", + text = { + "On {C:attention}first{} hand of round,", + "this {C:paperback_ego_gift}E.G.O. Gift{} gives {X:mult,C:white}X#1#{} Mult", + "for every {C:attention}discard{} used this {C:attention}round", + "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)", + } + }, + c_paperback_thrill_inactive = { + name = "Thrill", + text = { + "On {C:attention}first{} hand of round,", + "this {C:paperback_ego_gift}E.G.O. Gift{} gives {X:mult,C:white}X#1#{} Mult", + "for every {C:attention}discard{} used this {C:attention}round", + } + }, + c_paperback_disk_fragment = { + name = "Disk Fragment", + text = { + "When {C:attention}Small Blind{} or {C:attention}Big Blind{} is selected,", + "create {C:attention}#1#{} {C:dark_edition}Negative{} {C:planet}Planet{} cards", + "if none are currently owned", + } + }, + c_paperback_death_seeker = { + name = "Deathseeker", + text = { + "{C:attention}Enhanced{} cards give {C:mult}+Mult{}", + "equal to their {C:attention}rank{} when scored", + } + }, + c_paperback_pendant_of_nostalgia_minor_arcana = { + name = "Pendant of Nostalgia", + text = { + "Whenever a {C:attention}playing card{} is destroyed,", + "create a random {C:tarot}Tarot{} or {C:paperback_minor_arcana}Minor Arcana{} card", + "{C:inactive}(Must have room)" + } + }, + c_paperback_pendant_of_nostalgia = { + name = "Pendant of Nostalgia", + text = { + "Whenever a {C:attention}playing card{} is destroyed,", + "create a random {C:tarot}Tarot{} card", + "{C:inactive}(Must have room)" + } + }, + c_paperback_blue_lighter = { + name = "Blue Zippo Lighter", + text = { + "When selecting {C:attention}Blind{},", + "destroy a non-{C:paperback_ego_gift}E.G.O. Gift{} consumable", + "and this {C:paperback_ego_gift}E.G.O. Gift{} gains {X:mult,C:white}X#1#{} Mult", + "{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)" + } + }, + c_paperback_broken_glasses = { + name = "Broken Glasses", + text = { + "Whenever exactly {C:attention}1{} or {C:attention}2{} cards are {C:attention}destroyed{},", + "create {C:attention}two copies{} of each destroyed card", + "{C:green}#1# in #2#{} chance to {C:red}self-destruct{} after" + } + }, + c_paperback_nebulizer = { + name = "Nebulizer", + text = { + "Scored cards have a {C:green}#1# in #2#{}", + "chance to give {X:mult,C:white}X#3#{} Mult" + } + }, + c_paperback_tomorrow_fortune = { + name = "Tomorrow's Fortune", + text = { + "All {C:attention}Booster Packs{} contain", + "{C:attention}1{} more card to choose from" + } + }, + c_paperback_fluorescent_lamp = { + name = "Fluorescent Lamp", + text = { + "{C:red}+#1#{} discard, and", + "{C:red}+#1#{} discard for every", + "{C:attention}#2#{} empty {C:attention}Joker{} slots", + "{C:inactive}(Currently {C:red}+#3#{C:inactive} discards)" + } + }, + c_paperback_lightning_rod = { + name = "Lightning Rod", + text = { + "Cards {C:attention}held in hand{}", + "have a {C:green}#1# in #2#", + "chance to retrigger" + } + }, + c_paperback_chalice_of_trickle_down = { + name = "Chalice of Trickle Down", + text = { + "During {C:attention}Boss Blinds{}, gives", + "{C:money}money{} equal to lowest rank", + "in {C:attention}scoring hand" + } + }, + c_paperback_patrolling_flashlight = { + name = "Patrolling Flashlight", + text = { + "The first consumable used each {C:attention}Ante{}", + "creates a {C:attention}Energized copy{}" + } + }, }, Voucher = { v_paperback_celtic_cross = { @@ -2008,6 +2636,23 @@ return { "appear in the {C:money}Shop" } }, + v_paperback_second_trumpet = { + name = "Second Trumpet", + text = { + "Your first {C:paperback_ego_gift}E.G.O. Gift{}", + "gives {C:attention}+#1#{} consumable slot" + } + }, + v_paperback_rabbit_protocol = { + name = "Rabbit Protocol", + text = { + "{C:attention}Selling{} an {C:paperback_ego_gift}E.G.O. Gift{}", + "{C:attention}disables{} the current {C:attention}Boss Blind" + }, + unlock = { + "Sell {C:attention}#1#{} {C:paperback_ego_gift}EGO Gifts{} in one Run" + } + }, }, Tag = { tag_paperback_angel_investment = { @@ -2068,10 +2713,9 @@ return { m_paperback_ceramic = { name = "Ceramic Card", text = { - "Earns between {C:money}$#1#{}", - "and {C:money}$#2#{} when scored,", - "{C:red}Shatter{} card if", - "{C:mult}Mult{} ended up ", + "Earn between {C:money}$#1#{}", + "and {C:money}$#2#{} when scored", + "{C:red}Shatters{} if {C:mult}Mult{} ended up", "{C:attention}greater{} than {C:chips}Chips", "while played or held" } @@ -2080,7 +2724,7 @@ return { name = "Soaked Card", text = { "When scored, cards {C:attention}held in hand{}", - "score their {C:chips}Chip value{}.", + "score their {C:chips}Chip value{}", "{C:green}#1# in #2#{} chance to", "{C:red}destroy{} card on {C:red}discard", } @@ -2103,7 +2747,7 @@ return { m_paperback_domino = { name = "Domino Card", text = { - "Gives {C:mult}+#1#{} Mult for every played", + "{C:mult}+#1#{} Mult for every played", "or discarded rank this round", "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" } @@ -2113,7 +2757,23 @@ return { text = { "If {C:attention}held in hand{} after a", "hand is played, scored cards", - "permanently gain {C:mult}#1#{} Mult" + "permanently gain {C:mult}+#1#{} Mult" + } + }, + m_paperback_sleeved = { + name = "Sleeved Card", + text = { + "Cannot be {C:attention}debuffed{} or", + "{C:attention}flipped{} face down", + "Earn {C:money}$#1#{} if destroyed" + } + }, + m_paperback_antique = { + name = "Antique Card", + text = { + "{X:chips,C:white}X#1#{} Chips,", + "increases by {X:chips,C:white}X#2#{} when", + "played in scoring hand", } } }, @@ -2121,7 +2781,15 @@ return { e_paperback_dichrome = { name = "Dichrome", text = { - "When {C:attention}Blind{} is selected", + "When {C:attention}Blind{} is selected,", + "gain {C:attention}+#1#{C:blue} Hand{} or {C:red}Discard", + "{C:inactive}(Whichever is lower)" + } + }, + e_paperback_dichrome_playing_card = { + name = "Dichrome", + text = { + "When this card is {C:attention}drawn{},", "gain {C:attention}+#1#{C:blue} Hand{} or {C:red}Discard", "{C:inactive}(Whichever is lower)" } @@ -2137,6 +2805,15 @@ return { "learn what it does", }, }, + undiscovered_paperback_ego_gift = { + name = "Not Discovered", + text = { + "Purchase", + "this card in an", + "unseeded run to", + "learn what it does", + }, + }, paperback_light_suits = { name = "Light Suits", text = { @@ -2205,20 +2882,39 @@ return { "disabled in {C:legendary}Paperback", } }, + paperback_requires_ego_gifts = { + name = "Requires E.G.O. Gifts", + text = { + "Removed from pool due", + "to {C:paperback_ego_gift}E.G.O. Gifts{} being", + "disabled in {C:legendary}Paperback", + } + }, -- Stickers paperback_energized = { name = "Energized", text = { "Cannot be copied by", - "{C:attention}#1#{}" + "{C:attention}#1#{} or", + "{C:attention}#2#{}", } }, paperback_temporary = { name = "Temporary", text = { - "Will be {C:mult}destroyed", - "when round ends" + "{C:red}Removed{} when", + "round ends" + } + }, + paperback_corroded = { + name = "Corroded", + text = { + "Can be {C:money}sold{} without", + "activating a {C:paperback_ego_gift}Sin", + "{C:red}Self-destructs{} and", + "activates the {C:paperback_ego_gift}Sin", + "after {C:attention}#1#{} round#2#", } }, @@ -2226,76 +2922,162 @@ return { paperback_blue_clip = { name = "Blue Clip", text = { - "{X:chips,C:white}X#1#{} Chips when", - "{C:attention}scored{} for each", - "{C:attention}Clip{} in {C:attention}held hand", - "{C:inactive}(Currently {X:chips,C:white}X#2#{C:inactive})" + "When {C:attention}scored{}, {X:chips,C:white}X#1#{} Chips", + "for each {C:attention}Clip{} held in hand", + "{C:inactive}(Currently {X:chips,C:white}X#2#{C:inactive} Chips)" } }, paperback_red_clip = { name = "Red Clip", text = { - "{C:mult}+#1#{} Mult when", - "{C:attention}scored{} for each", - "{C:attention}Clip{} in {C:attention}held hand", + "When {C:attention}scored{}, {C:mult}+#1#{} Mult", + "for each {C:attention}Clip{} held in hand", "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" } }, paperback_orange_clip = { name = "Orange Clip", text = { - "Earn {C:money}$#1#{} when", - "{C:attention}scored{} for every {C:attention}#2#", - "{C:attention}Clips{} in {C:attention}held hand", + "When {C:attention}scored{}, earn {C:money}$#1#{}", + "for every {C:attention}2 Clips{} held in hand", "{C:inactive}(Currently {C:money}$#3#{C:inactive})" } }, paperback_black_clip = { name = "Black Clip", text = { - "Retriggers when", - "{C:attention}scored{} if a {C:attention}Clip", - "is {C:attention}held in hand", + "Retriggers when {C:attention}scored{}", + "if a {C:attention}Clip{} is held in hand", } }, paperback_yellow_clip = { name = "Yellow Clip", text = { - "If {C:attention}scored{} while a {C:attention}Clip", - "is {C:attention}held in hand{} it has", - "a {C:green}#1# in #2#{} chance for {C:red}+#3#{} Mult,", - "a {C:green}#4# in #5#{} chance for {X:mult,C:white}X#6#{} Mult", - "and a {C:green}#7# in #8#{} chance for {C:money}$#9#{}", + "If {C:attention}scored{} while", + "a {C:attention}Clip{} is held in hand,", + "{C:green}#1# in #2#{} chance for {C:red}+#3#{} Mult,", + "{C:green}#4# in #5#{} chance for {X:mult,C:white}X#6#{} Mult", + "and {C:green}#7# in #8#{} chance for {C:money}$#9#{}", } }, paperback_gold_clip = { name = "Gold Clip", text = { - "Earn {C:money}$#1#{} for each scored {C:attention}Clip{}", - "if this card is {C:attention}held in hand", - "at the end of round", - "{C:inactive}(Currently {C:money}$#2#{C:inactive})" + "If {C:attention}held in hand{} at {C:attention}end of round{},", + "earn {C:money}$#1#{} for each", + "{C:attention}Clip{} scored this round", + "{C:inactive}(Currently {C:money}$#2#{C:inactive}/$#3# max)" } }, paperback_white_clip = { name = "White Clip", text = { - "If {C:attention}held in hand{} at {C:attention}end of", - "{C:attention}round{}, gains {C:chips}+#1#{} Chips for", - "each {C:attention}Clip{} scored this round", + "If {C:attention}held in hand{} at {C:attention}end of round{},", + "this Clip gains {C:chips}+#1#{} Chips", + "for each {C:attention}Clip{} scored this round", "{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)" } }, paperback_pink_clip = { name = "Pink Clip", text = { - "{X:mult,C:white}X#1#{} Mult when {C:attention}held in", - "{C:attention}hand{}, increases by {X:mult,C:white}X#2#", - "for each scored {C:attention}Clip", + "When {C:attention}held in hand{}, {X:mult,C:white}X#1#{} Mult", + "Increases by {X:mult,C:white}X#2#{}", + "for each scored {C:attention}Clip{}", "{C:inactive}(Resets after played hand)" } }, - + paperback_green_clip = { + name = "Green Clip", + text = { + "This Clip gains {C:mult}+#2#{} Mult", + "for every {C:attention}2{} scoring {C:attention}Clips{} played,", + "{C:mult}#3#{} Mult for each discarded {C:attention}Clip{}", + "{C:inactive}(Currently {C:mult}+#1#{C:inactive} Mult)" + } + }, + paperback_purple_clip = { + name = "Purple Clip", + text = { + "Retrigger {C:attention}adjacent{} cards", + "if they have a {C:attention}Clip{}" + } + }, + paperback_platinum_clip = { + name = "Platinum Clip", + text = { + "When {C:attention}scored{}, force-trigger", + "all non-{C:paperback_platinum}Platinum{} {C:attention}Clips{}", + "held in hand" + } + }, + -- E.G.O. Gift Sins + paperback_sin_none = { + name = "Vestige", + text = { + "Always sells for {C:money}$#1#{}" + } + }, + paperback_sin_wrath = { + name = "Wrath", + text = { + "When sold, {C:attention}destroy{}", + "all held {C:attention}consumables" + } + }, + paperback_sin_lust = { + name = "Lust", + text = { + "When sold, downgrade", + "{C:attention}most played hand{} by {C:attention}#1# levels{}" + } + }, + paperback_sin_sloth = { + name = "Sloth", + text = { + "Can only be sold directly", + "after skipping a {C:attention}Blind" + } + }, + paperback_sin_gluttony = { + name = "Gluttony", + text = { + "When sold, add {C:paperback_perishable}Perishable{}", + "to a random {C:attention}Joker{}" + } + }, + paperback_sin_gloom = { + name = "Gloom", + text = { + "When sold, multiply all {C:attention}Blind{} sizes by {C:attention}X#1#{}" + } + }, + paperback_sin_pride = { + name = "Pride", + text = { + "Always sells for {C:money}#2#{}" + } + }, + paperback_sin_envy = { + name = "Envy", + text = { + "When sold, {C:attention}-#1#{} hand size" + } + }, + paperback_sin_madness = { + name = "Madness", + text = { + "When sold, {C:attention}destroy{}", + "a random {C:attention}Joker" + } + }, + p_paperback_ego_gift_normal = { + name = "E.G.O. Gift Extraction Pack", + text = { + "Choose {C:attention}#1#{} of up to", + "{C:attention}#2#{C:paperback_ego_gift} E.G.O Gifts{}", + }, + }, -- Minor Arcana p_paperback_minor_arcana_normal = { name = "Minor Arcana Pack", @@ -2326,9 +3108,9 @@ return { pnr_paperback_virtual = { name = "Virtual", text = { - "Retrigger the {C:attention}first scoring", - "{C:paperback_light_suit}Light Suit{} in each played hand", - "if no {C:paperback_dark_suit}Dark Suits{} were played", + "Retrigger {C:attention}first scoring", + "{C:paperback_light_suit}light suit{} if", + "no {C:paperback_dark_suit}dark suits{} were played", } }, pnr_paperback_aftermath = { @@ -2336,21 +3118,20 @@ return { text = { "Scored {C:attention}face cards{}", "gain {C:chips}+#1#{} Chips", - "when scored", } }, pnr_paperback_faker = { name = "Faker", text = { - "{C:attention}Once a round{} if", - "a played hand was a", + "{C:attention}Once a round{}, if", + "played hand is a", "{C:attention}single card{}, destroy it", } }, pnr_paperback_faker_buffed = { text = { - "If a played hand was", - "a {C:attention}single card{}, destroy it", + "If played hand is a", + "{C:attention}single card{}, destroy it", } }, }, @@ -2453,6 +3234,22 @@ return { "Defeating a {C:attention}Showdown Blind", "gives a {C:dark_edition,T:tag_negative}Negative{} Tag" } + }, + sleeve_paperback_shimmering = { + name = "Shimmering Sleeve", + text = { + "{C:attention}+#1#{} consumable slot for", + "every unique {C:attention}Sin{} owned", + "{C:red}#2#{} Joker Slots", + "{C:paperback_ego_gift}E.G.O. Gift Extraction Packs{}", + "are {C:attention}5X{} more common" + } + }, + sleeve_paperback_shimmering_buff = { + name = "Shimmering Sleeve", + text = { + "TBD" + } } } }, @@ -2465,6 +3262,24 @@ return { -- Text shown at the bottom while opening booster paperback_minor_arcana_pack = "Minor Arcana Pack", + -- Badge under gifts + k_paperback_ego_gift = "E.G.O. Gift", + -- Name of consumable type in collection + b_paperback_ego_gift_cards = "E.G.O. Gift", + -- Text shown at the bottom while opening booster + paperback_ego_gift_pack = "E.G.O. Gift Extraction", + + -- Badge under E.G.O. Gifts based on sins + k_paperback_ego_sin_none = "Vestige", + k_paperback_ego_sin_pride = "Pride", + k_paperback_ego_sin_wrath = "Wrath", + k_paperback_ego_sin_gloom = "Gloom", + k_paperback_ego_sin_sloth = "Sloth", + k_paperback_ego_sin_lust = "Lust", + k_paperback_ego_sin_envy = "Envy", + k_paperback_ego_sin_gluttony = "Gluttony", + k_paperback_ego_sin_madness = "Madness", + paperback_confessed_ex = "Confessed!", paperback_polychrome_ex = "Polychrome!", paperback_destroyed_ex = "Destroyed!", @@ -2476,13 +3291,14 @@ return { paperback_copy_ex = "Copy!", paperback_consumed_ex = "Consumed!", paperback_too_hot_ex = "Too Hot!", - paperback_inactive = "Inactive", + paperback_inactive = "inactive", paperback_supplies_ex = "Supplies!", paperback_melted_ex = "Melted!", paperback_investment_ex = "Investment!", paperback_plus_minor_arcana = "+1 M. Arcana", paperback_plus_consumable = "+1 Consumable", paperback_plus_tag = "+1 Tag", + paperback_enhanced_ex = "Enhanced!", paperback_edition_ex = "Edition!", paperback_rare_ex = "Rare!", paperback_saved_unholy_alliance = "Saved by Unholy Alliance", @@ -2491,6 +3307,7 @@ return { paperback_determination_ex = "NGAAAHH!", paperback_forlorn_destruction = "Sorry...", paperback_freezer_ex = "Dinner Time!", + paperback_corroded_ex = "Corroded!", paperback_jestosterone_ex = "Masc!", paperback_jestrogen_ex = "Fem!", paperback_punch_card_active = "Tell your friends!", @@ -2500,6 +3317,7 @@ return { paperback_ui_no_requires_restart = "Doesn't Require Restart", paperback_ui_enable_blinds = "Enable Blinds", paperback_ui_enable_minor_arcana = "Enable Minor Arcana", + paperback_ui_enable_ego_gifts = "Enable E.G.O. Gifts", paperback_ui_enable_enhancements = "Enable Enhancements", paperback_ui_enable_editions = "Enable Editions", paperback_ui_enable_paperclips = "Enable Paperclips", @@ -2554,7 +3372,7 @@ return { -- Clippy messages paperback_clippy_msg_1 = "Save file?", - paperback_clippy_msg_2 = "i'm Clippy!", + paperback_clippy_msg_2 = "I'm Clippy!", paperback_clippy_msg_3 = "Hi!", paperback_clippy_msg_4 = "Keyboard is on!", paperback_clippy_msg_5 = "I'll help!", @@ -2569,6 +3387,10 @@ return { paperback_da_capo_Diamonds = "Movement 3", paperback_da_capo_Hearts = "Movement 4", paperback_da_capo_None = "Finale!", + + -- Suit category + paperback_light = "Light", + paperback_dark = "Dark", }, v_dictionary = { paperback_a_discards = "+#1# Discards", @@ -2625,9 +3447,13 @@ return { paperback_yellow_clip = "Yellow Clip", paperback_gold_clip = "Gold Clip", paperback_white_clip = "White Clip", + paperback_green_clip = "Green Clip", + paperback_purple_clip = "Purple Clip", + paperback_platinum_clip = "Platinum Clip", paperback_dichrome = "Dichrome", paperback_energized = "Energized", paperback_temporary = "Temporary", + paperback_corroded = "Corroded", } } } diff --git a/localization/es_419.lua b/localization/es_419.lua new file mode 100644 index 00000000..5d631b73 --- /dev/null +++ b/localization/es_419.lua @@ -0,0 +1,3434 @@ +return { -- Español + descriptions = { + Back = { + b_paperback_paper = { + name = "Baraja de Papel", + text = { + "Los {C:attention}Comodines{} de {C:legendary}Paperback{}", + "son {C:attention}3X nás comunes,", + "Comienza la partida con el", + "Comodín {C:attention,T:j_paperback_shopping_center}#1#{}" + } + }, + b_paperback_proud = { + name = "Baraja Arcoiris", + text = { + "Tu baraja comienza con", + "{C:hearts}Corazones{}, {C:diamonds}Diamantes{},", + "{C:spades}Espadas{}, {C:clubs}Tréboles{}", + "{C:paperback_crowns}Coronas{} y {C:paperback_stars}Estrellas" + } + }, + b_paperback_silver = { + name = "Baraja de Plata", + text = { + "Comienza la partida con", + "el vale {C:paperback_minor_arcana,T:v_paperback_celtic_cross}#1#{}", + "y un {C:paperback_minor_arcana,T:c_paperback_nine_of_cups}#2#" + } + }, + b_paperback_dreamer = { + name = "Baraja Soñadora", + text = { + "Comienza con un", + "{C:paperback_minor_arcana,T:c_paperback_apostle_of_wands}#1#", + "{C:paperback_temporary}Temporal", + "{C:attention}#2#{} Ranura de comodín" + } + }, + b_paperback_antique = { + name = "Baraja Antigua", + text = { + "Los {C:tarot}Paquetes Arcanos{} no", + "aparecerán en la tienda", + "Los {C:paperback_minor_arcana}Paquetes de Arcana Menor", + "son {C:attention}3X{} más comunes" + } + }, + b_paperback_passionate = { + name = "Baraja Apasionada", + text = { + "Después de derrotar una", + "{C:attention}Ciega Jefe{}, gana una", + "{C:attention,T:tag_paperback_high_risk}#1#", + "No puedes ganar {C:money}interés" + } + }, + b_paperback_shimmering = { + name = "Baraja Reluciente", + text = { + "{C:attention}+#1#{} ranura de consumibles", + "por cada {C:attention}Pecado{} único en tu", + "posesión", + "{C:red}#2#{} Ranuras de Comodín", + "Los {C:paperback_ego_gift}Paquetes de Extracción E.G.O.{}", + "Son {C:attention}5X{} más comunes" + } + }, + }, + Blind = { + bl_paperback_quarter = { + name = "La Corchea", + text = { + "#1# en #2# cartas", + "son debilitadas" + }, + }, + bl_paperback_half = { + name = 'La Mitad', + text = { + 'Reduce todas las', + 'posibilidades a la mitad' + } + }, + bl_paperback_whole = { + name = 'La Entera', + text = { + 'Las Categorias usadas', + 'anteriormente en esta', + 'son debilitadas' + } + }, + bl_paperback_rest = { + name = 'La Pausa', + text = { + '#1# en #2# posibilidades de', + 'que las cartas de números', + 'salgan boca abajo' + } + }, + bl_paperback_flat = { + name = 'El Bemol', + text = { + 'Reduce la categoría', + 'de las cartas jugadas' + } + }, + + bl_paperback_sharp = { + name = 'La Sostenida', + text = { + 'Aumenta la categoría', + 'de las cartas jugadas' + } + }, + bl_paperback_natural = { + name = 'La Natural', + text = { + 'Jugar manos por encima', + 'del nivel más bajo', + 'debilita las cartas' + } + }, + bl_paperback_coda = { + name = 'La Coda', + text = { + 'No puedes mover', + 'las cartas ni', + 'los comodines' + } + }, + bl_paperback_taupe_treble = { + name = 'Clave de sol', + text = { + 'Debes anotar una', + 'carta mejorada', + } + }, + }, + Joker = { + j_paperback_showdown = { + name = "Confrontación", + text = { + "Cada {V:1}#1#{} y {V:2}#2#{} en {C:attention}mano{}", + "tienen una prob. de {C:green}#3# en #4#", + "de otorgar {C:money}$#5#", + } + }, + j_paperback_golden_egg = { + name = "Huevo de Oro", + text = { + "Jugar una {C:attention}mano secreta{}", + "otorga el valor de venta", + "del {C:attention}Comodín{} a la derecha" + }, + unlock = { + "Win a run with a", + "{C:attention}secret hand{} as your", + "most played hand" + } + }, + j_paperback_insurance_policy = { + name = "Politica de Seguros", + text = { + "Ganas {C:mult}+#1#{} Multi por cada {C:attention}Jota{}", + "y pierdes {C:mult}-#1#{} Multi por cada {C:attention}Rey{}", + "en tu baraja", + "{C:inactive}(Actualmente {C:mult}#2#{C:inactive} Multi){}", + } + }, + j_paperback_burning_pact = { + name = "Pacto Ardiente", + text = { + "Si {C:attention}descartas{} una sola {C:attention}#1#{} carta", + "saca {C:attention}#2#{} cartas de la baraja" + } + }, + j_paperback_blade_dance = { + name = "Danza de Espadas", + text = { + "Al seleccionar una {C:attention}Ciega{},", + "crea {C:attention}#1#{} {C:attention}Castar de acero{}", + "{C:paperback_temporary}temporales" + } + }, + j_paperback_claw = { + name = "Garras", + text = { + "Anotar un {C:attention}#1#{} hace que todos los {C:attention}#1#{}", + "otorgen {C:mult}+#2#{} Multi adicional por", + "por cada {C:attention}#1#{} anotado", + "Se reinicia al {C:attention}final de la ronda", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)" + } + }, + j_paperback_chaplin = { + name = "Chaplin", + text = { + "Al comprar un {C:attention}Vale{} tambien", + "consigues su {C:attention}Mejora{}" + } + }, + j_paperback_milk_tea = { + name = "Té con Leche", + text = { + "{C:purple}Balancea{} el {C:attention}#1#%{} de las {C:chips}Fichas{} y {C:mult}Multi", + "Se reduce un {C:attention}#2#%{} si el {C:mult}Multi{}", + "es {C:attention}mayor{} a las {C:chips}Fichas" + } + }, + j_paperback_nichola = { + name = "Nichola", + text = { + "Las Cartas {C:attention}Figura{} {C:attention}en mano", + "cuentan como {C:attention}anotadas" + } + }, + j_paperback_the_dynasty = { + name = "La Dinastía", + text = { + "{X:mult,C:white}X#1#{} Multi si", + "la mano jugada contiene", + "un {C:attention}#2#" + } + }, + j_paperback_lurid_joker = { + name = "Comodín tenebroso", + text = { + "Otorga {C:chips}+#1#{} Fichas si", + "la mano jugada contiene", + "un {C:attention}#2#" + } + }, + j_paperback_zealous_joker = { + name = "Comodín Ferviente", + text = { + "Otorga {C:mult}+#1#{} Multi si", + "la mano jugada contiene", + "un {C:attention}#2#" + } + }, + j_paperback_deviled_egg = { + name = "Huevo Endiablado", + text = { + "La primera carta {C:attention}anotada{} en", + "la ronda se vuelve de {C:attention}Oro{}.", + "Se consume en {C:attention}#1#{} rondas" + } + }, + j_paperback_pear = { + name = "Pera", + text = { + "Gana {C:chips}+#2#{} Fichas si la mano", + "contiene un {C:attention}#1#{}.", + "Pierde {C:chips}-#3#{} Fichas si la", + "mano no contiene {C:attention}#1#{}", + "Se consume al llegar a 0", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)" + } + }, + j_paperback_teapot = { + name = "Tetera", + text = { + "Gana {C:blue}+#1#{} fichas al cuando", + "una {C:attention}#2#{} anota", + "{C:inactive}(Actualmente {C:blue}+#3#{C:inactive} Fichas)" + } + }, + j_paperback_the_one_who_waits = { + name = "El Que Espera", + text = { + "Si la mano {C:attention}anota{} {V:1}#1#s{}:", + -- error: missing an "este Comodín" + "Prob. de {C:green}#2# en #3#{} de ganar {X:mult,C:white}X#4#{} Multi", + "Prob. de {C:green}#5# en #6#{} de crear {C:tarot}#7#{}", + "{C:inactive,s:0.8}(Debe haber espacio) (Actualmente {X:mult,C:white,s:0.8}X#8#{C:inactive,s:0.8} Multi)", + } + }, + j_paperback_blood_rain = { + name = "Lluvia de Sangre", + text = { + "Las {C:attention}Cartas Mojadas{} otorgan {C:mult}Multi{}", + "en vez de {C:chips}fichas{} de las cartas{C:attention} en mano{}", + } + }, + j_paperback_pinot_noir = { + name = "Pinot Noir", + text = { + "Las siguientes {C:attention}#1#{} veces que", + "una {C:attention}#2#{} se activa", + "otorga {C:mult}#3#{} multi adicional" + } + }, + j_paperback_jestosterone = { + name = "Testocomodín", + text = { + "{C:attention}#1#s{} anotadas se", + "convierten en {C:attention}#2#es{}" + } + }, + j_paperback_jestrogen = { + name = "Estromodín", + text = { + "{C:attention}#1#es{} y {C:attention}#2#s{} anotados", + "se convierten en {C:attention}#3#s{}" + } + }, + j_paperback_langely = { + name = "L'angely", + text = { + "Ganas la mitad del {C:money}valor de venta{} de tus", + "comodines al derrotar una {C:attention}Ciega Grande{}.", + "Ganas todo el {C:money}valor de venta{}", + "al derrotar una {C:attention}Ciega Jefe{}" + } + }, + j_paperback_pedrillo = { + name = "Pedrillo", + text = { + "Anotar una {C:attention}Reina{} crea", + "la carta de {C:planet}Planeta{} de", + "la {C:attention}mano jugada{}", + } + }, + j_paperback_double_dutchman = { + name = "Dutchman Doble", + text = { + "Por las siguientes {C:attention}#3#{} {C:blue}manos{}:", + "Cada carta {C:attention}mano{} tiene una prob. de", + "{C:green}#1# en #2#{} de ganar una {C:attention}mejora{} al azar y una", + "prob. de {C:green}#1# en #2#{} de ganar un {C:attention}sello{} al azar" + } + }, + j_paperback_one_sin_and_hundreds_of_good_deeds = { + name = "Un pecado y cientos de buenas obras", + text = { + "Los {C:attention}3{} y cartas {C:attention}sin categoria{}", + "otorgan {C:mult}+#1#{} Multi al anotar", + "{C:inactive}''Se alimenta del mal''", + }, + }, + j_paperback_one_sin_and_hundreds_of_good_deeds_fed = { + name = "{C:red}Un pecado y cientos de buenas obras{}", + text = { + "Los {C:attention}3{} y cartas {C:attention}sin categoria{}", + "otorgan {C:mult}+Mult{} por cada", + "carta en carta en tu baraja al anotar", + "{C:inactive}(Currently {C:mult}+#2#{}{C:inactive})", + }, + }, + j_paperback_white_night = { + name = "WhiteNight", + text = { + "Destruye las cartas anotadas que no son {C:attention}Apostoles{}", + "después de jugar la mano. Los {C:attention}Apostoles{} anotados", + "otorgan {X:mult,C:white}X#1#{} Multi. Jugar una mano sin", + "{C:attention}Apostoles destruye{} un comodín al azar.", + "Descartar {C:attention}Apostoles{} los {C:attention}destruye{}" + }, + unlock = { + "Debes tener #1# o más", + "{C:attention}Apostoles{} en", + "tu baraja" + } + }, + j_paperback_as_above_so_below = { + name = "Tanto arriba, como abajo", + text = { + "Jugar una mano de 5 cartas con un", + "{C:attention}Apóstol{} crea una carta del {C:purple}Tarot{},", + "Si la mano es una {C:attention}Escalera{} crea", + "una carta {C:spectral}Espectral{} en su lugar", + "{C:inactive}(Debe haber espacio)" + }, + unlock = { + "Juega un {C:attention}Rapto{}" + } + }, + j_paperback_plague_doctor = { + name = "Doctor de la Plaga", + text = { + "Jugar Carta más Alta", + "convierte la carta anotada", + "en un {C:attention}Apóstol{}. Cada {C:attention}Apóstol{}", + "en mano otorga {X:mult,C:white}X#1#{} Multi" + } + }, + j_paperback_king_me = { + name = "¡Coroname!", + text = { + "Anotar {V:1}#1#{} aumenta", + "su {C:attention}categoria{} hasta", + "llegar a {C:attention}Rey{C:inactive}" + } + }, + j_paperback_gambit = { + name = "Gambito", + text = { + "Anotar {V:1}#1#s{} hace que la", + "primera {V:1}#1#{} {C:attention}destruya{}", + "la primera carta en mano", + "que no es una {V:1}#1#{}", + "y obtiene el {C:attention}doble{} de sus {C:chips}Fichas{}", + } + }, + j_paperback_solar_eclipse = { + name = "Eclipse Solar", + text = { + "Anotar cartas de", + "{C:paperback_light_suit}Palo claro{} las", + "convierte en {V:1}#1#" + } + }, + j_paperback_prism = { + name = "Prisma", + text = { + "Si la mano jugada contiene {C:attention}#1#{},", + "las {C:attention}cartas anotadas{} cambian", + "a un {C:attention}palo{} al azar", + } + }, + j_paperback_master_spark = { + name = "Chispa Maestra", + text = { + "Al jugar un {C:attention}Espectro{}, destruye", + "las cartas {C:attention}en mano{} y las", + "{C:attention}cartas jugadas{} ganan {C:dark_edition}Policroma", + "{S:1.1,C:red,E:2}Se autodestruye{} al activarse", + } + }, + j_paperback_j_and_js = { + name = "J&J's", + text = { + "Si la mano jugada contiene un", + "{C:attention}Espectro{}, crea {C:attention}#1#{} {C:attention}Etiquetas{}", + "al azar.", + "Se consume {C:attention}#2#{} rondas", + } + }, + j_paperback_blue_star = { + name = "Blue Star", + text = { + "Gana {X:chips,C:white}X#1#{} Fichas cuando anotas {V:1}#2#{}", + "Pierde {X:chips,C:white}X#3#{} Fichas cuando anotas {V:2}#4#{}", + "{C:inactive}(Actualmente {X:chips,C:white}X#5#{C:inactive} Fichas)" + } + }, + j_paperback_shadowmantle = { + name = "Manto de Sombras", -- Not a typo, equipment in deltarune is written without a space | "I never played those games so spaces here we go -Marffe" + text = { + "Prob. de {C:green}#2# en #3#{} de crear", + "una {C:dark_edition}Etiqueta Negativa{}", + "al anotar {V:1}#1#{}", + } + }, + j_paperback_shooting_star = { + name = "Estrella Fugaz", + text = { + "Anotar {V:1}#1#{} tiene", + "{C:green}#2# en #3#{} de crear una", + "carta {C:planet}Planeta{} de la", + "{C:attention}mano jugada", + } + }, + j_paperback_black_star = { + name = "Estrella Negra", + text = { + "Anotar cartas de", + "{C:paperback_dark_suit}palo oscuro{} las", + "convierte en {V:1}#1#", + } + }, + j_paperback_high_speed_rail = { + name = "Ferrocarril de alta velocidad", + text = { + "{C:blue}Gana{} Multi igual a el {C:money}coste{}", + "de {C:attention}Comodines{} {C:blue}comprados{}", + "{C:red}Pierde{} Multi igual a el {C:money}valor{}", + "{C:money}de venta{} de {C:attention}Comodines{} {C:red}vendidos{}", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi)" + } + }, + j_paperback_small_scale_onshore_wind = { + name = "Energía eólica terrestre", + text = { + "Gana {C:mult}+#1#{} Multi cada vez que", + "descartas exactamente {C:attention}#2#{} cartas", + "{C:inactive}(Actualmente {C:mult}+#3# {C:inactive}Multi)" + } + }, + j_paperback_aurora_borealis = { + name = "Aurora Boreal", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por cada", + "Comodín con {C:attention}Edción{} que poseas", + "{s:0.9,C:dark_edition}Negativos{s:0.9,C:inactive} excluidos{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + } + }, + j_paperback_joke_master = { + name = "Maestro de la Comedia", + text = { + "Gana {C:mult}+#1#{} Multi si la mano", + "jugada {C:attention}#2#{}", + "{s:0.8}La mano cambia cada ronda", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)" + } + }, + j_paperback_ultra_rare = { + name = "Ultra Raro", + text = { + "Al seleccionar una {C:attention}Ciega{}, crea", + "al azar un {C:attention}Comodín{} {C:blue}Común{},", + "{C:green}Inusual{} y {C:red}Raro{} que son", + "{C:paperback_temporary}Temporales{} y {C:dark_edition}Negativos", + "sin {C:money}valor de venta{}" + } + }, + j_paperback_manilla_folder = { + name = "Folder Manila", + text = { + "Gana {C:money}$#1#{} al terminar", + "la ronda por cada {C:attention}Clip{}", + "{C:attention}único{} en tu baraja", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + j_paperback_clippy = { + name = "Clippy", + text = { + "Añade un {C:attention}Clip{} a una", + "carta en la baraja al", + "seleccionar una {C:attention}Ciega{}", + } + }, + j_paperback_jimbos_joyous_joker_jamboree = { + name = "Jimbo's Joyous Joker Jamboree", + text = { + "Crear una carta de {C:paperback_minor_arcana}Arcana menor{}", + "al azar cada {C:attention}#1#{C:inactive} [#2#]{} cartas jugadas", + }, + unlock = { + "Have {C:attention}#1#{} or more", + "{C:attention}suits{} in", + "your deck" + } + }, + j_paperback_the_normal_joker = { + name = "El Comodín Normal", + text = { + "Reactiva todos los", + "Comodines {C:blue}Comunes{C:attention}" + } + }, + j_paperback_jimbos_inferno = { + name = "El infierno de Jimbo", + text = { + "Las cartas de {C:paperback_dark_suit}palos oscuro{} anotadas", + "otorgan {C:mult}+#1#{} Multi por cada carta de", + "{C:paperback_dark_suit}palo oscuro{} {C:attention}en mano{}", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi){}", + } + }, + j_paperback_tome = { + name = "Tomo de Cartas", + text = { + "{C:attention}+#1#{} Ranura de Consumibles", + "por cada {C:attention}rareza de comodín{}", + "que poseas", + "{C:inactive}(Actualmente {C:attention}+#2#{C:inactive} Slot#3#){}", + } + }, + j_paperback_better_call_jimbo = { + name = "Mejor llama a Jimbo", + text = { + "{X:mult,C:white}X#1#{} Multi por", + "cada {C:money}$#2#{} poseidos.", + "No ganas {C:money}interes{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#3#{C:inactive} Multi)" + } + }, + j_paperback_touch_tone_joker = { + name = "Comodín Touch Tone", + text = { + "Al abrir paquetes de {C:attention}Consumibles{},", + "obtén la carta del {C:attention}extremo izquierdo{}", + "{C:green}gratis{} y se agrega a tus consumibles", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_joker_cd_i = { + name = 'Comodín CD-i', + text = { + "{C:green}#1# in #2#{} de crear una", + "carta de {C:planet}Planeta{} si juegas", + "exactamente {C:attention}#3#{} cartas", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_determination = { + name = 'Determinación', + text = { + "Previene la muerte, y después", + "{C:attention}#1#{} Apuesta y {C:attention}#1#{} al tamaño de mano", + "{C:red}Se destruye al activarse" + } + }, + j_paperback_blue_marble = { + name = "Mármol Azul", + text = { + "Gana {C:mult}+#1#{} Multi al usar una", + "carta de {C:planet}Planeta{}", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + } + }, + j_paperback_boundary_of_death = { + name = "Umbral de la Muerte", + text = { + "Cada {C:attention}#1#{} tiene una", + "prob. de {C:green}#2# en #3#{} de otorgar", + "adicionalmente {C:red}+#4#{} Multi" + } + }, + j_paperback_festive_joker = { + name = "Comodín Festivo", + text = { + "Las {C:attention}Cartas Envueltas{}", + "tienen una prob. de {C:green}#2# en #3#", + "de crear un {C:attention}Consumable{}", + "al azar cuando anotan", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_collector = { + name = "Comodín Coleccionista", + text = { + "Ganas {C:money}$#1#{} al final de la ronda", + "por cada {C:attention}#2#{}", + "en tu baraja", + "{C:inactive}(Actualmente {C:money}$#3#{C:inactive})" + } + }, + j_paperback_spotty_joker = { + name = "Comodín de puntitos", + text = { + "Gana {X:mult,C:white}X#1#{} Multi", + "al {C:attention}anotar{} una", + "{C:attention}#2#{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#4#{}{C:inactive} Multi)" + } + }, + j_paperback_sommelier = { + name = "Comodín Sumiller", + text = { + "Si el {C:attention}primer{} {C:red}descarte{}", + "de la ronda contiene", + "una {C:attention}#1#{},", + "gana un {C:attention}#1#{}", + "sello al azar", + } + }, + j_paperback_medic = { + name = "Comodín Médico", + text = { + "Las {C:attention}Cartas Vendadas{} reactivan", + "otras cartas una vez más", + } + }, + j_paperback_matcha = { + name = "Té de Matcha", + text = { + "Gana {C:chips}+#1#{} Fichas al", + "anotar cartas, prob. de ", + "{C:green}#2# en #3#{} de consumirse", + "al {C:red}descartar", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)" + } + }, + j_paperback_you_are_a_fool = { + name = "¡Eres un tonto!", + text = { + "Si la mano anota {C:attention}#1# o más", + "cartas de {C:attention}figura{}, convierte", + "{C:attention}todas{} las cartas {C:attention}en mano{} en", + "la carta del {C:attention}extremo izquierdo{}", + "se {S:1.1,C:red,E:2}autodestruye{} al activarse", + } + }, + j_paperback_kintsugi_joker = { + name = "Comodín Kintsugi", + text = { + "Aumenta el valor máximo que", + "las {C:attention}Cartas de cerámica{}", + "pueden otorgar en {C:money}$#1#{} si una", + "{C:attention}Cartas de cerámica{} es destruida", + "{C:inactive}(Incremento actual: {C:money}$#3#{C:inactive})", + } + }, + j_paperback_ddakji = { + name = "Ddakji", + text = { + "{C:green}#1# de cada #2#{} cartas salen", + "boca abajo, anotar una carta", + "{C:attention}boca arriba{} y una {C:attention}boca abajo{}", + "crea un {C:attention}consumible{} a azar", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_weather_radio = { + name = "Radio del Clima", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si la {C:attention}mano anotada{}", + "contiene {C:attention}#2#{}.", + "Si tienes {X:mult,C:white}X#3#{} Multi o más,", + "desactiva la {C:attention}Ciega Jefe{}", + "a cambio de perder {X:mult,C:white}X#4#{} Multi", + "{C:inactive}(Actualmente {X:mult,C:white}X#5#{C:inactive} Multi)", + "{s:0.75}La mano a jugar cambia al final de cada ronda" + } + }, + j_paperback_power_surge = { + name = "Sobrecarga", + text = { + "Los {C:attention}#1#{} otorgan {X:mult,C:white}X#2#{}", + "Multi al anotar.", + "Probabilidad {C:green}#3# en #4#{}", + "de {C:red}destruir{} una carta", + "{C:attention}en mano{}", + } + }, + j_paperback_time_regression_mix = { + name = "Mezcla de regresión temporal", + text = { + "Gana {C:mult}+#2#{} Multi si la mano {C:attention}anota{}", + "al menos {C:attention}#1#{} palos diferentes,", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)", + } + }, + j_paperback_bismuth = { + name = "Bismuto", + text = { + "Anotar {V:1}#1#{} o {V:2}#2#{} les", + "otorga una prob. de {C:green}#3# en #4#{} de", + "obtener edición {C:dark_edition}Laminada{},", + "{C:dark_edition}Holografica{} o {C:dark_edition}Policroma{}", + } + }, + j_paperback_deadringer = { + name = "Deadringer", + text = { + "Reactiva los {C:attention}#1#es{} y {C:attention}#2#{} anotados", + "una vez y dos veces los {C:attention}#3#{}" + } + }, + j_paperback_penumbra_phantasm = { + name = "Fantasma de la Penumbra", + text = { + "Gana {C:red}+#1#{} Multi cada vez que una", + "carta {C:attention}sin categoría{} es {C:attention}anotada", + "{C:inactive}(Actualmente {C:red}+#2#{C:inactive} Multi)" + } + }, + j_paperback_ncj = { + name = "NoCopyrightJokers", + text = { + "Otorga {C:chips}+#1#{} fichas por cada", + "{C:money}dólar{} en el {C:attention}valor de venta", + "de todos los comodines", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)" + } + }, + j_paperback_full_moon = { + name = "Luna llena", + text = { + "Las cartas de {C:planet}Planeta{}", + "tienen una prob. {C:green}#1# en #2#{} de", + "subir de nivel la mano {C:attention}de nuevo", + } + }, + j_paperback_sake_cup = { + name = "Copa de Sake", + text = { + "Después de jugar una mano, los {C:attention}#1#{}", + "{C:attention}en mano{} tienen una prob. de", + "{C:green}#2# en #3#{} de crear la carta de", + "{C:planet}Planeta{} de la mano {C:attention}jugada", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_resurrections = { + name = "Resurrecciones", + text = { + "{C:green}#1# en #2#{} de {C:attention}devolver{} {C:attention}Comodines{}", + "vendidos y crear una {C:attention}copia{}", + "{C:dark_edition}Negativa{} con {C:money}-$#3#{} de valor", + "de venta", + "{s:0.8}La prob. aumenta en {s:0.8,C:green}#4#{s:0.8} si fracasa", + "{s:0.8}y se {s:0.8,C:red,E:2}autodestruye{}{s:0.8} al activarse", + } + }, + j_paperback_book_of_vengeance = { + name = "Libro de venganza", + text = { + "Al derrotar la {C:attention}Ciega Jefe{}:", + "Se {C:red}destruye{} y al {C:attention}comodín{} a su izquierda", + "y luego copia el {C:attention}comodín{} de la derecha" + } + }, + j_paperback_b_soda = { + name = "B-Soda", + text = { + "Al seleccionar la {C:attention}Ciega{},", + "gana {C:blue}+#1#{} mano, se", + "consume si la {C:attention}Ciega{}", + "es derrotada con", + "{C:blue}0{} manos restantes", + } + }, + j_paperback_angel_investor = { + name = "Angel Inversionista", + text = { + "Saltar una {C:attention}Ciega{} o derrotar", + "una {C:attention}Ciega Jefe{} otorga", + "una {C:money}etiqueta de angel", + "{C:money}inversionista" + } + }, + j_paperback_marble_soda = { + name = "Ramune", -- I got bullied bc I didnt know that the Soa was a real soda + text = { + "Las {C:attention}Cartas de Vidrio{} otorgan", + "{X:mult,C:white}X#2#{} Multi adicional al anotar", + "Se consume si {C:attention}#3#{} carta#4#", + "anotada#4# se {C:attention}destruyen{}" + -- Would be cool to have a way to get rid of the -n- in "destruyen" in the same way as with the -s-, god love language barriers + } + }, + j_paperback_vacation_juice = { + name = "Bebida Vacacional", + text = { + "La primera vez que derrotes", + "una {C:attention}Ciega{}, no avanzas a la", + "siguiente {C:attention}Ciega{}.", + "{s:0.8} Se consume al activarse {C:attention,s:0.8}#1#{} {s:0.8}veces", + } + }, + j_paperback_black_forest_cake = { + name = "Torta Negra", + text = { + "Gana {C:mult}+#2#{} Multi por cada", + "{C:attention}Ciega{} derrotada.", + "Se {C:red}Consume{} si {C:money}vendes{} o", + "{C:attention}destruyes{} una carta o comodín", + "{C:inactive}(Actualmen {C:mult}+#1#{C:inactive} Multi)" + } + }, + j_paperback_ice_cube = { + name = "Cubo de Hielo", + text = { + "Otorga {C:blue}+#1#{} mano adicional al seleccionar", + "la {C:attention}Ciega{} y se derrite si", + "la puntuación se prende en {C:attention}llamas", + } + }, + j_paperback_champagne = { + name = "Champaña", + text = { + "Durante la {C:attention}Ciega Jefe{}, las cartas", + "anotadas otorgan {C:money}$#1#{} y el {C:attention}doble{}", + "para las cartas con {C:attention}sello", + "{C:attention}Se consume{} en {C:attention}#2#{} rondas" + } + }, + j_paperback_pocket_pair = { + name = "Par de bolsillo", + text = { + "Gana {C:money}$#1#{} por cada {C:attention}#2#{} en tu", + "mano al comenzar la ronda" + } + }, + j_paperback_the_quiet = { + name = "El Silencio", + text = { + "{X:mult,C:white}X#1#{} Multi por cada", + "carta debajo de {C:attention}#2#{}", + "en tu baraja", + "{C:inactive,s:0.8}(Actualmente {X:mult,C:white,,s:0.8}X#3#{C:inactive,,s:0.8} Multi)" + } + }, + j_paperback_alert = { + name = "Alerta", + text = { + "Si la {C:attention}mano jugada{} es una sola", + "{C:attention}carta de figura{}, destruyela", + "{C:inactive}(#1#/#2#)?" + } + }, + j_paperback_legacy = { + name = "Legado", + text = { + "Al {S:1.1,C:red,E:2}destruir{} cartas sin {C:attention}Mejoras{}", + "gana sus {C:chips}Fichas{} como {C:mult}Multi{}", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi)" + } + }, + j_paperback_telamon = { + name = "Telamón", + text = { + "Si la {C:attention}mano final{} contiene", + "un {C:attention}#1#{}, crea al azar una", + "carta de {C:paperback_minor_arcana}Arcana menor{}", + "de {C:spades}Espadas{}", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_backpack = { + name = "Mochila", + text = { + "La {C:money}Tienda{} tiene un", + "{C:attention}Paquete de Bufón{} gratis" + } + }, + j_paperback_roulette = { + name = "Ruleta de Casino", + text = { + -- error: ronda -> hand? -- My bad, did not read properly, Marffe + "Cada mano, se escoge al azar una", + "{C:attention}categoría{} y {C:attention}palo{}. Al anotar:", + "{C:money}$#1#{} si acierta el palo,", + "{C:money}$#2#{} si acierta la categoría,", + "{C:money}$#3#{} si aciertas ambos", + } + }, + j_paperback_mexican_train = { + name = "Tren Mexicano", + text = { + "Las {C:attention}Cartas de Dominó{} anotadas", + "otorgan {C:money}$#2#{} por cada", + "{C:attention}#1#{} anotada", + "{C:inactive}(Actualmente {C:money}$#3#{C:inactive})" + } + }, + j_paperback_chocolate_joker = { + name = "Comodín de Chocolate", + text = { + "Gana {X:chips,C:white}X#1#{} Fichas por cada", + "{C:attention}Comodín{} en tu posesión", + "{C:inactive}(Actualmente {X:chips,C:white}X#2#{C:inactive} Fichas)" + } + }, + j_paperback_mandela_effect = { + name = "Efecto Mandela", + text = { + "Otorga una {C:attention}mejora{} al azar a la", + "primera {C:attention}carta de figura{} anotada" + } + }, + j_paperback_jester_of_nihil = { + name = "Bufón de Nihil", + text = { + "{C:attention}Debilita{} el último palo", + "{C:attention}anotado{} y otorga {C:mult}+#1#{}", + "Multi por carta {C:attention}debilitada{}", + "en tu baraja", + "{C:inactive,s:0.8}(Actualmente {V:1,s:0.8}#2#{C:inactive,s:0.8} and {C:mult,s:0.8}+#3#{C:inactive,s:0.8} Multi)", + } + }, + j_paperback_forgery = { + name = "Falsificación", + text = { + "Copia un {C:attention}Comodín{} al azar,", + "si ortoga {X:mult,C:white}XMulti{}, {C:mult}+Multi{}", + "o {C:chips}Fichas{}, multiplica estos", + "valores entre {X:attention,C:white}X#1#{} y {X:attention,C:white}X#2#", + "{C:inactive,s:0.8}Cambia tras jugar una mano{}", + "{C:inactive,s:0.8}(Actualmente {C:attention,s:0.8}#3#{C:inactive,s:0.8} {X:attention,C:white,s:0.8}X#4#{C:inactive,s:0.8})" + } + }, + j_paperback_the_world = { + name = "El Mundo", + text = { + "Todas las {C:blue}manos{} y {C:red}descartes{} se", + "consideran como el {C:attention}primer{} y", + "{C:attention}último{} de la ronda" + } + }, + j_paperback_epic_sauce = { + name = "Salsa Épica", + text = { + "{X:mult,C:white}X#1#{} Multi.", + "destruye un {C:attention}Comodín{}", + "al azar si ya jugaste", + "la {C:attention}primera mano{}", + "de la ronda", + } + }, + j_paperback_find_jimbo = { + name = "Encuentra a Jimbo", + text = { + "Cada {C:attention}#1#{} de {V:1}#2#{}", + "anotado otorga {C:money}$#3#{}", + "{s:0.8}La carta cambia cada ronda" + }, + }, + j_paperback_joker_crossing = { + name = "Jimbo Crossing", + text = { + "Las cartas {C:attention}Mejoradas{}", + "tienen una prob. de {C:green}#1# en #2#{}", + "de reactivarse" + } + }, + j_paperback_jimbocards = { + name = "La Jimbocarta", + text = { + "Al Obtenerse {C:red}destruye{} todos tus comodines.", + "Crea {C:attention}#1#{} comodines {C:dark_edition}Negativos{} al azar.", + "Todos los precios se reducen en {C:money}$#2#{}.", + "Si no ganas la {C:attention}Apuesta{} en {C:attention}#3#{} manos", + "{S:1.1,C:red,E:2}PIERDES{}", + "{C:inactive}(Te quedan {C:attention}#4#{C:inactive} manos)", + } + }, + j_paperback_jimbocards_collection = { + name = "La Jimbocarta", + text = { + "Al Obtenerse {C:red}destruye{} todos tus comodines.", + "Crea {C:attention}#1#{} comodines {C:dark_edition}Negativos{} al azar.", + "Todos los precios se reducen en {C:money}$#2#{}.", + "Si no ganas la {C:attention}Apuesta{} en {C:attention}#3#{} manos", + "{S:1.1,C:red,E:2}PIERDES{}", + "{C:inactive}(Te quedan {C:attention}#4#{C:inactive} manos)", + "Siempre aparece {C:paperback_eternal}Eterno", + } + }, + j_paperback_forlorn = { + name = "Abandonado", + text = { + "Si la {C:attention}mano jugada{} sólo contiene", + "{V:1}Espadas{}, destruye una carta", + "{C:attention}en mano{} al azar", + }, + }, + j_paperback_protocol = { + name = "Protocolo", + text = { + "Los {C:attention}paquetes potenciadores{}", + "tienen {C:attention}+#1#{} carta adicional" + } + }, + j_paperback_cream_liqueur = { + name = "Licor de crema", + text = { + "Las {C:attention}etiquetas{} otorgan {C:money}$#1#{}", + "cuando se activan.", + "Se consume en {C:attention}#2#{} rondas", + "{C:inactive,s:0.8}(Se reinicia al obtener una {C:attention,s:0.8}Etiqueta{C:inactive,s:0.8})", + } + }, + j_paperback_coffee = { + name = "Café", + text = { + "{C:attention}+#1#{} tamaño de mano, aumenta en {C:attention}#2#{}", + "cada vez que saltas una {C:attention}ciega{}, prob. de", + "{C:green}#3# en #4#{} de ser consumido al seleccionar la", + "{C:attention}Ciega Pequeña{} o la {C:attention}Ciega Grande{}", + } + }, + j_paperback_basic_energy = { + name = "Energía de Comodín Básica", + text = { + "Usar {C:attention}Consumibles{} tiene una", + "prob. de {C:green}#1# en #2#{} de crear una copia", + "{C:inactive}(No puedes copiar una copia)", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_big_misser = { + name = "Big Misser", + text = { + "{X:mult,C:white}X#1#{} Multi por cada", + "espacio de consumible vacío", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{}{C:inactive} Multi)" + } + }, + j_paperback_fodder = { + name = "Prescindible", + text = { + "Vende esta carta para {C:paperback_ego_gift}Corroer{}", + "el {C:paperback_ego_gift}Regalo E.G.O.{} del extremo derecho", + } + }, + j_paperback_the_strongest = { + name = "El más Fuerte", + text = { + "Gana {X:mult,C:white}X#1#{} Multi cuando", + "un {C:paperback_ego_gift}Regalo E.G.O.{} es", + "vendido o se corroe", + "{C:paperback_ego_gift}Corroe{} un {C:paperback_ego_gift}Regalo E.G.O.", + "al derrotar la {C:attention}Ciega Jefe", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + } + }, + j_paperback_freezer = { + name = "Heladera", + text = { + "Obtén un {C:attention}Comodín de Comida{} {C:dark_edition}Negativo{}", + "Después de ganarle a la {C:attention}Ciega Jefe{}", + }, + unlock = { + "Acquire a {C:dark_edition}Negative{}", + "{S:1.1,C:attention,E:2}Food Joker" + } + }, + j_paperback_everything_must_go = { + name = "¡Liquidación!", + text = { + "La Tienda tiene", + "{C:attention}#1#{} {C:attention}Vale{} adicional" + } + }, + j_paperback_card_sleeve = { + name = "Funda de Carta", + text = { + "Vende esto para hacer que el", + "{C:attention}Comodín{} de la derecha sea {C:attention}Eterno{}", + } + }, + j_paperback_percussion_ensemble = { + name = "Sesión de percusión", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por", + "cada {C:attention}Mejora{} única en tu", + "Baraja", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi){}", + } + }, + j_paperback_its_tv_time = { + name = "¡Es hora de la TV!!", + text = { + "Las {C:paperback_stars}Estrellas{} se consideran", + "{C:attention}Cartas adicionales{} y", + "las {C:attention}Cartas adicionales{}", + "se consideran {C:paperback_stars}Estrellas{}", + }, + }, + j_paperback_da_capo = { + name = "Da Capo", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi y {C:attention}debilita todos menos un", + "{C:attention}palo{} cada mano en el sigiente orden:", -- The line below goes crazy XD + "{C:clubs,s:0.8}Tréboles{}{s:0.8},{} {C:spades,s:0.8}Espadas{}{s:0.8},{} {C:diamonds,s:0.8}Diamantes{}{s:0.8},{} {C:hearts,s:0.8}Corazones{}{s:0.8},{} {C:inactive,s:0.8}Ninguno{}", + "{C:inactive}(Debilitando: {V:1}#2#{C:inactive}){}", + } + }, + j_paperback_complete_breakfast = { + name = "Desayuno completo", + text = { + "{C:mult}+#1#{} Multi y {C:chips}+#2#{} Fichas", + "{C:green}#3# en #4#{} de ser comido al", + "final de cada mano jugada", + "las posibilidades aumentan", + "en {C:green}#5#{} por cada mano jugada", + }, + }, + j_paperback_emergency_broadcast = { + name = "Transmisión de emergencia", + text = { + "Los {C:attention}5{} y {C:attention}8{} otorgan", + "{C:mult}+#1#{} Multi y {C:chips}+#2#{} Fichas", + }, + }, + j_paperback_moribund = { + name = "Comodín Moribundo", + text = { + "Gana {C:mult}+#1#{} Multi si derrotas la", + "{C:attention}ciega{} con {C:attention}0 {}{C:blue}manos{} restantes.", + "{C:attention}Duplica{} su {C:mult}Multi{} si", + "no vences la {C:attention}Ciega{}", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)", + }, + }, + j_paperback_crispy_taco = { + name = "Taco Crujiente", + text = { + "{X:chips,C:white}X#1#{} Fichas, prob. de", + "{C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_furioso = { + name = "Furioso", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por cada", + "{C:attention}categoria{} anotada. Se reinicia", + "al derrotar una {C:attention}Ciega Jefe", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)", + "{C:inactive}(Categrias jugadas:{C:attention}#3#{C:inactive})", + }, + }, + j_paperback_soft_taco = { + name = "Taco Suave", + text = { + "{X:mult,C:white}X#1#{} Multi, prob. de", + "{C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_charred_marshmallow = { + name = "Malvavisco Chamuscado", + text = { + "Las {C:spades}Espadas{} anotadas otorgan {C:mult}+#1#{}", + "de Multi, {C:green}#2# en #3#{} de derretirse", + "al final de la ronda", + }, + }, + j_paperback_joker_cookie = { + name = "Comodín Galleta", + text = { + "Gana {C:money}$#1#{} al final de la ronda el", + "pago aumenta en {C:money}$#2#{} al entrar", + "a la tienda, prob. de {C:green}#4# en #3#{}", + "de ser comido al final de la ronda", + }, + }, + j_paperback_pop_stick = { + name = "Palito de Chupeta", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_pool_table = { + name = "Mesa de Billar", + text = { + "Si la primera mano no anota", + "{C:attention}cartas de figuras{}, crea", + "una carta de {C:planet}Planeta{} de la", + "{C:attention}mano jugada", + "{C:inactive}(Debe haber espacio)", + }, + }, + j_paperback_bicycle = { + name = "Comodín en Bicicleta", + text = { + "Las {C:attention}Cartas Vesátiles{} otorgan", + "{C:mult}Multi{} igual a sus {C:chips}Fichas{}", + }, + }, + j_paperback_stamp = { + name = "Estampilla", + text = { + "Prob. de {C:green}#1# en #2#{} de", + "ganar {C:chips}+#3#{} fichas cuando", + "cualquier {C:attention}sello{} anota", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)", + }, + }, + j_paperback_sticky_stick = { + name = "Palito Pegajoso", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_shopping_center = { + name = "Centro Comercial", + text = { + "La {C:money}Tienda{} tiene una", + "{C:attention}Ranura{} adicional", + }, + }, + j_paperback_tutor = { + name = "Tutor", + text = { + "Las {C:attention}Cartas de Números{}", + "{C:attention}duplican{} sus {C:chips}Fichas{} totales", + }, + }, + j_paperback_ghost_cola = { + name = "Refresco Fantasma", + text = { + "Vende este Comodín para", + "crear una {C:attention}#1#{}", + "y una carta {C:spectral}Espectral{}", + "{C:inactive}(Debe haber espacio)", + }, + }, + j_paperback_river = { + name = "Un Río", + text = { + "Jugar una mano con {C:attention}5 cartas{} anotadas", + "te otorga la mitad de las {C:chips}fichas{}", + "de la carta más baja como {C:money}dinero", + "{C:inactive}(Máximo {C:money}$#1#{C:inactive})", + }, + }, + j_paperback_solemn_lament = { + name = "Lamento Solemne", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si la mano", + "contiene {C:paperback_dark_suit}Palos oscuros{}", + "y {C:paperback_light_suit}Palos claros{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_hole_in_one = { + name = "Hoyo en Uno", + text = { + "Si la primera {C:blue}mano{} de la ronda le gana", + "a la {C:attention}Ciega{}, duplica el {C:attention}valor de venta{}", + "de todas los {C:attention}Comodines{} y {C:attention}Consumibles{}", + "{C:inactive}(Máximo {C:money}$#1#{C:inactive} por ronda)", + "Al ser vendido todos los", + "{C:attention}Comodines{} y {C:attention}Consumibles{}", + "tendrán un valor de {C:money}$0" + }, + }, + j_paperback_mismatched_sock = { + name = "Media inpar", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si", + "{C:red}descartas{} solamente", + "{C:attention}1{} carta", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_wild_plus_four = { + name = "+4 Salvaje", + text = { + "{C:attention}+#1#{} al tamaño", + "de la mano", + } + }, + j_paperback_quick_fix = { + name = "Arreglo rápido", + text = { + "{C:attention}+#1#{} tamaño de mano, prob.", + "de {C:green}#2# en #3#{} de que se rompa", + "al final de la ronda..." + }, + }, + j_paperback_skydiver = { + name = "Paracaidista", + text = { + "{C:white,X:mult}X#1#{} Multi si {C:attention}todas las cartas{} anotadas", + "son {C:attention}menores o iguales{} a la carta de", + "{C:attention}menor rango{} anotada esta ronda", + "{C:inactive}(Se actualiza despues de cada mano)", + "{C:inactive}(Actualmente: {C:attention}#2#{C:inactive})", + }, + }, + j_paperback_surfer = { + name = "Surfista", + text = { + "Gana {C:chips}+#1#{} Fichas por", + "cada {C:attention}#3#{} en mano al", + "final de la {C:attention}ronda{}", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)" + } + }, + j_paperback_blue_bonnets = { + name = "Lupinos azules", + text = { + "Los {C:clubs}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:clubs}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_great_wave = { + name = "La Gran Ola", + text = { + "Reactiva la carta del {C:attention}extremo derecho{}", + "por cada {C:attention}carta anotada{}", + }, + }, + j_paperback_caramel_apple = { + name = "Manzana de Caramelo", + text = { + "Los {C:clubs}Tréboles{} anotados otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de derretirse", + "al final de la ronda", + }, + }, + j_paperback_nachos = { + name = "Nachos", + text = { + "{X:chips,C:white}X#1#{} Fichas,", + "pierde {X:chips,C:white}X#2#{} Fichas por", + "cada {C:attention}carta{} descartada", + }, + }, + j_paperback_trans_flag = { + name = "Bandera Trans", + text = { + "Otorga {C:red}+#1#{} Multi por", + "cada {C:attention}descarte{}", + "{C:inactive}(Actualmente {C:red}+#2#{} {C:inactive}Multi)" + }, + }, + j_paperback_pride_flag_spectrums = { + name = "Bandera del Orgullo", + text = { + "Gana {C:chips}+#1#{} Fichas si la mano", + "contiene un {C:attention}Espectro{}, se", + "reinicia si juegas una {C:attention}Escalera{}", -- The straight joke don't work in Spanish, fix pls + "{C:inactive}(Actualmente {C:chips}+#2#{} {C:inactive}Fichas)" + }, + }, + j_paperback_pride_flag_no_spectrums = { + name = "Bandera del Orgullo", + text = { + "Gana {C:mult}+#1#{} Multi si la mano", + "contiene {C:attention}tres{} palos diferentes", + "{C:inactive}(Actualmente {C:mult}+#2#{} {C:inactive}Multi)", + }, + }, + j_paperback_sacrificial_lamb = { + name = "Cordero de sacrificio", + text = { + "Gana {C:mult}+#1#{} Multi por cada", + "Carta o Comodín {C:attention}destruido", + "{C:inactive}(Actualmente {C:mult}+#2# {C:inactive}Multi)", + }, + }, + j_paperback_autumn_leaves = { + name = "Hojas de Otoño", + text = { + "Los {C:diamonds}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:diamonds}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_wild_prize = { + name = "[[PREMIO SALVAJE!1!]]", + text = { + "Cada {C:attention}Carta versátil{} tiene una prob. de", + "{C:green}#1# en #2#{} de {C:attention}reactivarse{} y una prob.", + "{C:green}#3# en #4#{} de ganar {C:money}#5#{} o {C:money}$#6#{} al anotar", + }, + }, + j_paperback_wish_you_were_here = { + name = "Recuerdo Vacacional", + text = { + "Otorga {C:mult}+Multi{} igual a", + "{C:mult}x#1#{} su {C:attention}valor de venta{}.", + "Gana {C:money}$#2#{} de {C:money}valor de venta{}", + "al final de la ronda", + "{C:inactive}(Actualmente {C:mult}+#3# {C:inactive}Multi){}", + }, + }, + j_paperback_calling_card = { + name = "Tarjeta de Jefe", + text = { + "Gana {X:red,C:white}X#1#{} Multi cada vez", + "que derrotas una {C:attention}Ciega Jefe{}", + "o activas su {C:attention}efecto{}", + "{C:inactive}(Actualmente {}{X:red,C:white}X#2#{}{C:inactive} Multi){}", + }, + }, + j_paperback_greeting_card = { + name = "Comodín Navideño", + text = { + "Gana {C:money}$#1#{} al {C:attention}valor de venta{} cuando", + "una {C:attention}#2#{} anota", + }, + }, + j_paperback_subterfuge = { + name = "Subterfugio", + text = { + "Destroye las cartas de la", + "{C:attention}primera{} {C:attention}mano{} cada ronda" + }, + }, + j_paperback_triple_moon_goddess = { + name = "Diosa de la Triple Luna", + text = { + "Si la mano anota una {C:attention}Tercia{}:", + "Prob. de {C:green}#1# en #2#{} de crear una carta {C:planet}Planeta{}.", + "Prob. de {C:green}#3# en #4#{} de crear una carta del {C:purple}Tarot{}", + "{C:inactive}(Debe haber espacio)" + }, + }, + j_paperback_triple_moon_goddess_minor_arcana = { + name = "Diosa de la Triple Luna", + text = { + "Si la mano anota una {C:attention}Tercia{}:", + "Prob. de {C:green}#1# en #2#{} de crear una carta del {C:purple}Tarot{}.", + "Prob. de {C:green}#3# en #4#{} crear una carta {C:paperback_minor_arcana}Arcana menor{}.", + "{C:inactive}(Debe haber espacio)" + }, + }, + j_paperback_derecho = { + name = "Derecho", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si la mano", + "no anota cartas de {C:paperback_light_suit}palo claro", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_the_sun_rises = { + name = "El Sol se Levanta", + text = { + "Las cartas sólo tienen {C:chips}#1#{} ficha", + "Los {C:paperback_light_suit}palos claros{} ganan {C:chips}+#3#{} Ficha", + "por cada {C:paperback_light_suit}palo claro{} anotado", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} fichas)", + }, + }, + j_paperback_jestrica = { + name = "Jestrica", + text = { + "Gana {C:mult}+#1#{} Multi al anotar", + "un {C:attention}8{}. Se reinicia si", + "no anotas un {C:attention}8{}", + -- TODO might want to indicate if an 8 hasn't been scored + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_grand_strategy = { + name = "Estrategia Maestra", + text = { + "{X:mult,C:white}X#1#{} Multi si tienes", + "{C:attention}#2#{} o más {C:attention}mejoras{}", + "únicas en tu baraja", + "{C:inactive}(Actualmente {C:attention}#3#{C:inactive})", + }, + }, + j_paperback_moving_out = { + name = "Moving Out", + text = { + "Gana {C:mult}+#1#{} Multi si tu", + "mano {C:attention}ganadora{} no es", + "tu mano más jugada", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)", + }, + }, + j_paperback_ready_to_fly = { + name = "Listo para volar", + text = { + "Gana {X:chips,C:white}X#2#{} Fichas cada vez que", + "un comodín adjacente se {C:attention}activa", + "{C:inactive}(Actualmente {X:chips,C:white}X#1#{C:inactive} Fichas)", + }, + }, + j_paperback_solar_system = { + name = "Sistema Solar", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por cada {C:planet}nivel{}", + "que {C:attention}compartan{} los 9 {C:planet}Planetas{} base", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)", + }, + }, + j_paperback_reference_card = { + name = "Tarjeta de Referencia", + text = { + "Gana {X:mult,C:white}X#1#{} Multi cada vez que", + "hayas jugado las {C:attention}9 manos base{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)", + }, + }, + j_paperback_dreamsicle = { + name = "Helado de Naranja", + text = { + "Los {C:diamonds}Diamantes{} anotados otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de derretirse", + "al final de la ronda", + }, + }, + j_paperback_jimbo_adventure = { + name = "La Aventura de Jimbo", + text = { + "Saltar {C:attention}Ciegas{} crea", + "{C:attention}Etiquetas{} al azar", + }, + }, + j_paperback_union_card = { + name = "Tarjeta de la Unión", + text = { + "Otorga {X:mult,C:white}XMulti{} igual a la cantidad", + "de cartas de {C:paperback_light_suit}Palo claro{} anotadas.", + "Bloquea el {C:attention}valor de venta{} de todo", + "a {C:money}$0{} hasta ser vendido", + }, + }, + j_paperback_cherry_blossoms = { + name = "Flores de Cerezo", + text = { + "Los {C:hearts}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:hearts}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_paranoia = { + name = "Paranoia", + text = { + "Los {C:paperback_light_suit}Palos claros{} otorgan {C:mult}+#1#{} Multi", + "al {C:attention}anotar{} por cada carta de", + "{C:paperback_dark_suit}Palo oscuro{} {C:attention}destruida{}", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_unholy_alliance = { + name = "Alianza impía", + text = { + "Gana {C:chips}+#1#{} Fichas por cada", + "Carta o Comodín {C:attention}destruido", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)", + }, + }, + j_paperback_summoning_circle = { + name = "Círculo de Invocación", + text = { + "Si la mano jugada contiene", + "una {C:attention}#1#{}, crea una copia", + "de un {C:attention}consumible{} al azar", + "{C:inactive}(Debe haber espacio){}" + } + }, + j_paperback_the_sun = { + name = "El Sol", + text = { + "Si la mano no contiene", + "{C:paperback_dark_suit}Palos oscuros{} gana {C:mult}+#1#{} Multi,", + "pierde {C:mult}+#1#{} Multi por cada", + "{C:paperback_dark_suit}Palo oscuro{} anotado", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)", + }, + }, + j_paperback_pointy_stick = { + name = "Palito Puntiagudo", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_prince_of_darkness = { + name = "Principe de la Oscuridad", + text = { + "Si la mano anota un {C:hearts}Corazón{} y otros", + "{C:attention}#1#{} palos diferentes, este comodín otorga", + "{X:mult,C:white}X#2#{} Multi y en las siguientes {C:blue}2{} manos", + "{C:inactive}({C:attention}#4#{C:inactive} manos restantes)" + }, + }, + j_paperback_giga_size = { + name = "GIGA TAMAÑO", + text = { + "Gana {X:mult,C:white}X#2#{} Multi por mano", + "jugada en esta {C:attention}Ciega{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#1#{C:inactive} Multi)" + }, + }, + j_paperback_photocopy = { + name = "Fotocopia", + text = { + "Copia la habilidad del comodín", + "del {C:attention}extremo derecho{}" + }, + }, + j_paperback_master_plan = { + name = "Plan Maestro", + text = { + "Copia la habilidad del", + "{C:attention}comodín{} de la izquierda" + }, + }, + j_paperback_popsicle_stick = { + name = "Palito de Helado", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_let_it_happen = { + name = "Let It Happen", + text = { + "{C:purple}Balancea{} el {C:mult}Multi{} y {C:chips}Fichas{}", + "si es la primera vez que usas", + "una mano en esta {C:attention}Apuesta{}", + "{C:inactive}(Manos jugadas:{C:attention}#1#{C:inactive})", + }, + }, + j_paperback_in_case_i_make_it = { + name = "In case I make it", + text = { + "Las {C:attention}Cartas sin categoría{}", + "ganan {C:chips}+#1#{} al anotarse", + }, + }, + j_paperback_evergreens = { + name = "Perennifolios", + text = { + "Las {C:spades}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:spades}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_der_fluschutze = { + name = "Der Fluschütze", + text = { + "Si la {C:attention}primera{} mano de la ronda es", + "una sola {C:attention}carta de figura{} destruyela", + "y gana {X:mult,C:white}X#1#{} Multi", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)" + } + }, + j_paperback_the_wonder_of_you = { + name = "The Wonder of You", + text = { + "Al seleccionar la {C:attention}Ciega Jefe{}", + "crea 2 {C:green}etiquetas{} al azar", + } + }, + j_paperback_inner_peace = { + name = "Paz Interior", + text = { + "{C:attention}+3{} al tamaño de mano", + "hasta que juegues tu", + "{C:attention}primera{} mano" + } + }, + j_paperback_shopkeep = { + name = "Tendero", + text = { + "Gana una {C:attention}Etiqueta de cupón{} cada {C:attention}#1#{} {C:inactive}(#2#/#1#){}", + "ciegas derrotadas, al derrotar la {C:attention}Ciega{} {C:attention}Jefe{}", + "gana una {C:attention}Etiqueta de Vale{}", + }, + }, + j_paperback_cakepop = { + name = "Chupeta de fresa", + text = { + "Los {C:hearts}Corazones{} anotados otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_black_rainbows = { + name = "Arcoiris negro", + text = { + "Las {C:spades}Espadas{} y {C:clubs}Tréboles", + "anotados tienen una prob. de", + "{C:green}#1# en #2#{} de volverse {C:dark_edition}Policroma" + } + }, + j_paperback_meeple = { + name = "Meeple", + text = { + "Si la mano anota una carta", + "de {C:attention}figura{}, prob. de {C:green}#1# en #2#{} de", + "obtener {C:mult}+#3#{} descarte esta ronda", + } + }, + j_paperback_apple = { + name = "Manzana", + text = { + "Al comprar {C:attention}Consumibles{}:", + "Prob. de {C:green}#1# en #2#{} crear una copia {C:dark_edition}Negativa{}", + "Prob. de {C:green}#3# en #4#{} de {C:red,E:2}destruir{} este comodín", + } + }, + j_paperback_heretical_joker = { + name = "Comodín Herético", + text = { + "Las cartas jugadas", + "del palo {C:paperback_stars}Estrella{} otorgan", + "{C:mult}+#1#{} Multi al anotar", + }, + }, + j_paperback_fraudulent_joker = { + name = "Comodín Fraudulento", + text = { + "Las cartas jugadas del", + "palo {C:paperback_crowns}Corona{} otorgan", + "{C:mult}+#1#{} Multi al anotar", + }, + }, + j_paperback_rock_candy = { + name = "Caramelo de Piedra", + text = { + "Las {C:paperback_stars}Estrellas{} anotadas otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de ser comido al final", + "de la ronda", + }, + }, + j_paperback_rockin_stick = { + name = "Palito Rockero", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_tanghulu = { + name = "Tanghulu", + text = { + "Las {C:paperback_crowns}Coronas{} anotadas otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_sweet_stick = { + name = "Palito dulce", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_quartz = { + name = "Cuarzo", + text = { + "Anotar {C:paperback_stars}Estrellas{} otorga {X:chips,C:white}X1{} Fichas,", + "{X:chips,C:white}+X#1#{} por cada {C:paperback_stars}Estrella{} jugada" + } + }, + j_paperback_pyrite = { + name = "Pirita", + text = { + "Jugar {V:1}#1#{} tiene {C:green}#2# en #3#{}", + "de crear una carta del", + "{C:tarot}Tarot{} al azar al anotar", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_wheat_field = { + name = "Campo de trigo", + text = { + "Las {C:paperback_crowns}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:paperback_crowns}#4#{} anotada de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_clothespin = { + name = "Gancho de ropa", + text = { + "Gana {C:chips}+#1#{} Fichas al", + "{C:attention}final de la ronda{}", + "por cada {C:attention}Clip{} {C:attention}en mano", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)" + } + }, + j_paperback_watercolor_joker = { + name = "Comodín de Acuarela", + text = { + "Las {C:attention}Cartas Mojadas{} otorgan", + "{X:chips,C:white}X#2#{} Fichas al anotar", + } + }, + j_paperback_birches = { + name = "Abedules", + text = { + "Las {C:paperback_stars}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:paperback_stars}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_oracle = { + name = "Oráculo", + text = { + "Gana {X:chips,C:white}X#1#{} Fichas por cada", + "carta de {C:paperback_minor_arcana}Arcana Menor{}", + "{C:attention}única{} que hayas usado", + "{C:inactive}(Actualmente {X:chips,C:white}X#2#{C:inactive} Fichas)", + }, + }, + j_paperback_punch_card = { + name = "Tarjeta perforada", + text = { + "Después de {C:attention}#1#{} rondas,", + "vende esta tarjeta para", + "retroceder una {C:attention}Apuesta{}", + "{C:inactive}(Actualmente {C:attention}#2#{C:inactive}/#1#)", + }, + }, + j_paperback_eyelander = { + name = "La Intuertal", + text = { + "Anotar cartas de {C:attention}figura{} las destruye.", + "Después de anotar {C:attention}#1#{} cartas de {C:attention}figura{}", + "{C:attention}vender{} este comodín otorga edición", + "{C:dark_edition}negativa{} a un comodín {C:attention}al azar{}", + "{C:inactive}(Actualmente {C:attention}#2#{C:inactive} Decapitaciones)" + } + }, + j_paperback_banana_man = { + name = "Hombre Plátano", + text = { + "Los comodines tienen una prob.", + " de {C:green}#1# en #2#{} de otorgar {X:mult,C:white}X#3#{} Multi" + }, + unlock = { + "Acquire", + "{C:attention}Cavendish", + "in a run" + } + }, + j_paperback_guns_blazin = { + name = "Calibrated Aces", + text = { + "Los {C:attention}Ases{} otorgan", + "{X:mult,C:white} X#1# {} Multi al", + "anotar", + }, + }, + j_paperback_satellite_array = { + name = "Conjunto de satélites", + text = { + "Gana {C:chips}+#1#{} Fichas por", + "cada carta de {C:planet}Planeta{} ", + "usada y pierde {C:chips}#2#{} Fichas", + "por al jugar una mano", + "{C:inactive}(Actualmente {C:chips}+#3#{C:inactive} Fichas)", + } + }, + j_paperback_rosary_beads = { + name = "Rosario Rojo", + text = { + "Si la mano jugada contiene", + "{C:attention}#1#{} o más {C:hearts}Corazones{}, ganas {C:money}$#2#{}" + } + }, + j_paperback_tian_tian = { + name = "Tian Tian", + text = { + 'Gana {X:mult,C:white}X#1#{} Multi por', + 'cada {C:attention}carta{} destruida', + "{C:inactive}(Currently {X:mult,C:white} X#2# {C:inactive} Mult)" + } + }, + j_paperback_disco = { + name = "Comodín Disco", + text = { + "Gana {C:mult}+#1#{} Multi cuando compras", + "teniendo {C:money}$#2#{} o menos", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)" + } + }, + j_paperback_a_balatro_movie = { + name = "Una Película de Balatro", + text = { + "Jugar la misma {C:blue}mano{} de forma", + "{C:attention}consecutiva{} otorga {C:money}$#2#{}", + "{C:inactive}(Última mano: {C:attention}#1#{C:inactive})" + } + }, + j_paperback_unionized_labor = { + name = "Sindicalizado", -- Some things are kinda tricky to translate properly + text = { + "Triplica las {C:green,E:1,S:1.1}probabilidades", + "cuando tienes menos de {C:money}$#1#{}, reduce", + "las prob. a la {C:attention}mitad{} de lo contrario", + "{C:inactive}(ej: {C:green}1 en 3{C:inactive} -> {C:green}#2# en #3#{C:inactive})" + } + }, + -- Cross-Mod jokers start here + j_paperback_moon_waltz = { + name = "Moon Waltz", + text = { + "This Joker has a {C:green}#3#{} in {C:green}#4#{} chance of gaining", + "half of a used {C:planet}Moon{} or", + "{C:planet}Asteroid{} card's {C:mult}+Mult{} or {C:chips}+Chips{}", + "{C:inactive}(Currently {C:mult}+#1#{C:inactive} Mult and {C:chips}+#2#{C:inactive} Chips)", + }, + }, + }, + Spectral = { + c_paperback_apostle_of_cups = { + name = "Apóstol de Copas", + text = { + "Selecciona una {C:attention}Carta", + "para hacerla {C:dark_edition}Negativa", + "{C:attention}#1#{} Ranura de comodín", + } + }, + c_paperback_apostle_of_wands = { + name = "Apóstol de Varas", + text = { + "Crea un comodín no", + "{C:legendary}Legendario{} de tu {C:attention}elección{}", + "{C:inactive}(No puedes duplicar)" + } + }, + c_paperback_apostle_of_swords = { + name = "Apóstol de Espadas", + text = { + "Destruye un {C:attention}Comodín{}", + "y retrocede {C:attention}#1#{} Apuestas" + } + }, + c_paperback_apostle_of_pentacles = { + name = "Apóstol de Pentáculos", + text = { + "Añade el {C:paperback_platinum}Clip de Platino{}", + "a {C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_golden_bough = { + name = "Rama Dorada", + text = { + "Crea un {C:paperback_ego_gift}Regalo E.G.O.{}", + "{C:dark_edition}Negativo{} después", + "de cada {C:attention}Ciega Jefe", + "{C:red}#1#{} Ranura de comodín" + } + }, + }, + paperback_minor_arcana = { + c_paperback_ace_of_cups = { + name = "As de Copas", + text = { + "Añade un {C:chips}Clip Azul{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_two_of_cups = { + name = "Dos de Copas", + text = { + "Otorga una etiqueta {C:dark_edition}Policroma{},", + "{C:dark_edition}Holgrafíca{}, {C:dark_edition}Laminada{},", + "{C:mult}Rara{} o {C:green}Inusual{C:attention}" + } + }, + c_paperback_three_of_cups = { + name = "Tres de Copas", + text = { + "Añade un {C:paperback_black}Clip Negro{} a", + "{C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_four_of_cups = { + name = "Cuatro de Copas", + text = { + "Remueve {C:attention}mejoras{}, {C:attention}sellos{} y {C:attention}ediciones{}", + "de {C:attention}#1#{} cartas seleccionadas.", + "Gana {C:money}$#2#{} por cada una" + } + }, + c_paperback_five_of_cups = { + name = "Cinco de Copas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_six_of_cups = { + name = "Seis de Copas", + text = { + "Gana la {C:attention}mitad{} de las {C:chips}Fichas", + "de {C:attention}#1#{} carta sleccionada", + "como {C:money}dinero", + "{C:inactive}(Hasta {C:money}$#2#{C:inactive})" + } + }, + c_paperback_seven_of_cups = { + name = "Siete de Copas", + text = { + "Otorga una {C:attention}mejora{} al azar", + "a {C:attention}#1#{} cartas sleccionadas" + } + }, + c_paperback_eight_of_cups = { + name = "Ocho de Copas", + text = { + "Convierta hasta {C:attention}#1#{} cartas", + "seleccionadas a un palo que", + "no ha ha sido {C:attention}seleccionado" + } + }, + c_paperback_nine_of_cups = { + name = "Nueve de Copas", + text = { + "Destruye un {C:attention}Comodín{} seleccionado", + "y crea un {C:attention}Comodín{} de misma", + "{C:attention}rareza{} o superior", + "{C:inactive}(No puede crear {C:legendary}Legendarios{C:inactive})" + } + }, + c_paperback_ten_of_cups = { + name = "Diez de Copas", + text = { + "Prob. de {C:green}#1# en #2#{} de agregar", + "edición {C:dark_edition}Policroma{} a", + "{C:attention}1{} carta seleccionada" + } + }, + c_paperback_page_of_cups = { + name = "Sota de Copas", + text = { + "Añade {C:inactive}Clip Blanco{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_knight_of_cups = { + name = "Caballero de Copas", + text = { + "Selecciona {C:attention}#1#{} cartas, la carta de", + "la {C:attention}izquierda{} copia {C:attention}todo{} de la", + "carta de la {C:attention}derecha{} menos", + "su {C:attention}categoría{} y {C:attention}palo.", + "Detruye la carta de la {C:attention}derecha{}", + } + }, + c_paperback_queen_of_cups = { + name = "Reina de Copas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_king_of_cups = { + name = "Rey de Copas", + text = { + "Gana {C:money}$#1#{} por cada palo completo", + "con las 13 {C:attention}categorías{} que poseas", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + c_paperback_ace_of_wands = { + name = "As de Varas", + text = { + "Añade {C:mult}Clips Rojos{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_two_of_wands = { + name = "Dos de Varas", + text = { + "Crea las cartas de {C:planet}Planeta{}", + "de tus manos {C:attention}más{} y {C:attention}menos{}", + "{C:attention}jugadas{}", + "{C:inactive}(Debe haber espacio)" + } + }, + c_paperback_three_of_wands = { + name = "Tres de Varas", + text = { + "Crea {C:attention}#1#{} copia de una", + "carta seleccionada" + } + }, + c_paperback_four_of_wands = { + name = "Cuatro de Varas", + text = { + "Añade {C:paperback_pink}Clips Rosados{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_five_of_wands = { + name = "Cinco de Varas", + text = { + "Destruye todas las cartas", + "{C:attention}en manos{} y deja el", + "dinero en {C:money}$0" + } + }, + c_paperback_six_of_wands = { + name = "Seis de Varas", + text = { + "Mejora {C:attention}#1#{} Cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_seven_of_wands = { + name = "Siete de Varas", + text = { + "Otorga una", + "{C:attention}Etiqueta Quebradora" + } + }, + c_paperback_eight_of_wands = { + name = "Ocho de Varas", + text = { + "Crea una {C:attention}Etiqueta {C:dark_edition}Negativa{} y", + "pierde {C:money}$#1#{}, más {C:money}$#2#{} por cada", + "Comodín encima de {C:attention}#3#{}", + "{C:inactive}(Actualmente {C:money}$#4#{C:inactive})" + } + }, + c_paperback_nine_of_wands = { + name = "Nueve de Varas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_ten_of_wands = { + name = "Diez de Varas", + text = { + "Selecciona {C:attention}#1#{} cartas, destruye", + "las {C:attention}2 de la derecha{} y la carta", + "de la {C:attention}izquierda{} gana sus {C:chips}Fichas{}", + "{C:inactive}(Arrastra para reordenar)" + } + }, + c_paperback_page_of_wands = { + name = "Sota de Varas", + text = { + "Añade {C:attention}Clips Naranjas{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_knight_of_wands = { + name = "Caballero de Varas", + text = { + "Otorga una {C:attention}Eiqueta", + "de {C:mult}Riesgo" + } + }, + c_paperback_queen_of_wands = { + name = "Reina de Varas", + text = { + "Prob. de {C:green}#1# en #2#{} de otorgar", + "edición {C:dark_edition}Dicromática{} a un", + "{C:attention}Comodín{} al azar" + } + }, + c_paperback_king_of_wands = { + name = "Rey de Varas", + text = { + "Crea al azar un {C:attention}Comodín{}", + "{C:green}Inusual{} o {C:red}Raro{}", + } + }, + c_paperback_ace_of_swords = { + name = "As de Espadas", + text = { + "Convierte hasta {C:attention}#1#{} cartas", + "seleccionadas en {V:1}#2#{}", + } + }, + c_paperback_two_of_swords = { + name = "Dos de Espadas", + text = { + "Convierta {C:attention}#1#{} cartas", + "seleccionadas al último", + "palo {C:attention}anotado{}", + -- slight error? says last hand, should be the last suit + "{C:inactive,s:0.8}(Última mano: {V:1,s:0.8}#2#{C:inactive,,s:0.8})", + } + }, + c_paperback_three_of_swords = { + name = "Tres de Espadas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_four_of_swords = { + name = "Cuatro de Espadas", + text = { + "Convierte {C:attention}#1#{} seleccionadas", + "en cartas de {C:attention}Figura{}", + "al azar" + } + }, + c_paperback_five_of_swords = { + name = "Cinco de Espadas", + text = { + "Otorga una {C:attention}edición{},", + "{C:attention}sello{} o {C:attention}mejora{}", + "al azar", + } + }, + c_paperback_six_of_swords = { + name = "Seis de Espadas", + text = { + "Añade {C:attention}Clips Amarillos{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_seven_of_swords = { + name = "Siete de Espadas", + text = { + "Añade un {C:attention}Clip Dorado{} a", + "{C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_eight_of_swords = { + name = "Ocho de Espadas", + text = { + "Añade al azar {C:attention}Clips{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_nine_of_swords = { + name = "Nueve de Espadas", + text = { + "Destruye el Comodín seleccionado, gana {C:money}$5", + "y no {C:red}puede{} aparecer de nuevo", + "por el {C:attention}resto de la partida{}" + } + }, + c_paperback_ten_of_swords = { + name = "Diez de Espadas", + text = { + "{C:red}Destruye{} todas las cartas", + "con la {C:attention}categoría{} de", + "la carta seleccionada" + } + }, + c_paperback_page_of_swords = { + name = "Sota de Espadas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}Cartas de Dominó{}" + } + }, + c_paperback_knight_of_swords = { + name = "Caballero de Espadas", + text = { + "Crea al azar una carta de", + "{C:paperback_minor_arcana}Arcana menor{} y del {C:tarot}Tarot{}", + "{C:inactive}(Debe haber espacio)" + } + }, + c_paperback_king_of_swords = { + name = "Rey de Espadas", + text = { + "Remueve los stickers de {C:money}Alquiler{} y", + "{C:paperback_perishable}Perecedero{} del comodín seleccionado" + } + }, + c_paperback_queen_of_swords = { + name = "Reina de Espadas", + text = { + "Convierte {C:attention}#1#{} cartas al azar", + "en tu baraja con{C:attention} palo diferente", + "al {C:attention}palo{} de la carta seleccionada" + } + }, + c_paperback_ace_of_pentacles = { + name = "As de Pentáculos", + text = { + "Convierte hasta {C:attention}#1#{} cartas", + "seleccionadas en {V:1}#2#{}", + } + }, + c_paperback_two_of_pentacles = { + name = "Dos de Pentáculos", + text = { + "Agrega o Remueve {C:paperback_eternal}Eterno{}", + "del {C:attention}Comodín{} sleccionado" + } + }, + c_paperback_three_of_pentacles = { + name = "Tres de Pentáculos", + text = { + "Selecciona {C:attention}#1#{} cartas, las", + "2 cartas de la {C:attention}derecha{} copian la", + "{C:attention}mejora{} de la carta de la {C:attention}izquierda{}", + "{C:inactive}(Arrastra para reordenar)" + } + }, + c_paperback_four_of_pentacles = { + name = "Cuatro de Pentáculos", + text = { + "Seleciona {C:attention}#1#{} cartas.", + "Prob. de {C:green}#2# en #3#{} de {C:red}destruir{}", + "las cartas {C:attention}no seleccionadas{}", + } + }, + c_paperback_five_of_pentacles = { + name = "Cinco de Pentáculos", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_six_of_pentacles = { + name = "Seis de Pentáculos", + text = { + "Otorga una etiqueta de", + "{C:money}Inversión{}, {C:money}Economía{}, {C:red}Cupón{},", + "{C:green}D6{} o de {C:attention}Malabar{}" + } + }, + c_paperback_seven_of_pentacles = { + name = "Siete de Pentáculos", + text = { + "Añade {C:green}Clip Verde{} a {C:attention}#1#{}", + "cartas seleccionadas" + } + }, + c_paperback_eight_of_pentacles = { + name = "Ocho de Pentáculos", + text = { + "Ganas {C:money}$#1#{} por cada carta", + "del {C:tarot}Tarot{} o {C:paperback_minor_arcana}Arcana menor{}", + "única que hayas usado", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + c_paperback_nine_of_pentacles = { + name = "Nueve de Pentáculos", + text = { + "Añade un {C:purple}Clip Morado{} a", + "{C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_ten_of_pentacles = { + name = "Diez de Pentáculos", + text = { + "Ganas entre {C:money}$#1#{} y {C:money}$#2#{}", + "al usarla" + } + }, + c_paperback_page_of_pentacles = { + name = "Sota de Pentáculos", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_knight_of_pentacles = { + name = "Caballero de Pentáculos", + text = { + "Reinicia el coste de las", + "{C:green}renovaciones{} a {C:money}$#1#{}" + } + }, + c_paperback_queen_of_pentacles = { + name = "Reina de Pentáculos", + text = { + "Selecciona {C:attention}#1#{} cartas, convierte", + "las cartas a la {C:attention}categoría{} de", + "la carta {C:attention}extremo izquierdo{}", + "{C:inactive}(Arrastra para reordenar)" + } + }, + c_paperback_king_of_pentacles = { + name = "Rey de Pentáculos", + text = { + "Ganas {C:money}$#1#{} por cada carta", + "de {C:attention}figura{} en tu baraja", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + }, + paperback_ego_gift = { + c_paperback_dark_vestige = { + name = "Vestigio oscuro", + text = { + "El resultado de intentar", + "duplicar {C:paperback_ego_gift}regalos E.G.O{}...", + } + }, + c_paperback_imposed_weight = { + name = "Peso Impuesto", + text = { + "Reactiva la carta del {C:attention}extremo{}", + "{C:attention}derecho{} {C:attention}#1#{} vez por cada", + "ranura de comodín {C:attention}vacia{}" + } + }, + c_paperback_phlebotomy_pack = { + name = "Paquete de flebotomía", + text = { + "{C:blue}+#1#{} mano adiconal al", + "empezar la ronda" + } + }, + c_paperback_smokes_and_wires = { + name = "Alambres y humo", + text = { + "{X:red,C:white}X#1#{} Multi en la última", + "{C:blue}mano{} {C:attention}de la ronda{}", + } + }, + c_paperback_coffee_and_cranes = { + name = "Café y grullas", + text = { + "Ganas {C:money}$#1#{} al final", + "de la ronda", + } + }, + c_paperback_fiery_down = { + name = "Pluma ígnea", + text = { + "Después de descartar {C:attention}#1#{} {C:inactive}(#2#){}", + "cartas, sube de nivel tu", + "próxima {C:attention}mano jugada" + } + }, + c_paperback_decamillennial_stewpot = { + name = "Olla decamilenial", + text = { + "Si tu {C:attention}primera mano{} es una", + "{C:attention}sola{} carta, destrúyela", + } + }, + c_paperback_downpour = { + name = "Diluvio", + text = { + "Las {C:blue}manos{} jugadas {C:attention}reducen{} la", + "puntucación requerida en {C:attention}#1#%", + } + }, + c_paperback_rusty_coin = { + name = "Moneda conmemorativa oxidada", + text = { + "Si tu {C:attention}primera mano{} es una {C:attention}sola{}", + "carta, obtiene un {C:attention}sello{} al azar", + } + }, + c_paperback_ragged_umbrella = { + name = "Paraguas harapiento", + text = { + "Gana {C:chips}+#1#{} Fichas por cada", + "{C:attention}mano{} que no derrota la {C:attention}Ciega{}", + "{C:inactive}(Actuamente {C:chips}+#2#{C:inactive} Fichas)", + } + }, + c_paperback_thrill = { + name = "Estremecer", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "{C:attention}descarte{} usado y se activa", + "en la {C:attention}primera{} mano jugada", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + } + }, + c_paperback_thrill_inactive = { + name = "Estremecer", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "{C:attention}descarte{} usado y se activa", + "en la {C:attention}primera{} mano jugada", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + } + }, + c_paperback_disk_fragment = { + name = "Fragmento de Disco", + text = { + "Si no posees cartas de {C:planet}Planeta{}", + "crea {C:attention}#1#{} cartas de {C:planet}Planeta{} {C:dark_edition}negativas{}", + "al seleccionar la {C:attention}Ciega pequeña{} o {C:attention}Grande{}", + } + }, + c_paperback_death_seeker = { + name = "Buscamuertos", + text = { + "Las cartas {C:attention}mejoradas{} otorgan {C:mult}+Multi{}", + "igual a su {C:attention}categoría{} al anotar", + } + }, + c_paperback_pendant_of_nostalgia = { + name = "Colgante de nostalgia", + text = { + "Cuando se {C:red}destruye{} una {C:attention}carta{}, crea una", + "carta del {C:tarot}Tarot{} o de {C:paperback_minor_arcana}Arcana menor{}", + "{C:inactive}(Debe haber espacio)" + } + }, + c_paperback_blue_lighter = { + name = "Encendedor Azul", + text = { + "Al seleccionar una {C:attention}ciega{}, destruye", + "un consumible que no sea {C:paperback_ego_gift}E.G.O.{}", + "y gana {X:mult,C:white}X#1#{} Multi", + "{C:inactive}(actualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + } + }, + c_paperback_broken_glasses = { + name = "Lentes rotos", + text = { + "Cuando {C:attention}destruyes{} exactamente {C:attention}1{} o {C:attention}2{} cartas", + "crea {C:attention}2 copias{} de las cartas destruidas.", + "Prob. de {C:green}#1# en #2#{} de {C:red}autodestruirse{}", + "{C:inactive,s:0.8}al autodestruirse no activa su pecado" + } + }, + c_paperback_nebulizer = { + name = "Nebulizador", + text = { + "Las cartas anotadas tienen una prob.", + "de {C:green}#1# en #2#{} de otorgan {X:mult,C:white}X#3#{} Multi" + } + }, + c_paperback_tomorrow_fortune = { + name = "La fortuna del mañana", + text = { + "Los {C:attention}Paquetes potenciadores{}", + "tienen {C:attention}1{} carta adicional" + } + }, + c_paperback_fluorescent_lamp = { + name = "Lámpara Fluorecente", + text = { + "{C:red}+#1#{} descarte, y ganas {C:red}+#1#{}", + "descarte adicional por cada", + "{C:attention}#2#{} ranuras de {C:attention}comodín{} vacías", + "{C:inactive}(Actualmente {C:red}+#3#{C:inactive} descartes)" + } + }, + c_paperback_lightning_rod = { + name = "Pararrayos", + text = { + "Las cartas {C:attention}en mano{}", + "tienen una prob. de", + "{C:green}#1# en #2#{} de reactivarse" + } + }, + c_paperback_chalice_of_trickle_down = { + name = "Cáliz de goteo", + text = { + "Durante la {C:attention}ciega jefe{}", + "otorga {C:money}${} igual a la cateogría", + "más baja en la {C:attention}mano anotada" + } + }, + c_paperback_patrolling_flashlight = { + name = "Linterna de Patrulla", + text = { + "El primer consumible usado en la", + "{C:attention}apuesta{} crea una {C:attention}copia energizada{}" + } + }, + }, + Voucher = { + v_paperback_celtic_cross = { + name = "Cruz Celta", + text = { + "La tienda tiene un", + "{C:paperback_minor_arcana}Mega Paquete de Arcana Menor{}", + "{C:attention}gratis{} al principio de cada", + "apuesta", + } + }, + v_paperback_soothsay = { + name = "Adivinación", + text = { + "Las cartas de {C:paperback_minor_arcana}Arcana menor{}", + "pueden aparecer en la {C:money}Tienda" + } + }, + v_paperback_second_trumpet = { + name = "Segunda Trompeta", + text = { + "Tu primer {C:paperback_ego_gift}Regalo E.G.O{} otorga", + "{C:attention}+#1#{} ranura de consumibles" + } + }, + v_paperback_rabbit_protocol = { + name = "Protocolo del Conejo", + text = { + "La primera vez que {C:attention}vendas{} un", + "{C:paperback_ego_gift}Regalo E.G.O{}, {C:attention}desactiva{}", + "la {C:attention}Ciega Jefe" + }, + unlock = { + "Vende {C:attention}#1#{} {C:paperback_ego_gift}Regalos E.G.O{}", + "en una partida" + } + }, + }, + Tag = { + tag_paperback_angel_investment = { + name = "Etiqueta de Angel Inversionista", + text = { + "Gana {C:money}$#1#{} por cada {C:money}$#2#{} que tengas", + "{C:inactive}(Maximo {C:money}$#3#{C:inactive})", + "{C:inactive}(Actualmente {C:money}$#4#{C:inactive})" + } + }, + tag_paperback_divination = { + name = "Etiqueta de Divinidad", + text = { + "Otorga un {C:paperback_minor_arcana}Mega Paquete", + "{C:paperback_minor_arcana}de Arcana Menor" + } + }, + tag_paperback_dichrome = { + name = "Etiqueta Dicromático", + text = { + "El siguiente comodín de la tienda", + "es gratis y se vuelve", + "{C:dark_edition}Dicromático" + } + }, + tag_paperback_high_risk = { + name = "Etiqueta de Riesgo", + text = { + "Seleccionar la {C:attention}Ciega", + "{C:attention}Jefe{} {C:attention}duplica{} sus", + "requisitos y ganas {C:money}$#1#", + } + }, + tag_paperback_breaking = { + name = "Etiqueta Quebradora", + text = { + "Desactiva la", + "{C:attention}Ciega Jefe" + } + } + }, + Planet = { + c_paperback_quaoar = { + name = "Quaoar", + }, + c_paperback_haumea = { + name = "Haumea", + }, + c_paperback_sedna = { + name = "Sedna", + }, + c_paperback_makemake = { + name = "Makemake", + }, + }, + Enhanced = { + m_paperback_ceramic = { + name = "Carta de Cerámica", + text = { + "Gana entre {C:money}$#1#{} y {C:money}$#2#{} al anotar.", + "Se {C:red}Rompen{} si el {C:mult}Multi{} es {C:attention}mayor{} a", + "las {C:chips}Fichas{} al jugarse o estar en mano", + } + }, + m_paperback_soaked = { + name = "Carta Mojada", + text = { + "Al anotar, las cartas en", + "{C:attention}mano{} anotan sus {C:chips}Fichas{}.", + "Prob. de {C:green}#1# en #2#{} de", + "{C:red,E:2}destruirse{} si se {C:red}descarta", + } + }, + m_paperback_wrapped = { + name = "Carta envuelta", + text = { + "Gana {C:money}$#1#{} al anotar", + "No tiene categoría ni palo" + } + }, + m_paperback_bandaged = { + name = "Carta vendada", + text = { + "Reactiva cartas {C:attention}adjacentes{}", + "prob. de {C:green}#1# en #2#{} de {C:red}romperse{}", + "al anotar" + } + }, + m_paperback_domino = { + name = "Carta de Dominó", + text = { + "Otorga {C:mult}+#1#{} Multi por cada", + "categoria descartada esta ronda", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + } + }, + m_paperback_stained = { + name = "Carta Manchada", + text = { + "Si está en {C:attention}mano{} las", + "cartas que anotan obtienen", + "permanentemente {C:mult}#1#{} Multi" + } + }, + m_paperback_sleeved = { + name = "Carta Enmicada", + text = { + "No se puede", + "{C:attention}debilitar{} o {C:attention}voltear{}", + "Ganas {C:money}$#1#{} al destruirse" + } + }, + m_paperback_antique = { + name = "Carta Antigua", + text = { + "{X:chips,C:white}X#1#{} Fichas,", + "Aumenta en {X:chips,C:white}X#2#{} cada", + "vez que se juega y anota", + } + } + }, + Edition = { + e_paperback_dichrome = { + name = "Dicromático", + text = { + "Al seleccionar la {C:attention}Ciega{}", + "gana {C:attention}+#1#{C:blue} Mano{} o {C:red}Descarte", + "{C:inactive}(El que sea menor)" + } + } + }, + Other = { + undiscovered_paperback_minor_arcana = { + name = "No se Descubrió", + text = { + "Compra o usa", + "esta carta en una", + "partida sin códigos", + "para saber lo que hace", + }, + }, + paperback_light_suits = { + name = "Palos Claros", + text = { + "{C:diamonds}Diamantes{}, {C:hearts}Corazones{}" + } + }, + paperback_dark_suits = { + name = "Palos Oscuros", + text = { + "{C:spades}Espadas{}, {C:clubs}Tréboles{}" + } + }, + paperback_requires_custom_suits = { + name = "Requiere Palos Personalizados", + text = { + "Excluido del juego.", + "Activa {C:attention}Palos Personalizados{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_enhancements = { + name = "Requiere Mejoras", + text = { + "Excluido del juego.", + "Activa {C:attention}Mejoras{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_paperclips = { + name = "Requiere Clips de papel", + text = { + "Excluido del juego.", + "Activa {C:attention}Clips de papel{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_minor_arcana = { + name = "Requiere Arcana Menor", + text = { + "Excluido del juego.", + "Activa {C:paperback_minor_arcana}Arcana Menor{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_tags = { + name = "Requiere Etiquetas", + text = { + "Excluido del juego.", + "Activa {C:attention}Etiquetas{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_editions = { + name = "Requiere Ediciones", + text = { + "Excluido del juego.", + "Activa {C:dark_edition}Ediciones{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_ranks = { + name = "Requiere Categorias", + text = { + "Excluido del juego.", + "Activa {C:dark_edition}Categorias{}", + "en la configuración de {C:legendary}Paperback", + } + }, + + -- Stickers + paperback_energized = { + name = "Energizado", + text = { + "No puede ser copiado por", + "{C:attention}#1#{}" + } + }, + paperback_temporary = { + name = "Temporal", + text = { + "Será {C:mult}destruido", + "al final de la ronda" + } + }, + + paperback_corroded = { + name = "Corroida", + text = { + "No se puede {C:money}vender{} sin", + "sin activar un {C:paperback_ego_gift}Pecado{}.", + "{C:red}Se destruye{} y activa", + "su {C:paperback_ego_gift}pecado{} dentro", + "de {C:attention}#1#{} rondas", + } + }, + + -- Paperclips + paperback_blue_clip = { + name = "Clip Azul", + text = { + "{X:chips,C:white}X#1#{} Fichas al {C:attention}anotar{}", + " por cada {C:attention}Clip{} en {C:attention}mano", + "{C:inactive}(Actualmente {X:chips,C:white}X#2#{C:inactive})" + } + }, + paperback_purple_clip = { + name = "Clip Morado", + text = { + "Reactiva cartas adjacentes", + "si tienen un {C:attention}Clip{}", + } + }, + paperback_red_clip = { + name = "Clip Rojo", + text = { + "{C:mult}+#1#{} Multi al {C:attention}anotar{}", + "por cada {C:attention}Clip{} en {C:attention}mano", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + } + }, + paperback_orange_clip = { + name = "Clip Naranja", + text = { + "Gana {C:money}$#1#{} al {C:attention}anotar{}", + " por cada {C:attention}#2#{} {C:attention}Clips{} en {C:attention}mano", + "{C:inactive}(Actualmente {C:money}$#3#{C:inactive})" + } + }, + paperback_black_clip = { + name = "Clip Negro", + text = { + "Reactiva la carta {C:attention}anotada{}", + "si hay {C:attention}Clips{} en la {C:attention}mano", + } + }, + paperback_yellow_clip = { + name = "Clip Amarillo", + text = { + "Si {C:attention}anota{} y hay {C:attention}Clips{} en {C:attention}mano{}:", + "{C:green}#1# en #2#{} de otorgar {C:red}+#3#{} Multi,", + "{C:green}#4# en #5#{} de otorgar {X:mult,C:white}X#6#{} Multi", + "{C:green}#7# en #8#{} de ganar {C:money}$#9#{}", + } + }, + paperback_gold_clip = { + name = "Clip Dorado", + text = { + "Gana {C:money}$#1#{} por cada {C:attention}Clip{} anotado", + "si esta carta está en {C:attention}mano", + "al final de la ronda", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + paperback_green_clip = { + name = "Clip Verde", + text = { + "Gana {C:mult}+#2#{} Multi por cada {C:attention}2{} Clips", + "anotados y {C:mult}#3#{} Multi por cada", + "{C:attention}Clip{} descartado", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi)" + } + }, + paperback_white_clip = { + name = "Clip Blanco", + text = { + "Si está en {C:attention}mano{} al {C:attention}final{} de", + "la {C:attention}ronda{}, gana {C:chips}+#1#{} Fichas por", + "cada {C:attention}Clip{} anotado en la ronda", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)" + } + }, + paperback_pink_clip = { + name = "Clip Rosado", + text = { + "{X:mult,C:white}X#1#{} Multi al estar en la {C:attention}mano{}", + " aumenta {X:mult,C:white}X#2#{} por cada {C:attention}Clip{} anotado", + "{C:inactive,s:0.8}(Se reinicia al jugar una mano)" + } + }, + paperback_platinum_clip = { + name = "Clip de Platino", + text = { + "Al {C:attention}anotar{}, fuerza a los", + "{C:attention}Clips{} a activarse si están", + "{C:attention}en mano{}" + } + }, + + -- Regalos E.G.O. Pecados + paperback_sin_none = { + name = "Vestigio", + text = { + "Siempre se vende por {C:money}$#1#{}" + } + }, + paperback_sin_wrath = { + name = "Ira", + text = { + "Al venderse, {C:attention}destruye{}", + "todos tus {C:attention}consumibles" + } + }, + paperback_sin_lust = { + name = "Lujuría", + text = { + "Al venderse, reduce {C:attention}#1# niveles{}", + "a tu mano {C:attention}más jugada{}" + } + }, + paperback_sin_sloth = { + name = "Pereza", + text = { + "Sólo lo puedes vender", + "al salta una {C:attention}ciega" + } + }, + paperback_sin_gluttony = { + name = "Gula", + text = { + "Al venderse agrega {C:paperback_perishable}pedecedero{}", + "a un {C:attention}comodín{}" + } + }, + paperback_sin_gloom = { + name = "Melancolía", + text = { + "Al venderse multiplica el tamaño", + "de las {C:attention}ciegas{} por {C:attention}X#1#{}" + } + }, + paperback_sin_pride = { + name = "Orgullo", + text = { + "Se vende por {C:money}#2#{}" + } + }, + paperback_sin_envy = { + name = "Envidia", + text = { + "Al venderse, {C:attention}-#1#{} al", + "tamaño de mano" + } + }, + paperback_sin_madness = { + name = "Locura", + text = { + "Al venderse, {C:attention}destruye{}", + "un {C:attention}Comodín" + } + }, + -- EGO GIFTS + p_paperback_ego_gift_normal = { + name = "Extractión de Regalos E.G.O.", + text = { + "Escoge {C:attention}#1#{} de {C:attention}#2#{} {C:paperback_ego_gift}Regalos E.G.O{}", + }, + }, + -- Minor Arcana Packs + p_paperback_minor_arcana_normal = { + name = "Paquete de Arcana Menor", + text = { + "Elige {C:attention}#1#{} de {C:attention}#2#{} cartas de", + "{C:paperback_minor_arcana}Arcana Menor{} para usar", + "inmediatamente" + } + }, + p_paperback_minor_arcana_jumbo = { + name = "Paquete Jumbo de Arcana Menor", + text = { + "Elige {C:attention}#1#{} de {C:attention}#2#{} cartas de", + "{C:paperback_minor_arcana}Arcana Menor{} para usar", + "inmediatamente" + } + }, + p_paperback_minor_arcana_mega = { + name = "Mega Paquete de Arcana Menor", + text = { + "Elige {C:attention}#1#{} de {C:attention}#2#{} cartas de", + "{C:paperback_minor_arcana}Arcana Menor{} para usar", + "inmediatamente" + } + }, + }, + Partner = { + pnr_paperback_virtual = { + name = "Virtual", + text = { + "Reactiva la {C:attention}primera carta", + "de {C:paperback_light_suit}Palo claro{} que anota", + "si no juegas {C:paperback_dark_suit}Palos oscuros{}", + } + }, + pnr_paperback_aftermath = { + name = "Secuela", + text = { + "Las {C:attention}Cartas de Figura{}", + "ganan {C:chips}+#1#{} fichas", + "al anotar", + } + }, + pnr_paperback_faker = { + name = "Farsante", + text = { + "{C:attention}Una vez por ronda{}", + "jugar una {C:attention}sola carta{}", + "la destruye", + } + }, + pnr_paperback_faker_buffed = { + text = { + "Jugar una {C:attention}sola carta{}", + "la destruye", + } + }, + }, + Sleeve = { + sleeve_paperback_paper = { + name = "Funda de Papel", + text = { + "Los {C:attention}Comodines{} de {C:legendary}Paperback{}", + "son {C:attention}3X nás comunes,", + "Comienza la partida con el", + "Comodín {C:attention,T:j_paperback_shopping_center}#1#{}" + } + }, + sleeve_paperback_paper_buff = { + name = "Funda de Papel", + text = { + "Comienzas con {C:attention,T:j_paperback_shopping_center}#1#{}", + "{C:dark_edition}Negativo{}" + } + }, + + sleeve_paperback_proud = { + name = "Funda Arcoiris", + text = { + "Tu baraja comienza con", + "{C:hearts}Corazones{}, {C:diamonds}Diamantes{},", + "{C:spades}Espadas{}, {C:clubs}Tréboles{}", + "{C:paperback_crowns}Coronas{} y {C:paperback_stars}Estrellas" + } + }, + sleeve_paperback_proud_buff = { + name = "Funda Arcoiris", + text = { + "Todos tus {C:attention}Ases", + "tienen edición {C:dark_edition}Policroma" + } + }, + + sleeve_paperback_silver = { + name = "Funda de Plata", + text = { + "Comienza la partida con", + "el vale {C:paperback_minor_arcana,T:v_paperback_celtic_cross}#1#{}", + "y un {C:paperback_minor_arcana,T:c_paperback_nine_of_cups}#2#" + } + }, + sleeve_paperback_silver_buff = { + name = "Funda de Plata", + text = { + "Comienzas con el Vale", + "{C:paperback_minor_arcana,T:v_paperback_soothsay}#1#{}" + } + }, + + sleeve_paperback_dreamer = { + name = "Funda Soñadora", + text = { + "Comienza con un", + "{C:paperback_minor_arcana,T:c_paperback_apostle_of_wands}#1#", + "{C:paperback_temporary}Temporal", + "{C:attention}#2#{} Ranura de comodín" + } + }, + sleeve_paperback_dreamer_buff = { + name = "Funda Soñadora", + text = { + "Tu Baraja contiene", + "{C:attention}Apostoles" + } + }, + + sleeve_paperback_antique = { + name = "Funda Antigua", + text = { + "Los {C:tarot}Paquetes Arcanos{} no", + "aparecerán en la tienda", + "Los {C:paperback_minor_arcana}Paquetes de Arcana Menor", + "son {C:attention}3X{} más comunes" + } + }, + sleeve_paperback_antique_buff = { + name = "Funda Antigua", + text = { + "Los Paquetes de", + "{C:paperback_minor_arcana}Arcana menor{} son {C:money}Gratis" + } + }, + + sleeve_paperback_passionate = { + name = "Funda Apasionada", + text = { + "Después de derrotar una", + "{C:attention}Ciega Jefe{}, gana una", + "{C:attention,T:tag_paperback_high_risk}#1#", + "No puedes ganar {C:money}interés" + } + }, + sleeve_paperback_passionate_buff = { + name = "Funda Apasionada", + text = { + "Todas las {C:attention}Ciegas Jefe{} son", + "reemplazadas con {C:attention}Ciegas Finales", + "Al derrotar una {C:attention}Ciega Final", + "gana una Etiqueta {C:dark_edition,T:tag_negative}Negativa{}" + } + } + } + }, + misc = { + dictionary = { + -- Badge under cards + k_paperback_minor_arcana = "Arcana menor", + -- Name of consumable type in collection + b_paperback_minor_arcana_cards = "Arcana menor", + -- Text shown at the bottom while opening booster + paperback_minor_arcana_pack = "Paquete de Arcana menor", + + -- Badge under gifts + k_paperback_ego_gift = "Regalos E.G.O.", + -- Name of consumable type in collection + b_paperback_ego_gift_cards = "Regalos E.G.O.", + -- Text shown at the bottom while opening booster + paperback_ego_gift_pack = "Extracción de Regalo E.G.O.", + + -- Badge under E.G.O. Gifts based on sins + k_paperback_ego_sin_none = "Vestigio", + k_paperback_ego_sin_pride = "Orgullo", + k_paperback_ego_sin_wrath = "Ira", + k_paperback_ego_sin_gloom = "Melancolía", + k_paperback_ego_sin_sloth = "Pereza", + k_paperback_ego_sin_lust = "Lujuría", + k_paperback_ego_sin_envy = "Envidia", + k_paperback_ego_sin_gluttony = "Gula", + k_paperback_ego_sin_madness = "Locura", + + paperback_confessed_ex = "¡Confesó!", + paperback_polychrome_ex = "¡Policroma!", + paperback_destroyed_ex = "¡Destruido!", + paperback_doubled_ex = "¡Doble!", + paperback_too_late_ex = "¡MUY TARDE!", + paperback_broken_ex = "¡Se Rompió!", + paperback_none = "Nada", + paperback_downgrade_ex = "¡Degradado!", + paperback_copy_ex = "¡Copiado!", + paperback_consumed_ex = "Consumido!", + paperback_too_hot_ex = "¡Muy Caliente!", + paperback_inactive = "Inactivo", + paperback_supplies_ex = "Suministros!", + paperback_melted_ex = "¡Derretido!", + paperback_investment_ex = "¡Inversión!", + paperback_plus_minor_arcana = "¡+1 Arcana!", + paperback_plus_consumable = "¡+1 Consumable!", + paperback_plus_tag = "+1 Etiqueta", + paperback_edition_ex = "Edición!", + paperback_rare_ex = "¡Raro!", + paperback_saved_unholy_alliance = "Salvado por Alianza Impía", + paperback_saved_determination = "Salvado por Determinacion", + paperback_reduced_ex = "Reducido!", + paperback_determination_ex = "NGAAAHH!", + paperback_forlorn_destruction = "Disculpa...", + paperback_freezer_ex = "¡Hora de comer!", + paperback_corroded_ex = "¡Corroida!", + paperback_jestosterone_ex = "¡Masc!", + paperback_jestrogen_ex = "¡Fem!", + paperback_punch_card_active = "¡Dile a tus amigos!", + paperback_punch_card_ex = "Wrong Warp!", + + paperback_ui_requires_restart = "Requiere Reinicio", + paperback_ui_no_requires_restart = "No Requiere Reinicio", + paperback_ui_enable_blinds = "Activar Ciegas", + paperback_ui_enable_minor_arcana = "Activar Arcana Menor", + paperback_ui_enable_ego_gifts = "Activar regalos E.G.O.", + paperback_ui_enable_enhancements = "Activar Mejoras", + paperback_ui_enable_editions = "Activar Ediciones", + paperback_ui_enable_paperclips = "Activar Clips de papel", + paperback_ui_custom_suits_enabled = "Activar Palos nuevos", + paperback_ui_enable_vouchers = "Activar Vales", + paperback_ui_enable_tags = "Activar Etiquetas", + paperback_ui_enable_ranks = "Activar Categorias", + paperback_ui_developers = "Desarrolladores", + paperback_ui_artists = "Artistas", + paperback_ui_localization = "Traducción", + paperback_ui_paperclips = "Clips de Papel", + paperback_ui_enable_spectrals = "Activar Cartas Espectrales", + paperback_ui_plague_doctor_quotes = "Fraces del Doctor de la Plaga", + paperback_ui_select = "Seleccionar", + + -- Plague Doctor's quotes + paperback_plague_quote_1_1 = 'On this rock I will build my church, and the', + paperback_plague_quote_1_2 = 'gates of hell shall not prevail against it...', + + paperback_plague_quote_2_1 = 'Tell us, when will this happen, and what will be', + paperback_plague_quote_2_2 = 'the sign of your coming and the end of an age?', + + paperback_plague_quote_3_1 = 'Do you wish us to call fire down', + paperback_plague_quote_3_2 = 'from heaven to destroy them?', + + paperback_plague_quote_4_1 = 'To the apostles he gave the name Boanerges,', + paperback_plague_quote_4_2 = 'which means "Sons of Thunder".', + + paperback_plague_quote_5_1 = 'Show us the father, and that', + paperback_plague_quote_5_2 = 'will be enough for us.', + + paperback_plague_quote_6_1 = 'He saw a man. "Follow me," he told him,', + paperback_plague_quote_6_2 = 'and the Apostle got up and followed him.', + + paperback_plague_quote_7_1 = 'Now for some time the Apostle had', + paperback_plague_quote_7_2 = 'practiced sorcery and amazed all people.', + + paperback_plague_quote_8_1 = 'Then the Apostle said to the rest of the disciples,', + paperback_plague_quote_8_2 = '"Let us also go, that we may die with him."', + + paperback_plague_quote_9_1 = 'Then the Apostle declared, "You are', + paperback_plague_quote_9_2 = 'the son of him, you are the king."', + + paperback_plague_quote_10_1 = 'Then the Apostle said, "But why do you intend', + paperback_plague_quote_10_2 = 'to show yourself to us and not the world?"', + + paperback_plague_quote_11_1 = 'From now on, let no one cause me trouble,', + paperback_plague_quote_11_2 = 'for I bear on my body the marks of him.', + + paperback_plague_quote_12_1 = 'Have I not chosen you, the Twelve?', + paperback_plague_quote_12_2 = 'Yet one of you is a devil.', + + -- Clippy messages + paperback_clippy_msg_1 = "¿Guardo el archivo?", + paperback_clippy_msg_2 = "¡Soy Clippy!", + paperback_clippy_msg_3 = "¡Hola!", + paperback_clippy_msg_4 = "¡La Planta acecha!", + paperback_clippy_msg_5 = "¡Te ayudaré!", + paperback_clippy_msg_6 = "¿Te ayudo?", + paperback_clippy_msg_7 = "¿Linux es mejor?", + paperback_clippy_msg_8 = "¡El mouse funciona!", + paperback_clippy_msg_full = "¡Memoria llena!", + + -- Da Capo messages + paperback_da_capo_Clubs = "Movimiento 1", + paperback_da_capo_Spades = "Movimiento 2", + paperback_da_capo_Diamonds = "Movimiento 3", + paperback_da_capo_Hearts = "Movimiento 4", + paperback_da_capo_None = "¡Final!", + }, + v_dictionary = { + paperback_a_discards = "+#1# Descarte", + paperback_a_discards_minus = "-#1# Descarte", + paperback_a_hands_minus = "-#1# Mano", + paperback_prince_of_darkness = "+#1# Multi, +#2# Fichas", + paperback_a_completion = "#1#/#2#", + paperback_a_round_minus = "-#1# Ronda", + paperback_a_plus_cards = "+#1# #2#s", + paperback_a_plus_tags = "+#1# Etiqueta", + }, + ranks = { + paperback_Apostle = 'Apóstol', + }, + suits_singular = { + paperback_Crowns = "Corona", + paperback_Stars = 'Estrella' + }, + suits_plural = { + paperback_Crowns = "Coronas", + paperback_Stars = 'Estrellas' + }, + poker_hands = { + ['paperback_Spectrum'] = "Espectro", + ['paperback_Straight Spectrum'] = "Escalera Espectral", + ['paperback_Straight Spectrum (Royal)'] = "Espectro Real", + ['paperback_Spectrum House'] = "Full Espectral", + ['paperback_Spectrum Five'] = "Quintilla Espectral", + ['paperback_Straight Flush (Rapture)'] = "Rapto", + }, + poker_hand_descriptions = { + ['paperback_Spectrum'] = { + "5 cartas de palo diferente" + }, + ['paperback_Straight Spectrum'] = { + "5 cartas seguidas", + "de palo diferente" + }, + ['paperback_Spectrum House'] = { + "Una Tercia y un Par con cada", + "carta de palo diferente" + }, + ['paperback_Spectrum Five'] = { + "5 cartas de la misma categoría y", + "cada una de palo diferente" + }, + }, + labels = { + paperback_blue_clip = "Clip Azul", + paperback_red_clip = "Clip Rojo", + paperback_orange_clip = "Clip Naranja", + paperback_pink_clip = "Clip Rosado", + paperback_black_clip = "Clip Negro", + paperback_yellow_clip = "Clip Amarillo", + paperback_gold_clip = "Clip Dorado", + paperback_white_clip = "Clip Blanco", + paperback_green_clip = "Clip Verde", + paperback_purple_clip = "Clip Morado", + paperback_platinum_clip = "Clip de Platino", + paperback_dichrome = "Dicromático", + paperback_energized = "Energizado", + paperback_temporary = "Temporal", + paperback_corroded = "Corroida", + + } + } +} \ No newline at end of file diff --git a/localization/es_ES.lua b/localization/es_ES.lua new file mode 100644 index 00000000..5d631b73 --- /dev/null +++ b/localization/es_ES.lua @@ -0,0 +1,3434 @@ +return { -- Español + descriptions = { + Back = { + b_paperback_paper = { + name = "Baraja de Papel", + text = { + "Los {C:attention}Comodines{} de {C:legendary}Paperback{}", + "son {C:attention}3X nás comunes,", + "Comienza la partida con el", + "Comodín {C:attention,T:j_paperback_shopping_center}#1#{}" + } + }, + b_paperback_proud = { + name = "Baraja Arcoiris", + text = { + "Tu baraja comienza con", + "{C:hearts}Corazones{}, {C:diamonds}Diamantes{},", + "{C:spades}Espadas{}, {C:clubs}Tréboles{}", + "{C:paperback_crowns}Coronas{} y {C:paperback_stars}Estrellas" + } + }, + b_paperback_silver = { + name = "Baraja de Plata", + text = { + "Comienza la partida con", + "el vale {C:paperback_minor_arcana,T:v_paperback_celtic_cross}#1#{}", + "y un {C:paperback_minor_arcana,T:c_paperback_nine_of_cups}#2#" + } + }, + b_paperback_dreamer = { + name = "Baraja Soñadora", + text = { + "Comienza con un", + "{C:paperback_minor_arcana,T:c_paperback_apostle_of_wands}#1#", + "{C:paperback_temporary}Temporal", + "{C:attention}#2#{} Ranura de comodín" + } + }, + b_paperback_antique = { + name = "Baraja Antigua", + text = { + "Los {C:tarot}Paquetes Arcanos{} no", + "aparecerán en la tienda", + "Los {C:paperback_minor_arcana}Paquetes de Arcana Menor", + "son {C:attention}3X{} más comunes" + } + }, + b_paperback_passionate = { + name = "Baraja Apasionada", + text = { + "Después de derrotar una", + "{C:attention}Ciega Jefe{}, gana una", + "{C:attention,T:tag_paperback_high_risk}#1#", + "No puedes ganar {C:money}interés" + } + }, + b_paperback_shimmering = { + name = "Baraja Reluciente", + text = { + "{C:attention}+#1#{} ranura de consumibles", + "por cada {C:attention}Pecado{} único en tu", + "posesión", + "{C:red}#2#{} Ranuras de Comodín", + "Los {C:paperback_ego_gift}Paquetes de Extracción E.G.O.{}", + "Son {C:attention}5X{} más comunes" + } + }, + }, + Blind = { + bl_paperback_quarter = { + name = "La Corchea", + text = { + "#1# en #2# cartas", + "son debilitadas" + }, + }, + bl_paperback_half = { + name = 'La Mitad', + text = { + 'Reduce todas las', + 'posibilidades a la mitad' + } + }, + bl_paperback_whole = { + name = 'La Entera', + text = { + 'Las Categorias usadas', + 'anteriormente en esta', + 'son debilitadas' + } + }, + bl_paperback_rest = { + name = 'La Pausa', + text = { + '#1# en #2# posibilidades de', + 'que las cartas de números', + 'salgan boca abajo' + } + }, + bl_paperback_flat = { + name = 'El Bemol', + text = { + 'Reduce la categoría', + 'de las cartas jugadas' + } + }, + + bl_paperback_sharp = { + name = 'La Sostenida', + text = { + 'Aumenta la categoría', + 'de las cartas jugadas' + } + }, + bl_paperback_natural = { + name = 'La Natural', + text = { + 'Jugar manos por encima', + 'del nivel más bajo', + 'debilita las cartas' + } + }, + bl_paperback_coda = { + name = 'La Coda', + text = { + 'No puedes mover', + 'las cartas ni', + 'los comodines' + } + }, + bl_paperback_taupe_treble = { + name = 'Clave de sol', + text = { + 'Debes anotar una', + 'carta mejorada', + } + }, + }, + Joker = { + j_paperback_showdown = { + name = "Confrontación", + text = { + "Cada {V:1}#1#{} y {V:2}#2#{} en {C:attention}mano{}", + "tienen una prob. de {C:green}#3# en #4#", + "de otorgar {C:money}$#5#", + } + }, + j_paperback_golden_egg = { + name = "Huevo de Oro", + text = { + "Jugar una {C:attention}mano secreta{}", + "otorga el valor de venta", + "del {C:attention}Comodín{} a la derecha" + }, + unlock = { + "Win a run with a", + "{C:attention}secret hand{} as your", + "most played hand" + } + }, + j_paperback_insurance_policy = { + name = "Politica de Seguros", + text = { + "Ganas {C:mult}+#1#{} Multi por cada {C:attention}Jota{}", + "y pierdes {C:mult}-#1#{} Multi por cada {C:attention}Rey{}", + "en tu baraja", + "{C:inactive}(Actualmente {C:mult}#2#{C:inactive} Multi){}", + } + }, + j_paperback_burning_pact = { + name = "Pacto Ardiente", + text = { + "Si {C:attention}descartas{} una sola {C:attention}#1#{} carta", + "saca {C:attention}#2#{} cartas de la baraja" + } + }, + j_paperback_blade_dance = { + name = "Danza de Espadas", + text = { + "Al seleccionar una {C:attention}Ciega{},", + "crea {C:attention}#1#{} {C:attention}Castar de acero{}", + "{C:paperback_temporary}temporales" + } + }, + j_paperback_claw = { + name = "Garras", + text = { + "Anotar un {C:attention}#1#{} hace que todos los {C:attention}#1#{}", + "otorgen {C:mult}+#2#{} Multi adicional por", + "por cada {C:attention}#1#{} anotado", + "Se reinicia al {C:attention}final de la ronda", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)" + } + }, + j_paperback_chaplin = { + name = "Chaplin", + text = { + "Al comprar un {C:attention}Vale{} tambien", + "consigues su {C:attention}Mejora{}" + } + }, + j_paperback_milk_tea = { + name = "Té con Leche", + text = { + "{C:purple}Balancea{} el {C:attention}#1#%{} de las {C:chips}Fichas{} y {C:mult}Multi", + "Se reduce un {C:attention}#2#%{} si el {C:mult}Multi{}", + "es {C:attention}mayor{} a las {C:chips}Fichas" + } + }, + j_paperback_nichola = { + name = "Nichola", + text = { + "Las Cartas {C:attention}Figura{} {C:attention}en mano", + "cuentan como {C:attention}anotadas" + } + }, + j_paperback_the_dynasty = { + name = "La Dinastía", + text = { + "{X:mult,C:white}X#1#{} Multi si", + "la mano jugada contiene", + "un {C:attention}#2#" + } + }, + j_paperback_lurid_joker = { + name = "Comodín tenebroso", + text = { + "Otorga {C:chips}+#1#{} Fichas si", + "la mano jugada contiene", + "un {C:attention}#2#" + } + }, + j_paperback_zealous_joker = { + name = "Comodín Ferviente", + text = { + "Otorga {C:mult}+#1#{} Multi si", + "la mano jugada contiene", + "un {C:attention}#2#" + } + }, + j_paperback_deviled_egg = { + name = "Huevo Endiablado", + text = { + "La primera carta {C:attention}anotada{} en", + "la ronda se vuelve de {C:attention}Oro{}.", + "Se consume en {C:attention}#1#{} rondas" + } + }, + j_paperback_pear = { + name = "Pera", + text = { + "Gana {C:chips}+#2#{} Fichas si la mano", + "contiene un {C:attention}#1#{}.", + "Pierde {C:chips}-#3#{} Fichas si la", + "mano no contiene {C:attention}#1#{}", + "Se consume al llegar a 0", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)" + } + }, + j_paperback_teapot = { + name = "Tetera", + text = { + "Gana {C:blue}+#1#{} fichas al cuando", + "una {C:attention}#2#{} anota", + "{C:inactive}(Actualmente {C:blue}+#3#{C:inactive} Fichas)" + } + }, + j_paperback_the_one_who_waits = { + name = "El Que Espera", + text = { + "Si la mano {C:attention}anota{} {V:1}#1#s{}:", + -- error: missing an "este Comodín" + "Prob. de {C:green}#2# en #3#{} de ganar {X:mult,C:white}X#4#{} Multi", + "Prob. de {C:green}#5# en #6#{} de crear {C:tarot}#7#{}", + "{C:inactive,s:0.8}(Debe haber espacio) (Actualmente {X:mult,C:white,s:0.8}X#8#{C:inactive,s:0.8} Multi)", + } + }, + j_paperback_blood_rain = { + name = "Lluvia de Sangre", + text = { + "Las {C:attention}Cartas Mojadas{} otorgan {C:mult}Multi{}", + "en vez de {C:chips}fichas{} de las cartas{C:attention} en mano{}", + } + }, + j_paperback_pinot_noir = { + name = "Pinot Noir", + text = { + "Las siguientes {C:attention}#1#{} veces que", + "una {C:attention}#2#{} se activa", + "otorga {C:mult}#3#{} multi adicional" + } + }, + j_paperback_jestosterone = { + name = "Testocomodín", + text = { + "{C:attention}#1#s{} anotadas se", + "convierten en {C:attention}#2#es{}" + } + }, + j_paperback_jestrogen = { + name = "Estromodín", + text = { + "{C:attention}#1#es{} y {C:attention}#2#s{} anotados", + "se convierten en {C:attention}#3#s{}" + } + }, + j_paperback_langely = { + name = "L'angely", + text = { + "Ganas la mitad del {C:money}valor de venta{} de tus", + "comodines al derrotar una {C:attention}Ciega Grande{}.", + "Ganas todo el {C:money}valor de venta{}", + "al derrotar una {C:attention}Ciega Jefe{}" + } + }, + j_paperback_pedrillo = { + name = "Pedrillo", + text = { + "Anotar una {C:attention}Reina{} crea", + "la carta de {C:planet}Planeta{} de", + "la {C:attention}mano jugada{}", + } + }, + j_paperback_double_dutchman = { + name = "Dutchman Doble", + text = { + "Por las siguientes {C:attention}#3#{} {C:blue}manos{}:", + "Cada carta {C:attention}mano{} tiene una prob. de", + "{C:green}#1# en #2#{} de ganar una {C:attention}mejora{} al azar y una", + "prob. de {C:green}#1# en #2#{} de ganar un {C:attention}sello{} al azar" + } + }, + j_paperback_one_sin_and_hundreds_of_good_deeds = { + name = "Un pecado y cientos de buenas obras", + text = { + "Los {C:attention}3{} y cartas {C:attention}sin categoria{}", + "otorgan {C:mult}+#1#{} Multi al anotar", + "{C:inactive}''Se alimenta del mal''", + }, + }, + j_paperback_one_sin_and_hundreds_of_good_deeds_fed = { + name = "{C:red}Un pecado y cientos de buenas obras{}", + text = { + "Los {C:attention}3{} y cartas {C:attention}sin categoria{}", + "otorgan {C:mult}+Mult{} por cada", + "carta en carta en tu baraja al anotar", + "{C:inactive}(Currently {C:mult}+#2#{}{C:inactive})", + }, + }, + j_paperback_white_night = { + name = "WhiteNight", + text = { + "Destruye las cartas anotadas que no son {C:attention}Apostoles{}", + "después de jugar la mano. Los {C:attention}Apostoles{} anotados", + "otorgan {X:mult,C:white}X#1#{} Multi. Jugar una mano sin", + "{C:attention}Apostoles destruye{} un comodín al azar.", + "Descartar {C:attention}Apostoles{} los {C:attention}destruye{}" + }, + unlock = { + "Debes tener #1# o más", + "{C:attention}Apostoles{} en", + "tu baraja" + } + }, + j_paperback_as_above_so_below = { + name = "Tanto arriba, como abajo", + text = { + "Jugar una mano de 5 cartas con un", + "{C:attention}Apóstol{} crea una carta del {C:purple}Tarot{},", + "Si la mano es una {C:attention}Escalera{} crea", + "una carta {C:spectral}Espectral{} en su lugar", + "{C:inactive}(Debe haber espacio)" + }, + unlock = { + "Juega un {C:attention}Rapto{}" + } + }, + j_paperback_plague_doctor = { + name = "Doctor de la Plaga", + text = { + "Jugar Carta más Alta", + "convierte la carta anotada", + "en un {C:attention}Apóstol{}. Cada {C:attention}Apóstol{}", + "en mano otorga {X:mult,C:white}X#1#{} Multi" + } + }, + j_paperback_king_me = { + name = "¡Coroname!", + text = { + "Anotar {V:1}#1#{} aumenta", + "su {C:attention}categoria{} hasta", + "llegar a {C:attention}Rey{C:inactive}" + } + }, + j_paperback_gambit = { + name = "Gambito", + text = { + "Anotar {V:1}#1#s{} hace que la", + "primera {V:1}#1#{} {C:attention}destruya{}", + "la primera carta en mano", + "que no es una {V:1}#1#{}", + "y obtiene el {C:attention}doble{} de sus {C:chips}Fichas{}", + } + }, + j_paperback_solar_eclipse = { + name = "Eclipse Solar", + text = { + "Anotar cartas de", + "{C:paperback_light_suit}Palo claro{} las", + "convierte en {V:1}#1#" + } + }, + j_paperback_prism = { + name = "Prisma", + text = { + "Si la mano jugada contiene {C:attention}#1#{},", + "las {C:attention}cartas anotadas{} cambian", + "a un {C:attention}palo{} al azar", + } + }, + j_paperback_master_spark = { + name = "Chispa Maestra", + text = { + "Al jugar un {C:attention}Espectro{}, destruye", + "las cartas {C:attention}en mano{} y las", + "{C:attention}cartas jugadas{} ganan {C:dark_edition}Policroma", + "{S:1.1,C:red,E:2}Se autodestruye{} al activarse", + } + }, + j_paperback_j_and_js = { + name = "J&J's", + text = { + "Si la mano jugada contiene un", + "{C:attention}Espectro{}, crea {C:attention}#1#{} {C:attention}Etiquetas{}", + "al azar.", + "Se consume {C:attention}#2#{} rondas", + } + }, + j_paperback_blue_star = { + name = "Blue Star", + text = { + "Gana {X:chips,C:white}X#1#{} Fichas cuando anotas {V:1}#2#{}", + "Pierde {X:chips,C:white}X#3#{} Fichas cuando anotas {V:2}#4#{}", + "{C:inactive}(Actualmente {X:chips,C:white}X#5#{C:inactive} Fichas)" + } + }, + j_paperback_shadowmantle = { + name = "Manto de Sombras", -- Not a typo, equipment in deltarune is written without a space | "I never played those games so spaces here we go -Marffe" + text = { + "Prob. de {C:green}#2# en #3#{} de crear", + "una {C:dark_edition}Etiqueta Negativa{}", + "al anotar {V:1}#1#{}", + } + }, + j_paperback_shooting_star = { + name = "Estrella Fugaz", + text = { + "Anotar {V:1}#1#{} tiene", + "{C:green}#2# en #3#{} de crear una", + "carta {C:planet}Planeta{} de la", + "{C:attention}mano jugada", + } + }, + j_paperback_black_star = { + name = "Estrella Negra", + text = { + "Anotar cartas de", + "{C:paperback_dark_suit}palo oscuro{} las", + "convierte en {V:1}#1#", + } + }, + j_paperback_high_speed_rail = { + name = "Ferrocarril de alta velocidad", + text = { + "{C:blue}Gana{} Multi igual a el {C:money}coste{}", + "de {C:attention}Comodines{} {C:blue}comprados{}", + "{C:red}Pierde{} Multi igual a el {C:money}valor{}", + "{C:money}de venta{} de {C:attention}Comodines{} {C:red}vendidos{}", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi)" + } + }, + j_paperback_small_scale_onshore_wind = { + name = "Energía eólica terrestre", + text = { + "Gana {C:mult}+#1#{} Multi cada vez que", + "descartas exactamente {C:attention}#2#{} cartas", + "{C:inactive}(Actualmente {C:mult}+#3# {C:inactive}Multi)" + } + }, + j_paperback_aurora_borealis = { + name = "Aurora Boreal", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por cada", + "Comodín con {C:attention}Edción{} que poseas", + "{s:0.9,C:dark_edition}Negativos{s:0.9,C:inactive} excluidos{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + } + }, + j_paperback_joke_master = { + name = "Maestro de la Comedia", + text = { + "Gana {C:mult}+#1#{} Multi si la mano", + "jugada {C:attention}#2#{}", + "{s:0.8}La mano cambia cada ronda", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)" + } + }, + j_paperback_ultra_rare = { + name = "Ultra Raro", + text = { + "Al seleccionar una {C:attention}Ciega{}, crea", + "al azar un {C:attention}Comodín{} {C:blue}Común{},", + "{C:green}Inusual{} y {C:red}Raro{} que son", + "{C:paperback_temporary}Temporales{} y {C:dark_edition}Negativos", + "sin {C:money}valor de venta{}" + } + }, + j_paperback_manilla_folder = { + name = "Folder Manila", + text = { + "Gana {C:money}$#1#{} al terminar", + "la ronda por cada {C:attention}Clip{}", + "{C:attention}único{} en tu baraja", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + j_paperback_clippy = { + name = "Clippy", + text = { + "Añade un {C:attention}Clip{} a una", + "carta en la baraja al", + "seleccionar una {C:attention}Ciega{}", + } + }, + j_paperback_jimbos_joyous_joker_jamboree = { + name = "Jimbo's Joyous Joker Jamboree", + text = { + "Crear una carta de {C:paperback_minor_arcana}Arcana menor{}", + "al azar cada {C:attention}#1#{C:inactive} [#2#]{} cartas jugadas", + }, + unlock = { + "Have {C:attention}#1#{} or more", + "{C:attention}suits{} in", + "your deck" + } + }, + j_paperback_the_normal_joker = { + name = "El Comodín Normal", + text = { + "Reactiva todos los", + "Comodines {C:blue}Comunes{C:attention}" + } + }, + j_paperback_jimbos_inferno = { + name = "El infierno de Jimbo", + text = { + "Las cartas de {C:paperback_dark_suit}palos oscuro{} anotadas", + "otorgan {C:mult}+#1#{} Multi por cada carta de", + "{C:paperback_dark_suit}palo oscuro{} {C:attention}en mano{}", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi){}", + } + }, + j_paperback_tome = { + name = "Tomo de Cartas", + text = { + "{C:attention}+#1#{} Ranura de Consumibles", + "por cada {C:attention}rareza de comodín{}", + "que poseas", + "{C:inactive}(Actualmente {C:attention}+#2#{C:inactive} Slot#3#){}", + } + }, + j_paperback_better_call_jimbo = { + name = "Mejor llama a Jimbo", + text = { + "{X:mult,C:white}X#1#{} Multi por", + "cada {C:money}$#2#{} poseidos.", + "No ganas {C:money}interes{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#3#{C:inactive} Multi)" + } + }, + j_paperback_touch_tone_joker = { + name = "Comodín Touch Tone", + text = { + "Al abrir paquetes de {C:attention}Consumibles{},", + "obtén la carta del {C:attention}extremo izquierdo{}", + "{C:green}gratis{} y se agrega a tus consumibles", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_joker_cd_i = { + name = 'Comodín CD-i', + text = { + "{C:green}#1# in #2#{} de crear una", + "carta de {C:planet}Planeta{} si juegas", + "exactamente {C:attention}#3#{} cartas", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_determination = { + name = 'Determinación', + text = { + "Previene la muerte, y después", + "{C:attention}#1#{} Apuesta y {C:attention}#1#{} al tamaño de mano", + "{C:red}Se destruye al activarse" + } + }, + j_paperback_blue_marble = { + name = "Mármol Azul", + text = { + "Gana {C:mult}+#1#{} Multi al usar una", + "carta de {C:planet}Planeta{}", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + } + }, + j_paperback_boundary_of_death = { + name = "Umbral de la Muerte", + text = { + "Cada {C:attention}#1#{} tiene una", + "prob. de {C:green}#2# en #3#{} de otorgar", + "adicionalmente {C:red}+#4#{} Multi" + } + }, + j_paperback_festive_joker = { + name = "Comodín Festivo", + text = { + "Las {C:attention}Cartas Envueltas{}", + "tienen una prob. de {C:green}#2# en #3#", + "de crear un {C:attention}Consumable{}", + "al azar cuando anotan", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_collector = { + name = "Comodín Coleccionista", + text = { + "Ganas {C:money}$#1#{} al final de la ronda", + "por cada {C:attention}#2#{}", + "en tu baraja", + "{C:inactive}(Actualmente {C:money}$#3#{C:inactive})" + } + }, + j_paperback_spotty_joker = { + name = "Comodín de puntitos", + text = { + "Gana {X:mult,C:white}X#1#{} Multi", + "al {C:attention}anotar{} una", + "{C:attention}#2#{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#4#{}{C:inactive} Multi)" + } + }, + j_paperback_sommelier = { + name = "Comodín Sumiller", + text = { + "Si el {C:attention}primer{} {C:red}descarte{}", + "de la ronda contiene", + "una {C:attention}#1#{},", + "gana un {C:attention}#1#{}", + "sello al azar", + } + }, + j_paperback_medic = { + name = "Comodín Médico", + text = { + "Las {C:attention}Cartas Vendadas{} reactivan", + "otras cartas una vez más", + } + }, + j_paperback_matcha = { + name = "Té de Matcha", + text = { + "Gana {C:chips}+#1#{} Fichas al", + "anotar cartas, prob. de ", + "{C:green}#2# en #3#{} de consumirse", + "al {C:red}descartar", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)" + } + }, + j_paperback_you_are_a_fool = { + name = "¡Eres un tonto!", + text = { + "Si la mano anota {C:attention}#1# o más", + "cartas de {C:attention}figura{}, convierte", + "{C:attention}todas{} las cartas {C:attention}en mano{} en", + "la carta del {C:attention}extremo izquierdo{}", + "se {S:1.1,C:red,E:2}autodestruye{} al activarse", + } + }, + j_paperback_kintsugi_joker = { + name = "Comodín Kintsugi", + text = { + "Aumenta el valor máximo que", + "las {C:attention}Cartas de cerámica{}", + "pueden otorgar en {C:money}$#1#{} si una", + "{C:attention}Cartas de cerámica{} es destruida", + "{C:inactive}(Incremento actual: {C:money}$#3#{C:inactive})", + } + }, + j_paperback_ddakji = { + name = "Ddakji", + text = { + "{C:green}#1# de cada #2#{} cartas salen", + "boca abajo, anotar una carta", + "{C:attention}boca arriba{} y una {C:attention}boca abajo{}", + "crea un {C:attention}consumible{} a azar", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_weather_radio = { + name = "Radio del Clima", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si la {C:attention}mano anotada{}", + "contiene {C:attention}#2#{}.", + "Si tienes {X:mult,C:white}X#3#{} Multi o más,", + "desactiva la {C:attention}Ciega Jefe{}", + "a cambio de perder {X:mult,C:white}X#4#{} Multi", + "{C:inactive}(Actualmente {X:mult,C:white}X#5#{C:inactive} Multi)", + "{s:0.75}La mano a jugar cambia al final de cada ronda" + } + }, + j_paperback_power_surge = { + name = "Sobrecarga", + text = { + "Los {C:attention}#1#{} otorgan {X:mult,C:white}X#2#{}", + "Multi al anotar.", + "Probabilidad {C:green}#3# en #4#{}", + "de {C:red}destruir{} una carta", + "{C:attention}en mano{}", + } + }, + j_paperback_time_regression_mix = { + name = "Mezcla de regresión temporal", + text = { + "Gana {C:mult}+#2#{} Multi si la mano {C:attention}anota{}", + "al menos {C:attention}#1#{} palos diferentes,", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)", + } + }, + j_paperback_bismuth = { + name = "Bismuto", + text = { + "Anotar {V:1}#1#{} o {V:2}#2#{} les", + "otorga una prob. de {C:green}#3# en #4#{} de", + "obtener edición {C:dark_edition}Laminada{},", + "{C:dark_edition}Holografica{} o {C:dark_edition}Policroma{}", + } + }, + j_paperback_deadringer = { + name = "Deadringer", + text = { + "Reactiva los {C:attention}#1#es{} y {C:attention}#2#{} anotados", + "una vez y dos veces los {C:attention}#3#{}" + } + }, + j_paperback_penumbra_phantasm = { + name = "Fantasma de la Penumbra", + text = { + "Gana {C:red}+#1#{} Multi cada vez que una", + "carta {C:attention}sin categoría{} es {C:attention}anotada", + "{C:inactive}(Actualmente {C:red}+#2#{C:inactive} Multi)" + } + }, + j_paperback_ncj = { + name = "NoCopyrightJokers", + text = { + "Otorga {C:chips}+#1#{} fichas por cada", + "{C:money}dólar{} en el {C:attention}valor de venta", + "de todos los comodines", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)" + } + }, + j_paperback_full_moon = { + name = "Luna llena", + text = { + "Las cartas de {C:planet}Planeta{}", + "tienen una prob. {C:green}#1# en #2#{} de", + "subir de nivel la mano {C:attention}de nuevo", + } + }, + j_paperback_sake_cup = { + name = "Copa de Sake", + text = { + "Después de jugar una mano, los {C:attention}#1#{}", + "{C:attention}en mano{} tienen una prob. de", + "{C:green}#2# en #3#{} de crear la carta de", + "{C:planet}Planeta{} de la mano {C:attention}jugada", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_resurrections = { + name = "Resurrecciones", + text = { + "{C:green}#1# en #2#{} de {C:attention}devolver{} {C:attention}Comodines{}", + "vendidos y crear una {C:attention}copia{}", + "{C:dark_edition}Negativa{} con {C:money}-$#3#{} de valor", + "de venta", + "{s:0.8}La prob. aumenta en {s:0.8,C:green}#4#{s:0.8} si fracasa", + "{s:0.8}y se {s:0.8,C:red,E:2}autodestruye{}{s:0.8} al activarse", + } + }, + j_paperback_book_of_vengeance = { + name = "Libro de venganza", + text = { + "Al derrotar la {C:attention}Ciega Jefe{}:", + "Se {C:red}destruye{} y al {C:attention}comodín{} a su izquierda", + "y luego copia el {C:attention}comodín{} de la derecha" + } + }, + j_paperback_b_soda = { + name = "B-Soda", + text = { + "Al seleccionar la {C:attention}Ciega{},", + "gana {C:blue}+#1#{} mano, se", + "consume si la {C:attention}Ciega{}", + "es derrotada con", + "{C:blue}0{} manos restantes", + } + }, + j_paperback_angel_investor = { + name = "Angel Inversionista", + text = { + "Saltar una {C:attention}Ciega{} o derrotar", + "una {C:attention}Ciega Jefe{} otorga", + "una {C:money}etiqueta de angel", + "{C:money}inversionista" + } + }, + j_paperback_marble_soda = { + name = "Ramune", -- I got bullied bc I didnt know that the Soa was a real soda + text = { + "Las {C:attention}Cartas de Vidrio{} otorgan", + "{X:mult,C:white}X#2#{} Multi adicional al anotar", + "Se consume si {C:attention}#3#{} carta#4#", + "anotada#4# se {C:attention}destruyen{}" + -- Would be cool to have a way to get rid of the -n- in "destruyen" in the same way as with the -s-, god love language barriers + } + }, + j_paperback_vacation_juice = { + name = "Bebida Vacacional", + text = { + "La primera vez que derrotes", + "una {C:attention}Ciega{}, no avanzas a la", + "siguiente {C:attention}Ciega{}.", + "{s:0.8} Se consume al activarse {C:attention,s:0.8}#1#{} {s:0.8}veces", + } + }, + j_paperback_black_forest_cake = { + name = "Torta Negra", + text = { + "Gana {C:mult}+#2#{} Multi por cada", + "{C:attention}Ciega{} derrotada.", + "Se {C:red}Consume{} si {C:money}vendes{} o", + "{C:attention}destruyes{} una carta o comodín", + "{C:inactive}(Actualmen {C:mult}+#1#{C:inactive} Multi)" + } + }, + j_paperback_ice_cube = { + name = "Cubo de Hielo", + text = { + "Otorga {C:blue}+#1#{} mano adicional al seleccionar", + "la {C:attention}Ciega{} y se derrite si", + "la puntuación se prende en {C:attention}llamas", + } + }, + j_paperback_champagne = { + name = "Champaña", + text = { + "Durante la {C:attention}Ciega Jefe{}, las cartas", + "anotadas otorgan {C:money}$#1#{} y el {C:attention}doble{}", + "para las cartas con {C:attention}sello", + "{C:attention}Se consume{} en {C:attention}#2#{} rondas" + } + }, + j_paperback_pocket_pair = { + name = "Par de bolsillo", + text = { + "Gana {C:money}$#1#{} por cada {C:attention}#2#{} en tu", + "mano al comenzar la ronda" + } + }, + j_paperback_the_quiet = { + name = "El Silencio", + text = { + "{X:mult,C:white}X#1#{} Multi por cada", + "carta debajo de {C:attention}#2#{}", + "en tu baraja", + "{C:inactive,s:0.8}(Actualmente {X:mult,C:white,,s:0.8}X#3#{C:inactive,,s:0.8} Multi)" + } + }, + j_paperback_alert = { + name = "Alerta", + text = { + "Si la {C:attention}mano jugada{} es una sola", + "{C:attention}carta de figura{}, destruyela", + "{C:inactive}(#1#/#2#)?" + } + }, + j_paperback_legacy = { + name = "Legado", + text = { + "Al {S:1.1,C:red,E:2}destruir{} cartas sin {C:attention}Mejoras{}", + "gana sus {C:chips}Fichas{} como {C:mult}Multi{}", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi)" + } + }, + j_paperback_telamon = { + name = "Telamón", + text = { + "Si la {C:attention}mano final{} contiene", + "un {C:attention}#1#{}, crea al azar una", + "carta de {C:paperback_minor_arcana}Arcana menor{}", + "de {C:spades}Espadas{}", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_backpack = { + name = "Mochila", + text = { + "La {C:money}Tienda{} tiene un", + "{C:attention}Paquete de Bufón{} gratis" + } + }, + j_paperback_roulette = { + name = "Ruleta de Casino", + text = { + -- error: ronda -> hand? -- My bad, did not read properly, Marffe + "Cada mano, se escoge al azar una", + "{C:attention}categoría{} y {C:attention}palo{}. Al anotar:", + "{C:money}$#1#{} si acierta el palo,", + "{C:money}$#2#{} si acierta la categoría,", + "{C:money}$#3#{} si aciertas ambos", + } + }, + j_paperback_mexican_train = { + name = "Tren Mexicano", + text = { + "Las {C:attention}Cartas de Dominó{} anotadas", + "otorgan {C:money}$#2#{} por cada", + "{C:attention}#1#{} anotada", + "{C:inactive}(Actualmente {C:money}$#3#{C:inactive})" + } + }, + j_paperback_chocolate_joker = { + name = "Comodín de Chocolate", + text = { + "Gana {X:chips,C:white}X#1#{} Fichas por cada", + "{C:attention}Comodín{} en tu posesión", + "{C:inactive}(Actualmente {X:chips,C:white}X#2#{C:inactive} Fichas)" + } + }, + j_paperback_mandela_effect = { + name = "Efecto Mandela", + text = { + "Otorga una {C:attention}mejora{} al azar a la", + "primera {C:attention}carta de figura{} anotada" + } + }, + j_paperback_jester_of_nihil = { + name = "Bufón de Nihil", + text = { + "{C:attention}Debilita{} el último palo", + "{C:attention}anotado{} y otorga {C:mult}+#1#{}", + "Multi por carta {C:attention}debilitada{}", + "en tu baraja", + "{C:inactive,s:0.8}(Actualmente {V:1,s:0.8}#2#{C:inactive,s:0.8} and {C:mult,s:0.8}+#3#{C:inactive,s:0.8} Multi)", + } + }, + j_paperback_forgery = { + name = "Falsificación", + text = { + "Copia un {C:attention}Comodín{} al azar,", + "si ortoga {X:mult,C:white}XMulti{}, {C:mult}+Multi{}", + "o {C:chips}Fichas{}, multiplica estos", + "valores entre {X:attention,C:white}X#1#{} y {X:attention,C:white}X#2#", + "{C:inactive,s:0.8}Cambia tras jugar una mano{}", + "{C:inactive,s:0.8}(Actualmente {C:attention,s:0.8}#3#{C:inactive,s:0.8} {X:attention,C:white,s:0.8}X#4#{C:inactive,s:0.8})" + } + }, + j_paperback_the_world = { + name = "El Mundo", + text = { + "Todas las {C:blue}manos{} y {C:red}descartes{} se", + "consideran como el {C:attention}primer{} y", + "{C:attention}último{} de la ronda" + } + }, + j_paperback_epic_sauce = { + name = "Salsa Épica", + text = { + "{X:mult,C:white}X#1#{} Multi.", + "destruye un {C:attention}Comodín{}", + "al azar si ya jugaste", + "la {C:attention}primera mano{}", + "de la ronda", + } + }, + j_paperback_find_jimbo = { + name = "Encuentra a Jimbo", + text = { + "Cada {C:attention}#1#{} de {V:1}#2#{}", + "anotado otorga {C:money}$#3#{}", + "{s:0.8}La carta cambia cada ronda" + }, + }, + j_paperback_joker_crossing = { + name = "Jimbo Crossing", + text = { + "Las cartas {C:attention}Mejoradas{}", + "tienen una prob. de {C:green}#1# en #2#{}", + "de reactivarse" + } + }, + j_paperback_jimbocards = { + name = "La Jimbocarta", + text = { + "Al Obtenerse {C:red}destruye{} todos tus comodines.", + "Crea {C:attention}#1#{} comodines {C:dark_edition}Negativos{} al azar.", + "Todos los precios se reducen en {C:money}$#2#{}.", + "Si no ganas la {C:attention}Apuesta{} en {C:attention}#3#{} manos", + "{S:1.1,C:red,E:2}PIERDES{}", + "{C:inactive}(Te quedan {C:attention}#4#{C:inactive} manos)", + } + }, + j_paperback_jimbocards_collection = { + name = "La Jimbocarta", + text = { + "Al Obtenerse {C:red}destruye{} todos tus comodines.", + "Crea {C:attention}#1#{} comodines {C:dark_edition}Negativos{} al azar.", + "Todos los precios se reducen en {C:money}$#2#{}.", + "Si no ganas la {C:attention}Apuesta{} en {C:attention}#3#{} manos", + "{S:1.1,C:red,E:2}PIERDES{}", + "{C:inactive}(Te quedan {C:attention}#4#{C:inactive} manos)", + "Siempre aparece {C:paperback_eternal}Eterno", + } + }, + j_paperback_forlorn = { + name = "Abandonado", + text = { + "Si la {C:attention}mano jugada{} sólo contiene", + "{V:1}Espadas{}, destruye una carta", + "{C:attention}en mano{} al azar", + }, + }, + j_paperback_protocol = { + name = "Protocolo", + text = { + "Los {C:attention}paquetes potenciadores{}", + "tienen {C:attention}+#1#{} carta adicional" + } + }, + j_paperback_cream_liqueur = { + name = "Licor de crema", + text = { + "Las {C:attention}etiquetas{} otorgan {C:money}$#1#{}", + "cuando se activan.", + "Se consume en {C:attention}#2#{} rondas", + "{C:inactive,s:0.8}(Se reinicia al obtener una {C:attention,s:0.8}Etiqueta{C:inactive,s:0.8})", + } + }, + j_paperback_coffee = { + name = "Café", + text = { + "{C:attention}+#1#{} tamaño de mano, aumenta en {C:attention}#2#{}", + "cada vez que saltas una {C:attention}ciega{}, prob. de", + "{C:green}#3# en #4#{} de ser consumido al seleccionar la", + "{C:attention}Ciega Pequeña{} o la {C:attention}Ciega Grande{}", + } + }, + j_paperback_basic_energy = { + name = "Energía de Comodín Básica", + text = { + "Usar {C:attention}Consumibles{} tiene una", + "prob. de {C:green}#1# en #2#{} de crear una copia", + "{C:inactive}(No puedes copiar una copia)", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_big_misser = { + name = "Big Misser", + text = { + "{X:mult,C:white}X#1#{} Multi por cada", + "espacio de consumible vacío", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{}{C:inactive} Multi)" + } + }, + j_paperback_fodder = { + name = "Prescindible", + text = { + "Vende esta carta para {C:paperback_ego_gift}Corroer{}", + "el {C:paperback_ego_gift}Regalo E.G.O.{} del extremo derecho", + } + }, + j_paperback_the_strongest = { + name = "El más Fuerte", + text = { + "Gana {X:mult,C:white}X#1#{} Multi cuando", + "un {C:paperback_ego_gift}Regalo E.G.O.{} es", + "vendido o se corroe", + "{C:paperback_ego_gift}Corroe{} un {C:paperback_ego_gift}Regalo E.G.O.", + "al derrotar la {C:attention}Ciega Jefe", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + } + }, + j_paperback_freezer = { + name = "Heladera", + text = { + "Obtén un {C:attention}Comodín de Comida{} {C:dark_edition}Negativo{}", + "Después de ganarle a la {C:attention}Ciega Jefe{}", + }, + unlock = { + "Acquire a {C:dark_edition}Negative{}", + "{S:1.1,C:attention,E:2}Food Joker" + } + }, + j_paperback_everything_must_go = { + name = "¡Liquidación!", + text = { + "La Tienda tiene", + "{C:attention}#1#{} {C:attention}Vale{} adicional" + } + }, + j_paperback_card_sleeve = { + name = "Funda de Carta", + text = { + "Vende esto para hacer que el", + "{C:attention}Comodín{} de la derecha sea {C:attention}Eterno{}", + } + }, + j_paperback_percussion_ensemble = { + name = "Sesión de percusión", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por", + "cada {C:attention}Mejora{} única en tu", + "Baraja", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi){}", + } + }, + j_paperback_its_tv_time = { + name = "¡Es hora de la TV!!", + text = { + "Las {C:paperback_stars}Estrellas{} se consideran", + "{C:attention}Cartas adicionales{} y", + "las {C:attention}Cartas adicionales{}", + "se consideran {C:paperback_stars}Estrellas{}", + }, + }, + j_paperback_da_capo = { + name = "Da Capo", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi y {C:attention}debilita todos menos un", + "{C:attention}palo{} cada mano en el sigiente orden:", -- The line below goes crazy XD + "{C:clubs,s:0.8}Tréboles{}{s:0.8},{} {C:spades,s:0.8}Espadas{}{s:0.8},{} {C:diamonds,s:0.8}Diamantes{}{s:0.8},{} {C:hearts,s:0.8}Corazones{}{s:0.8},{} {C:inactive,s:0.8}Ninguno{}", + "{C:inactive}(Debilitando: {V:1}#2#{C:inactive}){}", + } + }, + j_paperback_complete_breakfast = { + name = "Desayuno completo", + text = { + "{C:mult}+#1#{} Multi y {C:chips}+#2#{} Fichas", + "{C:green}#3# en #4#{} de ser comido al", + "final de cada mano jugada", + "las posibilidades aumentan", + "en {C:green}#5#{} por cada mano jugada", + }, + }, + j_paperback_emergency_broadcast = { + name = "Transmisión de emergencia", + text = { + "Los {C:attention}5{} y {C:attention}8{} otorgan", + "{C:mult}+#1#{} Multi y {C:chips}+#2#{} Fichas", + }, + }, + j_paperback_moribund = { + name = "Comodín Moribundo", + text = { + "Gana {C:mult}+#1#{} Multi si derrotas la", + "{C:attention}ciega{} con {C:attention}0 {}{C:blue}manos{} restantes.", + "{C:attention}Duplica{} su {C:mult}Multi{} si", + "no vences la {C:attention}Ciega{}", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)", + }, + }, + j_paperback_crispy_taco = { + name = "Taco Crujiente", + text = { + "{X:chips,C:white}X#1#{} Fichas, prob. de", + "{C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_furioso = { + name = "Furioso", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por cada", + "{C:attention}categoria{} anotada. Se reinicia", + "al derrotar una {C:attention}Ciega Jefe", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)", + "{C:inactive}(Categrias jugadas:{C:attention}#3#{C:inactive})", + }, + }, + j_paperback_soft_taco = { + name = "Taco Suave", + text = { + "{X:mult,C:white}X#1#{} Multi, prob. de", + "{C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_charred_marshmallow = { + name = "Malvavisco Chamuscado", + text = { + "Las {C:spades}Espadas{} anotadas otorgan {C:mult}+#1#{}", + "de Multi, {C:green}#2# en #3#{} de derretirse", + "al final de la ronda", + }, + }, + j_paperback_joker_cookie = { + name = "Comodín Galleta", + text = { + "Gana {C:money}$#1#{} al final de la ronda el", + "pago aumenta en {C:money}$#2#{} al entrar", + "a la tienda, prob. de {C:green}#4# en #3#{}", + "de ser comido al final de la ronda", + }, + }, + j_paperback_pop_stick = { + name = "Palito de Chupeta", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_pool_table = { + name = "Mesa de Billar", + text = { + "Si la primera mano no anota", + "{C:attention}cartas de figuras{}, crea", + "una carta de {C:planet}Planeta{} de la", + "{C:attention}mano jugada", + "{C:inactive}(Debe haber espacio)", + }, + }, + j_paperback_bicycle = { + name = "Comodín en Bicicleta", + text = { + "Las {C:attention}Cartas Vesátiles{} otorgan", + "{C:mult}Multi{} igual a sus {C:chips}Fichas{}", + }, + }, + j_paperback_stamp = { + name = "Estampilla", + text = { + "Prob. de {C:green}#1# en #2#{} de", + "ganar {C:chips}+#3#{} fichas cuando", + "cualquier {C:attention}sello{} anota", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)", + }, + }, + j_paperback_sticky_stick = { + name = "Palito Pegajoso", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_shopping_center = { + name = "Centro Comercial", + text = { + "La {C:money}Tienda{} tiene una", + "{C:attention}Ranura{} adicional", + }, + }, + j_paperback_tutor = { + name = "Tutor", + text = { + "Las {C:attention}Cartas de Números{}", + "{C:attention}duplican{} sus {C:chips}Fichas{} totales", + }, + }, + j_paperback_ghost_cola = { + name = "Refresco Fantasma", + text = { + "Vende este Comodín para", + "crear una {C:attention}#1#{}", + "y una carta {C:spectral}Espectral{}", + "{C:inactive}(Debe haber espacio)", + }, + }, + j_paperback_river = { + name = "Un Río", + text = { + "Jugar una mano con {C:attention}5 cartas{} anotadas", + "te otorga la mitad de las {C:chips}fichas{}", + "de la carta más baja como {C:money}dinero", + "{C:inactive}(Máximo {C:money}$#1#{C:inactive})", + }, + }, + j_paperback_solemn_lament = { + name = "Lamento Solemne", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si la mano", + "contiene {C:paperback_dark_suit}Palos oscuros{}", + "y {C:paperback_light_suit}Palos claros{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_hole_in_one = { + name = "Hoyo en Uno", + text = { + "Si la primera {C:blue}mano{} de la ronda le gana", + "a la {C:attention}Ciega{}, duplica el {C:attention}valor de venta{}", + "de todas los {C:attention}Comodines{} y {C:attention}Consumibles{}", + "{C:inactive}(Máximo {C:money}$#1#{C:inactive} por ronda)", + "Al ser vendido todos los", + "{C:attention}Comodines{} y {C:attention}Consumibles{}", + "tendrán un valor de {C:money}$0" + }, + }, + j_paperback_mismatched_sock = { + name = "Media inpar", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si", + "{C:red}descartas{} solamente", + "{C:attention}1{} carta", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_wild_plus_four = { + name = "+4 Salvaje", + text = { + "{C:attention}+#1#{} al tamaño", + "de la mano", + } + }, + j_paperback_quick_fix = { + name = "Arreglo rápido", + text = { + "{C:attention}+#1#{} tamaño de mano, prob.", + "de {C:green}#2# en #3#{} de que se rompa", + "al final de la ronda..." + }, + }, + j_paperback_skydiver = { + name = "Paracaidista", + text = { + "{C:white,X:mult}X#1#{} Multi si {C:attention}todas las cartas{} anotadas", + "son {C:attention}menores o iguales{} a la carta de", + "{C:attention}menor rango{} anotada esta ronda", + "{C:inactive}(Se actualiza despues de cada mano)", + "{C:inactive}(Actualmente: {C:attention}#2#{C:inactive})", + }, + }, + j_paperback_surfer = { + name = "Surfista", + text = { + "Gana {C:chips}+#1#{} Fichas por", + "cada {C:attention}#3#{} en mano al", + "final de la {C:attention}ronda{}", + "{C:inactive}(Actualmente {C:chips}+#4#{C:inactive} Fichas)" + } + }, + j_paperback_blue_bonnets = { + name = "Lupinos azules", + text = { + "Los {C:clubs}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:clubs}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_great_wave = { + name = "La Gran Ola", + text = { + "Reactiva la carta del {C:attention}extremo derecho{}", + "por cada {C:attention}carta anotada{}", + }, + }, + j_paperback_caramel_apple = { + name = "Manzana de Caramelo", + text = { + "Los {C:clubs}Tréboles{} anotados otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de derretirse", + "al final de la ronda", + }, + }, + j_paperback_nachos = { + name = "Nachos", + text = { + "{X:chips,C:white}X#1#{} Fichas,", + "pierde {X:chips,C:white}X#2#{} Fichas por", + "cada {C:attention}carta{} descartada", + }, + }, + j_paperback_trans_flag = { + name = "Bandera Trans", + text = { + "Otorga {C:red}+#1#{} Multi por", + "cada {C:attention}descarte{}", + "{C:inactive}(Actualmente {C:red}+#2#{} {C:inactive}Multi)" + }, + }, + j_paperback_pride_flag_spectrums = { + name = "Bandera del Orgullo", + text = { + "Gana {C:chips}+#1#{} Fichas si la mano", + "contiene un {C:attention}Espectro{}, se", + "reinicia si juegas una {C:attention}Escalera{}", -- The straight joke don't work in Spanish, fix pls + "{C:inactive}(Actualmente {C:chips}+#2#{} {C:inactive}Fichas)" + }, + }, + j_paperback_pride_flag_no_spectrums = { + name = "Bandera del Orgullo", + text = { + "Gana {C:mult}+#1#{} Multi si la mano", + "contiene {C:attention}tres{} palos diferentes", + "{C:inactive}(Actualmente {C:mult}+#2#{} {C:inactive}Multi)", + }, + }, + j_paperback_sacrificial_lamb = { + name = "Cordero de sacrificio", + text = { + "Gana {C:mult}+#1#{} Multi por cada", + "Carta o Comodín {C:attention}destruido", + "{C:inactive}(Actualmente {C:mult}+#2# {C:inactive}Multi)", + }, + }, + j_paperback_autumn_leaves = { + name = "Hojas de Otoño", + text = { + "Los {C:diamonds}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:diamonds}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_wild_prize = { + name = "[[PREMIO SALVAJE!1!]]", + text = { + "Cada {C:attention}Carta versátil{} tiene una prob. de", + "{C:green}#1# en #2#{} de {C:attention}reactivarse{} y una prob.", + "{C:green}#3# en #4#{} de ganar {C:money}#5#{} o {C:money}$#6#{} al anotar", + }, + }, + j_paperback_wish_you_were_here = { + name = "Recuerdo Vacacional", + text = { + "Otorga {C:mult}+Multi{} igual a", + "{C:mult}x#1#{} su {C:attention}valor de venta{}.", + "Gana {C:money}$#2#{} de {C:money}valor de venta{}", + "al final de la ronda", + "{C:inactive}(Actualmente {C:mult}+#3# {C:inactive}Multi){}", + }, + }, + j_paperback_calling_card = { + name = "Tarjeta de Jefe", + text = { + "Gana {X:red,C:white}X#1#{} Multi cada vez", + "que derrotas una {C:attention}Ciega Jefe{}", + "o activas su {C:attention}efecto{}", + "{C:inactive}(Actualmente {}{X:red,C:white}X#2#{}{C:inactive} Multi){}", + }, + }, + j_paperback_greeting_card = { + name = "Comodín Navideño", + text = { + "Gana {C:money}$#1#{} al {C:attention}valor de venta{} cuando", + "una {C:attention}#2#{} anota", + }, + }, + j_paperback_subterfuge = { + name = "Subterfugio", + text = { + "Destroye las cartas de la", + "{C:attention}primera{} {C:attention}mano{} cada ronda" + }, + }, + j_paperback_triple_moon_goddess = { + name = "Diosa de la Triple Luna", + text = { + "Si la mano anota una {C:attention}Tercia{}:", + "Prob. de {C:green}#1# en #2#{} de crear una carta {C:planet}Planeta{}.", + "Prob. de {C:green}#3# en #4#{} de crear una carta del {C:purple}Tarot{}", + "{C:inactive}(Debe haber espacio)" + }, + }, + j_paperback_triple_moon_goddess_minor_arcana = { + name = "Diosa de la Triple Luna", + text = { + "Si la mano anota una {C:attention}Tercia{}:", + "Prob. de {C:green}#1# en #2#{} de crear una carta del {C:purple}Tarot{}.", + "Prob. de {C:green}#3# en #4#{} crear una carta {C:paperback_minor_arcana}Arcana menor{}.", + "{C:inactive}(Debe haber espacio)" + }, + }, + j_paperback_derecho = { + name = "Derecho", + text = { + "Gana {X:mult,C:white}X#1#{} Multi si la mano", + "no anota cartas de {C:paperback_light_suit}palo claro", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_the_sun_rises = { + name = "El Sol se Levanta", + text = { + "Las cartas sólo tienen {C:chips}#1#{} ficha", + "Los {C:paperback_light_suit}palos claros{} ganan {C:chips}+#3#{} Ficha", + "por cada {C:paperback_light_suit}palo claro{} anotado", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} fichas)", + }, + }, + j_paperback_jestrica = { + name = "Jestrica", + text = { + "Gana {C:mult}+#1#{} Multi al anotar", + "un {C:attention}8{}. Se reinicia si", + "no anotas un {C:attention}8{}", + -- TODO might want to indicate if an 8 hasn't been scored + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_grand_strategy = { + name = "Estrategia Maestra", + text = { + "{X:mult,C:white}X#1#{} Multi si tienes", + "{C:attention}#2#{} o más {C:attention}mejoras{}", + "únicas en tu baraja", + "{C:inactive}(Actualmente {C:attention}#3#{C:inactive})", + }, + }, + j_paperback_moving_out = { + name = "Moving Out", + text = { + "Gana {C:mult}+#1#{} Multi si tu", + "mano {C:attention}ganadora{} no es", + "tu mano más jugada", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)", + }, + }, + j_paperback_ready_to_fly = { + name = "Listo para volar", + text = { + "Gana {X:chips,C:white}X#2#{} Fichas cada vez que", + "un comodín adjacente se {C:attention}activa", + "{C:inactive}(Actualmente {X:chips,C:white}X#1#{C:inactive} Fichas)", + }, + }, + j_paperback_solar_system = { + name = "Sistema Solar", + text = { + "Gana {X:mult,C:white}X#1#{} Multi por cada {C:planet}nivel{}", + "que {C:attention}compartan{} los 9 {C:planet}Planetas{} base", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)", + }, + }, + j_paperback_reference_card = { + name = "Tarjeta de Referencia", + text = { + "Gana {X:mult,C:white}X#1#{} Multi cada vez que", + "hayas jugado las {C:attention}9 manos base{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)", + }, + }, + j_paperback_dreamsicle = { + name = "Helado de Naranja", + text = { + "Los {C:diamonds}Diamantes{} anotados otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de derretirse", + "al final de la ronda", + }, + }, + j_paperback_jimbo_adventure = { + name = "La Aventura de Jimbo", + text = { + "Saltar {C:attention}Ciegas{} crea", + "{C:attention}Etiquetas{} al azar", + }, + }, + j_paperback_union_card = { + name = "Tarjeta de la Unión", + text = { + "Otorga {X:mult,C:white}XMulti{} igual a la cantidad", + "de cartas de {C:paperback_light_suit}Palo claro{} anotadas.", + "Bloquea el {C:attention}valor de venta{} de todo", + "a {C:money}$0{} hasta ser vendido", + }, + }, + j_paperback_cherry_blossoms = { + name = "Flores de Cerezo", + text = { + "Los {C:hearts}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:hearts}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_paranoia = { + name = "Paranoia", + text = { + "Los {C:paperback_light_suit}Palos claros{} otorgan {C:mult}+#1#{} Multi", + "al {C:attention}anotar{} por cada carta de", + "{C:paperback_dark_suit}Palo oscuro{} {C:attention}destruida{}", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_unholy_alliance = { + name = "Alianza impía", + text = { + "Gana {C:chips}+#1#{} Fichas por cada", + "Carta o Comodín {C:attention}destruido", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)", + }, + }, + j_paperback_summoning_circle = { + name = "Círculo de Invocación", + text = { + "Si la mano jugada contiene", + "una {C:attention}#1#{}, crea una copia", + "de un {C:attention}consumible{} al azar", + "{C:inactive}(Debe haber espacio){}" + } + }, + j_paperback_the_sun = { + name = "El Sol", + text = { + "Si la mano no contiene", + "{C:paperback_dark_suit}Palos oscuros{} gana {C:mult}+#1#{} Multi,", + "pierde {C:mult}+#1#{} Multi por cada", + "{C:paperback_dark_suit}Palo oscuro{} anotado", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)", + }, + }, + j_paperback_pointy_stick = { + name = "Palito Puntiagudo", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_prince_of_darkness = { + name = "Principe de la Oscuridad", + text = { + "Si la mano anota un {C:hearts}Corazón{} y otros", + "{C:attention}#1#{} palos diferentes, este comodín otorga", + "{X:mult,C:white}X#2#{} Multi y en las siguientes {C:blue}2{} manos", + "{C:inactive}({C:attention}#4#{C:inactive} manos restantes)" + }, + }, + j_paperback_giga_size = { + name = "GIGA TAMAÑO", + text = { + "Gana {X:mult,C:white}X#2#{} Multi por mano", + "jugada en esta {C:attention}Ciega{}", + "{C:inactive}(Actualmente {X:mult,C:white}X#1#{C:inactive} Multi)" + }, + }, + j_paperback_photocopy = { + name = "Fotocopia", + text = { + "Copia la habilidad del comodín", + "del {C:attention}extremo derecho{}" + }, + }, + j_paperback_master_plan = { + name = "Plan Maestro", + text = { + "Copia la habilidad del", + "{C:attention}comodín{} de la izquierda" + }, + }, + j_paperback_popsicle_stick = { + name = "Palito de Helado", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_let_it_happen = { + name = "Let It Happen", + text = { + "{C:purple}Balancea{} el {C:mult}Multi{} y {C:chips}Fichas{}", + "si es la primera vez que usas", + "una mano en esta {C:attention}Apuesta{}", + "{C:inactive}(Manos jugadas:{C:attention}#1#{C:inactive})", + }, + }, + j_paperback_in_case_i_make_it = { + name = "In case I make it", + text = { + "Las {C:attention}Cartas sin categoría{}", + "ganan {C:chips}+#1#{} al anotarse", + }, + }, + j_paperback_evergreens = { + name = "Perennifolios", + text = { + "Las {C:spades}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:spades}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_der_fluschutze = { + name = "Der Fluschütze", + text = { + "Si la {C:attention}primera{} mano de la ronda es", + "una sola {C:attention}carta de figura{} destruyela", + "y gana {X:mult,C:white}X#1#{} Multi", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{} {C:inactive}Multi)" + } + }, + j_paperback_the_wonder_of_you = { + name = "The Wonder of You", + text = { + "Al seleccionar la {C:attention}Ciega Jefe{}", + "crea 2 {C:green}etiquetas{} al azar", + } + }, + j_paperback_inner_peace = { + name = "Paz Interior", + text = { + "{C:attention}+3{} al tamaño de mano", + "hasta que juegues tu", + "{C:attention}primera{} mano" + } + }, + j_paperback_shopkeep = { + name = "Tendero", + text = { + "Gana una {C:attention}Etiqueta de cupón{} cada {C:attention}#1#{} {C:inactive}(#2#/#1#){}", + "ciegas derrotadas, al derrotar la {C:attention}Ciega{} {C:attention}Jefe{}", + "gana una {C:attention}Etiqueta de Vale{}", + }, + }, + j_paperback_cakepop = { + name = "Chupeta de fresa", + text = { + "Los {C:hearts}Corazones{} anotados otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_black_rainbows = { + name = "Arcoiris negro", + text = { + "Las {C:spades}Espadas{} y {C:clubs}Tréboles", + "anotados tienen una prob. de", + "{C:green}#1# en #2#{} de volverse {C:dark_edition}Policroma" + } + }, + j_paperback_meeple = { + name = "Meeple", + text = { + "Si la mano anota una carta", + "de {C:attention}figura{}, prob. de {C:green}#1# en #2#{} de", + "obtener {C:mult}+#3#{} descarte esta ronda", + } + }, + j_paperback_apple = { + name = "Manzana", + text = { + "Al comprar {C:attention}Consumibles{}:", + "Prob. de {C:green}#1# en #2#{} crear una copia {C:dark_edition}Negativa{}", + "Prob. de {C:green}#3# en #4#{} de {C:red,E:2}destruir{} este comodín", + } + }, + j_paperback_heretical_joker = { + name = "Comodín Herético", + text = { + "Las cartas jugadas", + "del palo {C:paperback_stars}Estrella{} otorgan", + "{C:mult}+#1#{} Multi al anotar", + }, + }, + j_paperback_fraudulent_joker = { + name = "Comodín Fraudulento", + text = { + "Las cartas jugadas del", + "palo {C:paperback_crowns}Corona{} otorgan", + "{C:mult}+#1#{} Multi al anotar", + }, + }, + j_paperback_rock_candy = { + name = "Caramelo de Piedra", + text = { + "Las {C:paperback_stars}Estrellas{} anotadas otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de ser comido al final", + "de la ronda", + }, + }, + j_paperback_rockin_stick = { + name = "Palito Rockero", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Mult)", + }, + }, + j_paperback_tanghulu = { + name = "Tanghulu", + text = { + "Las {C:paperback_crowns}Coronas{} anotadas otorgan {C:mult}+#1#{}", + "de Multi, prob. de {C:green}#2# en #3#{} de ser comido", + "al final de la ronda", + }, + }, + j_paperback_sweet_stick = { + name = "Palito dulce", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "Comodín {C:attention}\"Palito\"{} que poseas", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + }, + }, + j_paperback_quartz = { + name = "Cuarzo", + text = { + "Anotar {C:paperback_stars}Estrellas{} otorga {X:chips,C:white}X1{} Fichas,", + "{X:chips,C:white}+X#1#{} por cada {C:paperback_stars}Estrella{} jugada" + } + }, + j_paperback_pyrite = { + name = "Pirita", + text = { + "Jugar {V:1}#1#{} tiene {C:green}#2# en #3#{}", + "de crear una carta del", + "{C:tarot}Tarot{} al azar al anotar", + "{C:inactive}(Debe haber espacio)" + } + }, + j_paperback_wheat_field = { + name = "Campo de trigo", + text = { + "Las {C:paperback_crowns}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:paperback_crowns}#4#{} anotada de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_clothespin = { + name = "Gancho de ropa", + text = { + "Gana {C:chips}+#1#{} Fichas al", + "{C:attention}final de la ronda{}", + "por cada {C:attention}Clip{} {C:attention}en mano", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)" + } + }, + j_paperback_watercolor_joker = { + name = "Comodín de Acuarela", + text = { + "Las {C:attention}Cartas Mojadas{} otorgan", + "{X:chips,C:white}X#2#{} Fichas al anotar", + } + }, + j_paperback_birches = { + name = "Abedules", + text = { + "Las {C:paperback_stars}#1#{} otorgan {X:mult,C:white}X#2#{} Multi", + "al anotar y aumenta {X:mult,C:white}X#3#{} por cada", + "{C:paperback_stars}#4#{} anotado de forma consecutiva", + "{C:inactive,s:0.8}(Se reinicia después de jugar la mano)", + }, + }, + j_paperback_oracle = { + name = "Oráculo", + text = { + "Gana {X:chips,C:white}X#1#{} Fichas por cada", + "carta de {C:paperback_minor_arcana}Arcana Menor{}", + "{C:attention}única{} que hayas usado", + "{C:inactive}(Actualmente {X:chips,C:white}X#2#{C:inactive} Fichas)", + }, + }, + j_paperback_punch_card = { + name = "Tarjeta perforada", + text = { + "Después de {C:attention}#1#{} rondas,", + "vende esta tarjeta para", + "retroceder una {C:attention}Apuesta{}", + "{C:inactive}(Actualmente {C:attention}#2#{C:inactive}/#1#)", + }, + }, + j_paperback_eyelander = { + name = "La Intuertal", + text = { + "Anotar cartas de {C:attention}figura{} las destruye.", + "Después de anotar {C:attention}#1#{} cartas de {C:attention}figura{}", + "{C:attention}vender{} este comodín otorga edición", + "{C:dark_edition}negativa{} a un comodín {C:attention}al azar{}", + "{C:inactive}(Actualmente {C:attention}#2#{C:inactive} Decapitaciones)" + } + }, + j_paperback_banana_man = { + name = "Hombre Plátano", + text = { + "Los comodines tienen una prob.", + " de {C:green}#1# en #2#{} de otorgar {X:mult,C:white}X#3#{} Multi" + }, + unlock = { + "Acquire", + "{C:attention}Cavendish", + "in a run" + } + }, + j_paperback_guns_blazin = { + name = "Calibrated Aces", + text = { + "Los {C:attention}Ases{} otorgan", + "{X:mult,C:white} X#1# {} Multi al", + "anotar", + }, + }, + j_paperback_satellite_array = { + name = "Conjunto de satélites", + text = { + "Gana {C:chips}+#1#{} Fichas por", + "cada carta de {C:planet}Planeta{} ", + "usada y pierde {C:chips}#2#{} Fichas", + "por al jugar una mano", + "{C:inactive}(Actualmente {C:chips}+#3#{C:inactive} Fichas)", + } + }, + j_paperback_rosary_beads = { + name = "Rosario Rojo", + text = { + "Si la mano jugada contiene", + "{C:attention}#1#{} o más {C:hearts}Corazones{}, ganas {C:money}$#2#{}" + } + }, + j_paperback_tian_tian = { + name = "Tian Tian", + text = { + 'Gana {X:mult,C:white}X#1#{} Multi por', + 'cada {C:attention}carta{} destruida', + "{C:inactive}(Currently {X:mult,C:white} X#2# {C:inactive} Mult)" + } + }, + j_paperback_disco = { + name = "Comodín Disco", + text = { + "Gana {C:mult}+#1#{} Multi cuando compras", + "teniendo {C:money}$#2#{} o menos", + "{C:inactive}(Actualmente {C:mult}+#3#{C:inactive} Multi)" + } + }, + j_paperback_a_balatro_movie = { + name = "Una Película de Balatro", + text = { + "Jugar la misma {C:blue}mano{} de forma", + "{C:attention}consecutiva{} otorga {C:money}$#2#{}", + "{C:inactive}(Última mano: {C:attention}#1#{C:inactive})" + } + }, + j_paperback_unionized_labor = { + name = "Sindicalizado", -- Some things are kinda tricky to translate properly + text = { + "Triplica las {C:green,E:1,S:1.1}probabilidades", + "cuando tienes menos de {C:money}$#1#{}, reduce", + "las prob. a la {C:attention}mitad{} de lo contrario", + "{C:inactive}(ej: {C:green}1 en 3{C:inactive} -> {C:green}#2# en #3#{C:inactive})" + } + }, + -- Cross-Mod jokers start here + j_paperback_moon_waltz = { + name = "Moon Waltz", + text = { + "This Joker has a {C:green}#3#{} in {C:green}#4#{} chance of gaining", + "half of a used {C:planet}Moon{} or", + "{C:planet}Asteroid{} card's {C:mult}+Mult{} or {C:chips}+Chips{}", + "{C:inactive}(Currently {C:mult}+#1#{C:inactive} Mult and {C:chips}+#2#{C:inactive} Chips)", + }, + }, + }, + Spectral = { + c_paperback_apostle_of_cups = { + name = "Apóstol de Copas", + text = { + "Selecciona una {C:attention}Carta", + "para hacerla {C:dark_edition}Negativa", + "{C:attention}#1#{} Ranura de comodín", + } + }, + c_paperback_apostle_of_wands = { + name = "Apóstol de Varas", + text = { + "Crea un comodín no", + "{C:legendary}Legendario{} de tu {C:attention}elección{}", + "{C:inactive}(No puedes duplicar)" + } + }, + c_paperback_apostle_of_swords = { + name = "Apóstol de Espadas", + text = { + "Destruye un {C:attention}Comodín{}", + "y retrocede {C:attention}#1#{} Apuestas" + } + }, + c_paperback_apostle_of_pentacles = { + name = "Apóstol de Pentáculos", + text = { + "Añade el {C:paperback_platinum}Clip de Platino{}", + "a {C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_golden_bough = { + name = "Rama Dorada", + text = { + "Crea un {C:paperback_ego_gift}Regalo E.G.O.{}", + "{C:dark_edition}Negativo{} después", + "de cada {C:attention}Ciega Jefe", + "{C:red}#1#{} Ranura de comodín" + } + }, + }, + paperback_minor_arcana = { + c_paperback_ace_of_cups = { + name = "As de Copas", + text = { + "Añade un {C:chips}Clip Azul{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_two_of_cups = { + name = "Dos de Copas", + text = { + "Otorga una etiqueta {C:dark_edition}Policroma{},", + "{C:dark_edition}Holgrafíca{}, {C:dark_edition}Laminada{},", + "{C:mult}Rara{} o {C:green}Inusual{C:attention}" + } + }, + c_paperback_three_of_cups = { + name = "Tres de Copas", + text = { + "Añade un {C:paperback_black}Clip Negro{} a", + "{C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_four_of_cups = { + name = "Cuatro de Copas", + text = { + "Remueve {C:attention}mejoras{}, {C:attention}sellos{} y {C:attention}ediciones{}", + "de {C:attention}#1#{} cartas seleccionadas.", + "Gana {C:money}$#2#{} por cada una" + } + }, + c_paperback_five_of_cups = { + name = "Cinco de Copas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_six_of_cups = { + name = "Seis de Copas", + text = { + "Gana la {C:attention}mitad{} de las {C:chips}Fichas", + "de {C:attention}#1#{} carta sleccionada", + "como {C:money}dinero", + "{C:inactive}(Hasta {C:money}$#2#{C:inactive})" + } + }, + c_paperback_seven_of_cups = { + name = "Siete de Copas", + text = { + "Otorga una {C:attention}mejora{} al azar", + "a {C:attention}#1#{} cartas sleccionadas" + } + }, + c_paperback_eight_of_cups = { + name = "Ocho de Copas", + text = { + "Convierta hasta {C:attention}#1#{} cartas", + "seleccionadas a un palo que", + "no ha ha sido {C:attention}seleccionado" + } + }, + c_paperback_nine_of_cups = { + name = "Nueve de Copas", + text = { + "Destruye un {C:attention}Comodín{} seleccionado", + "y crea un {C:attention}Comodín{} de misma", + "{C:attention}rareza{} o superior", + "{C:inactive}(No puede crear {C:legendary}Legendarios{C:inactive})" + } + }, + c_paperback_ten_of_cups = { + name = "Diez de Copas", + text = { + "Prob. de {C:green}#1# en #2#{} de agregar", + "edición {C:dark_edition}Policroma{} a", + "{C:attention}1{} carta seleccionada" + } + }, + c_paperback_page_of_cups = { + name = "Sota de Copas", + text = { + "Añade {C:inactive}Clip Blanco{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_knight_of_cups = { + name = "Caballero de Copas", + text = { + "Selecciona {C:attention}#1#{} cartas, la carta de", + "la {C:attention}izquierda{} copia {C:attention}todo{} de la", + "carta de la {C:attention}derecha{} menos", + "su {C:attention}categoría{} y {C:attention}palo.", + "Detruye la carta de la {C:attention}derecha{}", + } + }, + c_paperback_queen_of_cups = { + name = "Reina de Copas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_king_of_cups = { + name = "Rey de Copas", + text = { + "Gana {C:money}$#1#{} por cada palo completo", + "con las 13 {C:attention}categorías{} que poseas", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + c_paperback_ace_of_wands = { + name = "As de Varas", + text = { + "Añade {C:mult}Clips Rojos{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_two_of_wands = { + name = "Dos de Varas", + text = { + "Crea las cartas de {C:planet}Planeta{}", + "de tus manos {C:attention}más{} y {C:attention}menos{}", + "{C:attention}jugadas{}", + "{C:inactive}(Debe haber espacio)" + } + }, + c_paperback_three_of_wands = { + name = "Tres de Varas", + text = { + "Crea {C:attention}#1#{} copia de una", + "carta seleccionada" + } + }, + c_paperback_four_of_wands = { + name = "Cuatro de Varas", + text = { + "Añade {C:paperback_pink}Clips Rosados{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_five_of_wands = { + name = "Cinco de Varas", + text = { + "Destruye todas las cartas", + "{C:attention}en manos{} y deja el", + "dinero en {C:money}$0" + } + }, + c_paperback_six_of_wands = { + name = "Seis de Varas", + text = { + "Mejora {C:attention}#1#{} Cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_seven_of_wands = { + name = "Siete de Varas", + text = { + "Otorga una", + "{C:attention}Etiqueta Quebradora" + } + }, + c_paperback_eight_of_wands = { + name = "Ocho de Varas", + text = { + "Crea una {C:attention}Etiqueta {C:dark_edition}Negativa{} y", + "pierde {C:money}$#1#{}, más {C:money}$#2#{} por cada", + "Comodín encima de {C:attention}#3#{}", + "{C:inactive}(Actualmente {C:money}$#4#{C:inactive})" + } + }, + c_paperback_nine_of_wands = { + name = "Nueve de Varas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_ten_of_wands = { + name = "Diez de Varas", + text = { + "Selecciona {C:attention}#1#{} cartas, destruye", + "las {C:attention}2 de la derecha{} y la carta", + "de la {C:attention}izquierda{} gana sus {C:chips}Fichas{}", + "{C:inactive}(Arrastra para reordenar)" + } + }, + c_paperback_page_of_wands = { + name = "Sota de Varas", + text = { + "Añade {C:attention}Clips Naranjas{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_knight_of_wands = { + name = "Caballero de Varas", + text = { + "Otorga una {C:attention}Eiqueta", + "de {C:mult}Riesgo" + } + }, + c_paperback_queen_of_wands = { + name = "Reina de Varas", + text = { + "Prob. de {C:green}#1# en #2#{} de otorgar", + "edición {C:dark_edition}Dicromática{} a un", + "{C:attention}Comodín{} al azar" + } + }, + c_paperback_king_of_wands = { + name = "Rey de Varas", + text = { + "Crea al azar un {C:attention}Comodín{}", + "{C:green}Inusual{} o {C:red}Raro{}", + } + }, + c_paperback_ace_of_swords = { + name = "As de Espadas", + text = { + "Convierte hasta {C:attention}#1#{} cartas", + "seleccionadas en {V:1}#2#{}", + } + }, + c_paperback_two_of_swords = { + name = "Dos de Espadas", + text = { + "Convierta {C:attention}#1#{} cartas", + "seleccionadas al último", + "palo {C:attention}anotado{}", + -- slight error? says last hand, should be the last suit + "{C:inactive,s:0.8}(Última mano: {V:1,s:0.8}#2#{C:inactive,,s:0.8})", + } + }, + c_paperback_three_of_swords = { + name = "Tres de Espadas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_four_of_swords = { + name = "Cuatro de Espadas", + text = { + "Convierte {C:attention}#1#{} seleccionadas", + "en cartas de {C:attention}Figura{}", + "al azar" + } + }, + c_paperback_five_of_swords = { + name = "Cinco de Espadas", + text = { + "Otorga una {C:attention}edición{},", + "{C:attention}sello{} o {C:attention}mejora{}", + "al azar", + } + }, + c_paperback_six_of_swords = { + name = "Seis de Espadas", + text = { + "Añade {C:attention}Clips Amarillos{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_seven_of_swords = { + name = "Siete de Espadas", + text = { + "Añade un {C:attention}Clip Dorado{} a", + "{C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_eight_of_swords = { + name = "Ocho de Espadas", + text = { + "Añade al azar {C:attention}Clips{} a", + "{C:attention}#1#{} cartas seleccionadas" + } + }, + c_paperback_nine_of_swords = { + name = "Nueve de Espadas", + text = { + "Destruye el Comodín seleccionado, gana {C:money}$5", + "y no {C:red}puede{} aparecer de nuevo", + "por el {C:attention}resto de la partida{}" + } + }, + c_paperback_ten_of_swords = { + name = "Diez de Espadas", + text = { + "{C:red}Destruye{} todas las cartas", + "con la {C:attention}categoría{} de", + "la carta seleccionada" + } + }, + c_paperback_page_of_swords = { + name = "Sota de Espadas", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}Cartas de Dominó{}" + } + }, + c_paperback_knight_of_swords = { + name = "Caballero de Espadas", + text = { + "Crea al azar una carta de", + "{C:paperback_minor_arcana}Arcana menor{} y del {C:tarot}Tarot{}", + "{C:inactive}(Debe haber espacio)" + } + }, + c_paperback_king_of_swords = { + name = "Rey de Espadas", + text = { + "Remueve los stickers de {C:money}Alquiler{} y", + "{C:paperback_perishable}Perecedero{} del comodín seleccionado" + } + }, + c_paperback_queen_of_swords = { + name = "Reina de Espadas", + text = { + "Convierte {C:attention}#1#{} cartas al azar", + "en tu baraja con{C:attention} palo diferente", + "al {C:attention}palo{} de la carta seleccionada" + } + }, + c_paperback_ace_of_pentacles = { + name = "As de Pentáculos", + text = { + "Convierte hasta {C:attention}#1#{} cartas", + "seleccionadas en {V:1}#2#{}", + } + }, + c_paperback_two_of_pentacles = { + name = "Dos de Pentáculos", + text = { + "Agrega o Remueve {C:paperback_eternal}Eterno{}", + "del {C:attention}Comodín{} sleccionado" + } + }, + c_paperback_three_of_pentacles = { + name = "Tres de Pentáculos", + text = { + "Selecciona {C:attention}#1#{} cartas, las", + "2 cartas de la {C:attention}derecha{} copian la", + "{C:attention}mejora{} de la carta de la {C:attention}izquierda{}", + "{C:inactive}(Arrastra para reordenar)" + } + }, + c_paperback_four_of_pentacles = { + name = "Cuatro de Pentáculos", + text = { + "Seleciona {C:attention}#1#{} cartas.", + "Prob. de {C:green}#2# en #3#{} de {C:red}destruir{}", + "las cartas {C:attention}no seleccionadas{}", + } + }, + c_paperback_five_of_pentacles = { + name = "Cinco de Pentáculos", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_six_of_pentacles = { + name = "Seis de Pentáculos", + text = { + "Otorga una etiqueta de", + "{C:money}Inversión{}, {C:money}Economía{}, {C:red}Cupón{},", + "{C:green}D6{} o de {C:attention}Malabar{}" + } + }, + c_paperback_seven_of_pentacles = { + name = "Siete de Pentáculos", + text = { + "Añade {C:green}Clip Verde{} a {C:attention}#1#{}", + "cartas seleccionadas" + } + }, + c_paperback_eight_of_pentacles = { + name = "Ocho de Pentáculos", + text = { + "Ganas {C:money}$#1#{} por cada carta", + "del {C:tarot}Tarot{} o {C:paperback_minor_arcana}Arcana menor{}", + "única que hayas usado", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + c_paperback_nine_of_pentacles = { + name = "Nueve de Pentáculos", + text = { + "Añade un {C:purple}Clip Morado{} a", + "{C:attention}#1#{} carta seleccionada" + } + }, + c_paperback_ten_of_pentacles = { + name = "Diez de Pentáculos", + text = { + "Ganas entre {C:money}$#1#{} y {C:money}$#2#{}", + "al usarla" + } + }, + c_paperback_page_of_pentacles = { + name = "Sota de Pentáculos", + text = { + "Mejora {C:attention}#1#{} cartas", + "seleccionadas a", + "{C:attention}#2#s{}" + } + }, + c_paperback_knight_of_pentacles = { + name = "Caballero de Pentáculos", + text = { + "Reinicia el coste de las", + "{C:green}renovaciones{} a {C:money}$#1#{}" + } + }, + c_paperback_queen_of_pentacles = { + name = "Reina de Pentáculos", + text = { + "Selecciona {C:attention}#1#{} cartas, convierte", + "las cartas a la {C:attention}categoría{} de", + "la carta {C:attention}extremo izquierdo{}", + "{C:inactive}(Arrastra para reordenar)" + } + }, + c_paperback_king_of_pentacles = { + name = "Rey de Pentáculos", + text = { + "Ganas {C:money}$#1#{} por cada carta", + "de {C:attention}figura{} en tu baraja", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + }, + paperback_ego_gift = { + c_paperback_dark_vestige = { + name = "Vestigio oscuro", + text = { + "El resultado de intentar", + "duplicar {C:paperback_ego_gift}regalos E.G.O{}...", + } + }, + c_paperback_imposed_weight = { + name = "Peso Impuesto", + text = { + "Reactiva la carta del {C:attention}extremo{}", + "{C:attention}derecho{} {C:attention}#1#{} vez por cada", + "ranura de comodín {C:attention}vacia{}" + } + }, + c_paperback_phlebotomy_pack = { + name = "Paquete de flebotomía", + text = { + "{C:blue}+#1#{} mano adiconal al", + "empezar la ronda" + } + }, + c_paperback_smokes_and_wires = { + name = "Alambres y humo", + text = { + "{X:red,C:white}X#1#{} Multi en la última", + "{C:blue}mano{} {C:attention}de la ronda{}", + } + }, + c_paperback_coffee_and_cranes = { + name = "Café y grullas", + text = { + "Ganas {C:money}$#1#{} al final", + "de la ronda", + } + }, + c_paperback_fiery_down = { + name = "Pluma ígnea", + text = { + "Después de descartar {C:attention}#1#{} {C:inactive}(#2#){}", + "cartas, sube de nivel tu", + "próxima {C:attention}mano jugada" + } + }, + c_paperback_decamillennial_stewpot = { + name = "Olla decamilenial", + text = { + "Si tu {C:attention}primera mano{} es una", + "{C:attention}sola{} carta, destrúyela", + } + }, + c_paperback_downpour = { + name = "Diluvio", + text = { + "Las {C:blue}manos{} jugadas {C:attention}reducen{} la", + "puntucación requerida en {C:attention}#1#%", + } + }, + c_paperback_rusty_coin = { + name = "Moneda conmemorativa oxidada", + text = { + "Si tu {C:attention}primera mano{} es una {C:attention}sola{}", + "carta, obtiene un {C:attention}sello{} al azar", + } + }, + c_paperback_ragged_umbrella = { + name = "Paraguas harapiento", + text = { + "Gana {C:chips}+#1#{} Fichas por cada", + "{C:attention}mano{} que no derrota la {C:attention}Ciega{}", + "{C:inactive}(Actuamente {C:chips}+#2#{C:inactive} Fichas)", + } + }, + c_paperback_thrill = { + name = "Estremecer", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "{C:attention}descarte{} usado y se activa", + "en la {C:attention}primera{} mano jugada", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + } + }, + c_paperback_thrill_inactive = { + name = "Estremecer", + text = { + "Otorga {X:mult,C:white}X#1#{} Multi por cada", + "{C:attention}descarte{} usado y se activa", + "en la {C:attention}primera{} mano jugada", + "{C:inactive}(Actualmente {X:mult,C:white}X#2#{C:inactive} Multi)", + } + }, + c_paperback_disk_fragment = { + name = "Fragmento de Disco", + text = { + "Si no posees cartas de {C:planet}Planeta{}", + "crea {C:attention}#1#{} cartas de {C:planet}Planeta{} {C:dark_edition}negativas{}", + "al seleccionar la {C:attention}Ciega pequeña{} o {C:attention}Grande{}", + } + }, + c_paperback_death_seeker = { + name = "Buscamuertos", + text = { + "Las cartas {C:attention}mejoradas{} otorgan {C:mult}+Multi{}", + "igual a su {C:attention}categoría{} al anotar", + } + }, + c_paperback_pendant_of_nostalgia = { + name = "Colgante de nostalgia", + text = { + "Cuando se {C:red}destruye{} una {C:attention}carta{}, crea una", + "carta del {C:tarot}Tarot{} o de {C:paperback_minor_arcana}Arcana menor{}", + "{C:inactive}(Debe haber espacio)" + } + }, + c_paperback_blue_lighter = { + name = "Encendedor Azul", + text = { + "Al seleccionar una {C:attention}ciega{}, destruye", + "un consumible que no sea {C:paperback_ego_gift}E.G.O.{}", + "y gana {X:mult,C:white}X#1#{} Multi", + "{C:inactive}(actualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + } + }, + c_paperback_broken_glasses = { + name = "Lentes rotos", + text = { + "Cuando {C:attention}destruyes{} exactamente {C:attention}1{} o {C:attention}2{} cartas", + "crea {C:attention}2 copias{} de las cartas destruidas.", + "Prob. de {C:green}#1# en #2#{} de {C:red}autodestruirse{}", + "{C:inactive,s:0.8}al autodestruirse no activa su pecado" + } + }, + c_paperback_nebulizer = { + name = "Nebulizador", + text = { + "Las cartas anotadas tienen una prob.", + "de {C:green}#1# en #2#{} de otorgan {X:mult,C:white}X#3#{} Multi" + } + }, + c_paperback_tomorrow_fortune = { + name = "La fortuna del mañana", + text = { + "Los {C:attention}Paquetes potenciadores{}", + "tienen {C:attention}1{} carta adicional" + } + }, + c_paperback_fluorescent_lamp = { + name = "Lámpara Fluorecente", + text = { + "{C:red}+#1#{} descarte, y ganas {C:red}+#1#{}", + "descarte adicional por cada", + "{C:attention}#2#{} ranuras de {C:attention}comodín{} vacías", + "{C:inactive}(Actualmente {C:red}+#3#{C:inactive} descartes)" + } + }, + c_paperback_lightning_rod = { + name = "Pararrayos", + text = { + "Las cartas {C:attention}en mano{}", + "tienen una prob. de", + "{C:green}#1# en #2#{} de reactivarse" + } + }, + c_paperback_chalice_of_trickle_down = { + name = "Cáliz de goteo", + text = { + "Durante la {C:attention}ciega jefe{}", + "otorga {C:money}${} igual a la cateogría", + "más baja en la {C:attention}mano anotada" + } + }, + c_paperback_patrolling_flashlight = { + name = "Linterna de Patrulla", + text = { + "El primer consumible usado en la", + "{C:attention}apuesta{} crea una {C:attention}copia energizada{}" + } + }, + }, + Voucher = { + v_paperback_celtic_cross = { + name = "Cruz Celta", + text = { + "La tienda tiene un", + "{C:paperback_minor_arcana}Mega Paquete de Arcana Menor{}", + "{C:attention}gratis{} al principio de cada", + "apuesta", + } + }, + v_paperback_soothsay = { + name = "Adivinación", + text = { + "Las cartas de {C:paperback_minor_arcana}Arcana menor{}", + "pueden aparecer en la {C:money}Tienda" + } + }, + v_paperback_second_trumpet = { + name = "Segunda Trompeta", + text = { + "Tu primer {C:paperback_ego_gift}Regalo E.G.O{} otorga", + "{C:attention}+#1#{} ranura de consumibles" + } + }, + v_paperback_rabbit_protocol = { + name = "Protocolo del Conejo", + text = { + "La primera vez que {C:attention}vendas{} un", + "{C:paperback_ego_gift}Regalo E.G.O{}, {C:attention}desactiva{}", + "la {C:attention}Ciega Jefe" + }, + unlock = { + "Vende {C:attention}#1#{} {C:paperback_ego_gift}Regalos E.G.O{}", + "en una partida" + } + }, + }, + Tag = { + tag_paperback_angel_investment = { + name = "Etiqueta de Angel Inversionista", + text = { + "Gana {C:money}$#1#{} por cada {C:money}$#2#{} que tengas", + "{C:inactive}(Maximo {C:money}$#3#{C:inactive})", + "{C:inactive}(Actualmente {C:money}$#4#{C:inactive})" + } + }, + tag_paperback_divination = { + name = "Etiqueta de Divinidad", + text = { + "Otorga un {C:paperback_minor_arcana}Mega Paquete", + "{C:paperback_minor_arcana}de Arcana Menor" + } + }, + tag_paperback_dichrome = { + name = "Etiqueta Dicromático", + text = { + "El siguiente comodín de la tienda", + "es gratis y se vuelve", + "{C:dark_edition}Dicromático" + } + }, + tag_paperback_high_risk = { + name = "Etiqueta de Riesgo", + text = { + "Seleccionar la {C:attention}Ciega", + "{C:attention}Jefe{} {C:attention}duplica{} sus", + "requisitos y ganas {C:money}$#1#", + } + }, + tag_paperback_breaking = { + name = "Etiqueta Quebradora", + text = { + "Desactiva la", + "{C:attention}Ciega Jefe" + } + } + }, + Planet = { + c_paperback_quaoar = { + name = "Quaoar", + }, + c_paperback_haumea = { + name = "Haumea", + }, + c_paperback_sedna = { + name = "Sedna", + }, + c_paperback_makemake = { + name = "Makemake", + }, + }, + Enhanced = { + m_paperback_ceramic = { + name = "Carta de Cerámica", + text = { + "Gana entre {C:money}$#1#{} y {C:money}$#2#{} al anotar.", + "Se {C:red}Rompen{} si el {C:mult}Multi{} es {C:attention}mayor{} a", + "las {C:chips}Fichas{} al jugarse o estar en mano", + } + }, + m_paperback_soaked = { + name = "Carta Mojada", + text = { + "Al anotar, las cartas en", + "{C:attention}mano{} anotan sus {C:chips}Fichas{}.", + "Prob. de {C:green}#1# en #2#{} de", + "{C:red,E:2}destruirse{} si se {C:red}descarta", + } + }, + m_paperback_wrapped = { + name = "Carta envuelta", + text = { + "Gana {C:money}$#1#{} al anotar", + "No tiene categoría ni palo" + } + }, + m_paperback_bandaged = { + name = "Carta vendada", + text = { + "Reactiva cartas {C:attention}adjacentes{}", + "prob. de {C:green}#1# en #2#{} de {C:red}romperse{}", + "al anotar" + } + }, + m_paperback_domino = { + name = "Carta de Dominó", + text = { + "Otorga {C:mult}+#1#{} Multi por cada", + "categoria descartada esta ronda", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + } + }, + m_paperback_stained = { + name = "Carta Manchada", + text = { + "Si está en {C:attention}mano{} las", + "cartas que anotan obtienen", + "permanentemente {C:mult}#1#{} Multi" + } + }, + m_paperback_sleeved = { + name = "Carta Enmicada", + text = { + "No se puede", + "{C:attention}debilitar{} o {C:attention}voltear{}", + "Ganas {C:money}$#1#{} al destruirse" + } + }, + m_paperback_antique = { + name = "Carta Antigua", + text = { + "{X:chips,C:white}X#1#{} Fichas,", + "Aumenta en {X:chips,C:white}X#2#{} cada", + "vez que se juega y anota", + } + } + }, + Edition = { + e_paperback_dichrome = { + name = "Dicromático", + text = { + "Al seleccionar la {C:attention}Ciega{}", + "gana {C:attention}+#1#{C:blue} Mano{} o {C:red}Descarte", + "{C:inactive}(El que sea menor)" + } + } + }, + Other = { + undiscovered_paperback_minor_arcana = { + name = "No se Descubrió", + text = { + "Compra o usa", + "esta carta en una", + "partida sin códigos", + "para saber lo que hace", + }, + }, + paperback_light_suits = { + name = "Palos Claros", + text = { + "{C:diamonds}Diamantes{}, {C:hearts}Corazones{}" + } + }, + paperback_dark_suits = { + name = "Palos Oscuros", + text = { + "{C:spades}Espadas{}, {C:clubs}Tréboles{}" + } + }, + paperback_requires_custom_suits = { + name = "Requiere Palos Personalizados", + text = { + "Excluido del juego.", + "Activa {C:attention}Palos Personalizados{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_enhancements = { + name = "Requiere Mejoras", + text = { + "Excluido del juego.", + "Activa {C:attention}Mejoras{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_paperclips = { + name = "Requiere Clips de papel", + text = { + "Excluido del juego.", + "Activa {C:attention}Clips de papel{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_minor_arcana = { + name = "Requiere Arcana Menor", + text = { + "Excluido del juego.", + "Activa {C:paperback_minor_arcana}Arcana Menor{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_tags = { + name = "Requiere Etiquetas", + text = { + "Excluido del juego.", + "Activa {C:attention}Etiquetas{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_editions = { + name = "Requiere Ediciones", + text = { + "Excluido del juego.", + "Activa {C:dark_edition}Ediciones{}", + "en la configuración de {C:legendary}Paperback", + } + }, + paperback_requires_ranks = { + name = "Requiere Categorias", + text = { + "Excluido del juego.", + "Activa {C:dark_edition}Categorias{}", + "en la configuración de {C:legendary}Paperback", + } + }, + + -- Stickers + paperback_energized = { + name = "Energizado", + text = { + "No puede ser copiado por", + "{C:attention}#1#{}" + } + }, + paperback_temporary = { + name = "Temporal", + text = { + "Será {C:mult}destruido", + "al final de la ronda" + } + }, + + paperback_corroded = { + name = "Corroida", + text = { + "No se puede {C:money}vender{} sin", + "sin activar un {C:paperback_ego_gift}Pecado{}.", + "{C:red}Se destruye{} y activa", + "su {C:paperback_ego_gift}pecado{} dentro", + "de {C:attention}#1#{} rondas", + } + }, + + -- Paperclips + paperback_blue_clip = { + name = "Clip Azul", + text = { + "{X:chips,C:white}X#1#{} Fichas al {C:attention}anotar{}", + " por cada {C:attention}Clip{} en {C:attention}mano", + "{C:inactive}(Actualmente {X:chips,C:white}X#2#{C:inactive})" + } + }, + paperback_purple_clip = { + name = "Clip Morado", + text = { + "Reactiva cartas adjacentes", + "si tienen un {C:attention}Clip{}", + } + }, + paperback_red_clip = { + name = "Clip Rojo", + text = { + "{C:mult}+#1#{} Multi al {C:attention}anotar{}", + "por cada {C:attention}Clip{} en {C:attention}mano", + "{C:inactive}(Actualmente {C:mult}+#2#{C:inactive} Multi)" + } + }, + paperback_orange_clip = { + name = "Clip Naranja", + text = { + "Gana {C:money}$#1#{} al {C:attention}anotar{}", + " por cada {C:attention}#2#{} {C:attention}Clips{} en {C:attention}mano", + "{C:inactive}(Actualmente {C:money}$#3#{C:inactive})" + } + }, + paperback_black_clip = { + name = "Clip Negro", + text = { + "Reactiva la carta {C:attention}anotada{}", + "si hay {C:attention}Clips{} en la {C:attention}mano", + } + }, + paperback_yellow_clip = { + name = "Clip Amarillo", + text = { + "Si {C:attention}anota{} y hay {C:attention}Clips{} en {C:attention}mano{}:", + "{C:green}#1# en #2#{} de otorgar {C:red}+#3#{} Multi,", + "{C:green}#4# en #5#{} de otorgar {X:mult,C:white}X#6#{} Multi", + "{C:green}#7# en #8#{} de ganar {C:money}$#9#{}", + } + }, + paperback_gold_clip = { + name = "Clip Dorado", + text = { + "Gana {C:money}$#1#{} por cada {C:attention}Clip{} anotado", + "si esta carta está en {C:attention}mano", + "al final de la ronda", + "{C:inactive}(Actualmente {C:money}$#2#{C:inactive})" + } + }, + paperback_green_clip = { + name = "Clip Verde", + text = { + "Gana {C:mult}+#2#{} Multi por cada {C:attention}2{} Clips", + "anotados y {C:mult}#3#{} Multi por cada", + "{C:attention}Clip{} descartado", + "{C:inactive}(Actualmente {C:mult}+#1#{C:inactive} Multi)" + } + }, + paperback_white_clip = { + name = "Clip Blanco", + text = { + "Si está en {C:attention}mano{} al {C:attention}final{} de", + "la {C:attention}ronda{}, gana {C:chips}+#1#{} Fichas por", + "cada {C:attention}Clip{} anotado en la ronda", + "{C:inactive}(Actualmente {C:chips}+#2#{C:inactive} Fichas)" + } + }, + paperback_pink_clip = { + name = "Clip Rosado", + text = { + "{X:mult,C:white}X#1#{} Multi al estar en la {C:attention}mano{}", + " aumenta {X:mult,C:white}X#2#{} por cada {C:attention}Clip{} anotado", + "{C:inactive,s:0.8}(Se reinicia al jugar una mano)" + } + }, + paperback_platinum_clip = { + name = "Clip de Platino", + text = { + "Al {C:attention}anotar{}, fuerza a los", + "{C:attention}Clips{} a activarse si están", + "{C:attention}en mano{}" + } + }, + + -- Regalos E.G.O. Pecados + paperback_sin_none = { + name = "Vestigio", + text = { + "Siempre se vende por {C:money}$#1#{}" + } + }, + paperback_sin_wrath = { + name = "Ira", + text = { + "Al venderse, {C:attention}destruye{}", + "todos tus {C:attention}consumibles" + } + }, + paperback_sin_lust = { + name = "Lujuría", + text = { + "Al venderse, reduce {C:attention}#1# niveles{}", + "a tu mano {C:attention}más jugada{}" + } + }, + paperback_sin_sloth = { + name = "Pereza", + text = { + "Sólo lo puedes vender", + "al salta una {C:attention}ciega" + } + }, + paperback_sin_gluttony = { + name = "Gula", + text = { + "Al venderse agrega {C:paperback_perishable}pedecedero{}", + "a un {C:attention}comodín{}" + } + }, + paperback_sin_gloom = { + name = "Melancolía", + text = { + "Al venderse multiplica el tamaño", + "de las {C:attention}ciegas{} por {C:attention}X#1#{}" + } + }, + paperback_sin_pride = { + name = "Orgullo", + text = { + "Se vende por {C:money}#2#{}" + } + }, + paperback_sin_envy = { + name = "Envidia", + text = { + "Al venderse, {C:attention}-#1#{} al", + "tamaño de mano" + } + }, + paperback_sin_madness = { + name = "Locura", + text = { + "Al venderse, {C:attention}destruye{}", + "un {C:attention}Comodín" + } + }, + -- EGO GIFTS + p_paperback_ego_gift_normal = { + name = "Extractión de Regalos E.G.O.", + text = { + "Escoge {C:attention}#1#{} de {C:attention}#2#{} {C:paperback_ego_gift}Regalos E.G.O{}", + }, + }, + -- Minor Arcana Packs + p_paperback_minor_arcana_normal = { + name = "Paquete de Arcana Menor", + text = { + "Elige {C:attention}#1#{} de {C:attention}#2#{} cartas de", + "{C:paperback_minor_arcana}Arcana Menor{} para usar", + "inmediatamente" + } + }, + p_paperback_minor_arcana_jumbo = { + name = "Paquete Jumbo de Arcana Menor", + text = { + "Elige {C:attention}#1#{} de {C:attention}#2#{} cartas de", + "{C:paperback_minor_arcana}Arcana Menor{} para usar", + "inmediatamente" + } + }, + p_paperback_minor_arcana_mega = { + name = "Mega Paquete de Arcana Menor", + text = { + "Elige {C:attention}#1#{} de {C:attention}#2#{} cartas de", + "{C:paperback_minor_arcana}Arcana Menor{} para usar", + "inmediatamente" + } + }, + }, + Partner = { + pnr_paperback_virtual = { + name = "Virtual", + text = { + "Reactiva la {C:attention}primera carta", + "de {C:paperback_light_suit}Palo claro{} que anota", + "si no juegas {C:paperback_dark_suit}Palos oscuros{}", + } + }, + pnr_paperback_aftermath = { + name = "Secuela", + text = { + "Las {C:attention}Cartas de Figura{}", + "ganan {C:chips}+#1#{} fichas", + "al anotar", + } + }, + pnr_paperback_faker = { + name = "Farsante", + text = { + "{C:attention}Una vez por ronda{}", + "jugar una {C:attention}sola carta{}", + "la destruye", + } + }, + pnr_paperback_faker_buffed = { + text = { + "Jugar una {C:attention}sola carta{}", + "la destruye", + } + }, + }, + Sleeve = { + sleeve_paperback_paper = { + name = "Funda de Papel", + text = { + "Los {C:attention}Comodines{} de {C:legendary}Paperback{}", + "son {C:attention}3X nás comunes,", + "Comienza la partida con el", + "Comodín {C:attention,T:j_paperback_shopping_center}#1#{}" + } + }, + sleeve_paperback_paper_buff = { + name = "Funda de Papel", + text = { + "Comienzas con {C:attention,T:j_paperback_shopping_center}#1#{}", + "{C:dark_edition}Negativo{}" + } + }, + + sleeve_paperback_proud = { + name = "Funda Arcoiris", + text = { + "Tu baraja comienza con", + "{C:hearts}Corazones{}, {C:diamonds}Diamantes{},", + "{C:spades}Espadas{}, {C:clubs}Tréboles{}", + "{C:paperback_crowns}Coronas{} y {C:paperback_stars}Estrellas" + } + }, + sleeve_paperback_proud_buff = { + name = "Funda Arcoiris", + text = { + "Todos tus {C:attention}Ases", + "tienen edición {C:dark_edition}Policroma" + } + }, + + sleeve_paperback_silver = { + name = "Funda de Plata", + text = { + "Comienza la partida con", + "el vale {C:paperback_minor_arcana,T:v_paperback_celtic_cross}#1#{}", + "y un {C:paperback_minor_arcana,T:c_paperback_nine_of_cups}#2#" + } + }, + sleeve_paperback_silver_buff = { + name = "Funda de Plata", + text = { + "Comienzas con el Vale", + "{C:paperback_minor_arcana,T:v_paperback_soothsay}#1#{}" + } + }, + + sleeve_paperback_dreamer = { + name = "Funda Soñadora", + text = { + "Comienza con un", + "{C:paperback_minor_arcana,T:c_paperback_apostle_of_wands}#1#", + "{C:paperback_temporary}Temporal", + "{C:attention}#2#{} Ranura de comodín" + } + }, + sleeve_paperback_dreamer_buff = { + name = "Funda Soñadora", + text = { + "Tu Baraja contiene", + "{C:attention}Apostoles" + } + }, + + sleeve_paperback_antique = { + name = "Funda Antigua", + text = { + "Los {C:tarot}Paquetes Arcanos{} no", + "aparecerán en la tienda", + "Los {C:paperback_minor_arcana}Paquetes de Arcana Menor", + "son {C:attention}3X{} más comunes" + } + }, + sleeve_paperback_antique_buff = { + name = "Funda Antigua", + text = { + "Los Paquetes de", + "{C:paperback_minor_arcana}Arcana menor{} son {C:money}Gratis" + } + }, + + sleeve_paperback_passionate = { + name = "Funda Apasionada", + text = { + "Después de derrotar una", + "{C:attention}Ciega Jefe{}, gana una", + "{C:attention,T:tag_paperback_high_risk}#1#", + "No puedes ganar {C:money}interés" + } + }, + sleeve_paperback_passionate_buff = { + name = "Funda Apasionada", + text = { + "Todas las {C:attention}Ciegas Jefe{} son", + "reemplazadas con {C:attention}Ciegas Finales", + "Al derrotar una {C:attention}Ciega Final", + "gana una Etiqueta {C:dark_edition,T:tag_negative}Negativa{}" + } + } + } + }, + misc = { + dictionary = { + -- Badge under cards + k_paperback_minor_arcana = "Arcana menor", + -- Name of consumable type in collection + b_paperback_minor_arcana_cards = "Arcana menor", + -- Text shown at the bottom while opening booster + paperback_minor_arcana_pack = "Paquete de Arcana menor", + + -- Badge under gifts + k_paperback_ego_gift = "Regalos E.G.O.", + -- Name of consumable type in collection + b_paperback_ego_gift_cards = "Regalos E.G.O.", + -- Text shown at the bottom while opening booster + paperback_ego_gift_pack = "Extracción de Regalo E.G.O.", + + -- Badge under E.G.O. Gifts based on sins + k_paperback_ego_sin_none = "Vestigio", + k_paperback_ego_sin_pride = "Orgullo", + k_paperback_ego_sin_wrath = "Ira", + k_paperback_ego_sin_gloom = "Melancolía", + k_paperback_ego_sin_sloth = "Pereza", + k_paperback_ego_sin_lust = "Lujuría", + k_paperback_ego_sin_envy = "Envidia", + k_paperback_ego_sin_gluttony = "Gula", + k_paperback_ego_sin_madness = "Locura", + + paperback_confessed_ex = "¡Confesó!", + paperback_polychrome_ex = "¡Policroma!", + paperback_destroyed_ex = "¡Destruido!", + paperback_doubled_ex = "¡Doble!", + paperback_too_late_ex = "¡MUY TARDE!", + paperback_broken_ex = "¡Se Rompió!", + paperback_none = "Nada", + paperback_downgrade_ex = "¡Degradado!", + paperback_copy_ex = "¡Copiado!", + paperback_consumed_ex = "Consumido!", + paperback_too_hot_ex = "¡Muy Caliente!", + paperback_inactive = "Inactivo", + paperback_supplies_ex = "Suministros!", + paperback_melted_ex = "¡Derretido!", + paperback_investment_ex = "¡Inversión!", + paperback_plus_minor_arcana = "¡+1 Arcana!", + paperback_plus_consumable = "¡+1 Consumable!", + paperback_plus_tag = "+1 Etiqueta", + paperback_edition_ex = "Edición!", + paperback_rare_ex = "¡Raro!", + paperback_saved_unholy_alliance = "Salvado por Alianza Impía", + paperback_saved_determination = "Salvado por Determinacion", + paperback_reduced_ex = "Reducido!", + paperback_determination_ex = "NGAAAHH!", + paperback_forlorn_destruction = "Disculpa...", + paperback_freezer_ex = "¡Hora de comer!", + paperback_corroded_ex = "¡Corroida!", + paperback_jestosterone_ex = "¡Masc!", + paperback_jestrogen_ex = "¡Fem!", + paperback_punch_card_active = "¡Dile a tus amigos!", + paperback_punch_card_ex = "Wrong Warp!", + + paperback_ui_requires_restart = "Requiere Reinicio", + paperback_ui_no_requires_restart = "No Requiere Reinicio", + paperback_ui_enable_blinds = "Activar Ciegas", + paperback_ui_enable_minor_arcana = "Activar Arcana Menor", + paperback_ui_enable_ego_gifts = "Activar regalos E.G.O.", + paperback_ui_enable_enhancements = "Activar Mejoras", + paperback_ui_enable_editions = "Activar Ediciones", + paperback_ui_enable_paperclips = "Activar Clips de papel", + paperback_ui_custom_suits_enabled = "Activar Palos nuevos", + paperback_ui_enable_vouchers = "Activar Vales", + paperback_ui_enable_tags = "Activar Etiquetas", + paperback_ui_enable_ranks = "Activar Categorias", + paperback_ui_developers = "Desarrolladores", + paperback_ui_artists = "Artistas", + paperback_ui_localization = "Traducción", + paperback_ui_paperclips = "Clips de Papel", + paperback_ui_enable_spectrals = "Activar Cartas Espectrales", + paperback_ui_plague_doctor_quotes = "Fraces del Doctor de la Plaga", + paperback_ui_select = "Seleccionar", + + -- Plague Doctor's quotes + paperback_plague_quote_1_1 = 'On this rock I will build my church, and the', + paperback_plague_quote_1_2 = 'gates of hell shall not prevail against it...', + + paperback_plague_quote_2_1 = 'Tell us, when will this happen, and what will be', + paperback_plague_quote_2_2 = 'the sign of your coming and the end of an age?', + + paperback_plague_quote_3_1 = 'Do you wish us to call fire down', + paperback_plague_quote_3_2 = 'from heaven to destroy them?', + + paperback_plague_quote_4_1 = 'To the apostles he gave the name Boanerges,', + paperback_plague_quote_4_2 = 'which means "Sons of Thunder".', + + paperback_plague_quote_5_1 = 'Show us the father, and that', + paperback_plague_quote_5_2 = 'will be enough for us.', + + paperback_plague_quote_6_1 = 'He saw a man. "Follow me," he told him,', + paperback_plague_quote_6_2 = 'and the Apostle got up and followed him.', + + paperback_plague_quote_7_1 = 'Now for some time the Apostle had', + paperback_plague_quote_7_2 = 'practiced sorcery and amazed all people.', + + paperback_plague_quote_8_1 = 'Then the Apostle said to the rest of the disciples,', + paperback_plague_quote_8_2 = '"Let us also go, that we may die with him."', + + paperback_plague_quote_9_1 = 'Then the Apostle declared, "You are', + paperback_plague_quote_9_2 = 'the son of him, you are the king."', + + paperback_plague_quote_10_1 = 'Then the Apostle said, "But why do you intend', + paperback_plague_quote_10_2 = 'to show yourself to us and not the world?"', + + paperback_plague_quote_11_1 = 'From now on, let no one cause me trouble,', + paperback_plague_quote_11_2 = 'for I bear on my body the marks of him.', + + paperback_plague_quote_12_1 = 'Have I not chosen you, the Twelve?', + paperback_plague_quote_12_2 = 'Yet one of you is a devil.', + + -- Clippy messages + paperback_clippy_msg_1 = "¿Guardo el archivo?", + paperback_clippy_msg_2 = "¡Soy Clippy!", + paperback_clippy_msg_3 = "¡Hola!", + paperback_clippy_msg_4 = "¡La Planta acecha!", + paperback_clippy_msg_5 = "¡Te ayudaré!", + paperback_clippy_msg_6 = "¿Te ayudo?", + paperback_clippy_msg_7 = "¿Linux es mejor?", + paperback_clippy_msg_8 = "¡El mouse funciona!", + paperback_clippy_msg_full = "¡Memoria llena!", + + -- Da Capo messages + paperback_da_capo_Clubs = "Movimiento 1", + paperback_da_capo_Spades = "Movimiento 2", + paperback_da_capo_Diamonds = "Movimiento 3", + paperback_da_capo_Hearts = "Movimiento 4", + paperback_da_capo_None = "¡Final!", + }, + v_dictionary = { + paperback_a_discards = "+#1# Descarte", + paperback_a_discards_minus = "-#1# Descarte", + paperback_a_hands_minus = "-#1# Mano", + paperback_prince_of_darkness = "+#1# Multi, +#2# Fichas", + paperback_a_completion = "#1#/#2#", + paperback_a_round_minus = "-#1# Ronda", + paperback_a_plus_cards = "+#1# #2#s", + paperback_a_plus_tags = "+#1# Etiqueta", + }, + ranks = { + paperback_Apostle = 'Apóstol', + }, + suits_singular = { + paperback_Crowns = "Corona", + paperback_Stars = 'Estrella' + }, + suits_plural = { + paperback_Crowns = "Coronas", + paperback_Stars = 'Estrellas' + }, + poker_hands = { + ['paperback_Spectrum'] = "Espectro", + ['paperback_Straight Spectrum'] = "Escalera Espectral", + ['paperback_Straight Spectrum (Royal)'] = "Espectro Real", + ['paperback_Spectrum House'] = "Full Espectral", + ['paperback_Spectrum Five'] = "Quintilla Espectral", + ['paperback_Straight Flush (Rapture)'] = "Rapto", + }, + poker_hand_descriptions = { + ['paperback_Spectrum'] = { + "5 cartas de palo diferente" + }, + ['paperback_Straight Spectrum'] = { + "5 cartas seguidas", + "de palo diferente" + }, + ['paperback_Spectrum House'] = { + "Una Tercia y un Par con cada", + "carta de palo diferente" + }, + ['paperback_Spectrum Five'] = { + "5 cartas de la misma categoría y", + "cada una de palo diferente" + }, + }, + labels = { + paperback_blue_clip = "Clip Azul", + paperback_red_clip = "Clip Rojo", + paperback_orange_clip = "Clip Naranja", + paperback_pink_clip = "Clip Rosado", + paperback_black_clip = "Clip Negro", + paperback_yellow_clip = "Clip Amarillo", + paperback_gold_clip = "Clip Dorado", + paperback_white_clip = "Clip Blanco", + paperback_green_clip = "Clip Verde", + paperback_purple_clip = "Clip Morado", + paperback_platinum_clip = "Clip de Platino", + paperback_dichrome = "Dicromático", + paperback_energized = "Energizado", + paperback_temporary = "Temporal", + paperback_corroded = "Corroida", + + } + } +} \ No newline at end of file diff --git a/localization/pt_BR.lua b/localization/pt_BR.lua index ac4707ca..310457db 100644 --- a/localization/pt_BR.lua +++ b/localization/pt_BR.lua @@ -1,511 +1,2433 @@ return { descriptions = { + Back = { + b_paperback_paper = { + name = "Baralho de Papel", + text = { + "Curingas {C:legendary}Paperback{C:attention}{} têm {C:attention}3X", + "mais chance de aparecer,", + "comece a tentativa com o", + "Curinga {C:attention,T:j_paperback_shopping_center}#1#{}" + }, + }, + b_paperback_proud = { + name = "Baralho do Orgulho", + text = { + "Comece com um conjunto completo de", + "{C:hearts}Copas{}, {C:diamonds}Ouros{}, {C:spades}Espadas", + "{C:clubs}Paus{}, {C:paperback_crowns}Coroas{} e {C:paperback_stars}Estrelas" + }, + }, + b_paperback_silver = { + name = "Baralho Prateado", + text = { + "Comece a tentativa com o", + "cupom {C:paperback_minor_arcana,T:v_paperback_celtic_cross}#1#{}", + "e uma {C:paperback_minor_arcana,T:c_paperback_nine_of_cups}#2#" + }, + }, + b_paperback_dreamer = { + name = "Baralho Sonhador", + text = { + "Comece a tentativa com um", + "{C:paperback_minor_arcana,T:c_paperback_apostle_of_wands}#1# {C:paperback_temporary}temporário.", + "{C:attention}#2#{} espaço de Curinga" + }, + }, + b_paperback_antique = { + name = "Baralho Antigo", + text = { + "Pacotes de {C:tarot}Arcanos{} não", + "aparecem mais na loja", + "Pacotes de {C:paperback_minor_arcana}Arcanos Menores", + "são {C:attention}3X{} mais comuns" + }, + }, + b_paperback_passionate = { + name = "Baralho Passional", + text = { + "Após derrotar cada", + "{C:attention}Blind de Chefe{}, ganhe uma", + "{C:attention,T:tag_paperback_high_risk}#1#", + "Sem {C:money}Juros" + }, + }, + }, + Blind = { + bl_paperback_quarter = { + name = "A Semínima", + text = { + "#1# em #2# cartas", + "recebem desvantagem" + }, + }, + bl_paperback_half = { + name = "A Mínima", + text = { + "Reduz pela metade todas as", + "probabilidades listadas" + }, + }, + bl_paperback_whole = { + name = "A Semibreve", + text = { + "Classes pontuadas anteriormente", + "nesta Aposta recebem desvantagem" + }, + }, + bl_paperback_rest = { + name = "A Pausa", + text = { + "#1# em #2# cartas numeradas", + "são compradas viradas para baixo" + }, + }, + bl_paperback_flat = { + name = "O Bemol", + text = { + "Diminui a classe das", + "cartas jogadas" + }, + }, + bl_paperback_sharp = { + name = "O Sustenido", + text = { + "Aumenta a classe das", + "cartas jogadas" + }, + }, + bl_paperback_natural = { + name = "O Bequadro", + text = { + "Cartas em mãos de poker", + "acima do seu nível de mão", + "mais baixo recebem desvantagem" + }, + }, + bl_paperback_coda = { + name = "A Coda", + text = { + "Cartas e Curingas", + "não podem ser movidos" + }, + }, + bl_paperback_taupe_treble = { + name = "Agudo Taupe", + text = { + "Deve jogar uma", + "carta Melhorada" + }, + }, + }, Joker = { - j_paperback_cream_liqueur = { - name = "Licor Creme", + j_paperback_golden_egg = { + name = "Ovo Dourado", + text = { + "Quando uma {C:attention}mão secreta{} é jogada,", + "ganha o valor de venda", + "do {C:attention}Curinga{} à direita" + }, + }, + j_paperback_burning_pact = { + name = "Pacto Ardente", + text = { + "Se um {C:attention}descarte{} tem apenas {C:attention}#1#{} carta", + "compre {C:attention}#2#{} cartas adicionais" + }, + }, + j_paperback_blade_dance = { + name = "Dança das Lâminas", + text = { + "Quando {C:attention}Blind{} é selecionado,", + "cria {C:attention}#1#{} {C:attention}#2#s{} {C:paperback_temporary}", + "aleatórias na sua mão" + }, + }, + j_paperback_claw = { + name = "Garra", + text = { + "Quando um {C:attention}#1#{} é pontuado, {C:attention}#1#s{} pontuados", + "dão {C:mult}+#2#{} Multi adicional", + "Reseta no {C:attention}fim da rodada", + "{C:inactive}(No momento {C:mult}+#3#{C:inactive} Multi)" + }, + }, + j_paperback_chaplin = { + name = "Chaplin", + text = { + "Ao comprar um {C:attention}Cupom{}, também", + "ganha a versão {C:attention}aprimorada{}" + }, + }, + j_paperback_milk_tea = { + name = "Chá com Leite", + text = { + "{C:purple}Equilibra{} {C:attention}#1#%{} de {C:chips}Fichas{} e {C:mult}Multi", + "Reduz em {C:attention}#2#%{} se após equilibrar", + "{C:mult}Multi{} ficou {C:attention}maior{} que {C:chips}Fichas" + }, + }, + j_paperback_nichola = { + name = "Nichola", + text = { + "Cartas {C:attention}de Realeza{} {C:attention}na mão", + "contam na {C:attention}pontuação" + }, + }, + j_paperback_the_dynasty = { + name = "A Dinastia", + text = { + "{X:mult,C:white}X#1#{} Multi se a mão jogada", + "contém", + "um {C:attention}#2#" + }, + }, + j_paperback_lurid_joker = { + name = "Curinga Lúgubre", + text = { + "{C:chips}+#1#{} Fichas se a mão jogada", + "contém", + "um {C:attention}#2#{}" + }, + }, + j_paperback_zealous_joker = { + name = "Curinga Zeloso", + text = { + "{C:mult}+#1#{} Multi se a mão jogada", + "contém", + "um {C:attention}#2#" + }, + }, + j_paperback_deviled_egg = { + name = "Ovo Cozido", + text = { + "A primeira carta pontuada", + "a cada rodada torna-se {C:attention}Dourada{}.", + "Consumido em {C:attention}#1#{} rodadas" + }, + }, + j_paperback_pear = { + name = "Pera", + text = { + "Este Curinga ganha {C:chips}+#2#{} Fichas se a mão", + "jogada contém um {C:attention}#1#{}. Caso contrário,", + "este Curinga perde {C:chips}-#3#{} Fichas.", + "Comido se as Fichas ficarem abaixo de 0", + "{C:inactive}(Atualmente {C:chips}+#4#{C:inactive} Fichas)" + }, + }, + j_paperback_the_one_who_waits = { + name = "Aquele que Espera", + text = { + "Se a mão jogada tem um {C:attention}#1#{} que {C:attention}pontua", + "{C:green}#2# em #3#{} chance de ganhar {X:mult,C:white}X#4#{} Multi", + "{C:green}#5# em #6#{} chance de gerar um Tarô {C:tarot}#7#{}", + "{C:inactive}(Deve ter espaço) (Atualmente {X:mult,C:white}X#8#{C:inactive} Multi)" + }, + }, + j_paperback_blood_rain = { + name = "Chuva de Sangue", + text = { + "{C:attention}#1#s{} dão {C:mult}Multi{} igual", + "à {C:attention}classe{} das cartas na mão", + "em vez do seu {C:chips}valor de fichas{}" + }, + }, + j_paperback_pinot_noir = { + name = "Pinot Noir", + text = { + "As próximas {C:attention}#1#{} vezes que uma {C:attention}#2#", + "ativar, dá {C:mult}#3#{} Multi adicional" + }, + }, + j_paperback_jestosterone = { + name = "Bobosterona", + text = { + "{C:attention}#1#s{} pontuadas se tornam {C:attention}#2#s{}" + }, + }, + j_paperback_jestrogen = { + name = "Bobostrógeno", + text = { + "{C:attention}#1#s{} e {C:attention}#2#s{} pontuados se tornam {C:attention}#3#s{}" + }, + }, + j_paperback_langely = { + name = "L'angely", + text = { + "Ganha metade do {C:money}valor de venda{} de todos", + "os Curingas ao derrotar um {C:attention}Big Blind.", + "Ao derrotar um {C:attention}Blind de Chefe{}, ganha", + "o {C:money}valor de venda{} completo de todos os Curingas" + }, + }, + j_paperback_pedrillo = { + name = "Pedrillo", + text = { + "Se a mão de pontuação contém uma {C:attention}Dama{},", + "sobe o nível da {C:attention}mão de pôquer{} jogada" + }, + }, + j_paperback_double_dutchman = { + name = "Holandês Duplo", + text = { + "Cartas {C:attention}na mão{} têm {C:green}#1# em #2#", + "chance de ganhar {C:attention}melhorias{},", + "{C:attention}selos{} ou {C:attention}edições{} aleatórias", + "pelas próximas {C:attention}#3#{} mãos" + }, + }, + j_paperback_one_sin_and_hundreds_of_good_deeds = { + name = "Um Pecado e Centenas de Boas Ações", + text = { + "{C:attention}3s{} e {C:attention}Cartas Sem Classe{} pontuados", + "dão {C:mult}+#1#{} Multi quando pontuados", + "{C:inactive}''Se alimenta do mal''" + }, + }, + j_paperback_one_sin_and_hundreds_of_good_deeds_fed = { + name = "{C:red}Um Pecado e Centenas de Boas Ações{}", + text = { + "{C:attention}3s{} e {C:attention}Cartas Sem Classe{} pontuados", + "dão {C:mult}+Multi{} para cada", + "carta restante no baralho quando pontuados", + "{C:inactive}(No momento {C:mult}+#2#{C:inactive})" + }, + }, + j_paperback_white_night = { + name = "Noite Branca", + text = { + "Destrói todas as cartas pontuadas não-{C:attention}Apóstolo{}", + "no final da mão. {C:attention}Apóstolos{} pontuados", + "dão {X:mult,C:white}X#1#{} Multi. Jogar uma mão sem", + "{C:attention}Apóstolos destrói{} um Curinga aleatório.", + "{C:attention}Apóstolos{} descartados são {C:attention}destruídos{}" + }, + }, + j_paperback_as_above_so_below = { + name = "Como acima, Assim Abaixo", + text = { + "Jogar uma mão de pôquer de cinco cartas com um", + "{C:attention}Apóstolo{} cria uma carta de {C:purple}Tarô{},", + "se a mão também contém uma {C:attention}Sequência{}", + "cria uma carta {C:spectral}Espectral{} ao invés", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_plague_doctor = { + name = "Doutor da Peste", + text = { + "Se a mão jogada é uma Carta Alta,", + "converte a carta pontuada em", + "um {C:attention}Apóstolo{}. Cada {C:attention}Apóstolo{}", + "na mão dá {X:mult,C:white}X#1#{} Multi" + }, + }, + j_paperback_king_me = { + name = "Me Coroe", + text = { + "{V:1}#1#{} pontuadas aumentam", + "sua classe em {C:attention}#2#{}" + }, + }, + j_paperback_gambit = { + name = "Gambito", + text = { + "Se a mão jogada contém uma {V:1}#1#{} pontuando,", + "a primeira {V:1}#1#{} pontuada {C:attention}destrói{}", + "a primeira não-{V:1}#1#{} na mão", + "e ganha seu {C:chips}valor de Fichas{}" + }, + }, + j_paperback_solar_eclipse = { + name = "Eclipse Solar", + text = { + "{C:paperback_light_suit}Naipes claros{} pontuados", + "se tornam {V:1}#1#" + }, + }, + j_paperback_prism = { + name = "Prisma", + text = { + "Se a mão jogada contém um {C:attention}#1#{},", + "converte todas as {C:attention}cartas pontuadas{} em", + "{C:attention}naipes diferentes{} aleatórios" + }, + }, + j_paperback_master_spark = { + name = "Centelha Mestra", + text = { + "Se a mão jogada contém um {C:attention}Espectro{},", + "destrói todas as cartas {C:attention}na mão{} e", + "todas as cartas jogadas ganham {C:dark_edition}Policromo", + "{S:1.1,C:red,E:2}se autodestrói" + }, + }, + j_paperback_j_and_js = { + name = "J&J's", + text = { + "Se a mão jogada contém", + "{C:attention}Espectro{}, cria {C:attention}#1#{} {C:attention}Marcas{} aleatórias", + "Consumido em {C:attention}#2#{} rodadas" + }, + }, + j_paperback_blue_star = { + name = "Estrela Azul", + text = { + "Ganha {X:chips,C:white}X#1#{} Fichas quando uma {V:1}#2#{} pontua", + "Perde {X:chips,C:white}X#3#{} Fichas quando um {V:2}#4#{} pontua", + "{C:inactive}(No momento {X:chips,C:white}X#5#{C:inactive} Fichas)" + }, + }, + j_paperback_shadowmantle = { + name = "Mantossombra", + text = { + "{V:1}#1#{} pontuados têm", + "{C:green}#2# em #3#{} chance de criar", + "uma {C:dark_edition}Marca {C:attention}Negativa{}" + }, + }, + j_paperback_shooting_star = { + name = "Estrela Cadente", + text = { + "{V:1}#1#{} pontuadas têm", + "{C:green}#2# em #3#{} chance de", + "criar a carta de {C:planet}Planeta{}", + "para a {C:attention}mão de pôquer{} jogada" + }, + }, + j_paperback_black_star = { + name = "Estrela Negra", + text = { + "{C:paperback_dark_suit}Naipes escuros{} pontuados", + "se tornam {V:1}#1#" + }, + }, + j_paperback_high_speed_rail = { + name = "Trem de Alta Velocidade", + text = { + "Este Curinga {C:blue}ganha{} Multi igual ao", + "{C:money}custo{} de {C:blue}Curingas comprados{}", + "Este Curinga {C:red}perde{} Multi igual ao", + "{C:money}valor de venda{} de {C:red}Curingas vendidos{}", + "{C:inactive}(Atualmente {C:mult}+#1#{C:inactive} Multi)" + }, + }, + j_paperback_aurora_borealis = { + name = "Aurora Boreal", + text = { + "Este Curinga ganha {X:mult,C:white}X#1#{} Multi", + "para cada carta de {C:attention}Curinga com edição{}", + "{s:0.9,C:dark_edition}Negativos{s:0.9,C:inactive} são excluídos{}", + "{C:inactive}(Atualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_joke_master = { + name = "Mestre das Piadas", + text = { + "Este Curinga ganha {C:mult}+#1#{} Multi se", + "mão jogada é {C:attention}#2#{}", + "{s:0.8}A mão muda a cada rodada", + "{C:inactive}(Atualmente {C:mult}+#3#{C:inactive} Multi)" + }, + }, + j_paperback_ultra_rare = { + name = "Ultra Raro", + text = { + "Quando {C:attention}Blind{} é selecionado, crie", + "{C:blue}Curingas {C:attention}Comuns{}, {C:green}Incomuns", + "e {C:red}Raros{} {C:paperback_temporary}Temporários{} {C:dark_edition}Negativos", + "aleatórios com valor de venda {C:money}$#1#{}" + }, + }, + j_paperback_manilla_folder = { + name = "Pasta De Arquivos", + text = { + "Ganhe {C:money}$#1#{} no fim da rodada", + "para cada {C:attention}Clipe{} único", + "em seu baralho completo", + "{C:inactive}(Atualmente {C:money}$#2#{C:inactive})" + }, + }, + j_paperback_clippy = { + name = "Clippy", + text = { + "Adiciona um {C:attention}Clipe{} aleatório a uma", + "carta aleatória no seu baralho", + "quando o {C:attention}Blind{} é selecionado" + }, + }, + j_paperback_jimbos_joyous_joker_jamboree = { + name = "Festival Alegre de Curingas do Jimbo", + text = { + "Cria uma carta de {C:paperback_minor_arcana}Arcanos Menores{} aleatória", + "para cada {C:attention}#1#{C:inactive} [#2#]{} cartas pontuadas" + }, + unlock = { + "Tenha {C:attention}#1#{} ou mais", + "{C:attention}naipes{} no", + "seu baralho" + }, + }, + j_paperback_the_normal_joker = { + name = "O Curinga Normal", + text = { + "Reaciona todos os", + "{C:blue}Curingas {C:attention}Comuns" + }, + }, + j_paperback_better_call_jimbo = { + name = "Melhor Chamar o Jimbo", + text = { + "{X:mult,C:white}X#1#{} Multi para", + "cada {C:money}$#2#{} possuído", + "Não ganha {C:money}Juros{}", + "{C:inactive}(Atualmente {X:mult,C:white}X#3#{C:inactive} Multi)" + }, + }, + j_paperback_touch_tone_joker = { + name = "Curinga Discado", + text = { + "Ao abrir um pacote {C:tarot}Arcano{},", + "{C:planet}Celestial{} ou {C:spectral}Espectral{},", + "{C:attention}compre{} a {C:attention}primeira carta{} dele", + "para seus consumíveis", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_joker_cd_i = { + name = "Curinga CD-i", + text = { + "{C:green}#1# em #2#{} chance de criar", + "uma carta {C:planet}Planeta{} aleatória se", + "mão jogada tem exatamente {C:attention}#3#{} cartas", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_determination = { + name = "Determinação", + text = { + "Previne a morte, ao morrer", + "{C:attention}#1#{} Aposta, {C:attention}#1#{} tamanho de mão", + "e {C:red}se autodestrói" + }, + }, + j_paperback_blue_marble = { + name = "Berlinde Azul", + text = { + "{C:green}#1# em #2#{} chance de criar", + "uma carta {C:planet}Planeta{} aleatória se", + "{C:attention}mão pontuada{} contém um {V:3}#3#{}", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_boundary_of_death = { + name = "Limiar da Morte", + text = { + "{C:attention}#1#s{} têm", + "{C:green}#2# em #3#{} chance de", + "adicionalmente dar {C:red}+#4#{} Multi" + }, + }, + j_paperback_festive_joker = { + name = "Curinga Festivo", + text = { + "{C:attention}#1#s{} têm {C:green}#2# em #3#", + "chance de criar um", + "{C:attention}Consumível{} aleatório quando pontuadas", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_spotty_joker = { + name = "Curinga Com Manchinhas", + text = { + "Este Curinga ganha {X:mult,C:white}X#1#{} Multi", + "se a {C:attention}mão pontuada{} contém uma {C:attention}#2#{},", + "senão perde {X:mult,C:white}X#3#{} Multi", + "{C:inactive}(No momento {X:mult,C:white}X#4#{C:inactive} Multi)" + }, + }, + j_paperback_sommelier = { + name = "Sommelier", + text = { + "Se o {C:attention}primeiro descarte{}", + "de uma rodada contém", + "um {C:attention}#1#{},", + "o primeiro {C:attention}#1#{}", + "descartado ganha", + "um {C:attention}selo{} aleatório" + }, + }, + j_paperback_medic = { + name = "Médico", + text = { + "{C:attention}#1#s{} reativam", + "cartas uma vez adicional" + }, + }, + j_paperback_matcha = { + name = "Matcha", + text = { + "Este Curinga ganha {C:chips}+#1#{} Fichas", + "quando uma carta é pontuada", + "{C:green}#2# em #3#{} chance de", + "consumir no {C:red}descarte", + "{C:inactive}(Atualmente {C:chips}+#4#{C:inactive} Fichas)" + }, + }, + j_paperback_you_are_a_fool = { + name = "Você É um Tolo!", + text = { + "Se a mão pontuada contém {C:attention}#1#", + "ou mais cartas de {C:attention}de Realeza{}, converte", + "{C:attention}todas{} as cartas {C:attention}na mão{} para", + "a carta pontuada mais à {C:attention}esquerda", + "{S:1.1,C:red,E:2}se autodestrói" + }, + }, + j_paperback_kintsugi_joker = { + name = "Curinga Kintsugi", + text = { + "Aumenta o pagamento máximo", + "de {C:attention}#2#s{} em {C:money}$#1#{} quando", + "um {C:attention}#2#{} é destruído", + "{C:inactive}(Atualmente aumentado em {C:money}$#3#{C:inactive})" + }, + }, + j_paperback_ddakji = { + name = "Ddakji", + text = { + "{C:green}#1# em #2#{} cartas são compradas", + "viradas para baixo, se a mão pontuada", + "contiver uma carta {C:attention}virada para cima{} e", + "uma {C:attention}virada para baixo{}, cria", + "um Consumível aleatório", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_weather_radio = { + name = "Rádio do Tempo", + text = { + "Este Curinga ganha {X:mult,C:white}X#1#{} Multi se a", + "{C:attention}mão de pôquer{} contém um {C:attention}#2#{}.", + "Durante {C:attention}Blind de Chefe{}, se este Curinga tem", + "{X:mult,C:white}X#3#{} Multi ou mais, desativa o {C:attention}Blind de Chefe{}", + "e este Curinga perde {X:mult,C:white}X#4#{} Multi", + "{C:inactive}(Atualmente {X:mult,C:white}X#5#{C:inactive} Multi)", + "{s:0.75}mão de pôquer muda no fim da rodada" + }, + }, + j_paperback_power_surge = { + name = "Surto de Energia", + text = { + "{C:attention}#1#s{} jogados dão {X:mult,C:white}X#2#{}", + "Multi quando pontuados e", + "têm {C:green}#3# em #4#{}", + "chance de {C:red}destruir{} uma", + "carta {C:attention}na mão{}" + }, + }, + j_paperback_bismuth = { + name = "Bismuto", + text = { + "{V:1}#1#{} e {V:2}#2#{} jogadas têm", + "{C:green}#3# em #4#{} chance de receber {C:dark_edition}Laminado{},", + "{C:dark_edition}Holográfico{} ou {C:dark_edition}Policromático" + }, + }, + j_paperback_deadringer = { + name = "Alguém Morreu Em Meu Lugar", + text = { + "Reativa {C:attention}#1#es{} e {C:attention}#2#s{} pontuados", + "uma vez, e {C:attention}#3#s{} pontuados duas vezes" + }, + }, + j_paperback_ncj = { + name = "CuringasSemDireitosAutorais", + text = { + "Este Curinga dá {C:chips}+#1#{} Fichas para", + "cada {C:money}dólar{} de {C:attention}valor de venda", + "de todos os outros Curingas possuídos", + "{C:inactive}(Atualmente {C:chips}+#2#{C:inactive} Fichas)" + }, + }, + j_paperback_full_moon = { + name = "Lua Cheia", + text = { + "Cartas de {C:planet}Planeta{} têm", + "{C:green}#1# em #2#{} chance de", + "subir de nível {C:attention}novamente" + }, + }, + j_paperback_sake_cup = { + name = "Copo de Sakê", + text = { + "Após uma mão ser jogada, {C:attention}#1#s", + "{C:attention}na mão{} têm {C:green}#2# em #3#{}", + "chance de criar a carta de {C:planet}Planeta", + "da {C:attention}mão de pôquer{} jogada", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_resurrections = { + name = "Ressurreições", + text = { + "{C:green}#1# em #2#{} chance de {C:attention}retornar{}", + "{C:attention}Curingas{} vendidos e criar", + "uma cópia {C:attention}extra{} {C:dark_edition}Negativa{}", + "com {C:money}-$#3#{} de valor de venda", + "{s:0.8}A chance aumenta em {s:0.8,C:green}#4#{s:0.8} ao falhar", + "{S:1.1,C:red,E:2}se autodestrói" + }, + }, + j_paperback_book_of_vengeance = { + name = "Livro da Vingança", + text = { + "Após derrotar um {C:attention}Blind de Chefe{},", + "destrói a si mesmo e o {C:attention}Curinga{} à sua esquerda,", + "então faz uma cópia do {C:attention}Curinga{} à sua direita" + }, + }, + j_paperback_b_soda = { + name = "B-Soda", + text = { + "Quando {C:attention}Blind{} é selecionado,", + "ganha {C:blue}+#1#{} Mão", + "Consumido se {C:attention}Blind{} for", + "limpo com {C:blue}0{} mãos", + "restantes" + }, + }, + j_paperback_angel_investor = { + name = "Investidor Anjo", + text = { + "Pular um {C:attention}Blind{} ou derrotar", + "um {C:attention}Blind de Chefe{} concede", + "uma {C:money}Marca de Investimento Angelical" + }, + }, + j_paperback_ice_cube = { + name = "Cubo de Gelo", + text = { + "{X:mult,C:white}X#1#{} Multi para cada", + "{C:attention}Curinga de Comida{} que você tem", + "{s:0.9}Derrete se a {s:0.9,C:attention}pontuação pegar fogo", + "{C:inactive}(Atualmente {X:mult,C:white}X#3#{C:inactive} Multi)" + }, + }, + j_paperback_champagne = { + name = "Champanhe", + text = { + "Durante um {C:attention}Blind de Chefe{}, cartas pontuadas", + "rendem {C:money}$#1#{}, {C:attention}dobrado{} se", + "a carta tiver um {C:attention}selo", + "{C:attention}Consumido{} em {C:attention}#2#{} rodadas" + }, + }, + j_paperback_pocket_pair = { + name = "Par de Bolso", + text = { + "Ganhe {C:money}$#1#{} por {C:attention}#2#{} comprado", + "no início da rodada" + }, + }, + j_paperback_the_quiet = { + name = "O Silencioso", + text = { + "{X:mult,C:white}X#1#{} Multi para cada", + "carta abaixo de {C:attention}#2#{}", + "no seu baralho completo", + "{C:inactive}(Atualmente {X:mult,C:white}X#3#{C:inactive} Multi)" + }, + }, + j_paperback_alert = { + name = "Alerta", + text = { + "Se a {C:attention}mão jogada{} for uma única", + "carta {C:attention}de Realeza{}, destrua-a", + "{C:inactive}(#1#/#2#)?" + }, + }, + j_paperback_legacy = { + name = "Legado", + text = { + "Quando uma carta não-{C:attention}Melhorada{} é", + "destruída, adiciona seu {C:chips}valor de Fichas", + "como {C:mult}Multi{} a este Curinga", + "{C:inactive}(Atualmente {C:mult}+#1#{C:inactive} Multi)" + }, + }, + j_paperback_telamon = { + name = "Telamon", + text = { + "Se a {C:attention}mão final{} contém", + "um {C:attention}#1#{}, cria uma carta", + "{C:paperback_minor_arcana}Arcano Menor{} de {C:attention}Espadas{} aleatória", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_backpack = { + name = "Mochila", + text = { + "{C:money}Lojas{} têm um", + "Pacote Bufão {C:attention}grátis{} adicional" + }, + }, + j_paperback_mexican_train = { + name = "Trem Mexicano", + text = { + "{C:attention}#1#s{} pontuados dão {C:money}$#2#", + "para cada {C:attention}#1#{} pontuando", + "{C:inactive}(No momento {C:money}$#3#{C:inactive})" + }, + }, + j_paperback_chocolate_joker = { + name = "Curinga de Chocolate", + text = { + "Este Curinga ganha {X:chips,C:white}X#1#{} Fichas", + "para cada carta de {C:attention}Curinga{}", + "{C:inactive}(Atualmente {X:chips,C:white}X#2#{C:inactive} Fichas)" + }, + }, + j_paperback_jester_of_nihil = { + name = "Bobo de Nihil", + text = { + "{C:attention}Desvantagem{} o naipe da", + "{C:attention}última carta pontuada{}", + "{C:mult}+#1#{} Multi para cada carta com {C:attention}desvantagem{}", + "no seu baralho completo", + "{C:inactive}(Atualmente {V:1}#2#{C:inactive} e {C:mult}+#3#{C:inactive} Multi)" + }, + }, + j_paperback_forgery = { + name = "Falsificação", + text = { + "Copia a habilidade de um {C:attention}Curinga{} aleatório", + "a cada mão, se fornecer {X:mult,C:white}XMulti{},", + "{C:mult}Multi{} ou {C:chips}Fichas{}, multiplica seus valores", + "entre {X:attention,C:white}X#1#{} e {X:attention,C:white}X#2#{}", + "{C:inactive}(Atualmente {C:attention}#3#{C:inactive} em {X:attention,C:white}X#4#{C:inactive})" + }, + }, + j_paperback_the_world = { + name = "O Mundo", + text = { + "Todas as {C:blue}mãos{} e {C:red}descartes{} são", + "considerados a {C:attention}primeira{} e", + "{C:attention}última{} da rodada" + }, + }, + j_paperback_epic_sauce = { + name = "Molho Épico", + text = { + "{X:mult,C:white}X#1#{} Multi", + "Destrói um {C:attention}Curinga{} aleatório", + "se a mão jogada não for", + "a {C:attention}primeira mão{} da rodada" + }, + }, + j_paperback_find_jimbo = { + name = "Encontre o Jimbo", + text = { + "Cada {C:attention}#1#{} de {V:1}#2#{} jogada", + "rende {C:money}$#3#{} quando pontuada", + "{s:0.8}Carta muda a cada rodada" + }, + }, + j_paperback_forlorn = { + name = "Abandonado", + text = { + "Se a {C:attention}mão pontuada{} contém apenas", + "{V:1}#1#{}, destrói uma carta aleatória", + "{C:attention}na mão" + }, + }, + j_paperback_cream_liqueur = { + name = "Licor Creme", + text = { + "{C:attention}Marcas{} geram {C:money}$#1#{} quando ativadas", + "Consumida em {C:attention}#2#{} rodadas", + "{C:inactive}(Reseta quando uma {C:attention}Marca{C:inactive} é adquirida)" + }, + }, + j_paperback_coffee = { + name = "Café", + text = { + "{C:attention}+#1#{} tamanho de mão,", + "aumenta em {C:attention}#2#{} quando {C:attention}Blind{} é pulado.", + "{C:green}#3# em #4#{} chance desta carta ser consumida quando", + "{C:attention}Small Blind{} ou {C:attention}Big Blind{} é selecionado" + }, + }, + j_paperback_basic_energy = { + name = "Energia Básica de Curinga", + text = { + "Usar qualquer {C:attention}Consumível{} tem uma", + "{C:green}#1# em #2#{} chance de criar uma cópia", + "{C:inactive}(Não pode fazer cópias de uma cópia)", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_big_misser = { + name = "Grande Perda", + text = { + "{X:mult,C:white}X#1#{} Multi para cada espaço", + "vazio de consumível", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{}{C:inactive} Multi)" + }, + }, + j_paperback_freezer = { + name = "Freezer", + text = { + "Cria um {C:attention}Curinga de Comida{} {C:dark_edition}Negativo{}", + "após derrotar um {C:attention}Blind de Chefe{}" + }, + unlock = { + "Adquira um {C:attention}Curinga de Comida{}", + "{C:dark_edition}Negativo{}" + }, + }, + j_paperback_everything_must_go = { + name = "Queima De Estoque!", + text = { + "Lojas têm {C:attention}#1#{} {C:attention}Cupons{} adicionais", + "à venda" + }, + }, + j_paperback_card_sleeve = { + name = "Capa de Carta", + text = { + "Venda esta carta para tornar o {C:attention}Curinga", + "à direita {C:attention}Eterno{}" + }, + }, + j_paperback_its_tv_time = { + name = "É Hora da TV!", + text = { + "{C:paperback_stars}Estrelas{} são consideradas {C:attention}Cartas Bônus{}", + "{C:attention}Cartas Bônus{} são consideradas {C:paperback_stars}Estrelas{}" + }, + }, + j_paperback_da_capo = { + name = "Da Capo", + text = { + "Dá {X:mult,C:white}X#1#{} Multi e {C:attention}desvantagens", + "a todos, exceto um {C:attention}naipe{} a cada mão", + "na seguinte ordem:", + "{C:clubs}Paus{}, {C:spades}Espadas{}, {C:diamonds}Ouros{}, {C:hearts}Copas{}, {C:inactive}Nenhum{}", + "{C:inactive}(Atualmente: {V:1}#2#{C:inactive}){}" + }, + }, + j_paperback_complete_breakfast = { + name = "Café da Manhã Completo", + text = { + "{C:mult}+#1#{} Multi e {C:chips}+#2#{} Fichas", + "{C:green}#3# em #4#{} chance desta carta ser", + "consumida após a mão jogada", + "A chance aumenta em {C:attention}#5#{} após", + "cada mão jogada" + }, + }, + j_paperback_emergency_broadcast = { + name = "Transmissão de Emergência", + text = { + "Pontuar {C:attention}5s{} e {C:attention}8s{} fornece", + "{C:mult}+#1#{} Multi e {C:chips}+#2#{} Fichas" + }, + }, + j_paperback_moribund = { + name = "Moribundo", + text = { + "Este Curinga ganha {C:mult}+#1#{} Multi quando um {C:attention}blind", + "é limpo com {C:attention}0{C:chips} mãos{} restantes.", + "Dobra seu {C:mult}Multi{} se o blind não for limpo", + "{C:inactive}(No momento, {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_crispy_taco = { + name = "Taco Crocante", + text = { + "{X:chips,C:white}X#1#{} Fichas. {C:green}#2# em #3#{} chance desta carta", + "ser consumida no fim da rodada." + }, + }, + j_paperback_furioso = { + name = "Furioso", + text = { + "Este Curinga ganha {X:mult,C:white}X#1#{} Multi para", + "cada {C:attention}classe {} única pontuada.", + "Reseta após derrotar um {C:attention}blind chefe", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{} {C:inactive}Multi)", + "{C:inactive}(Classes jogadas:{C:attention}#3#{C:inactive})" + }, + }, + j_paperback_soft_taco = { + name = "Taco Macio", + text = { + "{X:mult,C:white}X#1#{} Multi. {C:green}#2# em #3#{} chance desta carta", + "ser consumida no fim da rodada." + }, + }, + j_paperback_charred_marshmallow = { + name = "Marshmallow Torrado", + text = { + "Pontuar {C:spades}Espadas{} dá {C:mult}+#1#{} Multi", + "{C:green}#2# em #3#{} chance desta carta ser", + "consumida no fim da rodada" + }, + }, + j_paperback_joker_cookie = { + name = "Biscoito do Curinga", + text = { + "Ganha {C:money}$#1#{} no fim da rodada", + "O pagamento aumenta em {C:money}$#2#{} ao sacar", + "{C:green}#3# em #4#{} chance desta carta", + "ser consumida no fim da rodada" + }, + }, + j_paperback_pop_stick = { + name = "Palito de Pirulito", + text = { + "Concede {X:mult,C:white}X#1#{} Multi para cada", + "outro Curinga {C:attention}\"Palito\"{} que você possui...", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_pool_table = { + name = "Mesa de Sinuca", + text = { + "Se a primeira mão da rodada", + "não pontuar {C:attention}cartas de realeza{},", + "cria a carta de {C:planet}Planeta{} da", + "mão de pôquer jogada", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_bicycle = { + name = "Bicicleta", + text = { + "{C:attention}Cartas Naipe Curinga{} fornecem {C:mult}Multi", + "igual ao seu {C:chips}Bônus de Fichas{},", + "então {X:mult,C:white}X#1#{} Multi" + }, + }, + j_paperback_stamp = { + name = "Selo Postal", + text = { + "{C:green}#1# em #2#{} chance deste", + "Curinga ganhar {C:chips}+#3#{} Fichas quando", + "qualquer carta com um {C:attention}selo{} for pontuado", + "{C:inactive}(No momento, {C:chips}+#4#{C:inactive} Fichas)" + }, + }, + j_paperback_sticky_stick = { + name = "Palito Grudento", + text = { + "Concede {X:mult,C:white}X#1#{} Multi para cada", + "outro Curinga {C:attention}\"Palito\"{} que você possui...", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_shopping_center = { + name = "Shopping Center", + text = { + "{C:money}Lojas{} têm uma", + "{C:attention}vaga adicional para cards" + }, + }, + j_paperback_tutor = { + name = "Tutor", + text = { + "{C:attention}Cartas numeradas{} têm", + "o {C:attention}dobro{} do seu valor total de {C:chips}Fichas" + }, + }, + j_paperback_ghost_cola = { + name = "Cola Fantasma", + text = { + "Venda esta carta para criar um {C:attention}#1#{}", + "e uma carta aleatória {C:dark_edition}Negativa{} {C:spectral}Espectral{}." + }, + }, + j_paperback_river = { + name = "Rio", + text = { + "Se a mão jogada contiver {C:attention}5 cartas pontuando", + "{C:attention}{} ganha o bônus de {C:chips}Fichas{} da carta", + "de menor pontuação como {C:money}Dinheiro", + "{C:inactive}(Máximo de {C:money}$#1#{C:inactive})" + }, + }, + j_paperback_solemn_lament = { + name = "Lamento Solene", + text = { + "Este Curinga ganha {X:mult,C:white}X#1#{} Multi", + "se a mão pontuada contém tanto {C:paperback_dark_suit}naipes escuros{}", + "quanto {C:paperback_light_suit}naipes claros{}", + "{C:inactive}(No momento {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_hole_in_one = { + name = "Hole in One", + text = { + "Se a {C:chips}mão{} inicial da rodada vencer o {C:attention}blind{},", + "dobre o {C:attention}valor de venda{} de todas as {C:attention}cartas", + "{C:inactive}(Máximo de {C:money}$#1#{C:inactive} por rodada)", + "Quando esta carta for vendida, define o {C:attention}valor", + "{C:attention}de venda{} de todas as {C:attention}cartas{} para {C:money}$0" + }, + }, + j_paperback_mismatched_sock = { + name = "Meia Descombinada", + text = { + "Este Curinga ganha {X:mult,C:white}X#1#", + "Multi se a mão jogada", + "não contém um {C:attention}#2#", + "{C:inactive}(No momento {X:mult,C:white}X#3#{C:inactive} Multi)" + }, + }, + j_paperback_wild_plus_four = { + name = "+4 Curinga", + text = { + "{C:attention}+#1#{} tamanho de mão" + }, + }, + j_paperback_quick_fix = { + name = "Conserto Rápido", + text = { + "{C:attention}+#1#{} tamanho de mão", + "{C:green}#2# em #3#{} chance desta", + "carta ser destruída", + "no final da rodada" + }, + }, + j_paperback_skydiver = { + name = "Paraquedista", + text = { + "{C:white,X:mult}X#1#{} Multi se todas as {C:attention}cartas pontuadas{},", + "forem menores ou iguais à {C:attention}carta de menor valor", + "pontuada nesta rodada", + "{C:inactive}(Atualiza no final da mão jogada{C:inactive})", + "{C:inactive}(No momento,: {C:attention}#2#{C:inactive})" + }, + }, + j_paperback_surfer = { + name = "Surfista", + text = { + "Este Curinga ganha {C:chips}+#1#{} Fichas", + "para cada {C:attention}#3#{} na mão", + "no {C:attention}fim da rodada{}, e {C:chips}+#2#", + "Fichas para cada {C:attention}#3#{} pontuado", + "{C:inactive}(No momento {C:chips}+#4#{C:inactive} fichas)" + }, + }, + j_paperback_blue_bonnets = { + name = "Lupinos-Azuis", + text = { + "{C:clubs}Paus{} dão {X:mult,C:white}X#1#{} Multi quando pontuados.", + "Aumenta em {X:mult,C:white}X#2#{} Multi para cada", + "{C:clubs}Paus{} consecutivamente pontuado", + "{C:inactive}(Reseta após cada mão jogada)" + }, + }, + j_paperback_great_wave = { + name = "Grande Onda", + text = { + "Reativa a carta pontuada mais à {C:attention}direita{}", + "{C:attention}uma vez{} para cada {C:attention}carta pontuada{}" + }, + }, + j_paperback_caramel_apple = { + name = "Maçã Caramelada", + text = { + "{C:clubs}Paus{} pontuados dão {C:mult}+#1#{} Multi", + "{C:green}#2# em #3#{} chance desta carta ser", + "consumida no final da rodada" + }, + }, + j_paperback_nachos = { + name = "Nachos", + text = { + "{X:chips,C:white}X#1#{} Fichas,", + "perde {X:chips,C:white}X#2#{} Fichas", + "por {C:attention}carta{} descartada" + }, + }, + j_paperback_pride_flag_spectrums = { + name = "Bandeira do Orgulho", + text = { + "Ganha {C:chips}+#1#{} Fichas se a mão", + "jogada contém um {C:attention}Espectro", + "Reseta se a mão jogada", + "contém uma {C:attention}Sequência", + "{C:inactive}(Atualmente {C:chips}+#2#{} {C:inactive}Fichas)" + }, + }, + j_paperback_pride_flag_no_spectrums = { + name = "Bandeira do Orgulho", + text = { + "Ganha {C:mult}+#1#{} Multi se a mão pontuada", + "contém {C:attention}três{} naipes únicos", + "{C:inactive}(Atualmente {C:mult}+#2#{} {C:inactive}Multi)" + }, + }, + j_paperback_sacrificial_lamb = { + name = "Cordeiro Sacrificial", + text = { + "Ganha {C:mult}+#1#{} Multi por", + "cada carta ou Curinga {C:attention}destruído", + "{C:inactive}(No momento, {C:mult}+#2# {C:inactive}Multi)" + }, + }, + j_paperback_autumn_leaves = { + name = "Folhas de Outono", + text = { + "{C:diamonds}Ouros{} dão {X:mult,C:white}X#1#{} Multi quando pontuados.", + "Aumenta em {X:mult,C:white}X#2#{} Multi para cada", + "{C:diamonds}Ouros{} consecutivamente pontuado", + "{C:inactive}(Reseta após cada mão jogada)" + }, + }, + j_paperback_wild_prize = { + name = "[[PRÊMIO SELVAGEM!1!]]", + text = { + "{C:attention}Cartas Naipe Curinga{} têm {C:green}#1# em #2#{} chance", + "de serem {C:attention}reativadas{} e {C:green}#3# em #4#{} chance", + "de ganhar entre {C:money}#5#{} e {C:money}$#6#{} quando pontuadas" + }, + }, + j_paperback_wish_you_were_here = { + name = "Wish You Were Here", + text = { + "Dá {C:mult}Multi{} igual a {C:mult}#1#X{} o", + "{C:attention}valor de venda{} desta carta.", + "Ganha {C:money}$#2#{} do {C:attention}valor de venda{} no", + "final da rodada", + "{C:inactive}(No momento, {C:mult}+#3# {C:inactive}Multi){}" + }, + }, + j_paperback_calling_card = { + name = "Cartão de Visita", + text = { + "Este Curinga ganha {X:red,C:white}X#1#{} Multi", + "sempre que você derrota um {C:attention}Blind de Chefe{}", + "ou ativa sua {C:attention}habilidade{}", + "{C:inactive}(No momento, {}{X:red,C:white}X#2#{}{C:inactive} Multi){}" + }, + }, + j_paperback_subterfuge = { + name = "Subterfúgio", + text = { + "Destrua a {C:attention}primeira mão jogada{} de cada rodada", + "Ganha {X:mult,C:white}X#1#{} Multi para cada carta abaixo de {C:attention}#2#{}", + "{C:inactive}(No momento, {X:mult,C:white}X#3#{C:inactive} Multi)" + }, + }, + j_paperback_triple_moon_goddess = { + name = "Deusa da Lua Tripla", + text = { + "Se a mão jogada contém uma {C:attention}Trinca{},", + "{C:green}#1# em #2#{} chance de criar uma carta de {C:planet}Planeta{} aleatória e", + "{C:green}#3# em #4#{} chance de criar uma carta de {C:purple}Tarot{} aleatória" + }, + }, + j_paperback_triple_moon_goddess_minor_arcana = { + name = "Deusa da Lua Tripla", + text = { + "Se a mão jogada contém uma {C:attention}Trinca{},", + "{C:green}#1# em #2#{} chance de criar uma carta {C:tarot}Tarô{} aleatória e", + "{C:green}#3# em #4#{} chance de criar uma carta {C:paperback_minor_arcana}Arcano Menor{} aleatória", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_derecho = { + name = "Derecho", + text = { + "Ganha {X:mult,C:white}X#1#{} Multi se a {C:attention}mão pontuada", + "contiver apenas naipes {C:spades}escuros", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_jestrica = { + name = "Jestrica", + text = { + "{C:mult}+#1#{} Multi quando um {C:attention}8{} é pontuado", + "Reseta se nenhum {C:attention}8{} for pontuado", + "nesta rodada", + "{C:inactive}(No momento, {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_grand_strategy = { + name = "Grande Estratégia", + text = { + "Este Curinga dá {X:mult,C:white}X#1#{} Multi se", + "{C:attention}#2#{} {C:attention}melhorias{}, {C:attention}edições{},", + "ou {C:attention}selos{} únicos estiverem no seu baralho completo", + "{C:inactive}(No momento, {C:attention}#3#{C:inactive})" + }, + }, + j_paperback_ready_to_fly = { + name = "Pronto para Voar", + text = { + "Este Curinga ganha {X:chips,C:white}X#2#{} Fichas", + "sempre que um Curinga adjacente é {C:attention}ativado", + "{C:inactive}(Atualmente {X:chips,C:white}X#1#{C:inactive} Fichas)" + }, + }, + j_paperback_solar_system = { + name = "Sistema Solar", + text = { + "Dá {X:mult,C:white}X#1#{} Multi para", + "cada {C:attention}nível{} que os 9 {C:planet}Planetas{}", + "básicos compartilham", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{} {C:inactive}Multi)" + }, + }, + j_paperback_reference_card = { + name = "Carta de Referência", + text = { + "Ganha {X:mult,C:white}X#1#{} Multi para cada vez que {C:attention}todas{} as", + "{C:attention}mãos de poker básicas{} foram jogadas", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{} {C:inactive}Multi)" + }, + }, + j_paperback_dreamsicle = { + name = "Picolé dos Sonhos", + text = { + "Os {C:diamonds}Ouros{} pontuados dão {C:mult}+#1#{} Multi", + "{C:green}#2# em #3#{} chance desta carta ser", + "consumida no final da rodada" + }, + }, + j_paperback_jimbo_adventure = { + name = "Aventura do Jimbo", + text = { + "Pular um {C:attention}Blind{} cria", + "uma {C:attention}Marca{} aleatória" + }, + }, + j_paperback_union_card = { + name = "Cartão Sindical", + text = { + "O {C:attention}valor de venda{} de todas as {C:attention}cartas{} é fixado", + "em {C:money}$0{} até esta carta ser vendida", + "Dá {X:mult,C:white}X{} Multi igual ao", + "número de {C:diamonds}Ouros{} ou", + "{C:hearts}Copas{} pontuados na mão jogada" + }, + }, + j_paperback_cherry_blossoms = { + name = "Flor de Cerejeira", + text = { + "{C:hearts}Copas{} dão {X:mult,C:white}X#1#{} Multi quando pontuadas.", + "Aumenta em {X:mult,C:white}X#2#{} Multi para cada ", + "{C:hearts}Copas{} consecutivamente pontuada", + "{C:inactive}(Reseta após cada mão jogada)" + }, + }, + j_paperback_paranoia = { + name = "Paranoia", + text = { + "{C:paperback_light_suit}Naipes claros{} dão {C:mult}+#1#{} Multi", + "quando {C:attention}pontuados{} para cada carta de {C:paperback_dark_suit}naipe escuro", + "{C:attention}destruída{} nesta tentativa", + "{C:inactive}(No momento {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_unholy_alliance = { + name = "Aliança Profana", + text = { + "Este Curinga ganha {C:chips}+#1#{} Fichas", + "quando uma carta ou Curinga é {C:attention}destruído{}", + "{C:inactive}(No momento, {C:chips}+#2#{C:inactive} Fichas)" + }, + }, + j_paperback_summoning_circle = { + name = "Círculo de Invocação", + text = { + "Se a mão jogada contiver uma", + "{C:attention}Quina{}, crie uma cópia", + "de um {C:attention}consumível aleatório", + "{C:inactive}(Deve ter espaço)" + }, + }, + j_paperback_the_sun = { + name = "O Sol", + text = { + "Se a mão jogada contém apenas", + "{C:paperback_light_suit}Naipes Claros{} este Curinga", + "ganha {C:mult}+#1#{}, perde {C:mult}+#1#{}", + "quando um {C:paperback_dark_suit}Naipe Escuro{} é pontuado", + "{C:inactive}(Atualmente {C:mult}+#2#{C:inactive} Multi)" + }, + }, + j_paperback_pointy_stick = { + name = "Palito Pontiagudo", + text = { + "Dá {X:mult,C:white}X#1#{} Multi para cada", + "outro Curinga {C:attention}\"Palito\"{} que você possui...", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_prince_of_darkness = { + name = "Príncipe das Trevas", + text = { + "Se a mão pontuada contém uma carta de {C:hearts}Copas{} e", + "{C:attention}#1#{} outros naipes únicos, este Curinga dá", + "{X:mult,C:white}X#2#{} Multi para {C:attention}esta mão{} e {C:attention}as próximas #3#", + "{C:inactive}(No momento as próximas {C:attention}#4#{C:inactive} mãos)" + }, + }, + j_paperback_giga_size = { + name = "TAMANHO GIGA", + text = { + "Este Curinga ganha {X:mult,C:white}X#2#{} Multi", + "para cada mão jogada no {C:attention}Blind{} atual", + "{C:inactive}(Atualmente {X:mult,C:white}X#1#{C:inactive} Multi)" + }, + }, + j_paperback_popsicle_stick = { + name = "Palito de Picolé", + text = { + "Dá {X:mult,C:white}X#1#{} Multi para cada", + "outro Curinga {C:attention}\"Palito\"{} que você possui...", + "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_let_it_happen = { + name = "Let It Happen", text = { - "{C:attention}Marcas{} geram {C:money}$#1#{} quando ativadas", + "Se a mão não foi jogada nesta Aposta,", + "equilibre {C:mult}Multi{} e {C:chips}Fichas{}", + "{C:inactive}(Mãos jogadas:{C:attention}#1#{C:inactive})" + }, + }, + j_paperback_in_case_i_make_it = { + name = "Caso Eu Consiga", + text = { + "Cada {C:attention}carta sem classe{} jogada", + "ganha permanentemente", + "{C:chips}+#1#{} Fichas quando pontuada" + }, + }, + j_paperback_evergreens = { + name = "Sempre-Vivas", + text = { + "{C:spades}Espadas{} dão {X:mult,C:white}X#1#{} Multi quando pontuadas.", + "Aumenta em {X:mult,C:white}X#2#{} Multi para cada ", + "{C:spades}Espadas{} consecutivamente pontuada", + "{C:inactive}(Reseta após cada mão jogada)" + }, + }, + j_paperback_der_fluschutze = { + name = "Der Fluschütze", + text = { + "Se a {C:attention}primeira{} mão jogada da rodada", + "foi uma única carta de {C:attention}realeza{}, destrua-a", + "e dê a este curinga {X:mult,C:white}X#1#{} Multi", + "{C:inactive}(No momento {X:mult,C:white}X#2#{} {C:inactive}Multi)" + }, + }, + j_paperback_the_wonder_of_you = { + name = "A Maravilha Que É Você", + text = { + "Quando o curinga à {C:attention}direita{}", + "falha em um teste de {C:green}probabilidade{},", + "a carta mais à {C:attention}direita{} na mão", + "é {C:attention}destruída{}" + }, + }, + j_paperback_inner_peace = { + name = "Paz Interior", + text = { + "{C:attention}+3{} tamanho de mão antes", + "da {C:attention}primeira{} mão", + "da rodada ser jogada" + }, + }, + j_paperback_cakepop = { + name = "Pirulito de Bolo", + text = { + "{C:hearts}Copas{} pontuadas dão {C:mult}+#1#{} Multi", "{C:green}#2# em #3#{} chance desta carta ser", - "consumida no fim da rodada" - } + "consumida no final da rodada" + }, }, - j_paperback_coffee = { - name = "Café", + j_paperback_black_rainbows = { + name = "Arco-íris Negros", text = { - "{C:attention}+#1#{} tamanho de mão,", - "aumenta em {C:attention}#2#{} quando {C:attention}Blind{} é pulado.", - "{C:green}#3# em #4#{} chance desta carta ser consumida quando", - "{C:attention}Small Blind{} ou {C:attention}Big Blind{} é selecionado", - } + "{C:spades}Espadas{} e {C:clubs}Paus{} pontuados", + "têm uma {C:green}#1# em #2#{} chance de serem", + "transformados em {C:dark_edition}Policromo" + }, }, - j_paperback_basic_energy = { - name = "Energia Básica de Curinga", + j_paperback_meeple = { + name = "Meeple", text = { - "Usar qualquer {C:attention}Consumível{} tem uma", - "{C:green}#1# em #2#{} chance de criar uma cópia", - "{C:inactive}(Não pode fazer cópias de uma cópia)", + "Se a mão jogada contém", + "uma carta de {C:attention}realeza{} pontuada,", + "{C:green}#1# em #2#{} chance de ganhar", + "{C:mult}+#3#{} descarte nesta rodada" + }, + }, + j_paperback_apple = { + name = "Maçã", + text = { + "Ao comprar um {C:attention}Consumível{}, tem uma", + "{C:green}#1# em #2#{} chance de criar uma", + "cópia {C:dark_edition}Negativa{} e {S:1.1,C:red,E:2}se autodestrói" + }, + }, + j_paperback_heretical_joker = { + name = "Curinga Herético", + text = { + "Cartas jogadas com naipe", + "{C:paperback_stars}Estrela{} dão", + "{C:mult}+#1#{} Multi quando pontuadas" + }, + }, + j_paperback_fraudulent_joker = { + name = "Curinga Fraudulento", + text = { + "Cartas jogadas com naipe", + "{C:paperback_crowns}Coroa{} dão", + "{C:mult}+#1#{} Multi quando pontuadas" + }, + }, + j_paperback_rock_candy = { + name = "Bala de Pedra", + text = { + "{C:paperback_stars}Estrelas{} pontuadas dão {C:mult}+#1#{} Multi", + "{C:green}#2# em #3#{} chance desta carta ser", + "comida no final da rodada" + }, + }, + j_paperback_rockin_stick = { + name = "Palito De Pedra", + text = { + "Dá {X:mult,C:white}X#1#{} Multi para cada", + "Curinga {C:attention}\"Palito\"{} que você tem", + "{C:inactive}(Atualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_tanghulu = { + name = "Tanghulu", + text = { + "{C:paperback_crowns}Coroas{} pontuadas dão {C:mult}+#1#{} Multi", + "{C:green}#2# em #3#{} chance desta carta ser", + "comida no final da rodada" + }, + }, + j_paperback_sweet_stick = { + name = "Palito Doce", + text = { + "Dá {X:mult,C:white}X#1#{} Multi para cada", + "Curinga {C:attention}\"Palito\"{} que você tem", + "{C:inactive}(Atualmente {X:mult,C:white}X#2#{C:inactive} Multi)" + }, + }, + j_paperback_quartz = { + name = "Quartzo", + text = { + "{C:paperback_stars}Estrelas{} pontuadas dão {X:chips,C:white}X1{} Fichas,", + "{X:chips,C:white}+X#1#{} para cada outra {C:paperback_stars}Estrela{} jogada" + }, + }, + j_paperback_pyrite = { + name = "Pirita", + text = { + "{V:1}#1#{} jogadas têm {C:green}#2# em #3#{}", + "chance de criar uma carta de", + "{C:tarot}Tarô{} aleatória quando pontuadas", "{C:inactive}(Deve ter espaço)" - } + }, }, - j_paperback_big_misser = { - name = "Grande Perda", + j_paperback_wheat_field = { + name = "Campo de Trigo", text = { - "{X:mult,C:white}X#1#{} Multi para cada espaço", - "vazio de consumível", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{}{C:inactive} Multi)" - } + "{C:paperback_crowns}#1#{} dão {X:mult,C:white}X#2#{} Multi quando pontuadas.", + "Aumenta em {X:mult,C:white}X#3#{} Multi para cada", + "{C:paperback_crowns}#4#{} consecutivamente pontuada", + "{C:inactive}(Reseta após cada mão jogada)" + }, }, - j_paperback_complete_breakfast = { - name = "Café da Manhã Completo", + j_paperback_clothespin = { + name = "Pregador", text = { - "{C:mult}+#1#{} Multi e {C:chips}+#2#{} Fichas", - "{C:green}#3# em #4#{} chance desta carta ser", - "consumida após a mão jogada", - "A chance aumenta em {C:attention}#5#{} após", - "cada mão jogada", + "Este Curinga ganha {C:chips}+#1#{} Fichas no", + "{C:attention}fim da rodada{} para cada", + "{C:attention}Clipe{} {C:attention}na mão", + "{C:inactive}(No momento {C:chips}+#2#{C:inactive} Fichas)" + }, + }, + j_paperback_watercolor_joker = { + name = "Curinga Aquarela", + text = { + "{C:attention}#1#s{} dão", + "{X:chips,C:white}X#2#{} Fichas quando pontuados" + }, + }, + j_paperback_birches = { + name = "Bétulas", + text = { + "{C:paperback_stars}Estrelas{} dão {X:mult,C:white}X#2#{} Multi quando pontuadas.", + "Aumenta em {X:mult,C:white}X#3#{} Multi para cada", + "{C:paperback_stars}Estrelas{} consecutivamente pontuada", + "{C:inactive}(Reseta após cada mão jogada)" + }, + }, + j_paperback_oracle = { + name = "Oráculo", + text = { + "Este Curinga ganha {X:chips,C:white}X#1#", + "Fichas para cada carta de", + "{C:paperback_minor_arcana}Arcanos Menores{} única usada", + "{C:inactive}(No momento {X:chips,C:white}X#2#{C:inactive} Fichas)" + }, + }, + j_paperback_punch_card = { + name = "Cartão Perfurado", + text = { + "Após {C:attention}#1#{} rodadas,", + "venda esta carta para", + "diminuir a Aposta em {C:attention}#3#{}", + "{C:inactive}(No momento {C:attention}#2#{C:inactive}/#1#)" + }, + }, + j_paperback_moon_waltz = { + name = "Valsa da Lua", + text = { + "Este Curinga tem {C:green}#3#{} em {C:green}#4#{} chance de ganhar", + "metade do {C:mult}+Multi{} ou {C:chips}+Fichas{} de uma", + "carta {C:planet}Lua{} ou {C:planet}Asteroide{} usada", + "{C:inactive}(Atualmente {C:mult}+#1#{C:inactive} Multi e {C:chips}+#2#{C:inactive} Fichas)" + }, + }, + }, + Spectral = { + c_paperback_apostle_of_cups = { + name = "Apóstolo de Copas", + text = { + "{C:attention}Carta{} selecionada", + "torna-se {C:dark_edition}Negativa", + "{C:attention}#1#{} espaço de Curinga" + }, + }, + c_paperback_apostle_of_wands = { + name = "Apóstolo de Paus", + text = { + "Crie um Curinga não-{C:legendary}Lendário{}", + "da {C:attention}sua escolha{}", + "{C:inactive}(Sem duplicatas)" + }, + }, + c_paperback_apostle_of_swords = { + name = "Apóstolo de Espadas", + text = { + "Destrua o {C:attention}Curinga{} selecionado", + "{C:attention}#1#{} Apostas" + }, + }, + }, + paperback_minor_arcana = { + c_paperback_ace_of_cups = { + name = "Ás de Copas", + text = { + "Adiciona um {C:chips}Clipe Azul{} a até", + "{C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_two_of_cups = { + name = "Dois de Copas", + text = { + "Dá uma {C:attention}Marca{} {C:dark_edition}Policromática{},", + "{C:dark_edition}Holográfica{}, {C:dark_edition}Laminada{},", + "{C:mult}Rara{} ou {C:green}Incomum" + }, + }, + c_paperback_three_of_cups = { + name = "Três de Copas", + text = { + "Adiciona um {C:paperback_black}Clipe Preto{} a", + "{C:attention}#1#{} carta selecionada" + }, + }, + c_paperback_four_of_cups = { + name = "Quatro de Copas", + text = { + "Remove {C:attention}melhorias{}, {C:attention}selos{} e {C:attention}edições{}", + "de até {C:attention}#1#{} cartas selecionadas.", + "Ganha {C:money}$#2#{} para cada um removido" + }, + }, + c_paperback_five_of_cups = { + name = "Cinco de Copas", + text = { + "Melhora {C:attention}#1#{}", + "cartas selecionadas para", + "{C:attention}#2#s{}" + }, + }, + c_paperback_six_of_cups = { + name = "Seis de Copas", + text = { + "Ganha {C:attention}metade{} do {C:chips}valor", + "{C:chips}de Fichas{} de {C:attention}#1#{} carta", + "selecionada como {C:money}dinheiro", + "{C:inactive}(Máximo de {C:money}$#2#{C:inactive})" + }, + }, + c_paperback_seven_of_cups = { + name = "Sete de Copas", + text = { + "Dá uma {C:attention}melhoria{} aleatória", + "a até {C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_eight_of_cups = { + name = "Oito de Copas", + text = { + "Converte até {C:attention}#1#{} cartas", + "selecionadas para um naipe que", + "não está {C:attention}atualmente selecionado" + }, + }, + c_paperback_nine_of_cups = { + name = "Nove de Copas", + text = { + "Destrói {C:attention}Curinga{} selecionado e", + "cria um novo {C:attention}Curinga{} de", + "{C:attention}raridade{} igual ou maior se possível", + "{C:inactive}(Não pode criar um {C:legendary}Lendário{C:inactive})" + }, + }, + c_paperback_ten_of_cups = { + name = "Dez de Copas", + text = { + "{C:green}#1# em #2#{} chance de adicionar", + "edição {C:dark_edition}Policromática{} a", + "{C:attention}1{} carta selecionada" + }, + }, + c_paperback_page_of_cups = { + name = "Valete de Copas", + text = { + "Adiciona um {C:inactive}Clipe Branco{} a até", + "{C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_knight_of_cups = { + name = "Cavaleiro de Copas", + text = { + "Selecione {C:attention}#1#{} cartas, a carta da {C:attention}esquerda", + "copia {C:attention}tudo{} da carta da {C:attention}direita", + "exceto {C:attention}classe{} e {C:attention}naipe", + "Destrói a carta da {C:attention}direita", + "{C:inactive}(Arraste para reorganizar)" + }, + }, + c_paperback_queen_of_cups = { + name = "Rainha de Copas", + text = { + "Melhora {C:attention}#1#{}", + "cartas selecionadas para", + "{C:attention}#2#s{}" + }, + }, + c_paperback_king_of_cups = { + name = "Rei de Copas", + text = { + "Ganha {C:money}$#1#{} para cada naipe com todas", + "as 13 {C:attention}classes básicas{} que você tem", + "{C:inactive}(No momento {C:money}$#2#{C:inactive})" + }, + }, + c_paperback_ace_of_wands = { + name = "Ás de Paus", + text = { + "Adiciona um {C:mult}Clipe Vermelho{} a até", + "{C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_two_of_wands = { + name = "Dois de Paus", + text = { + "Cria a carta de {C:planet}Planeta{}", + "da sua mão de pôquer {C:attention}mais{} e", + "{C:attention}menos jogada", + "{C:inactive}(Deve ter espaço)" + }, + }, + c_paperback_three_of_wands = { + name = "Três de Paus", + text = { + "Cria uma cópia de {C:attention}#1#", + "carta selecionada", + "na sua mão" + }, + }, + c_paperback_four_of_wands = { + name = "Quatro de Paus", + text = { + "Adiciona um {C:paperback_pink}Clipe Rosa{} a até", + "{C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_five_of_wands = { + name = "Cinco de Paus", + text = { + "Destrói todas as cartas", + "{C:attention}na mão{}, e", + "define o dinheiro para {C:money}$0" + }, + }, + c_paperback_six_of_wands = { + name = "Seis de Paus", + text = { + "Melhora {C:attention}#1#{}", + "cartas selecionadas para", + "{C:attention}#2#s{}" + }, + }, + c_paperback_seven_of_wands = { + name = "Sete de Paus", + text = { + "Dá uma {C:attention}Marca de Quebra" + }, + }, + c_paperback_eight_of_wands = { + name = "Oito de Paus", + text = { + "Cria uma {C:dark_edition}Marca{} {C:attention}Negativa{} e", + "perde {C:money}$#1#{}, mais {C:money}$#2#{} para cada", + "Curinga acima de {C:attention}#3#{} possuído", + "{C:inactive}(No momento {C:money}$#4#{C:inactive})" + }, + }, + c_paperback_nine_of_wands = { + name = "Nove de Paus", + text = { + "Melhora {C:attention}#1#{}", + "cartas selecionadas para", + "{C:attention}#2#s{}" + }, + }, + c_paperback_ten_of_wands = { + name = "Dez de Paus", + text = { + "Selecione {C:attention}#1#{} cartas, destrói as", + "{C:attention}duas da direita{} e dá seu", + "{C:chips}valor de Fichas{} à {C:attention}da esquerda", + "{C:inactive}(Arraste para reorganizar)" + }, + }, + c_paperback_page_of_wands = { + name = "Valete de Paus", + text = { + "Adiciona um {C:attention}Clipe Laranja{} a até", + "{C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_knight_of_wands = { + name = "Cavaleiro de Paus", + text = { + "Dá uma {C:attention}Marca{} de {C:mult}Alto Risco" + }, + }, + c_paperback_queen_of_wands = { + name = "Rainha de Paus", + text = { + "{C:green}#1# em #2#{} chance de", + "adicionar edição {C:dark_edition}Dicromática{}", + "a um {C:attention}Curinga{} aleatório" + }, + }, + c_paperback_king_of_wands = { + name = "Rei de Paus", + text = { + "Cria um {C:attention}Curinga{}", + "não-{C:chips}Comum{} aleatório", + "{C:inactive}(Exceto {C:legendary}Lendário{C:inactive})" + }, + }, + c_paperback_ace_of_swords = { + name = "Ás de Espadas", + text = { + "Converte até", + "{C:attention}#1#{} cartas selecionadas", + "em {V:1}#2#{}" + }, + }, + c_paperback_two_of_swords = { + name = "Dois de Espadas", + text = { + "Converte até", + "{C:attention}#1#{} cartas selecionadas", + "para o último naipe {C:attention}pontuado", + "{C:inactive}(No momento: {V:1}#2#{C:inactive})" + }, + }, + c_paperback_three_of_swords = { + name = "Três de Espadas", + text = { + "Melhora {C:attention}#1#{}", + "cartas selecionadas para", + "{C:attention}#2#s{}" + }, + }, + c_paperback_four_of_swords = { + name = "Quatro de Espadas", + text = { + "Converte até {C:attention}#1#", + "cartas selecionadas para", + "cartas {C:attention}de Realeza{} aleatórias" + }, + }, + c_paperback_five_of_swords = { + name = "Cinco de Espadas", + text = { + "Selecione {C:attention}#1#{} cartas, destrói as", + "duas da direita e dá à", + "da esquerda uma {C:attention}edição{},", + "{C:attention}selo{} ou {C:attention}melhoria{} aleatória", + "{C:inactive}(Arraste para reorganizar)" + }, + }, + c_paperback_six_of_swords = { + name = "Seis de Espadas", + text = { + "Adiciona um {C:attention}Clipe Amarelo{} a", + "{C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_seven_of_swords = { + name = "Sete de Espadas", + text = { + "Adiciona um {C:attention}Clipe Dourado{} a", + "{C:attention}#1#{} carta selecionada" + }, + }, + c_paperback_eight_of_swords = { + name = "Oito de Espadas", + text = { + "Adiciona {C:attention}Clipes{} aleatórios a", + "até {C:attention}#1#{} cartas selecionadas" + }, + }, + c_paperback_nine_of_swords = { + name = "Nove de Espadas", + text = { + "Destrói Curinga selecionado", + "Ele {C:red}não pode{} aparecer novamente", + "pelo {C:attention}resto da partida{}" + }, + }, + c_paperback_ten_of_swords = { + name = "Dez de Espadas", + text = { + "{C:attention}Destrói{} cartas no baralho", + "com a mesma {C:attention}classe", + "da carta selecionada" + }, + }, + c_paperback_page_of_swords = { + name = "Valete de Espadas", + text = { + "Melhora {C:attention}#1#{}", + "cartas selecionadas para", + "{C:attention}#2#s{}" + }, + }, + c_paperback_knight_of_swords = { + name = "Cavaleiro de Espadas", + text = { + "Cria uma carta {C:paperback_minor_arcana}Arcana Menor{} aleatória", + "e uma carta {C:tarot}Tarot{} aleatória", + "{C:inactive}(Deve ter espaço)" + }, + }, + c_paperback_king_of_swords = { + name = "Rei de Espadas", + text = { + "Remove {C:money}Aluguel{} e {C:paperback_perishable}Perecível", + "de um Curinga selecionado" + }, + }, + c_paperback_queen_of_swords = { + name = "Rainha de Espadas", + text = { + "Converte {C:attention}#1#{} cartas aleatórias no", + "baralho completo com {C:attention}naipes diferentes", + "para o {C:attention}naipe{} da carta selecionada" + }, + }, + c_paperback_ace_of_pentacles = { + name = "Ás de Ouros", + text = { + "Converte até", + "{C:attention}#1#{} cartas selecionadas", + "para {V:1}#2#{}" + }, + }, + }, + Voucher = { + v_paperback_celtic_cross = { + name = "Cruz Celta", + text = { + "Ao limpar um {C:attention}Blind", + "{C:attention}de Chefe{}, a próxima loja terá", + "um {C:paperback_minor_arcana}Pacote Mega de Arcanos Menores{}", + "{C:attention}grátis{} adicional" }, }, - j_paperback_emergency_broadcast = { - name = "Transmissão de Emergência", + v_paperback_soothsay = { + name = "Adivinhação", text = { - "Pontuar {C:attention}5s{} e {C:attention}8s{} fornece", - "{C:mult}+#1#{} Multi e {C:chips}+#2#{} Fichas", + "Cartas de {C:paperback_minor_arcana}Arcanos Menores{} podem", + "aparecer na {C:money}Loja" }, }, - j_paperback_moribund = { - name = "Moribundo", + }, + Tag = { + tag_paperback_angel_investment = { + name = "Marca de Investimento Angelical", text = { - "Este Curinga ganha {C:mult}+#1#{} Multi quando um {C:attention}blind", - "é limpo com {C:attention}0{C:chips} mãos{} restantes.", - "Dobra seu {C:mult}Multi{} se o blind não for limpo", - "{C:inactive}(No momento, {C:mult}+#2#{C:inactive} Multi)", + "Ganhe {C:money}$#1#{} por {C:money}$#2#{} que você tem", + "{C:inactive}(Máximo de {C:money}$#3#{C:inactive})", + "{C:inactive}(Dará {C:money}$#4#{C:inactive})" }, }, - j_paperback_crispy_taco = { - name = "Taco Crocante", + tag_paperback_divination = { + name = "Marca de Adivinhação", text = { - "{X:chips,C:white}X#1#{} Fichas. {C:green}#2# em #3#{} chance desta carta", - "ser consumida no fim da rodada.", + "Dá um", + "{C:paperback_minor_arcana}Pacote Mega de Arcanos Menores{} grátis" }, }, - j_paperback_furioso = { - name = "Furioso", + tag_paperback_dichrome = { + name = "Marca Dicromática", text = { - "Este Curinga ganha {X:mult,C:white}X#1#{} Multi para", - "cada {C:attention}rank{} único pontuado.", - "Reseta após derrotar um {C:attention}blind chefe", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{} {C:inactive}Multi)", - "{C:inactive}(Ranks jogados:{C:attention}#3#{C:inactive})", + "O próximo Curinga de edição básica", + "da loja é grátis e", + "torna-se {C:dark_edition}Dicromático" }, }, - j_paperback_soft_taco = { - name = "Taco Macio", + tag_paperback_high_risk = { + name = "Marca de Alto Risco", text = { - "{X:mult,C:white}X#1#{} Multi. {C:green}#2# em #3#{} chance desta carta", - "ser consumida no fim da rodada.", + "Ao selecionar {C:attention}Blind", + "{C:attention}de Chefe{}, {C:attention}dobre{} seu", + "requisito de pontuação", + "e ganhe {C:money}$#1#" }, }, - j_paperback_charred_marshmallow = { - name = "Marshmallow Torrado", + tag_paperback_breaking = { + name = "Marca de Quebra", text = { - "Pontuar {C:spades}Espadas{} dá {C:mult}+#1#{} Multi", - "{C:green}#2# em #3#{} chance desta carta ser", - "consumida no fim da rodada", + "Desativa o", + "{C:attention}Blind de Chefe" }, }, - j_paperback_joker_cookie = { - name = "Biscoito do Curinga", + }, + Planet = { + c_paperback_quaoar = { + name = "Quaoar", + }, + c_paperback_haumea = { + name = "Haumea", + }, + c_paperback_sedna = { + name = "Sedna", + }, + c_paperback_makemake = { + name = "Makemake", + }, + }, + Enhanced = { + m_paperback_ceramic = { + name = "Carta Cerâmica", text = { - "Ganha {C:money}$#1#{} no fim da rodada", - "O pagamento aumenta em {C:money}$#2#{} ao sacar", - "{C:green}#3# em #4#{} chance desta carta", - "ser consumida no fim da rodada", + "Ganha entre {C:money}$#1#{}", + "e {C:money}$#2#{} quando pontuada,", + "{C:red}Quebra{} a carta se", + "{C:mult}Multi{} acabou {C:attention}maior{} que {C:chips}Fichas", + "enquanto jogada ou mantida na mão" }, }, - j_paperback_pop_stick = { - name = "Palito de Pirulito", + m_paperback_soaked = { + name = "Carta Encharcada", text = { - "Concede {X:mult,C:white}X#1#{} Multi para cada", - "outro Curinga {C:attention}\"Palito\"{} que você possui...", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)", + "Quando pontuada, cartas {C:attention}mantidas na mão{}", + "pontuam seu {C:chips}valor de Fichas{}.", + "{C:green}#1# em #2#{} chance de", + "{C:red}destruir{} carta ao {C:red}descartar" }, }, - j_paperback_pool_table = { - name = "Mesa de Sinuca", + m_paperback_wrapped = { + name = "Carta Embrulhada", text = { - "Se a primeira mão da rodada", - "não pontuar {C:attention}cartas de realeza{},", - "cria a carta de {C:planet}Planeta{} da", - "mão de pôquer jogada", - "{C:inactive}(Deve ter espaço)", + "Ganha {C:money}$#1#{} quando pontuada", + "sem classe ou naipe" }, }, - j_paperback_bicycle = { - name = "Bicicleta", + m_paperback_bandaged = { + name = "Carta Enfaixada", text = { - "{C:attention}Cartas Naipe Curinga{} fornecem {C:mult}Multi", - "igual ao seu {C:chips}Bônus de Fichas{},", - "então {X:mult,C:white}X#1#{} Multi", + "Reativa cartas {C:attention}adjacentes", + "{C:green}#1# em #2#{} chance de", + "{C:red}quebrar{} quando pontuada" }, }, - j_paperback_stamp = { - name = "Selo Postal", + m_paperback_domino = { + name = "Carta Dominó", text = { - "{C:green}#1# em #2#{} chance deste", - "Curinga ganhar {C:chips}+#3#{} Fichas quando", - "qualquer carta com um {C:attention}selo{} for pontuado", - "{C:inactive}(No momento, {C:chips}+#4#{C:inactive} Fichas)", + "Dá {C:mult}+#1#{} Multi para cada classe", + "jogada ou descartada nesta rodada", + "{C:inactive}(No momento {C:mult}+#2#{C:inactive} Multi)" }, }, - j_paperback_sticky_stick = { - name = "Palito Grudento", + m_paperback_stained = { + name = "Carta Manchada", text = { - "Concede {X:mult,C:white}X#1#{} Multi para cada", - "outro Curinga {C:attention}\"Palito\"{} que você possui...", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)", + "Se {C:attention}estiver na mão{} após uma", + "mão ser jogada, cartas pontuadas", + "ganham permanentemente {C:mult}#1#{} Multi" }, }, - j_paperback_shopping_center = { - name = "Shopping Center", + }, + Edition = { + e_paperback_dichrome = { + name = "Dicromático", text = { - "{C:money}Lojas{} têm uma", - "{C:attention}vaga adicional para cards", + "Quando {C:attention}Blind{} é selecionado", + "ganha {C:attention}+#1#{C:blue} Mão{} ou {C:red}Descarte", + "{C:inactive}(O que for menor)" }, }, - j_paperback_ghost_cola = { - name = "Cola Fantasma", + }, + Other = { + undiscovered_paperback_minor_arcana = { + name = "Não Descoberto", text = { - "Venda esta carta para criar um {C:attention}#1#{}", - "e uma carta aleatória {C:dark_edition}Negativa{} {C:spectral}Espectral{}.", + "Compre ou use esta", + "carta em uma partida", + "sem semente para", + "saber o que ela faz" }, }, - j_paperback_river = { - name = "Rio", + paperback_light_suits = { + name = "Naipes Claros", text = { - "Se a mão jogada contiver {C:attention}5 cartas pontuando", - "{C:attention}{} ganha o bônus de {C:chips}Fichas{} da carta", - "de menor pontuação como {C:money}Dinheiro", - "{C:inactive}(Máximo de {C:money}$#1#{C:inactive})", + "{C:diamonds}Ouros{}, {C:hearts}Copas{}" }, }, - j_paperback_solemn_lament = { - name = "Lamento Solene", + paperback_dark_suits = { + name = "Naipes Escuros", text = { - "Reativa a {C:attention}primeira{} carta pontuada", - "{C:attention}uma vez{} para cada", - "{C:chips}mão restante{} ou {C:mult}descarte}", - "{C:inactive}(O menor dos dois valores)", + "{C:spades}Espadas{}, {C:clubs}Paus{}" }, }, - j_paperback_hole_in_one = { - name = "Hole in One", + paperback_requires_custom_suits = { + name = "Requer Naipes Personalizados", text = { - "Se a {C:chips}mão{} inicial da rodada vencer o {C:attention}blind{},", - "dobre o {C:attention}valor de venda{} de todas as {C:attention}cartas", - "{C:inactive}(Máximo de {C:money}$#1#{C:inactive} por rodada)", - "Quando esta carta for vendida, define o {C:attention}valor", - "{C:attention}de venda{} de todas as {C:attention}cartas{} para {C:money}$0" + "Desbailitado devido aos", + "{C:attention}Naipes Personalizados{} estarem", + "desabilitados no {C:legendary}Paperback" }, }, - j_paperback_mismatched_sock = { - name = "Meia Descombinada", + paperback_requires_enhancements = { + name = "Requer Melhorias", text = { - "Este Curinga ganha {C:mult}+#1#{} Multi", - "se a mão jogada não contiver {C:attention}pares{}", - "{C:inactive}(No momento, {C:mult}+#2# {C:inactive}Multi)", + "Desbailitado devido às", + "{C:attention}Melhorias{} estarem", + "desabilitadas no {C:legendary}Paperback" }, }, - j_paperback_quick_fix = { - name = "Conserto Rápido", + paperback_requires_paperclips = { + name = "Requer Clipes", text = { - "{C:attention}+#1#{} tamanho de mão", - "{C:green}#2# em #3#{} chance desta", - "carta ser destruída", - "no final da rodada", + "Desbailitado devido aos", + "{C:attention}Clipes{} estarem", + "desabilitados no {C:legendary}Paperback" }, }, - j_paperback_skydiver = { - name = "Paraquedista", + paperback_requires_minor_arcana = { + name = "Requer Arcanos Menores", text = { - "{C:white,X:mult}X#1#{} Multi se todas as {C:attention}cartas pontuadas{}", - "forem menores ou iguais à {C:attention}carta de menor valor", - "pontuada nesta rodada", - "{C:inactive}(Atualiza no final da mão jogada{C:inactive})", - "{C:inactive}(No momento,: {C:attention}#2#{C:inactive})", + "Desbailitado devido aos", + "{C:paperback_minor_arcana}Arcanos Menores{} estarem", + "desabilitados no {C:legendary}Paperback" }, }, - j_paperback_blue_bonnets = { - name = "Lupinos-Azuis", - text = { - "{C:clubs}Paus{} dão {X:mult,C:white}X#1#{} Multi quando pontuados.", - "Aumenta em {X:mult,C:white}X#2#{} Multi para cada", - "{C:clubs}Paus{} consecutivamente pontuado", - "{C:inactive}(Reseta após cada mão jogada)", - }, - }, - -- Needs updating - -- j_paperback_great_wave = { - -- name = "Grande Onda", - -- text = { - -- "Reativa a {C:attention}primeira carta jogada{}", - -- "usada na pontuação {C:attention}uma vez{}", - -- "para cada {C:chips}mão{} restante", - -- }, - -- }, - j_paperback_caramel_apple = { - name = "Maçã Caramelada", + paperback_requires_tags = { + name = "Requer Marcas", text = { - "{C:clubs}Paus{} pontuados dão {C:mult}+#1#{} Multi", - "{C:green}#2# em #3#{} chance desta carta ser", - "consumida no final da rodada", + "Desabilitado devido às", + "{C:attention}Marcas{} estarem", + "desabilitadas no {C:legendary}Paperback" }, }, - j_paperback_nachos = { - name = "Nachos", + paperback_requires_editions = { + name = "Requer Edições", text = { - "{X:chips,C:white}X#1#{} Fichas,", - "perde {X:chips,C:white}X#2#{} Fichas", - "por {C:attention}carta{} descartada", + "Desabilitado devido às", + "{C:dark_edition}Edições{} estarem", + "desabilitadas no {C:legendary}Paperback" }, }, - j_paperback_pride_flag = { - name = "Bandeira do Orgulho", + paperback_requires_ranks = { + name = "Requer Classes", text = { - "Ganha {C:mult}+#1#{} Multi se a mão pontuada", - "contiver {C:attention}três{} naipes únicos", - "{C:inactive}(No momento, {C:mult}+#2#{} {C:inactive}Multi)", + "Desabilitado devido às", + "{C:dark_edition}Classes{} estarem", + "desabilitadas no {C:legendary}Paperback" }, }, - j_paperback_sacrificial_lamb = { - name = "Cordeiro Sacrificial", + paperback_energized = { + name = "Energizado", text = { - "Ganha {C:mult}+#1#{} Multi por", - "cada carta ou Curinga {C:attention}destruído", - "{C:inactive}(No momento, {C:mult}+#2# {C:inactive}Multi)", + "Não pode ser copiado por", + "{C:attention}Energia Básica do Curinga{}" }, }, - j_paperback_autumn_leaves = { - name = "Folhas de Outono", + paperback_temporary = { + name = "Temporário", text = { - "{C:diamonds}Ouros{} dão {X:mult,C:white}X#1#{} Multi quando pontuados.", - "Aumenta em {X:mult,C:white}X#2#{} Multi para cada", - "{C:diamonds}Ouros{} consecutivamente pontuado", - "{C:inactive}(Reseta após cada mão jogada)", + "Será {C:mult}destruído", + "quando a rodada terminar" }, }, - j_paperback_wild_prize = { - name = "[[PRÊMIO SELVAGEM!1!]]", + paperback_blue_clip = { + name = "Clipe Azul", text = { - "{C:attention}Cartas Naipe Curinga{} têm {C:green}#1# em #2#{} chance", - "de serem {C:attention}reativadas{} e {C:green}#1# em #3#{} chance", - "de ganhar {C:money}$#4#{} quando pontuadas", + "{X:chips,C:white}X#1#{} Fichas quando", + "{C:attention}pontuado{} para cada", + "{C:attention}Clipe{} que {C:attention}estiver na mão", + "{C:inactive}(No momento {X:chips,C:white}X#2#{C:inactive})" }, }, - j_paperback_wish_you_were_here = { - name = "Wish You Were Here", + paperback_red_clip = { + name = "Clipe Vermelho", text = { - "Dá {C:mult}Multi{} igual a {C:mult}#1#X{} o", - "{C:attention}valor de venda{} desta carta.", - "Ganha {C:money}$#2#{} do {C:attention}valor de venda{} no", - "final da rodada", - "{C:inactive}(No momento, {C:mult}+#3# {C:inactive}Multi){}", + "{C:mult}+#1#{} Multi quando", + "{C:attention}pontuado{} para cada", + "{C:attention}Clipe{} que {C:attention}estiver na mão", + "{C:inactive}(No momento {C:mult}+#2#{C:inactive} Multi)" }, }, - j_paperback_calling_card = { - name = "Cartão de Visita", + paperback_orange_clip = { + name = "Clipe Laranja", text = { - "Este Curinga ganha {X:red,C:white}X#1#{} Multi", - "sempre que você derrota um {C:attention}Boss Blind{}", - "ou ativa sua {C:attention}habilidade{}", - "{C:inactive}(No momento, {}{X:red,C:white}X#2#{}{C:inactive} Multi){}", + "Ganha {C:money}$#1#{} quando", + "{C:attention}pontuado{} para cada {C:attention}#2#", + "{C:attention}Clipes{} que {C:attention}estiverem na mão", + "{C:inactive}(No momento {C:money}$#3#{C:inactive})" }, }, - j_paperback_subterfuge = { - name = "Subterfúgio", + paperback_black_clip = { + name = "Clipe Preto", text = { - "Destrua a {C:attention}primeira mão jogada{} de cada rodada", - "Ganha {X:mult,C:white}X#1#{} Multi para cada carta abaixo de {C:attention}#2#{}", - "{C:inactive}(No momento, {X:mult,C:white}X#3#{C:inactive} Multi)", + "Reativa quando {C:attention}pontuado{} se", + "um possui um {C:attention}Clipe{} {C:attention}na mão" }, }, - j_paperback_triple_moon_goddess = { - name = "Deusa da Lua Tripla", + paperback_yellow_clip = { + name = "Clipe Amarelo", text = { - "Se a mão jogada contém uma {C:attention}Trinca{},", - "{C:green}#1# em #2#{} chance de criar uma carta de {C:planet}Planeta{} aleatória e", - "{C:green}#3# em #4#{} chance de criar uma carta de {C:purple}Tarot{} aleatória", + "Se {C:attention}pontuado{} enquanto possui um", + "{C:attention}Clipe {C:attention}na mão{} tem", + "{C:green}#1# de #2#{} chance para {C:red}+#3#{} Multi,", + "{C:green}#4# de #5#{} chance para {X:mult,C:white}X#6#{} Multi", + "e {C:green}#7# de #8#{} chance para {C:money}$#9#{}" }, }, - j_paperback_derecho = { - name = "Derecho", + paperback_gold_clip = { + name = "Clipe Dourado", text = { - "Ganha {X:mult,C:white}X#1#{} Multi se a {C:attention}mão pontuada", - "contiver apenas naipes {C:spades}escuros", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)", + "Ganha {C:money}$#1#{} para cada {C:attention}Clipe{} pontuado", + "se esta carta {C:attention}estiver na mão", + "no final da rodada", + "{C:inactive}(No momento {C:money}$#2#{C:inactive})" }, }, - j_paperback_jestrica = { - name = "Jestrica", + paperback_white_clip = { + name = "Clipe Branco", text = { - "{C:mult}+#1#{} Multi quando um {C:attention}8{} é pontuado", - "Reseta se nenhum {C:attention}8{} for pontuado", - "nesta rodada", - "{C:inactive}(No momento, {C:mult}+#2#{C:inactive} Multi)" + "Se {C:attention}mantido na mão{} no {C:attention}final da", + "{C:attention}rodada{}, ganha {C:chips}+#1#{} Fichas para", + "cada {C:attention}Clipe{} pontuado nesta rodada", + "{C:inactive}(No momento {C:chips}+#2#{C:inactive} Fichas)" }, }, - j_paperback_grand_strategy = { - name = "Grande Estratégia", + paperback_pink_clip = { + name = "Clipe Rosa", text = { - "Este Curinga dá {X:mult,C:white}X#1#{} Multi se", - "{C:attention}#2#{} {C:attention}melhorias{}, {C:attention}edições{},", - "ou {C:attention}selos{} únicos estiverem no seu deck completo", - "{C:inactive}(No momento, {C:attention}#3#{C:inactive})", + "{X:mult,C:white}X#1#{} Multi quando {C:attention}estiver na", + "{C:attention}mão{}, aumenta em {X:mult,C:white}X#2#", + "para cada {C:attention}Clipe{} pontuado", + "{C:inactive}(Reseta após mão jogada)" }, }, - j_paperback_solar_system = { - name = "Sistema Solar", + p_paperback_minor_arcana_normal = { + name = "Pacote de Arcanos Menores", text = { - "Dá {X:mult,C:white}X#1#{} Multi para", - "cada {C:attention}nível{} que os 9 {C:planet}Planetas{}", - "básicos compartilham", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{} {C:inactive}Multi)", + "Escolha {C:attention}#1#{} de até {C:attention}#2#", + "cartas de {C:paperback_minor_arcana}Arcanos Menores{}", + "para serem usadas imediatamente" }, }, - j_paperback_reference_card = { - name = "Carta de Referência", + p_paperback_minor_arcana_jumbo = { + name = "Pacote Jumbo de Arcanos Menores", text = { - "Ganha {X:mult,C:white}X#1#{} Multi para cada vez que {C:attention}todas{} as", - "{C:attention}mãos de poker básicas{} foram jogadas", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{} {C:inactive}Multi)", + "Escolha {C:attention}#1#{} de até {C:attention}#2#", + "cartas de {C:paperback_minor_arcana}Arcanos Menores{}", + "para serem usadas imediatamente" }, }, - j_paperback_dreamsicle = { - name = "Picolé dos Sonhos", + p_paperback_minor_arcana_mega = { + name = "Pacote Mega de Arcanos Menores", text = { - "Os {C:diamonds}Ouros{} pontuados dão {C:mult}+#1#{} Multi", - "{C:green}#2# em #3#{} chance desta carta ser", - "consumida no final da rodada", + "Escolha {C:attention}#1#{} de até {C:attention}#2#", + "cartas de {C:paperback_minor_arcana}Arcanos Menores{}", + "para serem usadas imediatamente" }, }, - j_paperback_jimbo_adventure = { - name = "Aventura do Jimbo", + }, + Partner = { + pnr_paperback_virtual = { + name = "Virtual", text = { - "Pular um {C:attention}Blind{} cria", - "uma {C:attention}Marca{} aleatória", + "Reativa a {C:attention}primeira carta pontuada", + "de {C:paperback_light_suit}Naipe Claro{} em cada mão jogada", + "se nenhum {C:paperback_dark_suit}Naipe Escuro{} foi jogado" }, }, - j_paperback_union_card = { - name = "Cartão Sindical", + pnr_paperback_aftermath = { + name = "Consequência", text = { - "O {C:attention}valor de venda{} de todas as {C:attention}cartas{} é fixado", - "em {C:money}$0{} até esta carta ser vendida", - "Dá {X:mult,C:white}X{} Multi igual ao", - "número de {C:diamonds}Ouros{} ou", - "{C:hearts}Copas{} pontuados na mão jogada", + "Cartas {C:attention}de Realeza{} pontuadas", + "ganham {C:chips}+#1#{} Fichas", + "quando pontuadas" }, }, - j_paperback_cherry_blossoms = { - name = "Flor de Cerejeira", + pnr_paperback_faker = { + name = "Falsário", text = { - "{C:hearts}Copas{} dão {X:mult,C:white}X#1#{} Multi quando pontuadas.", - "Aumenta em {X:mult,C:white}X#2#{} Multi para cada ", - "{C:hearts}Copas{} consecutivamente pontuada", - "{C:inactive}(Reseta após cada mão jogada)", + "{C:attention}Uma vez por rodada{} se", + "uma mão jogada foi uma", + "{C:attention}carta única{}, destrua-a" }, }, - j_paperback_paranoia = { - name = "Paranoia", + pnr_paperback_faker_buffed = { text = { - "Após pontuar uma mão,", - "destrua todos os {C:Dark_suit}naipes escuros{} jogados", - "e todos os {C:Light_suit}naipes claros{} mantidos na mão", + "Se uma mão jogada foi", + "uma {C:attention}carta única{}, destrua-a" }, }, - j_paperback_unholy_alliance = { - name = "Aliança Profana", + }, + Sleeve = { + sleeve_paperback_paper = { + name = "Capa de Papel", text = { - "Este Curinga ganha {X:mult,C:white}X#1#{} Multi", - "quando uma carta ou Curinga é {C:attention}destruído{}", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)", + "Curingas {C:legendary}Paperback{C:attention}{} têm {C:attention}3X", + "mais chance de aparecer,", + "comece a tentativa com o", + "Curinga {C:attention,T:j_paperback_shopping_center}#1#{}" }, }, - j_paperback_summoning_circle = { - name = "Círculo de Invocação", + sleeve_paperback_paper_buff = { + name = "Capa de Papel", text = { - "Se a mão jogada contiver uma", - "{C:attention}Quina{}, crie uma cópia", - "de um {C:attention}consumível aleatório", - "{C:inactive}(Deve ter espaço)", + "Comece com um", + "Curinga {C:dark_edition}Negativo{} {C:attention,T:j_paperback_shopping_center}#1#{}" }, }, - j_paperback_pointy_stick = { - name = "Palito Pontiagudo", + sleeve_paperback_proud = { + name = "Capa do Orgulho", text = { - "Dá {X:mult,C:white}X#1#{} Multi para cada", - "outro Curinga {C:attention}\"Palito\"{} que você possui...", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)", + "Comece com um conjunto completo de", + "{C:hearts}Copas{}, {C:diamonds}Ouros{}, {C:spades}Espadas", + "{C:clubs}Paus{}, {C:paperback_crowns}Coroas{} e {C:paperback_stars}Estrelas" }, }, - j_paperback_prince_of_darkness = { - name = "Príncipe das Trevas", + sleeve_paperback_proud_buff = { + name = "Capa do Orgulho", text = { - "Se a mão pontuada contiver um {C:hearts}#1#{} e três", - "naipes únicos, este Curinga ganha {C:mult}+#2#{} Multi,", - "{C:chips}+#3#{} Fichas, e {C:money}+#4#{} Valor de Venda", - "{C:inactive}(No momento, {C:mult}+#5#{} {C:inactive}Multi, {C:chips}+#6#{} {C:inactive}Fichas)", + "Todos os {C:attention}Ases{} iniciais", + "são {C:dark_edition}Policromo" }, }, - j_paperback_popsicle_stick = { - name = "Palito de Picolé", + sleeve_paperback_silver = { + name = "Capa Prateada", text = { - "Dá {X:mult,C:white}X#1#{} Multi para cada", - "outro Curinga {C:attention}\"Palito\"{} que você possui...", - "{C:inactive}(No momento, {X:mult,C:white}X#2#{C:inactive} Multi)", + "Comece a tentativa com o", + "cupom {C:paperback_minor_arcana,T:v_paperback_celtic_cross}#1#{}", + "e uma {C:paperback_minor_arcana,T:c_paperback_nine_of_cups}#2#" }, }, - j_paperback_let_it_happen = { - name = "Let It Happen", + sleeve_paperback_silver_buff = { + name = "Capa Prateada", text = { - "Se a mão não foi jogada nesta Aposta,", - "equilibre {C:mult}Multi{} e {C:chips}Fichas{}", - "{C:inactive}(Mãos jogadas:{C:attention}#1#{C:inactive})", + "Comece a tentativa com o", + "cupom {C:paperback_minor_arcana,T:v_paperback_soothsay}#1#{}" }, }, - j_paperback_evergreens = { - name = "Sempre-Vivas", + sleeve_paperback_dreamer = { + name = "Capa do Sonhador", text = { - "{C:spades}Espadas{} dão {X:mult,C:white}X#1#{} Multi quando pontuadas.", - "Aumenta em {X:mult,C:white}X#2#{} Multi para cada ", - "{C:spades}Espadas{} consecutivamente pontuada", - "{C:inactive}(Reseta após cada mão jogada)", + "Comece a tentativa com um", + "{C:paperback_minor_arcana,T:c_paperback_apostle_of_wands}#1# {C:paperback_temporary}temporário", + "{C:attention}#2#{} espaço de Curinga" }, }, - j_paperback_cakepop = { - name = "Pirulito de Bolo", + sleeve_paperback_dreamer_buff = { + name = "Capa do Sonhador", text = { - "{C:hearts}Copas{} pontuadas dão {C:mult}+#1#{} Multi", - "{C:green}#2# em #3#{} chance desta carta ser", - "consumida no final da rodada", + "Comece com um {C:attention}#1#", + "de cada naipe" }, }, - j_paperback_black_rainbows = { - name = "Arco-íris Negros", + sleeve_paperback_antique = { + name = "Capa Antiga", text = { - "{C:spades}Espadas{} e {C:clubs}Paus{} pontuados", - "têm uma {C:green}#1# em #2#{} chance de serem", - "transformados em {C:dark_edition}Policromo", - } + "Pacotes de {C:tarot}Arcanos{} não", + "aparecem mais na loja", + "Pacotes de {C:paperback_minor_arcana}Arcanos Menores", + "são {C:attention}3X{} mais comuns" + }, }, - j_paperback_meeple = { - name = "Meeple", + sleeve_paperback_antique_buff = { + name = "Capa Antiga", text = { - "{C:attention}Cartas de realeza{} pontuadas têm", - "{C:green}#1# em #2#{} chance de dar", - "{C:mult}+#3#{} Descarte(s)", - } + "Pacotes de {C:paperback_minor_arcana}Arcanos Menores{} são {C:money}grátis" + }, }, - j_paperback_apple = { - name = "Maçã", + sleeve_paperback_passionate = { + name = "Capa Passional", text = { - "{C:hearts}Copas{} pontuadas têm uma", - "{C:green}#1# em #2#{} chance de dar", - "um {C:dark_edition}Consumível Negativo", - "{S:1.1,C:red,E:2}Se autodestrói", - } + "Após derrotar cada", + "{C:attention}Blind de Chefe{}, ganhe uma", + "{C:attention,T:tag_paperback_high_risk}#1#", + "Sem {C:money}Juros" + }, }, - }, - Other = { - paperback_energized = { - name = "Energizado", + sleeve_paperback_passionate_buff = { + name = "Capa Passional", text = { - "Não pode ser copiado por", - "{C:attention}Energia Básica do Curinga{}" - } - } + "A cada dois {C:attention}Blinds de Chefe{} um é", + "substituído por um {C:attention}Blind de Confronto", + "Derrotar um {C:attention}Blind de Confronto", + "dá uma Marca {C:dark_edition,T:tag_negative}Negativa" + }, + }, }, }, misc = { dictionary = { + k_paperback_minor_arcana = "Arcanos Menores", + b_paperback_minor_arcana_cards = "Arcanos Menores", + paperback_minor_arcana_pack = "Pacote de Arcanos Menores", + paperback_confessed_ex = "Confessado!", paperback_polychrome_ex = "Policromo!", paperback_destroyed_ex = "Destruído!", paperback_doubled_ex = "Dublado!", @@ -515,11 +2437,141 @@ return { paperback_downgrade_ex = "Rebaixado!", paperback_copy_ex = "Cópia!", paperback_consumed_ex = "Consumido!", + paperback_too_hot_ex = "Muito Quente!", + paperback_inactive = "Inativo", + paperback_supplies_ex = "Suprimentos!", + paperback_melted_ex = "Derretido!", + paperback_investment_ex = "Investimento!", + paperback_plus_minor_arcana = "+1 A. Menor", + paperback_plus_consumable = "+1 Consumível", + paperback_plus_tag = "+1 Marca", + paperback_edition_ex = "Edição!", + paperback_rare_ex = "Raro!", + paperback_saved_unholy_alliance = "Salvo por Aliança Profana", + paperback_saved_determination = "Salvo por Determinação", + paperback_reduced_ex = "Reduzido!", + paperback_determination_ex = "NGAAAHH!", + paperback_forlorn_destruction = "Desculpe...", + paperback_freezer_ex = "Hora do Jantar!", + paperback_jestosterone_ex = "Masc!", + paperback_jestrogen_ex = "Fem!", + paperback_punch_card_active = "Conte aos seus amigos!", + paperback_punch_card_ex = "Teletransporte Errado!", + paperback_ui_requires_restart = "Requer Reinicialização", + paperback_ui_no_requires_restart = "Não Requer Reinicialização", + paperback_ui_enable_blinds = "Ativar Blinds", + paperback_ui_enable_minor_arcana = "Ativar Arcanos Menores", + paperback_ui_enable_enhancements = "Ativar Melhorias", + paperback_ui_enable_editions = "Ativar Edições", + paperback_ui_enable_paperclips = "Ativar Clipes de Papel", + paperback_ui_custom_suits_enabled = "Ativar Naipes Personalizados", + paperback_ui_enable_vouchers = "Ativar Cupons", + paperback_ui_enable_tags = "Ativar Marcas", + paperback_ui_enable_ranks = "Ativar Classes", + paperback_ui_developers = "Desenvolvedores", + paperback_ui_artists = "Artistas", + paperback_ui_localization = "Localização", + paperback_ui_paperclips = "Clipes de Papel", + paperback_ui_enable_spectrals = "Ativar Cartas Espectrais", + paperback_ui_plague_doctor_quotes = "Citações do Doutor da Peste", + paperback_ui_select = "Selecionar", + paperback_plague_quote_1_1 = "Sobre esta pedra edificarei a minha igreja, e as", + paperback_plague_quote_1_2 = "portas do inferno não prevalecerão contra ela...", + paperback_plague_quote_2_1 = "Dize-nos quando será isto e que sinal haverá", + paperback_plague_quote_2_2 = "da tua vinda e do fim dos tempos?", + paperback_plague_quote_3_1 = "Queres que mandemos descer fogo", + paperback_plague_quote_3_2 = "do céu para os consumir?", + paperback_plague_quote_4_1 = "Aos apóstolos deu o nome de Boanerges,", + paperback_plague_quote_4_2 = "que significa \"Filhos do Trovão\".", + paperback_plague_quote_5_1 = "Senhor, mostra-nos o Pai, e isso", + paperback_plague_quote_5_2 = "nos basta.", + paperback_plague_quote_6_1 = "Viu um homem. \"Segue-me\", disse-lhe,", + paperback_plague_quote_6_2 = "e o Apóstolo levantou-se e o seguiu.", + paperback_plague_quote_7_1 = "Havia já algum tempo que o Apóstolo", + paperback_plague_quote_7_2 = "praticava feitiçaria e assombrava todo o povo.", + paperback_plague_quote_8_1 = "Então o Apóstolo disse aos outros discípulos:", + paperback_plague_quote_8_2 = "\"Vamos nós também, para morrermos com ele.\"", + paperback_plague_quote_9_1 = "Então o Apóstolo declarou: \"Tu és", + paperback_plague_quote_9_2 = "o filho dele, tu és o rei.\"", + paperback_plague_quote_10_1 = "Então o Apóstolo disse: \"Mas por que tencionas", + paperback_plague_quote_10_2 = "te mostrar a nós e não ao mundo?\"", + paperback_plague_quote_11_1 = "Desde agora, ninguém me inquiete,", + paperback_plague_quote_11_2 = "porque trago no meu corpo as marcas dele.", + paperback_plague_quote_12_1 = "Não vos escolhi eu a vós, os Doze?", + paperback_plague_quote_12_2 = "Contudo, um de vós é diabo.", + paperback_clippy_msg_1 = "Salvar arquivo?", + paperback_clippy_msg_2 = "sou o Clippy!", + paperback_clippy_msg_3 = "Oi!", + paperback_clippy_msg_4 = "Teclado ligado!", + paperback_clippy_msg_5 = "Vou ajudar!", + paperback_clippy_msg_6 = "Me pergunte!", + paperback_clippy_msg_7 = "Devo sair?", + paperback_clippy_msg_8 = "Mouse ligado!", + paperback_clippy_msg_full = "Armazenamento cheio!", + paperback_da_capo_Clubs = "Movimento 1", + paperback_da_capo_Spades = "Movimento 2", + paperback_da_capo_Diamonds = "Movimento 3", + paperback_da_capo_Hearts = "Movimento 4", + paperback_da_capo_None = "Final!", }, v_dictionary = { paperback_a_discards = "+#1# Descartes", paperback_a_discards_minus = "-#1# Descartes", - paperback_prince_of_darkness = "+#1# Multi, +#2# Fichas" - } - } + paperback_a_hands_minus = "-#1# Mãos", + paperback_prince_of_darkness = "+#1# Multi, +#2# Fichas", + paperback_a_completion = "#1#/#2#", + paperback_a_round_minus = "-#1# Rodada", + paperback_a_plus_cards = "+#1# #2#s", + paperback_a_plus_tags = "+#1# Marcas", + }, + ranks = { + paperback_Apostle = "Apóstolo", + }, + suits_singular = { + paperback_Crowns = "Coroa", + paperback_Stars = "Estrela", + }, + suits_plural = { + paperback_Crowns = "Coroas", + paperback_Stars = "Estrelas", + }, + poker_hands = { + paperback_Spectrum = "Espectro", + ["paperback_Straight Spectrum"] = "Straight Espectro", + ["paperback_Straight Spectrum (Royal)"] = "Royal Espectro", + ["paperback_Spectrum House"] = "Espectro House", + ["paperback_Spectrum Five"] = "Quina Espectro", + ["paperback_Straight Flush (Rapture)"] = "Arrebatamento", + }, + poker_hand_descriptions = { + paperback_Spectrum = { + "5 cartas com naipes diferentes" + }, + ["paperback_Straight Spectrum"] = { + "5 cartas em sequência (classes consecutivas),", + "cada uma com um naipe diferente" + }, + ["paperback_Spectrum House"] = { + "Uma Trinca e um Par com", + "cada carta tendo um naipe diferente" + }, + ["paperback_Spectrum Five"] = { + "5 cartas com a mesma classe,", + "cada uma com um naipe diferente" + }, + }, + labels = { + paperback_blue_clip = "Clipe Azul", + paperback_red_clip = "Clipe Vermelho", + paperback_orange_clip = "Clipe Laranja", + paperback_pink_clip = "Clipe Rosa", + paperback_black_clip = "Clipe Preto", + paperback_yellow_clip = "Clipe Amarelo", + paperback_gold_clip = "Clipe Dourado", + paperback_white_clip = "Clipe Branco", + paperback_dichrome = "Dicrômático", + paperback_energized = "Energizado", + paperback_temporary = "Temporário", + }, + }, } diff --git a/lovely/blind_size_multiplier.toml b/lovely/blind_size_multiplier.toml new file mode 100644 index 00000000..4f7ee5cd --- /dev/null +++ b/lovely/blind_size_multiplier.toml @@ -0,0 +1,24 @@ +[manifest] +version = "1.0.0" +dump_lua = true +priority = 0 + +[[patches]] +[patches.pattern] +target = "blind.lua" +pattern = "self.chips = get_blind_amount(G.GAME.round_resets.ante)*self.mult*G.GAME.starting_params.ante_scaling" +position = "after" +match_indent = true +payload = ''' + self.chips = self.chips * G.GAME.paperback.blind_multiplier +''' + +[[patches]] +[patches.pattern] +target = "functions/UI_definitions.lua" +pattern = "local blind_amt = get_blind_amount(G.GAME.round_resets.blind_ante)*blind_choice.config.mult*G.GAME.starting_params.ante_scaling" +position = "after" +match_indent = true +payload = ''' + blind_amt = blind_amt * G.GAME.paperback.blind_multiplier +''' \ No newline at end of file diff --git a/lovely/colors.toml b/lovely/colors.toml index 3698cdab..c185f75d 100644 --- a/lovely/colors.toml +++ b/lovely/colors.toml @@ -19,9 +19,23 @@ PAPERBACK_CROWNS_HC = HEX('B38E5E'), PAPERBACK_MINOR_ARCANA = HEX('BDA0D9'), PAPERBACK_BLACK = HEX('1E2729'), PAPERBACK_PINK = HEX('FF79AD'), +PAPERBACK_PLATINUM = HEX('B5B5DE'), PAPERBACK_ENERGIZED = HEX('FD5F55'), PAPERBACK_TEMPORARY = HEX('B3A08A'), PAPERBACK_SOLEMN_WHITE = HEX('F9FFE3'), + +-- E.G.O. Gift Colors +PAPERBACK_EGO_GIFT_RED = HEX('FF5B5B'), +PAPERBACK_EGO_GIFT_YELLOW = HEX('FEFEA1'), +PAPERBACK_SIN_NONE = HEX('F9FFE3'), +PAPERBACK_SIN_LUST = HEX('FCAE1E'), +PAPERBACK_SIN_GLOOM = HEX('7ED5E4'), +PAPERBACK_SIN_WRATH = HEX('BC544B'), +PAPERBACK_SIN_PRIDE = HEX('26619C'), +PAPERBACK_SIN_ENVY = HEX('C571F9'), +PAPERBACK_SIN_SLOTH = HEX('965A2F'), +PAPERBACK_SIN_GLUTTONY = HEX('2E8B57'), +PAPERBACK_SIN_MADNESS = HEX('4584FA'), ''' [[patches]] @@ -38,6 +52,9 @@ payload = ''' paperback_minor_arcana = G.C.PAPERBACK_MINOR_ARCANA, paperback_black = G.C.PAPERBACK_BLACK, paperback_pink = G.C.PAPERBACK_PINK, + paperback_platinum = G.C.PAPERBACK_PLATINUM, + paperback_eternal = G.C.ETERNAL, paperback_perishable = G.C.PERISHABLE, paperback_temporary = G.C.PAPERBACK_TEMPORARY, + paperback_ego_gift = G.C.PAPERBACK_EGO_RED, ''' diff --git a/lovely/ego_gift_buttons.toml b/lovely/ego_gift_buttons.toml new file mode 100644 index 00000000..b1483a41 --- /dev/null +++ b/lovely/ego_gift_buttons.toml @@ -0,0 +1,54 @@ +[manifest] +version = "1.0.0" + +# G.UIDEF.card_focus_ui() +# (controller buy/use/select buttons) +# Treat EGO Gifts as non-consumable in this function +# Effect: no "use"/"buy and use" buttons +[[patches]] +[patches.pattern] +target = "functions/UI_definitions.lua" +pattern = '''local base_attach = base_background:get_UIE_by_ID('ATTACH_TO_ME')''' +position = "after" +payload = ''' +local consumeable_saved = nil +if PB_UTIL.is_ego_gift(card) then + consumeable_saved = card.ability.consumeable + card.ability.consumeable = nil +end +''' +match_indent = true + +[[patches]] +[patches.pattern] +target = "functions/UI_definitions.lua" +pattern = '''return base_background''' +position = "before" +payload = ''' +if consumeable_saved then + card.ability.consumeable = consumeable_saved +end +''' +match_indent = true + +# Adapted from SDM_0's Stuff mod +# (non-controller buy/use/select buttons) +# When not in booster pack, display only a sell button +[[patches]] +[patches.pattern] +target = "functions/UI_definitions.lua" +pattern = '''*booster_obj *and card:selectable_from_pack(booster_obj)*''' +position = "before" +payload = ''' +if PB_UTIL.is_ego_gift(card) and not (card.area == G.pack_cards and G.pack_cards) then + return { + n=G.UIT.ROOT, config = {padding = 0, colour = G.C.CLEAR}, nodes={ + {n=G.UIT.C, config={padding = 0.15, align = 'cl'}, nodes={ + {n=G.UIT.R, config={align = 'cl'}, nodes={ + sell + }}, + }}, + }} +end +''' +match_indent = true \ No newline at end of file diff --git a/lovely/is_suit.toml b/lovely/is_suit.toml index c256d84e..0ab95c5d 100644 --- a/lovely/is_suit.toml +++ b/lovely/is_suit.toml @@ -10,18 +10,7 @@ pattern = "if SMODS.smeared_check(self, suit) then" position = "before" match_indent = true payload = ''' --- We only do this if the suit of this card is different from the suit being checked -if PB_UTIL.config.suits_enabled and next(SMODS.find_card('j_smeared')) and self.base.suit ~= suit then - local is_card_modded = self.base.suit == 'paperback_Stars' or self.base.suit == 'paperback_Crowns' - local is_suit_modded = suit == 'paperback_Stars' or suit == 'paperback_Crowns' - - -- Smeared Joker shouldn't affect our modded suits - if is_card_modded or is_suit_modded then - return false - end -end - - -- For It's TV Time Calculations +-- For It's TV Time Calculations if PB_UTIL.tenna_check(self, suit) then return true end diff --git a/lovely/jimbocards_lose.toml b/lovely/jimbocards_lose.toml new file mode 100644 index 00000000..edbb23ca --- /dev/null +++ b/lovely/jimbocards_lose.toml @@ -0,0 +1,32 @@ +[manifest] +version = "1.0.0" +priority = 0 + +# end_round() +## This check might be inaccurate if there are other effects that mess with blinds +## also NOTE if someone makes a 'check if game over' context, can use that +[[patches]] +[patches.pattern] +target = "functions/state_events.lua" +pattern = '-- context.end_of_round calculations' +position = "before" +match_indent = true +payload = ''' +if not (G.GAME.blind:get_type() == 'Boss' and not G.GAME.paperback.vacation_juice_trigger) +and PB_UTIL.check_jimbocards_at_0() then + game_over = true +end''' + +# Game:update_hand_played() +[[patches]] +[patches.pattern] +target = "game.lua" +pattern = "if G.GAME.chips - G.GAME.blind.chips >= 0 or G.GAME.current_round.hands_left < 1*" +position = "before" +match_indent = true +payload = ''' +if PB_UTIL.check_jimbocards_at_0() then + G.STATE = G.STATES.NEW_ROUND + G.STATE_COMPLETE = false + return true +end''' \ No newline at end of file diff --git a/lovely/last_suit.toml b/lovely/last_suit.toml index c2b99396..389a75fa 100644 --- a/lovely/last_suit.toml +++ b/lovely/last_suit.toml @@ -10,9 +10,10 @@ pattern = "if splashed and not unsplashed then table.insert(final_scoring_hand, position = "after" match_indent = true payload = ''' - if final_scoring_hand[#final_scoring_hand] then - if not SMODS.has_no_suit(final_scoring_hand[#final_scoring_hand]) then - G.GAME.paperback.last_scored_suit = final_scoring_hand[#final_scoring_hand].base.suit + for i = #final_scoring_hand, 1, -1 do + if not SMODS.has_no_suit(final_scoring_hand[i]) then + G.GAME.paperback.last_scored_suit = final_scoring_hand[i].base.suit + break end end ''' diff --git a/lovely/sell_use_flags.toml b/lovely/sell_use_flags.toml new file mode 100644 index 00000000..5277801e --- /dev/null +++ b/lovely/sell_use_flags.toml @@ -0,0 +1,83 @@ +[manifest] +version = "1.0.0" +priority = 0 + +# Set flag if start_dissolve() called due to selling card +[[patches]] +[patches.pattern] +target = "card.lua" +pattern = "self:start_dissolve({G.C.GOLD})" +position = "before" +match_indent = true +payload = ''' +self.paperback_dissolve_sell_flag = true +''' +times = 1 +[[patches]] +[patches.pattern] +target = "card.lua" +pattern = "self:start_dissolve({G.C.GOLD})" +position = "after" +match_indent = true +payload = ''' +self.paperback_dissolve_sell_flag = false +''' +times = 1 + +# Set flag if start_dissolve() called due to using card +[[patches]] +[patches.pattern] +target = "functions/button_callbacks.lua" +pattern = "if not dont_dissolve then card:start_dissolve() end" +position = "before" +match_indent = true +payload = ''' +card.paperback_dissolve_use_flag = true +''' +[[patches]] +[patches.pattern] +target = "functions/button_callbacks.lua" +pattern = "if not dont_dissolve then card:start_dissolve() end" +position = "after" +match_indent = true +payload = ''' +card.paperback_dissolve_use_flag = false +''' + +# Card:start_dissolve() +[[patches]] +[patches.pattern] +target = "card.lua" +pattern = "function Card:start_dissolve(*" +position = "after" +match_indent = true +payload = ''' + local paperback_dissolve_sell_flag = self.paperback_dissolve_sell_flag + local paperback_dissolve_use_flag = self.paperback_dissolve_use_flag +''' + +# Repeated twice +[[patches]] +[patches.regex] +target = "card.lua" +pattern = '''1\.05\*dissolve_time.* +(.*\n){0,10}?.*(?self:remove\(\))''' +position = "before" +payload = ''' + + if paperback_dissolve_sell_flag then self.paperback_sell_flag = true end + if paperback_dissolve_use_flag then self.paperback_use_flag = true end + ''' +root_capture = '$root' +times = 1 +[[patches]] +[patches.regex] +target = "card.lua" +pattern = '''Card:start_dissolve\(.* +(.*\n){0,35}?.*(?self:remove\(\))''' +position = "before" +payload = '''if paperback_dissolve_sell_flag then self.paperback_sell_flag = true end + if paperback_dissolve_use_flag then self.paperback_use_flag = true end + ''' +root_capture = '$root' +times = 1 \ No newline at end of file diff --git a/lovely/shimmering_deck.toml b/lovely/shimmering_deck.toml new file mode 100644 index 00000000..def400ae --- /dev/null +++ b/lovely/shimmering_deck.toml @@ -0,0 +1,21 @@ +[manifest] +version = "1.0.0" +dump_lua = true +priority = 0 + +[[patches]] +[patches.pattern] +target = '=[SMODS _ "src/overrides.lua"]' +pattern = "v.current_weight = v.get_weight and v:get_weight() or v.weight or 1" +position = "after" +match_indent = true +payload = ''' +local is_paperback_shimmering = ((G.GAME.selected_back_key or {}).key == 'b_paperback_shimmering') + or (G.GAME.selected_sleeve == 'sleeve_paperback_shimmering') + +if is_paperback_shimmering then + if v.kind == "paperback_ego_gift" then + v.current_weight = v.current_weight * 5 + end +end +''' diff --git a/lovely/skip_detect.toml b/lovely/skip_detect.toml new file mode 100644 index 00000000..b42d7f58 --- /dev/null +++ b/lovely/skip_detect.toml @@ -0,0 +1,24 @@ +[manifest] +version = "1.0.0" +dump_lua = true +priority = 0 + +[[patches]] +[patches.pattern] +target = 'functions/button_callbacks.lua' +pattern = "G.FUNCS.skip_blind = function(e)" +position = 'after' +match_indent = true +payload = ''' +G.GAME.paperback.skipped_blind = true +''' + +[[patches]] +[patches.pattern] +target = 'functions/state_events.lua' +pattern = "G.GAME.blind:set_blind(G.GAME.round_resets.blind)" +position = 'after' +match_indent = true +payload = ''' +G.GAME.paperback.skipped_blind = false +''' \ No newline at end of file diff --git a/lovely/temporary_destroy_no_calc.toml b/lovely/temporary_destroy_no_calc.toml new file mode 100644 index 00000000..6da659cc --- /dev/null +++ b/lovely/temporary_destroy_no_calc.toml @@ -0,0 +1,19 @@ +[manifest] +version = "1.0.0" +priority = 0 + +# No calculation when destroying temporary cards at end of round +[[patches]] +[patches.pattern] +target = '=[SMODS _ "src/utils.lua"]' +pattern = "if next(playing_cards) then SMODS.calculate_context({scoring_hand = cards, remove_playing_cards = true, removed = playing_cards}) end" +position = "before" +match_indent = true +payload = '''if not G.GAME.paperback.destroy_no_calc then''' +[[patches]] +[patches.pattern] +target = '=[SMODS _ "src/utils.lua"]' +pattern = "if next(playing_cards) then SMODS.calculate_context({scoring_hand = cards, remove_playing_cards = true, removed = playing_cards}) end" +position = "after" +match_indent = true +payload = '''end''' \ No newline at end of file diff --git a/lovely/vacation_juice.toml b/lovely/vacation_juice.toml new file mode 100644 index 00000000..c05d433a --- /dev/null +++ b/lovely/vacation_juice.toml @@ -0,0 +1,38 @@ +[manifest] +version = "" + +# end_round() +# Prevent logic for advancing to next Blind +# if G.GAME.paperback.vacation_juice_trigger is true. + +## This patch allows someone else to insert some text after +## G.FUNCS.draw_from_hand_to_discard and the patch will still be ok +[[patches]] +[patches.regex] +target = "functions/state_events.lua" +pattern = ''' +[\t ]*G\.FUNCS\.draw_from_hand_to_discard\(\)(.*\n){0,50} +.*G\.GAME\.blind:get_type\(\) == 'Boss'()''' +position = "after" +payload = ''' and not G.GAME.paperback.vacation_juice_trigger''' + +[[patches]] +[patches.pattern] +target = "functions/state_events.lua" +pattern = '''if G.GAME.round_resets.blind == G.P_BLINDS.bl_small then +G.GAME.round_resets.blind_states.Small = 'Defeated' +''' +position = "before" +match_indent = true +payload = '''if not G.GAME.paperback.vacation_juice_trigger then''' + +[[patches]] +[patches.pattern] +target = "functions/state_events.lua" +pattern = ''' + v.ability.played_this_ante = nil + end +end''' +position = "after" +match_indent = true +payload = '''end''' \ No newline at end of file diff --git a/metadata.json b/metadata.json index 78376ed7..d36be1fe 100644 --- a/metadata.json +++ b/metadata.json @@ -6,6 +6,6 @@ "description": "A vanilla centered mod built upon expanding the base game with jokers and other additions", "main_file": "paperback.lua", "badge_colour": "8b61ad", - "version": "0.7.1a", - "dependencies": ["Steamodded (>=1.0.0~BETA-0711a)", "Lovely (>=0.7.1)"] + "version": "0.7.1a~BETA", + "dependencies": ["Steamodded (>=1.0.0~BETA-1016c)", "Lovely (>=0.7.1)"] } diff --git a/paperback.lua b/paperback.lua index 76296b1b..39c2a68a 100644 --- a/paperback.lua +++ b/paperback.lua @@ -22,7 +22,7 @@ if PB_UTIL.config.minor_arcana_enabled then primary_colour = G.C.PAPERBACK_MINOR_ARCANA, secondary_colour = G.C.PAPERBACK_MINOR_ARCANA, -- Color of the collection button and badge shop_rate = 0, -- These will not appear in the shop - default = 'c_paperback_two_of_cups', -- Card to spawn if pool is empty + default = 'c_paperback_ace_of_cups', -- Card to spawn if pool is empty collection_rows = { 7, 7 } } @@ -56,6 +56,35 @@ if PB_UTIL.config.minor_arcana_enabled then } end +-- Load E.G.O Gifts if they are enabled +if PB_UTIL.config.ego_gifts_enabled then + -- Register the consumable type to be used by E.G.O Gifts + SMODS.ConsumableType { + key = 'ego_gift', + prefix_config = { key = true }, -- Add the prefix of the mod to the key + primary_colour = G.C.PAPERBACK_EGO_GIFT_YELLOW, + secondary_colour = G.C.PAPERBACK_EGO_GIFT_RED, -- Color of the collection button and badge + shop_rate = 0, -- These will not appear in the shop + default = 'c_paperback_dark_vestige', -- Card to spawn if pool is empty + collection_rows = { 6, 6 }, + } + + -- Register the sprite for undiscovered E.G.O Gifts + SMODS.UndiscoveredSprite { + key = 'ego_gift', + prefix_config = { key = true }, + atlas = "ego_gift_atlas", + pos = { x = 7, y = 1 }, + no_overlay = true, + } + + -- Register E.G.O Gift cards + PB_UTIL.register_items(PB_UTIL.ENABLED_EGO_GIFTS, "content/ego_gift") + + -- Register E.G.O Gift boosters + PB_UTIL.register_items(PB_UTIL.ENABLED_EGO_GIFT_BOOSTERS, "content/booster") +end + -- Load Spectral cards if they are enabled if PB_UTIL.config.spectrals_enabled then PB_UTIL.register_items(PB_UTIL.ENABLED_SPECTRALS, "content/spectrals") diff --git a/utilities/cross-mod.lua b/utilities/cross-mod.lua index 43cb3258..bdccef50 100644 --- a/utilities/cross-mod.lua +++ b/utilities/cross-mod.lua @@ -48,6 +48,7 @@ if next(SMODS.find_mod('CardSleeves')) then 'dreamer', 'antique', 'passionate', + -- 'shimmering', } PB_UTIL.Sleeve = CardSleeves.Sleeve:extend { diff --git a/utilities/definitions.lua b/utilities/definitions.lua index a54cb539..b0335f5d 100644 --- a/utilities/definitions.lua +++ b/utilities/definitions.lua @@ -6,15 +6,168 @@ SMODS.current_mod.optional_features = { retrigger_joker = true, post_trigger = true, quantum_enhancements = true, + cardareas = { + deck = true + } } +-- Global mod calculate +SMODS.current_mod.calculate = function(self, context) + -- green clip: gain mult for every other played and scored clip + if context.before then + local clips_played = 0 + for _, v in ipairs(context.scoring_hand) do + if not v.debuff and PB_UTIL.has_paperclip(v) then clips_played = clips_played + 1 end + end + if clips_played > 0 then + for _, v in ipairs(G.playing_cards) do + local clip = PB_UTIL.has_paperclip(v) + if clip == "paperback_green_clip" and not v.debuff then + local clip_table = v.ability.paperback_green_clip + local clips_played_plus_odd = clip_table.odd + clips_played + -- Every 2 clips go into mult, + -- remaining odd clip goes to `odd` + clip_table.mult = clip_table.mult + clip_table.mult_plus * math.floor(clips_played_plus_odd / 2) + clip_table.odd = clips_played_plus_odd % 2 + end + end + end + end + + -- green clip: lose mult for each discarded clip + if context.discard then + if PB_UTIL.has_paperclip(context.other_card) and not context.other_card.debuff then + for _, v in ipairs(G.playing_cards) do + local clip = PB_UTIL.has_paperclip(v) + if clip == "paperback_green_clip" and not v.debuff then + local clip_table = v.ability.paperback_green_clip + clip_table.mult = math.max(0, clip_table.mult - clip_table.mult_minus) + end + end + end + end + + -- purple clip: retrigger card if it has a clip and is adjacent to a purple clip + if context.repetition then + local area_cards + if context.cardarea == 'unscored' then + area_cards = {} + local scoring_hand_i = 1 + -- Run through `full_hand`. Take cards if they aren't in `scoring_hand` + -- We only need to check scoring_hand[scoring_hand_i] at each point + for _, c in ipairs(context.full_hand) do + if context.scoring_hand[scoring_hand_i] == c then + scoring_hand_i = scoring_hand_i + 1 + else + table.insert(area_cards, c) + end + end + elseif context.cardarea == G.play then + area_cards = context.scoring_hand + else + area_cards = context.cardarea.cards + end + + local index + for k, v in ipairs(area_cards) do + if v == context.other_card then + index = k + break + end + end + + if index then + local left = area_cards[index - 1] + local right = area_cards[index + 1] + local reps = 0 + if left and PB_UTIL.has_paperclip(left) == "paperback_purple_clip" then + reps = reps + 1 + end + if right and PB_UTIL.has_paperclip(right) == "paperback_purple_clip" then + reps = reps + 1 + end + if PB_UTIL.has_paperclip(context.other_card) and reps > 0 then + return { + repetitions = reps, + message_card = context.other_card, + colour = G.C.PURPLE + } + end + end + end + + -- track Tarot + Minor Arcana usage for 8 of Pentacles + if context.using_consumeable then + local center = context.consumeable.config.center + local add_new = true + if center.set == "Tarot" or center.set == "paperback_minor_arcana" then + for _, v in ipairs(G.GAME.paperback.arcana_used) do + if center.key == v then + add_new = false + break + end + end + if add_new then + G.GAME.paperback.arcana_used[#G.GAME.paperback.arcana_used + 1] = center.key + end + end + end + + -- Keep Solar System global variable updated + if context.paperback and context.paperback.level_up then + PB_UTIL.update_solar_system(card) + end + -- Keep Reference Card global variable updated + if context.before then + PB_UTIL.calculate_highest_shared_played(card) + end +end + +-- Sleeved cards can't be debuffed +SMODS.current_mod.set_debuff = function(card) + if SMODS.has_enhancement(card, "m_paperback_sleeved") then + return "prevent_debuff" + end +end + -- Update values that get reset at the start of each round SMODS.current_mod.reset_game_globals = function(run_start) G.GAME.paperback.round.scored_clips = 0 G.GAME.paperback.weather_radio_hand = PB_UTIL.get_random_visible_hand('weather_radio') G.GAME.paperback.joke_master_hand = PB_UTIL.get_random_visible_hand('joke_master') - + -- Shopkeep + local shopkeeps = SMODS.find_card('j_paperback_shopkeep') + if #shopkeeps > 0 then + for _, joker in ipairs(shopkeeps) do + joker.ability.extra.incremented = false + end + end + -- Vacation Juice + G.GAME.paperback.vacation_juice_trigger = false + if not run_start then + G.GAME.paperback.last_blind_type_defeated_this_ante = G.GAME.blind:get_type() + if G.GAME.round_resets.blind_states.Boss == 'Defeated' then + G.GAME.paperback.last_blind_type_defeated_this_ante = nil + end + end if run_start then + -- Set last_scored_suit to a sensible value. + -- Mostly matters if Jester of Nihil is obtained before the first blind + -- on a deck with different suit distribution, like Checkered + Dreamer Deck/Sleeve + -- Might still fail if Joker is created before the run even begins? + G.E_MANAGER:add_event(Event({ + func = function() + local cards = {} + for k, v in ipairs(G.playing_cards) do + if not SMODS.has_no_suit(v) then + cards[#cards + 1] = v + end + end + local selected = pseudorandom_element(cards, pseudoseed('paperback_last_scored_suit')) + if selected then G.GAME.paperback.last_scored_suit = selected.base.suit end + return true + end + })) G.GAME.paperback.banned_run_keys = {} end end @@ -33,16 +186,17 @@ PB_UTIL.credits = { color = G.C.GREEN, entries = { 'OppositeWolf770, srockw, Nether, B, ejwu2, metanite64, TheSnaz', - 'InfinityPlus05' + 'InfinityPlus05, aliahmed2k03' } }, localization = { color = G.C.FILTER, entries = { - 'pinkmaggit-hub (pt-BR)', + 'pinkmaggit-hub & Riosodu (pt-BR)', 'mathieulievre (FR)', 'BurAndBY & Tauookie (RU)', - 'Ethylene (zh_CN)' + 'Ethylene (zh_CN)', + 'Marffe (es_ES & es_419)', } }, music = { @@ -146,6 +300,10 @@ PB_UTIL.requirement_map = { setting = 'ranks_enabled', tooltip = 'paperback_requires_ranks' }, + requires_ego_gifts = { + setting = 'ego_gifts_enabled', + tooltip = 'paperback_requires_ego_gifts' + } } -- Disable specific items by commenting them out @@ -182,11 +340,13 @@ PB_UTIL.ENABLED_JOKERS = { "nachos", "crispy_taco", "soft_taco", + -- "watermelon", "complete_breakfast", "ghost_cola", "b_soda", - -- "marble_soda", - -- "vacation_juice", + "marble_soda", + "vacation_juice", + "black_forest_cake", "ice_cube", "cream_liqueur", "deviled_egg", @@ -205,6 +365,7 @@ PB_UTIL.ENABLED_JOKERS = { "charred_marshmallow", "sticky_stick", "pear", + "teapot", "sake_cup", "full_moon", "black_rainbows", @@ -215,38 +376,55 @@ PB_UTIL.ENABLED_JOKERS = { "one_sin_and_hundreds_of_good_deeds", "plague_doctor", "white_night", - -- "der_freischutz", "angel_investor", + -- "der_freischutz", "card_sleeve", + -- "plastic_wrap", "shopping_center", "everything_must_go", "tutor", - -- "percussion_ensemble", + "percussion_ensemble", "its_tv_time", - -- "eyelander, + "eyelander", -- "torii", -- "freight", "high_speed_rail", - -- "small_scale_onshore_wind", + "small_scale_onshore_wind", + "satellite_array", + -- "first_contact", "aurora_borealis", "grand_strategy", + "moving_out", "ready_to_fly", "great_wave", "let_it_happen", + -- "paralyzed" "in_case_i_make_it", + "rosary_beads", "joker_cd_i", "determination", "prince_of_darkness", "giga_size", + "photocopy", + "mandela_effect", "jester_of_nihil", - -- "shopkeep", + "shopkeep", "wild_prize", "deadringer", - -- "a_balatro_movie", + "penumbra_phantasm", + "a_balatro_movie", "ncj", "bicycle", + -- "mezzetino", + -- "gauze", "joke_master", + -- "jokers_11", -- "book_of_life", + -- "hamsa", + -- "hamsa_r", + -- "nazar", + -- "prescript", + "trans_flag", "pride_flag", "bismuth", "cherry_blossoms", @@ -256,9 +434,11 @@ PB_UTIL.ENABLED_JOKERS = { "autumn_leaves", "river", "evergreens", + "master_plan", "the_wonder_of_you", + "tian_tian", "backpack", - -- "roulette", + "roulette", "mexican_train", "chocolate_joker", "resurrections", @@ -270,40 +450,61 @@ PB_UTIL.ENABLED_JOKERS = { "subterfuge", "the_world", -- "red_sun", + "the_sun_rises", "blood_rain", + -- "war_without_reason", "paranoia", "der_fluschutze", "touch_tone_joker", + -- "the_batter", + -- "off_switch", + -- "alpha", + -- "omega", + -- "epsilon", "jestrica", "you_are_a_fool", "alert", "legacy", + -- "redscreen", "telamon", "weather_radio", "power_surge", + "time_regression_mix", "find_jimbo", - -- "jimbos_inferno", - -- "tome", - -- "jimbocards", + "joker_crossing", + -- "tower_of_balatro", + "jimbos_inferno", + "tome", + "greeting_card", + -- "an_invitation", + "jimbocards", "forlorn", - -- "guns_blazin", + "protocol", + "showdown", + "guns_blazin", "burning_pact", "blade_dance", "claw", "inner_peace", "jimbos_joyous_joker_jamboree", - -- "banana_man", + "banana_man", "the_normal_joker", - -- "insurance_policy", + "insurance_policy", + "disco", + "unionized_labor", "better_call_jimbo", "jimbo_adventure", "ddakji", + -- "yacht_dice", + -- "deck_of_cards", "pocket_pair", "ultra_rare", -- "lore_digger", "the_quiet", "big_misser", --"squall_line", + "fodder", + "the_strongest", "da_capo", "golden_egg", "heretical_joker", @@ -330,18 +531,22 @@ PB_UTIL.ENABLED_JOKERS = { "gambit", "king_me", "manilla_folder", + -- "joker_duty", "clippy", "clothespin", "kintsugi_joker", + -- "happy_accident", "watercolor_joker", "medic", "festive_joker", "sommelier", "spotty_joker", + "collector", "langely", "pedrillo", "nichola", "chaplin", + -- "shinzaemon", } PB_UTIL.ENABLED_MINOR_ARCANA = { @@ -388,26 +593,52 @@ PB_UTIL.ENABLED_MINOR_ARCANA = { "queen_of_swords", "king_of_swords", -- SWORDS "ace_of_pentacles", - -- "two_of_pentacles", - -- "three_of_pentacles", - -- "four_of_pentacles", - -- "five_of_pentacles", - -- "six_of_pentacles", - -- "seven_of_pentacles", - -- "eight_of_pentacles", - -- "nine_of_pentacles", - -- "ten_of_pentacles", - -- "page_of_pentacles", - -- "knight_of_pentacles", - -- "queen_of_pentacles", - -- "king_of_pentacles", -- PENTACLES + "two_of_pentacles", + "three_of_pentacles", + "four_of_pentacles", + "five_of_pentacles", + "six_of_pentacles", + "seven_of_pentacles", + "eight_of_pentacles", + "nine_of_pentacles", + "ten_of_pentacles", + "page_of_pentacles", + "knight_of_pentacles", + "queen_of_pentacles", + "king_of_pentacles", -- PENTACLES +} + +PB_UTIL.ENABLED_EGO_GIFTS = { + 'imposed_weight', + 'phlebotomy_pack', + 'smokes_and_wires', + 'coffee_and_cranes', + 'fiery_down', + 'decamillennial_stewpot', + 'downpour', + 'rusty_coin', + 'ragged_umbrella', + 'thrill', + 'disk_fragment', + 'death_seeker', + 'pendant_of_nostalgia', + 'blue_lighter', + 'broken_glasses', + 'nebulizer', + 'tomorrow_fortune', + 'fluorescent_lamp', + 'lightning_rod', + 'chalice_of_trickle_down', + 'patrolling_flashlight', + 'golden_bough', + 'dark_vestige', } PB_UTIL.ENABLED_SPECTRALS = { "apostle_of_cups", "apostle_of_wands", "apostle_of_swords", - --"apostle_of_pentacles", + "apostle_of_pentacles", } @@ -581,14 +812,24 @@ PB_UTIL.ENABLED_MINOR_ARCANA_BOOSTERS = { 'minor_arcana_normal_1', 'minor_arcana_normal_2', 'minor_arcana_normal_3', + 'minor_arcana_normal_4', 'minor_arcana_jumbo_1', 'minor_arcana_jumbo_2', 'minor_arcana_mega', + 'minor_arcana_mega_2', +} + +PB_UTIL.ENABLED_EGO_GIFT_BOOSTERS = { + 'ego_gift_normal_1', } PB_UTIL.ENABLED_VOUCHERS = { 'celtic_cross', 'soothsay', + -- 'filing_cabinet', + -- 'paperclip_optimization', + 'second_trumpet', + 'rabbit_protocol', } PB_UTIL.ENABLED_TAGS = { @@ -606,6 +847,8 @@ PB_UTIL.ENABLED_ENHANCEMENTS = { "soaked", "stained", "domino", + "sleeved", + "antique" } PB_UTIL.ENABLED_EDITIONS = { @@ -642,11 +885,13 @@ PB_UTIL.ENABLED_DECKS = { 'dreamer', 'antique', 'passionate', + 'shimmering', } PB_UTIL.ENABLED_STICKERS = { 'energized', - 'temporary' + 'temporary', + 'corroded' } -- Define a Booster object with certain shared properties for Minor Arcana packs @@ -657,15 +902,11 @@ if PB_UTIL.config.minor_arcana_enabled then draw_hand = true, loc_vars = function(self, info_queue, card) - return { - -- Removes the underscore with a digit at the end of a key if it exists, - -- allowing us to make only one localization entry per type - key = self.key:gsub('_%d$', ''), - vars = { - card.ability.choose, - card.ability.extra - } - } + local orig = SMODS.Booster.loc_vars(self, info_queue, card) + -- Removes the underscore with a digit at the end of a key if it exists, + -- allowing us to make only one localization entry per type + orig['key'] = self.key:gsub('_%d$', '') + return orig end, create_card = function(self, card, i) @@ -688,7 +929,9 @@ end if PB_UTIL.config.paperclips_enabled then PB_UTIL.Paperclip = SMODS.Sticker:extend { prefix_config = { key = true }, - should_apply = false, + should_apply = function(self, card, center, area, bypass_roll) + return bypass_roll + end, config = {}, rate = 0, sets = { @@ -699,6 +942,10 @@ if PB_UTIL.config.paperclips_enabled then local x_offset = (card.T.w / 71) * -4 * card.T.scale G.shared_stickers[self.key].role.draw_major = card G.shared_stickers[self.key]:draw_shader('dissolve', nil, nil, nil, card.children.center, nil, nil, x_offset) + if self.shiny then + G.shared_stickers[self.key]:draw_shader('voucher', nil, card.ARGS.send_to_shader, nil, card.children.center, nil, + nil, x_offset) + end end, apply = function(self, card, val) @@ -772,6 +1019,215 @@ if PB_UTIL.config.minor_arcana_enabled then } end +-- Define a Booster object with certain shared properties for E.G.O. Gift packs +if PB_UTIL.config.ego_gifts_enabled then + PB_UTIL.EGO_GiftBooster = SMODS.Booster:extend { + group_key = 'paperback_ego_gift_pack', + kind = 'paperback_ego_gift', + draw_hand = false, + select_card = 'consumeables', + + loc_vars = function(self, info_queue, card) + local orig = SMODS.Booster.loc_vars(self, info_queue, card) + -- Removes the underscore with a digit at the end of a key if it exists, + -- allowing us to make only one localization entry per type + orig['key'] = self.key:gsub('_%d$', '') + return orig + end, + + create_card = function(self, card, i) + return { + set = 'paperback_ego_gift', + area = G.pack_cards, + skip_materialize = true, + soulable = true, + key_append = 'paperback_extr' + } + end, + + ease_background_colour = function(self) + ease_colour(G.C.DYN_UI.MAIN, G.C.PAPERBACK_EGO_GIFT_RED) + ease_background_colour { new_colour = G.C.PAPERBACK_EGO_GIFT_YELLOW, special_colour = G.C.BLACK, contrast = 2 } + end, + } +end + +-- Define custom EGO_Gifts object with shared properties for handling common behavior +if PB_UTIL.config.ego_gifts_enabled then + -- Vars for Calc and Loc + PB_UTIL.EGO_GIFT_SINS = { + none = { 5 }, + wrath = {}, + lust = { 2 }, + sloth = {}, + gluttony = {}, + gloom = { 1.5 }, + pride = { -15, SMODS.signed_dollars(-15) }, + envy = { 1 }, + } + -- Tables for the standardized sin calc + PB_UTIL.SIN_DEBUFF = { + none = {}, + wrath = { + func = function() + SMODS.destroy_cards(G.consumeables.cards) + end + }, + lust = { + func = function() + local _hand, _tally = nil, 1 + for k, v in ipairs(G.handlist) do + if G.GAME.hands[v].visible and G.GAME.hands[v].played >= _tally then + _hand = v + _tally = G.GAME.hands[v].played + end + end + if _hand then + local lvls_down = math.min(PB_UTIL.EGO_GIFT_SINS.lust[1], G.GAME.hands[_hand].level - 1) + if to_big(lvls_down) > to_big(0) then + SMODS.smart_level_up_hand(nil, _hand, false, -lvls_down) + return nil, true + end + end + end + }, + gluttony = { + func = function() + local compatible = {} + local perish = nil + for _, target in ipairs(G.jokers.cards) do + if target.config.center.perishable_compat and not (target.ability.eternal or target.ability.perishable) then + compatible[#compatible + 1] = target + end + end + + if next(G.jokers.cards) and next(compatible) then + perish = pseudorandom_element(compatible, pseudoseed('paperback_gluttony')) + SMODS.Stickers["perishable"]:apply(perish, true) + perish:juice_up() + end + end + }, + gloom = { + func = function() + G.GAME.paperback.blind_multiplier = G.GAME.paperback.blind_multiplier * PB_UTIL.EGO_GIFT_SINS.gloom[1] + end + }, + envy = { + func = function() + G.hand:change_size(-PB_UTIL.EGO_GIFT_SINS.envy[1]) + end + }, + madness = { + func = function() + local jokers = {} + for i, v in ipairs(G.jokers.cards) do + if not SMODS.is_eternal(v) and not v.getting_sliced then + jokers[#jokers + 1] = v + end + end + local target = pseudorandom_element(jokers, pseudoseed("golden_bough_destruction")) + if target then + SMODS.destroy_cards({ target }) + end + end + }, + } + --- @type SMODS.Consumable + PB_UTIL.EGO_Gift = SMODS.Consumable:extend { + badge_text_colour = G.C.PAPERBACK_EGO_GIFT_YELLOW, + set = 'paperback_ego_gift', + unlocked = true, + discovered = false, + cost = 0, + -- This card is always selected, not used. It goes to the 'consumeables' area + select_card = "consumeables", + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = PB_UTIL.sin_tooltip(card.ability.sin) + local loc = {} + if self.ego_loc_vars then + loc = self.ego_loc_vars(self, info_queue, card) + end + return loc + end, + + calculate = function(self, card, context) + if context.selling_self then + if card.ability.sin then + G.GAME.paperback.sold_ego_gifts[#G.GAME.paperback.sold_ego_gifts + 1] = card + check_for_unlock({ type = 'paperback_sold_ego_gifts' }) + SMODS.calculate_context({ + paperback = { + sold_ego_gift = card, + } + }) + if not card.ability.paperback_corroded then + local sin = card.ability.sin + return PB_UTIL.SIN_DEBUFF[sin] + end + return { + message = localize('paperback_corroded_ex') + } + end + end + + if self.ego_gift_calc then + return self:ego_gift_calc(card, context) + end + end, + set_card_type_badge = function(self, card, badges) + badges[#badges + 1] = create_badge(localize('k_paperback_ego_gift'), G.C.PAPERBACK_EGO_GIFT_RED, + G.C.PAPERBACK_EGO_GIFT_YELLOW, 1.2) + end, + + set_badges = function(self, card, badges) + if card.ability.sin then + local badge_key = 'k_paperback_ego_sin_' .. card.ability.sin + if card.ability.sin == 'none' or card.ability.sin == 'madness' then + badges[#badges + 1] = create_badge(localize(badge_key), G.C + ['PAPERBACK_SIN_' .. string.upper(card.ability.sin)], + G.C.PAPERBACK_BLACK, 1.2) + else + badges[#badges + 1] = create_badge(localize(badge_key), G.C + ['PAPERBACK_SIN_' .. string.upper(card.ability.sin)], + G.C.WHITE, 1.2) + end + end + end, + + add_to_deck = function(self, card, from_debuff) + PB_UTIL.set_sell_value(card, 0) + local dupe = false + for i, v in ipairs(G.consumeables.cards) do + if v.config.center.key == card.config.center.key and v.ability.sin ~= 'none' and card.ability.sin ~= 'none' and v ~= card then + dupe = true + end + end + if dupe then + local vestige = SMODS.add_card { key = 'c_paperback_dark_vestige' } + G.GAME.paperback.destroy_no_calc = true + SMODS.destroy_cards({ card }) + G.GAME.paperback.destroy_no_calc = nil + end + + if self.ego_add then + self:ego_add(card, from_debuff) + end + end, + + remove_from_deck = function(self, card, from_debuff) + if self.ego_remove then + self:ego_remove(card, from_debuff) + end + end, + + can_use = function(self, card) + return false + end + } +end + if PB_UTIL.config.suits_enabled then --- @type SMODS.Consumable PB_UTIL.Planet = SMODS.Consumable:extend { @@ -800,7 +1256,7 @@ if PB_UTIL.config.suits_enabled then } end ---- @alias Paperclip "blue" | "black" | "white" | "red" | "orange" | "pink" | "yellow" | "gold" +--- @alias Paperclip "blue" | "black" | "white" | "red" | "orange" | "pink" | "yellow" | "gold" | "platinum" PB_UTIL.ENABLED_PAPERCLIPS = { "white_clip", "black_clip", @@ -808,8 +1264,13 @@ PB_UTIL.ENABLED_PAPERCLIPS = { "red_clip", "orange_clip", "yellow_clip", - --"green_clip", + "green_clip", "blue_clip", - --"purple_clip", + "purple_clip", "pink_clip", + "platinum_clip" +} +--- @alias Special_Paperclip "platinum" +PB_UTIL.SPECIAL_PAPERCLIPS = { + "platinum_clip" } diff --git a/utilities/hooks.lua b/utilities/hooks.lua index 7d269f6a..a8ef391b 100644 --- a/utilities/hooks.lua +++ b/utilities/hooks.lua @@ -5,12 +5,16 @@ function Game.init_game_object(self) local ret = init_game_object_ref(self) -- referenced code from Ortalab to get the list of secret hands + -- but also kinda not anymore (thanks N') local secrets = {} - for k, v in pairs(ret.hands) do - if v.visible == false then table.insert(secrets, k) end + for k, v in pairs(SMODS.PokerHands) do + if (type(v.visible) == 'function' and not v:visible()) or v.visible == false then table.insert(secrets, k) end end ret.paperback = { + solar_system_ct = 1, + reference_card_ct = 0, + round = { scored_clips = 0 }, @@ -25,10 +29,21 @@ function Game.init_game_object(self) jjjj_count = 0, banned_run_keys = {}, secret_hands = secrets, + arcana_used = {}, + sold_ego_gifts = {}, weather_radio_hand = 'High Card', joke_master_hand = 'High Card', - da_capo_suit = 'Clubs' + da_capo_suit = 'Clubs', + + skipped_blind = false, + blind_multiplier = 1, + + corroded_rounds = 3, + + shimmering_change = 0, + second_trumpets = 0, + second_trumpet_change = 0, } return ret end @@ -122,17 +137,29 @@ function Tag.yep(self, message, _colour, func) return yep_ref(self, message, _colour, func) end --- Add new context that happens after destroying jokers +-- Add new context that happens after destroying things local remove_ref = Card.remove function Card.remove(self) - -- Check that the card being removed is a joker that's in the player's deck and that it's not being sold - if self.added_to_deck and self.ability.set == 'Joker' and not G.CONTROLLER.locks.selling_card then - SMODS.calculate_context({ - paperback = { - destroying_joker = true, - destroyed_joker = self - } - }) + -- Check that the card being removed is owned by the player and that it's not being sold/used + if not self.playing_card and self.added_to_deck + and not (self.paperback_sell_flag or self.paperback_use_flag) then + if self.ability.set == 'Joker' then + SMODS.calculate_context({ + paperback = { + destroying_joker = true, + destroying_non_playing_card = true, + destroyed_joker = self, + destroyed_card = self + } + }) + else + SMODS.calculate_context({ + paperback = { + destroying_non_playing_card = true, + destroyed_card = self + } + }) + end end return remove_ref(self) @@ -169,20 +196,21 @@ SMODS.calculate_repetitions = function(card, context, reps) for _, area in ipairs(SMODS.get_card_areas('playing_cards')) do for k, v in ipairs(area.cards or {}) do if v ~= card then - local eval = v:calculate_enhancement { - paperback = { - other_card = card, - cardarea = card.area, - scoring_hand = context.scoring_hand, - repetition_from_playing_card = true, + if v:can_calculate(context.ignore_debuff, context.remove_playing_cards) then + local eval = v:calculate_enhancement { + paperback = { + other_card = card, + cardarea = card.area, + scoring_hand = context.scoring_hand, + repetition_from_playing_card = true, + } } - } - - if eval and eval.repetitions then - for _ = 1, eval.repetitions do - eval.card = eval.card or card - eval.message = eval.message or (not eval.remove_default_message and localize('k_again_ex')) - reps[#reps + 1] = { key = eval } + if eval and eval.repetitions then + for _ = 1, eval.repetitions do + eval.card = eval.card or card + eval.message = eval.message or (not eval.remove_default_message and localize('k_again_ex')) + reps[#reps + 1] = { key = eval } + end end end end @@ -192,6 +220,24 @@ SMODS.calculate_repetitions = function(card, context, reps) return calculate_repetitions_ref(card, context, reps) end +-- For nichola +local calculate_main_scoring_ref = SMODS.calculate_main_scoring +function SMODS.calculate_main_scoring(context, scoring_hand) + calculate_main_scoring_ref(context, scoring_hand) + if context.cardarea == G.play then + SMODS.calculate_context { + paperback = { + nichola = true -- Name can be changed later + -- the context is "after played cards score", a better name probably exists + }, + full_hand = G.play.cards, + scoring_hand = context.scoring_hand, + scoring_name = context.scoring_name, + poker_hands = context.poker_hands + } + end +end + -- New context for when a tag is added local add_tag_ref = add_tag function add_tag(tag) @@ -209,14 +255,19 @@ end -- accounts for Shortcut by checking for Q and 3 as well local get_straight_ref = get_straight function get_straight(hand, min_length, skip, wrap) - local has_king_queen = false - local has_2_3 = false - for i = 1, #hand do - if hand[i]:get_id() == 13 or hand[i]:get_id() == 12 then has_king_queen = true end - if hand[i]:get_id() == 2 or hand[i]:get_id() == 3 then has_2_3 = true end + local orig_straights = get_straight_ref(hand, min_length, skip, wrap) + if wrap then return orig_straights end + local result = {} + for _, straight in ipairs(orig_straights) do + local has_king_queen = false + local has_2_3 = false + for i = 1, #straight do + if straight[i]:get_id() == 13 or straight[i]:get_id() == 12 then has_king_queen = true end + if straight[i]:get_id() == 2 or straight[i]:get_id() == 3 then has_2_3 = true end + end + if not (has_king_queen and has_2_3) then table.insert(result, straight) end end - if has_king_queen and has_2_3 then return {} end - return get_straight_ref(hand, min_length, skip, wrap) + return result end -- Apostle-high straight flushes get renamed to "Rapture" @@ -241,13 +292,108 @@ function G.FUNCS.get_poker_hand_info(_cards) return text, loc_disp_text, poker_hands, scoring_hand, disp_text end --- Used for checking for eternal compatibility against temporary +-- When calculating the sell cost for an E.G.O. Gift, override it to 0 +-- None and Pride respectively get set to 5 and -15 +-- Unless corroded +local set_cost_ref = Card.set_cost +function Card.set_cost(self) + local ret = set_cost_ref(self) + if self.added_to_deck then + if self.config.center.set == "paperback_ego_gift" and self.ability.sin then + if self.ability.sin == 'pride' or self.ability.sin == 'none' then + self.sell_cost = PB_UTIL.EGO_GIFT_SINS[self.ability.sin][1] + else + self.sell_cost = 0 + end + end + return ret + end +end + +local can_sell_ref = Card.can_sell_card +function Card.can_sell_card(self, context) + if self.ability.sin and self.ability.sin == 'sloth' then + if self.ability.paperback_corroded then + return true + else + return G.GAME.paperback.skipped_blind + end + end + + return can_sell_ref(self, context) +end + +-- Used for checking for eternal compatibility against temporary and corroded local set_eternal_ref = Card.set_eternal function Card.set_eternal(self, eternal) - if self.ability.paperback_temporary then + if self.ability.paperback_temporary or self.ability.paperback_corroded then return false else local ret = set_eternal_ref(self, eternal) return ret end end + +-- Keep track of G.GAME.paperback.this_shop_dollars_spent +-- Redoing this a bit more accurately than Bunco +local inc_career_stat_ref = inc_career_stat +function inc_career_stat(stat, mod) + if stat == 'c_shop_dollars_spent' then + if to_big(mod) > to_big(0) then + G.GAME.paperback.this_shop_dollars_spent = (G.GAME.paperback.this_shop_dollars_spent or 0) + mod + check_for_unlock({ type = 'spend_in_one_shop', spent = G.GAME.paperback.this_shop_dollars_spent }) + end + end + return inc_career_stat_ref(stat, mod) +end + +local toggle_shop_ref = G.FUNCS.toggle_shop +G.FUNCS.toggle_shop = function(e) + toggle_shop_ref(e) + if G.shop then + G.GAME.paperback.this_shop_dollars_spent = nil + end +end + +-- if a special clip is copied, replace it with a random non-special clip +local copy_card_ref = copy_card +copy_card = function(other, new_card, card_scale, playing_card, strip_edition) + local card = copy_card_ref(other, new_card, card_scale, playing_card, strip_edition) + local clip = PB_UTIL.has_paperclip(card) + clip = clip and string.sub(clip, 11) -- bleh, hardcoded for paperback's prefix + if not G.SETTINGS.paused and PB_UTIL.is_special_clip(clip) then + PB_UTIL.set_paperclip(card, PB_UTIL.poll_paperclip('plat_copy', false)) + end + return card +end + +local pseudorandom_element_ref = pseudorandom_element +function pseudorandom_element(_t, seed, args) + -- Remove EGO Gift consumables/type when randomly selecting anything + -- This is very much special cased and very slow, + -- maybe there's a better and more efficient way. + local keys_to_remove = {} + for k, v in pairs(_t) do + if v == SMODS.ConsumableTypes['paperback_ego_gift'] + or ( + type(v) == 'table' and + (v.set == "paperback_ego_gift" or v.key == "c_paperback_golden_bough")) + then + table.insert(keys_to_remove, k) + end + end + for _, remove_key in ipairs(keys_to_remove) do + _t[remove_key] = nil + end + return pseudorandom_element_ref(_t, seed, args) +end + + +-- WhiteNight is indestructible +-- Currently doesn't do much because WhiteNight always +-- gets the Eternal sticker +local is_eternal_ref = SMODS.is_eternal +function SMODS.is_eternal(card, ...) + return is_eternal_ref(card, ...) + or card.config.center.paperback and card.config.center.paperback.indestructible +end diff --git a/utilities/misc_functions.lua b/utilities/misc_functions.lua index 431b596e..6ff8c6b2 100644 --- a/utilities/misc_functions.lua +++ b/utilities/misc_functions.lua @@ -5,15 +5,28 @@ if not SMODS.ObjectTypes.Food then SMODS.ObjectType { key = 'Food', default = 'j_egg', - cards = {}, - inject = function(self) - SMODS.ObjectType.inject(self) - -- Insert base game food jokers - for k, _ in pairs(PB_UTIL.vanilla_food) do - self:inject_card(G.P_CENTERS[k]) + cards = copy_table(PB_UTIL.vanilla_food), + } +end + +--- Initialize ObjectTypes for Minor Arcana suits +if PB_UTIL.config.minor_arcana_enabled then + for _, suit in ipairs { "cups", "wands", "swords", "pentacles" } do + local cards = {} + + for _, v in ipairs(PB_UTIL.ENABLED_MINOR_ARCANA) do + -- Checks if the string ends in "_of_pentacles" for example + if v:match(".*_of_" .. suit .. "$") then + cards['c_paperback_' .. v] = true end end - } + + SMODS.ObjectType { + key = "paperback_minor_arcana_" .. suit, + default = 'c_paperback_ace_of_' .. suit, + cards = cards + } + end end ---Checks if a string is a valid paperclip key @@ -85,12 +98,25 @@ end ---Fetches a random paperclip type using a given seed ---@param seed string -function PB_UTIL.poll_paperclip(seed) +---@param include_special boolean? if True, special clips such as Platinum Clips are allowed be polled (look at PB_UTIL.SPECIAL_PAPERCLIPS) +function PB_UTIL.poll_paperclip(seed, include_special) local clip = pseudorandom_element(PB_UTIL.ENABLED_PAPERCLIPS, pseudoseed(seed)) + while not include_special and PB_UTIL.is_special_clip(clip) do + clip = pseudorandom_element(PB_UTIL.ENABLED_PAPERCLIPS, pseudoseed(seed)) + end clip = string.sub(clip, 1, #clip - 5) return clip end +---Checks if a clip is a Special Paperclip +---@param clip string +function PB_UTIL.is_special_clip(clip) + for k, v in ipairs(PB_UTIL.SPECIAL_PAPERCLIPS) do + if v == clip then return true end + end + return false +end + ---Checks if a provided card is classified as a "Food Joker" ---@param card table | string a center key or a card ---@return boolean @@ -213,24 +239,33 @@ end ---@param card table ---@return number function PB_UTIL.calculate_stick_xMult(card) - local xMult = card.ability.extra.xMult + local xMult = card.ability.extra.xMult or 1 + local other_sticks = 0 -- Only calculate the xMult if the G.jokers cardarea exists if G.jokers and G.jokers.cards then for k, current_card in pairs(G.jokers.cards) do if current_card ~= card and string.match(string.lower(current_card.ability.name), "%f[%w]stick%f[%W]") then - xMult = xMult + card.ability.extra.xMult + other_sticks = other_sticks + 1 end end end + if card.ability.extra.xMult_if_stick and other_sticks >= 1 then + xMult = card.ability.extra.xMult_if_stick + end + if card.ability.extra.xMult then + xMult = xMult + card.ability.extra.xMult * other_sticks + end + return xMult end ---Gets the number of unique suits in a provided scoring hand ---@param scoring_hand table ---@param bypass_debuff boolean? ----@param flush_calc boolean? +---@param flush_calc boolean? Usually use this instead of bypass_debuff for Jokers: +--- debuffed wild cards are considered their original suit only ---@return integer function PB_UTIL.get_unique_suits(scoring_hand, bypass_debuff, flush_calc) -- Set each suit's count to 0 @@ -240,6 +275,11 @@ function PB_UTIL.get_unique_suits(scoring_hand, bypass_debuff, flush_calc) suits[k] = 0 end + -- NOTE greedy algorithm is technically wrong for cards with weird suit combos, + -- for example a card with suit A+B might count for A, blocking another card + -- that can only be A + -- (a bipartite matching algorithm would work) + -- First we cover all the non Wild Cards in the hand for _, card in ipairs(scoring_hand) do if not SMODS.has_any_suit(card) then @@ -737,14 +777,51 @@ end ---Used to check whether a card is a light or dark suit ---@param card table ---@param type 'light' | 'dark' +---@param bypass_debuff boolean? +---@param flush_calc boolean? Usually use this instead of bypass_debuff for Jokers: +--- debuffed wild cards are considered their original suit only ---@return boolean -function PB_UTIL.is_suit(card, type) +function PB_UTIL.is_suit(card, type, bypass_debuff, flush_calc) + assert(type == 'light' or type == 'dark') for _, v in ipairs(type == 'light' and PB_UTIL.light_suits or PB_UTIL.dark_suits) do - if card:is_suit(v) then return true end + if card:is_suit(v, bypass_debuff, flush_calc) then return true end end return false end +--- PB_UTIL.is_non_suit(card, X) checks if `card` specifically can only be a non-X suit. +--- Usually used to check for a negative effect happening, like +--- in Derecho: if the hand contains a non-dark -> no upgrade. +--- +--- Works with edge cases: +--- - Stones return false (not a suit) +--- - Wilds return false (can always count as an X) +--- - Debuffed cards with a base suit of non-X return false, +--- if bypass_debuff and flush_calc are both false +--- (debuffed cards are non-scoring) +--- +--- These edge cases are also why this should generally be used for negative effects only. +--- +---@param card table +---@param type 'string' 'light', 'dark', or a suit key +---@param bypass_debuff boolean? +---@param flush_calc boolean? Usually use this instead of bypass_debuff for Jokers: +--- debuffed wild cards are considered their original suit only +---@return boolean +function PB_UTIL.is_non_suit(card, type, bypass_debuff, flush_calc) + local suit_arr = ( + type == 'light' and PB_UTIL.light_suits + or type == 'dark' and PB_UTIL.dark_suits + or { type } + ) + for _, v in ipairs(suit_arr) do + if card:is_suit(v, bypass_debuff, flush_calc) then return false end + end + if SMODS.has_no_suit(card) then return false end + if card.debuff and not bypass_debuff and not flush_calc then return false end + return true +end + ---Checks if the provided suit is currently in the deck ---@param suit string ---@param ignore_wild? boolean @@ -804,15 +881,29 @@ function PB_UTIL.has_modded_suit_in_deck() return false end +-- Balance a fraction of chips and mult. Return the new values. +-- This just does the math, no side effects +---@param chips number +---@param mult number +---@param frac number? -- Defaults to 1 +---@return number +---@return number +function PB_UTIL.calculate_balance_frac(chips, mult, frac) + if not frac then frac = 1 end + local tot = (chips + mult) * frac + return math.floor(chips * (1 - frac) + tot / 2), math.floor(mult * (1 - frac) + tot / 2) +end + --- Balances chips and shows the cosmetic effects just like Plasma deck ---@param card (table|Card)? ---@param only_visual boolean whether to only do the visual effects -function PB_UTIL.apply_plasma_effect(card, only_visual) +---@param frac -- Fraction of chips and mult to balance +function PB_UTIL.apply_plasma_effect(card, only_visual, frac) -- Actually balance the chips and mult if not only_visual then - local tot = hand_chips + mult - hand_chips = mod_chips(math.floor(tot / 2)) - mult = mod_mult(math.floor(tot / 2)) + local new_chips, new_mult = PB_UTIL.calculate_balance_frac(hand_chips, mult, frac) + hand_chips = mod_chips(new_chips) + mult = mod_mult(new_mult) end update_hand_text({ delay = 0 }, { mult = mult, chips = hand_chips }) @@ -831,7 +922,7 @@ function PB_UTIL.apply_plasma_effect(card, only_visual) if card then SMODS.calculate_effect({ message = localize('k_balanced'), - colour = { 0.8, 0.45, 0.85, 1 }, + colour = { 0.8, 0.45, 0.85, 1 }, instant = true }, card) end @@ -870,6 +961,14 @@ function PB_UTIL.apply_plasma_effect(card, only_visual) delay(0.6) end +--- Convert number to string, ensuring either `+` or `-` is put in front +--- (SMODS.signed will leave 0 as is) +--- @param val number +--- @return string +function PB_UTIL.force_signed(val) + return (val >= 0 and '+' or '') .. val +end + --- Logic for the Panorama Jokers --- @param self (SMODS.Center) --- @param card (Card) @@ -1063,31 +1162,34 @@ end ---@param seed string|number ---@param base_numerator number|nil -- If skipped, defaults to 1 ---@param base_denominator number|nil -- If skipped, tries to access `obj.ability.extra.odds` ----@param key string|nil -- If skipped, sets to `"paperback_" .. seed` +---@param identifier string|nil -- If skipped, sets to `"paperback_" .. seed` ---@return boolean -function PB_UTIL.chance(obj, seed, base_numerator, base_denominator, key) +function PB_UTIL.chance(obj, seed, base_numerator, base_denominator, identifier) return SMODS.pseudorandom_probability( obj, seed, base_numerator or 1, base_denominator or (obj.ability and obj.ability.extra and obj.ability.extra.odds), - key or ('paperback_' .. seed) + identifier or ('paperback_' .. seed) ) end --- Wrapper function around SMODS.get_probability_vars ----@param obj Card|table ----@param key string|nil -- If skipped, tries to set it to `obj.config.center_key` +---@param obj? Card|table +---@param identifier? string -- If skipped, tries to set it to `obj.config.center_key` ---@param base_numerator number|nil -- If skipped, defaults to 1 ---@param base_denominator number|nil -- If skipped, tries to access `obj.ability.extra.odds` ---@return number numerator ---@return number denominator -function PB_UTIL.chance_vars(obj, key, base_numerator, base_denominator) +function PB_UTIL.chance_vars(obj, identifier, base_numerator, base_denominator) + -- todo: many calls to PB_UTIL.chance_vars don't use the same identifier + -- as the corresponding PB_UTIL.chance + -- (this doesn't matter much, we don't use identifiers) return SMODS.get_probability_vars( obj, base_numerator or 1, - base_denominator or (obj.ability and obj.ability.extra and obj.ability.extra.odds), - key or (obj.config and obj.config.center_key), + base_denominator or (obj and obj.ability and obj.ability.extra and obj.ability.extra.odds), + identifier or (obj and obj.config and obj.config.center_key), false ) end @@ -1098,3 +1200,76 @@ end function PB_UTIL.is_card(c) return c and type(c) == "table" and c.is and type(c.is) == "function" and c:is(Card) end + +-- Returns a table of all the unique special effects in the deck +---@param check_for_enhancements boolean +---@param check_for_seals boolean +---@return integer +function PB_UTIL.special_cards_in_deck(check_for_enhancements, check_for_seals) + local enhancements, seals = {}, {} + check_for_enhancements = check_for_enhancements or false + check_for_seals = check_for_seals or false + + if G.playing_cards then + for _, v in pairs(G.playing_cards) do + -- Check for an enhancement + if check_for_enhancements then + for k, _ in pairs(SMODS.get_enhancements(v)) do + PB_UTIL.add_unique_value(enhancements, k) + end + end + + -- Check for a seal + if check_for_seals then + if v.Mid.seal then + PB_UTIL.add_unique_value(seals, v.Mid.seal) + end + end + end + end + + local total = + (enhancements and #enhancements or 0) + + (seals and #seals or 0) + + return total +end + +---@param tbl table +---@param value any +function PB_UTIL.add_unique_value(tbl, value) + for _, v in pairs(tbl) do + if v == value then + return + end + end + + table.insert(tbl, value) +end + +-- Return true if `card` is an EGO Gift. +---@param card Card +---@return boolean +function PB_UTIL.is_ego_gift(card) + return card.ability.set == "paperback_ego_gift" or card.config.center_key == "c_paperback_golden_bough" +end + +-- Returns the number of things destroyed in `context`. +---@param context CalcContext +---@return number +function PB_UTIL.count_destroyed_things(context) + if context.remove_playing_cards then return #context.removed end + if context.paperback and context.paperback.destroying_non_playing_card then return 1 end + return 0 +end + +-- Returns true if a jimbocards is at 0 hands left +---@return boolean +function PB_UTIL.check_jimbocards_at_0() + for _, v in ipairs(SMODS.find_card('j_paperback_jimbocards')) do + if v.ability.extra.hands_to_death <= 0 then + return true + end + end + return false +end diff --git a/utilities/ui.lua b/utilities/ui.lua index 25ffe4b5..d3c3aa49 100644 --- a/utilities/ui.lua +++ b/utilities/ui.lua @@ -49,6 +49,11 @@ SMODS.current_mod.config_tab = function() label = localize('paperback_ui_enable_ranks'), ref_table = PB_UTIL.config, ref_value = 'ranks_enabled', + }, + create_toggle { + label = localize('paperback_ui_enable_ego_gifts'), + ref_table = PB_UTIL.config, + ref_value = 'ego_gifts_enabled', } } }, @@ -247,7 +252,7 @@ if PB_UTIL.config.paperclips_enabled then end end - return SMODS.card_collection_UIBox(paperclips, { 5, 5 }, { + return SMODS.card_collection_UIBox(paperclips, { 6, 5 }, { snap_back = true, hide_single_page = true, collapse_single_page = true, @@ -386,6 +391,20 @@ function PB_UTIL.paperclip_tooltip(type) } end +--- @alias Sin "none" | "wrath" | "lust" | "sloth" | "gluttony" | "gloom" | "pride" | "envy" +--- @param type Sin +--- @return table | nil Tooltip +function PB_UTIL.sin_tooltip(type) + local key = 'paperback_sin_' .. type + local vars = PB_UTIL.EGO_GIFT_SINS[type] + + return { + set = 'Other', + key = key, + vars = vars + } +end + -- text display function for plague doctor's quotes -- adapted from vanilla attention_text() --- @param args table