10/02/2025 working

This commit is contained in:
Vomitblood 2025-02-11 01:31:20 +08:00
parent 3f5dafcdd1
commit 8cc1ec0a2c
30 changed files with 4327 additions and 2000 deletions

View file

@ -1 +1 @@
return {["disable_anims"]=true,["score_opt_id"]=3,["break_infinity"]="omeganum",} return {["disable_anims"]=false,["score_opt_id"]=3,["break_infinity"]="omeganum",}

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'd3c881055f5938773f6b44e7c8b207117963612b2eaf889f5b7ef8b61e1143cd' LOVELY_INTEGRITY = 'cd00b45ad63b1eaa00d4924a1eed9a6a330e531d1440767ad8b6703f1eec6dbf'
--Class --Class
Back = Object:extend() Back = Object:extend()
@ -130,9 +130,16 @@ end
function Back:trigger_effect(args) function Back:trigger_effect(args)
if not args then return end if not args then return end
local obj = self.effect.center local obj = self.effect.center
if obj.trigger_effect and type(obj.trigger_effect) == 'function' then if type(obj.calculate) == 'function' then
local o = {obj:calculate(self, args)}
if next(o) ~= nil then return unpack(o) end
elseif type(obj.trigger_effect) == 'function' then
-- kept for compatibility
local o = {obj:trigger_effect(args)} local o = {obj:trigger_effect(args)}
if o then return unpack(o) end if next(o) ~= nil then
sendWarnMessage(('Found `trigger_effect` function on SMODS.Back object "%s". This field is deprecated; please use `calculate` instead.'):format(obj.key), 'Back')
return unpack(o)
end
end end
if self.name == 'Anaglyph Deck' and args.context == 'eval' and G.GAME.last_blind and G.GAME.last_blind.boss then if self.name == 'Anaglyph Deck' and args.context == 'eval' and G.GAME.last_blind and G.GAME.last_blind.boss then
@ -201,14 +208,33 @@ end
function Back:apply_to_run() function Back:apply_to_run()
local obj = self.effect.center local obj = self.effect.center
if obj.apply and type(obj.apply) == 'function' then if obj.apply and type(obj.apply) == 'function' then
obj:apply() obj:apply(self)
end end
if self.effect.config.jokers then
delay(0.4)
G.E_MANAGER:add_event(Event({
func = function()
for k, v in ipairs(self.effect.config.jokers) do
local card = create_card('Joker', G.jokers, nil, nil, nil, nil, v, 'deck')
card:add_to_deck()
G.jokers:emplace(card)
card:start_materialize()
end
return true
end
}))
end
if self.effect.config.voucher then if self.effect.config.voucher then
G.GAME.used_vouchers[self.effect.config.voucher] = true G.GAME.used_vouchers[self.effect.config.voucher] = true
G.GAME.cry_owned_vouchers[self.effect.config.voucher] = true G.GAME.cry_owned_vouchers[self.effect.config.voucher] = true
G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1 G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1
G.E_MANAGER:add_event(Event({
func = function()
Card.apply_to_run(nil, G.P_CENTERS[self.effect.config.voucher]) Card.apply_to_run(nil, G.P_CENTERS[self.effect.config.voucher])
return true
end
}))
end end
if self.effect.config.hands then if self.effect.config.hands then
G.GAME.starting_params.hands = G.GAME.starting_params.hands + self.effect.config.hands G.GAME.starting_params.hands = G.GAME.starting_params.hands + self.effect.config.hands
@ -266,7 +292,12 @@ function Back:apply_to_run()
G.GAME.used_vouchers[v ] = true G.GAME.used_vouchers[v ] = true
G.GAME.cry_owned_vouchers[v ] = true G.GAME.cry_owned_vouchers[v ] = true
G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1 G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1
G.E_MANAGER:add_event(Event({
func = function()
Card.apply_to_run(nil, G.P_CENTERS[v]) Card.apply_to_run(nil, G.P_CENTERS[v])
return true
end
}))
end end
end end
if self.name == 'Checkered Deck' then if self.name == 'Checkered Deck' then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'e8cd6ceef85971448b1b28bb95d2a4b68928ef66a2261cc19c1e9c7de9c6d3b8' LOVELY_INTEGRITY = 'ceaf7d365cb8eac62c7dcf3be1ef07cc6b0dac3977bde52960496d7f844a668d'
--class --class
Blind = Moveable:extend() Blind = Moveable:extend()
@ -58,12 +58,14 @@ function Blind:set_text()
if self.name == 'The Ox' then if self.name == 'The Ox' then
loc_vars = {localize(G.GAME.current_round.most_played_poker_hand, 'poker_hands')} loc_vars = {localize(G.GAME.current_round.most_played_poker_hand, 'poker_hands')}
end end
local target = {type = 'raw_descriptions', key = self.config.blind.key, set = 'Blind', vars = loc_vars or self.config.blind.vars}
local obj = self.config.blind local obj = self.config.blind
if obj.loc_vars and type(obj.loc_vars) == 'function' then if obj.loc_vars and type(obj.loc_vars) == 'function' then
local res = obj:loc_vars() or {} local res = obj:loc_vars() or {}
loc_vars = res.vars or {} target.vars = res.vars or target.vars
target.key = res.key or target.key
end end
local loc_target = localize{type = 'raw_descriptions', key = self.config.blind.key, set = 'Blind', vars = loc_vars or self.config.blind.vars} local loc_target = localize(target)
if loc_target then if loc_target then
self.loc_name = self.name == '' and self.name or localize{type ='name_text', key = self.config.blind.key, set = 'Blind'} self.loc_name = self.name == '' and self.name or localize{type ='name_text', key = self.config.blind.key, set = 'Blind'}
self.loc_debuff_text = '' self.loc_debuff_text = ''

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '68c2ebd87be76547897e6d6962d4d584197f285bae1b2b46c4916611b072fcd7' LOVELY_INTEGRITY = 'af84d6c3467720a23ecaec33b0418eba5566291929fca3634893138f120ee811'
--class --class
Card = Moveable:extend() Card = Moveable:extend()
@ -46,9 +46,9 @@ function Card:init(X, Y, W, H, card, center, params)
self:set_base(card, true) self:set_base(card, true)
self.discard_pos = { self.discard_pos = {
r = 3.6*(math.random()-0.5), r = 0,
x = math.random(), x = 0,
y = math.random() y = 0,
} }
self.facing = 'front' self.facing = 'front'
@ -227,6 +227,12 @@ function Card:set_sprites(_center, _front)
if _center.name == 'Square Joker' and (_center.discovered or self.bypass_discovery_center) then if _center.name == 'Square Joker' and (_center.discovered or self.bypass_discovery_center) then
self.children.center.scale.y = self.children.center.scale.x self.children.center.scale.y = self.children.center.scale.x
end end
if _center.pixel_size and _center.pixel_size.h and (_center.discovered or self.bypass_discovery_center) then
self.children.center.scale.y = self.children.center.scale.y*(_center.pixel_size.h/95)
end
if _center.pixel_size and _center.pixel_size.w and (_center.discovered or self.bypass_discovery_center) then
self.children.center.scale.x = self.children.center.scale.x*(_center.pixel_size.w/71)
end
end end
if _center.soul_pos then if _center.soul_pos then
@ -341,6 +347,20 @@ function Card:set_ability(center, initial, delay_sprites)
self.T.h = H self.T.h = H
self.T.w = W self.T.w = W
end end
if center.display_size and center.display_size.h and (center.discovered or self.bypass_discovery_center) then
H = H*(center.display_size.h/95)
self.T.h = H
elseif center.pixel_size and center.pixel_size.h and (center.discovered or self.bypass_discovery_center) then
H = H*(center.pixel_size.h/95)
self.T.h = H
end
if center.display_size and center.display_size.w and (center.discovered or self.bypass_discovery_center) then
W = W*(center.display_size.w/71)
self.T.w = W
elseif center.pixel_size and center.pixel_size.w and (center.discovered or self.bypass_discovery_center) then
W = W*(center.pixel_size.w/71)
self.T.w = W
end
if delay_sprites then if delay_sprites then
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
@ -608,6 +628,14 @@ function Card:set_seal(_seal, silent, immediate)
self.seal = nil self.seal = nil
if _seal then if _seal then
self.seal = _seal self.seal = _seal
self.ability.seal = {}
for k, v in pairs(G.P_SEALS[_seal].config or {}) do
if type(v) == 'table' then
self.ability.seal[k] = copy_table(v)
else
self.ability.seal[k] = v
end
end
if not silent then if not silent then
G.CONTROLLER.locks.seal = true G.CONTROLLER.locks.seal = true
local sound = G.P_SEALS[_seal].sound or {sound = 'gold_seal', per = 1.2, vol = 0.4} local sound = G.P_SEALS[_seal].sound or {sound = 'gold_seal', per = 1.2, vol = 0.4}
@ -880,7 +908,7 @@ function Card:generate_UIBox_unlock_table(hidden)
return generate_card_ui(self.config.center, nil, loc_vars, 'Locked') return generate_card_ui(self.config.center, nil, loc_vars, 'Locked')
end end
function Card:generate_UIBox_ability_table() function Card:generate_UIBox_ability_table(vars_only)
local card_type, hide_desc = self.ability.set or "None", nil local card_type, hide_desc = self.ability.set or "None", nil
local loc_vars = nil local loc_vars = nil
local main_start, main_end = nil,nil local main_start, main_end = nil,nil
@ -1118,6 +1146,7 @@ function Card:generate_UIBox_ability_table()
elseif self.ability.name == 'Perkeo' then loc_vars = {self.ability.extra} elseif self.ability.name == 'Perkeo' then loc_vars = {self.ability.extra}
end end
end end
if vars_only then return loc_vars, main_start, main_end end
local badges = {} local badges = {}
if (card_type ~= 'Locked' and card_type ~= 'Undiscovered' and card_type ~= 'Default') or self.debuff then if (card_type ~= 'Locked' and card_type ~= 'Undiscovered' and card_type ~= 'Default') or self.debuff then
badges.card_type = card_type badges.card_type = card_type
@ -1178,7 +1207,7 @@ function Card:get_nominal(mod)
end end
function Card:get_id() function Card:get_id()
if (self.ability.effect == 'Stone Card' or self.config.center.no_rank) and not self.vampired then if SMODS.has_no_rank(self) and not self.vampired then
return -math.random(100, 1000000) return -math.random(100, 1000000)
end end
return self.base.id return self.base.id
@ -1242,9 +1271,6 @@ function Card:get_edition()
if self.debuff then return end if self.debuff then return end
if self.edition then if self.edition then
local ret = {card = self} local ret = {card = self}
if self.edition.p_dollars then
ret.p_dollars_mod = self.edition.p_dollars
end
if self.edition.x_mult then if self.edition.x_mult then
ret.x_mult_mod = self.edition.x_mult ret.x_mult_mod = self.edition.x_mult
end end
@ -1265,7 +1291,7 @@ function Card:get_end_of_round_effect(context)
ret.h_dollars = self.ability.h_dollars ret.h_dollars = self.ability.h_dollars
ret.card = self ret.card = self
end end
if self.seal == 'Blue' and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then if self.seal == 'Blue' and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit and not self.ability.extra_enhancement then
local card_type = 'Planet' local card_type = 'Planet'
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1 G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
@ -1572,7 +1598,7 @@ function Card:use_consumeable(area, copier)
func = function() func = function()
for i=#G.hand.highlighted, 1, -1 do for i=#G.hand.highlighted, 1, -1 do
local card = G.hand.highlighted[i] local card = G.hand.highlighted[i]
if card.ability.name == 'Glass Card' then if SMODS.has_enhancement(card, 'm_glass') then
card:shatter() card:shatter()
else else
card:start_dissolve(nil, i == #G.hand.highlighted) card:start_dissolve(nil, i == #G.hand.highlighted)
@ -1591,7 +1617,7 @@ function Card:use_consumeable(area, copier)
func = function() func = function()
for i=#destroyed_cards, 1, -1 do for i=#destroyed_cards, 1, -1 do
local card = destroyed_cards[i] local card = destroyed_cards[i]
if card.ability.name == 'Glass Card' then if SMODS.has_enhancement(card, 'm_glass') then
card:shatter() card:shatter()
else else
card:start_dissolve(nil, i ~= #destroyed_cards) card:start_dissolve(nil, i ~= #destroyed_cards)
@ -1649,7 +1675,7 @@ function Card:use_consumeable(area, copier)
func = function() func = function()
for i=#destroyed_cards, 1, -1 do for i=#destroyed_cards, 1, -1 do
local card = destroyed_cards[i] local card = destroyed_cards[i]
if card.ability.name == 'Glass Card' then if SMODS.has_enhancement(card, 'm_glass') then
card:shatter() card:shatter()
else else
card:start_dissolve(nil, i == #destroyed_cards) card:start_dissolve(nil, i == #destroyed_cards)
@ -1660,9 +1686,7 @@ function Card:use_consumeable(area, copier)
ease_dollars(self.ability.extra.dollars) ease_dollars(self.ability.extra.dollars)
end end
delay(0.3) delay(0.3)
for i = 1, #G.jokers.cards do SMODS.calculate_context({ remove_playing_cards = true, removed = destroyed_cards })
G.jokers.cards[i]:calculate_joker({remove_playing_cards = true, removed = destroyed_cards})
end
end end
if self.ability.name == 'The Fool' then if self.ability.name == 'The Fool' then
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function() G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
@ -1826,16 +1850,6 @@ function Card:can_use_consumeable(any_state, skip_check)
end end
if G.STATE ~= G.STATES.HAND_PLAYED and G.STATE ~= G.STATES.DRAW_TO_HAND and G.STATE ~= G.STATES.PLAY_TAROT or any_state then if G.STATE ~= G.STATES.HAND_PLAYED and G.STATE ~= G.STATES.DRAW_TO_HAND and G.STATE ~= G.STATES.PLAY_TAROT or any_state then
if self.ability.name == "The Hanged Man" then
for i = 1, #G.hand.highlighted do
if G.hand.highlighted[i].ability.eternal then return false end
end
end
if self.ability.name == "Death" then
local rightmost = G.hand.highlighted[1]
for i=1, #G.hand.highlighted-1 do if G.hand.highlighted[i].T.x > rightmost.T.x then rightmost = G.hand.highlighted[i] end end
for i=1, #G.hand.highlighted do if G.hand.highlighted[i].ability.eternal and rightmost ~= G.hand.highlighted[i] then return false end end
end
local obj = self.config.center local obj = self.config.center
if obj.can_use and type(obj.can_use) == 'function' then if obj.can_use and type(obj.can_use) == 'function' then
return obj:can_use(self) return obj:can_use(self)
@ -1917,18 +1931,8 @@ function Card:sell_card()
if self.children.use_button then self.children.use_button:remove(); self.children.use_button = nil end if self.children.use_button then self.children.use_button:remove(); self.children.use_button = nil end
if self.children.sell_button then self.children.sell_button:remove(); self.children.sell_button = nil end if self.children.sell_button then self.children.sell_button:remove(); self.children.sell_button = nil end
if self.config.center.set == 'Joker' then local eval, post = eval_card(self, {selling_self = true})
if G.GAME.jokers_sold then SMODS.trigger_effects({eval, post}, self)
local contained = false
for i = 1, #G.GAME.jokers_sold do
if self.config.center.key == G.GAME.jokers_sold[i] then contained = true end
end
if not contained then table.insert(G.GAME.jokers_sold, self.config.center.key) end
else
G.GAME.jokers_sold = {self.config.center.key}
end
end
self:calculate_joker{selling_self = true}
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.2,func = function() G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.2,func = function()
if not G.GAME.modifiers.cry_no_sell_value then play_sound('coin2') end if not G.GAME.modifiers.cry_no_sell_value then play_sound('coin2') end
@ -1986,15 +1990,14 @@ end
function Card:calculate_dollar_bonus() function Card:calculate_dollar_bonus()
if self.debuff then return end if self.debuff then return end
if self.ability.set == "Joker" then
if self.ability.name == 'Golden Joker' then
return self.ability.extra
end
--asdf
local obj = self.config.center local obj = self.config.center
if obj.calc_dollar_bonus and type(obj.calc_dollar_bonus) == 'function' then if obj.calc_dollar_bonus and type(obj.calc_dollar_bonus) == 'function' then
return obj:calc_dollar_bonus(self) return obj:calc_dollar_bonus(self)
end end
if self.ability.set == "Joker" then
if self.ability.name == 'Golden Joker' then
return self.ability.extra
end
if self.ability.name == 'Cloud 9' and self.ability.nine_tally and self.ability.nine_tally > 0 then if self.ability.name == 'Cloud 9' and self.ability.nine_tally and self.ability.nine_tally > 0 then
return self.ability.extra*(self.ability.nine_tally) return self.ability.extra*(self.ability.nine_tally)
end end
@ -2026,7 +2029,6 @@ function Card:open()
end end
self.states.hover.can = false self.states.hover.can = false
if self.ability.extra < 1 then self.ability.extra = 1 end
booster_obj = self.config.center booster_obj = self.config.center
if booster_obj and SMODS.Centers[booster_obj.key] then if booster_obj and SMODS.Centers[booster_obj.key] then
G.STATE = G.STATES.SMODS_BOOSTER_OPENED G.STATE = G.STATES.SMODS_BOOSTER_OPENED
@ -2088,7 +2090,6 @@ function Card:open()
for i = 1, _size do for i = 1, _size do
local card = nil local card = nil
if self.ability.extra < 1 then self.ability.extra = 1 end
if booster_obj.create_card and type(booster_obj.create_card) == "function" then if booster_obj.create_card and type(booster_obj.create_card) == "function" then
local _card_to_spawn = booster_obj:create_card(self, i) local _card_to_spawn = booster_obj:create_card(self, i)
if type((_card_to_spawn or {}).is) == 'function' and _card_to_spawn:is(Card) then if type((_card_to_spawn or {}).is) == 'function' and _card_to_spawn:is(Card) then
@ -2186,9 +2187,7 @@ end
end end
end})) end}))
for i = 1, #G.jokers.cards do SMODS.calculate_context({open_booster = true, card = self})
G.jokers.cards[i]:calculate_joker({open_booster = true, card = self})
end
if G.GAME.modifiers.inflation then if G.GAME.modifiers.inflation then
G.GAME.inflation = G.GAME.inflation + 1 G.GAME.inflation = G.GAME.inflation + 1
@ -2252,9 +2251,7 @@ function Card:redeem()
self:apply_to_run() self:apply_to_run()
delay(0.6) delay(0.6)
for i = 1, #G.jokers.cards do SMODS.calculate_context({buying_card = true, card = self})
G.jokers.cards[i]:calculate_joker({buying_card = true, card = self})
end
if G.GAME.modifiers.inflation then if G.GAME.modifiers.inflation then
G.GAME.inflation = G.GAME.inflation + 1 G.GAME.inflation = G.GAME.inflation + 1
G.E_MANAGER:add_event(Event({func = function() G.E_MANAGER:add_event(Event({func = function()
@ -2278,49 +2275,16 @@ function Card:redeem()
end end
function Card:apply_to_run(center) function Card:apply_to_run(center)
local card_to_save = self and copy_card(self) or Card(0, 0, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center)
card_to_save.VT.x, card_to_save.VT.y = G.vouchers.T.x, G.vouchers.T.y
G.vouchers:emplace(card_to_save)
local center_table = { local center_table = {
name = center and center.name or self and self.ability.name, name = center and center.name or self and self.ability.name,
extra = self and self.config and self.config.center_key and G.GAME and G.GAME.cry_voucher_centers and G.GAME.cry_voucher_centers[self.config.center_key] and G.GAME.cry_voucher_centers[self.config.center_key].config.extra extra = self and self.config and self.config.center_key and G.GAME and G.GAME.cry_voucher_centers and G.GAME.cry_voucher_centers[self.config.center_key] and G.GAME.cry_voucher_centers[self.config.center_key].config.extra
} }
if not G.GAME.voucher_edition_index then G.GAME.voucher_edition_index = {} end
if self and self.edition then
G.GAME.voucher_edition_index[center_table.name] = self.edition.type
end
if not G.GAME.voucher_sticker_index then G.GAME.voucher_sticker_index = {eternal = {}, perishable = {}, rental = {}, pinned = {}, banana = {}} end
if self and self.ability and self.ability.eternal and self.ability.eternal == true then
G.GAME.voucher_sticker_index.eternal[center_table.name] = true
end
if self and self.ability and self.ability.perishable and self.ability.perishable == true then
G.GAME.voucher_sticker_index.perishable[center_table.name] = G.GAME.cry_voucher_perishable_rounds
end
if self and self.ability and self.ability.rental and self.ability.rental == true then
G.GAME.voucher_sticker_index.rental[center_table.name] = true
end
if self and self.pinned and self.pinned == true then
G.GAME.voucher_sticker_index.pinned[center_table.name] = true
end
if self and self.ability and self.ability.banana and self.ability.banana == true then
G.GAME.voucher_sticker_index.banana[center_table.name] = true
end
if not center_table.extra then center_table.extra = center and center.config.extra end -- catch
if self and self.ability and self.ability.extra_disp then
local up = false
if center_table.name == 'Tarot Tycoon' or center_table.name == 'Planet Tycoon' then
up = true
end
local og_extra = 9.6/4
local og_disp = 2
if up == true then
og_extra = 32/4
og_disp = 4
end
local misprint_diff = self.ability.extra_disp / og_disp
G.GAME.cry_voucher_centers[self.config.center_key].config.extra = og_extra*misprint_diff
center_table.extra = og_extra*misprint_diff
end
local obj = center or self.config.center local obj = center or self.config.center
if obj.redeem and type(obj.redeem) == 'function' then if obj.redeem and type(obj.redeem) == 'function' then
obj:redeem(self) obj:redeem(card_to_save)
return return
end if center_table.name == 'Overstock' or center_table.name == 'Overstock Plus' then end if center_table.name == 'Overstock' or center_table.name == 'Overstock Plus' then
G.E_MANAGER:add_event(Event({func = function() G.E_MANAGER:add_event(Event({func = function()
@ -2685,7 +2649,10 @@ function Card:calculate_seal(context)
if self.debuff then return nil end local obj = G.P_SEALS[self.seal] or {} if self.debuff then return nil end local obj = G.P_SEALS[self.seal] or {}
if obj.calculate and type(obj.calculate) == 'function' then if obj.calculate and type(obj.calculate) == 'function' then
local o = obj:calculate(self, context) local o = obj:calculate(self, context)
if o then return o end if o then
if not o.card then o.card = self end
return o
end
end end
if context.repetition then if context.repetition then
if self.seal == 'Red' then if self.seal == 'Red' then
@ -2696,7 +2663,7 @@ function Card:calculate_seal(context)
} }
end end
end end
if context.discard then if context.discard and context.other_card == self then
if self.seal == 'Purple' and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then if self.seal == 'Purple' and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1 G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
@ -2710,6 +2677,7 @@ function Card:calculate_seal(context)
return true return true
end)})) end)}))
card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_plus_tarot'), colour = G.C.PURPLE}) card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_plus_tarot'), colour = G.C.PURPLE})
return nil, true
end end
end end
end end
@ -2736,48 +2704,29 @@ function Card:calculate_perishable()
end end
function Card:calculate_joker(context) function Card:calculate_joker(context)
for k, v in pairs(SMODS.Stickers) do
if self.ability[v.key] then
if v.calculate and type(v.calculate) == 'function' then
local override_card = v:calculate(self, context)
if override_card then return override_card end
end
end
end
if self.debuff then return nil end if self.debuff then return nil end
local obj = self.config.center local obj = self.config.center
if self.ability.set ~= "Enhanced" and obj.calculate and type(obj.calculate) == 'function' then if self.ability.set ~= "Enhanced" and obj.calculate and type(obj.calculate) == 'function' then
local o, t = obj:calculate(self, context) local o, t = obj:calculate(self, context)
if o or t then return o, t end if o or t then return o, t end
end end
if self.ability.set == "Planet" and not self.debuff then
if context.joker_main then
if G.GAME.used_vouchers.v_observatory and self.ability.consumeable.hand_type == context.scoring_name then
return {
message = localize{type = 'variable', key = 'a_xmult', vars = {G.GAME.cry_voucher_centers['v_observatory'].config.extra}},
Xmult_mod = G.GAME.cry_voucher_centers['v_observatory'].config.extra
}
end
end
end
if self.ability.set == "Joker" and not self.debuff then if self.ability.set == "Joker" and not self.debuff then
if self.ability.name == "Blueprint" then if self.ability.name == "Blueprint" then
local other_joker = nil local other_joker = nil
for i = 1, #G.jokers.cards do for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == self then other_joker = G.jokers.cards[i+1] end if G.jokers.cards[i] == self then other_joker = G.jokers.cards[i+1] end
end end
if other_joker and other_joker ~= self then if other_joker and other_joker ~= self and not context.no_blueprint then
context.blueprint = (context.blueprint and (context.blueprint + 1)) or 1 context.blueprint = (context.blueprint and (context.blueprint + 1)) or 1
context.copy_depth = (context.copy_depth and (context.copy_depth + 1)) or 1
context.blueprint_card = context.blueprint_card or self context.blueprint_card = context.blueprint_card or self
if context.blueprint > #G.jokers.cards + 1 then return end if context.blueprint > #G.jokers.cards + 1 then return end
context.no_callback = true local other_joker_ret = other_joker:calculate_joker(context)
local other_joker_ret, trig = other_joker:calculate_joker(context) context.blueprint = nil
local eff_card = context.blueprint_card or self
context.blueprint_card = nil
if other_joker_ret then if other_joker_ret then
other_joker_ret.card = context.blueprint_card or self other_joker_ret.card = eff_card
context.no_callback = not (context.copy_depth <= 1)
context.copy_depth = context.copy_depth - 1;
other_joker_ret.colour = G.C.BLUE other_joker_ret.colour = G.C.BLUE
return other_joker_ret return other_joker_ret
end end
@ -2785,17 +2734,16 @@ end
end end
if self.ability.name == "Brainstorm" then if self.ability.name == "Brainstorm" then
local other_joker = G.jokers.cards[1] local other_joker = G.jokers.cards[1]
if other_joker and other_joker ~= self then if other_joker and other_joker ~= self and not context.no_blueprint then
context.blueprint = (context.blueprint and (context.blueprint + 1)) or 1 context.blueprint = (context.blueprint and (context.blueprint + 1)) or 1
context.copy_depth = (context.copy_depth and (context.copy_depth + 1)) or 1
context.blueprint_card = context.blueprint_card or self context.blueprint_card = context.blueprint_card or self
if context.blueprint > #G.jokers.cards + 1 then return end if context.blueprint > #G.jokers.cards + 1 then return end
context.no_callback = true local other_joker_ret = other_joker:calculate_joker(context)
local other_joker_ret, trig = other_joker:calculate_joker(context) context.blueprint = nil
local eff_card = context.blueprint_card or self
context.blueprint_card = nil
if other_joker_ret then if other_joker_ret then
other_joker_ret.card = context.blueprint_card or self other_joker_ret.card = eff_card
context.no_callback = not (context.copy_depth <= 1)
context.copy_depth = context.copy_depth - 1;
other_joker_ret.colour = G.C.RED other_joker_ret.colour = G.C.RED
return other_joker_ret return other_joker_ret
end end
@ -2816,6 +2764,7 @@ end
return true return true
end)})) end)}))
card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_plus_tarot'), colour = G.C.PURPLE}) card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_plus_tarot'), colour = G.C.PURPLE})
return nil, true
end end
end end
elseif context.buying_card then elseif context.buying_card then
@ -3184,7 +3133,7 @@ end
if self.ability.name == 'Glass Joker' and not context.blueprint and context.consumeable.ability.name == 'The Hanged Man' then if self.ability.name == 'Glass Joker' and not context.blueprint and context.consumeable.ability.name == 'The Hanged Man' then
local shattered_glass = 0 local shattered_glass = 0
for k, val in ipairs(G.hand.highlighted) do for k, val in ipairs(G.hand.highlighted) do
if val.ability.name == 'Glass Card' then shattered_glass = shattered_glass + 1 end if SMODS.has_enhancement(val, 'm_glass') then shattered_glass = shattered_glass + 1 end
end end
if shattered_glass > 0 then if shattered_glass > 0 then
self.ability.x_mult = self.ability.x_mult + self.ability.extra*shattered_glass self.ability.x_mult = self.ability.x_mult + self.ability.extra*shattered_glass
@ -3215,7 +3164,6 @@ end
if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end
return { return {
message = localize('$')..self.ability.extra, message = localize('$')..self.ability.extra,
dollars = self.ability.extra,
colour = G.C.MONEY colour = G.C.MONEY
} }
end end
@ -3248,6 +3196,7 @@ end
end end
})) }))
return { return {
card = self,
message = localize('k_eaten_ex'), message = localize('k_eaten_ex'),
colour = G.C.FILTER colour = G.C.FILTER
} }
@ -3255,6 +3204,7 @@ end
self.ability.x_mult = self.ability.x_mult - self.ability.extra self.ability.x_mult = self.ability.x_mult - self.ability.extra
return { return {
delay = 0.2, delay = 0.2,
card = self,
message = localize{type='variable',key='a_xmult_minus',vars={self.ability.extra}}, message = localize{type='variable',key='a_xmult_minus',vars={self.ability.extra}},
colour = G.C.RED colour = G.C.RED
} }
@ -3265,6 +3215,7 @@ end
self.ability.yorick_discards = self.ability.extra.discards self.ability.yorick_discards = self.ability.extra.discards
self.ability.x_mult = self.ability.x_mult + self.ability.extra.xmult self.ability.x_mult = self.ability.x_mult + self.ability.extra.xmult
return { return {
card = self,
delay = 0.2, delay = 0.2,
message = localize{type='variable',key='a_xmult',vars={self.ability.x_mult}}, message = localize{type='variable',key='a_xmult',vars={self.ability.x_mult}},
colour = G.C.RED colour = G.C.RED
@ -3395,6 +3346,7 @@ end
end end
})) }))
return { return {
card = self,
message = localize('k_eaten_ex'), message = localize('k_eaten_ex'),
colour = G.C.FILTER colour = G.C.FILTER
} }
@ -3624,7 +3576,7 @@ end
} }
end end
if self.ability.name == 'Golden Ticket' and if self.ability.name == 'Golden Ticket' and
context.other_card.ability.name == 'Gold Card' then SMODS.has_enhancement(context.other_card, 'm_gold') then
G.GAME.dollar_buffer = (G.GAME.dollar_buffer or 0) + self.ability.extra G.GAME.dollar_buffer = (G.GAME.dollar_buffer or 0) + self.ability.extra
if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end
return { return {
@ -3797,7 +3749,7 @@ end
local temp_Mult, temp_ID = 15, 15 local temp_Mult, temp_ID = 15, 15
local raised_card = nil local raised_card = nil
for i=1, #G.hand.cards do for i=1, #G.hand.cards do
if temp_ID >= G.hand.cards[i].base.id and (G.hand.cards[i].ability.effect ~= 'Stone Card' and not G.hand.cards[i].config.center.no_rank) then if temp_ID >= G.hand.cards[i].base.id and not SMODS.has_no_rank(G.hand.cards[i]) then
temp_Mult = G.hand.cards[i].base.nominal temp_Mult = G.hand.cards[i].base.nominal
temp_ID = G.hand.cards[i].base.id temp_ID = G.hand.cards[i].base.id
raised_card = G.hand.cards[i] raised_card = G.hand.cards[i]
@ -3974,7 +3926,6 @@ end
if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end
return { return {
message = localize('$')..self.ability.extra.dollars, message = localize('$')..self.ability.extra.dollars,
dollars = self.ability.extra.dollars,
colour = G.C.MONEY colour = G.C.MONEY
} }
end end
@ -4203,7 +4154,6 @@ end
if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end if not Talisman.config_file.disable_anims then G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)})) else G.GAME.dollar_buffer = 0 end
return { return {
message = localize('$')..self.ability.extra, message = localize('$')..self.ability.extra,
dollars = self.ability.extra,
colour = G.C.MONEY colour = G.C.MONEY
} }
end end
@ -4292,7 +4242,7 @@ end
['Clubs'] = 0 ['Clubs'] = 0
} }
for i = 1, #context.scoring_hand do for i = 1, #context.scoring_hand do
if context.scoring_hand[i].ability.name ~= 'Wild Card' and not context.scoring_hand[i].config.center.any_suit then if not SMODS.has_any_suit(context.scoring_hand[i]) then
if context.scoring_hand[i]:is_suit('Hearts', true) and suits["Hearts"] == 0 then suits["Hearts"] = suits["Hearts"] + 1 if context.scoring_hand[i]:is_suit('Hearts', true) and suits["Hearts"] == 0 then suits["Hearts"] = suits["Hearts"] + 1
elseif context.scoring_hand[i]:is_suit('Diamonds', true) and suits["Diamonds"] == 0 then suits["Diamonds"] = suits["Diamonds"] + 1 elseif context.scoring_hand[i]:is_suit('Diamonds', true) and suits["Diamonds"] == 0 then suits["Diamonds"] = suits["Diamonds"] + 1
elseif context.scoring_hand[i]:is_suit('Spades', true) and suits["Spades"] == 0 then suits["Spades"] = suits["Spades"] + 1 elseif context.scoring_hand[i]:is_suit('Spades', true) and suits["Spades"] == 0 then suits["Spades"] = suits["Spades"] + 1
@ -4300,7 +4250,7 @@ end
end end
end end
for i = 1, #context.scoring_hand do for i = 1, #context.scoring_hand do
if context.scoring_hand[i].ability.name == 'Wild Card' or context.scoring_hand[i].config.center.any_suit then if SMODS.has_any_suit(context.scoring_hand[i]) then
if context.scoring_hand[i]:is_suit('Hearts') and suits["Hearts"] == 0 then suits["Hearts"] = suits["Hearts"] + 1 if context.scoring_hand[i]:is_suit('Hearts') and suits["Hearts"] == 0 then suits["Hearts"] = suits["Hearts"] + 1
elseif context.scoring_hand[i]:is_suit('Diamonds') and suits["Diamonds"] == 0 then suits["Diamonds"] = suits["Diamonds"] + 1 elseif context.scoring_hand[i]:is_suit('Diamonds') and suits["Diamonds"] == 0 then suits["Diamonds"] = suits["Diamonds"] + 1
elseif context.scoring_hand[i]:is_suit('Spades') and suits["Spades"] == 0 then suits["Spades"] = suits["Spades"] + 1 elseif context.scoring_hand[i]:is_suit('Spades') and suits["Spades"] == 0 then suits["Spades"] = suits["Spades"] + 1
@ -4325,7 +4275,7 @@ end
['Clubs'] = 0 ['Clubs'] = 0
} }
for i = 1, #context.scoring_hand do for i = 1, #context.scoring_hand do
if context.scoring_hand[i].ability.name ~= 'Wild Card' and not context.scoring_hand[i].config.center.any_suit then if not SMODS.has_any_suit(context.scoring_hand[i]) then
if context.scoring_hand[i]:is_suit('Hearts') then suits["Hearts"] = suits["Hearts"] + 1 end if context.scoring_hand[i]:is_suit('Hearts') then suits["Hearts"] = suits["Hearts"] + 1 end
if context.scoring_hand[i]:is_suit('Diamonds') then suits["Diamonds"] = suits["Diamonds"] + 1 end if context.scoring_hand[i]:is_suit('Diamonds') then suits["Diamonds"] = suits["Diamonds"] + 1 end
if context.scoring_hand[i]:is_suit('Spades') then suits["Spades"] = suits["Spades"] + 1 end if context.scoring_hand[i]:is_suit('Spades') then suits["Spades"] = suits["Spades"] + 1 end
@ -4333,7 +4283,7 @@ end
end end
end end
for i = 1, #context.scoring_hand do for i = 1, #context.scoring_hand do
if context.scoring_hand[i].ability.name == 'Wild Card' or context.scoring_hand[i].config.center.any_suit then if SMODS.has_any_suit(context.scoring_hand[i]) then
if context.scoring_hand[i]:is_suit('Clubs') and suits["Clubs"] == 0 then suits["Clubs"] = suits["Clubs"] + 1 if context.scoring_hand[i]:is_suit('Clubs') and suits["Clubs"] == 0 then suits["Clubs"] = suits["Clubs"] + 1
elseif context.scoring_hand[i]:is_suit('Diamonds') and suits["Diamonds"] == 0 then suits["Diamonds"] = suits["Diamonds"] + 1 elseif context.scoring_hand[i]:is_suit('Diamonds') and suits["Diamonds"] == 0 then suits["Diamonds"] = suits["Diamonds"] + 1
elseif context.scoring_hand[i]:is_suit('Spades') and suits["Spades"] == 0 then suits["Spades"] = suits["Spades"] + 1 elseif context.scoring_hand[i]:is_suit('Spades') and suits["Spades"] == 0 then suits["Spades"] = suits["Spades"] + 1
@ -4543,10 +4493,10 @@ end
function Card:is_suit(suit, bypass_debuff, flush_calc) function Card:is_suit(suit, bypass_debuff, flush_calc)
if flush_calc then if flush_calc then
if self.ability.effect == 'Stone Card' or self.config.center.no_suit then if SMODS.has_no_suit(self) then
return false return false
end end
if (self.ability.name == 'Wild Card' or self.config.center.any_suit) and not self.debuff then if SMODS.has_any_suit(self) and not self.debuff then
return true return true
end end
if next(find_joker('Smeared Joker')) and (self.base.suit == 'Hearts' or self.base.suit == 'Diamonds') == (suit == 'Hearts' or suit == 'Diamonds') then if next(find_joker('Smeared Joker')) and (self.base.suit == 'Hearts' or self.base.suit == 'Diamonds') == (suit == 'Hearts' or suit == 'Diamonds') then
@ -4555,10 +4505,10 @@ function Card:is_suit(suit, bypass_debuff, flush_calc)
return self.base.suit == suit return self.base.suit == suit
else else
if self.debuff and not bypass_debuff then return end if self.debuff and not bypass_debuff then return end
if self.ability.effect == 'Stone Card' or self.config.center.no_suit then if SMODS.has_no_suit(self) then
return false return false
end end
if self.ability.name == 'Wild Card' or self.config.center.any_suit then if SMODS.has_any_suit(self) then
return true return true
end end
if next(find_joker('Smeared Joker')) and (self.base.suit == 'Hearts' or self.base.suit == 'Diamonds') == (suit == 'Hearts' or suit == 'Diamonds') then if next(find_joker('Smeared Joker')) and (self.base.suit == 'Hearts' or self.base.suit == 'Diamonds') == (suit == 'Hearts' or suit == 'Diamonds') then
@ -4670,13 +4620,13 @@ function Card:update(dt)
if self.ability.name == "Driver's License" then if self.ability.name == "Driver's License" then
self.ability.driver_tally = 0 self.ability.driver_tally = 0
for k, v in pairs(G.playing_cards) do for k, v in pairs(G.playing_cards) do
if v.config.center ~= G.P_CENTERS.c_base then self.ability.driver_tally = self.ability.driver_tally+1 end if next(SMODS.get_enhancements(v)) then self.ability.driver_tally = self.ability.driver_tally+1 end
end end
end end
if self.ability.name == "Steel Joker" then if self.ability.name == "Steel Joker" then
self.ability.steel_tally = 0 self.ability.steel_tally = 0
for k, v in pairs(G.playing_cards) do for k, v in pairs(G.playing_cards) do
if v.config.center == G.P_CENTERS.m_steel then self.ability.steel_tally = self.ability.steel_tally+1 end if SMODS.has_enhancement(v, 'm_steel') then self.ability.steel_tally = self.ability.steel_tally+1 end
end end
end end
if self.ability.name == "Cloud 9" then if self.ability.name == "Cloud 9" then
@ -4688,7 +4638,7 @@ function Card:update(dt)
if self.ability.name == "Stone Joker" then if self.ability.name == "Stone Joker" then
self.ability.stone_tally = 0 self.ability.stone_tally = 0
for k, v in pairs(G.playing_cards) do for k, v in pairs(G.playing_cards) do
if v.config.center == G.P_CENTERS.m_stone then self.ability.stone_tally = self.ability.stone_tally+1 end if SMODS.has_enhancement(v, 'm_stone') then self.ability.stone_tally = self.ability.stone_tally+1 end
end end
end end
if self.ability.name == "Joker Stencil" then if self.ability.name == "Joker Stencil" then
@ -4942,6 +4892,9 @@ function Card:draw(layer)
if (self.config.center.undiscovered and not self.config.center.undiscovered.no_overlay) or not( SMODS.UndiscoveredSprites[self.ability.set] and SMODS.UndiscoveredSprites[self.ability.set].no_overlay) then if (self.config.center.undiscovered and not self.config.center.undiscovered.no_overlay) or not( SMODS.UndiscoveredSprites[self.ability.set] and SMODS.UndiscoveredSprites[self.ability.set].no_overlay) then
shared_sprite:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod) shared_sprite:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod)
else else
if SMODS.UndiscoveredSprites[self.ability.set] and SMODS.UndiscoveredSprites[self.ability.set].overlay_sprite then
SMODS.UndiscoveredSprites[self.ability.set].overlay_sprite:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod)
end
end end
end end
@ -5030,6 +4983,17 @@ function Card:draw(layer)
G.shared_stickers[self.sticker_run]:draw_shader('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center) G.shared_stickers[self.sticker_run]:draw_shader('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center)
end end
for k, v in pairs(SMODS.Stickers) do
if self.ability[v.key] then
if v and v.draw and type(v.draw) == 'function' then
v:draw(self, layer)
else
G.shared_stickers[v.key].role.draw_major = self
G.shared_stickers[v.key]:draw_shader('dissolve', nil, nil, nil, self.children.center)
G.shared_stickers[v.key]:draw_shader('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center)
end
end
end
if self.ability.name == 'The Soul' and (self.config.center.discovered or self.bypass_discovery_center) then if self.ability.name == 'The Soul' and (self.config.center.discovered or self.bypass_discovery_center) then
local scale_mod = 0.05 + 0.05*math.sin(1.8*G.TIMERS.REAL) + 0.07*math.sin((G.TIMERS.REAL - math.floor(G.TIMERS.REAL))*math.pi*14)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^3 local scale_mod = 0.05 + 0.05*math.sin(1.8*G.TIMERS.REAL) + 0.07*math.sin((G.TIMERS.REAL - math.floor(G.TIMERS.REAL))*math.pi*14)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^3
local rotate_mod = 0.1*math.sin(1.219*G.TIMERS.REAL) + 0.07*math.sin((G.TIMERS.REAL)*math.pi*5)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^2 local rotate_mod = 0.1*math.sin(1.219*G.TIMERS.REAL) + 0.07*math.sin((G.TIMERS.REAL)*math.pi*5)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^2
@ -5051,15 +5015,6 @@ function Card:draw(layer)
self.children.floating_sprite.role.draw_major = self self.children.floating_sprite.role.draw_major = self
self.children.floating_sprite:draw_shader('dissolve',0, nil, nil, self.children.center,scale_mod, rotate_mod,nil, 0.1 + 0.03*math.sin(1.8*G.TIMERS.REAL),nil, 0.6) self.children.floating_sprite:draw_shader('dissolve',0, nil, nil, self.children.center,scale_mod, rotate_mod,nil, 0.1 + 0.03*math.sin(1.8*G.TIMERS.REAL),nil, 0.6)
self.children.floating_sprite:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod) self.children.floating_sprite:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod)
if self.edition then
for k, v in pairs(G.P_CENTER_POOLS.Edition) do
if v.apply_to_float then
if self.edition[v.key:sub(3)] then
self.children.floating_sprite:draw_shader(v.shader, nil, nil, nil, self.children.center, scale_mod, rotate_mod)
end
end
end
end
end end
if self.config.center.soul_pos and (self.config.center.discovered or self.bypass_discovery_center) then if self.config.center.soul_pos and (self.config.center.discovered or self.bypass_discovery_center) then
@ -5109,17 +5064,6 @@ function Card:draw(layer)
G.shared_stickers['pinned']:draw_shader('dissolve', nil, nil, nil, self.children.center) G.shared_stickers['pinned']:draw_shader('dissolve', nil, nil, nil, self.children.center)
G.shared_stickers['pinned']:draw_shader('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center) G.shared_stickers['pinned']:draw_shader('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center)
end end
for k, v in pairs(SMODS.Stickers) do
if self.ability[v.key] then
if v and v.draw and type(v.draw) == 'function' then
v:draw(self, layer)
else
G.shared_stickers[v.key].role.draw_major = self
G.shared_stickers[v.key]:draw_shader('dissolve', nil, nil, nil, self.children.center)
G.shared_stickers[v.key]:draw_shader('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center)
end
end
end
elseif self.sprite_facing == 'back' then elseif self.sprite_facing == 'back' then
local overlay = G.C.WHITE local overlay = G.C.WHITE
if self.area and self.area.config.type == 'deck' and self.rank > 3 then if self.area and self.area.config.type == 'deck' and self.rank > 3 then
@ -5180,7 +5124,7 @@ function Card:draw(layer)
end end
for k, v in pairs(self.children) do for k, v in pairs(self.children) do
if k ~= 'focused_ui' and k ~= "front" and k ~= "back" and k ~= "soul_parts" and k ~= "center" and k ~= 'floating_sprite' and k ~= 'floating_sprite2' and k~= "shadow" and k~= "use_button" and k ~= 'buy_button' and k ~= 'buy_and_use_button' and k~= "debuff" and k ~= 'price' and k~= 'particles' and k ~= 'h_popup' then v:draw() end if not v.custom_draw and k ~= 'focused_ui' and k ~= "front" and k ~= "back" and k ~= "soul_parts" and k ~= "center" and k ~= 'floating_sprite' and k~= "shadow" and k~= "use_button" and k ~= 'buy_button' and k ~= 'buy_and_use_button' and k~= "debuff" and k ~= 'price' and k~= 'particles' and k ~= 'h_popup' then v:draw() end
end end
if (layer == 'card' or layer == 'both') and self.area == G.hand then if (layer == 'card' or layer == 'both') and self.area == G.hand then
@ -5338,6 +5282,16 @@ function Card:load(cardTable, other_card)
self.T.h = H*scale self.T.h = H*scale
self.T.w = W*scale self.T.w = W*scale
end end
if self.config.center.display_size and self.config.center.display_size.h then
self.T.h = H*(self.config.center.display_size.h/95)
elseif self.config.center.pixel_size and self.config.center.pixel_size.h then
self.T.h = H*(self.config.center.pixel_size.h/95)
end
if self.config.center.display_size and self.config.center.display_size.w then
self.T.w = W*(self.config.center.display_size.w/71)
elseif self.config.center.pixel_size and self.config.center.pixel_size.w then
self.T.w = W*(self.config.center.pixel_size.w/71)
end
self.VT.h = self.T.H self.VT.h = self.T.H
self.VT.w = self.T.w self.VT.w = self.T.w
@ -5389,9 +5343,6 @@ function Card:remove()
if self.area then self.area:remove_card(self) end if self.area then self.area:remove_card(self) end
self:remove_from_deck() self:remove_from_deck()
if self.ability.consumeable and self.pinned and (G.GAME.cry_pinned_consumeables > 0) then
G.GAME.cry_pinned_consumeables = G.GAME.cry_pinned_consumeables - 1
end
if self.ability.joker_added_to_deck_but_debuffed then if self.ability.joker_added_to_deck_but_debuffed then
if self.edition and self.edition.card_limit then if self.edition and self.edition.card_limit then
if self.ability.consumeable then if self.ability.consumeable then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'a7d11253f7999a0561fd7f99f774f750e8b3702d5f496f16eaf5274a4813bd49' LOVELY_INTEGRITY = 'e8693aca875516bf9cb3c84fcb6f392131135da095f221f2ef0e6ac727b926df'
--Class --Class
CardArea = Moveable:extend() CardArea = Moveable:extend()
@ -490,7 +490,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30 card.T.x = card.T.x + card.shadow_parrallax.x/30
end end
end end
table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*((a.pinned and not a.ignore_pinned) and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*((b.pinned and not b.ignore_pinned) and b.sort_id or 0) end) table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)
end end
if self.config.type == 'hand' and not (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.SPECTRAL_PACK or G.STATE == G.STATES.PLANET_PACK or G.STATE == G.STATES.SMODS_BOOSTER_OPENED) then if self.config.type == 'hand' and not (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.SPECTRAL_PACK or G.STATE == G.STATES.PLANET_PACK or G.STATE == G.STATES.SMODS_BOOSTER_OPENED) then
@ -506,7 +506,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30 card.T.x = card.T.x + card.shadow_parrallax.x/30
end end
end end
table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*((a.pinned and not a.ignore_pinned) and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*((b.pinned and not b.ignore_pinned) and b.sort_id or 0) end) table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)
end end
if self.config.type == 'title' or (self.config.type == 'voucher' and #self.cards == 1) then if self.config.type == 'title' or (self.config.type == 'voucher' and #self.cards == 1) then
for k, card in ipairs(self.cards) do for k, card in ipairs(self.cards) do
@ -520,7 +520,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30 card.T.x = card.T.x + card.shadow_parrallax.x/30
end end
end end
table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*((a.pinned and not a.ignore_pinned) and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*((b.pinned and not b.ignore_pinned) and b.sort_id or 0) end) table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)
end end
if self.config.type == 'voucher' and #self.cards > 1 then if self.config.type == 'voucher' and #self.cards > 1 then
local self_w = math.max(self.T.w, 3.2) local self_w = math.max(self.T.w, 3.2)
@ -549,7 +549,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30 card.T.x = card.T.x + card.shadow_parrallax.x/30
end end
end end
table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*((a.pinned and not a.ignore_pinned) and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*((b.pinned and not b.ignore_pinned) and b.sort_id or 0) end) table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)
end end
if self == G.jokers and G.jokers.cart_jokers_expanded then if self == G.jokers and G.jokers.cart_jokers_expanded then
local align_cards = Cartomancer.expand_G_jokers() local align_cards = Cartomancer.expand_G_jokers()
@ -581,7 +581,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30 card.T.x = card.T.x + card.shadow_parrallax.x/30
end end
end end
if not G.GAME.modifiers.cry_conveyor then table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end) end table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*((a.pinned and not a.ignore_pinned) and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*((b.pinned and not b.ignore_pinned) and b.sort_id or 0) end)
end end
if self.config.type == 'consumeable'then if self.config.type == 'consumeable'then
for k, card in ipairs(self.cards) do for k, card in ipairs(self.cards) do
@ -597,7 +597,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30 card.T.x = card.T.x + card.shadow_parrallax.x/30
end end
end end
table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*((a.pinned and not a.ignore_pinned) and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*((b.pinned and not b.ignore_pinned) and b.sort_id or 0) end) table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)
end end
for k, card in ipairs(self.cards) do for k, card in ipairs(self.cards) do
card.rank = k card.rank = k

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '2550ee40d7ac8df7273f766f9ca41eae9c54302c74f10249ada15b3fe2d6121c' LOVELY_INTEGRITY = 'd36e3953c2739cd4ea15794fb5e4031a2dac09fc33baadd0a2820e4726891304'
---@class Controller ---@class Controller
Controller = Object:extend() Controller = Object:extend()
@ -815,7 +815,7 @@ function Controller:key_press_update(key, dt)
for _, keybind in pairs(SMODS.Keybinds) do for _, keybind in pairs(SMODS.Keybinds) do
if keybind.action and keybind.key_pressed == key then if keybind.action and keybind.key_pressed == key and keybind.event == 'pressed' then
local execute = true local execute = true
for _, other_key in pairs(keybind.held_keys) do for _, other_key in pairs(keybind.held_keys) do
if not self.held_keys[other_key] then if not self.held_keys[other_key] then
@ -824,7 +824,7 @@ function Controller:key_press_update(key, dt)
end end
end end
if execute then if execute then
keybind.action(self) keybind:action()
end end
end end
end end
@ -931,14 +931,26 @@ function Controller:key_hold_update(key, dt)
if ((self.locked) and not G.SETTINGS.paused) or (self.locks.frame) or (self.frame_buttonpress) then return end if ((self.locked) and not G.SETTINGS.paused) or (self.locks.frame) or (self.frame_buttonpress) then return end
--self.frame_buttonpress = true --self.frame_buttonpress = true
if self.held_key_times[key] then if self.held_key_times[key] then
if key == 'm' then for _, keybind in pairs(SMODS.Keybinds) do
if self.held_key_times[key] > 1.1 then if keybind.key_pressed == key and keybind.event == 'held' and keybind.held_duration then
SMODS.save_all_config() if self.held_key_times[key] > keybind.held_duration then
SMODS.restart_game() local execute = true
for _, other_key in pairs(keybind.held_keys) do
if not self.held_keys[other_key] then
execute = false
break
end
end
if execute then
keybind:action()
self.held_key_times[key] = nil
end
else else
self.held_key_times[key] = self.held_key_times[key] + dt self.held_key_times[key] = self.held_key_times[key] + dt
end end
elseif key == "r" and not G.SETTINGS.paused and not (G.GAME and G.GAME.USING_CODE) then end
end
if key == "r" and not G.SETTINGS.paused and not (G.GAME and G.GAME.USING_CODE) then
if self.held_key_times[key] > 0.7 then if self.held_key_times[key] > 0.7 then
if not G.GAME.won and not G.GAME.seeded and not G.GAME.challenge then if not G.GAME.won and not G.GAME.seeded and not G.GAME.challenge then
G.PROFILES[G.SETTINGS.profile].high_scores.current_streak.amt = 0 G.PROFILES[G.SETTINGS.profile].high_scores.current_streak.amt = 0
@ -964,6 +976,20 @@ elseif key == "r" and not G.SETTINGS.paused and not (G.GAME and G.GAME.USING_COD
end end
function Controller:key_release_update(key, dt) function Controller:key_release_update(key, dt)
for _, keybind in pairs(SMODS.Keybinds) do
if keybind.action and keybind.key_pressed == key and keybind.event == 'released' then
local execute = true
for _, other_key in pairs(keybind.held_keys) do
if not self.held_keys[other_key] then
execute = false
break
end
end
if execute then
keybind:action()
end
end
end
if ((self.locked) and not G.SETTINGS.paused) or (self.locks.frame) or (self.frame_buttonpress) then return end if ((self.locked) and not G.SETTINGS.paused) or (self.locks.frame) or (self.frame_buttonpress) then return end
self.frame_buttonpress = true self.frame_buttonpress = true
if key == "a" and self.held_keys["g"] and not _RELEASE_MODE then if key == "a" and self.held_keys["g"] and not _RELEASE_MODE then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '72872b3b4770af870f29bca0a9c04f8e62103c150ae3d5e6600706da63ac8e0b' LOVELY_INTEGRITY = 'a89ca7b9273fee523938c932a6467dfa383c8e44b527c8da74869b0ae75efe92'
require "love.audio" require "love.audio"
require "love.sound" require "love.sound"

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '6dc6391935253a5dba5a3febb135e71775ed356629edd2463e2d01e436702ddd' LOVELY_INTEGRITY = '6732b4a403b7b8feb5e2decf7325ea96cac23686fd99e992f1aa1c26a7881bbe'
--Create a global UIDEF that contains all UI definition functions\ --Create a global UIDEF that contains all UI definition functions\
--As a rule, these contain functions that return a table T representing the definition for a UIBox --As a rule, these contain functions that return a table T representing the definition for a UIBox
@ -299,6 +299,15 @@ function G.UIDEF.use_and_sell_buttons(card)
}}, }},
}} }}
end end
if card.ability.consumeable and booster_obj and booster_obj.select_card then
if (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.R, config={ref_table = card, r = 0.08, padding = 0.1, align = "bm", minw = 0.5*card.T.w - 0.15, maxw = 0.9*card.T.w - 0.15, minh = 0.3*card.T.h, hover = true, shadow = true, colour = G.C.UI.BACKGROUND_INACTIVE, one_press = true, button = 'use_card', func = 'can_select_from_booster'}, nodes={
{n=G.UIT.T, config={text = localize('b_select'),colour = G.C.UI.TEXT_LIGHT, scale = 0.45, shadow = true}}
}},
}}
end
end
if card.ability.consumeable then if card.ability.consumeable then
if (card.area == G.pack_cards and G.pack_cards) then if (card.area == G.pack_cards and G.pack_cards) then
return { return {
@ -1670,16 +1679,17 @@ function create_UIBox_blind_choice(type, run_info)
}} }}
end end
G.GAME.round_resets.blind_ante = G.GAME.round_resets.blind_ante or G.GAME.round_resets.ante G.GAME.round_resets.blind_ante = G.GAME.round_resets.blind_ante or G.GAME.round_resets.ante
local loc_vars = nil local target = {type = 'raw_descriptions', key = blind_choice.config.key, set = 'Blind', vars = {}}
if blind_choice.config.name == 'The Ox' then if blind_choice.config.name == 'The Ox' then
loc_vars = {localize(G.GAME.current_round.most_played_poker_hand, 'poker_hands')} target.vars = {localize(G.GAME.current_round.most_played_poker_hand, 'poker_hands')}
end end
local obj = blind_choice.config local obj = blind_choice.config
if obj.loc_vars and _G['type'](obj.loc_vars) == 'function' then if obj.loc_vars and _G['type'](obj.loc_vars) == 'function' then
local res = obj:loc_vars() or {} local res = obj:loc_vars() or {}
loc_vars = res.vars or {} target.vars = res.vars or target.vars
target.key = res.key or target.key
end end
local loc_target = localize{type = 'raw_descriptions', key = blind_choice.config.key, set = 'Blind', vars = loc_vars or blind_choice.config.vars} local loc_target = localize(target)
local loc_name = localize{type = 'name_text', key = blind_choice.config.key, set = 'Blind'} local loc_name = localize{type = 'name_text', key = blind_choice.config.key, set = 'Blind'}
local text_table = loc_target local text_table = loc_target
local blind_col = get_blind_main_colour(type) local blind_col = get_blind_main_colour(type)
@ -2701,27 +2711,46 @@ function G.UIDEF.custom_deck_tab(_suit)
local rankCount = 0 local rankCount = 0
local lookup = {} local lookup = {}
local options = G.COLLABS.options[_suit] for i, s in ipairs(SMODS.Suit:obj_list(true)) do
for i = 2, #options do local options = G.COLLABS.options[s.key]
for i = 1, #options do
local skin = SMODS.DeckSkins[options[i]] local skin = SMODS.DeckSkins[options[i]]
for j = 1, #skin.ranks do if skin.palettes and not (skin.display_ranks or skin.ranks) then
for _, p in ipairs(skin.palettes) do
local p_ranks = p.display_ranks or p.ranks
for j = 1, #p_ranks do
if not lookup[p_ranks[j]] then
lookup[p_ranks[j]] = true
rankCount = rankCount + 1
end
end
end
elseif not skin.palettes and (skin.display_ranks or skin.ranks) then
local ranks = skin.display_ranks or skin.ranks
for j = 1, #ranks do
if not lookup[skin.ranks[j]] then if not lookup[skin.ranks[j]] then
lookup[skin.ranks[j]] = true lookup[skin.ranks[j]] = true
rankCount = rankCount + 1 rankCount = rankCount + 1
end end
end end
end
end
end end
local face_cards = CardArea( G.cdds_cards = CardArea(
0,0, 0,0,
math.min(math.max(rankCount*G.CARD_W*0.6, 4*G.CARD_W), 10*G.CARD_W), math.min(math.max(rankCount*G.CARD_W*0.6, 4*G.CARD_W), 10*G.CARD_W),
1.4*G.CARD_H, 1.4*G.CARD_H,
{card_limit = rankCount, type = 'title', highlight_limit = 0}) {card_limit = rankCount, type = 'title', highlight_limit = 0})
G.cdds_cards.rankCount = rankCount
table.insert(t, table.insert(t,
{n=G.UIT.R, config={align = "cm", colour = G.C.BLACK, r = 0.1, padding = 0.07, no_fill = true}, nodes={ {n=G.UIT.R, config={align = "cm", colour = G.C.BLACK, r = 0.1, padding = 0.07, no_fill = true}, nodes={
{n=G.UIT.O, config={object = face_cards}} {n=G.UIT.O, config={object = G.cdds_cards}}
}} }}
) )
@ -2743,26 +2772,25 @@ local face_cards = CardArea(
create_option_cycle({options = loc_options, w = 5.5, cycle_shoulders = true, curr_suit = _suit, opt_callback = 'change_collab', current_option = current_option, colour = G.C.RED, focus_args = {snap_to = true, nav = 'wide'}}), create_option_cycle({options = loc_options, w = 5.5, cycle_shoulders = true, curr_suit = _suit, opt_callback = 'change_collab', current_option = current_option, colour = G.C.RED, focus_args = {snap_to = true, nav = 'wide'}}),
}} }}
) )
table.insert(t, create_toggle({label = localize('b_high_contrast_cards'), ref_table = G.SETTINGS, ref_value = 'colourblind_option', callback = G.FUNCS.refresh_contrast_mode})) local deckskin_key = G.COLLABS.options[_suit][current_option]
local palette_loc_options = SMODS.DeckSkin.get_palette_loc_options(deckskin_key, _suit)
local selected_palette = 1
for i, v in ipairs(G.COLLABS.colour_palettes[deckskin_key]) do
if G.SETTINGS.colour_palettes[_suit] == v then
selected_palette = i
end
end
table.insert(t,
{n=G.UIT.R, config={align = "cm", id = 'palette_selector'}, nodes={
create_option_cycle({options = palette_loc_options, w = 5.5, cycle_shoulders = false, curr_suit = _suit, curr_skin = deckskin_key, opt_callback = 'change_colour_palette', current_option = selected_palette, colour = G.C.ORANGE, focus_args = {snap_to = true, nav = 'wide'}}),
}}
)
local faces = {'K','Q','J'} local faces = {'K','Q','J'}
local rank = SMODS.Ranks['2'] G.FUNCS.update_collab_cards(current_option, _suit, true)
local cards = {}
local smodSuit = SMODS.Suits[_suit]
repeat
if lookup[rank.key] then
local card_code = smodSuit.card_key .. '_' .. rank.card_key
local card = Card(0,0, G.CARD_W*1.2, G.CARD_H*1.2, G.P_CARDS[card_code], G.P_CENTERS.c_base)
card.no_ui = true
cards[#cards + 1] = card
end
rank = SMODS.Ranks[rank.next[1]]
until rank == SMODS.Ranks['2']
for i = #cards, 1, -1 do
face_cards:emplace(cards[i])
end
return {n=G.UIT.ROOT, config={align = "cm", padding = 0, colour = G.C.CLEAR, r = 0.1, minw = 7, minh = 4.2}, nodes=t} return {n=G.UIT.ROOT, config={align = "cm", padding = 0, colour = G.C.CLEAR, r = 0.1, minw = 7, minh = 4.2}, nodes=t}
@ -3795,16 +3823,14 @@ function create_UIBox_your_collection_jokers()
) )
end end
local joker_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Joker)
local joker_options = {} local joker_options = {}
for i = 1, math.ceil(#joker_pool/(5*#G.your_collection)) do for i = 1, math.ceil(#G.P_CENTER_POOLS.Joker/(5*#G.your_collection)) do
table.insert(joker_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#joker_pool/(5*#G.your_collection)))) table.insert(joker_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#G.P_CENTER_POOLS.Joker/(5*#G.your_collection))))
end end
for i = 1, 5 do for i = 1, 5 do
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
local center = joker_pool[i+(j-1)*5] local center = G.P_CENTER_POOLS["Joker"][i+(j-1)*5]
if not center then break end
local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, nil, center) local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, nil, center)
card.sticker = get_joker_win_sticker(center) card.sticker = get_joker_win_sticker(center)
G.your_collection[j]:emplace(card) G.your_collection[j]:emplace(card)
@ -3813,7 +3839,7 @@ function create_UIBox_your_collection_jokers()
INIT_COLLECTION_CARD_ALERTS() INIT_COLLECTION_CARD_ALERTS()
local t = create_UIBox_generic_options({ back_func = G.ACTIVE_MOD_UI and "openModUI_"..G.ACTIVE_MOD_UI.id or 'your_collection', contents = { local t = create_UIBox_generic_options({ back_func = 'your_collection', contents = {
{n=G.UIT.R, config={align = "cm", r = 0.1, colour = G.C.BLACK, emboss = 0.05}, nodes=deck_tables}, {n=G.UIT.R, config={align = "cm", r = 0.1, colour = G.C.BLACK, emboss = 0.05}, nodes=deck_tables},
{n=G.UIT.R, config={align = "cm"}, nodes={ {n=G.UIT.R, config={align = "cm"}, nodes={
create_option_cycle({options = joker_options, w = 4.5, cycle_shoulders = true, opt_callback = 'your_collection_joker_page', current_option = 1, colour = G.C.RED, no_pips = true, focus_args = {snap_to = true, nav = 'wide'}}) create_option_cycle({options = joker_options, w = 4.5, cycle_shoulders = true, opt_callback = 'your_collection_joker_page', current_option = 1, colour = G.C.RED, no_pips = true, focus_args = {snap_to = true, nav = 'wide'}})
@ -3881,16 +3907,14 @@ function create_UIBox_your_collection_boosters()
) )
end end
local booster_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Booster)
local booster_options = {} local booster_options = {}
for i = 1, math.ceil(#booster_pool/8) do for i = 1, math.ceil(#G.P_CENTER_POOLS.Booster/8) do
table.insert(booster_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#booster_pool/8))) table.insert(booster_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#G.P_CENTER_POOLS.Booster/8)))
end end
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
for i = 1, 4 do for i = 1, 4 do
local center = booster_pool[i+(j-1)*4] local center = G.P_CENTER_POOLS["Booster"][i+(j-1)*4]
if not center then break end
local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W*1.27, G.CARD_H*1.27, nil, center) local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W*1.27, G.CARD_H*1.27, nil, center)
card:start_materialize(nil, i>1 or j>1) card:start_materialize(nil, i>1 or j>1)
G.your_collection[j]:emplace(card) G.your_collection[j]:emplace(card)
@ -4003,16 +4027,14 @@ function create_UIBox_your_collection_vouchers(exit)
) )
end end
local voucher_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Voucher)
local voucher_options = {} local voucher_options = {}
for i = 1, math.ceil(#voucher_pool/(4*#G.your_collection)) do for i = 1, math.ceil(#G.P_CENTER_POOLS.Voucher/(4*#G.your_collection)) do
table.insert(voucher_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#voucher_pool/(4*#G.your_collection)))) table.insert(voucher_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#G.P_CENTER_POOLS.Voucher/(4*#G.your_collection))))
end end
for i = 1, 4 do for i = 1, 4 do
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
local center = voucher_pool[i+(j-1)*4] local center = G.P_CENTER_POOLS["Voucher"][i+(j-1)*4]
if not center then break end
local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, nil, center) local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, nil, center)
card.ability.order = i+(j-1)*4 card.ability.order = i+(j-1)*4
card:start_materialize(nil, i>1 or j>1) card:start_materialize(nil, i>1 or j>1)
@ -4022,7 +4044,7 @@ function create_UIBox_your_collection_vouchers(exit)
INIT_COLLECTION_CARD_ALERTS() INIT_COLLECTION_CARD_ALERTS()
local t = create_UIBox_generic_options({ back_func = G.ACTIVE_MOD_UI and "openModUI_"..G.ACTIVE_MOD_UI.id or exit or 'your_collection', contents = { local t = create_UIBox_generic_options({ back_func = exit or 'your_collection', contents = {
{n=G.UIT.R, config={align = "cm", minw = 2.5, padding = 0.1, r = 0.1, colour = G.C.BLACK, emboss = 0.05}, nodes=deck_tables}, {n=G.UIT.R, config={align = "cm", minw = 2.5, padding = 0.1, r = 0.1, colour = G.C.BLACK, emboss = 0.05}, nodes=deck_tables},
{n=G.UIT.R, config={align = "cm"}, nodes={ {n=G.UIT.R, config={align = "cm"}, nodes={
create_option_cycle({options = voucher_options, w = 4.5, cycle_shoulders = true, opt_callback = 'your_collection_voucher_page', focus_args = {snap_to = true, nav = 'wide'}, current_option = 1, colour = G.C.RED, no_pips = true}) create_option_cycle({options = voucher_options, w = 4.5, cycle_shoulders = true, opt_callback = 'your_collection_voucher_page', focus_args = {snap_to = true, nav = 'wide'}, current_option = 1, colour = G.C.RED, no_pips = true})
@ -4347,7 +4369,7 @@ function create_UIBox_your_collection_blinds(exit)
end end
local extras = nil local extras = nil
local t = create_UIBox_generic_options({ back_func = G.ACTIVE_MOD_UI and "openModUI_"..G.ACTIVE_MOD_UI.id or exit or 'your_collection', contents = { local t = create_UIBox_generic_options({ back_func = exit or 'your_collection', contents = {
{n=G.UIT.C, config={align = "cm", r = 0.1, colour = G.C.BLACK, padding = 0.1, emboss = 0.05}, nodes={ {n=G.UIT.C, config={align = "cm", r = 0.1, colour = G.C.BLACK, padding = 0.1, emboss = 0.05}, nodes={
{n=G.UIT.C, config={align = "cm", r = 0.1, colour = G.C.L_BLACK, padding = 0.1, force_focus = true, focus_args = {nav = 'tall'}}, nodes={ {n=G.UIT.C, config={align = "cm", r = 0.1, colour = G.C.L_BLACK, padding = 0.1, force_focus = true, focus_args = {nav = 'tall'}}, nodes={
{n=G.UIT.R, config={align = "cm", padding = 0.05}, nodes={ {n=G.UIT.R, config={align = "cm", padding = 0.05}, nodes={
@ -4379,12 +4401,13 @@ function create_UIBox_blind_popup(blind, discovered, vars)
local blind_text = {} local blind_text = {}
local _dollars = blind.dollars local _dollars = blind.dollars
local loc_vars = nil local target = {type = 'raw_descriptions', key = blind.key, set = 'Blind', vars = vars or blind.vars}
if blind.collection_loc_vars and type(blind.collection_loc_vars) == 'function' then if blind.collection_loc_vars and type(blind.collection_loc_vars) == 'function' then
local res = blind:collection_loc_vars() or {} local res = blind:collection_loc_vars() or {}
loc_vars = res.vars target.vars = res.vars or target.vars
target.key = res.key or target.key
end end
local loc_target = localize{type = 'raw_descriptions', key = blind.key, set = 'Blind', vars = loc_vars or vars or blind.vars} local loc_target = localize(target)
local loc_name = localize{type = 'name_text', key = blind.key, set = 'Blind'} local loc_name = localize{type = 'name_text', key = blind.key, set = 'Blind'}
if discovered then if discovered then
@ -5942,10 +5965,10 @@ function G.UIDEF.challenge_description_tab(args)
for k, v in pairs(G.P_CARDS) do for k, v in pairs(G.P_CARDS) do
local _r, _s = SMODS.Ranks[v.value].card_key, SMODS.Suits[v.suit].card_key local _r, _s = SMODS.Ranks[v.value].card_key, SMODS.Suits[v.suit].card_key
local keep, _e, _d, _g = true, nil, nil, nil local keep, _e, _d, _g = true, nil, nil, nil
if type(SMODS.Ranks[v.value].in_pool) == 'function' and not SMODS.Ranks[v.value]:in_pool({initial_deck = true}) then if type(SMODS.Ranks[v.value].in_pool) == 'function' and not SMODS.Ranks[v.value]:in_pool({initial_deck = true, suit = v.suit}) then
keep = false keep = false
end end
if type(SMODS.Suits[v.suit].in_pool) == 'function' and not SMODS.Suits[v.suit]:in_pool({initial_deck = true}) then if type(SMODS.Suits[v.suit].in_pool) == 'function' and not SMODS.Suits[v.suit]:in_pool({initial_deck = true, rank = v.value}) then
keep = false keep = false
end end
if _de then if _de then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '8857de192c196c2108ac03f2ec1ec6974c1d8c7ef54d7b5fbb92ce6db79734e0' LOVELY_INTEGRITY = 'd7f48a66f05694a22b7aae4c15c27e443dc398089f32ae2891b595f051091e07'
--Moves the tutorial to the next step in queue --Moves the tutorial to the next step in queue
-- --
@ -615,10 +615,9 @@ G.FUNCS.your_collection_joker_page = function(args)
c = nil c = nil
end end
end end
local joker_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Joker)
for i = 1, 5 do for i = 1, 5 do
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
local center = joker_pool[i+(j-1)*5 + (5*#G.your_collection*(args.cycle_config.current_option - 1))] local center = G.P_CENTER_POOLS["Joker"][i+(j-1)*5 + (5*#G.your_collection*(args.cycle_config.current_option - 1))]
if not center then break end if not center then break end
local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center) local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center)
card.sticker = get_joker_win_sticker(center) card.sticker = get_joker_win_sticker(center)
@ -681,7 +680,6 @@ end
---@param args {cycle_config: table} ---@param args {cycle_config: table}
--**cycle_config** Is the config table from the original option cycle UIE --**cycle_config** Is the config table from the original option cycle UIE
G.FUNCS.your_collection_booster_page = function(args) G.FUNCS.your_collection_booster_page = function(args)
local booster_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Booster)
if not args or not args.cycle_config then return end if not args or not args.cycle_config then return end
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
for i = #G.your_collection[j].cards,1, -1 do for i = #G.your_collection[j].cards,1, -1 do
@ -693,7 +691,7 @@ local booster_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Booster)
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
for i = 1, 4 do for i = 1, 4 do
local center = booster_pool[i+(j-1)*4 + (8*(args.cycle_config.current_option - 1))] local center = G.P_CENTER_POOLS["Booster"][i+(j-1)*4 + (8*(args.cycle_config.current_option - 1))]
if not center then break end if not center then break end
local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W*1.27, G.CARD_H*1.27, nil, center) local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W*1.27, G.CARD_H*1.27, nil, center)
card:start_materialize(nil, i>1 or j>1) card:start_materialize(nil, i>1 or j>1)
@ -708,7 +706,6 @@ end
---@param args {cycle_config: table} ---@param args {cycle_config: table}
--**cycle_config** Is the config table from the original option cycle UIE --**cycle_config** Is the config table from the original option cycle UIE
G.FUNCS.your_collection_voucher_page = function(args) G.FUNCS.your_collection_voucher_page = function(args)
local voucher_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Voucher)
if not args or not args.cycle_config then return end if not args or not args.cycle_config then return end
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
for i = #G.your_collection[j].cards,1, -1 do for i = #G.your_collection[j].cards,1, -1 do
@ -719,7 +716,7 @@ local voucher_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Voucher)
end end
for i = 1, 4 do for i = 1, 4 do
for j = 1, #G.your_collection do for j = 1, #G.your_collection do
local center = voucher_pool[i+(j-1)*4 + (8*(args.cycle_config.current_option - 1))] local center = G.P_CENTER_POOLS["Voucher"][i+(j-1)*4 + (8*(args.cycle_config.current_option - 1))]
if not center then break end if not center then break end
local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center) local card = Card(G.your_collection[j].T.x + G.your_collection[j].T.w/2, G.your_collection[j].T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, center)
card:start_materialize(nil, i>1 or j>1) card:start_materialize(nil, i>1 or j>1)
@ -1797,7 +1794,8 @@ G.FUNCS.change_lang = function(e)
if not lang or lang == G.LANG then if not lang or lang == G.LANG then
G.FUNCS.exit_overlay_menu() G.FUNCS.exit_overlay_menu()
else else
G.SETTINGS.language = lang.key G.SETTINGS.language = lang.loc_key or lang.key
G.SETTINGS.real_language = lang.key
G:set_language() G:set_language()
G.E_MANAGER:clear_queue() G.E_MANAGER:clear_queue()
G.FUNCS.wipe_on() G.FUNCS.wipe_on()
@ -2136,8 +2134,8 @@ end
end end
G.FUNCS.can_skip_booster = function(e) G.FUNCS.can_skip_booster = function(e)
if G.pack_cards and (G.pack_cards.cards[1]) and if G.pack_cards and (not (G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
(G.STATE == G.STATES.SMODS_BOOSTER_OPENED or G.STATE == G.STATES.PLANET_PACK or G.STATE == G.STATES.STANDARD_PACK or G.STATE == G.STATES.BUFFOON_PACK or (G.hand and (G.hand.cards[1] or (G.hand.config.card_limit <= 0)))) then (G.STATE == G.STATES.SMODS_BOOSTER_OPENED or G.STATE == G.STATES.PLANET_PACK or G.STATE == G.STATES.STANDARD_PACK or G.STATE == G.STATES.BUFFOON_PACK or (G.hand )) then
e.config.colour = G.C.GREY e.config.colour = G.C.GREY
e.config.button = 'skip_booster' e.config.button = 'skip_booster'
else else
@ -2222,29 +2220,29 @@ end
nc = obj:keep_on_use(card) nc = obj:keep_on_use(card)
end end
end end
if not nc and card.area then card.area:remove_card(card) end if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end
if card.ability.consumeable then if booster_obj and booster_obj.select_card then
if G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.PLANET_PACK or G.STATE == G.STATES.SPECTRAL_PACK or G.STATE == G.STATES.SMODS_BOOSTER_OPENED then local area = type(booster_obj.select_card) == 'table' and (booster_obj.select_card[e.config.ref_table.ability.set] or nil) or booster_obj.select_card
G[area]:emplace(card)
play_sound('card1', 0.8, 0.6)
play_sound('generic1')
dont_dissolve = true
delay_fac = 0.2
elseif card.ability.consumeable then
if nc then
if area then area:remove_from_highlighted(card) end
play_sound('cardSlide2', nil, 0.3)
dont_dissolve = true
end
if (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.PLANET_PACK or G.STATE == G.STATES.SPECTRAL_PACK or G.STATE == G.STATES.SMODS_BOOSTER_OPENED) then
card.T.x = G.hand.T.x + G.hand.T.w/2 - card.T.w/2 card.T.x = G.hand.T.x + G.hand.T.w/2 - card.T.w/2
card.T.y = G.hand.T.y + G.hand.T.h/2 - card.T.h/2 - 0.5 card.T.y = G.hand.T.y + G.hand.T.h/2 - card.T.h/2 - 0.5
discover_card(card.config.center) discover_card(card.config.center)
elseif nc then elseif not nc then draw_card(G.hand, G.play, 1, 'up', true, card, nil, mute) end
area:remove_from_highlighted(card)
play_sound('cardSlide2', nil, 0.3)
dont_dissolve = true
else draw_card(G.hand, G.play, 1, 'up', true, card, nil, mute) end
delay(0.2) delay(0.2)
e.config.ref_table:use_consumeable(area) e.config.ref_table:use_consumeable(area)
if card.edition and card.edition.key then SMODS.calculate_context({using_consumeable = true, consumeable = card, area = card.from_area})
local ed = SMODS.Centers[card.edition.key]
if ed.calculate and type(ed.calculate) == 'function' then
ed:calculate(card, {from_consumable = true})
end
end
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({using_consumeable = true, consumeable = card})
end
elseif card.ability.set == 'Enhanced' or card.ability.set == 'Default' then elseif card.ability.set == 'Enhanced' or card.ability.set == 'Default' then
G.playing_card = (G.playing_card and G.playing_card + 1) or 1 G.playing_card = (G.playing_card and G.playing_card + 1) or 1
G.deck:emplace(card) G.deck:emplace(card)
@ -2295,6 +2293,8 @@ end
prev_state == G.STATES.SPECTRAL_PACK or prev_state == G.STATES.STANDARD_PACK or prev_state == G.STATES.SPECTRAL_PACK or prev_state == G.STATES.STANDARD_PACK or
prev_state == G.STATES.SMODS_BOOSTER_OPENED or prev_state == G.STATES.SMODS_BOOSTER_OPENED or
prev_state == G.STATES.BUFFOON_PACK) and G.booster_pack then prev_state == G.STATES.BUFFOON_PACK) and G.booster_pack then
if nc and area == G.pack_cards then G.pack_cards:remove_card(card); G.consumeables:emplace(card) end
booster_obj = nil
if area == G.consumeables or area == G.hand then if area == G.consumeables or area == G.hand then
G.booster_pack.alignment.offset.y = G.booster_pack.alignment.offset.py G.booster_pack.alignment.offset.y = G.booster_pack.alignment.offset.py
G.booster_pack.alignment.offset.py = nil G.booster_pack.alignment.offset.py = nil
@ -2346,11 +2346,7 @@ end
G.FUNCS.sell_card = function(e) G.FUNCS.sell_card = function(e)
local card = e.config.ref_table local card = e.config.ref_table
card:sell_card() card:sell_card()
for i = 1, #G.jokers.cards do SMODS.calculate_context({selling_card = true, card = card})
if G.jokers.cards[i] ~= card then
G.jokers.cards[i]:calculate_joker({selling_card = true, card = card})
end
end
end end
G.FUNCS.can_confirm_contest_name = function(e) G.FUNCS.can_confirm_contest_name = function(e)
@ -2442,6 +2438,7 @@ G.FUNCS.buy_from_shop = function(e)
trigger = 'after', trigger = 'after',
delay = 0.1, delay = 0.1,
func = function() func = function()
c1.from_area = c1.area
c1.area:remove_card(c1) c1.area:remove_card(c1)
c1:add_to_deck() c1:add_to_deck()
if c1.children.price then c1.children.price:remove() end if c1.children.price then c1.children.price:remove() end
@ -2462,7 +2459,11 @@ G.FUNCS.buy_from_shop = function(e)
else else
G.jokers:emplace(c1) G.jokers:emplace(c1)
end end
G.E_MANAGER:add_event(Event({func = function() c1:calculate_joker({buying_card = true, card = c1}) return true end})) G.E_MANAGER:add_event(Event({func = function()
local eval, post = eval_card(c1, {buying_card = true, card = c1})
SMODS.trigger_effects({eval, post}, c1)
return true
end}))
end end
--Tallies for unlocks --Tallies for unlocks
G.GAME.round_scores.cards_purchased.amt = G.GAME.round_scores.cards_purchased.amt + 1 G.GAME.round_scores.cards_purchased.amt = G.GAME.round_scores.cards_purchased.amt + 1
@ -2476,9 +2477,7 @@ G.FUNCS.buy_from_shop = function(e)
G.GAME.current_round.jokers_purchased = G.GAME.current_round.jokers_purchased + 1 G.GAME.current_round.jokers_purchased = G.GAME.current_round.jokers_purchased + 1
end end
for i = 1, #G.jokers.cards do SMODS.calculate_context({buying_card = true, card = c1})
G.jokers.cards[i]:calculate_joker({buying_card = true, card = c1})
end
if G.GAME.modifiers.inflation then if G.GAME.modifiers.inflation then
G.GAME.inflation = G.GAME.inflation + 1 G.GAME.inflation = G.GAME.inflation + 1
@ -2510,9 +2509,7 @@ end
stop_use() stop_use()
G.CONTROLLER.locks.toggle_shop = true G.CONTROLLER.locks.toggle_shop = true
if G.shop then if G.shop then
for i = 1, #G.jokers.cards do SMODS.calculate_context({ending_shop = true})
G.jokers.cards[i]:calculate_joker({ending_shop = true})
end
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
trigger = 'immediate', trigger = 'immediate',
func = function() func = function()
@ -2585,9 +2582,8 @@ end
end end
G.FUNCS.skip_booster = function(e) G.FUNCS.skip_booster = function(e)
for i = 1, #G.jokers.cards do booster_obj = nil
G.jokers.cards[i]:calculate_joker({skipping_booster = true}) SMODS.calculate_context({skipping_booster = true})
end
G.FUNCS.end_consumeable(e) G.FUNCS.end_consumeable(e)
end end
@ -2795,9 +2791,7 @@ end
trigger = 'immediate', trigger = 'immediate',
func = function() func = function()
delay(0.3) delay(0.3)
for i = 1, #G.jokers.cards do SMODS.calculate_context({skip_blind = true})
G.jokers.cards[i]:calculate_joker({skip_blind = true})
end
save_run() save_run()
for i = 1, #G.GAME.tags do for i = 1, #G.GAME.tags do
G.GAME.tags[i]:apply_to_run({type = 'immediate'}) G.GAME.tags[i]:apply_to_run({type = 'immediate'})
@ -2828,6 +2822,16 @@ end
end end
G.FUNCS.reroll_boss = function(e) G.FUNCS.reroll_boss = function(e)
if not G.blind_select_opts then
G.GAME.round_resets.boss_rerolled = true
if not G.from_boss_tag then ease_dollars(-cry_cheapest_boss_reroll()) end
G.from_boss_tag = nil
G.GAME.round_resets.blind_choices.Boss = get_new_boss()
for i = 1, #G.GAME.tags do
if G.GAME.tags[i]:apply_to_run({type = 'new_blind_choice'}) then break end
end
return true
end
stop_use() stop_use()
G.GAME.round_resets.boss_rerolled = true G.GAME.round_resets.boss_rerolled = true
if not G.from_boss_tag then ease_dollars(-cry_cheapest_boss_reroll()) end if not G.from_boss_tag then ease_dollars(-cry_cheapest_boss_reroll()) end
@ -2927,9 +2931,7 @@ end
G.CONTROLLER.interrupt.focus = false G.CONTROLLER.interrupt.focus = false
G.CONTROLLER.locks.shop_reroll = false G.CONTROLLER.locks.shop_reroll = false
G.CONTROLLER:recall_cardarea_focus('shop_jokers') G.CONTROLLER:recall_cardarea_focus('shop_jokers')
for i = 1, #G.jokers.cards do SMODS.calculate_context({reroll_shop = true})
G.jokers.cards[i]:calculate_joker({reroll_shop = true})
end
return true return true
end end
})) }))

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '438a59ab63623d723f338cbbdf5d809c59e9a912c1f610047af5dade5f53ac5f' LOVELY_INTEGRITY = '2c8ce4c0bac30f3323a4c474be97cee2bdcdd76ecf06cecea0a240c944640f67'
function set_screen_positions() function set_screen_positions()
if G.STAGE == G.STAGES.RUN then if G.STAGE == G.STAGES.RUN then
@ -597,37 +597,55 @@ function update_hand_text(config, vals)
end end
function eval_card(card, context) function eval_card(card, context)
local enhancement_calculated = false if card.ability.set ~= 'Joker' and card.debuff then return {}, {} end
local center = card.config.center
context = context or {} context = context or {}
local ret = {} local ret = {}
if context.repetition_only then if context.repetition_only then
if card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then if card.ability.set == 'Enhanced' then
center:calculate(card, context, ret) local enhancement = card:calculate_enhancement(context)
enhancement_calculated = true if enhancement then
ret.enhancement = enhancement
end end
end
if card.edition then
local edition = card:calculate_edition(context)
if edition then
ret.edition = edition
end
end
if card.seal then
local seals = card:calculate_seal(context) local seals = card:calculate_seal(context)
if seals then if seals then
ret.seals = seals ret.seals = seals
end end
end
for k,v in pairs(SMODS.Stickers) do
local sticker = card:calculate_sticker(context, k)
if sticker then
ret[v] = sticker
end
end
-- TARGET: evaluate your own repetition effects
return ret return ret
end end
if context.cardarea == G.play then if context.cardarea == G.play and context.main_scoring then
ret.playing_card = {}
local chips = card:get_chip_bonus() local chips = card:get_chip_bonus()
if chips > 0 then if chips ~= 0 then
ret.chips = chips ret.playing_card.chips = chips
end end
local mult = card:get_chip_mult() local mult = card:get_chip_mult()
if mult > 0 then if mult ~= 0 then
ret.mult = mult ret.playing_card.mult = mult
end end
local x_mult = card:get_chip_x_mult(context) local x_mult = card:get_chip_x_mult(context)
if x_mult > 0 then if x_mult > 0 then
ret.x_mult = x_mult ret.playing_card.x_mult = x_mult
end end
local x_chips = card:get_chip_x_bonus() local x_chips = card:get_chip_x_bonus()
@ -676,76 +694,95 @@ function eval_card(card, context)
end end
local p_dollars = card:get_p_dollars() local p_dollars = card:get_p_dollars()
if p_dollars > 0 then if p_dollars > 0 then
ret.p_dollars = p_dollars ret.playing_card.p_dollars = p_dollars
end end
if card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then -- TARGET: main scoring on played cards
center:calculate(card, context, ret)
enhancement_calculated = true
end
local jokers = card:calculate_joker(context) local jokers = card:calculate_joker(context)
if jokers then if jokers then
ret.jokers = jokers ret.jokers = jokers
end end
local edition = card:get_edition(context) local edition = card:calculate_edition(context)
if edition then if edition then
ret.edition = edition ret.edition = edition
end end
end end
if context.end_of_round and context.cardarea == G.hand and context.playing_card_end_of_round then
local end_of_round = card:get_end_of_round_effect(context)
if end_of_round then
ret.end_of_round = end_of_round
end
end
if context.cardarea == G.hand then if context.cardarea == G.hand and context.main_scoring then
ret.playing_card = {}
local h_mult = card:get_chip_h_mult() local h_mult = card:get_chip_h_mult()
if h_mult > 0 then if h_mult ~= 0 then
ret.h_mult = h_mult ret.playing_card.h_mult = h_mult
end end
local h_x_mult = card:get_chip_h_x_mult() local h_x_mult = card:get_chip_h_x_mult()
if h_x_mult > 0 then if h_x_mult > 0 then
ret.x_mult = h_x_mult ret.playing_card.x_mult = h_x_mult
end end
if card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then -- TARGET: main scoring on held cards
center:calculate(card, context, ret)
enhancement_calculated = true
end
local jokers = card:calculate_joker(context) local jokers = card:calculate_joker(context)
if jokers then if jokers then
ret.jokers = jokers ret.jokers = jokers
end end
end end
if card.edition and card.edition.key then if card.ability.set == 'Enhanced' then
local ed = SMODS.Centers[card.edition.key] local enhancement = card:calculate_enhancement(context)
if ed.calculate and type(ed.calculate) == 'function' then if enhancement then
context.from_playing_card = true ret.enhancement = enhancement
ed:calculate(card, context)
context.from_playing_card = nil
end end
end end
if not enhancement_calculated and card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then if card.edition then
center:calculate(card, context, ret) local edition = card:calculate_edition(context)
enhancement_calculated = true if edition then
ret.edition = edition
end end
end
if card.seal and not card.ability.extra_enhancement then
local seals = card:calculate_seal(context) local seals = card:calculate_seal(context)
if seals then if seals then
ret.seals = seals ret.seals = seals
end end
if context.cardarea == G.jokers or context.card == G.consumeables then
local jokers = nil
if context.edition then
jokers = card:get_edition(context)
elseif context.other_joker then
jokers = context.other_joker:calculate_joker(context)
else
jokers = card:calculate_joker(context)
end end
if jokers then for k,v in pairs(SMODS.Stickers) do
ret.jokers = jokers local sticker = card:calculate_sticker(context, k)
if sticker then
ret[v] = sticker
end end
end end
return ret -- TARGET: evaluate your own general effects
local post_trig = {}
local areas = SMODS.get_card_areas('jokers')
local area_set = {}
for _,v in ipairs(areas) do area_set[v] = true end
if card.area and area_set[card.area] then
local jokers, triggered = card:calculate_joker(context)
if jokers or triggered then
ret.jokers = jokers
if not (context.retrigger_joker_check or context.retrigger_joker) 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
SMODS.calculate_context({blueprint_card = context.blueprint_card, post_trigger = true, other_card = card, other_context = context, other_ret = ret}, post_trig)
end
end
end
return ret, post_trig
end end
function set_alerts() function set_alerts()
@ -753,7 +790,7 @@ function set_alerts()
G.REFRESH_ALERTS = nil G.REFRESH_ALERTS = nil
local alert_joker, alert_voucher, alert_tarot, alert_planet, alert_spectral, alert_blind, alert_edition, alert_tag, alert_seal, alert_booster = false,false,false,false,false,false,false,false,false,false local alert_joker, alert_voucher, alert_tarot, alert_planet, alert_spectral, alert_blind, alert_edition, alert_tag, alert_seal, alert_booster = false,false,false,false,false,false,false,false,false,false
for k, v in pairs(G.P_CENTERS) do for k, v in pairs(G.P_CENTERS) do
if v.discovered and not v.alerted then if v.discovered and not v.alerted and not v.no_collection then
if v.set == 'Voucher' then alert_voucher = true end if v.set == 'Voucher' then alert_voucher = true end
if v.set == 'Tarot' then alert_tarot = true end if v.set == 'Tarot' then alert_tarot = true end
if v.set == 'Planet' then alert_planet = true end if v.set == 'Planet' then alert_planet = true end
@ -764,17 +801,17 @@ function set_alerts()
end end
end end
for k, v in pairs(G.P_BLINDS) do for k, v in pairs(G.P_BLINDS) do
if v.discovered and not v.alerted then if v.discovered and not v.alerted and not v.no_collection then
alert_blind = true alert_blind = true
end end
end end
for k, v in pairs(G.P_TAGS) do for k, v in pairs(G.P_TAGS) do
if v.discovered and not v.alerted then if v.discovered and not v.alerted and not v.no_collection then
alert_tag = true alert_tag = true
end end
end end
for k, v in pairs(G.P_SEALS) do for k, v in pairs(G.P_SEALS) do
if v.discovered and not v.alerted then if v.discovered and not v.alerted and not v.no_collection then
alert_seal = true alert_seal = true
end end
end end
@ -885,7 +922,14 @@ function card_eval_status_text(card, eval_type, amt, percent, dir, extra)
local y_off = 0.15*G.CARD_H local y_off = 0.15*G.CARD_H
if card.area == G.jokers or card.area == G.consumeables then if card.area == G.jokers or card.area == G.consumeables then
y_off = 0.05*card.T.h y_off = 0.05*card.T.h
elseif card.area == G.hand then elseif card == G.deck then
y_off = -0.05*G.CARD_H
card_aligned = 'tm'
elseif card.area == G.discard or card.area == G.vouchers then
y_off = card.area == G.discard and -0.35*G.CARD_H or -0.65*G.CARD_H
card = G.deck.cards[1] or G.deck
card_aligned = 'tm'
elseif card.area == G.hand or card.area == G.deck then
y_off = -0.05*G.CARD_H y_off = -0.05*G.CARD_H
card_aligned = 'tm' card_aligned = 'tm'
elseif card.area == G.play then elseif card.area == G.play then
@ -910,27 +954,35 @@ function card_eval_status_text(card, eval_type, amt, percent, dir, extra)
sound = 'chips1' sound = 'chips1'
amt = amt amt = amt
colour = G.C.CHIPS colour = G.C.CHIPS
text = localize{type='variable',key='a_chips',vars={amt}} text = localize{type='variable',key='a_chips'..(amt<0 and '_minus' or ''),vars={math.abs(amt)}}
delay = 0.6 delay = 0.6
elseif eval_type == 'mult' then elseif eval_type == 'mult' then
sound = 'multhit1'--'other1' sound = 'multhit1'--'other1'
amt = amt amt = amt
text = localize{type='variable',key='a_mult',vars={amt}} text = localize{type='variable',key='a_mult'..(amt<0 and '_minus' or ''),vars={math.abs(amt)}}
colour = G.C.MULT colour = G.C.MULT
config.type = 'fade' config.type = 'fade'
config.scale = 0.7 config.scale = 0.7
elseif eval_type == 'x_chips' then
sound = 'xchips'
volume = 0.7
amt = amt
text = localize{type='variable',key='a_xchips'..(amt<0 and '_minus' or ''),vars={math.abs(amt)}}
colour = G.C.BLUE
config.type = 'fade'
config.scale = 0.7
elseif (eval_type == 'x_mult') or (eval_type == 'h_x_mult') then elseif (eval_type == 'x_mult') or (eval_type == 'h_x_mult') then
sound = 'multhit2' sound = 'multhit2'
volume = 0.7 volume = 0.7
amt = amt amt = amt
text = localize{type='variable',key='a_xmult',vars={amt}} text = localize{type='variable',key='a_xmult'..(amt<0 and '_minus' or ''),vars={math.abs(amt)}}
colour = G.C.XMULT colour = G.C.XMULT
config.type = 'fade' config.type = 'fade'
config.scale = 0.7 config.scale = 0.7
elseif eval_type == 'h_mult' then elseif eval_type == 'h_mult' then
sound = 'multhit1' sound = 'multhit1'
amt = amt amt = amt
text = localize{type='variable',key='a_mult',vars={amt}} text = localize{type='variable',key='a_mult'..(amt<0 and '_minus' or ''),vars={math.abs(amt)}}
colour = G.C.MULT colour = G.C.MULT
config.type = 'fade' config.type = 'fade'
config.scale = 0.7 config.scale = 0.7
@ -1013,6 +1065,9 @@ function card_eval_status_text(card, eval_type, amt, percent, dir, extra)
colour = G.C.DARK_EDITION colour = G.C.DARK_EDITION
end end
volume = extra.edition and 0.3 or sound == 'multhit2' and 0.7 or 1 volume = extra.edition and 0.3 or sound == 'multhit2' and 0.7 or 1
sound = extra.sound or sound
percent = extra.pitch or percent
volume = extra.volume or volume
delay = extra.delay or 0.75 delay = extra.delay or 0.75
amt = 1 amt = 1
text = extra.message or text text = extra.message or text
@ -1020,7 +1075,7 @@ function card_eval_status_text(card, eval_type, amt, percent, dir, extra)
if not extra.edition and (extra.mult_mod or extra.Xmult_mod) then if not extra.edition and (extra.mult_mod or extra.Xmult_mod) then
colour = G.C.MULT colour = G.C.MULT
end end
if extra.chip_mod then if extra.chip_mod or extra.Xchip_mod then
config.type = 'fall' config.type = 'fall'
colour = G.C.CHIPS colour = G.C.CHIPS
config.scale = 0.7 config.scale = 0.7
@ -1187,15 +1242,13 @@ function add_round_eval_row(config)
})) }))
local dollar_row = 0 local dollar_row = 0
if num_dollars > 60 or num_dollars < -60 then if num_dollars > 60 or num_dollars < -60 then
local dollar_string
if num_dollars < 0 then --if negative if num_dollars < 0 then --if negative
dollar_string = '-'..localize('$')..(num_dollars*-1)
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
trigger = 'before',delay = 0.38, trigger = 'before',delay = 0.38,
func = function() func = function()
G.round_eval:add_child( G.round_eval:add_child(
{n=G.UIT.R, config={align = "cm", id = 'dollar_row_'..(dollar_row+1)..'_'..config.name}, nodes={ {n=G.UIT.R, config={align = "cm", id = 'dollar_row_'..(dollar_row+1)..'_'..config.name}, nodes={
{n=G.UIT.O, config={object = DynaText({string = {localize('$')..(num_dollars*-1)}, colours = {G.C.MONEY}, shadow = true, pop_in = 0, scale = 0.65, float = true})}} {n=G.UIT.O, config={object = DynaText({string = {'-'..localize('$')..format_ui_value(-num_dollars)}, colours = {G.C.MONEY}, shadow = true, pop_in = 0, scale = 0.65, float = true})}}
}}, }},
G.round_eval:get_UIE_by_ID('dollar_'..config.name)) G.round_eval:get_UIE_by_ID('dollar_'..config.name))
play_sound('coin3', 0.9+0.2*math.random(), 0.7) play_sound('coin3', 0.9+0.2*math.random(), 0.7)
@ -1204,7 +1257,6 @@ function add_round_eval_row(config)
end end
})) }))
else --if positive else --if positive
dollar_string = localize('$')..num_dollars
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
trigger = 'before',delay = 0.38, trigger = 'before',delay = 0.38,
func = function() func = function()
@ -1222,7 +1274,7 @@ function add_round_eval_row(config)
--asdf --asdf
end else end else
local dollars_to_loop local dollars_to_loop
if num_dollars < 0 then dollars_to_loop = num_dollars*-1 else dollars_to_loop = num_dollars end if num_dollars < 0 then dollars_to_loop = (num_dollars*-1)+1 else dollars_to_loop = num_dollars end
for i = 1, dollars_to_loop do for i = 1, dollars_to_loop do
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
trigger = 'before',delay = 0.18 - ((num_dollars > 20 and 0.13) or (num_dollars > 9 and 0.1) or 0), trigger = 'before',delay = 0.18 - ((num_dollars > 20 and 0.13) or (num_dollars > 9 and 0.1) or 0),
@ -1264,7 +1316,7 @@ function add_round_eval_row(config)
definition = {n=G.UIT.ROOT, config={align = 'cm', colour = G.C.CLEAR}, nodes={ definition = {n=G.UIT.ROOT, config={align = 'cm', colour = G.C.CLEAR}, nodes={
{n=G.UIT.R, config={id = 'cash_out_button', align = "cm", padding = 0.1, minw = 7, r = 0.15, colour = G.GAME.current_round.semicolon and G.C.SET.Code or G.C.ORANGE, shadow = true, hover = true, one_press = true, button = 'cash_out', focus_args = {snap_to = true}}, nodes={ {n=G.UIT.R, config={id = 'cash_out_button', align = "cm", padding = 0.1, minw = 7, r = 0.15, colour = G.GAME.current_round.semicolon and G.C.SET.Code or G.C.ORANGE, shadow = true, hover = true, one_press = true, button = 'cash_out', focus_args = {snap_to = true}}, nodes={
{n=G.UIT.T, config={text = G.GAME.current_round.semicolon and localize('k_end_blind') or (localize('b_cash_out')..": "), scale = 1, colour = G.C.UI.TEXT_LIGHT, shadow = true}}, {n=G.UIT.T, config={text = G.GAME.current_round.semicolon and localize('k_end_blind') or (localize('b_cash_out')..": "), scale = 1, colour = G.C.UI.TEXT_LIGHT, shadow = true}},
{n=G.UIT.T, config={text = not G.GAME.current_round.semicolon and localize('$')..format_ui_value(config.dollars) or ';', scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}} {n=G.UIT.T, config={text = localize('$')..format_ui_value(config.dollars), scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}
}},}}, }},}},
config = { config = {
align = 'tmi', align = 'tmi',
@ -1549,12 +1601,12 @@ function check_for_unlock(args)
if args.type == 'play_all_hearts' then if args.type == 'play_all_hearts' then
local played = true local played = true
for k, v in ipairs(G.deck.cards) do for k, v in ipairs(G.deck.cards) do
if (v.ability.name ~= 'Stone Card' and not v.config.center.no_suit) and v.base.suit == 'Hearts' then if not SMODS.has_no_suit(v) and v.base.suit == 'Hearts' then
played = false played = false
end end
end end
for k, v in ipairs(G.hand.cards) do for k, v in ipairs(G.hand.cards) do
if (v.ability.name ~= 'Stone Card' and not v.config.center.no_suit) and v.base.suit == 'Hearts' then if not SMODS.has_no_suit(v) and v.base.suit == 'Hearts' then
played = false played = false
end end
end end
@ -1751,7 +1803,7 @@ function check_for_unlock(args)
if card.name == 'Golden Ticket' then if card.name == 'Golden Ticket' then
local tally = 0 local tally = 0
for j = 1, #args.cards do for j = 1, #args.cards do
if args.cards[j].ability.name == 'Gold Card' then if SMODS.has_enhancement(args.cards[j], 'm_gold') then
tally = tally+1 tally = tally+1
end end
end end
@ -1834,7 +1886,7 @@ end
function unlock_card(card) function unlock_card(card)
if card.unlocked == false then if card.unlocked == false then
if not SMODS.seeded_unlocks and (G.GAME.seeded or G.GAME.challenge) then return end if not SMODS.config.seeded_unlocks and (G.GAME.seeded or G.GAME.challenge) then return end
if card.unlocked or card.wip then return end if card.unlocked or card.wip then return end
G:save_notify(card) G:save_notify(card)
card.unlocked = true card.unlocked = true
@ -1889,7 +1941,8 @@ function fetch_achievements()
G.ACHIEVEMENTS[kk].earned = true G.ACHIEVEMENTS[kk].earned = true
end end
end end
end if G.F_NO_ACHIEVEMENTS then return end end
if G.F_NO_ACHIEVEMENTS then return end
--|FROM LOCAL SETTINGS FILE --|FROM LOCAL SETTINGS FILE
--|------------------------------------------------------- --|-------------------------------------------------------
@ -1924,15 +1977,32 @@ function fetch_achievements()
end end
function unlock_achievement(achievement_name) function unlock_achievement(achievement_name)
if G.PROFILES[G.SETTINGS.profile].all_unlocked and (G.ACHIEVEMENTS and G.ACHIEVEMENTS[achievement_name] and not G.ACHIEVEMENTS[achievement_name].bypass_all_unlocked and SMODS.config.achievements < 3) or (SMODS.config.achievements < 3 and (G.GAME.seeded or G.GAME.challenge)) then return end if G.PROFILES[G.SETTINGS.profile].all_unlocked and (G.ACHIEVEMENTS and G.ACHIEVEMENTS[achievement_name] and not G.ACHIEVEMENTS[achievement_name].bypass_all_unlocked and SMODS.config.achievements < 3) or (SMODS.config.achievements < 3 and (G.GAME.seeded or G.GAME.challenge)) then return true end
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
no_delete = true, no_delete = true,
blockable = false, blockable = false,
blocking = false, blocking = false,
func = function() func = function()
if G.STATE ~= G.STATES.HAND_PLAYED then if G.STATE ~= G.STATES.HAND_PLAYED then
if G.PROFILES[G.SETTINGS.profile].all_unlocked and (G.ACHIEVEMENTS and G.ACHIEVEMENTS[achievement_name] and not G.ACHIEVEMENTS[achievement_name].bypass_all_unlocked and SMODS.config.achievements < 3) or (SMODS.config.achievements < 3 and (G.GAME.seeded or G.GAME.challenge)) then return end if G.PROFILES[G.SETTINGS.profile].all_unlocked and (G.ACHIEVEMENTS and G.ACHIEVEMENTS[achievement_name] and not G.ACHIEVEMENTS[achievement_name].bypass_all_unlocked and SMODS.config.achievements < 3) or (SMODS.config.achievements < 3 and (G.GAME.seeded or G.GAME.challenge)) then return true end
local achievement_set = false local achievement_set = false
if not G.ACHIEVEMENTS then fetch_achievements() end
G.SETTINGS.ACHIEVEMENTS_EARNED[achievement_name] = true
G:save_progress()
if G.ACHIEVEMENTS[achievement_name] and G.ACHIEVEMENTS[achievement_name].mod then
if not G.ACHIEVEMENTS[achievement_name].earned then
--|THIS IS THE FIRST TIME THIS ACHIEVEMENT HAS BEEN EARNED
achievement_set = true
G.FILE_HANDLER.force = true
end
G.ACHIEVEMENTS[achievement_name].earned = true
end
if achievement_set then
notify_alert(achievement_name)
return true
end
if G.F_NO_ACHIEVEMENTS and not (G.ACHIEVEMENTS[achievement_name] or {}).mod then return true end if G.F_NO_ACHIEVEMENTS and not (G.ACHIEVEMENTS[achievement_name] or {}).mod then return true end
--|LOCAL SETTINGS FILE --|LOCAL SETTINGS FILE
@ -2092,7 +2162,7 @@ function create_unlock_overlay(key)
end end
function discover_card(card) function discover_card(card)
if not SMODS.seeded_unlocks and (G.GAME.seeded or G.GAME.challenge) then return end if not SMODS.config.seeded_unlocks and (G.GAME.seeded or G.GAME.challenge) then return end
card = card or {} card = card or {}
if card.discovered or card.wip then return end if card.discovered or card.wip then return end
if card and not card.discovered then if card and not card.discovered then
@ -2186,6 +2256,7 @@ function get_current_pool(_type, _rarity, _legendary, _append)
if _type == 'Joker' then if _type == 'Joker' then
_rarity = (_legendary and 4) or (type(_rarity) == "number" and ((_rarity > 0.95 and 3) or (_rarity > 0.7 and 2) or 1)) or _rarity _rarity = (_legendary and 4) or (type(_rarity) == "number" and ((_rarity > 0.95 and 3) or (_rarity > 0.7 and 2) or 1)) or _rarity
_rarity = ({Common = 1, Uncommon = 2, Rare = 3, Legendary = 4})[_rarity] or _rarity
local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_resets.ante..(_append or '')) local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_resets.ante..(_append or ''))
_starting_pool, _pool_key = G.P_JOKER_RARITY_POOLS[rarity], 'Joker'..rarity..((not _legendary and _append) or '') _starting_pool, _pool_key = G.P_JOKER_RARITY_POOLS[rarity], 'Joker'..rarity..((not _legendary and _append) or '')
@ -2271,7 +2342,7 @@ local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_rese
elseif v.enhancement_gate then elseif v.enhancement_gate then
add = nil add = nil
for kk, vv in pairs(G.playing_cards) do for kk, vv in pairs(G.playing_cards) do
if vv.config.center.key == v.enhancement_gate then if SMODS.has_enhancement(vv, v.enhancement_gate) then
add = true add = true
end end
end end
@ -2436,10 +2507,10 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable
card:set_edition(edition) card:set_edition(edition)
check_for_unlock({type = 'have_edition'}) check_for_unlock({type = 'have_edition'})
end end
end
for i = 1, #G.jokers.cards do for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({cry_creating_card = true, card = card}) G.jokers.cards[i]:calculate_joker({cry_creating_card = true, card = card})
end end
end
return card return card
end end
@ -2463,6 +2534,15 @@ function copy_card(other, new_card, card_scale, playing_card, strip_edition)
end end
check_for_unlock({type = 'have_edition'}) check_for_unlock({type = 'have_edition'})
new_card:set_seal(other.seal, true) new_card:set_seal(other.seal, true)
if other.seal then
for k, v in pairs(other.ability.seal or {}) do
if type(v) == 'table' then
new_card.ability.seal[k] = copy_table(v)
else
new_card.ability.seal[k] = v
end
end
end
if other.params then if other.params then
new_card.params = other.params new_card.params = other.params
new_card.params.playing_card = playing_card new_card.params.playing_card = playing_card
@ -2566,7 +2646,7 @@ function reset_idol_card()
local valid_idol_cards = {} local valid_idol_cards = {}
for k, v in ipairs(G.playing_cards) do for k, v in ipairs(G.playing_cards) do
if v.ability.effect ~= 'Stone Card' then if v.ability.effect ~= 'Stone Card' then
if (not v.config.center.no_suit) and (not v.config.center.no_rank) then if not SMODS.has_no_suit(v) and not SMODS.has_no_rank(v) then
valid_idol_cards[#valid_idol_cards+1] = v valid_idol_cards[#valid_idol_cards+1] = v
end end
end end
@ -2584,7 +2664,7 @@ function reset_mail_rank()
local valid_mail_cards = {} local valid_mail_cards = {}
for k, v in ipairs(G.playing_cards) do for k, v in ipairs(G.playing_cards) do
if v.ability.effect ~= 'Stone Card' then if v.ability.effect ~= 'Stone Card' then
if not v.config.center.no_rank then if not SMODS.has_no_rank(v) then
valid_mail_cards[#valid_mail_cards+1] = v valid_mail_cards[#valid_mail_cards+1] = v
end end
end end
@ -2610,7 +2690,7 @@ function reset_castle_card()
local valid_castle_cards = {} local valid_castle_cards = {}
for k, v in ipairs(G.playing_cards) do for k, v in ipairs(G.playing_cards) do
if v.ability.effect ~= 'Stone Card' then if v.ability.effect ~= 'Stone Card' then
if not v.config.center.no_suit then if not SMODS.has_no_suit(v) then
valid_castle_cards[#valid_castle_cards+1] = v valid_castle_cards[#valid_castle_cards+1] = v
end end
end end
@ -2712,12 +2792,11 @@ function get_type_colour(_c, card)
end end
function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end, card) function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end, card)
if _c.specific_vars then specific_vars = _c.specific_vars end
if card == nil and card_type then if card == nil and card_type then
card = SMODS.compat_0_9_8.generate_UIBox_ability_table_card card = SMODS.compat_0_9_8.generate_UIBox_ability_table_card
end end
if _c.specific_vars then specific_vars = _c.specific_vars end if _c.specific_vars then specific_vars = _c.specific_vars end
local first_pass = nil local first_pass = nil
if not full_UI_table then if not full_UI_table then
first_pass = true first_pass = true
@ -2768,6 +2847,15 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
desc_nodes[#desc_nodes+1] = main_start desc_nodes[#desc_nodes+1] = main_start
end end
local cfg = (card and card.ability) or _c['config']
if cfg and G.GAME.modifiers.cry_consumable_reduce and cfg.max_highlighted and (cfg.max_highlighted > 1) then
local new_table = {}
for i0, j0 in pairs(cfg) do
new_table[i0] = j0
end
new_table.max_highlighted = new_table.max_highlighted - 1
cfg = new_table
end
if _c.name == 'cry-membershipcard' or _c.name == 'cry-membershipcardtwo' then if _c.name == 'cry-membershipcard' or _c.name == 'cry-membershipcardtwo' then
if not Cryptid.enabled["HTTPS Module"] then if not Cryptid.enabled["HTTPS Module"] then
if G.localization.descriptions.Other.cry_https_disabled then if G.localization.descriptions.Other.cry_https_disabled then
@ -2798,7 +2886,6 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end end
end end
end end
local cfg = (card and card.ability) or _c['config']
if _c.set == 'Other' then if _c.set == 'Other' then
localize{type = 'other', key = _c.key, nodes = desc_nodes, vars = specific_vars or _c.vars} localize{type = 'other', key = _c.key, nodes = desc_nodes, vars = specific_vars or _c.vars}
elseif card_type == 'Locked' then elseif card_type == 'Locked' then
@ -2806,11 +2893,15 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
elseif _c.demo and specific_vars then localize{type = 'other', key = 'demo_shop_locked', nodes = desc_nodes, vars = loc_vars} elseif _c.demo and specific_vars then localize{type = 'other', key = 'demo_shop_locked', nodes = desc_nodes, vars = loc_vars}
elseif _c.demo then localize{type = 'other', key = 'demo_locked', nodes = desc_nodes, vars = loc_vars} elseif _c.demo then localize{type = 'other', key = 'demo_locked', nodes = desc_nodes, vars = loc_vars}
else else
local res = {}
if _c.locked_loc_vars and type(_c.locked_loc_vars) == 'function' then if _c.locked_loc_vars and type(_c.locked_loc_vars) == 'function' then
local res = _c:locked_loc_vars(info_queue) or {} local _card = _c.create_fake_card and _c:create_fake_card()
res = _c:locked_loc_vars(info_queue, _card) or {}
loc_vars = res.vars or {} loc_vars = res.vars or {}
specific_vars = specific_vars or {} specific_vars = specific_vars or {}
specific_vars.not_hidden = res.not_hidden or specific_vars.not_hidden specific_vars.not_hidden = res.not_hidden or specific_vars.not_hidden
if res.main_start then desc_nodes[#desc_nodes+1] = res.main_start end
main_end = res.main_end or main_end
elseif _c.name == 'Golden Ticket' then elseif _c.name == 'Golden Ticket' then
elseif _c.name == 'Mr. Bones' then loc_vars = {_c.unlock_condition.extra, G.PROFILES[G.SETTINGS.profile].career_stats.c_losses} elseif _c.name == 'Mr. Bones' then loc_vars = {_c.unlock_condition.extra, G.PROFILES[G.SETTINGS.profile].career_stats.c_losses}
elseif _c.name == 'Acrobat' then loc_vars = {_c.unlock_condition.extra, G.PROFILES[G.SETTINGS.profile].career_stats.c_hands_played} elseif _c.name == 'Acrobat' then loc_vars = {_c.unlock_condition.extra, G.PROFILES[G.SETTINGS.profile].career_stats.c_hands_played}
@ -2871,10 +2962,10 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end end
if _c.rarity and _c.rarity == 4 and specific_vars and not specific_vars.not_hidden then if _c.rarity and _c.rarity == 4 and specific_vars and not specific_vars.not_hidden then
localize{type = 'unlocks', key = 'joker_locked_legendary', set = 'Other', nodes = desc_nodes, vars = loc_vars} localize{type = 'unlocks', key = res.key or 'joker_locked_legendary', set = res.set or 'Other', nodes = desc_nodes, vars = loc_vars, text_colour = res.text_colour, scale = res.scale}
else else
localize{type = 'unlocks', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'unlocks', key = res.key or _c.key, set = res.set or _c.set, nodes = desc_nodes, vars = loc_vars, text_colour = res.text_colour, scale = res.scale}
end end
end end
elseif hide_desc then elseif hide_desc then
@ -2886,6 +2977,16 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
elseif specific_vars and specific_vars.debuffed then elseif specific_vars and specific_vars.debuffed then
localize{type = 'other', key = 'debuffed_'..(specific_vars.playing_card and 'playing_card' or 'default'), nodes = desc_nodes} localize{type = 'other', key = 'debuffed_'..(specific_vars.playing_card and 'playing_card' or 'default'), nodes = desc_nodes}
elseif _c.set == 'Joker' then elseif _c.set == 'Joker' then
if not card then
local ability = copy_table(cfg)
ability.set = 'Joker'
ability.name = _c.name
local ret = {Card.generate_UIBox_ability_table({ ability = ability, config = { center = _c }, bypass_lock = true}, true)}
specific_vars = ret[1]
if ret[2] then desc_nodes[#desc_nodes+1] = ret[2] end
main_end = ret[3]
end
if _c.name == 'Stone Joker' or _c.name == 'Marble Joker' then info_queue[#info_queue+1] = G.P_CENTERS.m_stone if _c.name == 'Stone Joker' or _c.name == 'Marble Joker' then info_queue[#info_queue+1] = G.P_CENTERS.m_stone
elseif _c.name == 'Steel Joker' then info_queue[#info_queue+1] = G.P_CENTERS.m_steel elseif _c.name == 'Steel Joker' then info_queue[#info_queue+1] = G.P_CENTERS.m_steel
elseif _c.name == 'Glass Joker' then info_queue[#info_queue+1] = G.P_CENTERS.m_glass elseif _c.name == 'Glass Joker' then info_queue[#info_queue+1] = G.P_CENTERS.m_glass
@ -2910,6 +3011,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
if specific_vars and specific_vars.sticker then info_queue[#info_queue+1] = {key = string.lower(specific_vars.sticker)..'_sticker', set = 'Other'} end if specific_vars and specific_vars.sticker then info_queue[#info_queue+1] = {key = string.lower(specific_vars.sticker)..'_sticker', set = 'Other'} end
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = specific_vars or {}} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = specific_vars or {}}
elseif _c.set == 'Tag' then elseif _c.set == 'Tag' then
specific_vars = specific_vars or Tag.get_uibox_table({ name = _c.name, config = _c.config, ability = { orbital_hand = '['..localize('k_poker_hand')..']' }}, nil, true)
if _c.name == 'Negative Tag' then info_queue[#info_queue+1] = G.P_CENTERS.e_negative if _c.name == 'Negative Tag' then info_queue[#info_queue+1] = G.P_CENTERS.e_negative
elseif _c.name == 'Foil Tag' then info_queue[#info_queue+1] = G.P_CENTERS.e_foil elseif _c.name == 'Foil Tag' then info_queue[#info_queue+1] = G.P_CENTERS.e_foil
elseif _c.name == 'Holographic Tag' then info_queue[#info_queue+1] = G.P_CENTERS.e_holo elseif _c.name == 'Holographic Tag' then info_queue[#info_queue+1] = G.P_CENTERS.e_holo
@ -2922,7 +3024,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end end
localize{type = 'descriptions', key = _c.key, set = 'Tag', nodes = desc_nodes, vars = specific_vars or {}} localize{type = 'descriptions', key = _c.key, set = 'Tag', nodes = desc_nodes, vars = specific_vars or {}}
elseif _c.set == 'Voucher' then elseif _c.set == 'Voucher' then
if _c.name == "Overstock" or _c.name == "Overstock Plus" then loc_vars = {cfg.extra} if _c.name == "Overstock" or _c.name == "Overstock Plus" then loc_vars = {_c.config.extra}
elseif _c.name == "Tarot Merchant" or _c.name == "Tarot Tycoon" then loc_vars = {cfg.extra_disp} elseif _c.name == "Tarot Merchant" or _c.name == "Tarot Tycoon" then loc_vars = {cfg.extra_disp}
elseif _c.name == "Planet Merchant" or _c.name == "Planet Tycoon" then loc_vars = {cfg.extra_disp} elseif _c.name == "Planet Merchant" or _c.name == "Planet Tycoon" then loc_vars = {cfg.extra_disp}
elseif _c.name == "Hone" or _c.name == "Glow Up" then loc_vars = {cfg.extra} elseif _c.name == "Hone" or _c.name == "Glow Up" then loc_vars = {cfg.extra}
@ -2930,18 +3032,17 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
elseif _c.name == "Grabber" or _c.name == "Nacho Tong" then loc_vars = {cfg.extra} elseif _c.name == "Grabber" or _c.name == "Nacho Tong" then loc_vars = {cfg.extra}
elseif _c.name == "Wasteful" or _c.name == "Recyclomancy" then loc_vars = {cfg.extra} elseif _c.name == "Wasteful" or _c.name == "Recyclomancy" then loc_vars = {cfg.extra}
elseif _c.name == "Seed Money" or _c.name == "Money Tree" then loc_vars = {cfg.extra/5} elseif _c.name == "Seed Money" or _c.name == "Money Tree" then loc_vars = {cfg.extra/5}
elseif _c.name == "Blank" or _c.name == "Antimatter" then loc_vars = {cfg.extra} elseif _c.name == "Blank" or _c.name == "Antimatter" then loc_vars = {_c.config.extra}
elseif _c.name == "Hieroglyph" or _c.name == "Petroglyph" then loc_vars = {cfg.extra} elseif _c.name == "Hieroglyph" or _c.name == "Petroglyph" then loc_vars = {cfg.extra}
elseif _c.name == "Director's Cut" or _c.name == "Retcon" then loc_vars = {cfg.extra} elseif _c.name == "Director's Cut" or _c.name == "Retcon" then loc_vars = {cfg.extra}
elseif _c.name == "Paint Brush" or _c.name == "Palette" then loc_vars = {cfg.extra} elseif _c.name == "Paint Brush" or _c.name == "Palette" then loc_vars = {cfg.extra}
elseif _c.name == "Telescope" or _c.name == "Observatory" then loc_vars = {cfg.extra} elseif _c.name == "Telescope" or _c.name == "Observatory" then loc_vars = {cfg.extra}
elseif _c.name == "Clearance Sale" or _c.name == "Liquidation" then loc_vars = {cfg.extra} elseif _c.name == "Clearance Sale" or _c.name == "Liquidation" then loc_vars = {cfg.extra}
elseif _c.name == "Crystal Ball" or _c.name == "Omen Globe" then loc_vars = {cfg.extra}
end end
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = _c.vars or loc_vars}
elseif _c.set == 'Edition' then elseif _c.set == 'Edition' then
loc_vars = {cfg.extra} loc_vars = {cfg.extra}
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = _c.vars or loc_vars}
elseif _c.set == 'Default' and specific_vars then elseif _c.set == 'Default' and specific_vars then
if specific_vars.nominal_chips then if specific_vars.nominal_chips then
localize{type = 'other', key = 'card_chips', nodes = desc_nodes, vars = {specific_vars.nominal_chips}} localize{type = 'other', key = 'card_chips', nodes = desc_nodes, vars = {specific_vars.nominal_chips}}
@ -2961,7 +3062,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
elseif _c.effect == 'Gold Card' then loc_vars = {cfg.h_dollars} elseif _c.effect == 'Gold Card' then loc_vars = {cfg.h_dollars}
elseif _c.effect == 'Lucky Card' then loc_vars = {G.GAME.probabilities.normal, cfg.mult, 5, cfg.p_dollars, 15} elseif _c.effect == 'Lucky Card' then loc_vars = {G.GAME.probabilities.normal, cfg.mult, 5, cfg.p_dollars, 15}
end end
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = _c.vars or loc_vars}
if _c.name ~= 'Stone Card' and ((specific_vars and specific_vars.bonus_chips) or (cfg.bonus ~= 0 and cfg.bonus)) then if _c.name ~= 'Stone Card' and ((specific_vars and specific_vars.bonus_chips) or (cfg.bonus ~= 0 and cfg.bonus)) then
localize{type = 'other', key = 'card_extra_chips', nodes = desc_nodes, vars = {((specific_vars and specific_vars.bonus_chips) or cfg.bonus)}} localize{type = 'other', key = 'card_extra_chips', nodes = desc_nodes, vars = {((specific_vars and specific_vars.bonus_chips) or cfg.bonus)}}
end end
@ -2988,16 +3089,16 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
localize{type = 'other', key = desc_override, nodes = desc_nodes, vars = loc_vars} localize{type = 'other', key = desc_override, nodes = desc_nodes, vars = loc_vars}
elseif _c.set == 'Spectral' then elseif _c.set == 'Spectral' then
if _c.name == 'Talisman' or _c.name == 'Medium' or _c.name == 'Trance' or _c.name == 'Deja Vu' then if _c.name == 'Talisman' or _c.name == 'Medium' or _c.name == 'Trance' or _c.name == 'Deja Vu' then
loc_vars = {cfg.max_highlighted} loc_vars = {_c.config.max_highlighted}
end end
if _c.name == 'Familiar' or _c.name == 'Grim' or _c.name == 'Incantation' then loc_vars = {cfg.extra} if _c.name == 'Familiar' or _c.name == 'Grim' or _c.name == 'Incantation' then loc_vars = {cfg.extra}
elseif _c.name == 'Immolate' then loc_vars = {cfg.extra.destroy, cfg.extra.dollars} elseif _c.name == 'Immolate' then loc_vars = {cfg.extra.destroy, cfg.extra.dollars}
elseif _c.name == 'Hex' then info_queue[#info_queue+1] = G.P_CENTERS.e_polychrome elseif _c.name == 'Hex' then info_queue[#info_queue+1] = G.P_CENTERS.e_polychrome
elseif _c.name == 'Talisman' then info_queue[#info_queue+1] = {key = 'gold_seal', set = 'Other'} elseif _c.name == 'Talisman' then info_queue[#info_queue+1] = G.P_SEALS['gold_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['gold_seal'] or '']
elseif _c.name == 'Deja Vu' then info_queue[#info_queue+1] = {key = 'red_seal', set = 'Other'} elseif _c.name == 'Deja Vu' then info_queue[#info_queue+1] = G.P_SEALS['red_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['red_seal'] or '']
elseif _c.name == 'Trance' then info_queue[#info_queue+1] = {key = 'blue_seal', set = 'Other'} elseif _c.name == 'Trance' then info_queue[#info_queue+1] = G.P_SEALS['blue_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['blue_seal'] or '']
elseif _c.name == 'Medium' then info_queue[#info_queue+1] = {key = 'purple_seal', set = 'Other'} elseif _c.name == 'Medium' then info_queue[#info_queue+1] = G.P_SEALS['purple_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['purple_seal'] or '']
elseif _c.name == 'Ankh' then elseif _c.name == 'Ankh' then
if G.jokers and G.jokers.cards then if G.jokers and G.jokers.cards then
for k, v in ipairs(G.jokers.cards) do for k, v in ipairs(G.jokers.cards) do
@ -3010,7 +3111,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end end
end end
end end
elseif _c.name == 'Cryptid' then loc_vars = {cfg.extra, cfg.max_highlighted} elseif _c.name == 'Cryptid' then loc_vars = {cfg.extra}
end end
if _c.name == 'Ectoplasm' then info_queue[#info_queue+1] = G.P_CENTERS.e_negative; loc_vars = {G.GAME.ecto_minus or 1} end if _c.name == 'Ectoplasm' then info_queue[#info_queue+1] = G.P_CENTERS.e_negative; loc_vars = {G.GAME.ecto_minus or 1} end
if _c.name == 'Aura' then if _c.name == 'Aura' then
@ -3018,13 +3119,13 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
info_queue[#info_queue+1] = G.P_CENTERS.e_holo info_queue[#info_queue+1] = G.P_CENTERS.e_holo
info_queue[#info_queue+1] = G.P_CENTERS.e_polychrome info_queue[#info_queue+1] = G.P_CENTERS.e_polychrome
end end
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = _c.vars or loc_vars}
elseif _c.set == 'Planet' then elseif _c.set == 'Planet' then
loc_vars = { loc_vars = {
G.GAME.hands[cfg.hand_type].level,localize(cfg.hand_type, 'poker_hands'), G.GAME.hands[cfg.hand_type].l_mult, G.GAME.hands[cfg.hand_type].l_chips, G.GAME.hands[cfg.hand_type].level,localize(cfg.hand_type, 'poker_hands'), G.GAME.hands[cfg.hand_type].l_mult, G.GAME.hands[cfg.hand_type].l_chips,
colours = {(G.GAME.hands[cfg.hand_type].level==1 and G.C.UI.TEXT_DARK or G.C.HAND_LEVELS[math.min(7, G.GAME.hands[cfg.hand_type].level)])} colours = {(G.GAME.hands[cfg.hand_type].level==1 and G.C.UI.TEXT_DARK or G.C.HAND_LEVELS[math.min(7, G.GAME.hands[cfg.hand_type].level)])}
} }
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = _c.vars or loc_vars}
elseif _c.set == 'Tarot' then elseif _c.set == 'Tarot' then
if _c.name == "The Fool" then if _c.name == "The Fool" then
local fool_c = G.GAME.last_tarot_planet and G.P_CENTERS[G.GAME.last_tarot_planet] or nil local fool_c = G.GAME.last_tarot_planet and G.P_CENTERS[G.GAME.last_tarot_planet] or nil
@ -3072,7 +3173,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
elseif _c.name == "Judgement" then elseif _c.name == "Judgement" then
elseif _c.name == "The World" then loc_vars = {cfg.max_highlighted, localize(cfg.suit_conv, 'suits_plural'), colours = {G.C.SUITS[cfg.suit_conv]}} elseif _c.name == "The World" then loc_vars = {cfg.max_highlighted, localize(cfg.suit_conv, 'suits_plural'), colours = {G.C.SUITS[cfg.suit_conv]}}
end end
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = loc_vars} localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = _c.vars or loc_vars}
end end
if main_end then if main_end then
@ -3114,25 +3215,23 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
info_queue[#info_queue + 1] = G.P_CENTERS[v] info_queue[#info_queue + 1] = G.P_CENTERS[v]
end end
if G.P_CENTERS['e_'..v] and G.P_CENTERS['e_'..v].set == 'Edition' then if G.P_CENTERS['e_'..v] and G.P_CENTERS['e_'..v].set == 'Edition' then
info_queue[#info_queue + 1] = G.P_CENTERS['e_'..v] local t = {key = 'e_'..v, set = 'Edition', config = {}}
end info_queue[#info_queue + 1] = t
if v == 'cry_pinned_booster' then info_queue[#info_queue+1] = {key = 'cry_pinned_booster', set = 'Other'} end if G.P_CENTERS['e_'..v].loc_vars and type(G.P_CENTERS['e_'..v].loc_vars) == 'function' then
if v == 'cry_pinned_voucher' then info_queue[#info_queue+1] = {key = 'cry_pinned_voucher', set = 'Other'} end local res = G.P_CENTERS['e_'..v]:loc_vars(info_queue, card) or {}
if v == 'cry_pinned_consumeable' then info_queue[#info_queue+1] = {key = 'cry_pinned_consumeable', set = 'Other'} end
local seal = SMODS.Seals[v] or SMODS.Seal.badge_to_key[v] and SMODS.Seals[SMODS.Seal.badge_to_key[v]]
if seal and seal.generate_ui ~= 0 then
local t = { key = v, set = 'Other' }
info_queue[#info_queue+1] = t
if seal.loc_vars and type(seal.loc_vars) == 'function' then
local res = seal:loc_vars(info_queue, card) or {}
t.vars = res.vars t.vars = res.vars
t.key = res.key or t.key t.key = res.key or t.key
t.set = res.set or t.set
end end
end
local seal = G.P_SEALS[v] or G.P_SEALS[SMODS.Seal.badge_to_key[v] or '']
if seal then
info_queue[#info_queue+1] = seal
else else
if v == 'gold_seal' then info_queue[#info_queue+1] = {key = 'gold_seal', set = 'Other'} end if v == 'gold_seal' then info_queue[#info_queue+1] = G.P_SEALS['gold_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['gold_seal'] or ''] end
if v == 'blue_seal' then info_queue[#info_queue+1] = {key = 'blue_seal', set = 'Other'} end if v == 'blue_seal' then info_queue[#info_queue+1] = G.P_SEALS['blue_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['blue_seal'] or ''] end
if v == 'red_seal' then info_queue[#info_queue+1] = {key = 'red_seal', set = 'Other'} end if v == 'red_seal' then info_queue[#info_queue+1] = G.P_SEALS['red_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['red_seal'] or ''] end
if v == 'purple_seal' then info_queue[#info_queue+1] = {key = 'purple_seal', set = 'Other'} end if v == 'purple_seal' then info_queue[#info_queue+1] = G.P_SEALS['purple_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['purple_seal'] or ''] end
end end
local sticker = SMODS.Stickers[v] local sticker = SMODS.Stickers[v]
if sticker then if sticker then
@ -3142,6 +3241,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
res = sticker:loc_vars(info_queue, card) or {} res = sticker:loc_vars(info_queue, card) or {}
t.vars = res.vars or {} t.vars = res.vars or {}
t.key = res.key or t.key t.key = res.key or t.key
t.set = res.set or t.set
end end
info_queue[#info_queue+1] = t info_queue[#info_queue+1] = t
else else

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '3b2e5120d569763446e3bfe099ac89fa7ef4750a6936e9b65da90e4121f5aa22' LOVELY_INTEGRITY = '7af2e0e0690a3e982bc378e0f2810cf02634e614841ab27a2036b576c0fdc825'
--Updates all display information for all displays for a given screenmode. Returns the key for the resolution option cycle --Updates all display information for all displays for a given screenmode. Returns the key for the resolution option cycle
-- --
@ -274,8 +274,8 @@ function pseudorandom_element(_t, seed, args)
local initial_deck = args and args.starting_deck or false local initial_deck = args and args.starting_deck or false
return not ( return not (
type(SMODS.Ranks[c.value].in_pool) == 'function' and not SMODS.Ranks[c.value]:in_pool({initial_deck = initial_deck}) type(SMODS.Ranks[c.value].in_pool) == 'function' and not SMODS.Ranks[c.value]:in_pool({initial_deck = initial_deck, suit = c.suit})
or type(SMODS.Suits[c.suit].in_pool) == 'function' and not SMODS.Suits[c.suit]:in_pool({initial_deck = initial_deck}) or type(SMODS.Suits[c.suit].in_pool) == 'function' and not SMODS.Suits[c.suit]:in_pool({initial_deck = initial_deck, rank = c.value})
) )
end end
if in_pool_func then if in_pool_func then
@ -1442,7 +1442,7 @@ function set_discover_tallies()
end end
for _, v in pairs(G.P_CENTERS) do for _, v in pairs(G.P_CENTERS) do
if not v.omit then if not v.omit and not v.no_collection then
if v.set and ((v.set == 'Joker') or v.consumeable or (v.set == 'Edition') or (v.set == 'Voucher') or (v.set == 'Back') or (v.set == 'Booster')) then if v.set and ((v.set == 'Joker') or v.consumeable or (v.set == 'Edition') or (v.set == 'Voucher') or (v.set == 'Back') or (v.set == 'Booster')) then
G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1 G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1
if v.discovered then if v.discovered then
@ -1495,6 +1495,8 @@ function set_discover_tallies()
end end
end end
for _, v in pairs(G.P_BLINDS) do for _, v in pairs(G.P_BLINDS) do
if not v.no_collection then
G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1 G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1
G.DISCOVER_TALLIES.blinds.of = G.DISCOVER_TALLIES.blinds.of+1 G.DISCOVER_TALLIES.blinds.of = G.DISCOVER_TALLIES.blinds.of+1
if v.discovered then if v.discovered then
@ -1502,7 +1504,11 @@ function set_discover_tallies()
G.DISCOVER_TALLIES.total.tally = G.DISCOVER_TALLIES.total.tally+1 G.DISCOVER_TALLIES.total.tally = G.DISCOVER_TALLIES.total.tally+1
end end
end end
end
for _, v in pairs(G.P_TAGS) do for _, v in pairs(G.P_TAGS) do
if not v.no_collection then
G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1 G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1
G.DISCOVER_TALLIES.tags.of = G.DISCOVER_TALLIES.tags.of+1 G.DISCOVER_TALLIES.tags.of = G.DISCOVER_TALLIES.tags.of+1
if v.discovered then if v.discovered then
@ -1510,6 +1516,8 @@ function set_discover_tallies()
G.DISCOVER_TALLIES.total.tally = G.DISCOVER_TALLIES.total.tally+1 G.DISCOVER_TALLIES.total.tally = G.DISCOVER_TALLIES.total.tally+1
end end
end end
end
G.PROFILES[G.SETTINGS.profile].high_scores.collection.amt = G.DISCOVER_TALLIES.total.tally G.PROFILES[G.SETTINGS.profile].high_scores.collection.amt = G.DISCOVER_TALLIES.total.tally
G.PROFILES[G.SETTINGS.profile].high_scores.collection.tot = G.DISCOVER_TALLIES.total.of G.PROFILES[G.SETTINGS.profile].high_scores.collection.tot = G.DISCOVER_TALLIES.total.of
G.PROFILES[G.SETTINGS.profile].progress.discovered = copy_table(G.DISCOVER_TALLIES.total) G.PROFILES[G.SETTINGS.profile].progress.discovered = copy_table(G.DISCOVER_TALLIES.total)
@ -1976,24 +1984,73 @@ end
function get_front_spriteinfo(_front) function get_front_spriteinfo(_front)
if _front and _front.suit and G.SETTINGS.CUSTOM_DECK and G.SETTINGS.CUSTOM_DECK.Collabs then if _front and _front.suit and G.SETTINGS.CUSTOM_DECK and G.SETTINGS.CUSTOM_DECK.Collabs then
local collab = G.SETTINGS.CUSTOM_DECK.Collabs[_front.suit] local collab = G.SETTINGS.CUSTOM_DECK.Collabs[_front.suit]
if collab and collab ~= 'default' then if collab then
local deckSkin = SMODS.DeckSkins[collab] local deckSkin = SMODS.DeckSkins[collab]
if deckSkin then if deckSkin then
if deckSkin.outdated then
local hasRank = false local hasRank = false
for i = 1, #deckSkin.ranks do for i = 1, #deckSkin.ranks do
if deckSkin.ranks[i] == _front.value then hasRank = true break end if deckSkin.ranks[i] == _front.value then hasRank = true break end
end end
if hasRank then if hasRank then
local atlas = G.ASSET_ATLAS[G.SETTINGS.colourblind_option and deckSkin.hc_atlas or deckSkin.lc_atlas] local atlas = G.ASSET_ATLAS[G.SETTINGS.colour_palettes[_front.suit] == 'hc' and deckSkin.hc_atlas or deckSkin.lc_atlas]
if atlas then if atlas then
if deckSkin.posStyle == 'collab' then if deckSkin.pos_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value] return atlas, G.COLLABS.pos[_front.value]
elseif deckSkin.posStyle == 'suit' then elseif deckSkin.pos_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0} return atlas, { x = _front.pos.x, y = 0}
elseif deckSkin.posStyle == 'deck' then elseif deckSkin.pos_style == 'deck' then
return atlas, _front.pos
elseif deckSkin.pos_style == 'ranks' or nil then
for i, rank in ipairs(deckSkin.ranks) do
if rank == _front.value then
return atlas, { x = i - 1, y = 0}
end
end
end
end
end
return G.ASSET_ATLAS[G.SETTINGS.colour_palettes[_front.suit] == 'hc' and _front.hc_atlas or _front.lc_atlas or {}] or G.ASSET_ATLAS[_front.atlas] or G.ASSET_ATLAS["cards_"..(G.SETTINGS.colour_palettes[_front.suit] == 'hc' and 2 or 1)], _front.pos
else
local palette = deckSkin.palette_map and deckSkin.palette_map[G.SETTINGS.colour_palettes[_front.suit] or ''] or (deckSkin.palettes or {})[1]
local hasRank = false
for i = 1, #palette.ranks do
if palette.ranks[i] == _front.value then hasRank = true break end
end
if hasRank then
local atlas = G.ASSET_ATLAS[palette.atlas]
if type(palette.pos_style) == "table" then
if palette.pos_style[_front.value] then
if palette.pos_style[_front.value].atlas then
atlas = G.ASSET_ATLAS[palette.pos_style[_front.value].atlas]
end
if palette.pos_style[_front.value].pos then
return atlas, palette.pos_style[_front.value].pos
end
elseif palette.pos_style.fallback_style then
if palette.pos_style.fallback_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif palette.pos_style.fallback_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
elseif palette.pos_style.fallback_style == 'deck' then
return atlas, _front.pos return atlas, _front.pos
end end
end end
elseif palette.pos_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif palette.pos_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
elseif palette.pos_style == 'deck' then
return atlas, _front.pos
elseif palette.pos_style == 'ranks' or nil then
for i, rank in ipairs(palette.ranks) do
if rank == _front.value then
return atlas, { x = i - 1, y = 0}
end
end
end
end
return G.ASSET_ATLAS[palette.hc_default and _front.hc_atlas or _front.lc_atlas or {}] or G.ASSET_ATLAS[_front.atlas] or G.ASSET_ATLAS["cards_"..(palette.hc_default and 2 or 1)], _front.pos
end end
end end
end end

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '1f28fb4cd208cf3d7ee40ad59534c6cc25dbf6d4335f376d30f1e4b080e388b7' LOVELY_INTEGRITY = '4af0a05e5998e1bbb1bd6610b6f3d87c6fea5c42d526b7d7d6bd3d6bf983044e'
--Class --Class
Game = Object:extend() Game = Object:extend()
@ -1114,7 +1114,7 @@ function Game:set_language()
end end
end end
self.LANG = self.LANGUAGES[self.SETTINGS.language] or self.LANGUAGES['en-us'] self.LANG = self.LANGUAGES[self.SETTINGS.real_language or self.SETTINGS.language] or self.LANGUAGES['en-us']
local localization = love.filesystem.getInfo('localization/'..G.SETTINGS.language..'.lua') or love.filesystem.getInfo('localization/en-us.lua') local localization = love.filesystem.getInfo('localization/'..G.SETTINGS.language..'.lua') or love.filesystem.getInfo('localization/en-us.lua')
if localization ~= nil then if localization ~= nil then
@ -2451,6 +2451,11 @@ function Game:start_run(args)
0, 0, 0, 0,
CAI.discard_W,CAI.discard_H, CAI.discard_W,CAI.discard_H,
{card_limit = 1e308, type = 'discard'}) {card_limit = 1e308, type = 'discard'})
self.vouchers = CardArea(
G.discard.T.x, G.discard.T.y,
G.discard.T.w, G.discard.T.h,
{ type = "discard", card_limit = 1e308 }
)
self.deck = CardArea( self.deck = CardArea(
0, 0, 0, 0,
CAI.deck_W,CAI.deck_H, CAI.deck_W,CAI.deck_H,
@ -2541,8 +2546,8 @@ function Game:start_run(args)
if not card_protos then if not card_protos then
card_protos = {} card_protos = {}
for k, v in pairs(self.P_CARDS) do for k, v in pairs(self.P_CARDS) do
if type(SMODS.Ranks[v.value].in_pool) == 'function' and not SMODS.Ranks[v.value]:in_pool({initial_deck = true}) if type(SMODS.Ranks[v.value].in_pool) == 'function' and not SMODS.Ranks[v.value]:in_pool({initial_deck = true, suit = v.suit})
or type(SMODS.Suits[v.suit].in_pool) == 'function' and not SMODS.Suits[v.suit]:in_pool({initial_deck = true}) then or type(SMODS.Suits[v.suit].in_pool) == 'function' and not SMODS.Suits[v.suit]:in_pool({initial_deck = true, rank = v.value}) then
goto continue goto continue
end end
local _ = nil local _ = nil
@ -3575,13 +3580,9 @@ end
if G.GAME.current_round.hands_played == 0 and if G.GAME.current_round.hands_played == 0 and
G.GAME.current_round.discards_used == 0 and G.GAME.facing_blind then G.GAME.current_round.discards_used == 0 and G.GAME.facing_blind then
for i = 1, #G.hand.cards do SMODS.calculate_context({first_hand_drawn = true})
eval_card(G.hand.cards[i], {first_hand_drawn = true})
end
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({first_hand_drawn = true})
end
end end
SMODS.calculate_context({hand_drawn = true})
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
trigger = 'immediate', trigger = 'immediate',

View file

@ -1,4 +1,148 @@
LOVELY_INTEGRITY = '99fc88fd391f4645cfa6f1f6b39e3ef72258ab69c56792fe9d6f119d8aab9a88' LOVELY_INTEGRITY = 'bb0f108ed0f5fea2a65f1d93362d3d1e1561e17a19a8c7e0d07c0cc4747d3696'
local Cartomancer_replacements = {
{
find = [[
for k, v in ipairs%(G%.playing_cards%) do
if v%.base%.suit then table%.insert%(SUITS%[v%.base%.suit%], v%) end]],
-- Steamodded<0917b
find_alt = [[
for k, v in ipairs%(G%.playing_cards%) do
table%.insert%(SUITS%[v%.base%.suit%], v%)]],
place = [[
local SUITS_SORTED = Cartomancer.tablecopy(SUITS)
for k, v in ipairs(G.playing_cards) do
if v.base.suit then
local greyed
if unplayed_only and not ((v.area and v.area == G.deck) or v.ability.wheel_flipped) then
greyed = true
end
local card_string = v:cart_to_string()
if greyed then
card_string = card_string .. "Greyed" -- for some reason format doesn't work and final string is `sGreyed`
end
if greyed and Cartomancer.SETTINGS.deck_view_hide_drawn_cards then
-- Ignore this card.
elseif not Cartomancer.SETTINGS.deck_view_stack_enabled then
-- Don't stack cards
local _scale = 0.7
local copy = copy_card(v, nil, _scale)
copy.greyed = greyed
copy.stacked_quantity = 1
table.insert(SUITS_SORTED[v.base.suit], copy)
elseif not SUITS[v.base.suit][card_string] then
-- Initiate stack
table.insert(SUITS_SORTED[v.base.suit], card_string)
local _scale = 0.7
local copy = copy_card(v, nil, _scale)
copy.greyed = greyed
copy.stacked_quantity = 1
SUITS[v.base.suit][card_string] = copy
else
-- Stack cards
local stacked_card = SUITS[v.base.suit][card_string]
stacked_card.stacked_quantity = stacked_card.stacked_quantity + 1
end
end]]
},
{
find = "card_limit = #SUITS%[suit_map%[j%]%],",
place = "card_limit = #SUITS_SORTED[suit_map[j]],"
},
{
find = [[
for i = 1%, %#SUITS%[suit_map%[j%]%] do
if SUITS%[suit_map%[j%]%]%[i%] then
local greyed%, _scale = nil%, 0%.7
if unplayed_only and not %(%(SUITS%[suit_map%[j%]%]%[i%]%.area and SUITS%[suit_map%[j%]%]%[i%]%.area == G%.deck%) or SUITS%[suit_map%[j%]%]%[i%]%.ability%.wheel_flipped%) then
greyed = true
end
local copy = copy_card%(SUITS%[suit_map%[j%]%]%[i%]%, nil%, _scale%)
copy%.greyed = greyed
copy%.T%.x = view_deck%.T%.x %+ view_deck%.T%.w %/ 2
copy%.T%.y = view_deck%.T%.y
copy:hard_set_T%(%)
view_deck:emplace%(copy%)
end
end]],
place = [[
for i = 1%, %#SUITS_SORTED%[suit_map%[j%]%] do
local card
if not Cartomancer.SETTINGS.deck_view_stack_enabled then
card = SUITS_SORTED%[suit_map%[j%]%]%[i%]
else
local card_string = SUITS_SORTED%[suit_map%[j%]%]%[i%]
card = SUITS%[suit_map%[j%]%]%[card_string%]
end
card%.T%.x = view_deck%.T%.x %+ view_deck%.T%.w%/2
card%.T%.y = view_deck%.T%.y
card:create_quantity_display%(%)
card:hard_set_T%(%)
view_deck:emplace%(card%)
end]]
},
{
find = ' modded and {n = G.UIT.R, config = {align = "cm"}, nodes = {',
place = [=[
not unplayed_only and Cartomancer.add_unique_count() or nil,
modded and {n = G.UIT.R, config = {align = "cm"}, nodes = {]=]
},
}
-- Mom, can we have lovely patches for overrides.lua?
-- No, we have lovely patches at home
-- Lovely patches at home:
local Cartomancer_nfs_read
local Cartomancer_nfs_read_override = function (containerOrName, nameOrSize, sizeOrNil)
local data, size = Cartomancer_nfs_read(containerOrName, nameOrSize, sizeOrNil)
if type(containerOrName) ~= "string" then
return data, size
end
local overrides = '/overrides.lua'
if containerOrName:sub(-#overrides) ~= overrides then
return data, size
end
local replaced = 0
local total_replaced = 0
for _, v in ipairs(Cartomancer_replacements) do
data, replaced = string.gsub(data, v.find, v.place)
if replaced == 0 and v.find_alt then
data, replaced = string.gsub(data, v.find_alt, v.place)
end
if replaced == 0 then
print("Failed to replace " .. v.find .. " for overrides.lua")
else
total_replaced = total_replaced + 1
end
end
print("Totally applied " .. total_replaced .. " replacements to overrides.lua")
-- We no longer need this override
NFS.read = Cartomancer_nfs_read
return data, size
end
--- STEAMODDED CORE --- STEAMODDED CORE
--- MODULE STACKTRACE --- MODULE STACKTRACE
@ -518,11 +662,11 @@ function getDebugInfoForCrash()
(modded_version) (modded_version)
local major, minor, revision, codename = love.getVersion() local major, minor, revision, codename = love.getVersion()
info = info .. string.format("\nLÖVE Version: %d.%d.%d", major, minor, revision) info = info .. string.format("\nLÖVE Version: %d.%d.%d", major, minor, revision)
local lovely_success, lovely = pcall(require, "lovely") local lovely_success, lovely = pcall(require, "lovely")
if lovely_success then if lovely_success then
info = info .. "\nLovely Version: " .. lovely.version info = info .. "\nLovely Version: " .. lovely.version
end end
info = info .. "\nPlatform: " .. (love.system.getOS() or "???")
if SMODS and SMODS.Mods then if SMODS and SMODS.Mods then
local mod_strings = "" local mod_strings = ""
local lovely_strings = "" local lovely_strings = ""
@ -856,150 +1000,6 @@ injectStackTrace()
-- ---------------------------------------------- -- ----------------------------------------------
-- --------MOD CORE API STACKTRACE END----------- -- --------MOD CORE API STACKTRACE END-----------
local Cartomancer_replacements = {
{
find = [[
for k, v in ipairs%(G%.playing_cards%) do
if v%.base%.suit then table%.insert%(SUITS%[v%.base%.suit%], v%) end]],
-- Steamodded<0917b
find_alt = [[
for k, v in ipairs%(G%.playing_cards%) do
table%.insert%(SUITS%[v%.base%.suit%], v%)]],
place = [[
local SUITS_SORTED = Cartomancer.tablecopy(SUITS)
for k, v in ipairs(G.playing_cards) do
if v.base.suit then
local greyed
if unplayed_only and not ((v.area and v.area == G.deck) or v.ability.wheel_flipped) then
greyed = true
end
local card_string = v:cart_to_string()
if greyed then
card_string = card_string .. "Greyed" -- for some reason format doesn't work and final string is `sGreyed`
end
if greyed and Cartomancer.SETTINGS.deck_view_hide_drawn_cards then
-- Ignore this card.
elseif not Cartomancer.SETTINGS.deck_view_stack_enabled then
-- Don't stack cards
local _scale = 0.7
local copy = copy_card(v, nil, _scale)
copy.greyed = greyed
copy.stacked_quantity = 1
table.insert(SUITS_SORTED[v.base.suit], copy)
elseif not SUITS[v.base.suit][card_string] then
-- Initiate stack
table.insert(SUITS_SORTED[v.base.suit], card_string)
local _scale = 0.7
local copy = copy_card(v, nil, _scale)
copy.greyed = greyed
copy.stacked_quantity = 1
SUITS[v.base.suit][card_string] = copy
else
-- Stack cards
local stacked_card = SUITS[v.base.suit][card_string]
stacked_card.stacked_quantity = stacked_card.stacked_quantity + 1
end
end]]
},
{
find = "card_limit = #SUITS%[suit_map%[j%]%],",
place = "card_limit = #SUITS_SORTED[suit_map[j]],"
},
{
find = [[
for i = 1%, %#SUITS%[suit_map%[j%]%] do
if SUITS%[suit_map%[j%]%]%[i%] then
local greyed%, _scale = nil%, 0%.7
if unplayed_only and not %(%(SUITS%[suit_map%[j%]%]%[i%]%.area and SUITS%[suit_map%[j%]%]%[i%]%.area == G%.deck%) or SUITS%[suit_map%[j%]%]%[i%]%.ability%.wheel_flipped%) then
greyed = true
end
local copy = copy_card%(SUITS%[suit_map%[j%]%]%[i%]%, nil%, _scale%)
copy%.greyed = greyed
copy%.T%.x = view_deck%.T%.x %+ view_deck%.T%.w %/ 2
copy%.T%.y = view_deck%.T%.y
copy:hard_set_T%(%)
view_deck:emplace%(copy%)
end
end]],
place = [[
for i = 1%, %#SUITS_SORTED%[suit_map%[j%]%] do
local card
if not Cartomancer.SETTINGS.deck_view_stack_enabled then
card = SUITS_SORTED%[suit_map%[j%]%]%[i%]
else
local card_string = SUITS_SORTED%[suit_map%[j%]%]%[i%]
card = SUITS%[suit_map%[j%]%]%[card_string%]
end
card%.T%.x = view_deck%.T%.x %+ view_deck%.T%.w%/2
card%.T%.y = view_deck%.T%.y
card:create_quantity_display%(%)
card:hard_set_T%(%)
view_deck:emplace%(card%)
end]]
},
{
find = ' modded and {n = G.UIT.R, config = {align = "cm"}, nodes = {',
place = [=[
not unplayed_only and Cartomancer.add_unique_count() or nil,
modded and {n = G.UIT.R, config = {align = "cm"}, nodes = {]=]
},
}
-- Mom, can we have lovely patches for overrides.lua?
-- No, we have lovely patches at home
-- Lovely patches at home:
local Cartomancer_nfs_read
local Cartomancer_nfs_read_override = function (containerOrName, nameOrSize, sizeOrNil)
local data, size = Cartomancer_nfs_read(containerOrName, nameOrSize, sizeOrNil)
if type(containerOrName) ~= "string" then
return data, size
end
local overrides = '/overrides.lua'
if containerOrName:sub(-#overrides) ~= overrides then
return data, size
end
local replaced = 0
local total_replaced = 0
for _, v in ipairs(Cartomancer_replacements) do
data, replaced = string.gsub(data, v.find, v.place)
if replaced == 0 and v.find_alt then
data, replaced = string.gsub(data, v.find_alt, v.place)
end
if replaced == 0 then
print("Failed to replace " .. v.find .. " for overrides.lua")
else
total_replaced = total_replaced + 1
end
end
print("Totally applied " .. total_replaced .. " replacements to overrides.lua")
-- We no longer need this override
NFS.read = Cartomancer_nfs_read
return data, size
end
if (love.system.getOS() == 'OS X' ) and (jit.arch == 'arm64' or jit.arch == 'arm') then jit.off() end if (love.system.getOS() == 'OS X' ) and (jit.arch == 'arm64' or jit.arch == 'arm') then jit.off() end
do do
local logger = require("debugplus.logger") local logger = require("debugplus.logger")
@ -1099,17 +1099,21 @@ function love.load()
G:start_up() G:start_up()
--Steam integration --Steam integration
local os = love.system.getOS() local os = love.system.getOS()
if os == 'OS X' or os == 'Windows' then if os == 'OS X' or os == 'Windows' or os == 'Linux' then
local st = nil local st = nil
--To control when steam communication happens, make sure to send updates to steam as little as possible --To control when steam communication happens, make sure to send updates to steam as little as possible
if os == 'OS X' then local cwd = NFS.getWorkingDirectory()
NFS.setWorkingDirectory(love.filesystem.getSourceBaseDirectory())
if os == 'OS X' or os == 'Linux' then
local dir = love.filesystem.getSourceBaseDirectory() local dir = love.filesystem.getSourceBaseDirectory()
local old_cpath = package.cpath local old_cpath = package.cpath
package.cpath = package.cpath .. ';' .. dir .. '/?.so' package.cpath = package.cpath .. ';' .. dir .. '/?.so'
st = require 'luasteam' local success, _st = pcall(require, 'luasteam')
if success then st = _st else sendWarnMessage(_st); st = {} end
package.cpath = old_cpath package.cpath = old_cpath
else else
st = require 'luasteam' local success, _st = pcall(require, 'luasteam')
if success then st = _st else sendWarnMessage(_st); st = {} end
end end
st.send_control = { st.send_control = {
@ -1120,6 +1124,7 @@ function love.load()
if not (st.init and st:init()) then if not (st.init and st:init()) then
st = nil st = nil
end end
NFS.setWorkingDirectory(cwd)
--Set up the render window and the stage for the splash screen, then enter the gameloop with :update --Set up the render window and the stage for the splash screen, then enter the gameloop with :update
G.STEAM = st G.STEAM = st
else else
@ -1410,6 +1415,88 @@ function love.resize(w, h)
G.CANVAS:setFilter('linear', 'linear') G.CANVAS:setFilter('linear', 'linear')
end end
--- STEAMODDED CORE
--- MODULE CORE
SMODS = {}
MODDED_VERSION = require'SMODS.version'
SMODS.id = 'Steamodded'
SMODS.version = MODDED_VERSION:gsub('%-STEAMODDED', '')
SMODS.can_load = true
SMODS.meta_mod = true
SMODS.config_file = 'config.lua'
-- Include lovely and nativefs modules
local nativefs = require "nativefs"
local lovely = require "lovely"
local json = require "json"
local lovely_mod_dir = lovely.mod_dir:gsub("/$", "")
NFS = nativefs
-- make lovely_mod_dir an absolute path.
-- respects symlink/.. combos
NFS.setWorkingDirectory(lovely_mod_dir)
lovely_mod_dir = NFS.getWorkingDirectory()
-- make sure NFS behaves the same as love.filesystem
NFS.setWorkingDirectory(love.filesystem.getSaveDirectory())
JSON = json
local function set_mods_dir()
local love_dirs = {
love.filesystem.getSaveDirectory(),
love.filesystem.getSourceBaseDirectory()
}
for _, love_dir in ipairs(love_dirs) do
if lovely_mod_dir:sub(1, #love_dir) == love_dir then
-- relative path from love_dir
SMODS.MODS_DIR = lovely_mod_dir:sub(#love_dir+2)
NFS.setWorkingDirectory(love_dir)
return
end
end
SMODS.MODS_DIR = lovely_mod_dir
end
set_mods_dir()
local function find_self(directory, target_filename, target_line, depth)
depth = depth or 1
if depth > 3 then return end
for _, filename in ipairs(NFS.getDirectoryItems(directory)) do
local file_path = directory .. "/" .. filename
local file_type = NFS.getInfo(file_path).type
if file_type == 'directory' or file_type == 'symlink' then
local f = find_self(file_path, target_filename, target_line, depth+1)
if f then return f end
elseif filename == target_filename then
local first_line = NFS.read(file_path):match('^(.-)\n')
if first_line == target_line then
-- use parent directory
return directory:match('^(.+/)')
end
end
end
end
SMODS.path = find_self(SMODS.MODS_DIR, 'core.lua', '--- STEAMODDED CORE')
Cartomancer_nfs_read = NFS.read
NFS.read = Cartomancer_nfs_read_override
for _, path in ipairs {
"src/ui.lua",
"src/index.lua",
"src/utils.lua",
"src/overrides.lua",
"src/game_object.lua",
"src/logging.lua",
"src/compat_0_9_8.lua",
"src/loader.lua",
} do
assert(load(NFS.read(SMODS.path..path), ('=[SMODS _ "%s"]'):format(path)))()
end
Handy = setmetatable({ Handy = setmetatable({
last_clicked_area = nil, last_clicked_area = nil,
last_clicked_card = nil, last_clicked_card = nil,
@ -3585,92 +3672,6 @@ Handy.UI.get_config_tab = function(_tab)
return result return result
end end
--- STEAMODDED CORE
--- MODULE CORE
SMODS = {}
MODDED_VERSION = require'SMODS.version'
SMODS.id = 'Steamodded'
SMODS.version = MODDED_VERSION:gsub('%-STEAMODDED', '')
SMODS.can_load = true
SMODS.meta_mod = true
-- Include lovely and nativefs modules
local nativefs = require "nativefs"
local lovely = require "lovely"
local json = require "json"
local lovely_mod_dir = lovely.mod_dir:gsub("/$", "")
NFS = nativefs
-- make lovely_mod_dir an absolute path.
-- respects symlink/.. combos
NFS.setWorkingDirectory(lovely_mod_dir)
lovely_mod_dir = NFS.getWorkingDirectory()
-- make sure NFS behaves the same as love.filesystem
NFS.setWorkingDirectory(love.filesystem.getSaveDirectory())
JSON = json
local function set_mods_dir()
local love_dirs = {
love.filesystem.getSaveDirectory(),
love.filesystem.getSourceBaseDirectory()
}
for _, love_dir in ipairs(love_dirs) do
if lovely_mod_dir:sub(1, #love_dir) == love_dir then
-- relative path from love_dir
SMODS.MODS_DIR = lovely_mod_dir:sub(#love_dir+2)
if nfs_success then
-- make sure NFS behaves the same as love.filesystem.
-- not perfect: NFS won't read from both getSaveDirectory()
-- and getSourceBaseDirectory()
NFS.setWorkingDirectory(love_dir)
end
return
end
end
SMODS.MODS_DIR = lovely_mod_dir
end
set_mods_dir()
local function find_self(directory, target_filename, target_line, depth)
depth = depth or 1
if depth > 3 then return end
for _, filename in ipairs(NFS.getDirectoryItems(directory)) do
local file_path = directory .. "/" .. filename
local file_type = NFS.getInfo(file_path).type
if file_type == 'directory' or file_type == 'symlink' then
local f = find_self(file_path, target_filename, target_line, depth+1)
if f then return f end
elseif filename == target_filename then
local first_line = NFS.read(file_path):match('^(.-)\n')
if first_line == target_line then
-- use parent directory
return directory:match('^(.+/)')
end
end
end
end
SMODS.path = find_self(SMODS.MODS_DIR, 'core.lua', '--- STEAMODDED CORE')
Cartomancer_nfs_read = NFS.read
NFS.read = Cartomancer_nfs_read_override
for _, path in ipairs {
"src/ui.lua",
"src/index.lua",
"src/utils.lua",
"src/overrides.lua",
"src/game_object.lua",
"src/logging.lua",
"src/compat_0_9_8.lua",
"src/loader.lua",
} do
assert(load(NFS.read(SMODS.path..path), ('=[SMODS _ "%s"]'):format(path)))()
end
local lovely = require("lovely") local lovely = require("lovely")
local nativefs = require("nativefs") local nativefs = require("nativefs")

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'd16a678af46c656e33c88a0349859985655ad1ef28db3eae950262607bda3372' LOVELY_INTEGRITY = '1051baf1f570241c507e107aff5fffefe3df969645f0fe53ec0856cd5ac0a760'
--Class --Class
Tag = Object:extend() Tag = Object:extend()
@ -723,7 +723,7 @@ function Tag:generate_UI(_size)
return tag_sprite_tab, tag_sprite return tag_sprite_tab, tag_sprite
end end
function Tag:get_uibox_table(tag_sprite) function Tag:get_uibox_table(tag_sprite, vars_only)
tag_sprite = tag_sprite or self.tag_sprite tag_sprite = tag_sprite or self.tag_sprite
local name_to_check, loc_vars = self.name, {} local name_to_check, loc_vars = self.name, {}
if name_to_check == 'Uncommon Tag' then if name_to_check == 'Uncommon Tag' then
@ -742,6 +742,7 @@ function Tag:get_uibox_table(tag_sprite)
} }
elseif name_to_check == "cry-Cat Tag" then loc_vars = {self.ability.level or 1} elseif name_to_check == "cry-Cat Tag" then loc_vars = {self.ability.level or 1}
end end
if vars_only then return loc_vars end
tag_sprite.ability_UIBox_table = generate_card_ui(G.P_TAGS[self.key], nil, loc_vars, (self.hide_ability) and 'Undiscovered' or 'Tag', nil, (self.hide_ability), nil, nil, self) tag_sprite.ability_UIBox_table = generate_card_ui(G.P_TAGS[self.key], nil, loc_vars, (self.hide_ability) and 'Undiscovered' or 'Tag', nil, (self.hide_ability), nil, nil, self)
return tag_sprite return tag_sprite
end end

View file

@ -0,0 +1,128 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 139ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-19 16:12:26 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-19 16:12:27 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-19 16:12:27 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-19 16:12:27 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-19 16:12:27 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-19 16:12:27 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-19 16:12:27 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.719 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0032] Injected Atlas in 781.765 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0025] Injected Sound in 20.566 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0032] Injected Stake in 0.626 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0008] Injected Rarity in 0.026 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.068 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0392] Injected Center in 1.969 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.012 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0027] Injected Blind in 0.061 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0002] Injected Seal in 0.072 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0004] Injected Suit in 0.114 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0013] Injected Rank in 0.082 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.040 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.081 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0031] Injected Challenge in 0.175 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0028] Injected Tag in 0.233 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0009] Injected Sticker in 0.811 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0009] Injected Shader in 56.200 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0020] Injected Achievement in 0.073 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.984 ms
INFO - [G] 2025-01-19 16:12:28 :: INFO :: TIMER :: [0011] Injected Event in 0.015 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,128 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 132ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-19 23:45:44 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-19 23:45:45 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-19 23:45:45 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-19 23:45:45 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-19 23:45:45 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-19 23:45:45 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-19 23:45:45 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.681 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0032] Injected Atlas in 784.764 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0025] Injected Sound in 19.919 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0032] Injected Stake in 0.748 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0008] Injected Rarity in 0.023 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.072 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0392] Injected Center in 1.766 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.018 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0027] Injected Blind in 0.050 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0002] Injected Seal in 0.054 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0004] Injected Suit in 0.079 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0013] Injected Rank in 0.094 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.045 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.178 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0031] Injected Challenge in 0.188 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0028] Injected Tag in 0.241 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0009] Injected Sticker in 1.077 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0009] Injected Shader in 56.128 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0020] Injected Achievement in 0.092 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.203 ms
INFO - [G] 2025-01-19 23:45:46 :: INFO :: TIMER :: [0011] Injected Event in 0.013 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,128 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 152ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-20 20:46:35 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-20 20:46:36 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-20 20:46:36 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-20 20:46:36 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-20 20:46:36 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-20 20:46:36 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-20 20:46:36 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 1.464 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0032] Injected Atlas in 845.405 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0025] Injected Sound in 114.390 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0032] Injected Stake in 0.611 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0008] Injected Rarity in 0.023 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.057 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0392] Injected Center in 1.980 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.010 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0027] Injected Blind in 0.039 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0002] Injected Seal in 0.038 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0004] Injected Suit in 0.058 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0013] Injected Rank in 0.041 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.025 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.102 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0031] Injected Challenge in 0.157 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0028] Injected Tag in 0.178 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0009] Injected Sticker in 0.587 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0009] Injected Shader in 104.318 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0020] Injected Achievement in 0.080 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 23.693 ms
INFO - [G] 2025-01-20 20:46:37 :: INFO :: TIMER :: [0011] Injected Event in 0.033 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,128 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 158ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-20 20:47:48 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-20 20:47:48 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-20 20:47:48 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-20 20:47:48 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-20 20:47:49 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.706 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0032] Injected Atlas in 808.787 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0025] Injected Sound in 22.145 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0032] Injected Stake in 0.423 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0008] Injected Rarity in 0.020 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.059 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0392] Injected Center in 1.763 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.012 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0027] Injected Blind in 0.042 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0002] Injected Seal in 0.278 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0004] Injected Suit in 0.063 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0013] Injected Rank in 0.066 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.029 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.107 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0031] Injected Challenge in 0.035 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0028] Injected Tag in 0.071 ms
INFO - [G] 2025-01-20 20:47:49 :: INFO :: TIMER :: [0009] Injected Sticker in 0.295 ms
INFO - [G] 2025-01-20 20:47:50 :: INFO :: TIMER :: [0009] Injected Shader in 93.768 ms
INFO - [G] 2025-01-20 20:47:50 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-01-20 20:47:50 :: INFO :: TIMER :: [0020] Injected Achievement in 0.108 ms
INFO - [G] 2025-01-20 20:47:50 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.442 ms
INFO - [G] 2025-01-20 20:47:50 :: INFO :: TIMER :: [0011] Injected Event in 0.013 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,128 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 319ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-22 01:21:58 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-22 01:22:00 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-22 01:22:00 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-22 01:22:00 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-22 01:22:00 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-22 01:22:00 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-22 01:22:00 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 1.183 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0032] Injected Atlas in 1022.137 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0025] Injected Sound in 497.088 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0032] Injected Stake in 0.475 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0008] Injected Rarity in 0.028 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.066 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0392] Injected Center in 1.674 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.009 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0027] Injected Blind in 0.047 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0002] Injected Seal in 0.052 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0004] Injected Suit in 0.056 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0013] Injected Rank in 0.076 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.026 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.107 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0031] Injected Challenge in 0.123 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0028] Injected Tag in 0.237 ms
INFO - [G] 2025-01-22 01:22:02 :: INFO :: TIMER :: [0009] Injected Sticker in 0.817 ms
INFO - [G] 2025-01-22 01:22:03 :: INFO :: TIMER :: [0009] Injected Shader in 850.893 ms
INFO - [G] 2025-01-22 01:22:03 :: INFO :: TIMER :: [0000] Injected Keybind in 0.002 ms
INFO - [G] 2025-01-22 01:22:03 :: INFO :: TIMER :: [0020] Injected Achievement in 0.085 ms
INFO - [G] 2025-01-22 01:22:03 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 11.235 ms
INFO - [G] 2025-01-22 01:22:03 :: INFO :: TIMER :: [0011] Injected Event in 0.016 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,229 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 157ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-26 23:01:40 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-26 23:01:41 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-26 23:01:41 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-26 23:01:41 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-26 23:01:41 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-26 23:01:41 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-26 23:01:41 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 1.248 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0032] Injected Atlas in 1076.432 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0025] Injected Sound in 119.396 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0032] Injected Stake in 0.497 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0008] Injected Rarity in 0.045 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.050 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0392] Injected Center in 1.968 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.018 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0027] Injected Blind in 0.045 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0002] Injected Seal in 0.038 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0004] Injected Suit in 0.068 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0013] Injected Rank in 0.054 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.029 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.115 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0031] Injected Challenge in 0.033 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0028] Injected Tag in 0.168 ms
INFO - [G] 2025-01-26 23:01:42 :: INFO :: TIMER :: [0009] Injected Sticker in 0.848 ms
INFO - [G] 2025-01-26 23:01:43 :: INFO :: TIMER :: [0009] Injected Shader in 167.743 ms
INFO - [G] 2025-01-26 23:01:43 :: INFO :: TIMER :: [0000] Injected Keybind in 0.002 ms
INFO - [G] 2025-01-26 23:01:43 :: INFO :: TIMER :: [0020] Injected Achievement in 0.080 ms
INFO - [G] 2025-01-26 23:01:43 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 8.242 ms
INFO - [G] 2025-01-26 23:01:43 :: INFO :: TIMER :: [0011] Injected Event in 0.020 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-01-26 23:02:11 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS Cryptid "Cryptid.lua"]:120: attempt to index field 'events' (a nil value)
Stack Traceback
===============
(1) Lua upvalue 'orig' at file 'main.lua:612'
Local variables:
msg = string: "[SMODS Cryptid \"Cryptid.lua\"]:120: attempt to index field 'events' (a nil value)"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\
"
(2) Lua local 'handler' at file 'console.lua:551' (from lovely module debugplus.console)
Local variables:
msg = string: "[SMODS Cryptid \"Cryptid.lua\"]:120: attempt to index field 'events' (a nil value)"
(3) LÖVE metamethod at file 'boot.lua:352'
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
(4) Lua method 'update_round_eval' at file 'Cryptid.lua:120' (from mod with id Cryptid)
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0
(*temporary) = nil
(*temporary) = C function: next
(*temporary) = table: 0x06be00a0 {unlock:table: 0x06be00c8, other:table: 0x06be0540, tutorial:table: 0x06be0118 (more...)}
(*temporary) = number: nan
(*temporary) = string: "achievement"
(*temporary) = table: 0x06be0518 {}
(*temporary) = boolean: false
(*temporary) = number: 1
(*temporary) = string: "attempt to index field 'events' (a nil value)"
(5) Lua upvalue 'gameUpdateRef' at file 'game.lua:2804'
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0
http_resp = nil
(6) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:81'
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(7) Lua upvalue 'upd' at file 'main.lua:4093'
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(8) Lua upvalue 'upd' at file 'Items/Blinds.lua:1310' (from mod with id Cryptid)
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(9) Lua upvalue 'upd' at file 'Items/CodeCards.lua:4106' (from mod with id Cryptid)
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(10) Lua upvalue 'upd' at file 'Items/Decks.lua:429' (from mod with id Cryptid)
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(11) Lua upvalue 'upd' at file 'Items/MiscJokers.lua:6658' (from mod with id Cryptid)
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(12) Lua method 'update' at file 'Cryptid.lua:2948' (from mod with id Cryptid)
Local variables:
self = table: 0x04e04dc8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x09fb7138 (more...)}
dt = number: 0.00610519
(13) Lua upvalue 'love_update_ref' at file 'main.lua:1141'
Local variables:
dt = number: 0.00610519
(14) Lua upvalue 'oldupd' at file 'main.lua:2951'
Local variables:
dt = number: 0.00610519
(15) Lua field 'update' at file 'main.lua:4120'
Local variables:
dt = number: 0.00610519
(16) Lua function '?' at file 'main.lua:1079' (best guess)
(17) global C function 'xpcall'
(18) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 1050 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-01-26 23:02:11 :: INFO :: StackTrace :: Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1220a-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Steamodded Mods:
1: J Cursor by Jie65535, MarioMak967 [ID: JCursor]
2: Cryptid by MathIsFun_, Cryptid and Balatro Discords [ID: Cryptid, Priority: 1e+299, Version: 0.5.3a, Uses Lovely]
3: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
4: Cartomancer by stupxd aka stupid [ID: cartomancer, Priority: 69, Version: 4.10, Uses Lovely]
5: Handy by SleepyG11 [ID: Handy, Version: 1.1.5, Uses Lovely]
6: Incantation by jenwalter666, MathIsFun_ [ID: incantation, Priority: 9e+301, Version: 0.5.10, Uses Lovely]
7: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods:

