1531 lines
42 KiB
Lua
1531 lines
42 KiB
Lua
--TIP!!! for coding exotics, make sure you know which layer corresponds to which value!
|
|
--The Normal pos correponds to the background. use this for the layer that goes all the way in the back!
|
|
--The soul_pos = {blahblahblah, extra = {blahblahblah}} correspomds to the other two layers. the value in the extra table is for the layer that goes in the middle, and the other value is the one that goes all the way in the front
|
|
local gateway = {
|
|
dependencies = {
|
|
items = {
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Consumable",
|
|
set = "Spectral",
|
|
name = "cry-Gateway",
|
|
key = "gateway",
|
|
pos = { x = 0, y = 0 },
|
|
cost = 4,
|
|
atlas = "atlasnotjokers",
|
|
order = 90,
|
|
hidden = true, --default soul_set and soul_rate of 0.3% in spectral packs is used
|
|
can_use = function(self, card)
|
|
return true
|
|
end,
|
|
use = function(self, card, area, copier)
|
|
if (#SMODS.find_card("j_jen_saint") + #SMODS.find_card("j_jen_saint_attuned")) <= 0 then
|
|
local deletable_jokers = {}
|
|
for k, v in pairs(G.jokers.cards) do
|
|
if not v.ability.eternal then
|
|
deletable_jokers[#deletable_jokers + 1] = v
|
|
end
|
|
end
|
|
local _first_dissolve = nil
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = "before",
|
|
delay = 0.75,
|
|
func = function()
|
|
for k, v in pairs(deletable_jokers) do
|
|
if v.config.center.rarity == "cry_exotic" then
|
|
check_for_unlock({ type = "what_have_you_done" })
|
|
end
|
|
v:start_dissolve(nil, _first_dissolve)
|
|
_first_dissolve = true
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = "after",
|
|
delay = 0.4,
|
|
func = function()
|
|
play_sound("timpani")
|
|
local card = create_card("Joker", G.jokers, nil, "cry_exotic", nil, nil, nil, "cry_gateway")
|
|
card:add_to_deck()
|
|
G.jokers:emplace(card)
|
|
card:juice_up(0.3, 0.5)
|
|
return true
|
|
end,
|
|
}))
|
|
delay(0.6)
|
|
end,
|
|
}
|
|
local iterum = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Iterum",
|
|
key = "iterum",
|
|
config = { extra = { x_mult = 2, repetitions = 1 } },
|
|
pos = { x = 0, y = 1 },
|
|
rarity = "cry_exotic",
|
|
order = 500,
|
|
cost = 50,
|
|
blueprint_compat = true,
|
|
atlas = "atlasexotic",
|
|
soul_pos = { x = 1, y = 1, extra = { x = 2, y = 1 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.x_mult, math.min(40, center.ability.extra.repetitions) } }
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.repetition then
|
|
if context.cardarea == G.play then
|
|
return {
|
|
message = localize("k_again_ex"),
|
|
repetitions = math.min(40, card.ability.extra.repetitions),
|
|
card = card,
|
|
}
|
|
end
|
|
elseif context.individual then
|
|
if context.cardarea == G.play then
|
|
return {
|
|
x_mult = card.ability.extra.x_mult,
|
|
colour = G.C.RED,
|
|
card = card,
|
|
}
|
|
end
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Math" },
|
|
art = { "Ein13" },
|
|
code = { "Math" },
|
|
},
|
|
}
|
|
local universum = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Universum",
|
|
key = "universum",
|
|
config = { extra = 2 },
|
|
pos = { x = 3, y = 3 },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 501,
|
|
blueprint_compat = true,
|
|
atlas = "atlasexotic",
|
|
soul_pos = { x = 4, y = 3, extra = { x = 5, y = 3 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra } }
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.cry_universum then
|
|
return {
|
|
mod = to_big(card.ability.extra),
|
|
colour = G.C.DARK_EDITION,
|
|
message = localize("k_upgrade_ex"),
|
|
}
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Ein13" },
|
|
art = { "Ein13/hydrogenperoxiide" },
|
|
},
|
|
init = function(self)
|
|
--Universum Patches
|
|
local uht = update_hand_text
|
|
function update_hand_text(config, vals)
|
|
if next(find_joker("cry-Universum")) and not Talisman.config_file.disable_anims then
|
|
G.E_MANAGER:add_event(Event({ --This is the Hand name text for the poker hand
|
|
trigger = "before",
|
|
blockable = not config.immediate,
|
|
delay = config.delay or 0.8,
|
|
func = function()
|
|
local col = G.C.GREEN
|
|
if vals.chips and G.GAME.current_round.current_hand.chips ~= vals.chips then
|
|
local delta = vals.chips
|
|
if is_number(vals.chips) and is_number(G.GAME.current_round.current_hand.chips) then
|
|
delta = "X" .. number_format(vals.chips / G.GAME.current_round.current_hand.chips)
|
|
end
|
|
G.GAME.current_round.current_hand.chips = vals.chips
|
|
G.hand_text_area.chips:update(0)
|
|
if vals.StatusText then
|
|
attention_text({
|
|
text = delta,
|
|
scale = 0.8,
|
|
hold = 1,
|
|
cover = G.hand_text_area.chips.parent,
|
|
cover_colour = mix_colours(G.C.CHIPS, col, 0.1),
|
|
emboss = 0.05,
|
|
align = "cm",
|
|
cover_align = "cr",
|
|
})
|
|
end
|
|
end
|
|
if vals.mult and G.GAME.current_round.current_hand.mult ~= vals.mult then
|
|
local delta = vals.mult
|
|
if is_number(vals.mult) and is_number(G.GAME.current_round.current_hand.mult) then
|
|
delta = "X" .. number_format(vals.mult / G.GAME.current_round.current_hand.mult)
|
|
end
|
|
G.GAME.current_round.current_hand.mult = vals.mult
|
|
G.hand_text_area.mult:update(0)
|
|
if vals.StatusText then
|
|
attention_text({
|
|
text = delta,
|
|
scale = 0.8,
|
|
hold = 1,
|
|
cover = G.hand_text_area.mult.parent,
|
|
cover_colour = mix_colours(G.C.MULT, col, 0.1),
|
|
emboss = 0.05,
|
|
align = "cm",
|
|
cover_align = "cl",
|
|
})
|
|
end
|
|
if not G.TAROT_INTERRUPT then
|
|
G.hand_text_area.mult:juice_up()
|
|
end
|
|
end
|
|
if vals.handname and G.GAME.current_round.current_hand.handname ~= vals.handname then
|
|
G.GAME.current_round.current_hand.handname = vals.handname
|
|
if not config.nopulse then
|
|
G.hand_text_area.handname.config.object:pulse(0.2)
|
|
end
|
|
end
|
|
if vals.chip_total then
|
|
G.GAME.current_round.current_hand.chip_total = vals.chip_total
|
|
G.hand_text_area.chip_total.config.object:pulse(0.5)
|
|
end
|
|
if
|
|
vals.level
|
|
and G.GAME.current_round.current_hand.hand_level
|
|
~= " " .. localize("k_lvl") .. tostring(vals.level)
|
|
then
|
|
if vals.level == "" then
|
|
G.GAME.current_round.current_hand.hand_level = vals.level
|
|
else
|
|
G.GAME.current_round.current_hand.hand_level = " "
|
|
.. localize("k_lvl")
|
|
.. tostring(vals.level)
|
|
if is_number(vals.level) then
|
|
G.hand_text_area.hand_level.config.colour =
|
|
G.C.HAND_LEVELS[to_big(math.min(vals.level, 7)):to_number()]
|
|
else
|
|
G.hand_text_area.hand_level.config.colour = G.C.HAND_LEVELS[1]
|
|
end
|
|
G.hand_text_area.hand_level:juice_up()
|
|
end
|
|
end
|
|
if config.sound and not config.modded then
|
|
play_sound(config.sound, config.pitch or 1, config.volume or 1)
|
|
end
|
|
if config.modded then
|
|
if
|
|
G.HUD_blind
|
|
and G.HUD_blind.get_UIE_by_ID
|
|
and G.HUD_blind:get_UIE_by_ID("HUD_blind_debuff_1")
|
|
and G.HUD_blind:get_UIE_by_ID("HUD_blind_debuff_2")
|
|
then
|
|
G.HUD_blind:get_UIE_by_ID("HUD_blind_debuff_1"):juice_up(0.3, 0)
|
|
G.HUD_blind:get_UIE_by_ID("HUD_blind_debuff_2"):juice_up(0.3, 0)
|
|
end
|
|
G.GAME.blind:juice_up()
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = "after",
|
|
delay = 0.06 * G.SETTINGS.GAMESPEED,
|
|
blockable = false,
|
|
blocking = false,
|
|
func = function()
|
|
play_sound("tarot2", 0.76, 0.4)
|
|
return true
|
|
end,
|
|
}))
|
|
play_sound("tarot2", 1, 0.4)
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
else
|
|
uht(config, vals)
|
|
end
|
|
end
|
|
end,
|
|
}
|
|
local exponentia = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Exponentia",
|
|
key = "exponentia",
|
|
config = { extra = { Emult = 1, Emult_mod = 0.03 } },
|
|
pos = { x = 0, y = 0 },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
blueprint_compat = true,
|
|
perishable_compat = false,
|
|
atlas = "atlasexotic",
|
|
order = 503,
|
|
soul_pos = { x = 2, y = 0, extra = { x = 1, y = 0 } },
|
|
calculate = function(self, card, context)
|
|
if context.joker_main and (to_big(card.ability.extra.Emult) > to_big(1)) then
|
|
return {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = {
|
|
number_format(card.ability.extra.Emult),
|
|
},
|
|
}),
|
|
Emult_mod = card.ability.extra.Emult,
|
|
colour = G.C.DARK_EDITION,
|
|
}
|
|
end
|
|
end,
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.Emult_mod, center.ability.extra.Emult } }
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Enemui" },
|
|
art = { "Jevonn" },
|
|
code = { "Math" },
|
|
},
|
|
init = function(self)
|
|
-- Hook for scaling
|
|
local scie = SMODS.calculate_individual_effect
|
|
function SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition)
|
|
local ret = scie(effect, scored_card, key, amount, from_edition)
|
|
if (key == "x_mult" or key == "xmult" or key == "x_mult_mod" or key == "Xmult_mod") and amount ~= 1 then
|
|
for _, v in pairs(find_joker("cry-Exponentia")) do
|
|
local old = v.ability.extra.Emult
|
|
v.ability.extra.Emult = v.ability.extra.Emult + v.ability.extra.Emult_mod
|
|
card_eval_status_text(v, "extra", nil, nil, nil, {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = { number_format(to_big(v.ability.extra.Emult)) },
|
|
}),
|
|
})
|
|
exponentia_scale_mod(v, v.ability.extra.Emult_mod, old, v.ability.extra.Emult)
|
|
end
|
|
end
|
|
return ret
|
|
end
|
|
end,
|
|
}
|
|
local speculo = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Speculo",
|
|
key = "speculo",
|
|
pos = { x = 3, y = 1 },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
blueprint_compat = true,
|
|
immutable = true,
|
|
atlas = "atlasexotic",
|
|
order = 504,
|
|
soul_pos = { x = 4, y = 1, extra = { x = 5, y = 1 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
if not center.edition or (center.edition and not center.edition.negative) then
|
|
info_queue[#info_queue + 1] = G.P_CENTERS.e_negative
|
|
end
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.ending_shop then
|
|
local eligibleJokers = {}
|
|
for i = 1, #G.jokers.cards do
|
|
if G.jokers.cards[i].ability.name ~= card.ability.name and G.jokers.cards[i].ability.set == "Joker" then
|
|
eligibleJokers[#eligibleJokers + 1] = G.jokers.cards[i]
|
|
end
|
|
end
|
|
if #eligibleJokers > 0 then
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
local card = copy_card(pseudorandom_element(eligibleJokers, pseudoseed("cry_speculo")), nil)
|
|
card:set_edition({ negative = true }, true)
|
|
card:add_to_deck()
|
|
G.jokers:emplace(card)
|
|
return true
|
|
end,
|
|
}))
|
|
card_eval_status_text(
|
|
context.blueprint_card or card,
|
|
"extra",
|
|
nil,
|
|
nil,
|
|
nil,
|
|
{ message = localize("k_duplicated_ex") }
|
|
)
|
|
return nil, true
|
|
end
|
|
return
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Mystic" },
|
|
art = { "Mystic" },
|
|
code = { "Math" },
|
|
},
|
|
}
|
|
local redeo = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Redeo",
|
|
key = "redeo",
|
|
config = { extra = { ante_reduction = 1, money_req = 10, money_remaining = 0, money_mod = 10 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
return {
|
|
vars = {
|
|
center.ability.extra.ante_reduction,
|
|
center.ability.extra.money_req,
|
|
center.ability.extra.money_remaining,
|
|
center.ability.extra.money_mod,
|
|
},
|
|
}
|
|
end,
|
|
pos = { x = 3, y = 0 },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 506,
|
|
atlas = "atlasexotic",
|
|
soul_pos = { x = 4, y = 0, extra = { x = 5, y = 0 } },
|
|
calculate = function(self, card, context)
|
|
if context.cry_ease_dollars and to_big(context.cry_ease_dollars) < to_big(0) and not context.blueprint then
|
|
card.ability.extra.money_remaining = card.ability.extra.money_remaining - context.cry_ease_dollars
|
|
local ante_mod = 0
|
|
while to_big(card.ability.extra.money_remaining) >= to_big(card.ability.extra.money_req) do
|
|
card.ability.extra.money_remaining = card.ability.extra.money_remaining - card.ability.extra.money_req
|
|
card.ability.extra.money_req = card.ability.extra.money_req + card.ability.extra.money_mod
|
|
card.ability.extra.money_mod = math.min(1e300, math.ceil(card.ability.extra.money_mod * 1.06))
|
|
ante_mod = ante_mod - card.ability.extra.ante_reduction
|
|
end
|
|
if ante_mod < 0 then
|
|
ease_ante(ante_mod)
|
|
end
|
|
return nil, true
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Enemui" },
|
|
art = { "Jevonn" },
|
|
code = { "Math", "jenwalter666" },
|
|
},
|
|
init = function(self)
|
|
local ed = ease_dollars
|
|
function ease_dollars(mod, x)
|
|
ed(mod, x)
|
|
for i = 1, #G.jokers.cards do
|
|
local effects = G.jokers.cards[i]:calculate_joker({ cry_ease_dollars = mod })
|
|
end
|
|
end
|
|
end,
|
|
}
|
|
local tenebris = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Tenebris",
|
|
key = "tenebris",
|
|
pos = { x = 3, y = 2 },
|
|
soul_pos = { x = 4, y = 2, extra = { x = 5, y = 2 } },
|
|
config = { extra = { slots = 25, money = 25 } },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 507,
|
|
atlas = "atlasexotic",
|
|
calc_dollar_bonus = function(self, card)
|
|
return card.ability.extra.money
|
|
end,
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.slots, center.ability.extra.money } }
|
|
end,
|
|
add_to_deck = function(self, card, from_debuff)
|
|
G.jokers.config.card_limit = G.jokers.config.card_limit + card.ability.extra.slots
|
|
end,
|
|
remove_from_deck = function(self, card, from_debuff)
|
|
G.jokers.config.card_limit = G.jokers.config.card_limit - card.ability.extra.slots
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Gold" },
|
|
art = { "Mystic" },
|
|
code = { "jenwalter666" },
|
|
},
|
|
}
|
|
local effarcire = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Effarcire",
|
|
key = "effarcire",
|
|
config = {},
|
|
immutable = true,
|
|
pos = { x = 0, y = 0 },
|
|
soul_pos = { x = 1, y = 0, extra = { x = 2, y = 0 } },
|
|
cost = 50,
|
|
order = 505,
|
|
atlas = "effarcire",
|
|
rarity = "cry_exotic",
|
|
calculate = function(self, card, context)
|
|
if not context.blueprint and not context.retrigger_joker then
|
|
if context.first_hand_drawn then
|
|
G.FUNCS.draw_from_deck_to_hand(#G.deck.cards)
|
|
return nil, true
|
|
elseif G.hand.config.card_limit < 1 then
|
|
G.hand.config.card_limit = 1
|
|
end
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Frix" },
|
|
art = { "AlexZGreat" },
|
|
code = { "jenwalter666" },
|
|
},
|
|
}
|
|
local effarcire_sprite = {
|
|
object_type = "Atlas",
|
|
key = "effarcire",
|
|
path = "goofy.png",
|
|
px = 71,
|
|
py = 95,
|
|
}
|
|
local crustulum = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-crustulum",
|
|
key = "crustulum",
|
|
config = { extra = { chips = 0, chip_mod = 4 } },
|
|
pos = { x = 0, y = 2 },
|
|
soul_pos = { x = 2, y = 2, extra = { x = 1, y = 2 } },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 508,
|
|
atlas = "atlasexotic",
|
|
blueprint_compat = true,
|
|
perishable_compat = false,
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.chips, center.ability.extra.chip_mod } }
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.reroll_shop and not context.blueprint then
|
|
card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_mod
|
|
card_eval_status_text(card, "extra", nil, nil, nil, {
|
|
message = localize({ type = "variable", key = "a_chips", vars = { card.ability.extra.chips } }),
|
|
colour = G.C.CHIPS,
|
|
})
|
|
return nil, true
|
|
end
|
|
if context.joker_main and to_big(card.ability.extra.chips) > to_big(0) then
|
|
return {
|
|
message = localize({ type = "variable", key = "a_chips", vars = { card.ability.extra.chips } }),
|
|
chip_mod = card.ability.extra.chips,
|
|
}
|
|
end
|
|
end,
|
|
add_to_deck = function(self, card, from_debuff)
|
|
--This makes the reroll immediately after obtaining free because the game doesn't do that for some reason
|
|
G.GAME.current_round.free_rerolls = G.GAME.current_round.free_rerolls + 1
|
|
calculate_reroll_cost(true)
|
|
end,
|
|
remove_from_deck = function(self, card, from_debuff)
|
|
calculate_reroll_cost(true)
|
|
end,
|
|
cry_credits = {
|
|
idea = { "AlexZGreat" },
|
|
art = { "lolxddj" },
|
|
code = { "Jevonn" },
|
|
},
|
|
}
|
|
--todo: make the Emult always prime
|
|
local primus = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-primus",
|
|
key = "primus",
|
|
config = { extra = { Emult = 1.01, Emult_mod = 0.17 } },
|
|
pos = { x = 0, y = 4 },
|
|
rarity = "cry_exotic",
|
|
cost = 53,
|
|
order = 510,
|
|
blueprint_compat = true,
|
|
perishable_compat = false,
|
|
atlas = "atlasexotic",
|
|
soul_pos = { x = 2, y = 4, extra = { x = 1, y = 4 } },
|
|
calculate = function(self, card, context)
|
|
local check = true
|
|
if context.cardarea == G.jokers and context.before and not context.blueprint then
|
|
if context.scoring_hand then
|
|
for k, v in ipairs(context.full_hand) do
|
|
if
|
|
v:get_id() == 4
|
|
or v:get_id() == 6
|
|
or v:get_id() == 8
|
|
or v:get_id() == 9
|
|
or v:get_id() == 10
|
|
or v:get_id() == 11
|
|
or v:get_id() == 12
|
|
or v:get_id() == 13
|
|
then
|
|
check = false
|
|
end
|
|
end
|
|
end
|
|
if check then
|
|
card.ability.extra.Emult = card.ability.extra.Emult + card.ability.extra.Emult_mod
|
|
return {
|
|
card_eval_status_text(card, "extra", nil, nil, nil, {
|
|
message = localize("k_upgrade_ex"),
|
|
colour = G.C.DARK_EDITION,
|
|
}),
|
|
}
|
|
end
|
|
end
|
|
if context.joker_main and (to_big(card.ability.extra.Emult) > to_big(1)) then
|
|
return {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = {
|
|
number_format(card.ability.extra.Emult),
|
|
},
|
|
}),
|
|
Emult_mod = card.ability.extra.Emult,
|
|
colour = G.C.DARK_EDITION,
|
|
}
|
|
end
|
|
end,
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.Emult_mod, center.ability.extra.Emult } }
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Jevonn" },
|
|
art = { "Jevonn" },
|
|
code = { "Jevonn" },
|
|
},
|
|
}
|
|
local scalae = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Scalae",
|
|
key = "Scalae",
|
|
pos = { x = 3, y = 4 },
|
|
soul_pos = { x = 5, y = 4, extra = { x = 4, y = 4 } },
|
|
immutable = false,
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
atlas = "atlasexotic",
|
|
order = 311,
|
|
config = { extra = { scale = 1, scale_mod = 1, shadow_scale = 1, shadow_scale_mod = 1 } },
|
|
--todo: support jokers that scale multiple variables
|
|
calculate = function(self, card, context)
|
|
--initialize tracking object
|
|
card.ability.extra.scale = to_big(card.ability.extra.scale)
|
|
card.ability.extra.scale_mod = to_big(card.ability.extra.scale_mod)
|
|
card.ability.extra.shadow_scale = to_big(card.ability.extra.shadow_scale)
|
|
card.ability.extra.shadow_scale_mod = to_big(card.ability.extra.shadow_scale_mod)
|
|
if context.end_of_round and not context.individual and not context.repetition and not context.blueprint then
|
|
card.ability.extra.scale = card.ability.extra.scale + card.ability.extra.scale_mod
|
|
card.ability.extra.shadow_scale = card.ability.extra.scale
|
|
card.ability.extra.scale = card.ability.extra.shadow_scale
|
|
card.ability.extra.scale_mod = card.ability.extra.shadow_scale_mod
|
|
return {
|
|
message = localize("k_upgrade_ex"),
|
|
colour = G.C.DARK_EDITION,
|
|
}
|
|
end
|
|
card.ability.extra.scale = card.ability.extra.shadow_scale
|
|
card.ability.extra.scale_mod = card.ability.extra.shadow_scale_mod
|
|
return
|
|
end,
|
|
cry_scale_mod = function(self, card, joker, orig_scale_scale, true_base, orig_scale_base, new_scale_base)
|
|
if joker.ability.name ~= "cry-Scalae" then
|
|
local new_scale = (
|
|
to_big(true_base)
|
|
* (
|
|
(
|
|
1
|
|
+ (
|
|
(to_big(orig_scale_scale) / to_big(true_base))
|
|
^ (to_big(1) / to_big(card.ability.extra.scale))
|
|
)
|
|
) ^ card.ability.extra.scale
|
|
)
|
|
)
|
|
if (new_scale < to_big(1e100)) or not is_card_big(joker) then
|
|
if new_scale >= to_big(1e300) then
|
|
new_scale = 1e300
|
|
else
|
|
new_scale = to_number(new_scale)
|
|
end
|
|
end
|
|
return new_scale
|
|
end
|
|
end,
|
|
loc_vars = function(self, info_queue, card)
|
|
return { vars = { number_format(card.ability.extra.scale + 1), number_format(card.ability.extra.scale_mod) } }
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Mathguy" },
|
|
art = { "Mathguy" },
|
|
code = { "Mathguy" },
|
|
},
|
|
}
|
|
local stella_mortis = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Stella Mortis",
|
|
key = "stella_mortis",
|
|
config = { extra = { Emult = 1, Emult_mod = 0.4 } },
|
|
pos = { x = 3, y = 5 },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 502,
|
|
blueprint_compat = true,
|
|
perishable_compat = false,
|
|
atlas = "atlasexotic",
|
|
soul_pos = { x = 5, y = 5, extra = { x = 4, y = 5 } },
|
|
calculate = function(self, card, context)
|
|
if context.ending_shop then
|
|
local destructable_planet = {}
|
|
local quota = 1
|
|
for i = 1, #G.consumeables.cards do
|
|
if
|
|
G.consumeables.cards[i].ability.set == "Planet"
|
|
and not G.consumeables.cards[i].getting_sliced
|
|
and not G.consumeables.cards[i].ability.eternal
|
|
then
|
|
destructable_planet[#destructable_planet + 1] = G.consumeables.cards[i]
|
|
end
|
|
end
|
|
local planet_to_destroy = #destructable_planet > 0
|
|
and pseudorandom_element(destructable_planet, pseudoseed("stella_mortis"))
|
|
or nil
|
|
|
|
if planet_to_destroy then
|
|
if Incantation then
|
|
quota = planet_to_destroy:getEvalQty()
|
|
end
|
|
planet_to_destroy.getting_sliced = true
|
|
card.ability.extra.Emult = card.ability.extra.Emult + card.ability.extra.Emult_mod * quota
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
(context.blueprint_card or card):juice_up(0.8, 0.8)
|
|
planet_to_destroy:start_dissolve({ G.C.RED }, nil, 1.6)
|
|
return true
|
|
end,
|
|
}))
|
|
if not (context.blueprint_card or self).getting_sliced then
|
|
card_eval_status_text((context.blueprint_card or card), "extra", nil, nil, nil, {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = {
|
|
number_format(to_big(card.ability.extra.Emult + card.ability.extra.Emult_mod * quota)),
|
|
},
|
|
}),
|
|
})
|
|
end
|
|
return nil, true
|
|
end
|
|
end
|
|
if context.joker_main and (to_big(card.ability.extra.Emult) > to_big(1)) then
|
|
return {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = {
|
|
number_format(card.ability.extra.Emult),
|
|
},
|
|
}),
|
|
Emult_mod = card.ability.extra.Emult,
|
|
colour = G.C.DARK_EDITION,
|
|
}
|
|
end
|
|
end,
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.Emult_mod, center.ability.extra.Emult } }
|
|
end,
|
|
cry_credits = {
|
|
idea = { "SMG9000" },
|
|
art = { "SMG9000" },
|
|
code = { "SMG9000" },
|
|
},
|
|
}
|
|
local circulus_pistoris = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Circulus Pistoris",
|
|
key = "circulus_pistoris",
|
|
config = { extra = { Emult = math.pi, Echips = math.pi, hands_remaining = 3 } },
|
|
pos = { x = 0, y = 3 },
|
|
rarity = "cry_exotic",
|
|
cost = 10 * math.pi,
|
|
order = 509,
|
|
blueprint_compat = true,
|
|
atlas = "atlasexotic",
|
|
soul_pos = { x = 2, y = 3, extra = { x = 1, y = 3 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
return {
|
|
vars = {
|
|
safe_get(center, "edition", "cry_oversat") and "tau" or "pi",
|
|
center.ability.extra.hands_remaining,
|
|
},
|
|
}
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if
|
|
context.joker_main
|
|
and (
|
|
G.GAME.current_round.hands_left >= card.ability.extra.hands_remaining
|
|
and G.GAME.current_round.hands_left < card.ability.extra.hands_remaining + 1
|
|
)
|
|
then
|
|
local pi = math.pi
|
|
if safe_get(card, "edition", "cry_oversat") then
|
|
pi = 2 * pi
|
|
end
|
|
return {
|
|
Echip_mod = pi,
|
|
Emult_mod = pi,
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmultchips",
|
|
vars = { (safe_get(card, "edition", "cry_oversat") and "tau" or "pi") },
|
|
}),
|
|
colour = { 0.8, 0.45, 0.85, 1 }, --plasma colors
|
|
}
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "SMG9000", "Math" }, --not sure if there's more ppl I'm missing
|
|
art = { "HexaCryonic" },
|
|
code = { "SMG9000", "Math" },
|
|
},
|
|
}
|
|
local aequilibrium = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "Ace Aequilibrium",
|
|
key = "equilib",
|
|
config = { extra = { jokers = 2, card = nil } },
|
|
rarity = "cry_exotic",
|
|
pos = { x = 7, y = 0 },
|
|
soul_pos = { x = 6, y = 0, extra = { x = 8, y = 0 } },
|
|
atlas = "atlasexotic",
|
|
cost = 50,
|
|
order = 512,
|
|
blueprint_compat = true,
|
|
eternal_compat = true,
|
|
perishable_compat = true,
|
|
loc_vars = function(self, info_queue, center)
|
|
if not center.edition or (center.edition and not center.edition.negative) then
|
|
info_queue[#info_queue + 1] = G.P_CENTERS.e_negative
|
|
end
|
|
local joker_generated = "???"
|
|
if G.GAME.aequilibriumkey and G.GAME.aequilibriumkey > 1 then
|
|
joker_generated = localize({
|
|
type = "name_text",
|
|
set = "Joker",
|
|
key = G.P_CENTER_POOLS["Joker"][math.floor(G.GAME.aequilibriumkey or 1) - 1].key,
|
|
})
|
|
end
|
|
return { vars = { math.floor(math.min(25, center.ability.extra.jokers)), joker_generated } }
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.cardarea == G.jokers and context.before and not context.retrigger_joker then
|
|
for i = 1, math.floor(math.min(25, card.ability.extra.jokers)) do
|
|
local newcard = create_card("Joker", G.jokers, nil, nil, nil, nil, nil)
|
|
newcard:add_to_deck()
|
|
G.jokers:emplace(newcard)
|
|
newcard:set_edition({ negative = true }, true)
|
|
end
|
|
return nil, true
|
|
end
|
|
end,
|
|
--[[
|
|
add_to_deck = function(self, card, from_debuff)
|
|
if not from_debuff then
|
|
if card.ability.extra.card then
|
|
card.ability.extra.card = nil
|
|
end
|
|
card.ability.extra.card =
|
|
Card(G.jokers.T.x, G.jokers.T.y, G.CARD_W * 0.675, G.CARD_H * 0.675, G.P_CARDS.S_A, G.P_CENTERS.c_base)
|
|
--G.hand:emplace(card.ability.extra.card)
|
|
--card.ability.extra.card:set_card_area(G.hand)
|
|
card.ability.extra.card:start_materialize({ G.C.WHITE, G.C.WHITE }, nil, 1.2)
|
|
card.ability.extra.card:set_seal("Gold", true, true)
|
|
card.ability.extra.card:set_edition({ cry_glitched = true }, true)
|
|
--card.ability.extra.card.T.x = card.T.x
|
|
|
|
if card.ability.extra.card and G.P_CENTERS.j_blueprint.unlocked then
|
|
local viable_unlockables = {}
|
|
for k, v in ipairs(G.P_LOCKED) do
|
|
if (v.set == "Voucher" or v.set == "Joker") and not v.demo then
|
|
viable_unlockables[#viable_unlockables + 1] = v
|
|
end
|
|
end
|
|
if #viable_unlockables > 0 then
|
|
local card2 = card.ability.extra.card
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = "after",
|
|
delay = 4.04,
|
|
func = function()
|
|
card2 = Card(
|
|
G.jokers.T.x,
|
|
G.jokers.T.y,
|
|
G.CARD_W * 0.675,
|
|
G.CARD_H * 0.675,
|
|
nil,
|
|
pseudorandom_element(viable_unlockables) or self.P_CENTERS.j_joker
|
|
)
|
|
card2.no_ui = #viable_unlockables == 0
|
|
card2.states.visible = false
|
|
card.ability.extra.card.parent = nil
|
|
card.ability.extra.card:start_dissolve({ G.C.BLACK, G.C.ORANGE, G.C.RED, G.C.GOLD })
|
|
return true
|
|
end,
|
|
}))
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = "after",
|
|
delay = 1.04,
|
|
func = function()
|
|
card2:start_materialize()
|
|
--G.:emplace(card)
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
--Known bug: card does not reappear after save reopened
|
|
update = function(self, card, front)
|
|
if card.ability.extra.card then
|
|
if card.ability.extra.card.states and not card.ability.extra.card.states.drag.is then
|
|
card.ability.extra.card.T.x = card.T.x + card.T.w / 5
|
|
card.ability.extra.card.T.y = card.T.y + card.T.h / 5
|
|
end
|
|
end
|
|
end,
|
|
remove_from_deck = function(self, card, from_debuff)
|
|
if not from_debuff and card.ability.extra.card then
|
|
card.ability.extra.card:start_dissolve()
|
|
end
|
|
end,
|
|
]]
|
|
--
|
|
cry_credits = {
|
|
idea = { "Elial2" },
|
|
art = { "Elial2" },
|
|
code = { "Elial2" },
|
|
},
|
|
}
|
|
local facile = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-facile",
|
|
key = "facile",
|
|
config = { extra = { Emult = 3, check = 10, check2 = 0 } },
|
|
pos = { x = 6, y = 2 },
|
|
soul_pos = { x = 8, y = 2, extra = { x = 7, y = 2 } },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 513,
|
|
blueprint_compat = true,
|
|
atlas = "atlasexotic",
|
|
loc_vars = function(self, info_queue, center)
|
|
return {
|
|
vars = { center.ability.extra.Emult, center.ability.extra.check },
|
|
}
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.individual then
|
|
if context.cardarea == G.play then
|
|
card.ability.extra.check2 = card.ability.extra.check2 + 1
|
|
end
|
|
end
|
|
if context.joker_main and (to_big(card.ability.extra.Emult) > to_big(1)) then
|
|
if card.ability.extra.check2 <= card.ability.extra.check then
|
|
card.ability.extra.check2 = 0
|
|
return {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = { number_format(card.ability.extra.Emult) },
|
|
}),
|
|
Emult_mod = card.ability.extra.Emult,
|
|
colour = G.C.DARK_EDITION,
|
|
}
|
|
else
|
|
card.ability.extra.check2 = 0
|
|
end
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Enemui" },
|
|
art = { "Kailen" },
|
|
code = { "Jevonn" },
|
|
},
|
|
}
|
|
local gemino = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Gemino",
|
|
key = "gemino",
|
|
pos = { x = 6, y = 1 },
|
|
soul_pos = { x = 8, y = 1, extra = { x = 7, y = 1 } },
|
|
immutable = true,
|
|
cry_credits = {
|
|
jolly = {
|
|
"Jolly Open Winner",
|
|
"Requiacity",
|
|
},
|
|
art = { "Requiacity" },
|
|
code = { "Math" },
|
|
},
|
|
rarity = "cry_exotic",
|
|
blueprint_compat = true,
|
|
cost = 50,
|
|
order = 515,
|
|
atlas = "atlasexotic",
|
|
loc_vars = function(self, info_queue, card)
|
|
card.ability.blueprint_compat_ui = card.ability.blueprint_compat_ui or ""
|
|
card.ability.blueprint_compat_check = nil
|
|
return {
|
|
main_end = (card.area and card.area == G.jokers) and {
|
|
{
|
|
n = G.UIT.C,
|
|
config = { align = "bm", minh = 0.4 },
|
|
nodes = {
|
|
{
|
|
n = G.UIT.C,
|
|
config = {
|
|
ref_table = card,
|
|
align = "m",
|
|
colour = G.C.JOKER_GREY,
|
|
r = 0.05,
|
|
padding = 0.06,
|
|
func = "blueprint_compat",
|
|
},
|
|
nodes = {
|
|
{
|
|
n = G.UIT.T,
|
|
config = {
|
|
ref_table = card.ability,
|
|
ref_value = "blueprint_compat_ui",
|
|
colour = G.C.UI.TEXT_LIGHT,
|
|
scale = 0.32 * 0.8,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
} or nil,
|
|
}
|
|
end,
|
|
update = function(self, card, front)
|
|
if G.STAGE == G.STAGES.RUN then
|
|
other_joker = G.jokers.cards[1]
|
|
if other_joker and other_joker ~= card and not (Card.no(other_joker, "immutable", true)) then
|
|
card.ability.blueprint_compat = "compatible"
|
|
else
|
|
card.ability.blueprint_compat = "incompatible"
|
|
end
|
|
end
|
|
end,
|
|
calculate = function(self, card2, context)
|
|
if context.end_of_round and not context.repetition and not context.individual then
|
|
local check = false
|
|
local card = G.jokers.cards[1]
|
|
if not Card.no(G.jokers.cards[1], "immutable", true) then
|
|
cry_with_deck_effects(G.jokers.cards[1], function(card)
|
|
cry_misprintize(card, { min = 2, max = 2 }, nil, true)
|
|
end)
|
|
check = true
|
|
end
|
|
if check then
|
|
card_eval_status_text(
|
|
context.blueprint_card or card2,
|
|
"extra",
|
|
nil,
|
|
nil,
|
|
nil,
|
|
{ message = localize("k_upgrade_ex"), colour = G.C.GREEN }
|
|
)
|
|
end
|
|
return nil, true
|
|
end
|
|
end,
|
|
}
|
|
local energia = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Energia",
|
|
key = "energia",
|
|
pos = { x = 6, y = 3 },
|
|
soul_pos = { x = 8, y = 3, extra = { x = 7, y = 3 } },
|
|
blueprint_compat = false,
|
|
perishable_compat = false,
|
|
order = 514,
|
|
config = { extra = { tags = 1, tag_mod = 1 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
return {
|
|
vars = { math.min(center.ability.extra.tags, 40), center.ability.extra.tag_mod },
|
|
}
|
|
end,
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
atlas = "atlasexotic",
|
|
calculate = function(self, card, context)
|
|
if context.cry_add_tag then
|
|
local value = #G.GAME.tags or 0
|
|
local t = math.min(40 - value, card.ability.extra.tags)
|
|
card.ability.extra.tags = card.ability.extra.tags + card.ability.extra.tag_mod
|
|
if t > 0 then
|
|
card_eval_status_text(card, "extra", nil, nil, nil, {
|
|
message = localize({
|
|
type = "variable",
|
|
key = card.ability.extra.tags == 1 and "a_tag" or "a_tags",
|
|
vars = { t },
|
|
})[1],
|
|
colour = G.C.DARK_EDITION,
|
|
})
|
|
end
|
|
return { tags = math.max(t, 0) }
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "jenwalter666" },
|
|
art = { "Kailen" },
|
|
code = { "Math" },
|
|
},
|
|
}
|
|
--why is this an exotic???
|
|
local verisimile = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-verisimile",
|
|
key = "verisimile",
|
|
pos = { x = 0, y = 1 },
|
|
soul_pos = { x = 1, y = 1, extra = { x = 2, y = 1 } },
|
|
config = { extra = { xmult = 1 } },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 516,
|
|
immutable = true,
|
|
blueprint_compat = true,
|
|
atlas = "placeholders",
|
|
loc_vars = function(self, info_queue, center)
|
|
return { vars = { center.ability.extra.xmult } }
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if context.post_trigger and not context.blueprint then
|
|
--Todo: Gros Michel, Cavendish, Planet.lua
|
|
--Bus driver is ignored because it always triggers anyway
|
|
if
|
|
context.other_joker.ability.name == "8 Ball"
|
|
or context.other_joker.ability.name == "Space Joker"
|
|
or context.other_joker.ability.name == "Business Card"
|
|
or context.other_joker.ability.name == "Hallucination"
|
|
then
|
|
local variable = context.other_joker
|
|
card.ability.extra.xmult = card.ability.extra.xmult + variable.ability.extra
|
|
card_eval_status_text(
|
|
card,
|
|
"extra",
|
|
nil,
|
|
nil,
|
|
nil,
|
|
{ message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }) }
|
|
)
|
|
elseif
|
|
context.other_joker.ability.name == "Reserved Parking"
|
|
or context.other_joker.ability.name == "Bloodstone"
|
|
or context.other_joker.ability.name == "cry-Googol Play Card"
|
|
or context.other_joker.ability.name == "cry-Boredom"
|
|
or context.other_joker.ability.name == "cry-bonusjoker"
|
|
or context.other_joker.ability.name == "cry-multjoker"
|
|
or context.other_joker.ability.name == "cry-scrabble"
|
|
then
|
|
local variable = context.other_joker
|
|
card.ability.extra.xmult = card.ability.extra.xmult + variable.ability.extra.odds
|
|
card_eval_status_text(
|
|
card,
|
|
"extra",
|
|
nil,
|
|
nil,
|
|
nil,
|
|
{ message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }) }
|
|
)
|
|
elseif context.other_joker.ability.name == "cry-notebook" then
|
|
--This also triggers at notebook's end of round which isn't intentional but i'm not bothered enough about this to find a workaround
|
|
local variable = context.other_joker
|
|
card.ability.extra.xmult = card.ability.extra.xmult + variable.ability.extra.odds
|
|
card_eval_status_text(
|
|
card,
|
|
"extra",
|
|
nil,
|
|
nil,
|
|
nil,
|
|
{ message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }) }
|
|
)
|
|
end
|
|
return nil, true
|
|
elseif context.consumeable and not context.blueprint then
|
|
if context.consumeable.ability.name == "The Wheel of Fortune" and context.consumeable.cry_wheel_success then
|
|
local variable = context.consumeable
|
|
card.ability.extra.xmult = card.ability.extra.xmult + variable.ability.extra --Doesn't account for misprintizing for some reason
|
|
card_eval_status_text(
|
|
card,
|
|
"extra",
|
|
nil,
|
|
nil,
|
|
nil,
|
|
{ message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }) }
|
|
)
|
|
end
|
|
elseif context.joker_main and (to_big(card.ability.extra.xmult) > to_big(1)) then
|
|
return {
|
|
message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.xmult } }),
|
|
Xmult_mod = card.ability.extra.xmult,
|
|
}
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Enemui" },
|
|
code = { "Jevonn" },
|
|
},
|
|
}
|
|
local duplicare = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-duplicare",
|
|
key = "duplicare",
|
|
config = { extra = { Xmult = 1, Xmult_mod = 1 } },
|
|
pos = { x = 0, y = 6 },
|
|
soul_pos = { x = 2, y = 6, extra = { x = 1, y = 6 } },
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 517,
|
|
blueprint_compat = true,
|
|
atlas = "atlasexotic",
|
|
loc_vars = function(self, info_queue, center)
|
|
return {
|
|
vars = { center.ability.extra.Xmult, center.ability.extra.Xmult_mod },
|
|
}
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if
|
|
not context.blueprint
|
|
and (
|
|
(context.post_trigger and context.other_joker ~= card)
|
|
or (context.individual and context.cardarea == G.play)
|
|
)
|
|
then
|
|
card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_mod
|
|
card_eval_status_text(card, "extra", nil, nil, nil, { message = localize("k_upgrade_ex") })
|
|
end
|
|
if context.joker_main and (to_big(card.ability.extra.Xmult) > to_big(1)) then
|
|
return {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_xmult",
|
|
vars = {
|
|
number_format(card.ability.extra.Xmult),
|
|
},
|
|
}),
|
|
Xmult_mod = card.ability.extra.Xmult,
|
|
colour = G.C.MULT,
|
|
}
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "Enemui" },
|
|
art = { "Shellular" },
|
|
code = { "elial2" },
|
|
},
|
|
}
|
|
-- to be honest, this needs a refactor because
|
|
-- rescribed jokers are forgotten on save reload
|
|
-- they are not saved in a good way right now
|
|
-- status text is not handled properly
|
|
local rescribere = {
|
|
object_type = "Joker",
|
|
name = "cry-Rescribere",
|
|
key = "rescribere",
|
|
pos = { x = 0, y = 1 },
|
|
soul_pos = { x = 1, y = 1, extra = { x = 2, y = 1 } },
|
|
blueprint_compat = false,
|
|
perishable_compat = false,
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 69420,
|
|
atlas = "placeholders",
|
|
calculate = function(self, card, context)
|
|
local eligibleJokers = {}
|
|
for i = 1, #G.jokers.cards do
|
|
if G.jokers.cards[i].ability.name ~= card.ability.name then
|
|
eligibleJokers[#eligibleJokers + 1] = G.jokers.cards[i]
|
|
end
|
|
end
|
|
|
|
for i = 1, #eligibleJokers do
|
|
if
|
|
context.selling_card
|
|
and context.card.ability.name ~= card.ability.name
|
|
and context.card ~= eligibleJokers[i]
|
|
then
|
|
local oldfunc = eligibleJokers[i].calculate_joker
|
|
|
|
eligibleJokers[i].ability.rescribere_jokers = eligibleJokers[i].ability.rescribere_jokers or {}
|
|
eligibleJokers[i].ability.rescribere_jokers[#eligibleJokers[i].ability.rescribere_jokers + 1] =
|
|
context.card
|
|
|
|
eligibleJokers[i].calculate_joker = function(cardd, contextt)
|
|
local totalret = oldfunc(cardd, contextt)
|
|
|
|
v = eligibleJokers[i].ability.rescribere_jokers[#eligibleJokers[i].ability.rescribere_jokers]
|
|
|
|
local ret = v:calculate_joker(contextt)
|
|
if ret and type(ret) == "table" then
|
|
totalret = totalret or { message = "Copying", card = eligibleJokers[i] }
|
|
for _i, _v in pairs(ret) do
|
|
if not totalret[_i] then
|
|
totalret[_i] = ret[_i] or _v
|
|
--print(totalret[_i] .. "--------------")
|
|
else
|
|
if type(totalret[_i]) == "number" then
|
|
totalret[_i] = totalret[_i] + ret[_i]
|
|
end
|
|
end
|
|
end
|
|
totalret.card = eligibleJokers[i]
|
|
end
|
|
return totalret
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
}
|
|
local formidiulosus = {
|
|
dependencies = {
|
|
items = {
|
|
"c_cry_gateway",
|
|
"set_cry_exotic",
|
|
"set_cry_spooky",
|
|
},
|
|
},
|
|
object_type = "Joker",
|
|
name = "cry-Formidiulosus",
|
|
key = "formidiulosus",
|
|
pos = { x = 6, y = 4 },
|
|
soul_pos = { x = 8, y = 4, extra = { x = 7, y = 4 } },
|
|
blueprint_compat = true,
|
|
config = { extra = { candy = 3, Emult_mod = 0.01, Emult = 1 } },
|
|
loc_vars = function(self, info_queue, center)
|
|
return {
|
|
vars = { 3, center.ability.extra.Emult_mod, center.ability.extra.Emult },
|
|
}
|
|
end,
|
|
rarity = "cry_exotic",
|
|
cost = 50,
|
|
order = 518,
|
|
atlas = "atlasexotic",
|
|
no_dbl = true,
|
|
update = function(self, card, front)
|
|
card.ability.extra.Emult = 1
|
|
+ (card.ability.extra.Emult_mod * #advanced_find_joker(nil, "cry_candy", nil, nil, true))
|
|
end,
|
|
calculate = function(self, card, context)
|
|
if
|
|
(context.buying_card or context.cry_creating_card)
|
|
and context.card.ability.set == "Joker"
|
|
and context.card.config.center.rarity == "cry_cursed"
|
|
and not context.blueprint
|
|
and not (context.card == card)
|
|
then
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
context.card:start_dissolve()
|
|
card_eval_status_text(card, "extra", nil, nil, nil, {
|
|
message = localize("k_nope_ex"),
|
|
colour = G.C.BLACK,
|
|
})
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
if context.ending_shop then
|
|
for i = 1, 3 do
|
|
local card = create_card("Joker", G.jokers, nil, "cry_candy", nil, nil, nil, "cry_trick_candy")
|
|
card:set_edition({ negative = true }, true)
|
|
card:add_to_deck()
|
|
G.jokers:emplace(card)
|
|
end
|
|
end
|
|
if
|
|
context.cardarea == G.jokers
|
|
and (to_big(card.ability.extra.Emult) > to_big(1))
|
|
and not context.before
|
|
and not context.after
|
|
then
|
|
return {
|
|
message = localize({
|
|
type = "variable",
|
|
key = "a_powmult",
|
|
vars = {
|
|
number_format(card.ability.extra.Emult),
|
|
},
|
|
}),
|
|
Emult_mod = card.ability.extra.Emult,
|
|
colour = G.C.DARK_EDITION,
|
|
}
|
|
end
|
|
end,
|
|
cry_credits = {
|
|
idea = { "HexaCryonic", "Kailen" },
|
|
art = { "Foegro" },
|
|
code = { "Foegro" },
|
|
},
|
|
}
|
|
local items = {
|
|
gateway,
|
|
iterum,
|
|
universum,
|
|
exponentia,
|
|
speculo,
|
|
redeo,
|
|
tenebris,
|
|
effarcire,
|
|
effarcire_sprite,
|
|
crustulum,
|
|
primus,
|
|
scalae,
|
|
stella_mortis,
|
|
circulus_pistoris,
|
|
aequilibrium,
|
|
facile,
|
|
gemino,
|
|
energia,
|
|
--verisimile, WHY IS THIS AN EXOTIC????????????????????
|
|
--rescribere, [NEEDS REFACTOR]
|
|
duplicare,
|
|
--formidiulosus
|
|
}
|
|
return {
|
|
name = "Exotic Jokers",
|
|
init = function()
|
|
--I have no clue what this patch does
|
|
local cc = copy_card
|
|
function copy_card(card, a, b, c, d)
|
|
local m
|
|
if
|
|
card
|
|
and card.ability
|
|
and card.ability.extra
|
|
and type(card.ability.extra) == "table"
|
|
and card.ability.extra.card
|
|
then
|
|
m = card.ability.extra.card
|
|
card.ability.extra.card = nil
|
|
end
|
|
local ret = cc(card, a, b, c, d)
|
|
if
|
|
card
|
|
and card.ability
|
|
and card.ability.extra
|
|
and type(card.ability.extra) == "table"
|
|
and card.ability.extra.card
|
|
and m
|
|
then
|
|
card.ability.extra.card = m
|
|
end
|
|
return ret
|
|
end
|
|
end,
|
|
items = items,
|
|
}
|