From aa31eb84432581ba4154b22926032b592d178d8a Mon Sep 17 00:00:00 2001 From: Thermo-Dyn Date: Sun, 1 Feb 2026 02:43:14 -0800 Subject: [PATCH 1/4] (Joker) Added Jacks --- content/joker/jacks.lua | 43 +++++++++++++++++++++++++++++++++++++++ localization/en-us.lua | 8 ++++++++ utilities/definitions.lua | 1 + 3 files changed, 52 insertions(+) create mode 100644 content/joker/jacks.lua diff --git a/content/joker/jacks.lua b/content/joker/jacks.lua new file mode 100644 index 00000000..f5ddfa87 --- /dev/null +++ b/content/joker/jacks.lua @@ -0,0 +1,43 @@ +SMODS.Joker { + key = "jacks", + config = { + extra = { + mult = 0, + change = 1 + } + }, + rarity = 1, + pos = { x = 24, y = 8 }, + atlas = "jokers_atlas", + cost = 5, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + paperback_credit = { + coder = { 'thermo' } + }, + + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.change, + card.ability.extra.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 context.discard and context.other_card:get_id() == 11 then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.change + return { + message = localize('k_upgrade_ex'), + colour = G.C.ORANGE + } + end + end +} diff --git a/localization/en-us.lua b/localization/en-us.lua index 2f112ab5..cbdebf91 100644 --- a/localization/en-us.lua +++ b/localization/en-us.lua @@ -2656,6 +2656,14 @@ return { "and {C:attention}last{} card" } }, + j_paperback_jacks = { + name = "Jacks", + text = { + "This Joker gains {C:mult}+#1#{} Mult", + "when a {C:attention}Jack{} is discarded", + "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" + } + }, -- Cross-Mod jokers start here j_paperback_moon_waltz = { name = "Moon Waltz", diff --git a/utilities/definitions.lua b/utilities/definitions.lua index 3bf7e15d..6ced84b6 100644 --- a/utilities/definitions.lua +++ b/utilities/definitions.lua @@ -423,6 +423,7 @@ PB_UTIL.ENABLED_JOKERS = { "subterfuge", "the_world", -- "red_sun", + "jacks", "the_sun_rises", "blood_rain", -- "war_without_reason", From d306357af1ec87045ca8e455161742320355b53b Mon Sep 17 00:00:00 2001 From: Thermo-Dyn Date: Sun, 1 Feb 2026 03:02:04 -0800 Subject: [PATCH 2/4] (Joker) Added Red Sun in the Sky --- content/joker/jacks.lua | 76 ++++++++++++++-------------- content/joker/red_sun_in_the_sky.lua | 47 +++++++++++++++++ localization/en-us.lua | 10 +++- utilities/definitions.lua | 2 +- 4 files changed, 95 insertions(+), 40 deletions(-) create mode 100644 content/joker/red_sun_in_the_sky.lua diff --git a/content/joker/jacks.lua b/content/joker/jacks.lua index f5ddfa87..24b7fc0a 100644 --- a/content/joker/jacks.lua +++ b/content/joker/jacks.lua @@ -1,43 +1,43 @@ SMODS.Joker { - key = "jacks", - config = { - extra = { - mult = 0, - change = 1 - } - }, - rarity = 1, - pos = { x = 24, y = 8 }, - atlas = "jokers_atlas", - cost = 5, - blueprint_compat = true, - eternal_compat = true, - perishable_compat = false, - paperback_credit = { - coder = { 'thermo' } - }, + key = "jacks", + config = { + extra = { + mult = 0, + change = 1 + } + }, + rarity = 1, + pos = { x = 24, y = 8 }, + atlas = "jokers_atlas", + cost = 5, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = false, + paperback_credit = { + coder = { 'thermo' } + }, - loc_vars = function(self, info_queue, card) - return { - vars = { - card.ability.extra.change, - card.ability.extra.mult - } - } - end, + loc_vars = function(self, info_queue, card) + return { + vars = { + card.ability.extra.change, + card.ability.extra.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 context.discard and context.other_card:get_id() == 11 then - card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.change - return { - message = localize('k_upgrade_ex'), - colour = G.C.ORANGE - } - 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 context.discard and context.other_card:get_id() == 11 then + card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.change + return { + message = localize('k_upgrade_ex'), + colour = G.C.ORANGE + } + end + end } diff --git a/content/joker/red_sun_in_the_sky.lua b/content/joker/red_sun_in_the_sky.lua new file mode 100644 index 00000000..c0706e38 --- /dev/null +++ b/content/joker/red_sun_in_the_sky.lua @@ -0,0 +1,47 @@ +SMODS.Joker { + key = "red_sun_in_the_sky", + config = { + extra = { + mult = 0, + change = 1 + } + }, + rarity = 1, + pos = { x = 19, y = 5 }, + atlas = "jokers_atlas", + cost = 5, + blueprint_compat = true, + eternal_compat = true, + perishable_compat = true, + paperback = { + coder = { 'thermo' } + }, + + loc_vars = function(self, info_queue, card) + info_queue[#info_queue + 1] = PB_UTIL.suit_tooltip('light') + return { + vars = { + card.ability.extra.change, + card.ability.extra.mult + } + } + end, + + 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 not context.blueprint then card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.change end + return { + mult = card.ability.extra.mult + } + end + end + if context.end_of_round and context.main_eval then + card.ability.extra.mult = 0 + return { + message = localize('k_reset'), + colour = G.C.ORANGE + } + end + end +} diff --git a/localization/en-us.lua b/localization/en-us.lua index 653563b2..fa0d3a08 100644 --- a/localization/en-us.lua +++ b/localization/en-us.lua @@ -2664,6 +2664,15 @@ return { "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" } }, + j_paperback_red_sun_in_the_sky = { + name = "Red Sun in the Sky", + text = { + "Scored {C:attention}light suits{}", + "give {C:mult}+#1#{} Mult for each", + "scored {C:attention}light suit{} this round", + "{C:inactive}(Currently {C:mult}+#2#{C:inactive} Mult)" + } + }, -- Cross-Mod jokers start here j_paperback_moon_waltz = { name = "Moon Waltz", @@ -4081,7 +4090,6 @@ return { 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_show_credits = "Show developer credits", paperback_ui_enable_enhancements = "Enable Enhancements", paperback_ui_enable_editions = "Enable Editions", paperback_ui_enable_paperclips = "Enable Paperclips", diff --git a/utilities/definitions.lua b/utilities/definitions.lua index 6ced84b6..49ee4ee6 100644 --- a/utilities/definitions.lua +++ b/utilities/definitions.lua @@ -422,7 +422,7 @@ PB_UTIL.ENABLED_JOKERS = { "moribund", "subterfuge", "the_world", - -- "red_sun", + "red_sun_in_the_sky", "jacks", "the_sun_rises", "blood_rain", From 3903dbba4b10ac753dd1de28c553f64d6b658af6 Mon Sep 17 00:00:00 2001 From: Thermo-Dyn Date: Tue, 3 Feb 2026 20:40:28 -0800 Subject: [PATCH 3/4] (Loaded Dice) Spawns only if you have crowns --- content/joker/loaded_dice.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/joker/loaded_dice.lua b/content/joker/loaded_dice.lua index d8576fde..84d26a04 100644 --- a/content/joker/loaded_dice.lua +++ b/content/joker/loaded_dice.lua @@ -17,7 +17,8 @@ SMODS.Joker { coder = { 'thermo' } }, paperback = { - requires_custom_suits = true + requires_custom_suits = true, + requires_crowns = true, }, loc_vars = function(self, info_queue, card) From ebf452e06f6091cec74c3adbcc89bb4d997675d7 Mon Sep 17 00:00:00 2001 From: Thermo-Dyn Date: Tue, 3 Feb 2026 21:25:42 -0800 Subject: [PATCH 4/4] (Stella Octangula) Works on more than the first round if no stars were scored --- content/joker/stella_octangula.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/joker/stella_octangula.lua b/content/joker/stella_octangula.lua index ad96d622..3b46c2d8 100644 --- a/content/joker/stella_octangula.lua +++ b/content/joker/stella_octangula.lua @@ -42,7 +42,7 @@ if PB_UTIL.should_load_spectrum_items() then calculate = function(self, card, context) -- vremade puts the photograph face checker in individual, -- which means it searches every card every time. this may be faster? - if context.initial_scoring_step and G.GAME.current_round.hands_played == 0 then + if context.initial_scoring_step and not card.ability.extra.used then card.ability.extra.active = true card.ability.extra.used = false card.ability.extra.first_star = nil @@ -61,7 +61,7 @@ if PB_UTIL.should_load_spectrum_items() then } end end - if context.after and card.ability.extra.active and card.ability.extra.used then + if context.end_of_round and context.main_eval and card.ability.extra.active and card.ability.extra.used then card.ability.extra.active = false card.ability.extra.used = false end