View file

@ -0,0 +1,128 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 142ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-01-26 23:02:34 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-01-26 23:02:35 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-01-26 23:02:35 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-01-26 23:02:35 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-01-26 23:02:35 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-01-26 23:02:35 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-01-26 23:02:35 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.747 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0032] Injected Atlas in 784.647 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0025] Injected Sound in 22.166 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0032] Injected Stake in 0.705 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0008] Injected Rarity in 0.030 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.065 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0392] Injected Center in 2.035 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.081 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0027] Injected Blind in 0.153 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0002] Injected Seal in 0.065 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0004] Injected Suit in 0.085 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0013] Injected Rank in 0.226 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.030 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.101 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0031] Injected Challenge in 0.036 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0028] Injected Tag in 0.059 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0009] Injected Sticker in 0.098 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0009] Injected Shader in 109.877 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0020] Injected Achievement in 0.076 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.699 ms
INFO - [G] 2025-01-26 23:02:36 :: INFO :: TIMER :: [0011] Injected Event in 0.013 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,139 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 233ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 83 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 100 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 126 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 55 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'elseif self.ability.name == \'Blueprint\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Blueprint\' or self.ability.name == \'Brainstorm\' then' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 210 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:14:47 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:14:48 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:14:48 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:14:48 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:14:48 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Mod UnStable was unable to load: Missing Dependencies: 1: Steamodded (>=1.0.0~ALPHA-1318b)
INFO - [G] 2025-02-11 01:14:48 :: TRACE :: Loader :: Mod UnStableEX was unable to load: Missing Dependencies: 1: Steamodded (>=1.0.0~ALPHA-1307d)
2: UnStable
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:14:48 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:14:48 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:14:48 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 1.196 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0032] Injected Atlas in 849.797 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0025] Injected Sound in 209.452 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0032] Injected Stake in 0.878 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0008] Injected Rarity in 0.026 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.067 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0392] Injected Center in 2.221 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.010 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0027] Injected Blind in 0.052 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0002] Injected Seal in 0.046 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0004] Injected Suit in 0.100 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0013] Injected Rank in 0.080 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.031 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.084 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0031] Injected Challenge in 0.038 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0028] Injected Tag in 0.052 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0009] Injected Sticker in 0.117 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0009] Injected Shader in 56.258 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0020] Injected Achievement in 0.066 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 7.994 ms
INFO - [G] 2025-02-11 01:14:49 :: INFO :: TIMER :: [0011] Injected Event in 0.014 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,199 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 135ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 35 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 13 patches to 'engine/controller.lua'
INFO - [♥] Applied 15 patches to 'back.lua'
INFO - [♥] Applied 15 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 48 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 85 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 110 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern '--calculate the card edition effects\nif effects[ii].edition then\n hand_chips = mod_chips(hand_chips + (effects[ii].edition.chip_mod or 0))\n mult = mult + (effects[ii].edition.mult_mod or 0)\n mult = mod_mult(mult*(effects[ii].edition.x_mult_mod or 1))\n update_hand_text({delay = 0}, {\n chips = effects[ii].edition.chip_mod and hand_chips or nil,\n mult = (effects[ii].edition.mult_mod or effects[ii].edition.x_mult_mod) and mult or nil,\n })\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, {\n message = (effects[ii].edition.chip_mod and localize{type=\'variable\',key=\'a_chips\',vars={effects[ii].edition.chip_mod}}) or\n (effects[ii].edition.mult_mod and localize{type=\'variable\',key=\'a_mult\',vars={effects[ii].edition.mult_mod}}) or\n (effects[ii].edition.x_mult_mod and localize{type=\'variable\',key=\'a_xmult\',vars={effects[ii].edition.x_mult_mod}}),\n chip_mod = effects[ii].edition.chip_mod,\n mult_mod = effects[ii].edition.mult_mod,\n x_mult_mod = effects[ii].edition.x_mult_mod,\n colour = G.C.DARK_EDITION,\n edition = true})\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern ' scoring_hand[i].lucky_trigger = nil\n\n for ii = 1, #effects do\n --If chips added, do chip add event and add the chips to the total\n if effects[ii].chips then \n if effects[ii].card then juice_card(effects[ii].card) end\n hand_chips = mod_chips(hand_chips + effects[ii].chips)\n update_hand_text({delay = 0}, {chips = hand_chips})\n card_eval_status_text(scoring_hand[i], \'chips\', effects[ii].chips, percent)\n end\n\n --If mult added, do mult add event and add the mult to the total\n if effects[ii].mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult + effects[ii].mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'mult\', effects[ii].mult, percent)\n end\n\n --If play dollars added, add dollars to total\n if effects[ii].p_dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].p_dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].p_dollars, percent)\n end\n\n --If dollars added, add dollars to total\n if effects[ii].dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].dollars, percent)\n end\n\n --Any extra effects\n if effects[ii].extra then \n if effects[ii].card then juice_card(effects[ii].card) end\n local extras = {mult = false, hand_chips = false}\n if effects[ii].extra.mult_mod then mult =mod_mult( mult + effects[ii].extra.mult_mod);extras.mult = true end\n if effects[ii].extra.chip_mod then hand_chips = mod_chips(hand_chips + effects[ii].extra.chip_mod);extras.hand_chips = true end\n if effects[ii].extra.swap then \n local old_mult = mult\n mult = mod_mult(hand_chips)\n hand_chips = mod_chips(old_mult)\n extras.hand_chips = true; extras.mult = true\n end\n if effects[ii].extra.func then effects[ii].extra.func() end\n update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, effects[ii].extra)\n end\n\n --If x_mult added, do mult add event and mult the mult to the total\n if effects[ii].x_mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult*effects[ii].x_mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)\n end\n\n\n end\n end\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local percent = (i-0.999)/(#G.hand.cards-0.998) + (j-1)*0.1' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.effect ~= \'Stone Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'G.GAME.cards_played[scoring_hand[i].base.value].suits[scoring_hand[i].base.suit] = true' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i = 1, #G.jokers.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(_card, \'jokers\', nil, percent, nil, effects.jokers)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(G.hand.cards[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.hand.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if reps[j] ~= 1 then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if cards_destroyed[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local edition_effects = eval_card(_card, {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.jokers.cards + #G.consumeables.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local hand_space = e or math.min(#G.deck.cards, G.hand.config.card_limit - #G.hand.cards)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' and not scoring_hand[i].debuff and pseudorandom(\'glass\') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].card then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects.jokers.Xmult_mod then mult = mod_mult(mult*effects.jokers.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effect.Xmult_mod then mult = mod_mult(mult*effect.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].message then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern '--calculate the card edition effects' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].edition.p_dollars_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if edition_effects.jokers.x_mult_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if destroyed then \\n' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 62 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = localize(\'$\')..config.dollars, scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \'Cryptid\' then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \"Clearance Sale\" or _c.name == \"Liquidation\" then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'if v == \'negative_consumable\' then info_queue[#info_queue+1] = {key = \'e_negative_consumable\', set = \'Edition\', config = {extra = 1}} end' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 141 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end\n' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 65 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'self:calculate_joker{selling_self = true}' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name:find(\'Arcana\') then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Regex 'message = localize\\{type = \'variable\', key = \'a_xmult\', vars = \\{G.P_CENTERS.v_observatory.config.extra}},\\n\\s+Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'The Hermit\' or self.ability.consumeable.hand_type or self.ability.name == \'Temperance\' or self.ability.name == \'Black Hole\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.queue_negative_removal then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'elseif self.ability.name == \'Blueprint\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Blueprint\' or self.ability.name == \'Brainstorm\' then' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 227 patches to 'card.lua'
WARN - [♥] Pattern 'table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)' on target 'cardarea.lua' resulted in no matches
INFO - [♥] Applied 19 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:21:33 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:21:34 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:21:34 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:21:34 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:21:34 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnStable] - Starting Unstable
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Spades with the type suit_black
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Clubs with the type suit_black
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Hearts with the type suit_red
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Diamonds with the type suit_red
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Starting UnstableEX
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_???
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_e
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_0
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_161
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_r2
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_13
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_12
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_11
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_21
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_Pi
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_25
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_0.5
INFO - [G] 2025-02-11 01:21:34 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_1
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:21:34 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:21:34 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:21:34 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.729 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0065] Injected Atlas in 1309.479 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0029] Injected Sound in 19.334 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0032] Injected Stake in 0.852 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0008] Injected Rarity in 0.027 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0008] Injected ObjectType in 0.055 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0527] Injected Center in 2.581 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0012] Injected Undiscovered Sprite in 0.032 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0027] Injected Blind in 0.083 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0012] Injected Seal in 0.296 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0004] Injected Suit in 0.185 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0026] Injected Rank in 0.202 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0020] Injected DeckSkin in 0.186 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.293 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0031] Injected Challenge in 0.638 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0028] Injected Tag in 0.636 ms
INFO - [G] 2025-02-11 01:21:35 :: INFO :: TIMER :: [0009] Injected Sticker in 0.306 ms
INFO - [G] 2025-02-11 01:21:36 :: INFO :: TIMER :: [0009] Injected Shader in 50.625 ms
INFO - [G] 2025-02-11 01:21:36 :: INFO :: TIMER :: [0001] Injected Keybind in 0.005 ms
INFO - [G] 2025-02-11 01:21:36 :: INFO :: TIMER :: [0020] Injected Achievement in 0.104 ms
INFO - [G] 2025-02-11 01:21:36 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 12.730 ms
INFO - [G] 2025-02-11 01:21:36 :: INFO :: TIMER :: [0011] Injected Event in 0.014 ms
INFO - [G] 2025-02-11 01:21:36 :: DEBUG :: DefaultLogger :: [UnStable] - Initialize Remaining Previous Rank Data
INFO - [G] 2025-02-11 01:21:36 :: DEBUG :: DefaultLogger :: [UnStable] - Start initializing localization-independent info
INFO - [G] 2025-02-11 01:21:36 :: DEBUG :: DefaultLogger :: [UnStable] - Finished initializing localization-independent info
INFO - [G] 2025-02-11 01:21:36 :: DEBUG :: DefaultLogger :: [UnstableEX] - Inject new nominal code override for Cryptid
INFO - [G] 2025-02-11 01:21:36 :: DEBUG :: DefaultLogger :: [UnstableEX] - Inject Blind effects for Cryptid
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews

