balatro-mods/Cryptid/lib/cross-mod.lua

172 lines
5.4 KiB
Lua

-- cross-mod.lua - Used for compatibility and content with other mods
--For Double Scale/Scalae, modify Green Joker to use one variable
SMODS.Joker:take_ownership("green_joker", {
config = { extra = 1, mult = 0 },
name = "cry-Green Joker", --will prevent old calculation code from working
loc_vars = function(self, info_queue, center)
return { vars = { center.ability.extra, center.ability.extra, center.ability.mult } }
end,
calculate = function(self, card, context)
if
context.discard
and not context.blueprint
and context.other_card == context.full_hand[#context.full_hand]
then
if card.ability.mult ~= 0 then
SMODS.scale_card(card, {
ref_table = card.ability,
ref_value = "mult",
scalar_table = card.ability,
scalar_value = "extra",
operation = function(ref_table, ref_value, initial, change)
ref_table[ref_value] = math.max(0, initial - change)
end,
message_key = "a_mult_minus",
message_colour = G.C.RED,
})
end
end
if context.cardarea == G.jokers and context.before and not context.blueprint then
SMODS.scale_card(card, {
ref_table = card.ability,
ref_value = "mult",
scalar_value = "extra",
message_key = "a_mult",
message_colour = G.C.RED,
})
end
if context.joker_main then
return {
message = localize({ type = "variable", key = "a_mult", vars = { card.ability.mult } }),
mult_mod = card.ability.mult,
}
end
end,
loc_txt = {},
}, true)
--Requires Malverk Mod
if (SMODS.Mods["malverk"] or {}).can_load then
AltTexture({
key = "jolly_jokers",
set = "Joker",
path = "jolly.png",
loc_txt = {
name = "Jolly Jokers",
},
})
TexturePack({ -- HD Texture Pack
key = "jolly_texture",
textures = {
"cry_jolly_jokers",
},
loc_txt = {
name = "Jolly",
text = {
"Jolly Jokers",
"Art by B",
},
},
})
end
--Make extra modifiers display on the Next Ante Preview
if (SMODS.Mods["AntePreview"] or {}).can_load then
local predict_hook = predict_next_ante
function predict_next_ante()
local small = "bl_small"
local big = "bl_big"
if G.GAME.modifiers.cry_big_boss_rate and pseudorandom("cry_big_boss") < G.GAME.modifiers.cry_big_boss_rate then
big = get_new_boss()
elseif G.GAME.modifiers.cry_rush_hour_ii then
small = get_new_boss()
big = get_new_boss()
end
local predictions = predict_hook()
local s = Cryptid.get_next_tag("Small")
local b = Cryptid.get_next_tag("Big")
if s or b then
predictions.Small.tag = s or predictions.Small.tag
predictions.Big.tag = b or predictions.Big.tag
end
if G.GAME.modifiers.cry_no_tags then
for _, pred in pairs(predictions) do
pred.tag = nil
end
end
predictions.Small.blind = small
predictions.Big.blind = big
if G.P_BLINDS[predictions.Small.blind].boss then
G.GAME.bosses_used[predictions.Small.blind] = G.GAME.bosses_used[predictions.Small.blind] - 1
end
if G.P_BLINDS[predictions.Big.blind].boss then
G.GAME.bosses_used[predictions.Big.blind] = G.GAME.bosses_used[predictions.Big.blind] - 1
end
if G.GAME.modifiers.cry_no_small_blind then
predictions.Small = nil
end
return predictions
end
end
--Designed to run if ran with is_suit overriding mods of higher priority (UnStable comes to first mind)
function Card:is_suit_force_enhancement(suit, bypass_debuff, flush_calc)
--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
local ref = self:is_suit(suit, bypass_debuff, flush_calc)
return ref
end
-- === Cross mod access for Cryptid === --
-- IcyEthics: Adding this section to collect functions that are intended to help other mods
-- interact with Cryptid's functionality in some way
-- ://CLASS API
-- This function allows another mod to set up a name and alias that's accessible by the ://CLASS Code Card
-- It's also set up more generically so that other mods can access the same information
Cryptid.enhancement_alias_list = {}
---@param list table
function Cryptid.load_enhancement_aliases(list)
for _enhancementkey, _listofaliases in pairs(list) do
Cryptid.enhancement_alias_list[_enhancementkey] = _listofaliases
end
end
-- Acclimator Voucher API functions
-- This should allow other mods to set up their own tier 3 vouchers in the style of
-- the Tarot Acclimator voucher by setting up the voucher and just initializing
-- a call to this function in their initialization
Cryptid.voucher_acclimator_data = {}
---@param voucher_key string
---@param localization_key string
---@param ref_value string
---@param colour any
function Cryptid.setup_voucher_rate_adjuster(voucher_key, localization_key, ref_value, colour)
-- Necessary values:
-- Voucher key
-- localize key
-- ref value
-- colour
if not voucher_key or not localization_key or not ref_value or not colour then
print("Cryptid.setup_voucher_rate_adjuster was improperly called")
end
Cryptid.voucher_acclimator_data[#Cryptid.voucher_acclimator_data + 1] = {
voucher_key = voucher_key,
localization_key = localization_key,
ref_value = ref_value,
colour = colour,
}
print(Cryptid.voucher_acclimator_data[#Cryptid.voucher_acclimator_data])
end
Cryptid.setup_voucher_rate_adjuster("v_cry_tacclimator", "b_tarot_rate", "tarot", G.C.SECONDARY_SET.Tarot)
Cryptid.setup_voucher_rate_adjuster("v_cry_pacclimator", "b_planet_rate", "planet", G.C.SECONDARY_SET.Planet)