Create blind art

This commit is contained in:
Emik 2026-02-10 06:44:56 +01:00
parent 867d19581d
commit a582230fed
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
31 changed files with 304 additions and 237 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 35 KiB

BIN
assets/1x/blind.png.kra Normal file

Binary file not shown.

BIN
assets/1x/blind.png~ Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
assets/1x/dual.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
assets/1x/mirror.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
assets/1x/seal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 904 B

BIN
assets/1x/spectral.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 40 KiB

BIN
assets/2x/blinder.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
assets/2x/dual.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 B

After

Width:  |  Height:  |  Size: 398 B

BIN
assets/2x/mirror.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
assets/2x/seal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

BIN
assets/2x/spectral.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -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

View file

@ -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 = {

View file

@ -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,

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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",

View file

@ -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,

View file

@ -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",

View file

@ -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
View 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