View file

@ -0,0 +1,326 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 125ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 35 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 13 patches to 'engine/controller.lua'
INFO - [♥] Applied 15 patches to 'back.lua'
INFO - [♥] Applied 15 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 48 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 85 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 110 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern '--calculate the card edition effects\nif effects[ii].edition then\n hand_chips = mod_chips(hand_chips + (effects[ii].edition.chip_mod or 0))\n mult = mult + (effects[ii].edition.mult_mod or 0)\n mult = mod_mult(mult*(effects[ii].edition.x_mult_mod or 1))\n update_hand_text({delay = 0}, {\n chips = effects[ii].edition.chip_mod and hand_chips or nil,\n mult = (effects[ii].edition.mult_mod or effects[ii].edition.x_mult_mod) and mult or nil,\n })\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, {\n message = (effects[ii].edition.chip_mod and localize{type=\'variable\',key=\'a_chips\',vars={effects[ii].edition.chip_mod}}) or\n (effects[ii].edition.mult_mod and localize{type=\'variable\',key=\'a_mult\',vars={effects[ii].edition.mult_mod}}) or\n (effects[ii].edition.x_mult_mod and localize{type=\'variable\',key=\'a_xmult\',vars={effects[ii].edition.x_mult_mod}}),\n chip_mod = effects[ii].edition.chip_mod,\n mult_mod = effects[ii].edition.mult_mod,\n x_mult_mod = effects[ii].edition.x_mult_mod,\n colour = G.C.DARK_EDITION,\n edition = true})\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern ' scoring_hand[i].lucky_trigger = nil\n\n for ii = 1, #effects do\n --If chips added, do chip add event and add the chips to the total\n if effects[ii].chips then \n if effects[ii].card then juice_card(effects[ii].card) end\n hand_chips = mod_chips(hand_chips + effects[ii].chips)\n update_hand_text({delay = 0}, {chips = hand_chips})\n card_eval_status_text(scoring_hand[i], \'chips\', effects[ii].chips, percent)\n end\n\n --If mult added, do mult add event and add the mult to the total\n if effects[ii].mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult + effects[ii].mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'mult\', effects[ii].mult, percent)\n end\n\n --If play dollars added, add dollars to total\n if effects[ii].p_dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].p_dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].p_dollars, percent)\n end\n\n --If dollars added, add dollars to total\n if effects[ii].dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].dollars, percent)\n end\n\n --Any extra effects\n if effects[ii].extra then \n if effects[ii].card then juice_card(effects[ii].card) end\n local extras = {mult = false, hand_chips = false}\n if effects[ii].extra.mult_mod then mult =mod_mult( mult + effects[ii].extra.mult_mod);extras.mult = true end\n if effects[ii].extra.chip_mod then hand_chips = mod_chips(hand_chips + effects[ii].extra.chip_mod);extras.hand_chips = true end\n if effects[ii].extra.swap then \n local old_mult = mult\n mult = mod_mult(hand_chips)\n hand_chips = mod_chips(old_mult)\n extras.hand_chips = true; extras.mult = true\n end\n if effects[ii].extra.func then effects[ii].extra.func() end\n update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, effects[ii].extra)\n end\n\n --If x_mult added, do mult add event and mult the mult to the total\n if effects[ii].x_mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult*effects[ii].x_mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)\n end\n\n\n end\n end\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local percent = (i-0.999)/(#G.hand.cards-0.998) + (j-1)*0.1' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.effect ~= \'Stone Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'G.GAME.cards_played[scoring_hand[i].base.value].suits[scoring_hand[i].base.suit] = true' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i = 1, #G.jokers.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(_card, \'jokers\', nil, percent, nil, effects.jokers)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(G.hand.cards[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.hand.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if reps[j] ~= 1 then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if cards_destroyed[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local edition_effects = eval_card(_card, {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.jokers.cards + #G.consumeables.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local hand_space = e or math.min(#G.deck.cards, G.hand.config.card_limit - #G.hand.cards)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' and not scoring_hand[i].debuff and pseudorandom(\'glass\') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].card then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects.jokers.Xmult_mod then mult = mod_mult(mult*effects.jokers.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effect.Xmult_mod then mult = mod_mult(mult*effect.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].message then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern '--calculate the card edition effects' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].edition.p_dollars_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if edition_effects.jokers.x_mult_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if destroyed then \\n' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 62 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = localize(\'$\')..config.dollars, scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \'Cryptid\' then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \"Clearance Sale\" or _c.name == \"Liquidation\" then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'if v == \'negative_consumable\' then info_queue[#info_queue+1] = {key = \'e_negative_consumable\', set = \'Edition\', config = {extra = 1}} end' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 141 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end\n' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 65 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'self:calculate_joker{selling_self = true}' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name:find(\'Arcana\') then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Regex 'message = localize\\{type = \'variable\', key = \'a_xmult\', vars = \\{G.P_CENTERS.v_observatory.config.extra}},\\n\\s+Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'The Hermit\' or self.ability.consumeable.hand_type or self.ability.name == \'Temperance\' or self.ability.name == \'Black Hole\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.queue_negative_removal then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'elseif self.ability.name == \'Blueprint\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Blueprint\' or self.ability.name == \'Brainstorm\' then' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 227 patches to 'card.lua'
WARN - [♥] Pattern 'table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)' on target 'cardarea.lua' resulted in no matches
INFO - [♥] Applied 19 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:22:02 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:22:03 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:22:03 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:22:03 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:22:03 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnStable] - Starting Unstable
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Spades with the type suit_black
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Clubs with the type suit_black
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Hearts with the type suit_red
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Diamonds with the type suit_red
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Starting UnstableEX
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_???
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_e
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_0
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_161
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_r2
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_13
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_12
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_11
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_21
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_Pi
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_25
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_0.5
INFO - [G] 2025-02-11 01:22:03 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_1
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:22:03 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:22:03 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:22:03 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.791 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0065] Injected Atlas in 1323.703 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0029] Injected Sound in 18.386 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0032] Injected Stake in 0.674 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0008] Injected Rarity in 0.040 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0008] Injected ObjectType in 0.068 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0527] Injected Center in 3.509 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0012] Injected Undiscovered Sprite in 0.023 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0027] Injected Blind in 0.044 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0012] Injected Seal in 0.402 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0004] Injected Suit in 0.155 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0026] Injected Rank in 0.223 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0020] Injected DeckSkin in 0.118 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.125 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0031] Injected Challenge in 0.057 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0028] Injected Tag in 0.058 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0009] Injected Sticker in 0.210 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0009] Injected Shader in 118.781 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0001] Injected Keybind in 0.005 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0020] Injected Achievement in 0.080 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 11.917 ms
INFO - [G] 2025-02-11 01:22:05 :: INFO :: TIMER :: [0011] Injected Event in 0.013 ms
INFO - [G] 2025-02-11 01:22:05 :: DEBUG :: DefaultLogger :: [UnStable] - Initialize Remaining Previous Rank Data
INFO - [G] 2025-02-11 01:22:05 :: DEBUG :: DefaultLogger :: [UnStable] - Start initializing localization-independent info
INFO - [G] 2025-02-11 01:22:05 :: DEBUG :: DefaultLogger :: [UnStable] - Finished initializing localization-independent info
INFO - [G] 2025-02-11 01:22:05 :: DEBUG :: DefaultLogger :: [UnstableEX] - Inject new nominal code override for Cryptid
INFO - [G] 2025-02-11 01:22:05 :: DEBUG :: DefaultLogger :: [UnstableEX] - Inject Blind effects for Cryptid
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:23:05 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS _ "src/utils.lua"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)
Stack Traceback
===============
(1) Lua upvalue 'orig' at file 'main.lua:756'
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\
"
(2) Lua local 'handler' at file 'console.lua:551' (from lovely module debugplus.console)
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
(4) global C function 'ipairs'
(5) Lua field 'calculate_context' at Steamodded file 'src/utils.lua:1344'
Local variables:
context = table: 0x087d2c40 {main_eval:true, buying_card:true, cardarea:table: 0x08951050, card:table: 0x0ab94cd0 (more...)}
return_table = nil
(for generator) = C function: builtin#6
(for state) = table: 0x087d2d50 {1:table: 0x08951050, 2:table: 0x08969998, 3:table: 0x0882bdc8}
(for control) = number: 1
_ = number: 1
area = table: 0x08951050 {click_offset:table: 0x085b4790, children:table: 0x08d7dcb8, shuffle_amt:0 (more...)}
(for generator) = C function: builtin#6
(for state) = table: 0x092b1000 {1:table: 0x0ab94cd0}
(for control) = number: 1
_ = number: 1
_card = table: 0x0ab94cd0 {added_to_deck:true, from_area:table: 0x13fe29d0, click_offset:table: 0x08c21190 (more...)}
eval = table: 0x087d2d98 {}
post = nil
effects = table: 0x087d36c8 {1:table: 0x087d2d98}
(6) Lua field 'func' at file 'functions/button_callbacks.lua:2487'
(7) Lua method 'handle' at file 'engine/event.lua:55'
Local variables:
self = table: 0x0bab9118 {start_timer:true, timer:TOTAL, blockable:true, trigger:after, func:function: 0x0bab90f0 (more...)}
_results = table: 0x0a0dda10 {blocking:true, pause_skip:false, time_done:true, completed:false}
(8) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x0a0dfdd8 {queue_last_processed:59.533333333331, queues:table: 0x0a0dfe00, queue_dt:0.016666666666667 (more...)}
dt = number: 0.00607273
forced = nil
(for generator) = C function: next
(for state) = table: 0x0a0dfe00 {unlock:table: 0x0a0dfe28, other:table: 0x0a0e02a0, tutorial:table: 0x0a0dfe78 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x0a0dfe50 {1:table: 0x09eeb660, 2:table: 0x0bab9118, 3:table: 0x089b3e68}
blocked = boolean: false
i = number: 2
results = table: 0x0a0dda10 {blocking:true, pause_skip:false, time_done:true, completed:false}
(9) Lua upvalue 'gameUpdateRef' at file 'game.lua:2740'
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
http_resp = nil
(10) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(11) Lua upvalue 'upd' at file 'main.lua:4094'
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(12) Lua upvalue 'upd' at file 'Items/Blinds.lua:1310' (from mod with id Cryptid)
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(13) Lua upvalue 'upd' at file 'Items/CodeCards.lua:4106' (from mod with id Cryptid)
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(14) Lua upvalue 'upd' at file 'Items/Decks.lua:429' (from mod with id Cryptid)
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(15) Lua upvalue 'upd' at file 'Items/MiscJokers.lua:6658' (from mod with id Cryptid)
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(16) Lua method 'update' at file 'Cryptid.lua:2948' (from mod with id Cryptid)
Local variables:
self = table: 0x042376f8 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x0861f7f0 (more...)}
dt = number: 0.00607273
(17) Lua upvalue 'love_update_ref' at file 'main.lua:1146'
Local variables:
dt = number: 0.00607273
(18) Lua upvalue 'oldupd' at file 'main.lua:3038'
Local variables:
dt = number: 0.00607273
(19) Lua field 'update' at file 'main.lua:4121'
Local variables:
dt = number: 0.00607273
(20) Lua function '?' at file 'main.lua:1079' (best guess)
(21) global C function 'xpcall'
(22) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 1050 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:23:05 :: INFO :: StackTrace :: Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1410b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Steamodded Mods:
1: J Cursor by Jie65535, MarioMak967 [ID: JCursor]
2: Cryptid by MathIsFun_, Cryptid and Balatro Discords [ID: Cryptid, Priority: 1e+299, Version: 0.5.3a, Uses Lovely]
3: UnStableEX by Kirbio [ID: UnStableEX, Priority: 99999, Version: 0.2.2a]
4: UnStable by Kirbio, RamChops Games [ID: UnStable, Priority: 777, Version: 1.1.2a, Uses Lovely]
5: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
6: Cartomancer by stupxd aka stupid [ID: cartomancer, Priority: 69, Version: 4.10, Uses Lovely]
7: Handy by SleepyG11 [ID: Handy, Version: 1.1.5, Uses Lovely]
8: Incantation by jenwalter666, MathIsFun_ [ID: incantation, Priority: 9e+301, Version: 0.5.10, Uses Lovely]
9: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods:

