302 lines
10 KiB
Lua
302 lines
10 KiB
Lua
-- ascended.lua - Used for Ascended Hands
|
|
|
|
G.FUNCS.cry_asc_UI_set = function(e)
|
|
if G.GAME.cry_exploit_override then
|
|
e.config.object.colours = { darken(G.C.SECONDARY_SET.Code, 0.2) }
|
|
else
|
|
e.config.object.colours = { G.C.GOLD }
|
|
end
|
|
e.config.object:update_text()
|
|
end
|
|
|
|
-- Needed because get_poker_hand_info isnt called at the end of the road
|
|
local evaluateroundref = G.FUNCS.evaluate_round
|
|
function G.FUNCS.evaluate_round()
|
|
evaluateroundref()
|
|
-- This is just the easiest way to check if its gold because lua is annoying
|
|
if G.C.UI_CHIPS[1] == G.C.GOLD[1] then
|
|
ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3)
|
|
ease_colour(G.C.UI_MULT, G.C.RED, 0.3)
|
|
end
|
|
end
|
|
|
|
-- this is a hook to make funny "x of a kind"/"flush x" display text
|
|
local pokerhandinforef = G.FUNCS.get_poker_hand_info
|
|
function G.FUNCS.get_poker_hand_info(_cards)
|
|
local text, loc_disp_text, poker_hands, scoring_hand, disp_text = pokerhandinforef(_cards)
|
|
-- Display text if played hand contains a Cluster and a Bulwark
|
|
-- Not Ascended hand related but this hooks in the same spot so i'm lumping it here anyways muahahahahahaha
|
|
if text == "cry_Clusterfuck" then
|
|
if next(poker_hands["cry_Bulwark"]) then
|
|
disp_text = "cry-Cluster Bulwark"
|
|
loc_disp_text = localize(disp_text, "poker_hands")
|
|
end
|
|
end
|
|
local hidden = false
|
|
for i, v in pairs(scoring_hand) do
|
|
if v.facing == "back" then
|
|
hidden = true
|
|
break
|
|
end
|
|
end
|
|
if G.SETTINGS.language == "en-us" then
|
|
if #scoring_hand > 5 and (text == "Flush Five" or text == "Five of a Kind" or text == "bunc_Spectrum Five") then
|
|
local rank_array = {}
|
|
local county = 0
|
|
for i = 1, #scoring_hand do
|
|
local val = scoring_hand[i]:get_id()
|
|
rank_array[val] = (rank_array[val] or 0) + 1
|
|
if rank_array[val] > county then
|
|
county = rank_array[val]
|
|
end
|
|
end
|
|
local function create_num_chunk(int) -- maybe useful enough to not be local? but tbh this function is probably some common coding exercise
|
|
if int >= 1000 then
|
|
int = 999
|
|
end
|
|
local ones = {
|
|
["1"] = "One",
|
|
["2"] = "Two",
|
|
["3"] = "Three",
|
|
["4"] = "Four",
|
|
["5"] = "Five",
|
|
["6"] = "Six",
|
|
["7"] = "Seven",
|
|
["8"] = "Eight",
|
|
["9"] = "Nine",
|
|
}
|
|
local tens = {
|
|
["1"] = "Ten",
|
|
["2"] = "Twenty",
|
|
["3"] = "Thirty",
|
|
["4"] = "Forty",
|
|
["5"] = "Fifty",
|
|
["6"] = "Sixty",
|
|
["7"] = "Seventy",
|
|
["8"] = "Eighty",
|
|
["9"] = "Ninety",
|
|
}
|
|
local str_int = string.reverse(int .. "") -- ehhhh whatever
|
|
local str_ret = ""
|
|
for i = 1, string.len(str_int) do
|
|
local place = str_int:sub(i, i)
|
|
if place ~= "0" then
|
|
if i == 1 then
|
|
str_ret = ones[place]
|
|
elseif i == 2 then
|
|
if place == "1" and str_ret ~= "" then -- admittedly not my smartest moment, i dug myself into a hole here...
|
|
if str_ret == "One" then
|
|
str_ret = "Eleven"
|
|
elseif str_ret == "Two" then
|
|
str_ret = "Twelve"
|
|
elseif str_ret == "Three" then
|
|
str_ret = "Thirteen"
|
|
elseif str_ret == "Five" then
|
|
str_ret = "Fifteen"
|
|
elseif str_ret == "Eight" then
|
|
str_ret = "Eighteen"
|
|
else
|
|
str_ret = str_ret .. "teen"
|
|
end
|
|
else
|
|
str_ret = tens[place] .. ((string.len(str_ret) > 0 and " " or "") .. str_ret)
|
|
end
|
|
elseif i == 3 then
|
|
str_ret = ones[place]
|
|
.. (" Hundred" .. ((string.len(str_ret) > 0 and " and " or "") .. str_ret))
|
|
end -- this line is wild
|
|
end
|
|
end
|
|
return str_ret
|
|
end
|
|
-- text gets stupid small at 100+ anyway
|
|
loc_disp_text = (text == "Flush Five" and "Flush " or text == "bunc_Spectrum Five" and "Spectrum " or "")
|
|
.. (
|
|
(county < 1000 and create_num_chunk(county) or "Thousand")
|
|
.. (text == "Five of a Kind" and " of a Kind" or "")
|
|
)
|
|
end
|
|
end
|
|
-- Ascension power
|
|
local a_power = Cryptid.calculate_ascension_power(
|
|
text,
|
|
_cards,
|
|
scoring_hand,
|
|
G.GAME.used_vouchers.v_cry_hyperspacetether,
|
|
G.GAME.bonus_asc_power
|
|
)
|
|
if a_power > 0 then
|
|
G.GAME.current_round.current_hand.cry_asc_num = a_power
|
|
-- Change mult and chips colors if hand is ascended
|
|
if not hidden then
|
|
ease_colour(G.C.UI_CHIPS, copy_table(G.C.GOLD), 0.3)
|
|
ease_colour(G.C.UI_MULT, copy_table(G.C.GOLD), 0.3)
|
|
G.GAME.current_round.current_hand.cry_asc_num_text = (
|
|
a_power and (type(a_power) == "table" and a_power:gt(to_big(0)) or a_power > 0)
|
|
)
|
|
and " (+" .. a_power .. ")"
|
|
or ""
|
|
else
|
|
ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3)
|
|
ease_colour(G.C.UI_MULT, G.C.RED, 0.3)
|
|
G.GAME.current_round.current_hand.cry_asc_num_text = ""
|
|
end
|
|
else
|
|
G.GAME.current_round.current_hand.cry_asc_num = 0
|
|
ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3)
|
|
ease_colour(G.C.UI_MULT, G.C.RED, 0.3)
|
|
G.GAME.current_round.current_hand.cry_asc_num_text = ""
|
|
end
|
|
return text, loc_disp_text, poker_hands, scoring_hand, disp_text
|
|
end
|
|
function Cryptid.ascend(num) -- edit this function at your leisure
|
|
if (Cryptid.safe_get(G, "GAME", "current_round", "current_hand", "cry_asc_num") or 0) <= 0 then
|
|
return num
|
|
end
|
|
if Cryptid.gameset(G.P_CENTERS.c_cry_sunplanet) == "modest" then
|
|
-- Default: Chips and Mult multiplier + 0.25 for every 1 Ascension power
|
|
return num * to_big(1 + ((0.25 + G.GAME.sunnumber.modest) * G.GAME.current_round.current_hand.cry_asc_num))
|
|
else
|
|
-- Default: Chips and Mult multiplier X1.25 for every 1 Ascension power
|
|
return num * to_big((1.25 + G.GAME.sunnumber.not_modest) ^ G.GAME.current_round.current_hand.cry_asc_num)
|
|
end
|
|
end
|
|
|
|
function Cryptid.pulse_flame(duration, intensity) -- duration is in seconds, intensity is in idfk honestly, but it increases pretty quickly
|
|
G.cry_flame_override = G.cry_flame_override or {}
|
|
G.cry_flame_override["duration"] = duration or 0.01
|
|
G.cry_flame_override["intensity"] = intensity or 2
|
|
end
|
|
|
|
function Cryptid.calculate_ascension_power(hand_name, hand_cards, hand_scoring_cards, tether, bonus)
|
|
bonus = bonus or 0
|
|
local starting = 0
|
|
if Cryptid.enabled("set_cry_poker_hand_stuff") ~= true then
|
|
return 0
|
|
end
|
|
if hand_name then
|
|
-- Get Starting Ascension power from Poker Hands
|
|
if hand_cards then
|
|
local check = Cryptid.hand_ascension_numbers(hand_name, tether)
|
|
if check then
|
|
starting = (tether and #hand_cards or #hand_scoring_cards) - check
|
|
end
|
|
end
|
|
-- Extra starting calculation for Declare hands
|
|
if G.GAME.hands[hand_name] and G.GAME.hands[hand_name].declare_cards then
|
|
local total = 0
|
|
for i, v in pairs(G.GAME.hands[hand_name].declare_cards or {}) do
|
|
local how_many_fit = 0
|
|
local suit, rank
|
|
for i2, v2 in pairs(hand_cards) do
|
|
if not v2.marked then
|
|
if SMODS.has_no_rank(v2) and v.rank == "rankless" or v2:get_id() == v.rank then
|
|
rank = true
|
|
end
|
|
if v2:is_suit(v.suit) or (v.suit == "suitless" and SMODS.has_no_suit(v2)) or not v.suit then
|
|
suit = true
|
|
end
|
|
if not (suit and rank) then
|
|
suit = false
|
|
rank = false
|
|
end
|
|
if suit and rank then
|
|
how_many_fit = how_many_fit + 1
|
|
v2.marked = true
|
|
end
|
|
end
|
|
end
|
|
if not rank or not suit then
|
|
how_many_fit = 0
|
|
end
|
|
total = total + how_many_fit
|
|
end
|
|
for i2, v2 in pairs(hand_cards) do
|
|
v2.marked = nil
|
|
end
|
|
starting = starting + (total - #hand_scoring_cards)
|
|
end
|
|
end
|
|
-- Get Ascension power from Exploit
|
|
if G.GAME.cry_exploit_override then
|
|
bonus = bonus + 1
|
|
end
|
|
-- Get Ascension Power From Sol (Observatory effect)
|
|
if G.GAME.used_vouchers.v_observatory and next(find_joker("cry-sunplanet")) then
|
|
if #find_joker("cry-sunplanet") == 1 then
|
|
bonus = bonus + 1
|
|
else
|
|
bonus = bonus + Cryptid.nuke_decimals(Cryptid.funny_log(2, #find_joker("cry-sunplanet") + 1), 2)
|
|
end
|
|
end
|
|
local final = math.max(0, starting + bonus)
|
|
-- Round to 1 if final value is less than 1 but greater than 0
|
|
if final > 0 and final < 1 then
|
|
final = 1
|
|
end
|
|
return final
|
|
end
|
|
function Cryptid.hand_ascension_numbers(hand_name, tether)
|
|
if Cryptid.ascension_numbers[hand_name] and type(Cryptid.ascension_numbers[hand_name]) == "function" then
|
|
return Cryptid.ascension_numbers[hand_name](hand_name, tether)
|
|
end
|
|
if hand_name == "High Card" then
|
|
return tether and 1 or nil
|
|
elseif hand_name == "Pair" then
|
|
return tether and 2 or nil
|
|
elseif hand_name == "Two Pair" then
|
|
return 4
|
|
elseif hand_name == "Three of a Kind" then
|
|
return tether and 3 or nil
|
|
elseif hand_name == "Straight" or hand_name == "Flush" or hand_name == "Straight Flush" then
|
|
return next(SMODS.find_card("j_four_fingers")) and Cryptid.gameset() ~= "modest" and 4 or 5
|
|
elseif
|
|
hand_name == "Full House"
|
|
or hand_name == "Five of a Kind"
|
|
or hand_name == "Flush House"
|
|
or hand_name == "cry_Bulwark"
|
|
or hand_name == "Flush Five"
|
|
or hand_name == "bunc_Spectrum"
|
|
or hand_name == "bunc_Straight Spectrum"
|
|
or hand_name == "bunc_Spectrum House"
|
|
or hand_name == "bunc_Spectrum Five"
|
|
then
|
|
return 5
|
|
elseif hand_name == "Four of a Kind" then
|
|
return G.GAME.used_vouchers.v_cry_hyperspacetether and 4 or nil
|
|
elseif hand_name == "cry_Clusterfuck" or hand_name == "cry_UltPair" then
|
|
return 8
|
|
elseif hand_name == "cry_WholeDeck" then
|
|
return 52
|
|
elseif hand_name == "cry_Declare0" then
|
|
return G.GAME.hands.cry_Declare0
|
|
and G.GAME.hands.cry_Declare0.declare_cards
|
|
and #G.GAME.hands.cry_Declare0.declare_cards
|
|
elseif hand_name == "cry_Declare1" then
|
|
return G.GAME.hands.cry_Declare1
|
|
and G.GAME.hands.cry_Declare1.declare_cards
|
|
and #G.GAME.hands.cry_Declare1.declare_cards
|
|
elseif hand_name == "cry_Declare2" then
|
|
return G.GAME.hands.cry_Declare2
|
|
and G.GAME.hands.cry_Declare2.declare_cards
|
|
and #G.GAME.hands.cry_Declare2.declare_cards
|
|
elseif
|
|
hand_name == "spa_Spectrum"
|
|
or hand_name == "spa_Straight_Spectrum"
|
|
or hand_name == "spa_Spectrum_House"
|
|
or hand_name == "spa_Spectrum_Five"
|
|
or hand_name == "spa_Flush_Spectrum"
|
|
or hand_name == "spa_Straight_Flush_Spectrum"
|
|
or hand_name == "spa_Flush_Spectrum_House"
|
|
or hand_name == "spa_Flush_Spectrum_Five"
|
|
then
|
|
return SpectrumAPI
|
|
and SpectrumAPI.configuration.misc.four_fingers_spectrums
|
|
and next(SMODS.find_card("j_four_fingers"))
|
|
and Cryptid.gameset() ~= "modest"
|
|
and 4
|
|
or 5
|
|
end
|
|
return nil
|
|
end
|