balatro-mods/Cryptid/lovely/abstracted.toml

186 lines
4.6 KiB
TOML

[manifest]
version = "0.0.1"
dump_lua = true
priority = 2
# Destroy abstract cards at the end of round
[[patches]]
[patches.pattern]
target = "functions/state_events.lua"
pattern = "G.FUNCS.draw_from_hand_to_discard()"
position = "before"
payload = '''
i = 1
while i <= #G.hand.cards do
local gone = G.hand.cards[i]:calculate_abstract_break()
if not gone then i = i + 1 end
end
-- i = 1
-- while i <= #G.deck.cards do
-- local gone = G.deck.cards[i]:calculate_abstract_break()
-- if not gone then i = i + 1 end
-- end
-- i = 1
-- while i <= #G.discard.cards do
-- local gone = G.discard.cards[i]:calculate_abstract_break()
-- if not gone then i = i + 1 end
-- end
'''
match_indent = true
## Specific suit from enhancement check
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "if flush_calc then"
position = "before"
payload = '''
--Force suit to be suit X if specified in enhancement, only if not vampired
if Cryptid.cry_enhancement_has_specific_suit(self) and not self.vampired then
return suit == Cryptid.cry_enhancement_get_specific_suit(self)
end
'''
match_indent = true
## For better mod compat, the if statement will be wrapped around
## Idol: Ignore abstracted cards
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "valid_idol_cards[#valid_idol_cards+1] = v"
position = "before"
payload = '''
if not SMODS.has_enhancement(v, "m_cry_abstract") then
'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "valid_idol_cards[#valid_idol_cards+1] = v"
position = "after"
payload = '''
end
'''
match_indent = true
## Mail in rebate: ignore abstracted cards
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "valid_mail_cards[#valid_mail_cards+1] = v"
position = "before"
payload = '''
if not SMODS.has_enhancement(v, "m_cry_abstract") then
'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "valid_mail_cards[#valid_mail_cards+1] = v"
position = "after"
payload = '''
end
'''
match_indent = true
## castle: ignore abstracted cards
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "valid_castle_cards[#valid_castle_cards+1] = v"
position = "before"
payload = '''
if not SMODS.has_enhancement(v, "m_cry_abstract") then
'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "valid_castle_cards[#valid_castle_cards+1] = v"
position = "after"
payload = '''
end
'''
match_indent = true
## really hacky UnStable crossmod workaround;
[[patches]]
[patches.pattern]
target = "functions/misc_functions.lua"
pattern = "if hand[i]:is_suit(suit, nil, true) then flush_count = flush_count + 1; t[#t+1] = hand[i] end"
position = "before"
payload = '''
if Cryptid.cry_enhancement_has_specific_suit(hand[i]) then
if hand[i]:is_suit_force_enhancement(suit, nil, true) then flush_count = flush_count + 1; t[#t+1] = hand[i] end
else
'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/misc_functions.lua"
pattern = "if hand[i]:is_suit(suit, nil, true) then flush_count = flush_count + 1; t[#t+1] = hand[i] end"
position = "after"
payload = '''
end
'''
match_indent = true
## Artificially add abstracted 'suits' to flush calculations without declaring them (sigil, familiar)
## Also make sure to create a hard copy of suits and iterate, otherwise adding the artificial suit will add it to suit.obj_buffer for real!
[[patches]]
[patches.pattern]
target = "functions/misc_functions.lua"
pattern = "local suits = SMODS.Suit.obj_buffer"
position = "at"
payload = '''
local suits = {}
suits[#suits + 1] = 'cry_abstract'
for i,v in pairs(SMODS.Suit.obj_buffer) do
suits[#suits + 1] = v
end
'''
match_indent = true
## Artificially add abstracted 'rank' to X of a kind calculations
[[patches]]
[patches.pattern]
target = "functions/misc_functions.lua"
pattern = '''for i = 1, SMODS.Rank.max_id.value do
vals[i] = {}
end'''
position = "after"
payload = '''
vals[#vals + 1] = {}
'''
match_indent = true
## Force abstract cards to be only slightly above stone cards
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = '''elseif self.config.center.no_rank then'''
position = "before"
payload = '''
if Cryptid.cry_enhancement_get_specific_rank(self) == 'cry_abstract' then
mult = -9000
end
'''
match_indent = true
## Force abstracted to not be face cards
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = '''if not id then return end'''
position = "before"
payload = '''
if SMODS.has_enhancement(self, "m_cry_abstract") then
return
end
'''
match_indent = true