View file

@ -0,0 +1,326 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 145ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 35 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 13 patches to 'engine/controller.lua'
INFO - [♥] Applied 15 patches to 'back.lua'
INFO - [♥] Applied 15 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 48 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 85 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 110 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern '--calculate the card edition effects\nif effects[ii].edition then\n hand_chips = mod_chips(hand_chips + (effects[ii].edition.chip_mod or 0))\n mult = mult + (effects[ii].edition.mult_mod or 0)\n mult = mod_mult(mult*(effects[ii].edition.x_mult_mod or 1))\n update_hand_text({delay = 0}, {\n chips = effects[ii].edition.chip_mod and hand_chips or nil,\n mult = (effects[ii].edition.mult_mod or effects[ii].edition.x_mult_mod) and mult or nil,\n })\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, {\n message = (effects[ii].edition.chip_mod and localize{type=\'variable\',key=\'a_chips\',vars={effects[ii].edition.chip_mod}}) or\n (effects[ii].edition.mult_mod and localize{type=\'variable\',key=\'a_mult\',vars={effects[ii].edition.mult_mod}}) or\n (effects[ii].edition.x_mult_mod and localize{type=\'variable\',key=\'a_xmult\',vars={effects[ii].edition.x_mult_mod}}),\n chip_mod = effects[ii].edition.chip_mod,\n mult_mod = effects[ii].edition.mult_mod,\n x_mult_mod = effects[ii].edition.x_mult_mod,\n colour = G.C.DARK_EDITION,\n edition = true})\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern ' scoring_hand[i].lucky_trigger = nil\n\n for ii = 1, #effects do\n --If chips added, do chip add event and add the chips to the total\n if effects[ii].chips then \n if effects[ii].card then juice_card(effects[ii].card) end\n hand_chips = mod_chips(hand_chips + effects[ii].chips)\n update_hand_text({delay = 0}, {chips = hand_chips})\n card_eval_status_text(scoring_hand[i], \'chips\', effects[ii].chips, percent)\n end\n\n --If mult added, do mult add event and add the mult to the total\n if effects[ii].mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult + effects[ii].mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'mult\', effects[ii].mult, percent)\n end\n\n --If play dollars added, add dollars to total\n if effects[ii].p_dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].p_dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].p_dollars, percent)\n end\n\n --If dollars added, add dollars to total\n if effects[ii].dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].dollars, percent)\n end\n\n --Any extra effects\n if effects[ii].extra then \n if effects[ii].card then juice_card(effects[ii].card) end\n local extras = {mult = false, hand_chips = false}\n if effects[ii].extra.mult_mod then mult =mod_mult( mult + effects[ii].extra.mult_mod);extras.mult = true end\n if effects[ii].extra.chip_mod then hand_chips = mod_chips(hand_chips + effects[ii].extra.chip_mod);extras.hand_chips = true end\n if effects[ii].extra.swap then \n local old_mult = mult\n mult = mod_mult(hand_chips)\n hand_chips = mod_chips(old_mult)\n extras.hand_chips = true; extras.mult = true\n end\n if effects[ii].extra.func then effects[ii].extra.func() end\n update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, effects[ii].extra)\n end\n\n --If x_mult added, do mult add event and mult the mult to the total\n if effects[ii].x_mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult*effects[ii].x_mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)\n end\n\n\n end\n end\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local percent = (i-0.999)/(#G.hand.cards-0.998) + (j-1)*0.1' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.effect ~= \'Stone Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'G.GAME.cards_played[scoring_hand[i].base.value].suits[scoring_hand[i].base.suit] = true' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i = 1, #G.jokers.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(_card, \'jokers\', nil, percent, nil, effects.jokers)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(G.hand.cards[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.hand.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if reps[j] ~= 1 then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if cards_destroyed[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local edition_effects = eval_card(_card, {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.jokers.cards + #G.consumeables.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local hand_space = e or math.min(#G.deck.cards, G.hand.config.card_limit - #G.hand.cards)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' and not scoring_hand[i].debuff and pseudorandom(\'glass\') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].card then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects.jokers.Xmult_mod then mult = mod_mult(mult*effects.jokers.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effect.Xmult_mod then mult = mod_mult(mult*effect.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].message then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern '--calculate the card edition effects' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].edition.p_dollars_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if edition_effects.jokers.x_mult_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if destroyed then \\n' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 62 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = localize(\'$\')..config.dollars, scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \'Cryptid\' then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \"Clearance Sale\" or _c.name == \"Liquidation\" then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'if v == \'negative_consumable\' then info_queue[#info_queue+1] = {key = \'e_negative_consumable\', set = \'Edition\', config = {extra = 1}} end' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 141 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end\n' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 65 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'self:calculate_joker{selling_self = true}' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name:find(\'Arcana\') then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Regex 'message = localize\\{type = \'variable\', key = \'a_xmult\', vars = \\{G.P_CENTERS.v_observatory.config.extra}},\\n\\s+Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'The Hermit\' or self.ability.consumeable.hand_type or self.ability.name == \'Temperance\' or self.ability.name == \'Black Hole\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.queue_negative_removal then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'elseif self.ability.name == \'Blueprint\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Blueprint\' or self.ability.name == \'Brainstorm\' then' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 227 patches to 'card.lua'
WARN - [♥] Pattern 'table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)' on target 'cardarea.lua' resulted in no matches
INFO - [♥] Applied 19 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:23:22 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:23:23 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:23:23 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:23:23 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:23:23 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnStable] - Starting Unstable
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Spades with the type suit_black
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Clubs with the type suit_black
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Hearts with the type suit_red
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [Unstable_Suit] - Registering suit: Diamonds with the type suit_red
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Starting UnstableEX
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_???
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_e
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_0
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_161
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_r2
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_13
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_12
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_11
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_21
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_Pi
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_25
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_0.5
INFO - [G] 2025-02-11 01:23:23 :: DEBUG :: DefaultLogger :: [UnstableEX] - Injecting the graphic for rank unstb_1
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:23:23 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:23:23 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:23:23 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.723 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0065] Injected Atlas in 1293.110 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0029] Injected Sound in 18.756 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0032] Injected Stake in 0.799 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0008] Injected Rarity in 0.018 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0008] Injected ObjectType in 0.075 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0527] Injected Center in 2.810 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0012] Injected Undiscovered Sprite in 0.009 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0027] Injected Blind in 0.040 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0012] Injected Seal in 0.351 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0004] Injected Suit in 0.139 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0026] Injected Rank in 0.107 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0020] Injected DeckSkin in 0.178 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.105 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0031] Injected Challenge in 0.068 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0028] Injected Tag in 0.075 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0009] Injected Sticker in 0.118 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0009] Injected Shader in 52.104 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0001] Injected Keybind in 0.019 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0020] Injected Achievement in 0.067 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 12.056 ms
INFO - [G] 2025-02-11 01:23:24 :: INFO :: TIMER :: [0011] Injected Event in 0.012 ms
INFO - [G] 2025-02-11 01:23:24 :: DEBUG :: DefaultLogger :: [UnStable] - Initialize Remaining Previous Rank Data
INFO - [G] 2025-02-11 01:23:24 :: DEBUG :: DefaultLogger :: [UnStable] - Start initializing localization-independent info
INFO - [G] 2025-02-11 01:23:24 :: DEBUG :: DefaultLogger :: [UnStable] - Finished initializing localization-independent info
INFO - [G] 2025-02-11 01:23:24 :: DEBUG :: DefaultLogger :: [UnstableEX] - Inject new nominal code override for Cryptid
INFO - [G] 2025-02-11 01:23:24 :: DEBUG :: DefaultLogger :: [UnstableEX] - Inject Blind effects for Cryptid
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:24:19 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS _ "src/utils.lua"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)
Stack Traceback
===============
(1) Lua upvalue 'orig' at file 'main.lua:756'
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\
"
(2) Lua local 'handler' at file 'console.lua:551' (from lovely module debugplus.console)
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
(4) global C function 'ipairs'
(5) Lua field 'calculate_context' at Steamodded file 'src/utils.lua:1344'
Local variables:
context = table: 0x08849928 {main_eval:true, buying_card:true, cardarea:table: 0x097683b0, card:table: 0x087620f0 (more...)}
return_table = nil
(for generator) = C function: builtin#6
(for state) = table: 0x046227c8 {1:table: 0x097683b0, 2:table: 0x06749e98, 3:table: 0x067f2050}
(for control) = number: 1
_ = number: 1
area = table: 0x097683b0 {click_offset:table: 0x099e1010, children:table: 0x099e1180, shuffle_amt:0 (more...)}
(for generator) = C function: builtin#6
(for state) = table: 0x099e1158 {1:table: 0x087620f0}
(for control) = number: 1
_ = number: 1
_card = table: 0x087620f0 {added_to_deck:true, from_area:table: 0x0a793f10, click_offset:table: 0x08762498 (more...)}
eval = table: 0x04622810 {}
post = nil
effects = table: 0x04fb4280 {1:table: 0x04622810}
(6) Lua field 'func' at file 'functions/button_callbacks.lua:2487'
(7) Lua method 'handle' at file 'engine/event.lua:55'
Local variables:
self = table: 0x0a783800 {start_timer:true, timer:TOTAL, blockable:true, trigger:after, func:function: 0x10b8a300 (more...)}
_results = table: 0x14613508 {blocking:true, pause_skip:false, time_done:true, completed:false}
(8) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x0a0c6d40 {queue_last_processed:54.716666666665, queues:table: 0x0a0c6d68, queue_dt:0.016666666666667 (more...)}
dt = number: 0.00607149
forced = nil
(for generator) = C function: next
(for state) = table: 0x0a0c6d68 {unlock:table: 0x0a0c6d90, other:table: 0x0a0c7208, tutorial:table: 0x0a0c6de0 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x0a0c6db8 {1:table: 0x08fe8578, 2:table: 0x0a783800, 3:table: 0x0db7e358}
blocked = boolean: false
i = number: 2
results = table: 0x14613508 {blocking:true, pause_skip:false, time_done:true, completed:false}
(9) Lua upvalue 'gameUpdateRef' at file 'game.lua:2740'
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
http_resp = nil
(10) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(11) Lua upvalue 'upd' at file 'main.lua:4094'
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(12) Lua upvalue 'upd' at file 'Items/Blinds.lua:1310' (from mod with id Cryptid)
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(13) Lua upvalue 'upd' at file 'Items/CodeCards.lua:4106' (from mod with id Cryptid)
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(14) Lua upvalue 'upd' at file 'Items/Decks.lua:429' (from mod with id Cryptid)
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(15) Lua upvalue 'upd' at file 'Items/MiscJokers.lua:6658' (from mod with id Cryptid)
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(16) Lua method 'update' at file 'Cryptid.lua:2948' (from mod with id Cryptid)
Local variables:
self = table: 0x042273c0 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x13e72bd0 (more...)}
dt = number: 0.00607149
(17) Lua upvalue 'love_update_ref' at file 'main.lua:1146'
Local variables:
dt = number: 0.00607149
(18) Lua upvalue 'oldupd' at file 'main.lua:3038'
Local variables:
dt = number: 0.00607149
(19) Lua field 'update' at file 'main.lua:4121'
Local variables:
dt = number: 0.00607149
(20) Lua function '?' at file 'main.lua:1079' (best guess)
(21) global C function 'xpcall'
(22) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 1050 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:24:19 :: INFO :: StackTrace :: Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1410b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Steamodded Mods:
1: J Cursor by Jie65535, MarioMak967 [ID: JCursor]
2: Cryptid by MathIsFun_, Cryptid and Balatro Discords [ID: Cryptid, Priority: 1e+299, Version: 0.5.3a, Uses Lovely]
3: UnStableEX by Kirbio [ID: UnStableEX, Priority: 99999, Version: 0.2.2a]
4: UnStable by Kirbio, RamChops Games [ID: UnStable, Priority: 777, Version: 1.1.2a, Uses Lovely]
5: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
6: Cartomancer by stupxd aka stupid [ID: cartomancer, Priority: 69, Version: 4.10, Uses Lovely]
7: Handy by SleepyG11 [ID: Handy, Version: 1.1.5, Uses Lovely]
8: Incantation by jenwalter666, MathIsFun_ [ID: incantation, Priority: 9e+301, Version: 0.5.10, Uses Lovely]
9: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods:

