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
Back = Object:extend()
@ -130,9 +130,16 @@ end
function Back:trigger_effect(args)
if not args then return end
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)}
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
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()
local obj = self.effect.center
if obj.apply and type(obj.apply) == 'function' then
obj:apply()
obj:apply(self)
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
G.GAME.used_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
Card.apply_to_run(nil, G.P_CENTERS[self.effect.config.voucher])
G.E_MANAGER:add_event(Event({
func = function()
Card.apply_to_run(nil, G.P_CENTERS[self.effect.config.voucher])
return true
end
}))
end
if self.effect.config.hands then
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.cry_owned_vouchers[v ] = true
G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1
Card.apply_to_run(nil, G.P_CENTERS[v])
G.E_MANAGER:add_event(Event({
func = function()
Card.apply_to_run(nil, G.P_CENTERS[v])
return true
end
}))
end
end
if self.name == 'Checkered Deck' then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'e8cd6ceef85971448b1b28bb95d2a4b68928ef66a2261cc19c1e9c7de9c6d3b8'
LOVELY_INTEGRITY = 'ceaf7d365cb8eac62c7dcf3be1ef07cc6b0dac3977bde52960496d7f844a668d'
--class
Blind = Moveable:extend()
@ -58,12 +58,14 @@ function Blind:set_text()
if self.name == 'The Ox' then
loc_vars = {localize(G.GAME.current_round.most_played_poker_hand, 'poker_hands')}
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
if obj.loc_vars and type(obj.loc_vars) == 'function' then
local res = obj:loc_vars() or {}
loc_vars = res.vars or {}
local res = obj:loc_vars() or {}
target.vars = res.vars or target.vars
target.key = res.key or target.key
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
self.loc_name = self.name == '' and self.name or localize{type ='name_text', key = self.config.blind.key, set = 'Blind'}
self.loc_debuff_text = ''
@ -218,10 +220,10 @@ function Blind:set_blind(blind, reset, silent)
if blind then
self.in_blind = true
end
local obj = self.config.blind
if obj.set_blind and type(obj.set_blind) == 'function' then
obj:set_blind()
end
local obj = self.config.blind
if obj.set_blind and type(obj.set_blind) == 'function' then
obj:set_blind()
end
end
--add new debuffs
for _, v in ipairs(G.playing_cards) do
@ -287,10 +289,10 @@ function Blind:alert_debuff(first)
end
function Blind:get_loc_debuff_text()
local obj = self.config.blind
if obj.get_loc_debuff_text and type(obj.get_loc_debuff_text) == 'function' then
return obj:get_loc_debuff_text()
end
local obj = self.config.blind
if obj.get_loc_debuff_text and type(obj.get_loc_debuff_text) == 'function' then
return obj:get_loc_debuff_text()
end
local disp_text = (self.config.blind.name == 'The Wheel' and G.GAME.probabilities.normal or '')..self.loc_debuff_text
if (self.config.blind.name == 'The Mouth') and self.only_hand then disp_text = disp_text..' ['..localize(self.only_hand, 'poker_hands')..']' end
return disp_text
@ -363,7 +365,7 @@ function Blind:defeat(silent)
end
local obj = self.config.blind
if obj.defeat and type(obj.defeat) == 'function' then
obj:defeat()
obj:defeat()
end
if self.name == 'Crimson Heart' then
for _, v in ipairs(G.jokers.cards) do
@ -392,7 +394,7 @@ function Blind:disable()
end
local obj = self.config.blind
if obj.disable and type(obj.disable) == 'function' then
obj:disable()
obj:disable()
end
if self.name == 'Crimson Heart' then
for _, v in ipairs(G.jokers.cards) do
@ -504,7 +506,7 @@ function Blind:press_play()
if self.disabled then return end
local obj = self.config.blind
if obj.press_play and type(obj.press_play) == 'function' then
return obj:press_play()
return obj:press_play()
end
if self.name == "The Hook" then
G.E_MANAGER:add_event(Event({ func = function()
@ -554,7 +556,7 @@ function Blind:modify_hand(cards, poker_hands, text, mult, hand_chips)
if self.disabled then return mult, hand_chips, false end
local obj = self.config.blind
if obj.modify_hand and type(obj.modify_hand) == 'function' then
return obj:modify_hand(cards, poker_hands, text, mult, hand_chips)
return obj:modify_hand(cards, poker_hands, text, mult, hand_chips)
end
if self.name == "The Flint" then
self.triggered = true
@ -567,7 +569,7 @@ function Blind:debuff_hand(cards, hand, handname, check)
if self.disabled then return end
local obj = self.config.blind
if obj.debuff_hand and type(obj.debuff_hand) == 'function' then
return obj:debuff_hand(cards, hand, handname, check)
return obj:debuff_hand(cards, hand, handname, check)
end
if self.debuff then
self.triggered = false
@ -628,7 +630,7 @@ function Blind:drawn_to_hand()
if not self.disabled then
local obj = self.config.blind
if obj.drawn_to_hand and type(obj.drawn_to_hand) == 'function' then
obj:drawn_to_hand()
obj:drawn_to_hand()
end if self.name == 'Cerulean Bell' then
local any_forced = nil
for k, v in ipairs(G.hand.cards) do
@ -679,7 +681,7 @@ function Blind:stay_flipped(area, card)
if not self.disabled then
local obj = self.config.blind
if obj.stay_flipped and type(obj.stay_flipped) == 'function' then
return obj:stay_flipped(area, card)
return obj:stay_flipped(area, card)
end
if area == G.hand then
if self.name == 'The Wheel' and pseudorandom(pseudoseed('wheel')) < G.GAME.probabilities.normal/7 then
@ -701,22 +703,22 @@ end
function Blind:debuff_card(card, from_blind)
local obj = self.config.blind
if not self.disabled and obj.recalc_debuff and type(obj.recalc_debuff) == 'function' then
if obj:recalc_debuff(card, from_blind) then
card:set_debuff(true)
if card.debuff then card.debuffed_by_blind = true end
else
card:set_debuff(false)
end
return
if obj:recalc_debuff(card, from_blind) then
card:set_debuff(true)
if card.debuff then card.debuffed_by_blind = true end
else
card:set_debuff(false)
end
return
elseif not self.disabled and obj.debuff_card and type(obj.debuff_card) == 'function' then
sendWarnMessage(("Blind object %s has debuff_card function, recalc_debuff is preferred"):format(obj.key), obj.set)
if obj:debuff_card(card, from_blind) then
card:set_debuff(true)
if card.debuff then card.debuffed_by_blind = true end
else
card:set_debuff(false)
end
return
sendWarnMessage(("Blind object %s has debuff_card function, recalc_debuff is preferred"):format(obj.key), obj.set)
if obj:debuff_card(card, from_blind) then
card:set_debuff(true)
if card.debuff then card.debuffed_by_blind = true end
else
card:set_debuff(false)
end
return
end
if self.debuff and not self.disabled and card.area ~= G.jokers then
if self.debuff.suit and card:is_suit(self.debuff.suit, true) then
@ -838,7 +840,7 @@ function Blind:load(blindTable)
if G.P_BLINDS[blindTable.config_blind] then
if self.config.blind.atlas then
self.children.animatedSprite.atlas = G.ANIMATION_ATLAS[self.config.blind.atlas]
self.children.animatedSprite.atlas = G.ANIMATION_ATLAS[self.config.blind.atlas]
end
self.blind_set = true
self.children.animatedSprite.states.visible = true

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '68c2ebd87be76547897e6d6962d4d584197f285bae1b2b46c4916611b072fcd7'
LOVELY_INTEGRITY = 'af84d6c3467720a23ecaec33b0418eba5566291929fca3634893138f120ee811'
--class
Card = Moveable:extend()
@ -46,9 +46,9 @@ function Card:init(X, Y, W, H, card, center, params)
self:set_base(card, true)
self.discard_pos = {
r = 3.6*(math.random()-0.5),
x = math.random(),
y = math.random()
r = 0,
x = 0,
y = 0,
}
self.facing = 'front'
@ -178,8 +178,8 @@ function Card:set_sprites(_center, _front)
self.children.center = Sprite(self.T.x, self.T.y, self.T.w, self.T.h, G.ASSET_ATLAS["Tarot"], G.c_locked.pos)
elseif not self.params.bypass_discovery_center and (_center.set == 'Edition' or _center.set == 'Joker' or _center.consumeable or _center.set == 'Voucher' or _center.set == 'Booster') and not _center.discovered then
self.children.center = Sprite(self.T.x, self.T.y, self.T.w, self.T.h, G.ASSET_ATLAS[(_center.undiscovered and (_center.undiscovered[G.SETTINGS.colourblind_option and 'hc_atlas' or 'lc_atlas'] or _center.undiscovered.atlas))
or (SMODS.UndiscoveredSprites[_center.set] and (SMODS.UndiscoveredSprites[_center.set][G.SETTINGS.colourblind_option and 'hc_atlas' or 'lc_atlas'] or SMODS.UndiscoveredSprites[_center.set].atlas))
or _center.set] or G.ASSET_ATLAS["Joker"],
or (SMODS.UndiscoveredSprites[_center.set] and (SMODS.UndiscoveredSprites[_center.set][G.SETTINGS.colourblind_option and 'hc_atlas' or 'lc_atlas'] or SMODS.UndiscoveredSprites[_center.set].atlas))
or _center.set] or G.ASSET_ATLAS["Joker"],
(_center.undiscovered and _center.undiscovered.pos) or (SMODS.UndiscoveredSprites[_center.set] and SMODS.UndiscoveredSprites[_center.set].pos) or
(_center.set == 'Joker' and G.j_undiscovered.pos) or
(_center.set == 'Edition' and G.j_undiscovered.pos) or
@ -227,6 +227,12 @@ function Card:set_sprites(_center, _front)
if _center.name == 'Square Joker' and (_center.discovered or self.bypass_discovery_center) then
self.children.center.scale.y = self.children.center.scale.x
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
if _center.soul_pos then
@ -237,7 +243,7 @@ function Card:set_sprites(_center, _front)
end
if _center.set_sprites and type(_center.set_sprites) == 'function' then
_center:set_sprites(self, _front)
_center:set_sprites(self, _front)
end
if true then
self.children.back = Sprite(self.T.x, self.T.y, self.T.w, self.T.h, G.ASSET_ATLAS[(G.GAME.viewed_back or G.GAME.selected_back) and ((G.GAME.viewed_back or G.GAME.selected_back)[G.SETTINGS.colourblind_option and 'hc_atlas' or 'lc_atlas'] or (G.GAME.viewed_back or G.GAME.selected_back).atlas) or 'centers'], self.params.bypass_back or (self.playing_card and G.GAME[self.back].pos or G.P_CENTERS['b_red'].pos))
@ -341,6 +347,20 @@ function Card:set_ability(center, initial, delay_sprites)
self.T.h = H
self.T.w = W
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
G.E_MANAGER:add_event(Event({
@ -414,13 +434,13 @@ function Card:set_ability(center, initial, delay_sprites)
self.ability.bonus = (self.ability.bonus or 0) + (center.config.bonus or 0)
if not self.ability.name then self.ability.name = center.key end
for k, v in pairs(center.config) do
if k ~= 'bonus' then
if type(v) == 'table' then
self.ability[k] = copy_table(v)
else
self.ability[k] = v
end
end
if k ~= 'bonus' then
if type(v) == 'table' then
self.ability[k] = copy_table(v)
else
self.ability[k] = v
end
end
end
if center.consumeable then
@ -473,12 +493,12 @@ function Card:set_ability(center, initial, delay_sprites)
local obj = self.config.center
if obj.set_ability and type(obj.set_ability) == 'function' then
obj:set_ability(self, initial, delay_sprites)
obj:set_ability(self, initial, delay_sprites)
end
if not G.OVERLAY_MENU then
if self.config.center.key then
G.GAME.used_jokers[self.config.center.key] = true
G.GAME.used_jokers[self.config.center.key] = true
end
end
@ -608,6 +628,14 @@ function Card:set_seal(_seal, silent, immediate)
self.seal = nil
if _seal then
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
G.CONTROLLER.locks.seal = true
local sound = G.P_SEALS[_seal].sound or {sound = 'gold_seal', per = 1.2, vol = 0.4}
@ -750,7 +778,7 @@ function Card:add_to_deck(from_debuff)
end
local obj = self.config.center
if obj and obj.add_to_deck and type(obj.add_to_deck) == 'function' then
obj:add_to_deck(self, from_debuff)
obj:add_to_deck(self, from_debuff)
end if self.ability.h_size ~= 0 then
G.hand:change_size(self.ability.h_size)
end
@ -817,7 +845,7 @@ function Card:remove_from_deck(from_debuff)
self.added_to_deck = false
local obj = self.config.center
if obj and obj.remove_from_deck and type(obj.remove_from_deck) == 'function' then
obj:remove_from_deck(self, from_debuff)
obj:remove_from_deck(self, from_debuff)
end if self.ability.h_size ~= 0 then
G.hand:change_size(-self.ability.h_size)
end
@ -880,7 +908,7 @@ function Card:generate_UIBox_unlock_table(hidden)
return generate_card_ui(self.config.center, nil, loc_vars, 'Locked')
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 loc_vars = 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}
end
end
if vars_only then return loc_vars, main_start, main_end end
local badges = {}
if (card_type ~= 'Locked' and card_type ~= 'Undiscovered' and card_type ~= 'Default') or self.debuff then
badges.card_type = card_type
@ -1164,21 +1193,21 @@ end
end
function Card:get_nominal(mod)
local mult = 1
local rank_mult = 1
if mod == 'suit' then mult = 10000 end
if self.ability.effect == 'Stone Card' or (self.config.center.no_suit and self.config.center.no_rank) then
mult = -10000
elseif self.config.center.no_suit then
mult = 0
elseif self.config.center.no_rank then
rank_mult = 0
end
return 10*self.base.nominal*rank_mult + self.base.suit_nominal*mult + (self.base.suit_nominal_original or 0)*0.0001*mult + 10*self.base.face_nominal*rank_mult + 0.000001*self.unique_val
local mult = 1
local rank_mult = 1
if mod == 'suit' then mult = 10000 end
if self.ability.effect == 'Stone Card' or (self.config.center.no_suit and self.config.center.no_rank) then
mult = -10000
elseif self.config.center.no_suit then
mult = 0
elseif self.config.center.no_rank then
rank_mult = 0
end
return 10*self.base.nominal*rank_mult + self.base.suit_nominal*mult + (self.base.suit_nominal_original or 0)*0.0001*mult + 10*self.base.face_nominal*rank_mult + 0.000001*self.unique_val
end
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)
end
return self.base.id
@ -1242,9 +1271,6 @@ function Card:get_edition()
if self.debuff then return end
if self.edition then
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
ret.x_mult_mod = self.edition.x_mult
end
@ -1265,7 +1291,7 @@ function Card:get_end_of_round_effect(context)
ret.h_dollars = self.ability.h_dollars
ret.card = self
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'
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({
@ -1369,8 +1395,8 @@ function Card:use_consumeable(area, copier)
local obj = self.config.center
if obj.use and type(obj.use) == 'function' then
obj:use(self, area, copier)
return
obj:use(self, area, copier)
return
end if self.ability.consumeable.mod_conv or self.ability.consumeable.suit_conv then
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
play_sound('tarot1')
@ -1572,7 +1598,7 @@ function Card:use_consumeable(area, copier)
func = function()
for i=#G.hand.highlighted, 1, -1 do
local card = G.hand.highlighted[i]
if card.ability.name == 'Glass Card' then
if SMODS.has_enhancement(card, 'm_glass') then
card:shatter()
else
card:start_dissolve(nil, i == #G.hand.highlighted)
@ -1591,7 +1617,7 @@ function Card:use_consumeable(area, copier)
func = function()
for i=#destroyed_cards, 1, -1 do
local card = destroyed_cards[i]
if card.ability.name == 'Glass Card' then
if SMODS.has_enhancement(card, 'm_glass') then
card:shatter()
else
card:start_dissolve(nil, i ~= #destroyed_cards)
@ -1649,7 +1675,7 @@ function Card:use_consumeable(area, copier)
func = function()
for i=#destroyed_cards, 1, -1 do
local card = destroyed_cards[i]
if card.ability.name == 'Glass Card' then
if SMODS.has_enhancement(card, 'm_glass') then
card:shatter()
else
card:start_dissolve(nil, i == #destroyed_cards)
@ -1660,9 +1686,7 @@ function Card:use_consumeable(area, copier)
ease_dollars(self.ability.extra.dollars)
end
delay(0.3)
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({remove_playing_cards = true, removed = destroyed_cards})
end
SMODS.calculate_context({ remove_playing_cards = true, removed = destroyed_cards })
end
if self.ability.name == 'The Fool' then
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
@ -1826,19 +1850,9 @@ function Card:can_use_consumeable(any_state, skip_check)
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 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
if obj.can_use and type(obj.can_use) == 'function' then
return obj:can_use(self)
return obj:can_use(self)
end if self.ability.name == 'The Hermit' or self.ability.consumeable.hand_type or self.ability.name == 'Temperance' or self.ability.name == 'Black Hole' then
return true
end
@ -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.sell_button then self.children.sell_button:remove(); self.children.sell_button = nil end
if self.config.center.set == 'Joker' then
if G.GAME.jokers_sold then
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}
local eval, post = eval_card(self, {selling_self = true})
SMODS.trigger_effects({eval, post}, self)
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
@ -1986,15 +1990,14 @@ end
function Card:calculate_dollar_bonus()
if self.debuff then return end
local obj = self.config.center
if obj.calc_dollar_bonus and type(obj.calc_dollar_bonus) == 'function' then
return obj:calc_dollar_bonus(self)
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
if obj.calc_dollar_bonus and type(obj.calc_dollar_bonus) == 'function' then
return obj:calc_dollar_bonus(self)
end
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)
end
@ -2026,7 +2029,6 @@ function Card:open()
end
self.states.hover.can = false
if self.ability.extra < 1 then self.ability.extra = 1 end
booster_obj = self.config.center
if booster_obj and SMODS.Centers[booster_obj.key] then
G.STATE = G.STATES.SMODS_BOOSTER_OPENED
@ -2088,7 +2090,6 @@ function Card:open()
for i = 1, _size do
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
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
@ -2186,9 +2187,7 @@ end
end
end}))
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({open_booster = true, card = self})
end
SMODS.calculate_context({open_booster = true, card = self})
if G.GAME.modifiers.inflation then
G.GAME.inflation = G.GAME.inflation + 1
@ -2252,9 +2251,7 @@ function Card:redeem()
self:apply_to_run()
delay(0.6)
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({buying_card = true, card = self})
end
SMODS.calculate_context({buying_card = true, card = self})
if G.GAME.modifiers.inflation then
G.GAME.inflation = G.GAME.inflation + 1
G.E_MANAGER:add_event(Event({func = function()
@ -2278,50 +2275,17 @@ function Card:redeem()
end
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 = {
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
}
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
if obj.redeem and type(obj.redeem) == 'function' then
obj:redeem(self)
return
obj:redeem(card_to_save)
return
end if center_table.name == 'Overstock' or center_table.name == 'Overstock Plus' then
G.E_MANAGER:add_event(Event({func = function()
change_shop_size(center_table.extra)
@ -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 obj.calculate and type(obj.calculate) == 'function' then
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
if context.repetition then
if self.seal == 'Red' then
@ -2696,7 +2663,7 @@ function Card:calculate_seal(context)
}
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
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({
@ -2710,6 +2677,7 @@ function Card:calculate_seal(context)
return true
end)}))
card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_plus_tarot'), colour = G.C.PURPLE})
return nil, true
end
end
end
@ -2736,48 +2704,29 @@ function Card:calculate_perishable()
end
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
local obj = self.config.center
if self.ability.set ~= "Enhanced" and obj.calculate and type(obj.calculate) == 'function' then
local o, t = obj:calculate(self, context)
if o or t then return o, t end
local o, t = obj:calculate(self, context)
if o or t then return o, t 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.name == "Blueprint" then
local other_joker = nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == self then other_joker = G.jokers.cards[i+1] 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.copy_depth = (context.copy_depth and (context.copy_depth + 1)) or 1
context.blueprint_card = context.blueprint_card or self
if context.blueprint > #G.jokers.cards + 1 then return end
context.no_callback = true
local other_joker_ret, trig = other_joker:calculate_joker(context)
local other_joker_ret = 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
other_joker_ret.card = context.blueprint_card or self
context.no_callback = not (context.copy_depth <= 1)
context.copy_depth = context.copy_depth - 1;
other_joker_ret.card = eff_card
other_joker_ret.colour = G.C.BLUE
return other_joker_ret
end
@ -2785,17 +2734,16 @@ end
end
if self.ability.name == "Brainstorm" then
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.copy_depth = (context.copy_depth and (context.copy_depth + 1)) or 1
context.blueprint_card = context.blueprint_card or self
if context.blueprint > #G.jokers.cards + 1 then return end
context.no_callback = true
local other_joker_ret, trig = other_joker:calculate_joker(context)
local other_joker_ret = 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
other_joker_ret.card = context.blueprint_card or self
context.no_callback = not (context.copy_depth <= 1)
context.copy_depth = context.copy_depth - 1;
other_joker_ret.card = eff_card
other_joker_ret.colour = G.C.RED
return other_joker_ret
end
@ -2816,6 +2764,7 @@ end
return true
end)}))
card_eval_status_text(self, 'extra', nil, nil, nil, {message = localize('k_plus_tarot'), colour = G.C.PURPLE})
return nil, true
end
end
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
local shattered_glass = 0
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
if shattered_glass > 0 then
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
return {
message = localize('$')..self.ability.extra,
dollars = self.ability.extra,
colour = G.C.MONEY
}
end
@ -3248,6 +3196,7 @@ end
end
}))
return {
card = self,
message = localize('k_eaten_ex'),
colour = G.C.FILTER
}
@ -3255,6 +3204,7 @@ end
self.ability.x_mult = self.ability.x_mult - self.ability.extra
return {
delay = 0.2,
card = self,
message = localize{type='variable',key='a_xmult_minus',vars={self.ability.extra}},
colour = G.C.RED
}
@ -3265,6 +3215,7 @@ end
self.ability.yorick_discards = self.ability.extra.discards
self.ability.x_mult = self.ability.x_mult + self.ability.extra.xmult
return {
card = self,
delay = 0.2,
message = localize{type='variable',key='a_xmult',vars={self.ability.x_mult}},
colour = G.C.RED
@ -3395,6 +3346,7 @@ end
end
}))
return {
card = self,
message = localize('k_eaten_ex'),
colour = G.C.FILTER
}
@ -3624,7 +3576,7 @@ end
}
end
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
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 {
@ -3797,7 +3749,7 @@ end
local temp_Mult, temp_ID = 15, 15
local raised_card = nil
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_ID = G.hand.cards[i].base.id
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
return {
message = localize('$')..self.ability.extra.dollars,
dollars = self.ability.extra.dollars,
colour = G.C.MONEY
}
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
return {
message = localize('$')..self.ability.extra,
dollars = self.ability.extra,
colour = G.C.MONEY
}
end
@ -4292,7 +4242,7 @@ end
['Clubs'] = 0
}
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
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
@ -4300,7 +4250,7 @@ end
end
end
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
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
@ -4325,7 +4275,7 @@ end
['Clubs'] = 0
}
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('Diamonds') then suits["Diamonds"] = suits["Diamonds"] + 1 end
if context.scoring_hand[i]:is_suit('Spades') then suits["Spades"] = suits["Spades"] + 1 end
@ -4333,7 +4283,7 @@ end
end
end
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
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
@ -4543,10 +4493,10 @@ end
function Card:is_suit(suit, bypass_debuff, flush_calc)
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
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
end
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
else
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
end
if self.ability.name == 'Wild Card' or self.config.center.any_suit then
if SMODS.has_any_suit(self) then
return true
end
if next(find_joker('Smeared Joker')) and (self.base.suit == 'Hearts' or self.base.suit == 'Diamonds') == (suit == 'Hearts' or suit == 'Diamonds') then
@ -4636,7 +4586,7 @@ function Card:update(dt)
end
local obj = self.config.center
if obj.update and type(obj.update) == 'function' then
obj:update(self, dt)
obj:update(self, dt)
end
local obj = G.P_SEALS[self.seal] or {}
if obj.update and type(obj.update) == 'function' then
@ -4670,13 +4620,13 @@ function Card:update(dt)
if self.ability.name == "Driver's License" then
self.ability.driver_tally = 0
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
if self.ability.name == "Steel Joker" then
self.ability.steel_tally = 0
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
if self.ability.name == "Cloud 9" then
@ -4688,7 +4638,7 @@ function Card:update(dt)
if self.ability.name == "Stone Joker" then
self.ability.stone_tally = 0
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
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
shared_sprite:draw_shader('dissolve', nil, nil, nil, self.children.center, scale_mod, rotate_mod)
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
@ -4953,21 +4906,21 @@ function Card:draw(layer)
local center = self.config.center
if center.draw and type(center.draw) == 'function' then
center:draw(self, layer)
center:draw(self, layer)
end
if center.set == 'Default' or center.set == 'Enhanced' and not center.replace_base_card then
if not center.no_suit then
local suit = SMODS.Suits[self.base.suit] or {}
if suit.draw and type(suit.draw) == 'function' then
suit:draw(self, layer)
end
end
if not center.no_rank then
local rank = SMODS.Ranks[self.base.value] or {}
if rank.draw and type(rank.draw) == 'function' then
rank:draw(self, layer)
end
end
if not center.no_suit then
local suit = SMODS.Suits[self.base.suit] or {}
if suit.draw and type(suit.draw) == 'function' then
suit:draw(self, layer)
end
end
if not center.no_rank then
local rank = SMODS.Ranks[self.base.value] or {}
if rank.draw and type(rank.draw) == 'function' then
rank:draw(self, layer)
end
end
end
--If the card has any edition/seal, add that here
if true then
@ -4999,7 +4952,7 @@ function Card:draw(layer)
end
local seal = G.P_SEALS[self.seal or {}] or {}
if type(seal.draw) == 'function' then
seal:draw(self, layer)
seal:draw(self, layer)
elseif self.seal then
G.shared_seals[self.seal].role.draw_major = self
G.shared_seals[self.seal]:draw_shader('dissolve', nil, nil, nil, self.children.center)
@ -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)
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
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
@ -5051,15 +5015,6 @@ function Card:draw(layer)
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', 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
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('voucher', nil, self.ARGS.send_to_shader, nil, self.children.center)
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
local overlay = G.C.WHITE
if self.area and self.area.config.type == 'deck' and self.rank > 3 then
@ -5180,7 +5124,7 @@ function Card:draw(layer)
end
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
if (layer == 'card' or layer == 'both') and self.area == G.hand then
@ -5293,7 +5237,7 @@ function Card:load(cardTable, other_card)
local W = G.CARD_W
local obj = self.config.center
if obj.load and type(obj.load) == 'function' then
obj:load(self, cardTable, other_card)
obj:load(self, cardTable, other_card)
elseif self.config.center.name == "Half Joker" then
self.T.h = H*scale/1.7*scale
self.T.w = W*scale
@ -5338,6 +5282,16 @@ function Card:load(cardTable, other_card)
self.T.h = H*scale
self.T.w = W*scale
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.w = self.T.w
@ -5389,9 +5343,6 @@ function Card:remove()
if self.area then self.area:remove_card(self) end
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.edition and self.edition.card_limit then
if self.ability.consumeable then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'a7d11253f7999a0561fd7f99f774f750e8b3702d5f496f16eaf5274a4813bd49'
LOVELY_INTEGRITY = 'e8693aca875516bf9cb3c84fcb6f392131135da095f221f2ef0e6ac727b926df'
--Class
CardArea = Moveable:extend()
@ -490,7 +490,7 @@ function CardArea:align_cards()
card.T.x = card.T.x + card.shadow_parrallax.x/30
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
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
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
if self.config.type == 'title' or (self.config.type == 'voucher' and #self.cards == 1) then
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
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
if self.config.type == 'voucher' and #self.cards > 1 then
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
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
if self == G.jokers and G.jokers.cart_jokers_expanded then
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
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
if self.config.type == 'consumeable'then
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
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
for k, card in ipairs(self.cards) do
card.rank = k

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '2550ee40d7ac8df7273f766f9ca41eae9c54302c74f10249ada15b3fe2d6121c'
LOVELY_INTEGRITY = 'd36e3953c2739cd4ea15794fb5e4031a2dac09fc33baadd0a2820e4726891304'
---@class Controller
Controller = Object:extend()
@ -815,7 +815,7 @@ function Controller:key_press_update(key, dt)
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
for _, other_key in pairs(keybind.held_keys) do
if not self.held_keys[other_key] then
@ -824,7 +824,7 @@ function Controller:key_press_update(key, dt)
end
end
if execute then
keybind.action(self)
keybind:action()
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
--self.frame_buttonpress = true
if self.held_key_times[key] then
if key == 'm' then
if self.held_key_times[key] > 1.1 then
SMODS.save_all_config()
SMODS.restart_game()
else
self.held_key_times[key] = self.held_key_times[key] + dt
end
elseif key == "r" and not G.SETTINGS.paused and not (G.GAME and G.GAME.USING_CODE) then
for _, keybind in pairs(SMODS.Keybinds) do
if keybind.key_pressed == key and keybind.event == 'held' and keybind.held_duration then
if self.held_key_times[key] > keybind.held_duration 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()
self.held_key_times[key] = nil
end
else
self.held_key_times[key] = self.held_key_times[key] + dt
end
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 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
@ -964,6 +976,20 @@ elseif key == "r" and not G.SETTINGS.paused and not (G.GAME and G.GAME.USING_COD
end
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
self.frame_buttonpress = true
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.sound"
@ -111,12 +111,12 @@ function SET_SFX(s, args)
end
function MODULATE(args)
if args.desired_track ~= '' then
local sound = ((SOURCES[current_track or {}] or {})[1] or {}).sound
if not sound or not sound:isPlaying() then
RESTART_MUSIC(args)
end
end
if args.desired_track ~= '' then
local sound = ((SOURCES[current_track or {}] or {})[1] or {}).sound
if not sound or not sound:isPlaying() then
RESTART_MUSIC(args)
end
end
for k, v in pairs(SOURCES) do
local i=1
@ -196,14 +196,14 @@ function SET_SFX(s, args)
if false then elseif request.type == 'sound' then
PLAY_SOUND(request)
elseif request.type == 'sound_source' then
SMODS_Sounds[request.sound_code] = {
sound_code = request.sound_code,
data = request.data,
sound = sound,
per = request.per,
vol = request.vol,
}
SOURCES[request.sound_code] = {}
SMODS_Sounds[request.sound_code] = {
sound_code = request.sound_code,
data = request.data,
sound = sound,
per = request.per,
vol = request.vol,
}
SOURCES[request.sound_code] = {}
elseif request.type == 'stop' then
STOP_AUDIO()
elseif request.type == 'modulate' then

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '6dc6391935253a5dba5a3febb135e71775ed356629edd2463e2d01e436702ddd'
LOVELY_INTEGRITY = '6732b4a403b7b8feb5e2decf7325ea96cac23686fd99e992f1aa1c26a7881bbe'
--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
@ -187,10 +187,10 @@ function create_UIBox_notify_alert(_achievement, _type)
_type == 'Voucher' and G.ASSET_ATLAS["Voucher"] or
_type == 'Back' and G.ASSET_ATLAS["centers"] or
G.ASSET_ATLAS["icons"]
local _smods_atlas = _c and ((G.SETTINGS.colourblind_option and _c.hc_atlas or _c.lc_atlas) or _c.atlas)
if _smods_atlas then
_atlas = G.ASSET_ATLAS[_smods_atlas] or _atlas
end
local _smods_atlas = _c and ((G.SETTINGS.colourblind_option and _c.hc_atlas or _c.lc_atlas) or _c.atlas)
if _smods_atlas then
_atlas = G.ASSET_ATLAS[_smods_atlas] or _atlas
end
if SMODS.Achievements[_achievement] then _c = SMODS.Achievements[_achievement]; _atlas = G.ASSET_ATLAS[_c.atlas] end
local t_s = Sprite(0,0,1.5*(_atlas.px/_atlas.py),1.5,_atlas, _c and _c.pos or {x=3, y=0})
@ -299,6 +299,15 @@ function G.UIDEF.use_and_sell_buttons(card)
}},
}}
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.area == G.pack_cards and G.pack_cards) then
return {
@ -809,7 +818,7 @@ end
G.GAME.spectral_rate = G.GAME.spectral_rate or 0
local total_rate = G.GAME.joker_rate + G.GAME.playing_card_rate
for _,v in ipairs(SMODS.ConsumableType.ctype_buffer) do
total_rate = total_rate + G.GAME[v:lower()..'_rate']
total_rate = total_rate + G.GAME[v:lower()..'_rate']
end
local polled_rate = pseudorandom(pseudoseed('cdt'..G.GAME.round_resets.ante))*total_rate
local check_rate = 0
@ -822,9 +831,9 @@ end
{type = 'Spectral', val = G.GAME.spectral_rate},
}
for _, v in ipairs(SMODS.ConsumableType.ctype_buffer) do
if not (v == 'Tarot' or v == 'Planet' or v == 'Spectral') then
table.insert(rates, { type = v, val = G.GAME[v:lower()..'_rate'] })
end
if not (v == 'Tarot' or v == 'Planet' or v == 'Spectral') then
table.insert(rates, { type = v, val = G.GAME[v:lower()..'_rate'] })
end
end
for _, v in ipairs(rates) do
if polled_rate > check_rate and polled_rate <= check_rate + v.val then
@ -1158,19 +1167,19 @@ end
local obj = card.config.center
if AUT.badges.card_type or AUT.badges.force_rarity then
if obj and (obj.set_card_type_badge or obj.type and obj.type.set_card_type_badge) then
if obj.type and type(obj.type.set_card_type_badge) == 'function' then
obj.type:set_card_type_badge(obj, card, badges)
end
if type(obj.set_card_type_badge) == 'function' then
obj:set_card_type_badge(card, badges)
end
else
badges[#badges + 1] = create_badge(((card.ability.name == 'Pluto' or card.ability.name == 'Ceres' or card.ability.name == 'Eris') and localize('k_dwarf_planet')) or (card.ability.name == 'Planet X' and localize('k_planet_q') or card_type),card_type_colour, nil, 1.2)
end
if obj and (obj.set_card_type_badge or obj.type and obj.type.set_card_type_badge) then
if obj.type and type(obj.type.set_card_type_badge) == 'function' then
obj.type:set_card_type_badge(obj, card, badges)
end
if type(obj.set_card_type_badge) == 'function' then
obj:set_card_type_badge(card, badges)
end
else
badges[#badges + 1] = create_badge(((card.ability.name == 'Pluto' or card.ability.name == 'Ceres' or card.ability.name == 'Eris') and localize('k_dwarf_planet')) or (card.ability.name == 'Planet X' and localize('k_planet_q') or card_type),card_type_colour, nil, 1.2)
end
end
if obj and obj.set_badges and type(obj.set_badges) == 'function' then
obj:set_badges(card, badges)
obj:set_badges(card, badges)
end
local function is_bad_badge(string)
local bad_badges = {'cry_pinned_booster', 'cry_pinned_voucher', 'cry_pinned_consumeable'}
@ -1185,15 +1194,15 @@ end
if not is_bad_badge(v) then badges[#badges + 1] = create_badge(localize(v, "labels"), get_badge_colour(v)) end
end
end if AUT.card_type ~= 'Locked' and AUT.card_type ~= 'Undiscovered' then
SMODS.create_mod_badges(card.config.center, badges)
if card.base then
SMODS.create_mod_badges(SMODS.Ranks[card.base.value], badges)
SMODS.create_mod_badges(SMODS.Suits[card.base.suit], badges)
end
if card.config and card.config.tag then
SMODS.create_mod_badges(SMODS.Tags[card.config.tag.key], badges)
end
badges.mod_set = nil
SMODS.create_mod_badges(card.config.center, badges)
if card.base then
SMODS.create_mod_badges(SMODS.Ranks[card.base.value], badges)
SMODS.create_mod_badges(SMODS.Suits[card.base.suit], badges)
end
if card.config and card.config.tag then
SMODS.create_mod_badges(SMODS.Tags[card.config.tag.key], badges)
end
badges.mod_set = nil
end
-- if AUT.badges then
@ -1530,7 +1539,7 @@ function create_UIBox_HUD()
{n=G.UIT.R, config={align = "cm", colour = G.C.DYN_UI.BOSS_DARK, r=0.1, minh = 30, padding = 0.08}, nodes={
{n=G.UIT.R, config={align = "cm", minh = 0.3}, nodes={}},
{n=G.UIT.R, config={align = "cm", id = 'row_blind', minw = 1, minh = 3.75}, nodes={
{n=G.UIT.B, config={w=0, h=3.64, id = 'row_blind_bottom'}, nodes={}}
{n=G.UIT.B, config={w=0, h=3.64, id = 'row_blind_bottom'}, nodes={}}
}},
contents.dollars_chips,
contents.hand,
@ -1670,16 +1679,17 @@ function create_UIBox_blind_choice(type, run_info)
}}
end
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
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
local obj = blind_choice.config
if obj.loc_vars and _G['type'](obj.loc_vars) == 'function' then
local res = obj:loc_vars() or {}
loc_vars = res.vars or {}
local res = obj:loc_vars() or {}
target.vars = res.vars or target.vars
target.key = res.key or target.key
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 text_table = loc_target
local blind_col = get_blind_main_colour(type)
@ -2701,27 +2711,46 @@ function G.UIDEF.custom_deck_tab(_suit)
local rankCount = 0
local lookup = {}
local options = G.COLLABS.options[_suit]
for i = 2, #options do
local skin = SMODS.DeckSkins[options[i]]
for j = 1, #skin.ranks do
if not lookup[skin.ranks[j]] then
lookup[skin.ranks[j]] = true
rankCount = rankCount + 1
for i, s in ipairs(SMODS.Suit:obj_list(true)) do
local options = G.COLLABS.options[s.key]
for i = 1, #options do
local skin = SMODS.DeckSkins[options[i]]
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
lookup[skin.ranks[j]] = true
rankCount = rankCount + 1
end
end
end
end
end
local face_cards = CardArea(
G.cdds_cards = CardArea(
0,0,
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})
G.cdds_cards.rankCount = rankCount
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.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'}}),
}}
)
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 rank = SMODS.Ranks['2']
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
G.FUNCS.update_collab_cards(current_option, _suit, true)
return {n=G.UIT.ROOT, config={align = "cm", padding = 0, colour = G.C.CLEAR, r = 0.1, minw = 7, minh = 4.2}, nodes=t}
@ -3746,12 +3774,12 @@ function create_UIBox_your_collection()
}))
local consumable_nodes = {}
if #SMODS.ConsumableType.ctype_buffer <= 3 then
for _, key in ipairs(SMODS.ConsumableType.ctype_buffer) do
local id = 'your_collection_'..key:lower()..'s'
consumable_nodes[#consumable_nodes+1] = UIBox_button({button = id, label = {localize('b_'..key:lower()..'_cards')}, count = G.DISCOVER_TALLIES[key:lower()..'s'], minw = 4, id = id, colour = G.C.SECONDARY_SET[key]})
end
for _, key in ipairs(SMODS.ConsumableType.ctype_buffer) do
local id = 'your_collection_'..key:lower()..'s'
consumable_nodes[#consumable_nodes+1] = UIBox_button({button = id, label = {localize('b_'..key:lower()..'_cards')}, count = G.DISCOVER_TALLIES[key:lower()..'s'], minw = 4, id = id, colour = G.C.SECONDARY_SET[key]})
end
else
consumable_nodes[#consumable_nodes+1] = UIBox_button({ button = 'your_collection_consumables', label = {localize('b_stat_consumables'), localize{ type = 'variable', key = 'c_types', vars = {#SMODS.ConsumableType.ctype_buffer} } }, count = G.DISCOVER_TALLIES['consumeables'], minw = 4, minh = 4, id = 'your_collection_consumables', colour = G.C.FILTER })
consumable_nodes[#consumable_nodes+1] = UIBox_button({ button = 'your_collection_consumables', label = {localize('b_stat_consumables'), localize{ type = 'variable', key = 'c_types', vars = {#SMODS.ConsumableType.ctype_buffer} } }, count = G.DISCOVER_TALLIES['consumeables'], minw = 4, minh = 4, id = 'your_collection_consumables', colour = G.C.FILTER })
end
local t = create_UIBox_generic_options({ back_func = G.STAGE == G.STAGES.RUN and 'options' or 'exit_overlay_menu', contents = {
{n=G.UIT.C, config={align = "cm", padding = 0.15}, nodes={
@ -3795,16 +3823,14 @@ function create_UIBox_your_collection_jokers()
)
end
local joker_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Joker)
local joker_options = {}
for i = 1, math.ceil(#joker_pool/(5*#G.your_collection)) do
table.insert(joker_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#joker_pool/(5*#G.your_collection))))
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(#G.P_CENTER_POOLS.Joker/(5*#G.your_collection))))
end
for i = 1, 5 do
for j = 1, #G.your_collection do
local center = joker_pool[i+(j-1)*5]
if not center then break end
local center = G.P_CENTER_POOLS["Joker"][i+(j-1)*5]
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)
G.your_collection[j]:emplace(card)
@ -3813,7 +3839,7 @@ function create_UIBox_your_collection_jokers()
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"}, 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'}})
@ -3881,16 +3907,14 @@ function create_UIBox_your_collection_boosters()
)
end
local booster_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Booster)
local booster_options = {}
for i = 1, math.ceil(#booster_pool/8) do
table.insert(booster_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#booster_pool/8)))
for i = 1, math.ceil(#G.P_CENTER_POOLS.Booster/8) do
table.insert(booster_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#G.P_CENTER_POOLS.Booster/8)))
end
for j = 1, #G.your_collection do
for i = 1, 4 do
local center = booster_pool[i+(j-1)*4]
if not center then break end
local center = G.P_CENTER_POOLS["Booster"][i+(j-1)*4]
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)
G.your_collection[j]:emplace(card)
@ -4003,16 +4027,14 @@ function create_UIBox_your_collection_vouchers(exit)
)
end
local voucher_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Voucher)
local voucher_options = {}
for i = 1, math.ceil(#voucher_pool/(4*#G.your_collection)) do
table.insert(voucher_options, localize('k_page')..' '..tostring(i)..'/'..tostring(math.ceil(#voucher_pool/(4*#G.your_collection))))
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(#G.P_CENTER_POOLS.Voucher/(4*#G.your_collection))))
end
for i = 1, 4 do
for j = 1, #G.your_collection do
local center = voucher_pool[i+(j-1)*4]
if not center then break end
local center = G.P_CENTER_POOLS["Voucher"][i+(j-1)*4]
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:start_materialize(nil, i>1 or j>1)
@ -4022,7 +4044,7 @@ function create_UIBox_your_collection_vouchers(exit)
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"}, 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})
@ -4175,11 +4197,11 @@ function create_UIBox_your_collection_tags()
tag_pool = G.P_TAGS
end
for k, v in pairs(tag_pool) do
counter = counter + 1
tag_tab[#tag_tab+1] = v
counter = counter + 1
tag_tab[#tag_tab+1] = v
end
for i = 1, math.ceil(counter / 6) do
table.insert(tag_matrix, {})
table.insert(tag_matrix, {})
end
table.sort(tag_tab, function (a, b) return a.order < b.order end)
@ -4215,7 +4237,7 @@ function create_UIBox_your_collection_tags()
local table_nodes = {}
for i = 1, math.ceil(counter / 6) do
table.insert(table_nodes, {n=G.UIT.R, config={align = "cm"}, nodes=tag_matrix[i]})
table.insert(table_nodes, {n=G.UIT.R, config={align = "cm"}, nodes=tag_matrix[i]})
end local t = create_UIBox_generic_options({ back_func = '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"}, nodes={
@ -4243,7 +4265,7 @@ function create_UIBox_your_collection_blinds(exit)
local s = 1.3
if math.ceil(#blind_tab/6) > 6 then
s = s * 6/math.ceil(#blind_tab/6)
s = s * 6/math.ceil(#blind_tab/6)
end
local temp_blind = AnimatedSprite(0,0,s,s, G.ANIMATION_ATLAS[discovered and v.atlas or 'blind_chips'], discovered and v.pos or G.b_undiscovered.pos)
temp_blind:define_draw_steps({
@ -4290,13 +4312,13 @@ function create_UIBox_your_collection_blinds(exit)
local blinds_per_row = math.ceil(#blind_tab / 6)
local row = math.ceil((k - 1) / blinds_per_row + 0.001)
table.insert(blind_matrix[row], {
n = G.UIT.C,
config = { align = "cm", padding = 0.1 },
nodes = {
((k - blinds_per_row) % (2 * blinds_per_row) == 1) and { n = G.UIT.B, config = { h = 0.2, w = 0.5 } } or nil,
{ n = G.UIT.O, config = { object = temp_blind, focus_with_object = true } },
((k - blinds_per_row) % (2 * blinds_per_row) == 0) and { n = G.UIT.B, config = { h = 0.2, w = 0.5 } } or nil,
}
n = G.UIT.C,
config = { align = "cm", padding = 0.1 },
nodes = {
((k - blinds_per_row) % (2 * blinds_per_row) == 1) and { n = G.UIT.B, config = { h = 0.2, w = 0.5 } } or nil,
{ n = G.UIT.O, config = { object = temp_blind, focus_with_object = true } },
((k - blinds_per_row) % (2 * blinds_per_row) == 0) and { n = G.UIT.B, config = { h = 0.2, w = 0.5 } } or nil,
}
})
end
@ -4347,7 +4369,7 @@ function create_UIBox_your_collection_blinds(exit)
end
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.L_BLACK, padding = 0.1, force_focus = true, focus_args = {nav = 'tall'}}, 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 _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
local res = blind:collection_loc_vars() or {}
loc_vars = res.vars
local res = blind:collection_loc_vars() or {}
target.vars = res.vars or target.vars
target.key = res.key or target.key
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'}
if discovered then
@ -5923,9 +5946,9 @@ function G.UIDEF.challenge_description_tab(args)
local SUITS = {}
local suit_map = {}
for i = #SMODS.Suit.obj_buffer, 1, -1 do
local suit = SMODS.Suits[SMODS.Suit.obj_buffer[i]]
SUITS[suit.card_key] = {}
suit_map[#suit_map+1] = suit.card_key
local suit = SMODS.Suits[SMODS.Suit.obj_buffer[i]]
SUITS[suit.card_key] = {}
suit_map[#suit_map+1] = suit.card_key
end
local card_protos = nil
local _de = nil
@ -5942,11 +5965,11 @@ function G.UIDEF.challenge_description_tab(args)
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 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
keep = false
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
end
if type(SMODS.Suits[v.suit].in_pool) == 'function' and not SMODS.Suits[v.suit]:in_pool({initial_deck = true}) then
keep = false
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
end
if _de then
if _de.yes_ranks and not _de.yes_ranks[_r] then keep = false end
@ -5970,15 +5993,15 @@ function G.UIDEF.challenge_description_tab(args)
local num_suits = 0
for j = 1, #suit_map do
if SUITS[suit_map[j]][1] then num_suits = num_suits + 1 end
if SUITS[suit_map[j]][1] then num_suits = num_suits + 1 end
end
for j = 1, #suit_map do
if SUITS[suit_map[j]][1] then
if SUITS[suit_map[j]][1] then
table.sort(SUITS[suit_map[j]], function(a,b) return a:get_nominal() > b:get_nominal() end )
local view_deck = CardArea(
0,0,
5.5*G.CARD_W,
(0.42 - (num_suits <= 4 and 0 or num_suits >= 8 and 0.28 or 0.07 * (num_suits - 4))) * G.CARD_H,
(0.42 - (num_suits <= 4 and 0 or num_suits >= 8 and 0.28 or 0.07 * (num_suits - 4))) * G.CARD_H,
{card_limit = #SUITS[suit_map[j]], type = 'title_2', view_deck = true, highlight_limit = 0, card_w = G.CARD_W*0.5, draw_layers = {'card'}})
table.insert(deck_tables,
{n=G.UIT.R, config={align = "cm", padding = 0}, nodes={

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '8857de192c196c2108ac03f2ec1ec6974c1d8c7ef54d7b5fbb92ce6db79734e0'
LOVELY_INTEGRITY = 'd7f48a66f05694a22b7aae4c15c27e443dc398089f32ae2891b595f051091e07'
--Moves the tutorial to the next step in queue
--
@ -615,10 +615,9 @@ G.FUNCS.your_collection_joker_page = function(args)
c = nil
end
end
local joker_pool = SMODS.collection_pool(G.P_CENTER_POOLS.Joker)
for i = 1, 5 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
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)
@ -681,7 +680,6 @@ end
---@param args {cycle_config: table}
--**cycle_config** Is the config table from the original option cycle UIE
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
for j = 1, #G.your_collection 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 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
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)
@ -708,7 +706,6 @@ end
---@param args {cycle_config: table}
--**cycle_config** Is the config table from the original option cycle UIE
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
for j = 1, #G.your_collection 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
for i = 1, 4 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
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)
@ -1797,7 +1794,8 @@ G.FUNCS.change_lang = function(e)
if not lang or lang == G.LANG then
G.FUNCS.exit_overlay_menu()
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.E_MANAGER:clear_queue()
G.FUNCS.wipe_on()
@ -2136,8 +2134,8 @@ end
end
G.FUNCS.can_skip_booster = function(e)
if G.pack_cards and (G.pack_cards.cards[1]) 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
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 )) then
e.config.colour = G.C.GREY
e.config.button = 'skip_booster'
else
@ -2218,33 +2216,33 @@ end
local nc
if card.ability.consumeable then
local obj = card.config.center
if obj.keep_on_use and type(obj.keep_on_use) == 'function' then
nc = obj:keep_on_use(card)
end
if obj.keep_on_use and type(obj.keep_on_use) == 'function' then
nc = obj:keep_on_use(card)
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 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
if booster_obj and booster_obj.select_card 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.y = G.hand.T.y + G.hand.T.h/2 - card.T.h/2 - 0.5
discover_card(card.config.center)
elseif nc then
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
elseif not nc then draw_card(G.hand, G.play, 1, 'up', true, card, nil, mute) end
delay(0.2)
e.config.ref_table:use_consumeable(area)
if card.edition and card.edition.key then
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
SMODS.calculate_context({using_consumeable = true, consumeable = card, area = card.from_area})
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.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.SMODS_BOOSTER_OPENED or
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
G.booster_pack.alignment.offset.y = G.booster_pack.alignment.offset.py
G.booster_pack.alignment.offset.py = nil
@ -2346,11 +2346,7 @@ end
G.FUNCS.sell_card = function(e)
local card = e.config.ref_table
card:sell_card()
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] ~= card then
G.jokers.cards[i]:calculate_joker({selling_card = true, card = card})
end
end
SMODS.calculate_context({selling_card = true, card = card})
end
G.FUNCS.can_confirm_contest_name = function(e)
@ -2442,6 +2438,7 @@ G.FUNCS.buy_from_shop = function(e)
trigger = 'after',
delay = 0.1,
func = function()
c1.from_area = c1.area
c1.area:remove_card(c1)
c1:add_to_deck()
if c1.children.price then c1.children.price:remove() end
@ -2462,7 +2459,11 @@ G.FUNCS.buy_from_shop = function(e)
else
G.jokers:emplace(c1)
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
--Tallies for unlocks
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
end
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({buying_card = true, card = c1})
end
SMODS.calculate_context({buying_card = true, card = c1})
if G.GAME.modifiers.inflation then
G.GAME.inflation = G.GAME.inflation + 1
@ -2510,9 +2509,7 @@ end
stop_use()
G.CONTROLLER.locks.toggle_shop = true
if G.shop then
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({ending_shop = true})
end
SMODS.calculate_context({ending_shop = true})
G.E_MANAGER:add_event(Event({
trigger = 'immediate',
func = function()
@ -2585,9 +2582,8 @@ end
end
G.FUNCS.skip_booster = function(e)
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({skipping_booster = true})
end
booster_obj = nil
SMODS.calculate_context({skipping_booster = true})
G.FUNCS.end_consumeable(e)
end
@ -2795,9 +2791,7 @@ end
trigger = 'immediate',
func = function()
delay(0.3)
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({skip_blind = true})
end
SMODS.calculate_context({skip_blind = true})
save_run()
for i = 1, #G.GAME.tags do
G.GAME.tags[i]:apply_to_run({type = 'immediate'})
@ -2828,6 +2822,16 @@ end
end
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()
G.GAME.round_resets.boss_rerolled = true
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.locks.shop_reroll = false
G.CONTROLLER:recall_cardarea_focus('shop_jokers')
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({reroll_shop = true})
end
SMODS.calculate_context({reroll_shop = true})
return true
end
}))

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '438a59ab63623d723f338cbbdf5d809c59e9a912c1f610047af5dade5f53ac5f'
LOVELY_INTEGRITY = '2c8ce4c0bac30f3323a4c474be97cee2bdcdd76ecf06cecea0a240c944640f67'
function set_screen_positions()
if G.STAGE == G.STAGES.RUN then
@ -597,39 +597,57 @@ function update_hand_text(config, vals)
end
function eval_card(card, context)
local enhancement_calculated = false
local center = card.config.center
if card.ability.set ~= 'Joker' and card.debuff then return {}, {} end
context = context or {}
local ret = {}
if context.repetition_only then
if card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then
center:calculate(card, context, ret)
enhancement_calculated = true
if card.ability.set == 'Enhanced' then
local enhancement = card:calculate_enhancement(context)
if enhancement then
ret.enhancement = enhancement
end
end
local seals = card:calculate_seal(context)
if seals then
ret.seals = seals
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)
if seals then
ret.seals = seals
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
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()
if chips > 0 then
ret.chips = chips
if chips ~= 0 then
ret.playing_card.chips = chips
end
local mult = card:get_chip_mult()
if mult > 0 then
ret.mult = mult
if mult ~= 0 then
ret.playing_card.mult = mult
end
local x_mult = card:get_chip_x_mult(context)
if x_mult > 0 then
ret.x_mult = x_mult
ret.playing_card.x_mult = x_mult
end
local x_chips = card:get_chip_x_bonus()
if x_chips > 0 then
ret.x_chips = x_chips
@ -676,76 +694,95 @@ function eval_card(card, context)
end
local p_dollars = card:get_p_dollars()
if p_dollars > 0 then
ret.p_dollars = p_dollars
end
if card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then
center:calculate(card, context, ret)
enhancement_calculated = true
ret.playing_card.p_dollars = p_dollars
end
-- TARGET: main scoring on played cards
local jokers = card:calculate_joker(context)
if jokers then
ret.jokers = jokers
end
local edition = card:get_edition(context)
local edition = card:calculate_edition(context)
if edition then
ret.edition = edition
end
end
if context.cardarea == G.hand then
local h_mult = card:get_chip_h_mult()
if h_mult > 0 then
ret.h_mult = h_mult
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 and context.main_scoring then
ret.playing_card = {}
local h_mult = card:get_chip_h_mult()
if h_mult ~= 0 then
ret.playing_card.h_mult = h_mult
end
local h_x_mult = card:get_chip_h_x_mult()
if h_x_mult > 0 then
ret.x_mult = h_x_mult
ret.playing_card.x_mult = h_x_mult
end
-- TARGET: main scoring on held cards
if card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then
center:calculate(card, context, ret)
enhancement_calculated = true
end
local jokers = card:calculate_joker(context)
if jokers then
ret.jokers = jokers
end
end
if card.edition and card.edition.key then
local ed = SMODS.Centers[card.edition.key]
if ed.calculate and type(ed.calculate) == 'function' then
context.from_playing_card = true
ed:calculate(card, context)
context.from_playing_card = nil
if card.ability.set == 'Enhanced' then
local enhancement = card:calculate_enhancement(context)
if enhancement then
ret.enhancement = enhancement
end
end
if not enhancement_calculated and card.ability.set == 'Enhanced' and center.calculate and type(center.calculate) == 'function' then
center:calculate(card, context, ret)
enhancement_calculated = true
end
local seals = card:calculate_seal(context)
if seals then
ret.seals = seals
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)
if card.edition then
local edition = card:calculate_edition(context)
if edition then
ret.edition = edition
end
if jokers then
end
if card.seal and not card.ability.extra_enhancement then
local seals = card:calculate_seal(context)
if seals then
ret.seals = seals
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 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
return ret, post_trig
end
function set_alerts()
@ -753,7 +790,7 @@ function set_alerts()
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
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 == 'Tarot' then alert_tarot = true end
if v.set == 'Planet' then alert_planet = true end
@ -764,17 +801,17 @@ function set_alerts()
end
end
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
end
end
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
end
end
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
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
if card.area == G.jokers or card.area == G.consumeables then
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
card_aligned = 'tm'
elseif card.area == G.play then
@ -910,27 +954,35 @@ function card_eval_status_text(card, eval_type, amt, percent, dir, extra)
sound = 'chips1'
amt = amt
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
elseif eval_type == 'mult' then
sound = 'multhit1'--'other1'
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
config.type = 'fade'
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
sound = 'multhit2'
volume = 0.7
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
config.type = 'fade'
config.scale = 0.7
elseif eval_type == 'h_mult' then
sound = 'multhit1'
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
config.type = 'fade'
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
end
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
amt = 1
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
colour = G.C.MULT
end
if extra.chip_mod then
if extra.chip_mod or extra.Xchip_mod then
config.type = 'fall'
colour = G.C.CHIPS
config.scale = 0.7
@ -1187,15 +1242,13 @@ function add_round_eval_row(config)
}))
local dollar_row = 0
if num_dollars > 60 or num_dollars < -60 then
local dollar_string
if num_dollars < 0 then --if negative
dollar_string = '-'..localize('$')..(num_dollars*-1)
G.E_MANAGER:add_event(Event({
trigger = 'before',delay = 0.38,
func = function()
G.round_eval:add_child(
{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))
play_sound('coin3', 0.9+0.2*math.random(), 0.7)
@ -1204,7 +1257,6 @@ function add_round_eval_row(config)
end
}))
else --if positive
dollar_string = localize('$')..num_dollars
G.E_MANAGER:add_event(Event({
trigger = 'before',delay = 0.38,
func = function()
@ -1222,7 +1274,7 @@ function add_round_eval_row(config)
--asdf
end else
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
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),
@ -1264,7 +1316,7 @@ function add_round_eval_row(config)
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.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 = {
align = 'tmi',
@ -1514,9 +1566,9 @@ function check_for_unlock(args)
local custom_check
if not card.unlocked and card.check_for_unlock and type(card.check_for_unlock) == 'function' then
ret = card:check_for_unlock(args)
if ret then unlock_card(card) end
custom_check = true
ret = card:check_for_unlock(args)
if ret then unlock_card(card) end
custom_check = true
end if not custom_check and not card.unlocked and card.unlock_condition and args.type == 'career_stat' then
if args.statname == card.unlock_condition.type and G.PROFILES[G.SETTINGS.profile].career_stats[args.statname] >= card.unlock_condition.extra then
ret = true
@ -1549,12 +1601,12 @@ function check_for_unlock(args)
if args.type == 'play_all_hearts' then
local played = true
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
end
end
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
end
end
@ -1751,7 +1803,7 @@ function check_for_unlock(args)
if card.name == 'Golden Ticket' then
local tally = 0
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
end
end
@ -1834,7 +1886,7 @@ end
function unlock_card(card)
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
G:save_notify(card)
card.unlocked = true
@ -1889,7 +1941,8 @@ function fetch_achievements()
G.ACHIEVEMENTS[kk].earned = true
end
end
end if G.F_NO_ACHIEVEMENTS then return end
end
if G.F_NO_ACHIEVEMENTS then return end
--|FROM LOCAL SETTINGS FILE
--|-------------------------------------------------------
@ -1924,15 +1977,32 @@ function fetch_achievements()
end
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({
no_delete = true,
blockable = false,
blocking = false,
func = function()
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
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
--|LOCAL SETTINGS FILE
@ -2092,7 +2162,7 @@ function create_unlock_overlay(key)
end
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 {}
if card.discovered or card.wip then return end
if card and not card.discovered then
@ -2186,18 +2256,19 @@ function get_current_pool(_type, _rarity, _legendary, _append)
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 = ({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 ''))
_starting_pool, _pool_key = G.P_JOKER_RARITY_POOLS[rarity], 'Joker'..rarity..((not _legendary and _append) or '')
elseif SMODS.ObjectTypes[_type] and SMODS.ObjectTypes[_type].rarities then
local rarities = SMODS.ObjectTypes[_type].rarities
local rarity
if _legendary and rarities.legendary then
rarity = rarities.legendary.key
else
rarity = _rarity or SMODS.poll_rarity(_type, 'rarity_'.._type..G.GAME.round_resets.ante..(_append or ''))
end
_starting_pool, _pool_key = SMODS.ObjectTypes[_type].rarity_pools[rarity], _type..rarity..(_append or '')
local rarities = SMODS.ObjectTypes[_type].rarities
local rarity
if _legendary and rarities.legendary then
rarity = rarities.legendary.key
else
rarity = _rarity or SMODS.poll_rarity(_type, 'rarity_'.._type..G.GAME.round_resets.ante..(_append or ''))
end
_starting_pool, _pool_key = SMODS.ObjectTypes[_type].rarity_pools[rarity], _type..rarity..(_append or '')
else _starting_pool, _pool_key = G.P_CENTER_POOLS[_type], _type..(_append or '')
end
@ -2206,7 +2277,7 @@ local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_rese
local add = nil
local in_pool, pool_opts
if v.in_pool and type(v.in_pool) == 'function' then
in_pool, pool_opts = v:in_pool({ source = _append })
in_pool, pool_opts = v:in_pool({ source = _append })
end
pool_opts = pool_opts or {}
if _type == 'Enhanced' then
@ -2271,7 +2342,7 @@ local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_rese
elseif v.enhancement_gate then
add = nil
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
end
end
@ -2287,7 +2358,7 @@ local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_rese
if v.yes_pool_flag and not G.GAME.pool_flags[v.yes_pool_flag] then add = nil end
if v.in_pool and type(v.in_pool) == 'function' then
add = in_pool and (add or pool_opts.override_base_checks)
add = in_pool and (add or pool_opts.override_base_checks)
end
if add and not G.GAME.banned_keys[v.key] then
_pool[#_pool + 1] = v.key
@ -2308,7 +2379,7 @@ local rarity = _rarity or SMODS.poll_rarity("Joker", 'rarity'..G.GAME.round_rese
if _pool_size == 0 then
_pool = EMPTY(G.ARGS.TEMP_POOL)
if SMODS.ObjectTypes[_type] and SMODS.ObjectTypes[_type].default and G.P_CENTERS[SMODS.ObjectTypes[_type].default] then
_pool[#_pool+1] = SMODS.ObjectTypes[_type].default
_pool[#_pool+1] = SMODS.ObjectTypes[_type].default
elseif _type == 'Tarot' or _type == 'Tarot_Planet' then _pool[#_pool + 1] = "c_strength"
elseif _type == 'Planet' then _pool[#_pool + 1] = "c_pluto"
elseif _type == 'Spectral' then _pool[#_pool + 1] = "c_incantation"
@ -2358,13 +2429,13 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable
--should pool be skipped with a forced key
if not forced_key and soulable and (not G.GAME.banned_keys['c_soul']) then
for _, v in ipairs(SMODS.Consumable.legendaries) do
if (_type == v.type.key or _type == v.soul_set) and not (G.GAME.used_jokers[v.key] and not next(find_joker("Showman")) and not v.can_repeat_soul) and (not v.in_pool or (type(v.in_pool) ~= "function") or v:in_pool()) then
if pseudorandom('soul_'..v.key.._type..G.GAME.round_resets.ante) > (1 - v.soul_rate) then
forced_key = v.key
end
end
end
for _, v in ipairs(SMODS.Consumable.legendaries) do
if (_type == v.type.key or _type == v.soul_set) and not (G.GAME.used_jokers[v.key] and not next(find_joker("Showman")) and not v.can_repeat_soul) and (not v.in_pool or (type(v.in_pool) ~= "function") or v:in_pool()) then
if pseudorandom('soul_'..v.key.._type..G.GAME.round_resets.ante) > (1 - v.soul_rate) then
forced_key = v.key
end
end
end
if (_type == 'Tarot' or _type == 'Spectral' or _type == 'Tarot_Planet') and
not (G.GAME.used_jokers['c_soul'] and not next(find_joker("Showman"))) then
if pseudorandom('soul_'.._type..G.GAME.round_resets.ante) > 0.997 then
@ -2436,10 +2507,10 @@ function create_card(_type, area, legendary, _rarity, skip_materialize, soulable
card:set_edition(edition)
check_for_unlock({type = 'have_edition'})
end
end
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({cry_creating_card = true, card = card})
end
end
return card
end
@ -2463,6 +2534,15 @@ function copy_card(other, new_card, card_scale, playing_card, strip_edition)
end
check_for_unlock({type = 'have_edition'})
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
new_card.params = other.params
new_card.params.playing_card = playing_card
@ -2566,7 +2646,7 @@ function reset_idol_card()
local valid_idol_cards = {}
for k, v in ipairs(G.playing_cards) do
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
end
end
@ -2584,7 +2664,7 @@ function reset_mail_rank()
local valid_mail_cards = {}
for k, v in ipairs(G.playing_cards) do
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
end
end
@ -2610,7 +2690,7 @@ function reset_castle_card()
local valid_castle_cards = {}
for k, v in ipairs(G.playing_cards) do
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
end
end
@ -2657,16 +2737,16 @@ function get_new_boss()
if not v.boss then
elseif v.in_pool and type(v.in_pool) == 'function' then
local res, options = v:in_pool()
if
(
((G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2) ==
(v.boss.showdown or false)
) or
(options or {}).ignore_showdown_check
then
eligible_bosses[k] = res and true or nil
end
local res, options = v:in_pool()
if
(
((G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2) ==
(v.boss.showdown or false)
) or
(options or {}).ignore_showdown_check
then
eligible_bosses[k] = res and true or nil
end
elseif not v.boss.showdown and (v.boss.min <= math.max(1, G.GAME.round_resets.ante) and ((math.max(1, G.GAME.round_resets.ante))%G.GAME.win_ante ~= 0 or G.GAME.round_resets.ante < 2)) then
eligible_bosses[k] = true
elseif v.boss.showdown and (((G.GAME.round_resets.ante)%G.GAME.win_ante == 0 and G.GAME.round_resets.ante >= 2) or G.GAME.modifiers.cry_big_showdown ) then
@ -2712,12 +2792,11 @@ function get_type_colour(_c, card)
end
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
card = SMODS.compat_0_9_8.generate_UIBox_ability_table_card
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
if not full_UI_table then
first_pass = true
@ -2757,7 +2836,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
else
if not _c.generate_ui or type(_c.generate_ui) ~= 'function' then
full_UI_table.name = localize{type = 'name', set = _c.set, key = _c.key, nodes = full_UI_table.name}
full_UI_table.name = localize{type = 'name', set = _c.set, key = _c.key, nodes = full_UI_table.name}
end
end
full_UI_table.card_type = card_type or _c.set
@ -2768,6 +2847,15 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
desc_nodes[#desc_nodes+1] = main_start
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 not Cryptid.enabled["HTTPS Module"] 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
local cfg = (card and card.ability) or _c['config']
if _c.set == 'Other' then
localize{type = 'other', key = _c.key, nodes = desc_nodes, vars = specific_vars or _c.vars}
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 then localize{type = 'other', key = 'demo_locked', nodes = desc_nodes, vars = loc_vars}
else
local res = {}
if _c.locked_loc_vars and type(_c.locked_loc_vars) == 'function' then
local res = _c:locked_loc_vars(info_queue) or {}
loc_vars = res.vars or {}
specific_vars = specific_vars or {}
specific_vars.not_hidden = res.not_hidden or specific_vars.not_hidden
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 {}
specific_vars = specific_vars or {}
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 == '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}
@ -2871,21 +2962,31 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end
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
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
elseif hide_desc then
localize{type = 'other', key = 'undiscovered_'..(string.lower(_c.set)), set = _c.set, nodes = desc_nodes}
elseif _c.generate_ui and type(_c.generate_ui) == 'function' then
_c:generate_ui(info_queue, card, desc_nodes, specific_vars, full_UI_table)
if specific_vars and specific_vars.pinned then info_queue[#info_queue+1] = {key = 'pinned_left', set = 'Other'} end
_c:generate_ui(info_queue, card, desc_nodes, specific_vars, full_UI_table)
if specific_vars and specific_vars.pinned then info_queue[#info_queue+1] = {key = 'pinned_left', 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
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}
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
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
@ -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
localize{type = 'descriptions', key = _c.key, set = _c.set, nodes = desc_nodes, vars = specific_vars or {}}
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
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
@ -2922,7 +3024,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end
localize{type = 'descriptions', key = _c.key, set = 'Tag', nodes = desc_nodes, vars = specific_vars or {}}
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 == "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}
@ -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 == "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 == "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 == "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 == "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 == "Crystal Ball" or _c.name == "Omen Globe" then loc_vars = {cfg.extra}
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
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
if specific_vars.nominal_chips then
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 == 'Lucky Card' then loc_vars = {G.GAME.probabilities.normal, cfg.mult, 5, cfg.p_dollars, 15}
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
localize{type = 'other', key = 'card_extra_chips', nodes = desc_nodes, vars = {((specific_vars and specific_vars.bonus_chips) or cfg.bonus)}}
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}
elseif _c.set == 'Spectral' 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
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 == '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 == 'Deja Vu' then info_queue[#info_queue+1] = {key = 'red_seal', set = 'Other'}
elseif _c.name == 'Trance' then info_queue[#info_queue+1] = {key = 'blue_seal', set = 'Other'}
elseif _c.name == 'Medium' then info_queue[#info_queue+1] = {key = 'purple_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] = 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] = 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] = G.P_SEALS['purple_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['purple_seal'] or '']
elseif _c.name == 'Ankh' then
if G.jokers and G.jokers.cards then
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
elseif _c.name == 'Cryptid' then loc_vars = {cfg.extra, cfg.max_highlighted}
elseif _c.name == 'Cryptid' then loc_vars = {cfg.extra}
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
@ -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_polychrome
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
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,
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
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
@ -3072,7 +3173,7 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
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]}}
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
if main_end then
@ -3080,18 +3181,18 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
end
if card_type == 'Default' or card_type == 'Enhanced' and not _c.replace_base_card and card and card.base then
if not _c.no_suit then
local suit = SMODS.Suits[card.base.suit] or {}
if suit.loc_vars and type(suit.loc_vars) == 'function' then
suit:loc_vars(info_queue, card)
end
end
if not _c.no_rank then
local rank = SMODS.Ranks[card.base.value] or {}
if rank.loc_vars and type(rank.loc_vars) == 'function' then
rank:loc_vars(info_queue, card)
end
end
if not _c.no_suit then
local suit = SMODS.Suits[card.base.suit] or {}
if suit.loc_vars and type(suit.loc_vars) == 'function' then
suit:loc_vars(info_queue, card)
end
end
if not _c.no_rank then
local rank = SMODS.Ranks[card.base.value] or {}
if rank.loc_vars and type(rank.loc_vars) == 'function' then
rank:loc_vars(info_queue, card)
end
end
end
--Fill all remaining info if this is the main desc
@ -3114,25 +3215,23 @@ if _c.specific_vars then specific_vars = _c.specific_vars end
info_queue[#info_queue + 1] = G.P_CENTERS[v]
end
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 = {}}
info_queue[#info_queue + 1] = t
if G.P_CENTERS['e_'..v].loc_vars and type(G.P_CENTERS['e_'..v].loc_vars) == 'function' then
local res = G.P_CENTERS['e_'..v]:loc_vars(info_queue, card) or {}
t.vars = res.vars
t.key = res.key or t.key
t.set = res.set or t.set
end
end
if v == 'cry_pinned_booster' then info_queue[#info_queue+1] = {key = 'cry_pinned_booster', set = 'Other'} end
if v == 'cry_pinned_voucher' then info_queue[#info_queue+1] = {key = 'cry_pinned_voucher', set = 'Other'} end
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.key = res.key or t.key
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
if v == 'gold_seal' then info_queue[#info_queue+1] = {key = 'gold_seal', set = 'Other'} end
if v == 'blue_seal' then info_queue[#info_queue+1] = {key = 'blue_seal', set = 'Other'} end
if v == 'red_seal' then info_queue[#info_queue+1] = {key = 'red_seal', set = 'Other'} end
if v == 'purple_seal' then info_queue[#info_queue+1] = {key = 'purple_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] = 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] = 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] = G.P_SEALS['purple_seal'] or G.P_SEALS[SMODS.Seal.badge_to_key['purple_seal'] or ''] end
end
local sticker = SMODS.Stickers[v]
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 {}
t.vars = res.vars or {}
t.key = res.key or t.key
t.set = res.set or t.set
end
info_queue[#info_queue+1] = t
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
--
@ -254,30 +254,30 @@ end
function pseudorandom_element(_t, seed, args)
-- TODO special cases for now
-- Preserves reverse nominal order for Suits, nominal+face_nominal order for Ranks
-- for vanilla RNG
if _t == SMODS.Suits then
_t = SMODS.Suit:obj_list(true)
end
if _t == SMODS.Ranks then
_t = SMODS.Rank:obj_list()
end
-- Preserves reverse nominal order for Suits, nominal+face_nominal order for Ranks
-- for vanilla RNG
if _t == SMODS.Suits then
_t = SMODS.Suit:obj_list(true)
end
if _t == SMODS.Ranks then
_t = SMODS.Rank:obj_list()
end
if seed then math.randomseed(seed) end
local keys = {}
for k, v in pairs(_t) do
local keep = true
local in_pool_func =
args and args.in_pool
or type(v) == 'table' and type(v.in_pool) == 'function' and v.in_pool
or _t == G.P_CARDS and function(c)
--Handles special case for Erratic Deck
local initial_deck = args and args.starting_deck or false
return not (
type(SMODS.Ranks[c.value].in_pool) == 'function' and not SMODS.Ranks[c.value]: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})
)
end
args and args.in_pool
or type(v) == 'table' and type(v.in_pool) == 'function' and v.in_pool
or _t == G.P_CARDS and function(c)
--Handles special case for Erratic Deck
local initial_deck = args and args.starting_deck or false
return not (
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, rank = c.value})
)
end
if in_pool_func then
keep = in_pool_func(v, args)
end
@ -422,7 +422,7 @@ function evaluate_poker_hand(hand)
}
for _,v in ipairs(SMODS.PokerHand.obj_buffer) do
results[v] = {}
results[v] = {}
end
local parts = {
_5 = get_X_same(5,hand),
@ -435,9 +435,9 @@ function evaluate_poker_hand(hand)
}
for _,_hand in pairs(SMODS.PokerHands) do
if _hand.atomic_part and type(_hand.atomic_part) == 'function' then
parts[_hand.key] = _hand.atomic_part(hand)
end
if _hand.atomic_part and type(_hand.atomic_part) == 'function' then
parts[_hand.key] = _hand.atomic_part(hand)
end
end
if next(parts._5) and next(parts._flush) then
results["Flush Five"] = parts._5
@ -555,25 +555,25 @@ function evaluate_poker_hand(hand)
end
for _,_hand in pairs(SMODS.PokerHands) do
if _hand.composite and type(_hand.composite) == 'function' then
local other_hands
results[_hand.key], other_hands = _hand.composite(parts)
results[_hand.key] = results[_hand.key] or {}
if other_hands and type(other_hands) == 'table' then
for k, v in pairs(other_hands) do
results[k] = v
end
end
else
results[_hand.key] = parts[_hand.key]
end
if _hand.composite and type(_hand.composite) == 'function' then
local other_hands
results[_hand.key], other_hands = _hand.composite(parts)
results[_hand.key] = results[_hand.key] or {}
if other_hands and type(other_hands) == 'table' then
for k, v in pairs(other_hands) do
results[k] = v
end
end
else
results[_hand.key] = parts[_hand.key]
end
end
results.top = nil
for _, v in ipairs(G.handlist) do
if not results.top and results[v] then
results.top = results[v]
break
end
if not results.top and results[v] then
results.top = results[v]
break
end
end
return results
end
@ -646,7 +646,7 @@ end
function get_X_same(num, hand, or_more)
local vals = {}
for i = 1, SMODS.Rank.max_id.value do
vals[i] = {}
vals[i] = {}
end
for i=#hand, 1, -1 do
local curr = {}
@ -833,25 +833,25 @@ function modulate_sound(dt)
G.ARGS.push.overlay_menu = not (not G.OVERLAY_MENU)
G.ARGS.push.ambient_control = G.SETTINGS.ambient_control
if SMODS.remove_replace_sound and SMODS.remove_replace_sound ~= desired_track then
SMODS.Sound.replace_sounds[SMODS.remove_replace_sound] = nil
SMODS.remove_replace_sound = nil
SMODS.Sound.replace_sounds[SMODS.remove_replace_sound] = nil
SMODS.remove_replace_sound = nil
end
local replace_sound = SMODS.Sound.replace_sounds[desired_track]
if replace_sound then
local replaced_track = desired_track
desired_track = replace_sound.key
G.ARGS.push.desired_track = desired_track
if SMODS.previous_track ~= desired_track then
if replace_sound.times > 0 then replace_sound.times = replace_sound.times - 1 end
if replace_sound.times == 0 then SMODS.remove_replace_sound = replaced_track end
end
local replaced_track = desired_track
desired_track = replace_sound.key
G.ARGS.push.desired_track = desired_track
if SMODS.previous_track ~= desired_track then
if replace_sound.times > 0 then replace_sound.times = replace_sound.times - 1 end
if replace_sound.times == 0 then SMODS.remove_replace_sound = replaced_track end
end
end
local stop_sound = SMODS.Sound.stop_sounds[desired_track]
if SMODS.Sound.stop_sounds[desired_track] then
if SMODS.previous_track ~= '' and stop_sound > 0 then stop_sound = stop_sound - 1 end
SMODS.Sound.stop_sounds[desired_track] = stop_sound ~= 0 and stop_sound or nil
SMODS.previous_track = ''
return
if SMODS.previous_track ~= '' and stop_sound > 0 then stop_sound = stop_sound - 1 end
SMODS.Sound.stop_sounds[desired_track] = stop_sound ~= 0 and stop_sound or nil
SMODS.previous_track = ''
return
end
if G.F_SOUND_THREAD then
@ -863,11 +863,11 @@ function modulate_sound(dt)
if (type(in_sync) == 'table' and not in_sync[SMODS.previous_track]) or in_sync == false then should_sync = false end
if (type(out_sync) == 'table' and not out_sync[desired_track]) or out_sync == false then should_sync = false end
if
SMODS.previous_track and SMODS.previous_track ~= desired_track and
not should_sync
SMODS.previous_track and SMODS.previous_track ~= desired_track and
not should_sync
then
G.ARGS.push.type = 'restart_music'
G.SOUND_MANAGER.channel:push(G.ARGS.push)
G.ARGS.push.type = 'restart_music'
G.SOUND_MANAGER.channel:push(G.ARGS.push)
end
SMODS.previous_track = desired_track
else
@ -1070,21 +1070,21 @@ function number_format(num, e_switch_point)
local mantissa = round_number(x/(10^fac), 3)
if mantissa >= 10 then
mantissa = mantissa / 10
fac = fac + 1
mantissa = mantissa / 10
fac = fac + 1
end
return sign..(string.format(fac >= 100 and "%.1fe%i" or fac >= 10 and "%.2fe%i" or "%.3fe%i", mantissa, fac))
end
local formatted
if num ~= math.floor(num) and num < 100 then
formatted = string.format(num >= 10 and "%.1f" or "%.2f", num)
if formatted:sub(-1) == "0" then
formatted = formatted:gsub("%.?0+$", "")
end
-- Return already to avoid comas being added
if num < 0.01 then return tostring(num) end
formatted = string.format(num >= 10 and "%.1f" or "%.2f", num)
if formatted:sub(-1) == "0" then
formatted = formatted:gsub("%.?0+$", "")
end
-- Return already to avoid comas being added
if num < 0.01 then return tostring(num) end
else
formatted = string.format("%.0f", num)
formatted = string.format("%.0f", num)
end
return sign..(formatted:reverse():gsub("(%d%d%d)", "%1,"):gsub(",$", ""):reverse())
end
@ -1435,14 +1435,14 @@ function set_discover_tallies()
total = {tally = 0, of = 0},
}
for _, v in ipairs(SMODS.ConsumableType.ctype_buffer) do
G.DISCOVER_TALLIES[v:lower()..'s'] = {tally = 0, of = 0}
G.DISCOVER_TALLIES[v:lower()..'s'] = {tally = 0, of = 0}
end for _, v in pairs(G.DISCOVER_TALLIES) do
v.tally = 0
v.of = 0
end
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
G.DISCOVER_TALLIES.total.of = G.DISCOVER_TALLIES.total.of+1
if v.discovered then
@ -1468,10 +1468,10 @@ function set_discover_tallies()
end
local tally = G.DISCOVER_TALLIES[v.set:lower()..'s']
if tally then
tally.of = tally.of + 1
if v.discovered then
tally.tally = tally.tally + 1
end
tally.of = tally.of + 1
if v.discovered then
tally.tally = tally.tally + 1
end
end
end
if v.set and v.set == 'Voucher' then
@ -1495,6 +1495,8 @@ function set_discover_tallies()
end
end
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.blinds.of = G.DISCOVER_TALLIES.blinds.of+1
if v.discovered then
@ -1502,7 +1504,11 @@ function set_discover_tallies()
G.DISCOVER_TALLIES.total.tally = G.DISCOVER_TALLIES.total.tally+1
end
end
end
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.tags.of = G.DISCOVER_TALLIES.tags.of+1
if v.discovered then
@ -1510,6 +1516,8 @@ function set_discover_tallies()
G.DISCOVER_TALLIES.total.tally = G.DISCOVER_TALLIES.total.tally+1
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.tot = G.DISCOVER_TALLIES.total.of
G.PROFILES[G.SETTINGS.profile].progress.discovered = copy_table(G.DISCOVER_TALLIES.total)
@ -1635,15 +1643,15 @@ function loc_colour(_c, _default)
legendary = G.C.RARITY[4],
enhanced = G.C.SECONDARY_SET.Enhanced
}
for _, v in ipairs(SMODS.Rarity.obj_buffer) do
G.ARGS.LOC_COLOURS[v:lower()] = G.C.RARITY[v]
end
for _, v in ipairs(SMODS.ConsumableType.ctype_buffer) do
G.ARGS.LOC_COLOURS[v:lower()] = G.C.SECONDARY_SET[v]
end
for _, v in ipairs(SMODS.Suit.obj_buffer) do
G.ARGS.LOC_COLOURS[v:lower()] = G.C.SUITS[v]
end
for _, v in ipairs(SMODS.Rarity.obj_buffer) do
G.ARGS.LOC_COLOURS[v:lower()] = G.C.RARITY[v]
end
for _, v in ipairs(SMODS.ConsumableType.ctype_buffer) do
G.ARGS.LOC_COLOURS[v:lower()] = G.C.SECONDARY_SET[v]
end
for _, v in ipairs(SMODS.Suit.obj_buffer) do
G.ARGS.LOC_COLOURS[v:lower()] = G.C.SUITS[v]
end
return G.ARGS.LOC_COLOURS[_c] or _default or G.C.UI.TEXT_DARK
end
@ -1976,24 +1984,73 @@ end
function get_front_spriteinfo(_front)
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]
if collab and collab ~= 'default' then
if collab then
local deckSkin = SMODS.DeckSkins[collab]
if deckSkin then
local hasRank = false
for i = 1, #deckSkin.ranks do
if deckSkin.ranks[i] == _front.value then hasRank = true break end
end
if hasRank then
local atlas = G.ASSET_ATLAS[G.SETTINGS.colourblind_option and deckSkin.hc_atlas or deckSkin.lc_atlas]
if atlas then
if deckSkin.posStyle == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif deckSkin.posStyle == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
elseif deckSkin.posStyle == 'deck' then
return atlas, _front.pos
if deckSkin.outdated then
local hasRank = false
for i = 1, #deckSkin.ranks do
if deckSkin.ranks[i] == _front.value then hasRank = true break end
end
if hasRank then
local atlas = G.ASSET_ATLAS[G.SETTINGS.colour_palettes[_front.suit] == 'hc' and deckSkin.hc_atlas or deckSkin.lc_atlas]
if atlas then
if deckSkin.pos_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif deckSkin.pos_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
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
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

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = '1f28fb4cd208cf3d7ee40ad59534c6cc25dbf6d4335f376d30f1e4b080e388b7'
LOVELY_INTEGRITY = '4af0a05e5998e1bbb1bd6610b6f3d87c6fea5c42d526b7d7d6bd3d6bf983044e'
--Class
Game = Object:extend()
@ -1114,7 +1114,7 @@ function Game:set_language()
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')
if localization ~= nil then
@ -2013,10 +2013,10 @@ function Game:demo_cta() --True if main menu is accessed from the splash screen,
end
function Game:init_game_object()
local cards_played = {}
for _,v in ipairs(SMODS.Rank.obj_buffer) do
cards_played[v] = { suits = {}, total = 0 }
end
local cards_played = {}
for _,v in ipairs(SMODS.Rank.obj_buffer) do
cards_played[v] = { suits = {}, total = 0 }
end
local bosses_used = {}
for k, v in pairs(G.P_BLINDS) do
if v.boss then bosses_used[k] = 0 end
@ -2151,9 +2151,9 @@ function Game:init_game_object()
shop = {
joker_max = 2,
},
cards_played = cards_played,
disabled_suits = {},
disabled_ranks = {},
cards_played = cards_played,
disabled_suits = {},
disabled_ranks = {},
hands = {
["Flush Five"] = {visible = false, order = 1, mult = 16, chips = 160, s_mult = 16, s_chips = 160, level = 1, l_mult = 3, l_chips = 50, played = 0, played_this_round = 0, example = {{'S_A', true},{'S_A', true},{'S_A', true},{'S_A', true},{'S_A', true}}},
["Flush House"] = {visible = false, order = 2, mult = 14, chips = 140, s_mult = 14, s_chips = 140, level = 1, l_mult = 4, l_chips = 40, played = 0, played_this_round = 0, example = {{'D_7', true},{'D_7', true},{'D_7', true},{'D_4', true},{'D_4', true}}},
@ -2451,6 +2451,11 @@ function Game:start_run(args)
0, 0,
CAI.discard_W,CAI.discard_H,
{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(
0, 0,
CAI.deck_W,CAI.deck_H,
@ -2541,9 +2546,9 @@ function Game:start_run(args)
if not card_protos then
card_protos = {}
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})
or type(SMODS.Suits[v.suit].in_pool) == 'function' and not SMODS.Suits[v.suit]:in_pool({initial_deck = true}) then
goto continue
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, rank = v.value}) then
goto continue
end
local _ = nil
if self.GAME.starting_params.erratic_suits_and_ranks then
@ -3575,13 +3580,9 @@ end
if G.GAME.current_round.hands_played == 0 and
G.GAME.current_round.discards_used == 0 and G.GAME.facing_blind then
for i = 1, #G.hand.cards do
eval_card(G.hand.cards[i], {first_hand_drawn = true})
SMODS.calculate_context({first_hand_drawn = true})
end
for i = 1, #G.jokers.cards do
G.jokers.cards[i]:calculate_joker({first_hand_drawn = true})
end
end
SMODS.calculate_context({hand_drawn = true})
G.E_MANAGER:add_event(Event({
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
--- MODULE STACKTRACE
@ -500,7 +644,7 @@ function getDebugInfoForCrash()
local versionFile = love.filesystem.read("version.jkr")
if versionFile then
version = versionFile:match("[^\n]*") .. " (best guess)"
else
else
version = "???"
end
end
@ -511,18 +655,18 @@ function getDebugInfoForCrash()
modded_version = reqVersion
else
modded_version = "???"
end
end
end
local info = "Additional Context:\nBalatro Version: " .. version .. "\nModded Version: " ..
(modded_version)
local major, minor, revision, codename = love.getVersion()
info = info .. string.format("\nLÖVE Version: %d.%d.%d", major, minor, revision)
local lovely_success, lovely = pcall(require, "lovely")
if lovely_success then
info = info .. "\nLovely Version: " .. lovely.version
end
info = info .. "\nPlatform: " .. (love.system.getOS() or "???")
if SMODS and SMODS.Mods then
local mod_strings = ""
local lovely_strings = ""
@ -856,150 +1000,6 @@ injectStackTrace()
-- ----------------------------------------------
-- --------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
do
local logger = require("debugplus.logger")
@ -1099,17 +1099,21 @@ function love.load()
G:start_up()
--Steam integration
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
--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 old_cpath = package.cpath
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
else
st = require 'luasteam'
local success, _st = pcall(require, 'luasteam')
if success then st = _st else sendWarnMessage(_st); st = {} end
end
st.send_control = {
@ -1120,6 +1124,7 @@ function love.load()
if not (st.init and st:init()) then
st = nil
end
NFS.setWorkingDirectory(cwd)
--Set up the render window and the stage for the splash screen, then enter the gameloop with :update
G.STEAM = st
else
@ -1410,6 +1415,88 @@ function love.resize(w, h)
G.CANVAS:setFilter('linear', 'linear')
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({
last_clicked_area = nil,
last_clicked_card = nil,
@ -3585,92 +3672,6 @@ Handy.UI.get_config_tab = function(_tab)
return result
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 nativefs = require("nativefs")

View file

@ -1,4 +1,4 @@
LOVELY_INTEGRITY = 'd16a678af46c656e33c88a0349859985655ad1ef28db3eae950262607bda3372'
LOVELY_INTEGRITY = '1051baf1f570241c507e107aff5fffefe3df969645f0fe53ec0856cd5ac0a760'
--Class
Tag = Object:extend()
@ -103,11 +103,11 @@ function Tag:yep(message, _colour, func)
end
function Tag:set_ability()
local obj = SMODS.Tags[self.key]
local res
if obj and obj.set_ability and type(obj.set_ability) == 'function' then
obj:set_ability(self)
end
local obj = SMODS.Tags[self.key]
local res
if obj and obj.set_ability and type(obj.set_ability) == 'function' then
obj:set_ability(self)
end
if self.name == 'Orbital Tag' then
if G.orbital_hand then
self.ability.orbital_hand = G.orbital_hand
@ -120,13 +120,13 @@ function Tag:set_ability()
end
function Tag:apply_to_run(_context)
if self.triggered then return end
local obj = SMODS.Tags[self.key]
local res
if obj and obj.apply and type(obj.apply) == 'function' then
res = obj:apply(self, _context)
end
if res then return res end
if self.triggered then return end
local obj = SMODS.Tags[self.key]
local res
if obj and obj.apply and type(obj.apply) == 'function' then
res = obj:apply(self, _context)
end
if res then return res end
if not self.triggered and self.config.type == _context.type then
if _context.type == 'eval' then
if self.name == 'Investment Tag' and
@ -723,7 +723,7 @@ function Tag:generate_UI(_size)
return tag_sprite_tab, tag_sprite
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
local name_to_check, loc_vars = self.name, {}
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}
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)
return tag_sprite
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: