Create blind art
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 35 KiB |
BIN
assets/1x/blind.png.kra
Normal file
BIN
assets/1x/blind.png~
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
assets/1x/dual.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/1x/mirror.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/1x/seal.png
Normal file
|
After Width: | Height: | Size: 904 B |
BIN
assets/1x/spectral.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 40 KiB |
BIN
assets/2x/blinder.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
assets/2x/dual.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 398 B After Width: | Height: | Size: 398 B |
BIN
assets/2x/mirror.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/2x/seal.png
Normal file
|
After Width: | Height: | Size: 1 KiB |
BIN
assets/2x/spectral.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
|
@ -1,6 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
for file in 1x/*.png; do
|
directory=$(dirname $(readlink -f "$0"))
|
||||||
|
|
||||||
|
for file in "$directory"/1x/*.png; do
|
||||||
filename=$(basename "$file")
|
filename=$(basename "$file")
|
||||||
output_file="2x/${filename}"
|
output_file="$directory/2x/${filename}"
|
||||||
magick "$file" -filter point -resize 200% "$output_file"
|
magick "$file" -filter point -resize 200% "$output_file"
|
||||||
done
|
done
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,20 @@ return {
|
||||||
Blind = {
|
Blind = {
|
||||||
bl_Roland_divide = {
|
bl_Roland_divide = {
|
||||||
name = "The Great Divide",
|
name = "The Great Divide",
|
||||||
text = {"Half of the deck", "is {C:discard}discarded"},
|
text = {"Half of the deck", "is discarded"},
|
||||||
|
},
|
||||||
|
bl_Roland_equinox = {
|
||||||
|
name = "The Equinox",
|
||||||
|
text = {"No UI"},
|
||||||
},
|
},
|
||||||
bl_Roland_improbable = {
|
bl_Roland_improbable = {
|
||||||
name = "The Improbable",
|
name = "The Improbable",
|
||||||
text = {"All probabilities", "cannot happen"},
|
text = {"All probabilities", "cannot happen"},
|
||||||
},
|
},
|
||||||
|
bl_Roland_mitotic = {
|
||||||
|
name = "The Mitotic",
|
||||||
|
text = {"Discarded cards", "are copied"},
|
||||||
|
},
|
||||||
bl_Roland_nimble = {
|
bl_Roland_nimble = {
|
||||||
name = "The Nimble",
|
name = "The Nimble",
|
||||||
text = {"The first 5 cards", "drawn are played"},
|
text = {"The first 5 cards", "drawn are played"},
|
||||||
|
|
@ -45,9 +53,11 @@ return {
|
||||||
name = "The Tranquilizer",
|
name = "The Tranquilizer",
|
||||||
text = {"#1#s are debuffed", "Changes based on", "most common rank"},
|
text = {"#1#s are debuffed", "Changes based on", "most common rank"},
|
||||||
},
|
},
|
||||||
bl_Roland_xerox = {
|
},
|
||||||
name = "The Xerox",
|
Enhanced = {
|
||||||
text = {"Discarded cards", "are copied"},
|
m_wild = {
|
||||||
|
name = "Wild Card",
|
||||||
|
text = {unpack(G.localization.descriptions.Enhanced.m_wild.text), "Can not be", "debuffed"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Joker = {
|
Joker = {
|
||||||
|
|
@ -103,8 +113,8 @@ return {
|
||||||
text = {
|
text = {
|
||||||
"This Joker gains the",
|
"This Joker gains the",
|
||||||
"rank of {C:attention}unscored cards",
|
"rank of {C:attention}unscored cards",
|
||||||
"if played hand is a",
|
"to Mult if played hand",
|
||||||
"{C:attention}Four of a Kind",
|
"is a {C:attention}Four of a Kind",
|
||||||
"{C:inactive}(Currently {C:red}+#1#{C:inactive} Mult)",
|
"{C:inactive}(Currently {C:red}+#1#{C:inactive} Mult)",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -176,7 +186,7 @@ return {
|
||||||
"Sell this Joker to",
|
"Sell this Joker to",
|
||||||
"{C:attention}draw{} the bottom",
|
"{C:attention}draw{} the bottom",
|
||||||
"card of the {C:hand}deck",
|
"card of the {C:hand}deck",
|
||||||
"{C:inactive}(Currently {V:1}#1##2#{V:2}#3#{C:inactive})",
|
"{C:inactive}(Currently {V:1}#1#{C:inactive}#2#{V:2}#3#{C:inactive})",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
j_Roland_temple = {
|
j_Roland_temple = {
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,12 @@ local function back(b)
|
||||||
b.atlas = "void"
|
b.atlas = "void"
|
||||||
SMODS.Back(b)
|
SMODS.Back(b)
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: undefined-global
|
||||||
if not CardSleeves then
|
if not CardSleeves then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: undefined-global
|
||||||
CardSleeves.Sleeve {
|
CardSleeves.Sleeve {
|
||||||
key = key,
|
key = key,
|
||||||
pos = b.pos,
|
pos = b.pos,
|
||||||
|
|
|
||||||
246
src/blind.lua
|
|
@ -1,5 +1,17 @@
|
||||||
local f, q = unpack(... or require "src.functional")
|
local f, q = unpack(... or require "src.functional")
|
||||||
|
|
||||||
|
local blind = (function()
|
||||||
|
local y = 0
|
||||||
|
|
||||||
|
---@param tbl SMODS.Blind
|
||||||
|
return function(tbl)
|
||||||
|
tbl.pos = {x = 0, y = y}
|
||||||
|
tbl.atlas = "blind"
|
||||||
|
SMODS.Blind(tbl)
|
||||||
|
y = y + 1
|
||||||
|
end
|
||||||
|
end)()
|
||||||
|
|
||||||
SMODS.Atlas {
|
SMODS.Atlas {
|
||||||
px = 34,
|
px = 34,
|
||||||
py = 34,
|
py = 34,
|
||||||
|
|
@ -50,71 +62,15 @@ local function disable_improbable()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function is_locked()
|
local function is_locked()
|
||||||
return G.STATE ~= G.STATES.SELECTING_HAND or G.CONTROLLER.locked or (G.GAME.STOP_USE and G.GAME.STOP_USE > 0)
|
return G.STATE ~= G.STATES.SELECTING_HAND or G.CONTROLLER.locked or
|
||||||
|
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
if cry_prob then
|
blind {
|
||||||
local orig_prob = cry_prob
|
|
||||||
|
|
||||||
---@diagnostic disable-next-line: lowercase-global
|
|
||||||
cry_prob = function(owned, den, rigged)
|
|
||||||
return G.GAME.modifiers.Roland_improbable and 0 or orig_prob(owned, den, rigged)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local orig_update = Game.update
|
|
||||||
|
|
||||||
---@diagnostic disable-next-line: duplicate-set-field
|
|
||||||
function Game:update(dt)
|
|
||||||
orig_update(self, dt)
|
|
||||||
local orig = G.GAME.probabilities
|
|
||||||
|
|
||||||
if not G.GAME.modifiers.Roland_improbable or getmetatable(orig) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local normal = orig.normal
|
|
||||||
|
|
||||||
local mt = {
|
|
||||||
orig = orig,
|
|
||||||
__index = function(_, k)
|
|
||||||
return k == "normal" and 0 or orig[k]
|
|
||||||
end,
|
|
||||||
__newindex = function(_, k, v)
|
|
||||||
orig[k] = (k == "normal" and v == 0) and normal or v
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
local proxy = {}
|
|
||||||
setmetatable(proxy, mt)
|
|
||||||
G.GAME.probabilities = proxy
|
|
||||||
end
|
|
||||||
|
|
||||||
SMODS.Blind {
|
|
||||||
key = "improbable",
|
|
||||||
boss = {min = 4, max = 10},
|
|
||||||
boss_colour = HEX "009966",
|
|
||||||
atlas = "blind",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
pronouns = "it_its",
|
|
||||||
mult = 2,
|
|
||||||
dollars = 5,
|
|
||||||
defeat = disable_improbable,
|
|
||||||
disable = disable_improbable,
|
|
||||||
set_blind = function(_)
|
|
||||||
G.GAME.modifiers.Roland_improbable = true
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
SMODS.Blind {
|
|
||||||
key = "nimble",
|
key = "nimble",
|
||||||
boss = {min = 1, max = 10},
|
boss = {min = 1},
|
||||||
boss_colour = HEX "0291fb",
|
boss_colour = HEX "0291fb",
|
||||||
atlas = "blind",
|
|
||||||
pos = {x = 0, y = 1},
|
|
||||||
pronouns = "she_her",
|
pronouns = "she_her",
|
||||||
mult = 2,
|
|
||||||
dollars = 5,
|
|
||||||
config = {draw = 5},
|
config = {draw = 5},
|
||||||
defeat = function(self)
|
defeat = function(self)
|
||||||
self.disabled = false
|
self.disabled = false
|
||||||
|
|
@ -145,15 +101,11 @@ SMODS.Blind {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Blind {
|
blind {
|
||||||
key = "divide",
|
key = "divide",
|
||||||
boss = {min = 1, max = 10},
|
boss = {min = 1},
|
||||||
boss_colour = HEX "0291fb",
|
boss_colour = HEX "b18480",
|
||||||
atlas = "blind",
|
|
||||||
pos = {x = 0, y = 1},
|
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
mult = 2,
|
|
||||||
dollars = 5,
|
|
||||||
disable = function()
|
disable = function()
|
||||||
q(function()
|
q(function()
|
||||||
local count = #G.discard.cards
|
local count = #G.discard.cards
|
||||||
|
|
@ -185,19 +137,97 @@ SMODS.Blind {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Blind {
|
blind {
|
||||||
key = "tranquilizer",
|
key = "mitotic",
|
||||||
boss = {min = 6, max = 10},
|
boss = {min = 3},
|
||||||
boss_colour = HEX "0291fb",
|
boss_colour = HEX "80b48e",
|
||||||
atlas = "blind",
|
|
||||||
pos = {x = 0, y = 1},
|
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
|
disable = function(self)
|
||||||
|
self.disabled = true
|
||||||
|
end,
|
||||||
|
calculate = function(_, b, context)
|
||||||
|
if b.disabled or not context.pre_discard then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local cards_added = {}
|
||||||
|
local count = #G.hand.highlighted
|
||||||
|
|
||||||
|
f(G.hand.highlighted, ipairs):take(count):foreach(function(v, i)
|
||||||
|
local copy = copy_card(v)
|
||||||
|
copy:add_to_deck()
|
||||||
|
table.insert(G.hand, copy)
|
||||||
|
table.insert(cards_added, copy)
|
||||||
|
table.insert(G.playing_cards, copy)
|
||||||
|
draw_card(G.hand, G.discard, i / count * 100, "down", false, copy, nil, nil, true)
|
||||||
|
end)
|
||||||
|
|
||||||
|
b.triggered = true
|
||||||
|
playing_card_joker_effects(cards_added)
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
blind {
|
||||||
|
key = "improbable",
|
||||||
|
boss = {min = 4},
|
||||||
|
boss_colour = HEX "009966",
|
||||||
|
pronouns = "it_its",
|
||||||
mult = 2,
|
mult = 2,
|
||||||
dollars = 5,
|
dollars = 5,
|
||||||
|
defeat = disable_improbable,
|
||||||
|
disable = disable_improbable,
|
||||||
|
set_blind = function(_)
|
||||||
|
G.GAME.modifiers.Roland_improbable = true
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
if cry_prob then
|
||||||
|
local orig_cry_prob = cry_prob
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: lowercase-global
|
||||||
|
function cry_prob(...)
|
||||||
|
return G.GAME.modifiers.Roland_improbable and 0 or orig_cry_prob(...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local orig_update = Game.update
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
function Game.update(...)
|
||||||
|
orig_update(...)
|
||||||
|
local orig = G.GAME.probabilities
|
||||||
|
|
||||||
|
if not G.GAME.modifiers.Roland_improbable or getmetatable(orig) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local normal = orig.normal
|
||||||
|
|
||||||
|
local mt = {
|
||||||
|
orig = orig,
|
||||||
|
__index = function(_, k)
|
||||||
|
return k == "normal" and 0 or orig[k]
|
||||||
|
end,
|
||||||
|
__newindex = function(_, k, v)
|
||||||
|
orig[k] = (k == "normal" and v == 0) and normal or v
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
local proxy = {}
|
||||||
|
setmetatable(proxy, mt)
|
||||||
|
G.GAME.probabilities = proxy
|
||||||
|
end
|
||||||
|
|
||||||
|
blind {
|
||||||
|
key = "tranquilizer",
|
||||||
|
boss = {min = 6},
|
||||||
|
boss_colour = HEX "bdaecc",
|
||||||
|
pronouns = "they_them",
|
||||||
collection_loc_vars = function(_)
|
collection_loc_vars = function(_)
|
||||||
return {
|
return {
|
||||||
vars = {localize {
|
vars = {localize {
|
||||||
type = "variable", key = "b_Roland_most_common_card",
|
type = "variable",
|
||||||
|
key = "b_Roland_most_common_card",
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
|
|
@ -238,39 +268,53 @@ SMODS.Blind {
|
||||||
end,
|
end,
|
||||||
recalc_debuff = function(self, card)
|
recalc_debuff = function(self, card)
|
||||||
local id, _ = common_rank()
|
local id, _ = common_rank()
|
||||||
return not self.disabled and id == card:get_id()
|
local ret = not self.disabled and id == card:get_id()
|
||||||
|
self.triggered = ret
|
||||||
|
return ret
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Blind {
|
blind {
|
||||||
key = "xerox",
|
key = "equinox",
|
||||||
boss = {min = 3, max = 10},
|
boss = {min = 6},
|
||||||
boss_colour = HEX "0291fb",
|
boss_colour = HEX "000000",
|
||||||
atlas = "blind",
|
|
||||||
pos = {x = 0, y = 1},
|
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
mult = 2,
|
defeat = function()
|
||||||
dollars = 5,
|
G.GAME.modifiers.Roland_equinox = false
|
||||||
disable = function(self)
|
|
||||||
self.disabled = true
|
|
||||||
end,
|
end,
|
||||||
calculate = function(_, blind, context)
|
disable = function()
|
||||||
if blind.disabled or not context.pre_discard then
|
G.GAME.modifiers.Roland_equinox = false
|
||||||
return
|
end,
|
||||||
|
set_blind = function()
|
||||||
|
G.GAME.modifiers.Roland_equinox = true
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
local function equinox()
|
||||||
|
return G.GAME and
|
||||||
|
G.GAME.modifiers and
|
||||||
|
G.GAME.modifiers.Roland_equinox and
|
||||||
|
G.STATE ~= G.STATES.GAME_OVER
|
||||||
end
|
end
|
||||||
|
|
||||||
local cards_added = {}
|
local orig_draw = Card.draw
|
||||||
local count = #G.hand.highlighted
|
|
||||||
|
|
||||||
f(G.hand.highlighted, ipairs):take(count):foreach(function(v, i)
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
local copy = copy_card(v)
|
function Card:draw(...)
|
||||||
copy:add_to_deck()
|
if equinox() and not self.states.hover.is and not self.states.focus.is then
|
||||||
table.insert(G.hand, copy)
|
add_to_drawhash(self)
|
||||||
table.insert(cards_added, copy)
|
else
|
||||||
table.insert(G.playing_cards, copy)
|
return orig_draw(self, ...)
|
||||||
draw_card(G.hand, G.discard, i / count * 100, "down", false, copy, nil, nil, true)
|
end
|
||||||
end)
|
end
|
||||||
|
|
||||||
playing_card_joker_effects(cards_added)
|
local orig_draw_self = UIElement.draw_self
|
||||||
end,
|
|
||||||
}
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
function UIElement:draw_self(...)
|
||||||
|
if equinox() and not self.config.button and not self.config.button_UIE then
|
||||||
|
add_to_drawhash(self)
|
||||||
|
else
|
||||||
|
return orig_draw_self(self, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ q(function()
|
||||||
key = "iphone",
|
key = "iphone",
|
||||||
atlas = "iphone",
|
atlas = "iphone",
|
||||||
pos = {x = 0, y = 0},
|
pos = {x = 0, y = 0},
|
||||||
|
unlocked = true,
|
||||||
|
discovered = true,
|
||||||
calculate = function(_, _, context)
|
calculate = function(_, _, context)
|
||||||
local _ = context.skip_blind and q(function()
|
local _ = context.skip_blind and q(function()
|
||||||
G.blind_prompt_box = G.blind_prompt_box and G.blind_prompt_box:remove()
|
G.blind_prompt_box = G.blind_prompt_box and G.blind_prompt_box:remove()
|
||||||
|
|
@ -31,6 +33,6 @@ q(function()
|
||||||
|
|
||||||
charm:inject()
|
charm:inject()
|
||||||
charm:process_loc_text()
|
charm:process_loc_text()
|
||||||
SMODS._save_d_u(charm)
|
-- charm._d, charm._u, charm._saved_d_u = true, true, true -- SMODS._save_d_u(charm)
|
||||||
SMODS.current_mod = current_mod
|
SMODS.current_mod = current_mod
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,7 @@ end
|
||||||
--- Determines if a center is allowed to be usable.
|
--- Determines if a center is allowed to be usable.
|
||||||
---@return boolean
|
---@return boolean
|
||||||
local function u()
|
local function u()
|
||||||
return not ((G.play and #G.play.cards > 0 or
|
return not ((G.play and #G.play.cards > 0 or G.CONTROLLER.locked or
|
||||||
G.CONTROLLER.locked or
|
|
||||||
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
|
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
|
||||||
G.STATE ~= G.STATES.HAND_PLAYED and
|
G.STATE ~= G.STATES.HAND_PLAYED and
|
||||||
G.STATE ~= G.STATES.DRAW_TO_HAND and
|
G.STATE ~= G.STATES.DRAW_TO_HAND and
|
||||||
|
|
|
||||||
180
src/joker.lua
|
|
@ -234,47 +234,55 @@ SMODS.Joker {
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Joker {
|
SMODS.Joker {
|
||||||
key = "sunny", -- Cracked egg
|
key = "mrsbones",
|
||||||
atlas = "void",
|
atlas = "void",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
pos = {x = 0, y = 0},
|
pos = {x = 0, y = 0},
|
||||||
cost = 2,
|
config = {extra = {xmult = 4, requirement = 4}},
|
||||||
rarity = 1,
|
cost = 4,
|
||||||
|
rarity = 2,
|
||||||
eternal_compat = false,
|
eternal_compat = false,
|
||||||
|
blueprint_compat = false,
|
||||||
|
perishable_compat = true,
|
||||||
|
loc_vars = function(_, _, card)
|
||||||
|
return {vars = {card.ability.extra.xmult, card.ability.extra.requirement * 100}}
|
||||||
|
end,
|
||||||
|
calculate = function(_, card, context)
|
||||||
|
if context.blueprint then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if context.joker_main then
|
||||||
|
return {xmult = card.ability.extra.xmult}
|
||||||
|
end
|
||||||
|
|
||||||
|
if context.blind_defeated and G.GAME.chips / card.ability.extra.requirement < G.GAME.blind.chips then
|
||||||
|
q(function()
|
||||||
|
G.hand_text_area.blind_chips:juice_up()
|
||||||
|
G.hand_text_area.game_chips:juice_up()
|
||||||
|
play_sound("tarot1")
|
||||||
|
card:start_dissolve()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
SMODS.Joker {
|
||||||
|
key = "estrogen",
|
||||||
|
atlas = "void",
|
||||||
|
pronouns = "they_them",
|
||||||
|
pos = {x = 0, y = 0},
|
||||||
|
config = {extra = {division = 4}},
|
||||||
|
cost = 8,
|
||||||
|
rarity = 3,
|
||||||
|
eternal_compat = true,
|
||||||
blueprint_compat = true,
|
blueprint_compat = true,
|
||||||
perishable_compat = true,
|
perishable_compat = true,
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
local last = ((G.deck or {}).cards or {})[1]
|
return {vars = {card.ability.extra.division}}
|
||||||
|
|
||||||
if last or card.area ~= G.jokers then
|
|
||||||
return {
|
|
||||||
vars = {
|
|
||||||
"",
|
|
||||||
localize {type = "variable", key = "b_Roland_na"},
|
|
||||||
"",
|
|
||||||
colours = {G.C.JOKER_GREY, G.C.JOKER_GREY},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local suit = last.base.suit
|
|
||||||
local value = last.base.value
|
|
||||||
local name = last.ability.name or ""
|
|
||||||
local no_rank = SMODS.has_no_rank(last)
|
|
||||||
local no_suit = SMODS.has_no_suit(last)
|
|
||||||
|
|
||||||
return {
|
|
||||||
vars = {
|
|
||||||
value and not no_rank and localize(value or 14, "ranks") or name,
|
|
||||||
not no_rank and not no_suit and localize {type = "variable", key = "b_Roland_of"} or "",
|
|
||||||
no_suit and "" or localize(suit, "suits_plural"),
|
|
||||||
colours = {G.C.IMPORTANT, G.C.SUITS[suit] or G.C.JOKER_GREY},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
end,
|
||||||
calculate = function(_, _, context)
|
calculate = function(_, card, context)
|
||||||
local _ = context.selling_self and
|
return context.joker_main and {mult = hand_chips / card.ability.extra.division} or nil
|
||||||
draw_card(G.deck, G.hand, 100, "up", false, G.deck.cards[1])
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -283,8 +291,8 @@ SMODS.Joker {
|
||||||
atlas = "void",
|
atlas = "void",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
pos = {x = 0, y = 0},
|
pos = {x = 0, y = 0},
|
||||||
config = {extra = {money = 4}},
|
config = {extra = {money = 6}},
|
||||||
cost = 4,
|
cost = 6,
|
||||||
rarity = 1,
|
rarity = 1,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
blueprint_compat = true,
|
blueprint_compat = true,
|
||||||
|
|
@ -335,7 +343,7 @@ SMODS.Joker {
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
pos = {x = 0, y = 0},
|
pos = {x = 0, y = 0},
|
||||||
config = {extra = {mult = 0}},
|
config = {extra = {mult = 0}},
|
||||||
cost = 8,
|
cost = 6,
|
||||||
rarity = 3,
|
rarity = 3,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
blueprint_compat = true,
|
blueprint_compat = true,
|
||||||
|
|
@ -349,7 +357,7 @@ SMODS.Joker {
|
||||||
|
|
||||||
q(function()
|
q(function()
|
||||||
playing_card_joker_effects(f(G.play):take(#G.play):map(function(v)
|
playing_card_joker_effects(f(G.play):take(#G.play):map(function(v)
|
||||||
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
|
G.playing_card = (G.playing_card or 0) + 1
|
||||||
G.deck.config.card_limit = G.deck.config.card_limit + 1
|
G.deck.config.card_limit = G.deck.config.card_limit + 1
|
||||||
local copy = copy_card(v, nil, nil, G.playing_card)
|
local copy = copy_card(v, nil, nil, G.playing_card)
|
||||||
copy:add_to_deck()
|
copy:add_to_deck()
|
||||||
|
|
@ -362,6 +370,51 @@ SMODS.Joker {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SMODS.Joker {
|
||||||
|
key = "sunny", -- Cracked egg
|
||||||
|
atlas = "void",
|
||||||
|
pronouns = "they_them",
|
||||||
|
pos = {x = 0, y = 0},
|
||||||
|
cost = 2,
|
||||||
|
rarity = 1,
|
||||||
|
eternal_compat = false,
|
||||||
|
blueprint_compat = true,
|
||||||
|
perishable_compat = true,
|
||||||
|
loc_vars = function(_, _, card)
|
||||||
|
local last = ((G.deck or {}).cards or {})[1]
|
||||||
|
|
||||||
|
if not last or card.area ~= G.jokers then
|
||||||
|
return {
|
||||||
|
vars = {
|
||||||
|
"",
|
||||||
|
localize {type = "variable", key = "b_Roland_na"},
|
||||||
|
"",
|
||||||
|
colours = {G.C.JOKER_GREY, G.C.JOKER_GREY},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local suit = last.base.suit
|
||||||
|
local value = last.base.value
|
||||||
|
local name = last.ability.name or ""
|
||||||
|
local no_rank = SMODS.has_no_rank(last)
|
||||||
|
local no_suit = SMODS.has_no_suit(last)
|
||||||
|
|
||||||
|
return {
|
||||||
|
vars = {
|
||||||
|
value and not no_rank and localize(value or 14, "ranks") or name,
|
||||||
|
not no_rank and not no_suit and localize {type = "variable", key = "b_Roland_of"} or "",
|
||||||
|
no_suit and "" or localize(suit, "suits_plural"),
|
||||||
|
colours = {G.C.IMPORTANT, G.C.SUITS[suit] or G.C.JOKER_GREY},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
calculate = function(_, _, context)
|
||||||
|
local _ = context.selling_self and
|
||||||
|
draw_card(G.deck, G.hand, 100, "up", false, G.deck.cards[1])
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
SMODS.Joker {
|
SMODS.Joker {
|
||||||
key = "yard",
|
key = "yard",
|
||||||
atlas = "void",
|
atlas = "void",
|
||||||
|
|
@ -438,59 +491,6 @@ SMODS.Joker {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Joker {
|
|
||||||
key = "mrsbones",
|
|
||||||
atlas = "void",
|
|
||||||
pronouns = "they_them",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
config = {extra = {xmult = 4, requirement = 4}},
|
|
||||||
cost = 4,
|
|
||||||
rarity = 2,
|
|
||||||
eternal_compat = false,
|
|
||||||
blueprint_compat = false,
|
|
||||||
perishable_compat = true,
|
|
||||||
loc_vars = function(_, _, card)
|
|
||||||
return {vars = {card.ability.extra.xmult, card.ability.extra.requirement * 100}}
|
|
||||||
end,
|
|
||||||
calculate = function(_, card, context)
|
|
||||||
if context.blueprint then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if context.joker_main then
|
|
||||||
return {xmult = card.ability.extra.xmult}
|
|
||||||
end
|
|
||||||
|
|
||||||
if context.blind_defeated and G.GAME.chips / card.ability.extra.requirement < G.GAME.blind.chips then
|
|
||||||
q(function()
|
|
||||||
G.hand_text_area.blind_chips:juice_up()
|
|
||||||
G.hand_text_area.game_chips:juice_up()
|
|
||||||
play_sound("tarot1")
|
|
||||||
card:start_dissolve()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
SMODS.Joker {
|
|
||||||
key = "estrogen",
|
|
||||||
atlas = "void",
|
|
||||||
pronouns = "they_them",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
config = {extra = {division = 4}},
|
|
||||||
cost = 8,
|
|
||||||
rarity = 3,
|
|
||||||
eternal_compat = true,
|
|
||||||
blueprint_compat = true,
|
|
||||||
perishable_compat = true,
|
|
||||||
loc_vars = function(_, _, card)
|
|
||||||
return {vars = {card.ability.extra.division}}
|
|
||||||
end,
|
|
||||||
calculate = function(_, card, context)
|
|
||||||
return context.joker_main and {mult = hand_chips / card.ability.extra.division} or nil
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
SMODS.Joker {
|
SMODS.Joker {
|
||||||
key = "oops", -- Slot machine
|
key = "oops", -- Slot machine
|
||||||
atlas = "void",
|
atlas = "void",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
local qol = assert(SMODS.load_file "src/functional.lua")() or require "src.functional"
|
local qol = assert(SMODS.load_file "src/functional.lua")() or require "src.functional"
|
||||||
|
|
||||||
qol[1] {"challenge", "spectral", "blind", "charm", "joker", "back", "seal"}:foreach(function(v)
|
qol[1] {"challenge", "spectral", "tweaks", "blind", "charm", "joker", "back", "seal"}:foreach(function(v)
|
||||||
assert(SMODS.load_file("src/" .. v .. ".lua"))(qol)
|
assert(SMODS.load_file("src/" .. v .. ".lua"))(qol)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
@ -10,8 +10,6 @@ if Balatest then
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
SMODS.Joker:take_ownership("joker", {cost = 1}, true)
|
|
||||||
|
|
||||||
SMODS.Atlas {
|
SMODS.Atlas {
|
||||||
px = 256,
|
px = 256,
|
||||||
py = 256,
|
py = 256,
|
||||||
|
|
|
||||||
15
src/seal.lua
|
|
@ -1,14 +1,15 @@
|
||||||
local f, q = unpack(... or require "src.functional")
|
local f, q = unpack(... or require "src.functional")
|
||||||
|
|
||||||
-- SMODS.Atlas {
|
SMODS.Atlas {
|
||||||
-- px = 71,
|
px = 71,
|
||||||
-- py = 95,
|
py = 95,
|
||||||
-- key = "seal",
|
key = "seal",
|
||||||
-- path = "seal.png",
|
path = "seal.png",
|
||||||
-- }
|
}
|
||||||
|
|
||||||
SMODS.Seal {
|
SMODS.Seal {
|
||||||
key = "glass",
|
key = "glass",
|
||||||
atlas = "void",
|
atlas = "seal",
|
||||||
pos = {x = 0, y = 0},
|
pos = {x = 0, y = 0},
|
||||||
badge_colour = HEX "f6f6f6",
|
badge_colour = HEX "f6f6f6",
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,19 @@
|
||||||
local f, q, u = unpack(... or require "src.functional")
|
local f, q, u = unpack(... or require "src.functional")
|
||||||
|
|
||||||
|
local spectral = (function()
|
||||||
|
local x = 0
|
||||||
|
|
||||||
|
---@param tbl SMODS.Consumable
|
||||||
|
return function(tbl)
|
||||||
|
tbl.cost = 4
|
||||||
|
tbl.set = "Spectral"
|
||||||
|
tbl.atlas = "spectral"
|
||||||
|
tbl.pos = {x = x, y = 0}
|
||||||
|
SMODS.Consumable(tbl)
|
||||||
|
x = x + 1
|
||||||
|
end
|
||||||
|
end)()
|
||||||
|
|
||||||
SMODS.Sound {
|
SMODS.Sound {
|
||||||
key = "void",
|
key = "void",
|
||||||
path = "void.ogg",
|
path = "void.ogg",
|
||||||
|
|
@ -8,8 +22,8 @@ SMODS.Sound {
|
||||||
SMODS.Atlas {
|
SMODS.Atlas {
|
||||||
px = 71,
|
px = 71,
|
||||||
py = 95,
|
py = 95,
|
||||||
key = "afterimage",
|
key = "spectral",
|
||||||
path = "afterimage.png",
|
path = "spectral.png",
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Atlas {
|
SMODS.Atlas {
|
||||||
|
|
@ -19,12 +33,8 @@ SMODS.Atlas {
|
||||||
path = "void.png",
|
path = "void.png",
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Consumable {
|
spectral {
|
||||||
key = "afterimage",
|
key = "afterimage",
|
||||||
set = "Spectral",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
cost = 4,
|
|
||||||
atlas = "afterimage",
|
|
||||||
pronouns = "he_they",
|
pronouns = "he_they",
|
||||||
config = {extra = {amount = 1, hand = -1}},
|
config = {extra = {amount = 1, hand = -1}},
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
|
|
@ -54,12 +64,8 @@ SMODS.Consumable {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Consumable {
|
spectral {
|
||||||
key = "dual",
|
key = "dual",
|
||||||
set = "Spectral",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
cost = 4,
|
|
||||||
atlas = "afterimage",
|
|
||||||
pronouns = "he_they",
|
pronouns = "he_they",
|
||||||
config = {extra = {amount = 2}},
|
config = {extra = {amount = 2}},
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
|
|
@ -88,12 +94,8 @@ SMODS.Consumable {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Consumable {
|
spectral {
|
||||||
key = "mirror",
|
key = "mirror",
|
||||||
set = "Spectral",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
cost = 4,
|
|
||||||
atlas = "afterimage",
|
|
||||||
pronouns = "he_they",
|
pronouns = "he_they",
|
||||||
config = {extra = {amount = 1}},
|
config = {extra = {amount = 1}},
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
|
|
@ -109,13 +111,9 @@ SMODS.Consumable {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Consumable {
|
spectral {
|
||||||
key = "void",
|
key = "void",
|
||||||
set = "Spectral",
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
cost = 4,
|
|
||||||
hidden = true,
|
hidden = true,
|
||||||
atlas = "void",
|
|
||||||
soul_rate = 0.003,
|
soul_rate = 0.003,
|
||||||
soul_set = "Spectral",
|
soul_set = "Spectral",
|
||||||
pronouns = "she_they",
|
pronouns = "she_they",
|
||||||
|
|
|
||||||
11
src/tweaks.lua
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
SMODS.Joker:take_ownership("joker", {cost = 1}, true)
|
||||||
|
local orig_set_debuff = Card.set_debuff
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
function Card:set_debuff(...)
|
||||||
|
if self.config and self.config.center_key == "m_wild" then
|
||||||
|
self.debuff = false
|
||||||
|
else
|
||||||
|
orig_set_debuff(self, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||