View file

@ -0,0 +1,298 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 134ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 35 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 13 patches to 'engine/controller.lua'
INFO - [♥] Applied 15 patches to 'back.lua'
INFO - [♥] Applied 15 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 48 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 84 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 110 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern '--calculate the card edition effects\nif effects[ii].edition then\n hand_chips = mod_chips(hand_chips + (effects[ii].edition.chip_mod or 0))\n mult = mult + (effects[ii].edition.mult_mod or 0)\n mult = mod_mult(mult*(effects[ii].edition.x_mult_mod or 1))\n update_hand_text({delay = 0}, {\n chips = effects[ii].edition.chip_mod and hand_chips or nil,\n mult = (effects[ii].edition.mult_mod or effects[ii].edition.x_mult_mod) and mult or nil,\n })\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, {\n message = (effects[ii].edition.chip_mod and localize{type=\'variable\',key=\'a_chips\',vars={effects[ii].edition.chip_mod}}) or\n (effects[ii].edition.mult_mod and localize{type=\'variable\',key=\'a_mult\',vars={effects[ii].edition.mult_mod}}) or\n (effects[ii].edition.x_mult_mod and localize{type=\'variable\',key=\'a_xmult\',vars={effects[ii].edition.x_mult_mod}}),\n chip_mod = effects[ii].edition.chip_mod,\n mult_mod = effects[ii].edition.mult_mod,\n x_mult_mod = effects[ii].edition.x_mult_mod,\n colour = G.C.DARK_EDITION,\n edition = true})\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern ' scoring_hand[i].lucky_trigger = nil\n\n for ii = 1, #effects do\n --If chips added, do chip add event and add the chips to the total\n if effects[ii].chips then \n if effects[ii].card then juice_card(effects[ii].card) end\n hand_chips = mod_chips(hand_chips + effects[ii].chips)\n update_hand_text({delay = 0}, {chips = hand_chips})\n card_eval_status_text(scoring_hand[i], \'chips\', effects[ii].chips, percent)\n end\n\n --If mult added, do mult add event and add the mult to the total\n if effects[ii].mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult + effects[ii].mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'mult\', effects[ii].mult, percent)\n end\n\n --If play dollars added, add dollars to total\n if effects[ii].p_dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].p_dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].p_dollars, percent)\n end\n\n --If dollars added, add dollars to total\n if effects[ii].dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].dollars, percent)\n end\n\n --Any extra effects\n if effects[ii].extra then \n if effects[ii].card then juice_card(effects[ii].card) end\n local extras = {mult = false, hand_chips = false}\n if effects[ii].extra.mult_mod then mult =mod_mult( mult + effects[ii].extra.mult_mod);extras.mult = true end\n if effects[ii].extra.chip_mod then hand_chips = mod_chips(hand_chips + effects[ii].extra.chip_mod);extras.hand_chips = true end\n if effects[ii].extra.swap then \n local old_mult = mult\n mult = mod_mult(hand_chips)\n hand_chips = mod_chips(old_mult)\n extras.hand_chips = true; extras.mult = true\n end\n if effects[ii].extra.func then effects[ii].extra.func() end\n update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, effects[ii].extra)\n end\n\n --If x_mult added, do mult add event and mult the mult to the total\n if effects[ii].x_mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult*effects[ii].x_mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)\n end\n\n\n end\n end\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local percent = (i-0.999)/(#G.hand.cards-0.998) + (j-1)*0.1' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.effect ~= \'Stone Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'G.GAME.cards_played[scoring_hand[i].base.value].suits[scoring_hand[i].base.suit] = true' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i = 1, #G.jokers.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(_card, \'jokers\', nil, percent, nil, effects.jokers)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(G.hand.cards[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.hand.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if reps[j] ~= 1 then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if cards_destroyed[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local edition_effects = eval_card(_card, {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.jokers.cards + #G.consumeables.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local hand_space = e or math.min(#G.deck.cards, G.hand.config.card_limit - #G.hand.cards)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' and not scoring_hand[i].debuff and pseudorandom(\'glass\') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].card then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects.jokers.Xmult_mod then mult = mod_mult(mult*effects.jokers.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effect.Xmult_mod then mult = mod_mult(mult*effect.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].message then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern '--calculate the card edition effects' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].edition.p_dollars_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if edition_effects.jokers.x_mult_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if destroyed then \\n' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 61 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = localize(\'$\')..config.dollars, scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \'Cryptid\' then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \"Clearance Sale\" or _c.name == \"Liquidation\" then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'if v == \'negative_consumable\' then info_queue[#info_queue+1] = {key = \'e_negative_consumable\', set = \'Edition\', config = {extra = 1}} end' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 139 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end\n' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 63 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'self:calculate_joker{selling_self = true}' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name:find(\'Arcana\') then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Regex 'message = localize\\{type = \'variable\', key = \'a_xmult\', vars = \\{G.P_CENTERS.v_observatory.config.extra}},\\n\\s+Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'The Hermit\' or self.ability.consumeable.hand_type or self.ability.name == \'Temperance\' or self.ability.name == \'Black Hole\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.queue_negative_removal then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 223 patches to 'card.lua'
WARN - [♥] Pattern 'table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)' on target 'cardarea.lua' resulted in no matches
INFO - [♥] Applied 19 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:25:02 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:25:03 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:25:03 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:25:03 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:25:03 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:25:03 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:25:03 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.861 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0032] Injected Atlas in 791.179 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0026] Injected Sound in 17.836 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0032] Injected Stake in 0.832 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0008] Injected Rarity in 0.038 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.052 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0393] Injected Center in 2.042 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.009 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0027] Injected Blind in 0.051 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0006] Injected Seal in 0.295 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0004] Injected Suit in 0.102 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0013] Injected Rank in 0.064 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0020] Injected DeckSkin in 0.148 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.097 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0031] Injected Challenge in 0.034 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0028] Injected Tag in 0.111 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0009] Injected Sticker in 0.156 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0009] Injected Shader in 55.077 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0001] Injected Keybind in 0.005 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0020] Injected Achievement in 0.068 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.540 ms
INFO - [G] 2025-02-11 01:25:04 :: INFO :: TIMER :: [0011] Injected Event in 0.014 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] ERROR LOADING GAME: Card area 'shop_booster' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_vouchers' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_jokers' not instantiated before load
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:25:13 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS _ "src/utils.lua"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)
Stack Traceback
===============
(1) Lua upvalue 'orig' at file 'main.lua:756'
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\
"
(2) Lua local 'handler' at file 'console.lua:551' (from lovely module debugplus.console)
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
(4) global C function 'ipairs'
(5) Lua field 'calculate_context' at Steamodded file 'src/utils.lua:1344'
Local variables:
context = table: 0x0607fda0 {main_eval:true, buying_card:true, cardarea:table: 0x14235fe8, card:table: 0x04360488 (more...)}
return_table = nil
(for generator) = C function: builtin#6
(for state) = table: 0x0607fe30 {1:table: 0x14235fe8, 2:table: 0x14222340, 3:table: 0x1969f1d8}
(for control) = number: 1
_ = number: 1
area = table: 0x14235fe8 {click_offset:table: 0x14236358, children:table: 0x0450f6b0, shuffle_amt:0 (more...)}
(for generator) = C function: builtin#6
(for state) = table: 0x0450f688 {1:table: 0x04360488}
(for control) = number: 1
_ = number: 1
_card = table: 0x04360488 {added_to_deck:true, from_area:table: 0x0628ccf8, click_offset:table: 0x1bdd8720 (more...)}
eval = table: 0x0607fe78 {}
post = nil
effects = table: 0x13aaac08 {1:table: 0x0607fe78}
(6) Lua field 'func' at file 'functions/button_callbacks.lua:2480'
(7) Lua method 'handle' at file 'engine/event.lua:55'
Local variables:
self = table: 0x044e9e20 {start_timer:true, timer:TOTAL, blockable:true, trigger:after, func:function: 0x044e9df8 (more...)}
_results = table: 0x0419aa68 {blocking:true, pause_skip:false, time_done:true, completed:false}
(8) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x09c988e8 {queue_last_processed:9.1833333333334, queues:table: 0x09c98910, queue_dt:0.016666666666667 (more...)}
dt = number: 0.00606218
forced = nil
(for generator) = C function: next
(for state) = table: 0x09c98910 {unlock:table: 0x09c98938, other:table: 0x09c98db0, tutorial:table: 0x09c98988 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x09c98960 {1:table: 0x13acfe10, 2:table: 0x044e9e20, 3:table: 0x0bdff4c8}
blocked = boolean: false
i = number: 2
results = table: 0x0419aa68 {blocking:true, pause_skip:false, time_done:true, completed:false}
(9) Lua upvalue 'gameUpdateRef' at file 'game.lua:2739'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
http_resp = nil
(10) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(11) Lua upvalue 'upd' at file 'main.lua:4094'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(12) Lua upvalue 'upd' at file 'Items/Blinds.lua:1310' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(13) Lua upvalue 'upd' at file 'Items/CodeCards.lua:4106' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(14) Lua upvalue 'upd' at file 'Items/Decks.lua:429' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(15) Lua upvalue 'upd' at file 'Items/MiscJokers.lua:6658' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(16) Lua method 'update' at file 'Cryptid.lua:2948' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x06408c98 (more...)}
dt = number: 0.00606218
(17) Lua upvalue 'love_update_ref' at file 'main.lua:1146'
Local variables:
dt = number: 0.00606218
(18) Lua upvalue 'oldupd' at file 'main.lua:3038'
Local variables:
dt = number: 0.00606218
(19) Lua field 'update' at file 'main.lua:4121'
Local variables:
dt = number: 0.00606218
(20) Lua function '?' at file 'main.lua:1079' (best guess)
(21) global C function 'xpcall'
(22) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 1050 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:25:13 :: INFO :: StackTrace :: Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1410b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Steamodded Mods:
1: J Cursor by Jie65535, MarioMak967 [ID: JCursor]
2: Cryptid by MathIsFun_, Cryptid and Balatro Discords [ID: Cryptid, Priority: 1e+299, Version: 0.5.3a, Uses Lovely]
3: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
4: Cartomancer by stupxd aka stupid [ID: cartomancer, Priority: 69, Version: 4.10, Uses Lovely]
5: Handy by SleepyG11 [ID: Handy, Version: 1.1.5, Uses Lovely]
6: Incantation by jenwalter666, MathIsFun_ [ID: incantation, Priority: 9e+301, Version: 0.5.10, Uses Lovely]
7: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods:

