From cc43913a46a3dd93eae6b5d143c0f5dbe0aaf688 Mon Sep 17 00:00:00 2001 From: AllUniversal Date: Mon, 18 May 2026 19:29:07 +0200 Subject: [PATCH 1/5] Added `SMODS.can_context_retrigger()` and `SMODS.can_context_post_trigger()` +Title, they replace the hardcoded context flag checks. --- lovely/better_calc.toml | 4 ++-- src/utils.lua | 43 ++++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/lovely/better_calc.toml b/lovely/better_calc.toml index 9bd27b4a4..1b8ff0635 100644 --- a/lovely/better_calc.toml +++ b/lovely/better_calc.toml @@ -324,13 +324,13 @@ if card.area and area_set[card.area] then if type(jokers) ~= 'table' then jokers = nil end if jokers or triggered then ret.jokers = jokers - if not (context.retrigger_joker_check or context.retrigger_joker) and not (jokers and jokers.no_retrigger) and not SMODS.is_getter_context(context) then + if not (jokers and jokers.no_retrigger) then local retriggers = SMODS.calculate_retriggers(card, context, ret) if next(retriggers) then ret.retriggers = retriggers end end - if not context.post_trigger and not context.retrigger_joker_check and SMODS.optional_features.post_trigger then + if SMODS.optional_features.post_trigger and SMODS.can_context_post_trigger(context) then SMODS.calculate_context({blueprint_card = context.blueprint_card, post_trigger = true, other_card = card, other_context = context, other_ret = ret}, post_trig) end end diff --git a/src/utils.lua b/src/utils.lua index ceada06d1..c88384580 100644 --- a/src/utils.lua +++ b/src/utils.lua @@ -1716,7 +1716,7 @@ end SMODS.calculate_retriggers = function(card, context, _ret) local retriggers = {} - if not SMODS.optional_features.retrigger_joker then return retriggers end + if not SMODS.optional_features.retrigger_joker or not SMODS.can_context_retrigger(context) then return retriggers end for _, area in ipairs(SMODS.get_card_areas('jokers')) do for _, _card in ipairs(area.cards) do local eval, post = eval_card(_card, {retrigger_joker_check = true, other_card = card, other_context = context, other_ret = _ret}) @@ -1959,6 +1959,37 @@ function SMODS.is_getter_context(context) return false end +SMODS.CONTEXT_RETRIGGER_BLACKLIST = { + mod_probability = true, fix_probability = true, + check_enhancement = true, + retrigger_joker_check = true, retrigger_joker = true +} + +function SMODS.can_context_retrigger(context) + for entry, _ in pairs(SMODS.CONTEXT_RETRIGGER_BLACKLIST) do + if context[entry] then + return false + end + end + return true +end + +SMODS.CONTEXT_POST_TRIGGER_BLACKLIST = { + mod_probability = true, fix_probability = true, + check_enhancement = true, + retrigger_joker_check = true, + post_trigger = true +} + +function SMODS.can_context_post_trigger(context) + for entry, _ in pairs(SMODS.CONTEXT_POST_TRIGGER_BLACKLIST) do + if context[entry] then + return false + end + end + return true +end + function SMODS.check_looping_context(eval_object) if #SMODS.context_stack < 2 then return false end @@ -2340,13 +2371,11 @@ function SMODS.eval_individual(individual, context) if (eff and not eff.no_retrigger) or triggered then --if type(eff) == 'table' then eff.juice_card = eff.juice_card or individual.scored_card end ret.individual = eff - if not (context.retrigger_joker_check or context.retrigger_joker) then - local retriggers = SMODS.calculate_retriggers(individual.object, context, ret) - if next(retriggers) then - ret.retriggers = retriggers - end + local retriggers = SMODS.calculate_retriggers(individual.object, context, ret) + if next(retriggers) then + ret.retriggers = retriggers end - if not context.post_trigger and not context.retrigger_joker_check and SMODS.optional_features.post_trigger then + if SMODS.optional_features.post_trigger and SMODS.can_context_post_trigger(context) then SMODS.calculate_context({blueprint_card = context.blueprint_card, post_trigger = true, other_card = individual.object, other_context = context, other_ret = ret}, post_trig) end end From 76e71726cc07fbdee1f7887e5bf3e46c1f51bbb3 Mon Sep 17 00:00:00 2001 From: AllUniversal Date: Mon, 18 May 2026 19:33:10 +0200 Subject: [PATCH 2/5] Added LSP defs +Title --- lsp_def/utils.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lsp_def/utils.lua b/lsp_def/utils.lua index 8a5ae28ab..d721c5290 100644 --- a/lsp_def/utils.lua +++ b/lsp_def/utils.lua @@ -761,6 +761,16 @@ function SMODS.update_context_flags(context, flags) end --- or false if the [context] isn't a getter context. function SMODS.is_getter_context(context) end +---@param context CalcContext|table The context checked +---@return boolean +-- Returns whether or not the given context can retrigger (by checking SMODS.CONTEXT_RETRIGGER_BLACKLIST) +function SMODS.can_context_retrigger(context) end + +---@param context CalcContext|table The context checked +---@return boolean +--- Returns whether or not the given context can retrigger (by checking SMODS.CONTEXT_POST_TRIGGER_BLACKLIST) +function SMODS.can_context_post_trigger(context) end + ---@param eval_object SMODS.GameObject|table The object that will be evaluated next if this returns false ---@return boolean --- This functions checks whether a previous getter context of the same type From fb57b7945b78d6db87c215c3f1b17d5c4daafd8e Mon Sep 17 00:00:00 2001 From: AllUniversal Date: Mon, 18 May 2026 19:35:12 +0200 Subject: [PATCH 3/5] Woops *Typo --- lsp_def/utils.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lsp_def/utils.lua b/lsp_def/utils.lua index d721c5290..3475c44ca 100644 --- a/lsp_def/utils.lua +++ b/lsp_def/utils.lua @@ -768,7 +768,7 @@ function SMODS.can_context_retrigger(context) end ---@param context CalcContext|table The context checked ---@return boolean ---- Returns whether or not the given context can retrigger (by checking SMODS.CONTEXT_POST_TRIGGER_BLACKLIST) +--- Returns whether or not the given context can post_trigger (by checking SMODS.CONTEXT_POST_TRIGGER_BLACKLIST) function SMODS.can_context_post_trigger(context) end ---@param eval_object SMODS.GameObject|table The object that will be evaluated next if this returns false From 164754fa915cb105d2e4a14a2eed560213607e72 Mon Sep 17 00:00:00 2001 From: AllUniversal Date: Mon, 1 Jun 2026 21:07:00 +0200 Subject: [PATCH 4/5] Added more contexts to blacklist +Title --- src/utils.lua | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/utils.lua b/src/utils.lua index 155e18bc9..4282fa0f7 100644 --- a/src/utils.lua +++ b/src/utils.lua @@ -1657,7 +1657,7 @@ SMODS.calculate_repetitions = function(card, context, reps) for i = curr_size + 1, new_size do if not first then post = {} - if not context.post_trigger and SMODS.optional_features.post_trigger then + if SMODS.optional_features.post_trigger and SMODS.can_context_post_trigger(context) then SMODS.calculate_context({blueprint_card = context.blueprint_card, post_trigger = true, other_card = _card, other_context = context, other_ret = eval}, post) end end @@ -1971,7 +1971,10 @@ end SMODS.CONTEXT_RETRIGGER_BLACKLIST = { mod_probability = true, fix_probability = true, check_enhancement = true, - retrigger_joker_check = true, retrigger_joker = true + retrigger_joker_check = true, retrigger_joker = true, + modify_scoring_hand = true, + modify_weights = true, + evaluate_poker_hand = true, } function SMODS.can_context_retrigger(context) @@ -1987,7 +1990,10 @@ SMODS.CONTEXT_POST_TRIGGER_BLACKLIST = { mod_probability = true, fix_probability = true, check_enhancement = true, retrigger_joker_check = true, - post_trigger = true + post_trigger = true, + modify_scoring_hand = true, + modify_weights = true, + evaluate_poker_hand = true, } function SMODS.can_context_post_trigger(context) From bc507d94a2fc0c8159306b6a88cc6726960f3454 Mon Sep 17 00:00:00 2001 From: AllUniversal Date: Mon, 1 Jun 2026 22:12:35 +0200 Subject: [PATCH 5/5] Added `debuff_hand` to both blacklists +/*Title --- src/utils.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/utils.lua b/src/utils.lua index 4282fa0f7..aa07d745c 100644 --- a/src/utils.lua +++ b/src/utils.lua @@ -1975,6 +1975,7 @@ SMODS.CONTEXT_RETRIGGER_BLACKLIST = { modify_scoring_hand = true, modify_weights = true, evaluate_poker_hand = true, + debuff_hand = true, } function SMODS.can_context_retrigger(context) @@ -1994,6 +1995,7 @@ SMODS.CONTEXT_POST_TRIGGER_BLACKLIST = { modify_scoring_hand = true, modify_weights = true, evaluate_poker_hand = true, + debuff_hand = true, } function SMODS.can_context_post_trigger(context)