311 lines
8.2 KiB
TOML
311 lines
8.2 KiB
TOML
[manifest]
|
|
version = "1.0.0"
|
|
dump_lua = true
|
|
priority = -10
|
|
|
|
# Set metatable
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
self.config = config or {}
|
|
'''
|
|
payload = '''
|
|
self.config = setmetatable({card_limits = {card_limit}}, {
|
|
__index = function(t, key)
|
|
if key == "card_limit" then
|
|
return t.card_limits.card_limit
|
|
end
|
|
end,
|
|
__newindex = function(t, key, value)
|
|
if key == 'card_limit' then
|
|
t.true_card_limit = t.true_card_limit or 0
|
|
if not t.no_true_limit then rawset(t, 'true_card_limit', math.max(0, t.true_card_limit + value - (t.card_limits.card_limit or 0))) end
|
|
rawset(t.card_limits, key, value)
|
|
else
|
|
rawset(t, key, value)
|
|
end
|
|
end
|
|
})
|
|
|
|
SMODS.merge_defaults(self.config, config)
|
|
'''
|
|
|
|
# Load metatable
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
self.config = cardAreaTable.config
|
|
'''
|
|
payload = '''
|
|
self.config = setmetatable(cardAreaTable.config, {
|
|
__index = function(t, key)
|
|
if key == "card_limit" then
|
|
return t.card_limits.card_limit
|
|
end
|
|
end,
|
|
__newindex = function(t, key, value)
|
|
if key == 'card_limit' then
|
|
t.true_card_limit = t.true_card_limit or 0
|
|
if not t.no_true_limit then rawset(t, 'true_card_limit', math.max(0, t.true_card_limit + value - (t.card_limits.card_limit or 0))) end
|
|
rawset(t.card_limits, key, value)
|
|
else
|
|
rawset(t, key, value)
|
|
end
|
|
end
|
|
})
|
|
|
|
'''
|
|
|
|
# Bypass CardArea:change_size()
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
function CardArea:change_size(delta)
|
|
'''
|
|
payload = '''
|
|
if true then
|
|
self:handle_card_limit(delta)
|
|
return
|
|
end
|
|
'''
|
|
|
|
|
|
# CardArea:init()
|
|
# Add real_card_limit parameter
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
self.config.card_limit = config.card_limit or 52
|
|
'''
|
|
payload = '''
|
|
self.config.true_card_limit = self.config.card_limit
|
|
'''
|
|
|
|
|
|
|
|
# CardArea:emplace()
|
|
# Modifies card_limit
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
function CardArea:emplace(card, location, stay_flipped)
|
|
'''
|
|
payload = '''
|
|
self:handle_card_limit(card.ability.card_limit, card.ability.extra_slots_used)
|
|
'''
|
|
# CardArea:update()
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
if self == G.deck and self.config.card_limit > #G.playing_cards then self.config.card_limit = #G.playing_cards end
|
|
'''
|
|
payload = '''
|
|
if self == G.deck and (self.config.card_limit ~= #G.playing_cards or self.config.true_card_limit ~= #G.playing_cards) then self.config.card_limit = #G.playing_cards; self.config.true_card_limit = #G.playing_cards end
|
|
'''
|
|
|
|
|
|
|
|
# CardArea:remove_card()
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
card:remove_from_area()
|
|
'''
|
|
payload = '''
|
|
self:handle_card_limit(-1 * (card.ability.card_limit or 0), -1 * (card.ability.extra_slots_used or 0))
|
|
'''
|
|
|
|
# Card:add_to_deck()
|
|
# remove vanilla functionality
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'card.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
if self.edition and self.edition.negative then
|
|
if from_debuff then
|
|
self.ability.queue_negative_removal = nil
|
|
else
|
|
if self.ability.consumeable then
|
|
G.consumeables.config.card_limit = G.consumeables.config.card_limit + 1
|
|
else
|
|
G.jokers.config.card_limit = G.jokers.config.card_limit + 1
|
|
end
|
|
end
|
|
end
|
|
'''
|
|
payload = '''
|
|
-- removed by SMODS
|
|
'''
|
|
|
|
# Card:remove_from_deck()
|
|
# remove vanilla functionality
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'card.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
if self.edition and self.edition.negative and G.jokers then
|
|
if from_debuff then
|
|
self.ability.queue_negative_removal = true
|
|
else
|
|
if self.ability.consumeable then
|
|
G.consumeables.config.card_limit = G.consumeables.config.card_limit - 1
|
|
else
|
|
G.jokers.config.card_limit = G.jokers.config.card_limit - 1
|
|
end
|
|
end
|
|
end
|
|
'''
|
|
payload = '''
|
|
-- removed by SMODS
|
|
'''
|
|
|
|
# CardArea:update()
|
|
# Add support for extra_slots_used parameter
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
self.config.card_count = #self.cards
|
|
'''
|
|
payload = '''
|
|
self.config.card_count = self:count_extra_slots_used(self.cards)
|
|
'''
|
|
|
|
# CardArea:draw()
|
|
# Change count display to use true_card_limit
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'cardarea.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
{n=G.UIT.T, config={ref_table = self.config, ref_value = 'card_limit', scale = 0.3, colour = G.C.WHITE}},
|
|
'''
|
|
payload = '''
|
|
{n=G.UIT.T, config={ref_table = self.config, ref_value = 'true_card_limit', scale = 0.3, colour = G.C.WHITE}},
|
|
'''
|
|
|
|
# Add negative info_queue support
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'game.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
{card_limit = self.GAME.starting_params.consumable_slots, type = 'joker', highlight_limit = 1})
|
|
'''
|
|
payload = '''
|
|
{card_limit = self.GAME.starting_params.consumable_slots, type = 'joker', highlight_limit = 1, negative_info = 'consumable'})
|
|
'''
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'game.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
{card_limit = self.GAME.starting_params.joker_slots, type = 'joker', highlight_limit = 1})
|
|
'''
|
|
payload = '''
|
|
{card_limit = self.GAME.starting_params.joker_slots, type = 'joker', highlight_limit = 1, negative_info = 'joker'})
|
|
'''
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'game.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
{card_limit = self.GAME.starting_params.hand_size, type = 'hand'})
|
|
'''
|
|
payload = '''
|
|
{card_limit = self.GAME.starting_params.hand_size, type = 'hand', negative_info = 'playing_card'})
|
|
'''
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/UI_definitions.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
{card_limit = G.GAME.shop.joker_max, type = 'shop', highlight_limit = 1})
|
|
'''
|
|
payload = '''
|
|
{card_limit = G.GAME.shop.joker_max, type = 'shop', highlight_limit = 1, negative_info = true})
|
|
'''
|
|
|
|
|
|
# generate_card_ui()
|
|
# Adds info queue tooltips for generic card limit and slots used
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/common_events.lua'
|
|
match_indent = true
|
|
position = 'before'
|
|
pattern = '''
|
|
if first_pass and not (_c.set == 'Edition') and badges then
|
|
'''
|
|
payload = '''
|
|
if card and card.ability and (card.ability.extra_slots_used or 0) ~= 0 then
|
|
info_queue[#info_queue + 1] = {set = 'Other', key = 'generic_extra_slots', vars = {card.ability.extra_slots_used + 1}}
|
|
end
|
|
if card and card.ability and (card.ability.card_limit or 0) ~= 0 then
|
|
if not (card.edition and card.edition.card_limit == card.ability.card_limit) then
|
|
local amount = card.ability.card_limit - (card.edition and card.edition.card_limit or 0)
|
|
info_queue[#info_queue + 1] = {set = 'Other', key = amount == 1 and 'generic_card_limit' or 'generic_card_limit_plural', vars = {localize({type='variable', key= amount > 0 and 'a_chips' or 'a_chips_minus', vars ={math.abs(amount)}})}}
|
|
end
|
|
end
|
|
'''
|
|
|
|
|
|
|
|
# G.FUNCS.draw_from_deck_to_hand()
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/state_events.lua"
|
|
pattern = "local hand_space = e or*"
|
|
position = "at"
|
|
payload = """local hand_space = e
|
|
local cards_to_draw = {}
|
|
if not hand_space then
|
|
local limit = G.hand.config.card_limit - #G.hand.cards
|
|
local unfixed = not G.hand.config.fixed_limit
|
|
local n = 0
|
|
while n < #G.deck.cards do
|
|
local card = G.deck.cards[#G.deck.cards-n]
|
|
local mod = unfixed and (card.ability.card_limit - card.ability.extra_slots_used) or 0
|
|
if limit - 1 + mod < 0 then
|
|
else
|
|
limit = limit - 1 + mod
|
|
table.insert(cards_to_draw, card)
|
|
if limit <= 0 then break end
|
|
end
|
|
n = n + 1
|
|
end
|
|
hand_space = #cards_to_draw
|
|
end"""
|
|
match_indent = true |