View file

@ -0,0 +1,298 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 172ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 35 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 13 patches to 'engine/controller.lua'
INFO - [♥] Applied 15 patches to 'back.lua'
INFO - [♥] Applied 15 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 48 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 84 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 110 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern '--calculate the card edition effects\nif effects[ii].edition then\n hand_chips = mod_chips(hand_chips + (effects[ii].edition.chip_mod or 0))\n mult = mult + (effects[ii].edition.mult_mod or 0)\n mult = mod_mult(mult*(effects[ii].edition.x_mult_mod or 1))\n update_hand_text({delay = 0}, {\n chips = effects[ii].edition.chip_mod and hand_chips or nil,\n mult = (effects[ii].edition.mult_mod or effects[ii].edition.x_mult_mod) and mult or nil,\n })\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, {\n message = (effects[ii].edition.chip_mod and localize{type=\'variable\',key=\'a_chips\',vars={effects[ii].edition.chip_mod}}) or\n (effects[ii].edition.mult_mod and localize{type=\'variable\',key=\'a_mult\',vars={effects[ii].edition.mult_mod}}) or\n (effects[ii].edition.x_mult_mod and localize{type=\'variable\',key=\'a_xmult\',vars={effects[ii].edition.x_mult_mod}}),\n chip_mod = effects[ii].edition.chip_mod,\n mult_mod = effects[ii].edition.mult_mod,\n x_mult_mod = effects[ii].edition.x_mult_mod,\n colour = G.C.DARK_EDITION,\n edition = true})\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern ' scoring_hand[i].lucky_trigger = nil\n\n for ii = 1, #effects do\n --If chips added, do chip add event and add the chips to the total\n if effects[ii].chips then \n if effects[ii].card then juice_card(effects[ii].card) end\n hand_chips = mod_chips(hand_chips + effects[ii].chips)\n update_hand_text({delay = 0}, {chips = hand_chips})\n card_eval_status_text(scoring_hand[i], \'chips\', effects[ii].chips, percent)\n end\n\n --If mult added, do mult add event and add the mult to the total\n if effects[ii].mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult + effects[ii].mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'mult\', effects[ii].mult, percent)\n end\n\n --If play dollars added, add dollars to total\n if effects[ii].p_dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].p_dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].p_dollars, percent)\n end\n\n --If dollars added, add dollars to total\n if effects[ii].dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].dollars, percent)\n end\n\n --Any extra effects\n if effects[ii].extra then \n if effects[ii].card then juice_card(effects[ii].card) end\n local extras = {mult = false, hand_chips = false}\n if effects[ii].extra.mult_mod then mult =mod_mult( mult + effects[ii].extra.mult_mod);extras.mult = true end\n if effects[ii].extra.chip_mod then hand_chips = mod_chips(hand_chips + effects[ii].extra.chip_mod);extras.hand_chips = true end\n if effects[ii].extra.swap then \n local old_mult = mult\n mult = mod_mult(hand_chips)\n hand_chips = mod_chips(old_mult)\n extras.hand_chips = true; extras.mult = true\n end\n if effects[ii].extra.func then effects[ii].extra.func() end\n update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, effects[ii].extra)\n end\n\n --If x_mult added, do mult add event and mult the mult to the total\n if effects[ii].x_mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult*effects[ii].x_mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)\n end\n\n\n end\n end\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local percent = (i-0.999)/(#G.hand.cards-0.998) + (j-1)*0.1' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.effect ~= \'Stone Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'G.GAME.cards_played[scoring_hand[i].base.value].suits[scoring_hand[i].base.suit] = true' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i = 1, #G.jokers.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(_card, \'jokers\', nil, percent, nil, effects.jokers)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(G.hand.cards[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.hand.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if reps[j] ~= 1 then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if cards_destroyed[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local edition_effects = eval_card(_card, {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.jokers.cards + #G.consumeables.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local hand_space = e or math.min(#G.deck.cards, G.hand.config.card_limit - #G.hand.cards)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' and not scoring_hand[i].debuff and pseudorandom(\'glass\') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].card then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects.jokers.Xmult_mod then mult = mod_mult(mult*effects.jokers.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effect.Xmult_mod then mult = mod_mult(mult*effect.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].message then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern '--calculate the card edition effects' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].edition.p_dollars_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if edition_effects.jokers.x_mult_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if destroyed then \\n' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 61 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = localize(\'$\')..config.dollars, scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \'Cryptid\' then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \"Clearance Sale\" or _c.name == \"Liquidation\" then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'if v == \'negative_consumable\' then info_queue[#info_queue+1] = {key = \'e_negative_consumable\', set = \'Edition\', config = {extra = 1}} end' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 139 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end\n' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 63 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'self:calculate_joker{selling_self = true}' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name:find(\'Arcana\') then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Regex 'message = localize\\{type = \'variable\', key = \'a_xmult\', vars = \\{G.P_CENTERS.v_observatory.config.extra}},\\n\\s+Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'The Hermit\' or self.ability.consumeable.hand_type or self.ability.name == \'Temperance\' or self.ability.name == \'Black Hole\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.queue_negative_removal then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 223 patches to 'card.lua'
WARN - [♥] Pattern 'table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)' on target 'cardarea.lua' resulted in no matches
INFO - [♥] Applied 19 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:26:37 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:26:38 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:26:38 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:26:38 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:26:38 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:26:38 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:26:38 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.719 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0032] Injected Atlas in 781.089 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0026] Injected Sound in 17.477 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0032] Injected Stake in 0.616 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0008] Injected Rarity in 0.040 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.043 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0393] Injected Center in 1.956 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.009 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0027] Injected Blind in 0.093 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0006] Injected Seal in 0.181 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0004] Injected Suit in 0.071 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0013] Injected Rank in 0.059 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0020] Injected DeckSkin in 0.280 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.122 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0031] Injected Challenge in 0.190 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0028] Injected Tag in 0.339 ms
INFO - [G] 2025-02-11 01:26:39 :: INFO :: TIMER :: [0009] Injected Sticker in 0.682 ms
INFO - [G] 2025-02-11 01:26:40 :: INFO :: TIMER :: [0009] Injected Shader in 802.807 ms
INFO - [G] 2025-02-11 01:26:40 :: INFO :: TIMER :: [0001] Injected Keybind in 0.027 ms
INFO - [G] 2025-02-11 01:26:40 :: INFO :: TIMER :: [0020] Injected Achievement in 0.069 ms
INFO - [G] 2025-02-11 01:26:40 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.255 ms
INFO - [G] 2025-02-11 01:26:40 :: INFO :: TIMER :: [0011] Injected Event in 0.009 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] ERROR LOADING GAME: Card area 'shop_booster' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_vouchers' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_jokers' not instantiated before load
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:26:56 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS _ "src/utils.lua"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)
Stack Traceback
===============
(1) Lua upvalue 'orig' at file 'main.lua:756'
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\
"
(2) Lua local 'handler' at file 'console.lua:551' (from lovely module debugplus.console)
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
(4) global C function 'ipairs'
(5) Lua field 'calculate_context' at Steamodded file 'src/utils.lua:1344'
Local variables:
context = table: 0x0edc71a0 {main_eval:true, buying_card:true, cardarea:table: 0x144fe080, card:table: 0x0bee5fa8 (more...)}
return_table = nil
(for generator) = C function: builtin#6
(for state) = table: 0x0edc7268 {1:table: 0x144fe080, 2:table: 0x1aab2a88, 3:table: 0x14533560}
(for control) = number: 1
_ = number: 1
area = table: 0x144fe080 {click_offset:table: 0x14588450, children:table: 0x13ddc268, shuffle_amt:0 (more...)}
(for generator) = C function: builtin#6
(for state) = table: 0x04661b28 {1:table: 0x0bee5fa8}
(for control) = number: 1
_ = number: 1
_card = table: 0x0bee5fa8 {added_to_deck:true, from_area:table: 0x0449ef68, click_offset:table: 0x04fbf8a0 (more...)}
eval = table: 0x0edc72b0 {}
post = nil
effects = table: 0x0bed8b18 {1:table: 0x0edc72b0}
(6) Lua field 'func' at file 'functions/button_callbacks.lua:2480'
(7) Lua method 'handle' at file 'engine/event.lua:55'
Local variables:
self = table: 0x09cb36e0 {start_timer:true, timer:TOTAL, blockable:true, trigger:after, func:function: 0x09cb36b8 (more...)}
_results = table: 0x050450d0 {blocking:true, pause_skip:false, time_done:true, completed:false}
(8) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x0b018a58 {queue_last_processed:15.633333333334, queues:table: 0x0b018a80, queue_dt:0.016666666666667 (more...)}
dt = number: 0.00608305
forced = nil
(for generator) = C function: next
(for state) = table: 0x0b018a80 {unlock:table: 0x0b018aa8, other:table: 0x0b018f20, tutorial:table: 0x0b018af8 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x0b018ad0 {1:table: 0x144f0dc0, 2:table: 0x09cb36e0, 3:table: 0x0edc7178}
blocked = boolean: false
i = number: 2
results = table: 0x050450d0 {blocking:true, pause_skip:false, time_done:true, completed:false}
(9) Lua upvalue 'gameUpdateRef' at file 'game.lua:2739'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
http_resp = nil
(10) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(11) Lua upvalue 'upd' at file 'main.lua:4094'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(12) Lua upvalue 'upd' at file 'Items/Blinds.lua:1310' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(13) Lua upvalue 'upd' at file 'Items/CodeCards.lua:4106' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(14) Lua upvalue 'upd' at file 'Items/Decks.lua:429' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(15) Lua upvalue 'upd' at file 'Items/MiscJokers.lua:6658' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(16) Lua method 'update' at file 'Cryptid.lua:2948' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x1170d808 (more...)}
dt = number: 0.00608305
(17) Lua upvalue 'love_update_ref' at file 'main.lua:1146'
Local variables:
dt = number: 0.00608305
(18) Lua upvalue 'oldupd' at file 'main.lua:3038'
Local variables:
dt = number: 0.00608305
(19) Lua field 'update' at file 'main.lua:4121'
Local variables:
dt = number: 0.00608305
(20) Lua function '?' at file 'main.lua:1079' (best guess)
(21) global C function 'xpcall'
(22) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 1050 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:26:56 :: INFO :: StackTrace :: Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1410b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Steamodded Mods:
1: J Cursor by Jie65535, MarioMak967 [ID: JCursor]
2: Cryptid by MathIsFun_, Cryptid and Balatro Discords [ID: Cryptid, Priority: 1e+299, Version: 0.5.3a, Uses Lovely]
3: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
4: Cartomancer by stupxd aka stupid [ID: cartomancer, Priority: 69, Version: 4.10, Uses Lovely]
5: Handy by SleepyG11 [ID: Handy, Version: 1.1.5, Uses Lovely]
6: Incantation by jenwalter666, MathIsFun_ [ID: incantation, Priority: 9e+301, Version: 0.5.10, Uses Lovely]
7: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods:

