Make harsh ante scaling even harsher

This commit is contained in:
Emik 2026-07-21 01:05:36 +02:00
parent ce35879117
commit 4557370ac8
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
6 changed files with 57 additions and 41 deletions

View file

@ -3,7 +3,7 @@
"id": "Roland",
"name": "Roland",
"prefix": "Roland",
"version": "2.9.69",
"version": "2.9.70",
"badge_colour": "8BE9FD",
"display_name": "Roland",
"main_file": "src/main.lua",

View file

@ -1,4 +1,4 @@
local f, q = (... or require "lib.shared")[1], (... or require "lib.shared")[2]
local f, q, r = (... or require "lib.shared")[1], (... or require "lib.shared")[2], (... or require "lib.shared")[4]
local atlas = SMODS.Atlas {
key = "joker",
@ -54,21 +54,6 @@ local joker = (function()
end
end)()
---@generic T
---@param tbl T[]
---@return fun(t: T[], i: integer): integer, T
---@return T[]
local function ipairs_reversed(tbl)
return function(t, i)
local k = i and i - 1 or #t
local v = t[k]
if v ~= nil then
return k, v
end
end, tbl
end
---@param card Card
---@return boolean
local function is_frozen(card)
@ -720,9 +705,9 @@ joker {
{card = card, xmult = card.ability.extra.xmult} or nil
end,
crimson = function()
local _ = G.jokers and f(G.jokers.cards, ipairs_reversed):where(is_frozen, false):each(function(v)
local r = G.jokers.cards[v.rank + 1]
local debuffed_by_crimson = r and not r.debuff and r.config.center.key == "j_Roland_crimson"
local _ = G.jokers and f(G.jokers.cards, r):where(is_frozen, false):each(function(v)
local right = G.jokers.cards[v.rank + 1]
local debuffed_by_crimson = right and not right.debuff and right.config.center.key == "j_Roland_crimson"
if debuffed_by_crimson and v.ability.Roland_crimson == nil then
local debuff = not not v.debuff

View file

@ -50,6 +50,9 @@ end
SMODS.Mods.Roland.config = require "config"
---@type (fun(rem: number): number|table)[]
SMODS.Mods.Roland.harsh_ante_scaling = SMODS.Mods.Roland.harsh_ante_scaling
--- @type table
Talisman = Talisman

View file

@ -137,6 +137,21 @@ local function u()
G.STATE ~= G.STATES.PLAY_TAROT)
end
---@generic T
---@param tbl T[]
---@return fun(t: T[], i: integer): integer, T
---@return T[]
local function r(tbl)
return function(t, i)
local k = i and i - 1 or #t
local v = t[k]
if v ~= nil then
return k, v
end
end, tbl
end
--- Creates one or more cards.
---@param ... any
---@return Card|Tag|(Card|Tag[])
@ -154,7 +169,7 @@ local function c(...)
return #cards > 1 and cards or cards[1]
end
return {f, q, u, setmetatable({}, {
return {f, q, u, r, setmetatable({}, {
__call = function(_, ...)
return c(...)
end,

View file

@ -1,9 +1,8 @@
local qol = assert(SMODS.load_file "src/lib/shared.lua")() or require "lib.shared"
local f, q = qol[1], qol[2]
local animated = SMODS.current_mod.config.animated_icon
SMODS.current_mod.qol = qol
local animated = SMODS.Mods.Roland.config.animated_icon
q {
qol[2] {
front = true,
no_delete = true,
blocking = false,
@ -15,22 +14,22 @@ q {
return false
end
f(assert(SMODS.load_file("src/credits.lua", "Roland"))() or require "credits"):each(function(v, k)
qol[1](assert(SMODS.load_file("src/credits.lua", "Roland"))() or require "credits"):each(function(v, k)
contributors["Roland_" .. k] = v
end)
if SMODS.Mods.DebugPlus and SMODS.Mods.Roland.config.import_funky then
_G.f, _G.q, _G.u, _G.c = unpack(qol)
_G.f, _G.q, _G.u, _G.r, _G.c = unpack(qol)
end
end,
}
f {"challenge", "spectral", "edition", "voucher", "tweaks", "blind", "charm", "joker", "tarot", "back", "seal", "tag"}
qol[1] {"challenge", "spectral", "edition", "voucher", "tweaks", "blind", "charm", "joker", "tarot", "back", "seal", "tag"}
:each(function(v)
assert(SMODS.load_file("src/" .. v .. ".lua"))(qol)
end)
local _ = Balatest and f {"joker", "blind", "spectral"}:each(function(v)
local _ = Balatest and qol[1] {"joker", "blind", "spectral"}:each(function(v)
assert(SMODS.load_file("src/tests/" .. v .. ".tests.lua"))(qol)
end)

View file

@ -1,4 +1,4 @@
local f, q = (... or require "lib.shared")[1], (... or require "lib.shared")[2]
local f, q, r = (... or require "lib.shared")[1], (... or require "lib.shared")[2], (... or require "lib.shared")[4]
SMODS.Joker:take_ownership("joker", {cost = 1}, true)
local orig_set_debuff = Card.set_debuff
@ -110,21 +110,35 @@ local function no_harsh_ante_scaling()
return not Talisman or not SMODS.Mods.Roland.config.harsh_ante_scaling
end
function get_blind_amount(ante, ...)
local loop = 39
---@type (fun(rem: number): number|table)[]
SMODS.current_mod.harsh_ante_scaling = {
function(rem)
return (Big.constants and Big.constants.TEN or Big:new {10}):pow(blind(rem + 1))
end,
function(rem)
return Big:new {1, rem + 1}
end,
function(rem)
return Big:new {1, 1, [rem + 2] = 1}
end,
function(rem)
return Big:new {1, 1, [blind(rem) + 2] = 1}
end,
function(rem)
return rem <= 1 and Big:new {1.7976931348623157e308, 1, [1.7975e308] = 1} or 1 / 0
end,
}
if ante < loop or no_harsh_ante_scaling() then
function get_blind_amount(ante, ...)
local offset = 40
if ante < offset or no_harsh_ante_scaling() then
return orig_get_blind_amount(ante, ...)
end
if (ante - 9) / 15 >= loop then
return 1 / 0
end
local loop = 10
local rem = tonumber(blind((ante % loop) + 1))
return ante / 15 >= loop and Big:new(f(blind(ante - (loop * 15))):map(f.const(10)):table()) or
(ante / 9 >= loop and Big:new(f(ante / loop - 8):map(f.const(10)):concat {rem}:table()) or
(ante / 2 >= loop and Big:new {rem, ante / loop} or
(Big.constants and Big.constants.TEN or Big:new {10}):pow(rem)))
return f(SMODS.Mods.Roland.harsh_ante_scaling, r):any(function(_, k)
return (ante - offset) / loop + 1 >= k
end)((ante - offset) % loop + 1)
end