From e10a154a8aa23d02b0ccd9013b0865b48d45b84e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:53:40 +0000 Subject: [PATCH 1/7] Add targeted Cerber retriggers Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/480d26ef-4edf-444a-860b-4f38b577d98a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/decks.lua | 13 ------------- content/objects/jokers.lua | 14 +++----------- modules/hooks/general.lua | 14 ++++++++++++++ modules/utils/joker_utils.lua | 29 +++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 24 deletions(-) diff --git a/content/objects/decks.lua b/content/objects/decks.lua index b5a66e8..34a7d1f 100644 --- a/content/objects/decks.lua +++ b/content/objects/decks.lua @@ -74,19 +74,6 @@ SMODS.Back({ }, G.deck, nil, nil, { G.C.SECONDARY_SET.Enhanced }) _card:set_ability(G.P_CENTERS["m_glorp"], nil, true) SMODS.change_base(_card, "Glorpsuit") - -- Check if Cerber joker exists and apply Negative to 2s - local has_cerber = false - if G and G.jokers and G.jokers.cards then - for _, joker in ipairs(G.jokers.cards) do - if joker.config and joker.config.center and joker.config.center.key == "j_cerber" then - has_cerber = true - break - end - end - end - if has_cerber and _rank == "2" then - _card:set_edition("e_negative", true) - end G.E_MANAGER:add_event(Event({ func = function() return true diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index f8c109b..27a43d2 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2285,7 +2285,7 @@ SMODS.Joker({ name = "Cerber", text = { "All {C:attention}2s{} become", - "{C:dark_edition}Negative{} when obtained", + "{C:dark_edition}Negative{}", }, }, credits = { @@ -2305,20 +2305,12 @@ SMODS.Joker({ pos = { x = 4, y = 0 }, add_to_deck = function(self, card, from_debuff) if G.playing_cards and not card.debuff then - for _, pcard in ipairs(G.playing_cards) do - if pcard:get_id() == 2 and not (pcard.edition and pcard.edition.key == "e_negative") then - pcard:set_edition("e_negative", true) - end - end + Neuratro.trigger_cerber(G.playing_cards, true) end end, calculate = function(self, card, context) if context.playing_card_added and not context.blueprint and not context.retrigger_joker then - for _, pcard in ipairs(context.cards) do - if pcard:get_id() == 2 and not (pcard.edition and pcard.edition.key == "e_negative") then - pcard:set_edition("e_negative", true) - end - end + Neuratro.trigger_cerber(context.cards, true) end end, in_pool = function(self, args) diff --git a/modules/hooks/general.lua b/modules/hooks/general.lua index 406ce5d..fdb2abf 100644 --- a/modules/hooks/general.lua +++ b/modules/hooks/general.lua @@ -49,6 +49,20 @@ function Card:set_sprites(center, ...) return _set_sprites(self, center, ...) end +local card_set_base = Card.set_base +function Card:set_base(...) + local x = { card_set_base(self, ...) } + Neuratro.trigger_cerber({ self }) + return unpack(x) +end + +local smods_change_base = SMODS.change_base +function SMODS.change_base(card, ...) + local x = { smods_change_base(card, ...) } + Neuratro.trigger_cerber({ card }) + return unpack(x) +end + local cardUpdateHook = Card.update function Card:update(dt) self.playbook_click_delay = math.max((self.playbook_click_delay or 0) - dt, 0) diff --git a/modules/utils/joker_utils.lua b/modules/utils/joker_utils.lua index 8c1d376..121ef28 100644 --- a/modules/utils/joker_utils.lua +++ b/modules/utils/joker_utils.lua @@ -39,6 +39,35 @@ function Neuratro.has_joker(joker_key) return Neuratro.find_joker(joker_key) ~= nil end +function Neuratro.cerberify_card(card) + if + not card + or not card.ability + or card.ability.set ~= "Default" + or card:get_id() ~= 2 + or (card.edition and card.edition.key == "e_negative") + then + return false + end + + card:set_edition("e_negative", true) + return true +end + +function Neuratro.trigger_cerber(cards, force) + if not cards or (#cards == 0) or (not force and not Neuratro.has_joker("j_cerber")) then + return false + end + + local triggered = false + + for _, card in ipairs(cards) do + triggered = Neuratro.cerberify_card(card) or triggered + end + + return triggered +end + function Neuratro.trigger_filtersister_upgrade() for _, joker in ipairs(Neuratro.find_jokers("j_filtersister")) do joker.ability.extra.xmult = joker.ability.extra.xmult + joker.ability.extra.upg From 6077365d0aacef796320767b3d58e118eb97f576 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:57:28 +0000 Subject: [PATCH 2/7] Refine Cerber retrigger helpers Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/480d26ef-4edf-444a-860b-4f38b577d98a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/jokers.lua | 3 ++- modules/hooks/general.lua | 4 ++-- modules/utils/joker_utils.lua | 8 ++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index 27a43d2..b54dde7 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2285,7 +2285,8 @@ SMODS.Joker({ name = "Cerber", text = { "All {C:attention}2s{} become", - "{C:dark_edition}Negative{}", + "{C:dark_edition}Negative{} when", + "obtained or transformed", }, }, credits = { diff --git a/modules/hooks/general.lua b/modules/hooks/general.lua index fdb2abf..9e09138 100644 --- a/modules/hooks/general.lua +++ b/modules/hooks/general.lua @@ -52,14 +52,14 @@ end local card_set_base = Card.set_base function Card:set_base(...) local x = { card_set_base(self, ...) } - Neuratro.trigger_cerber({ self }) + Neuratro.trigger_cerber(self) return unpack(x) end local smods_change_base = SMODS.change_base function SMODS.change_base(card, ...) local x = { smods_change_base(card, ...) } - Neuratro.trigger_cerber({ card }) + Neuratro.trigger_cerber(card) return unpack(x) end diff --git a/modules/utils/joker_utils.lua b/modules/utils/joker_utils.lua index 121ef28..b7943db 100644 --- a/modules/utils/joker_utils.lua +++ b/modules/utils/joker_utils.lua @@ -54,11 +54,15 @@ function Neuratro.cerberify_card(card) return true end -function Neuratro.trigger_cerber(cards, force) - if not cards or (#cards == 0) or (not force and not Neuratro.has_joker("j_cerber")) then +function Neuratro.trigger_cerber(cards, skip_joker_check) + if not cards or (not skip_joker_check and not Neuratro.has_joker("j_cerber")) then return false end + if cards.ability then + return Neuratro.cerberify_card(cards) + end + local triggered = false for _, card in ipairs(cards) do From 0d33c848993c68741916befd1470020af5c84cb8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:59:15 +0000 Subject: [PATCH 3/7] Clarify Cerber helper interfaces Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/480d26ef-4edf-444a-860b-4f38b577d98a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/jokers.lua | 4 ++-- modules/hooks/general.lua | 4 ++-- modules/utils/joker_utils.lua | 14 +++++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index b54dde7..e34dfce 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2306,12 +2306,12 @@ SMODS.Joker({ pos = { x = 4, y = 0 }, add_to_deck = function(self, card, from_debuff) if G.playing_cards and not card.debuff then - Neuratro.trigger_cerber(G.playing_cards, true) + Neuratro.trigger_cerber_on_cards(G.playing_cards, true) end end, calculate = function(self, card, context) if context.playing_card_added and not context.blueprint and not context.retrigger_joker then - Neuratro.trigger_cerber(context.cards, true) + Neuratro.trigger_cerber_on_cards(context.cards, true) end end, in_pool = function(self, args) diff --git a/modules/hooks/general.lua b/modules/hooks/general.lua index 9e09138..d7372b4 100644 --- a/modules/hooks/general.lua +++ b/modules/hooks/general.lua @@ -52,14 +52,14 @@ end local card_set_base = Card.set_base function Card:set_base(...) local x = { card_set_base(self, ...) } - Neuratro.trigger_cerber(self) + Neuratro.trigger_cerber_on_card(self) return unpack(x) end local smods_change_base = SMODS.change_base function SMODS.change_base(card, ...) local x = { smods_change_base(card, ...) } - Neuratro.trigger_cerber(card) + Neuratro.trigger_cerber_on_card(card) return unpack(x) end diff --git a/modules/utils/joker_utils.lua b/modules/utils/joker_utils.lua index b7943db..b3515d8 100644 --- a/modules/utils/joker_utils.lua +++ b/modules/utils/joker_utils.lua @@ -54,19 +54,23 @@ function Neuratro.cerberify_card(card) return true end -function Neuratro.trigger_cerber(cards, skip_joker_check) - if not cards or (not skip_joker_check and not Neuratro.has_joker("j_cerber")) then +function Neuratro.trigger_cerber_on_card(card, joker_already_verified) + if not card or (not joker_already_verified and not Neuratro.has_joker("j_cerber")) then return false end - if cards.ability then - return Neuratro.cerberify_card(cards) + return Neuratro.cerberify_card(card) +end + +function Neuratro.trigger_cerber_on_cards(cards, joker_already_verified) + if not cards or (not joker_already_verified and not Neuratro.has_joker("j_cerber")) then + return false end local triggered = false for _, card in ipairs(cards) do - triggered = Neuratro.cerberify_card(card) or triggered + triggered = Neuratro.trigger_cerber_on_card(card, true) or triggered end return triggered From 5b3d6242b585284e6922d0053400d04f3546b9c7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:00:55 +0000 Subject: [PATCH 4/7] Tighten Cerber transformation hooks Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/480d26ef-4edf-444a-860b-4f38b577d98a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/jokers.lua | 2 +- modules/hooks/general.lua | 10 ++++++++-- modules/utils/joker_utils.lua | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index e34dfce..3d72525 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2286,7 +2286,7 @@ SMODS.Joker({ text = { "All {C:attention}2s{} become", "{C:dark_edition}Negative{} when", - "obtained or transformed", + "received or transformed", }, }, credits = { diff --git a/modules/hooks/general.lua b/modules/hooks/general.lua index d7372b4..ecafaed 100644 --- a/modules/hooks/general.lua +++ b/modules/hooks/general.lua @@ -51,15 +51,21 @@ end local card_set_base = Card.set_base function Card:set_base(...) + local previous_id = self:get_id() local x = { card_set_base(self, ...) } - Neuratro.trigger_cerber_on_card(self) + if previous_id ~= 2 and self:get_id() == 2 then + Neuratro.trigger_cerber_on_card(self) + end return unpack(x) end local smods_change_base = SMODS.change_base function SMODS.change_base(card, ...) + local previous_id = card and card.get_id and card:get_id() local x = { smods_change_base(card, ...) } - Neuratro.trigger_cerber_on_card(card) + if card and previous_id ~= 2 and card:get_id() == 2 then + Neuratro.trigger_cerber_on_card(card) + end return unpack(x) end diff --git a/modules/utils/joker_utils.lua b/modules/utils/joker_utils.lua index b3515d8..8a6d2d6 100644 --- a/modules/utils/joker_utils.lua +++ b/modules/utils/joker_utils.lua @@ -70,7 +70,9 @@ function Neuratro.trigger_cerber_on_cards(cards, joker_already_verified) local triggered = false for _, card in ipairs(cards) do - triggered = Neuratro.trigger_cerber_on_card(card, true) or triggered + if Neuratro.trigger_cerber_on_card(card, true) then + triggered = true + end end return triggered From dd27258af6dbd2c6d15951fa81dd86936be585b0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:02:03 +0000 Subject: [PATCH 5/7] Polish Cerber text wording Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/480d26ef-4edf-444a-860b-4f38b577d98a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/jokers.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index 3d72525..e34dfce 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2286,7 +2286,7 @@ SMODS.Joker({ text = { "All {C:attention}2s{} become", "{C:dark_edition}Negative{} when", - "received or transformed", + "obtained or transformed", }, }, credits = { From fee552baa06d276c23637d09c07f47bdc9e3d3f7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:03:35 +0000 Subject: [PATCH 6/7] Simplify Cerber joker verification Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/480d26ef-4edf-444a-860b-4f38b577d98a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/jokers.lua | 6 +++--- modules/utils/joker_utils.lua | 30 +++++++++++++++++++----------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index e34dfce..6fdebef 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2286,7 +2286,7 @@ SMODS.Joker({ text = { "All {C:attention}2s{} become", "{C:dark_edition}Negative{} when", - "obtained or transformed", + "obtained or changed", }, }, credits = { @@ -2306,12 +2306,12 @@ SMODS.Joker({ pos = { x = 4, y = 0 }, add_to_deck = function(self, card, from_debuff) if G.playing_cards and not card.debuff then - Neuratro.trigger_cerber_on_cards(G.playing_cards, true) + Neuratro.cerberify_cards(G.playing_cards) end end, calculate = function(self, card, context) if context.playing_card_added and not context.blueprint and not context.retrigger_joker then - Neuratro.trigger_cerber_on_cards(context.cards, true) + Neuratro.cerberify_cards(context.cards) end end, in_pool = function(self, args) diff --git a/modules/utils/joker_utils.lua b/modules/utils/joker_utils.lua index 8a6d2d6..1581d11 100644 --- a/modules/utils/joker_utils.lua +++ b/modules/utils/joker_utils.lua @@ -54,23 +54,15 @@ function Neuratro.cerberify_card(card) return true end -function Neuratro.trigger_cerber_on_card(card, joker_already_verified) - if not card or (not joker_already_verified and not Neuratro.has_joker("j_cerber")) then - return false - end - - return Neuratro.cerberify_card(card) -end - -function Neuratro.trigger_cerber_on_cards(cards, joker_already_verified) - if not cards or (not joker_already_verified and not Neuratro.has_joker("j_cerber")) then +function Neuratro.cerberify_cards(cards) + if not cards then return false end local triggered = false for _, card in ipairs(cards) do - if Neuratro.trigger_cerber_on_card(card, true) then + if Neuratro.cerberify_card(card) then triggered = true end end @@ -78,6 +70,22 @@ function Neuratro.trigger_cerber_on_cards(cards, joker_already_verified) return triggered end +function Neuratro.trigger_cerber_on_card(card) + if not card or not Neuratro.has_joker("j_cerber") then + return false + end + + return Neuratro.cerberify_card(card) +end + +function Neuratro.trigger_cerber_on_cards(cards) + if not cards or not Neuratro.has_joker("j_cerber") then + return false + end + + return Neuratro.cerberify_cards(cards) +end + function Neuratro.trigger_filtersister_upgrade() for _, joker in ipairs(Neuratro.find_jokers("j_filtersister")) do joker.ability.extra.xmult = joker.ability.extra.xmult + joker.ability.extra.upg From fef3aa5db9aa16b45fa741fb011d1f2b8cb86bd9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:24:32 +0000 Subject: [PATCH 7/7] Fix Cerber startup hook crash Agent-Logs-Url: https://github.com/1srscx4/Neuratro/sessions/4f1ab0c9-ac31-47b2-8384-74b3bf99880a Co-authored-by: Adesii <37816311+Adesii@users.noreply.github.com> --- content/objects/jokers.lua | 3 +-- modules/hooks/general.lua | 12 ++++++++---- modules/utils/joker_utils.lua | 4 +++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/content/objects/jokers.lua b/content/objects/jokers.lua index 6fdebef..8c61619 100644 --- a/content/objects/jokers.lua +++ b/content/objects/jokers.lua @@ -2285,8 +2285,7 @@ SMODS.Joker({ name = "Cerber", text = { "All {C:attention}2s{} become", - "{C:dark_edition}Negative{} when", - "obtained or changed", + "{C:dark_edition}Negative{}", }, }, credits = { diff --git a/modules/hooks/general.lua b/modules/hooks/general.lua index ecafaed..919ec5e 100644 --- a/modules/hooks/general.lua +++ b/modules/hooks/general.lua @@ -49,11 +49,15 @@ function Card:set_sprites(center, ...) return _set_sprites(self, center, ...) end +local function cerber_card_id(card) + return card and card.base and card.base.id or nil +end + local card_set_base = Card.set_base function Card:set_base(...) - local previous_id = self:get_id() + local previous_id = cerber_card_id(self) local x = { card_set_base(self, ...) } - if previous_id ~= 2 and self:get_id() == 2 then + if previous_id ~= 2 and cerber_card_id(self) == 2 then Neuratro.trigger_cerber_on_card(self) end return unpack(x) @@ -61,9 +65,9 @@ end local smods_change_base = SMODS.change_base function SMODS.change_base(card, ...) - local previous_id = card and card.get_id and card:get_id() + local previous_id = cerber_card_id(card) local x = { smods_change_base(card, ...) } - if card and previous_id ~= 2 and card:get_id() == 2 then + if card and previous_id ~= 2 and cerber_card_id(card) == 2 then Neuratro.trigger_cerber_on_card(card) end return unpack(x) diff --git a/modules/utils/joker_utils.lua b/modules/utils/joker_utils.lua index 1581d11..c1ca4e0 100644 --- a/modules/utils/joker_utils.lua +++ b/modules/utils/joker_utils.lua @@ -40,11 +40,13 @@ function Neuratro.has_joker(joker_key) end function Neuratro.cerberify_card(card) + local card_id = card and card.base and card.base.id if not card + or not card_id or not card.ability or card.ability.set ~= "Default" - or card:get_id() ~= 2 + or card_id ~= 2 or (card.edition and card.edition.key == "e_negative") then return false