View file

@ -0,0 +1,132 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 133ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 30 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 12 patches to 'engine/controller.lua'
INFO - [♥] Applied 13 patches to 'back.lua'
INFO - [♥] Applied 14 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 46 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 82 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 118 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 98 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'local cfg = (card and card.ability) or _c[\'config\']' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if G\\.F_NO_ACHIEVEMENTS then return end\\n[\\s\\S][\\s\\S]{16}--\\|LOCAL SETTINGS FILE' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 124 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'G.pack_cards:emplace(v)' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 53 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 206 patches to 'card.lua'
INFO - [♥] Applied 20 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:27:26 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:27:27 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:27:27 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:27:27 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:27:27 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:27:27 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:27:27 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.767 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0032] Injected Atlas in 784.495 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0025] Injected Sound in 20.943 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0032] Injected Stake in 0.580 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0008] Injected Rarity in 0.045 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.058 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0392] Injected Center in 2.721 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.026 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0027] Injected Blind in 0.048 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0002] Injected Seal in 0.060 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0004] Injected Suit in 0.060 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0013] Injected Rank in 0.062 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0016] Injected DeckSkin in 0.030 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.138 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0031] Injected Challenge in 0.128 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0028] Injected Tag in 0.254 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0009] Injected Sticker in 0.852 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0009] Injected Shader in 125.826 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0000] Injected Keybind in 0.001 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0020] Injected Achievement in 0.133 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.643 ms
INFO - [G] 2025-02-11 01:27:28 :: INFO :: TIMER :: [0011] Injected Event in 0.018 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] ERROR LOADING GAME: Card area 'shop_booster' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_vouchers' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'vouchers' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_jokers' not instantiated before load

View file

@ -0,0 +1,298 @@
INFO - [♥] Lovely 0.6.0
INFO - [♥] Game directory is at "Z:\\run\\media\\vomitblood\\DataDisk1\\SteamLibrary\\steamapps\\common\\Balatro"
INFO - [♥] Writing logs to "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\log"
INFO - [♥] Using mod directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods"
INFO - [♥] Cleaning up dumps directory at "C:\\users\\steamuser\\AppData\\Roaming\\Balatro\\Mods\\lovely\\dump"
INFO - [♥] Initialization complete in 131ms
INFO - [♥] Applied 1 patch to 'conf.lua'
WARN - [♥] Pattern 'G.ARGS.score_intensity.organ = G.video_organ or G.ARGS.score_intensity.required_score > 0 and math.max(math.min(0.4, 0.1*math.log(G.ARGS.score_intensity.earned_score/(G.ARGS.score_intensity.required_score+1), 5)),0.) or 0' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'if type(G.GAME.current_round.current_hand.chips) ~= \'number\' or type(G.GAME.current_round.current_hand.mult) ~= \'number\' then' on target 'main.lua' resulted in no matches
WARN - [♥] Pattern 'modded and {' on target 'main.lua' resulted in no matches
INFO - [♥] Applied 35 patches to 'main.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [♥] Applied 13 patches to 'engine/controller.lua'
INFO - [♥] Applied 15 patches to 'back.lua'
INFO - [♥] Applied 15 patches to 'tag.lua'
INFO - [♥] Applied 2 patches to 'engine/moveable.lua'
INFO - [♥] Applied 2 patches to 'engine/sprite.lua'
INFO - [♥] Applied 2 patches to 'engine/animatedsprite.lua'
WARN - [♥] Pattern 'assembled_string = assembled_string..(type(subpart) == \'string\' and subpart or args.vars[tonumber(subpart[1])] or \'ERROR\')' on target 'functions/misc_functions.lua' resulted in no matches
INFO - [♥] Applied 48 patches to 'functions/misc_functions.lua'
INFO - [♥] Applied 84 patches to 'game.lua'
INFO - [♥] Applied 1 patch to 'globals.lua'
WARN - [♥] Pattern 'self.config.chosen = true' on target 'engine/ui.lua' resulted in no matches
INFO - [♥] Applied 7 patches to 'engine/ui.lua'
WARN - [♥] Pattern '{card_limit = _size, type = \'consumeable\', highlight_limit = 1}' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].chips, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}},' on target 'functions/UI_definitions.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = G.GAME.hands[handname].mult, scale = 0.45, colour = G.C.UI.TEXT_LIGHT}}' on target 'functions/UI_definitions.lua' resulted in no matches
INFO - [♥] Applied 110 patches to 'functions/UI_definitions.lua'
WARN - [♥] Pattern '--calculate the card edition effects\nif effects[ii].edition then\n hand_chips = mod_chips(hand_chips + (effects[ii].edition.chip_mod or 0))\n mult = mult + (effects[ii].edition.mult_mod or 0)\n mult = mod_mult(mult*(effects[ii].edition.x_mult_mod or 1))\n update_hand_text({delay = 0}, {\n chips = effects[ii].edition.chip_mod and hand_chips or nil,\n mult = (effects[ii].edition.mult_mod or effects[ii].edition.x_mult_mod) and mult or nil,\n })\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, {\n message = (effects[ii].edition.chip_mod and localize{type=\'variable\',key=\'a_chips\',vars={effects[ii].edition.chip_mod}}) or\n (effects[ii].edition.mult_mod and localize{type=\'variable\',key=\'a_mult\',vars={effects[ii].edition.mult_mod}}) or\n (effects[ii].edition.x_mult_mod and localize{type=\'variable\',key=\'a_xmult\',vars={effects[ii].edition.x_mult_mod}}),\n chip_mod = effects[ii].edition.chip_mod,\n mult_mod = effects[ii].edition.mult_mod,\n x_mult_mod = effects[ii].edition.x_mult_mod,\n colour = G.C.DARK_EDITION,\n edition = true})\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern ' scoring_hand[i].lucky_trigger = nil\n\n for ii = 1, #effects do\n --If chips added, do chip add event and add the chips to the total\n if effects[ii].chips then \n if effects[ii].card then juice_card(effects[ii].card) end\n hand_chips = mod_chips(hand_chips + effects[ii].chips)\n update_hand_text({delay = 0}, {chips = hand_chips})\n card_eval_status_text(scoring_hand[i], \'chips\', effects[ii].chips, percent)\n end\n\n --If mult added, do mult add event and add the mult to the total\n if effects[ii].mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult + effects[ii].mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'mult\', effects[ii].mult, percent)\n end\n\n --If play dollars added, add dollars to total\n if effects[ii].p_dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].p_dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].p_dollars, percent)\n end\n\n --If dollars added, add dollars to total\n if effects[ii].dollars then \n if effects[ii].card then juice_card(effects[ii].card) end\n ease_dollars(effects[ii].dollars)\n card_eval_status_text(scoring_hand[i], \'dollars\', effects[ii].dollars, percent)\n end\n\n --Any extra effects\n if effects[ii].extra then \n if effects[ii].card then juice_card(effects[ii].card) end\n local extras = {mult = false, hand_chips = false}\n if effects[ii].extra.mult_mod then mult =mod_mult( mult + effects[ii].extra.mult_mod);extras.mult = true end\n if effects[ii].extra.chip_mod then hand_chips = mod_chips(hand_chips + effects[ii].extra.chip_mod);extras.hand_chips = true end\n if effects[ii].extra.swap then \n local old_mult = mult\n mult = mod_mult(hand_chips)\n hand_chips = mod_chips(old_mult)\n extras.hand_chips = true; extras.mult = true\n end\n if effects[ii].extra.func then effects[ii].extra.func() end\n update_hand_text({delay = 0}, {chips = extras.hand_chips and hand_chips, mult = extras.mult and mult})\n card_eval_status_text(scoring_hand[i], \'extra\', nil, percent, nil, effects[ii].extra)\n end\n\n --If x_mult added, do mult add event and mult the mult to the total\n if effects[ii].x_mult then \n if effects[ii].card then juice_card(effects[ii].card) end\n mult = mod_mult(mult*effects[ii].x_mult)\n update_hand_text({delay = 0}, {mult = mult})\n card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)\n end\n\n\n end\n end\nend\n' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local percent = (i-0.999)/(#G.hand.cards-0.998) + (j-1)*0.1' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.effect ~= \'Stone Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'G.GAME.cards_played[scoring_hand[i].base.value].suits[scoring_hand[i].base.suit] = true' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i = 1, #G.jokers.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'ease_to = G.GAME.chips + math.floor(hand_chips * mult) * (e and e.antiscore and -1 or 1),' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(_card, \'jokers\', nil, percent, nil, effects.jokers)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if extras.mult or extras.hand_chips then card_eval_status_text(v, \'jokers\', nil, percent, nil, effect) end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(scoring_hand[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'card_eval_status_text(G.hand.cards[i], \'x_mult\', effects[ii].x_mult, percent)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.hand.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if reps[j] ~= 1 then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if destroyed then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if cards_destroyed[i].ability.name == \'Glass Card\' then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local edition_effects = eval_card(_card, {cardarea = G.jokers, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands, edition = true})' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'for i=1, #G.jokers.cards + #G.consumeables.cards do' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local hand_space = e or math.min(#G.deck.cards, G.hand.config.card_limit - #G.hand.cards)' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'local effects = {G.hand.cards[i]:get_end_of_round_effect()}' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if scoring_hand[i].ability.name == \'Glass Card\' and not scoring_hand[i].debuff and pseudorandom(\'glass\') < G.GAME.probabilities.normal/scoring_hand[i].ability.extra then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].card then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects.jokers.Xmult_mod then mult = mod_mult(mult*effects.jokers.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effect.Xmult_mod then mult = mod_mult(mult*effect.Xmult_mod);extras.mult = true end' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].message then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern '--calculate the card edition effects' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if effects[ii].edition.p_dollars_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Pattern 'if edition_effects.jokers.x_mult_mod then' on target 'functions/state_events.lua' resulted in no matches
WARN - [♥] Regex '(?<indent>[\\t ]*)if destroyed then \\n' on target 'functions/state_events.lua' resulted in no matches
INFO - [♥] Applied 61 patches to 'functions/state_events.lua'
WARN - [♥] Pattern 'function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern '{n=G.UIT.T, config={text = localize(\'$\')..config.dollars, scale = 1.2*scale, colour = G.C.WHITE, shadow = true, juice = true}}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \'Cryptid\' then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif _c.name == \"Clearance Sale\" or _c.name == \"Liquidation\" then loc_vars = {_c.config.extra}' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'elseif v.boss.showdown and (G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2 then' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'if v == \'negative_consumable\' then info_queue[#info_queue+1] = {key = \'e_negative_consumable\', set = \'Edition\', config = {extra = 1}} end' on target 'functions/common_events.lua' resulted in no matches
WARN - [♥] Pattern 'func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)' on target 'functions/common_events.lua' resulted in no matches
INFO - [♥] Applied 139 patches to 'functions/common_events.lua'
WARN - [♥] Pattern 'if card.area and (not nc or card.area == G.pack_cards) then card.area:remove_card(card) end\n' on target 'functions/button_callbacks.lua' resulted in no matches
INFO - [♥] Applied 63 patches to 'functions/button_callbacks.lua'
WARN - [♥] Pattern 'if k ~= \'focused_ui\' and k ~= \"front\" and k ~= \"back\" and k ~= \"soul_parts\" and k ~= \"center\" and k ~= \'floating_sprite\' and k~= \"shadow\" and k~= \"use_button\" and k ~= \'buy_button\' and k ~= \'buy_and_use_button\' and k~= \"debuff\" and k ~= \'price\' and k~= \'particles\' and k ~= \'h_popup\' then v:draw() end' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'self:calculate_joker{selling_self = true}' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'Campfire\' and G.GAME.blind.boss and not (G.GAME.blind.config and G.GAME.blind.config.bonus) and self.ability.x_mult > 1 then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name:find(\'Arcana\') then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if center_table.name == \'Overstock\' or center_table.name == \'Overstock Plus\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Regex 'message = localize\\{type = \'variable\', key = \'a_xmult\', vars = \\{G.P_CENTERS.v_observatory.config.extra}},\\n\\s+Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.name == \'The Hermit\' or self.ability.consumeable.hand_type or self.ability.name == \'Temperance\' or self.ability.name == \'Black Hole\' then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if self.ability.queue_negative_removal then' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'Xmult_mod = G.P_CENTERS.v_observatory.config.extra' on target 'card.lua' resulted in no matches
WARN - [♥] Pattern 'if G.GAME.blind then G.E_MANAGER:add_event(Event({ func = function() G.GAME.blind:set_blind(nil, true, nil); return true end })) end' on target 'card.lua' resulted in no matches
INFO - [♥] Applied 223 patches to 'card.lua'
WARN - [♥] Pattern 'table.sort(self.cards, function (a, b) return a.T.x + a.T.w/2 - 100*(a.pinned and a.sort_id or 0) < b.T.x + b.T.w/2 - 100*(b.pinned and b.sort_id or 0) end)' on target 'cardarea.lua' resulted in no matches
INFO - [♥] Applied 19 patches to 'cardarea.lua'
INFO - [♥] Applied 32 patches to 'blind.lua'
INFO - [♥] Applied 5 patches to 'engine/text.lua'
INFO - [G] Totally applied 4 replacements to overrides.lua
INFO - [G] Failed to connect to the debug server
INFO - [G] 2025-02-11 01:29:00 :: DEBUG :: DebugConsole :: Steamodded Debug Socket started !
INFO - [♥] Applied 9 patches to 'engine/sound_manager.lua'
INFO - [♥] Applied 2 patches to 'engine/string_packer.lua'
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): mod.lua
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Saving Mod Info: cartomancer
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): Cryptid.lua
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Saving Mod Info: Cryptid
INFO - [G] 2025-02-11 01:29:00 :: INFO :: DefaultLogger :: Valid JSON file found
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded.lua
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Saving Mod Info: Handy
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): Incantation.lua
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Saving Mod Info: incantation
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): JCursor.lua
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Saving Mod Info: JCursor
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Processing Mod file (Legacy header): steamodded_metadata.lua
INFO - [G] 2025-02-11 01:29:00 :: TRACE :: Loader :: Saving Mod Info: Talisman
INFO - [G] 2025-02-11 01:29:00 :: DEBUG :: DefaultLogger :: JCursor loaded!
INFO - [G] Loading file Achievements.lua
INFO - [G] Loading file Antimatter.lua
INFO - [G] Loading file Blinds.lua
INFO - [G] Loading file Challenges.lua
INFO - [G] Loading file CodeCards.lua
INFO - [G] Loading file CryptidJokerDisplay.lua
INFO - [G] Warning: CryptidJokerDisplay.lua has no items
INFO - [G] Loading file Decks.lua
INFO - [G] Loading file Enhanced.lua
INFO - [G] Loading file EpicJokers.lua
INFO - [G] Loading file Exotic.lua
INFO - [G] Loading file M.lua
INFO - [G] Loading file Misc.lua
INFO - [G] Loading file MiscJokers.lua
INFO - [G] Loading file Planets.lua
INFO - [G] Loading file Sleeves.lua
INFO - [G] Loading file Spectrals.lua
INFO - [G] Loading file Spooky.lua
INFO - [G] Loading file Stakes.lua
INFO - [G] Loading file Tags.lua
INFO - [G] Loading file Vouchers.lua
INFO - [G] Loading file dummy_https.lua
INFO - [G] Warning: dummy_https.lua has no items
INFO - [G] Loading file dummy_timerblinds.lua
INFO - [G] Warning: dummy_timerblinds.lua has no items
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_modicon
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_placeholders
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasepic
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasone
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlastwo
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasthree
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasspooky
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasexotic
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_atlasnotjokers
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_tag_cry
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Atlas :: Detected duplicate register call on object cry_misc
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Sticker :: Detected duplicate register call on object perishable
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Sticker :: Detected duplicate register call on object pinned
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Sticker :: Detected duplicate register call on object eternal
INFO - [G] 2025-02-11 01:29:01 :: WARN :: Sticker :: Detected duplicate register call on object rental
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0000] Injected Language in 0.001 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 0.706 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0032] Injected Atlas in 799.965 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0026] Injected Sound in 18.012 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0032] Injected Stake in 0.745 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0008] Injected Rarity in 0.020 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0007] Injected ObjectType in 0.061 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0393] Injected Center in 2.240 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0011] Injected Undiscovered Sprite in 0.027 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0027] Injected Blind in 0.051 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0006] Injected Seal in 0.167 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0004] Injected Suit in 0.076 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0013] Injected Rank in 0.067 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0020] Injected DeckSkin in 0.127 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0016] Injected PokerHand in 0.094 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0031] Injected Challenge in 0.150 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0028] Injected Tag in 0.049 ms
INFO - [G] 2025-02-11 01:29:01 :: INFO :: TIMER :: [0009] Injected Sticker in 0.114 ms
INFO - [G] 2025-02-11 01:29:02 :: INFO :: TIMER :: [0009] Injected Shader in 117.972 ms
INFO - [G] 2025-02-11 01:29:02 :: INFO :: TIMER :: [0001] Injected Keybind in 0.005 ms
INFO - [G] 2025-02-11 01:29:02 :: INFO :: TIMER :: [0020] Injected Achievement in 0.076 ms
INFO - [G] 2025-02-11 01:29:02 :: INFO :: TIMER :: [0000] Injected [INTERNAL] in 6.732 ms
INFO - [G] 2025-02-11 01:29:02 :: INFO :: TIMER :: [0011] Injected Event in 0.012 ms
INFO - [G] [DebugPlus] Press [/] to toggle console and press [shift] + [/] to toggle new log previews
INFO - [G] ERROR LOADING GAME: Card area 'shop_jokers' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_vouchers' not instantiated before load
INFO - [G] ERROR LOADING GAME: Card area 'shop_booster' not instantiated before load
INFO - [G] line not found
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:29:28 :: ERROR :: StackTrace :: Oops! The game crashed
[SMODS _ "src/utils.lua"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)
Stack Traceback
===============
(1) Lua upvalue 'orig' at file 'main.lua:756'
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(*temporary) = Lua function '?' (defined at line 31 of chunk [SMODS _ "src/logging.lua"])
(*temporary) = string: "Oops! The game crashed\
"
(2) Lua local 'handler' at file 'console.lua:551' (from lovely module debugplus.console)
Local variables:
msg = string: "[SMODS _ \"src/utils.lua\"]:1344: bad argument #1 to 'ipairs' (table expected, got nil)"
(3) LÖVE function at file 'boot.lua:352' (best guess)
Local variables:
errhand = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
handler = Lua function '(LÖVE Function)' (defined at line 550 of chunk [lovely debugplus.console "console.lua"])
(4) global C function 'ipairs'
(5) Lua field 'calculate_context' at Steamodded file 'src/utils.lua:1344'
Local variables:
context = table: 0x14195988 {main_eval:true, buying_card:true, cardarea:table: 0x066b4d48, card:table: 0x1410dd58 (more...)}
return_table = nil
(for generator) = C function: builtin#6
(for state) = table: 0x14193d18 {1:table: 0x066b4d48, 2:table: 0x064ab010, 3:table: 0x09ccc760}
(for control) = number: 1
_ = number: 1
area = table: 0x066b4d48 {click_offset:table: 0x066b50f0, children:table: 0x062f0980, shuffle_amt:0 (more...)}
(for generator) = C function: builtin#6
(for state) = table: 0x062f0958 {1:table: 0x062f09a8, 2:table: 0x1410dd58}
(for control) = number: 1
_ = number: 1
_card = table: 0x062f09a8 {click_offset:table: 0x062f0cf0, children:table: 0x066c9318, ambient_tilt:0.2 (more...)}
eval = table: 0x14195a50 {}
post = nil
effects = table: 0x13e0eed8 {1:table: 0x14195a50}
(6) Lua field 'func' at file 'functions/button_callbacks.lua:2480'
(7) Lua method 'handle' at file 'engine/event.lua:55'
Local variables:
self = table: 0x0607fe28 {start_timer:true, timer:TOTAL, blockable:true, trigger:after, func:function: 0x0607fe00 (more...)}
_results = table: 0x04540d98 {blocking:true, pause_skip:false, time_done:true, completed:false}
(8) Lua method 'update' at file 'engine/event.lua:182'
Local variables:
self = table: 0x0b015908 {queue_last_processed:22.1, queues:table: 0x0b015930, queue_dt:0.016666666666667 (more...)}
dt = number: 0.00607317
forced = nil
(for generator) = C function: next
(for state) = table: 0x0b015930 {unlock:table: 0x0b015958, other:table: 0x0b015dd0, tutorial:table: 0x0b0159a8 (more...)}
(for control) = number: nan
k = string: "base"
v = table: 0x0b015980 {1:table: 0x062f05b0, 2:table: 0x0607fe28, 3:table: 0x14193cf0}
blocked = boolean: false
i = number: 2
results = table: 0x04540d98 {blocking:true, pause_skip:false, time_done:true, completed:false}
(9) Lua upvalue 'gameUpdateRef' at file 'game.lua:2739'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
http_resp = nil
(10) Lua upvalue 'upd' at Steamodded file 'src/ui.lua:84'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(11) Lua upvalue 'upd' at file 'main.lua:4094'
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(12) Lua upvalue 'upd' at file 'Items/Blinds.lua:1310' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(13) Lua upvalue 'upd' at file 'Items/CodeCards.lua:4106' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(14) Lua upvalue 'upd' at file 'Items/Decks.lua:429' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(15) Lua upvalue 'upd' at file 'Items/MiscJokers.lua:6658' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(16) Lua method 'update' at file 'Cryptid.lua:2948' (from mod with id Cryptid)
Local variables:
self = table: 0x04237730 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, HUD_tags:table: 0x066dd1c0 (more...)}
dt = number: 0.00607317
(17) Lua upvalue 'love_update_ref' at file 'main.lua:1146'
Local variables:
dt = number: 0.00607317
(18) Lua upvalue 'oldupd' at file 'main.lua:3038'
Local variables:
dt = number: 0.00607317
(19) Lua field 'update' at file 'main.lua:4121'
Local variables:
dt = number: 0.00607317
(20) Lua function '?' at file 'main.lua:1079' (best guess)
(21) global C function 'xpcall'
(22) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 1050 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] file not found: main.lua: No such file or directory
INFO - [G] 2025-02-11 01:29:28 :: INFO :: StackTrace :: Additional Context:
Balatro Version: 1.0.1n-FULL
Modded Version: 1.0.0~ALPHA-1410b-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Steamodded Mods:
1: J Cursor by Jie65535, MarioMak967 [ID: JCursor]
2: Cryptid by MathIsFun_, Cryptid and Balatro Discords [ID: Cryptid, Priority: 1e+299, Version: 0.5.3a, Uses Lovely]
3: Talisman by MathIsFun_, Mathguy24, jenwalter666, cg-223 [ID: Talisman, Version: 2.0.2, Uses Lovely]
Break Infinity: omeganum
4: Cartomancer by stupxd aka stupid [ID: cartomancer, Priority: 69, Version: 4.10, Uses Lovely]
5: Handy by SleepyG11 [ID: Handy, Version: 1.1.5, Uses Lovely]
6: Incantation by jenwalter666, MathIsFun_ [ID: incantation, Priority: 9e+301, Version: 0.5.10, Uses Lovely]
7: DebugPlus by WilsontheWolf [ID: DebugPlus, Version: 1.3.0, Uses Lovely]
Lovely Mods: