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
|
||||
for file in 1x/*.png; do
|
||||
directory=$(dirname $(readlink -f "$0"))
|
||||
|
||||
for file in "$directory"/1x/*.png; do
|
||||
filename=$(basename "$file")
|
||||
output_file="2x/${filename}"
|
||||
output_file="$directory/2x/${filename}"
|
||||
magick "$file" -filter point -resize 200% "$output_file"
|
||||
done
|
||||
|
|
|
|||
|
|
@ -31,12 +31,20 @@ return {
|
|||
Blind = {
|
||||
bl_Roland_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 = {
|
||||
name = "The Improbable",
|
||||
text = {"All probabilities", "cannot happen"},
|
||||
},
|
||||
bl_Roland_mitotic = {
|
||||
name = "The Mitotic",
|
||||
text = {"Discarded cards", "are copied"},
|
||||
},
|
||||
bl_Roland_nimble = {
|
||||
name = "The Nimble",
|
||||
text = {"The first 5 cards", "drawn are played"},
|
||||
|
|
@ -45,9 +53,11 @@ return {
|
|||
name = "The Tranquilizer",
|
||||
text = {"#1#s are debuffed", "Changes based on", "most common rank"},
|
||||
},
|
||||
bl_Roland_xerox = {
|
||||
name = "The Xerox",
|
||||
text = {"Discarded cards", "are copied"},
|
||||
},
|
||||
Enhanced = {
|
||||
m_wild = {
|
||||
name = "Wild Card",
|
||||
text = {unpack(G.localization.descriptions.Enhanced.m_wild.text), "Can not be", "debuffed"},
|
||||
},
|
||||
},
|
||||
Joker = {
|
||||
|
|
@ -103,8 +113,8 @@ return {
|
|||
text = {
|
||||
"This Joker gains the",
|
||||
"rank of {C:attention}unscored cards",
|
||||
"if played hand is a",
|
||||
"{C:attention}Four of a Kind",
|
||||
"to Mult if played hand",
|
||||
"is a {C:attention}Four of a Kind",
|
||||
"{C:inactive}(Currently {C:red}+#1#{C:inactive} Mult)",
|
||||
},
|
||||
},
|
||||
|
|
@ -176,7 +186,7 @@ return {
|
|||
"Sell this Joker to",
|
||||
"{C:attention}draw{} the bottom",
|
||||
"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 = {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,12 @@ local function back(b)
|
|||
b.atlas = "void"
|
||||
SMODS.Back(b)
|
||||
|
||||
---@diagnostic disable-next-line: undefined-global
|
||||
if not CardSleeves then
|
||||
return
|
||||
end
|
||||
|
||||
---@diagnostic disable-next-line: undefined-global
|
||||
CardSleeves.Sleeve {
|
||||
key = key,
|
||||
pos = b.pos,
|
||||
|
|
|
|||
250
src/blind.lua
|
|
@ -1,5 +1,17 @@
|
|||
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 {
|
||||
px = 34,
|
||||
py = 34,
|
||||
|
|
@ -50,71 +62,15 @@ local function disable_improbable()
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
if cry_prob then
|
||||
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 {
|
||||
blind {
|
||||
key = "nimble",
|
||||
boss = {min = 1, max = 10},
|
||||
boss = {min = 1},
|
||||
boss_colour = HEX "0291fb",
|
||||
atlas = "blind",
|
||||
pos = {x = 0, y = 1},
|
||||
pronouns = "she_her",
|
||||
mult = 2,
|
||||
dollars = 5,
|
||||
config = {draw = 5},
|
||||
defeat = function(self)
|
||||
self.disabled = false
|
||||
|
|
@ -145,15 +101,11 @@ SMODS.Blind {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Blind {
|
||||
blind {
|
||||
key = "divide",
|
||||
boss = {min = 1, max = 10},
|
||||
boss_colour = HEX "0291fb",
|
||||
atlas = "blind",
|
||||
pos = {x = 0, y = 1},
|
||||
boss = {min = 1},
|
||||
boss_colour = HEX "b18480",
|
||||
pronouns = "they_them",
|
||||
mult = 2,
|
||||
dollars = 5,
|
||||
disable = function()
|
||||
q(function()
|
||||
local count = #G.discard.cards
|
||||
|
|
@ -185,19 +137,97 @@ SMODS.Blind {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Blind {
|
||||
key = "tranquilizer",
|
||||
boss = {min = 6, max = 10},
|
||||
boss_colour = HEX "0291fb",
|
||||
atlas = "blind",
|
||||
pos = {x = 0, y = 1},
|
||||
blind {
|
||||
key = "mitotic",
|
||||
boss = {min = 3},
|
||||
boss_colour = HEX "80b48e",
|
||||
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,
|
||||
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(_)
|
||||
return {
|
||||
vars = {localize {
|
||||
type = "variable", key = "b_Roland_most_common_card",
|
||||
type = "variable",
|
||||
key = "b_Roland_most_common_card",
|
||||
}},
|
||||
}
|
||||
end,
|
||||
|
|
@ -238,39 +268,53 @@ SMODS.Blind {
|
|||
end,
|
||||
recalc_debuff = function(self, card)
|
||||
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,
|
||||
}
|
||||
|
||||
SMODS.Blind {
|
||||
key = "xerox",
|
||||
boss = {min = 3, max = 10},
|
||||
boss_colour = HEX "0291fb",
|
||||
atlas = "blind",
|
||||
pos = {x = 0, y = 1},
|
||||
blind {
|
||||
key = "equinox",
|
||||
boss = {min = 6},
|
||||
boss_colour = HEX "000000",
|
||||
pronouns = "they_them",
|
||||
mult = 2,
|
||||
dollars = 5,
|
||||
disable = function(self)
|
||||
self.disabled = true
|
||||
defeat = function()
|
||||
G.GAME.modifiers.Roland_equinox = false
|
||||
end,
|
||||
calculate = function(_, blind, context)
|
||||
if blind.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)
|
||||
|
||||
playing_card_joker_effects(cards_added)
|
||||
disable = function()
|
||||
G.GAME.modifiers.Roland_equinox = false
|
||||
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
|
||||
|
||||
local orig_draw = Card.draw
|
||||
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
function Card:draw(...)
|
||||
if equinox() and not self.states.hover.is and not self.states.focus.is then
|
||||
add_to_drawhash(self)
|
||||
else
|
||||
return orig_draw(self, ...)
|
||||
end
|
||||
end
|
||||
|
||||
local orig_draw_self = UIElement.draw_self
|
||||
|
||||
---@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",
|
||||
atlas = "iphone",
|
||||
pos = {x = 0, y = 0},
|
||||
unlocked = true,
|
||||
discovered = true,
|
||||
calculate = function(_, _, context)
|
||||
local _ = context.skip_blind and q(function()
|
||||
G.blind_prompt_box = G.blind_prompt_box and G.blind_prompt_box:remove()
|
||||
|
|
@ -31,6 +33,6 @@ q(function()
|
|||
|
||||
charm:inject()
|
||||
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
|
||||
end)
|
||||
|
|
|
|||
|
|
@ -81,8 +81,7 @@ end
|
|||
--- Determines if a center is allowed to be usable.
|
||||
---@return boolean
|
||||
local function u()
|
||||
return not ((G.play and #G.play.cards > 0 or
|
||||
G.CONTROLLER.locked or
|
||||
return not ((G.play and #G.play.cards > 0 or G.CONTROLLER.locked or
|
||||
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
|
||||
G.STATE ~= G.STATES.HAND_PLAYED and
|
||||
G.STATE ~= G.STATES.DRAW_TO_HAND and
|
||||
|
|
|
|||
180
src/joker.lua
|
|
@ -234,47 +234,55 @@ SMODS.Joker {
|
|||
}
|
||||
|
||||
SMODS.Joker {
|
||||
key = "sunny", -- Cracked egg
|
||||
key = "mrsbones",
|
||||
atlas = "void",
|
||||
pronouns = "they_them",
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 2,
|
||||
rarity = 1,
|
||||
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)
|
||||
local last = ((G.deck or {}).cards or {})[1]
|
||||
|
||||
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},
|
||||
},
|
||||
}
|
||||
return {vars = {card.ability.extra.division}}
|
||||
end,
|
||||
calculate = function(_, _, context)
|
||||
local _ = context.selling_self and
|
||||
draw_card(G.deck, G.hand, 100, "up", false, G.deck.cards[1])
|
||||
calculate = function(_, card, context)
|
||||
return context.joker_main and {mult = hand_chips / card.ability.extra.division} or nil
|
||||
end,
|
||||
}
|
||||
|
||||
|
|
@ -283,8 +291,8 @@ SMODS.Joker {
|
|||
atlas = "void",
|
||||
pronouns = "they_them",
|
||||
pos = {x = 0, y = 0},
|
||||
config = {extra = {money = 4}},
|
||||
cost = 4,
|
||||
config = {extra = {money = 6}},
|
||||
cost = 6,
|
||||
rarity = 1,
|
||||
eternal_compat = true,
|
||||
blueprint_compat = true,
|
||||
|
|
@ -335,7 +343,7 @@ SMODS.Joker {
|
|||
pronouns = "they_them",
|
||||
pos = {x = 0, y = 0},
|
||||
config = {extra = {mult = 0}},
|
||||
cost = 8,
|
||||
cost = 6,
|
||||
rarity = 3,
|
||||
eternal_compat = true,
|
||||
blueprint_compat = true,
|
||||
|
|
@ -349,7 +357,7 @@ SMODS.Joker {
|
|||
|
||||
q(function()
|
||||
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
|
||||
local copy = copy_card(v, nil, nil, G.playing_card)
|
||||
copy:add_to_deck()
|
||||
|
|
@ -362,6 +370,51 @@ SMODS.Joker {
|
|||
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 {
|
||||
key = "yard",
|
||||
atlas = "void",
|
||||
|
|
@ -438,59 +491,6 @@ SMODS.Joker {
|
|||
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 {
|
||||
key = "oops", -- Slot machine
|
||||
atlas = "void",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
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)
|
||||
end)
|
||||
|
||||
|
|
@ -10,8 +10,6 @@ if Balatest then
|
|||
end)
|
||||
end
|
||||
|
||||
SMODS.Joker:take_ownership("joker", {cost = 1}, true)
|
||||
|
||||
SMODS.Atlas {
|
||||
px = 256,
|
||||
py = 256,
|
||||
|
|
|
|||
15
src/seal.lua
|
|
@ -1,14 +1,15 @@
|
|||
local f, q = unpack(... or require "src.functional")
|
||||
|
||||
-- SMODS.Atlas {
|
||||
-- px = 71,
|
||||
-- py = 95,
|
||||
-- key = "seal",
|
||||
-- path = "seal.png",
|
||||
-- }
|
||||
SMODS.Atlas {
|
||||
px = 71,
|
||||
py = 95,
|
||||
key = "seal",
|
||||
path = "seal.png",
|
||||
}
|
||||
|
||||
SMODS.Seal {
|
||||
key = "glass",
|
||||
atlas = "void",
|
||||
atlas = "seal",
|
||||
pos = {x = 0, y = 0},
|
||||
badge_colour = HEX "f6f6f6",
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,19 @@
|
|||
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 {
|
||||
key = "void",
|
||||
path = "void.ogg",
|
||||
|
|
@ -8,8 +22,8 @@ SMODS.Sound {
|
|||
SMODS.Atlas {
|
||||
px = 71,
|
||||
py = 95,
|
||||
key = "afterimage",
|
||||
path = "afterimage.png",
|
||||
key = "spectral",
|
||||
path = "spectral.png",
|
||||
}
|
||||
|
||||
SMODS.Atlas {
|
||||
|
|
@ -19,12 +33,8 @@ SMODS.Atlas {
|
|||
path = "void.png",
|
||||
}
|
||||
|
||||
SMODS.Consumable {
|
||||
spectral {
|
||||
key = "afterimage",
|
||||
set = "Spectral",
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 4,
|
||||
atlas = "afterimage",
|
||||
pronouns = "he_they",
|
||||
config = {extra = {amount = 1, hand = -1}},
|
||||
loc_vars = function(_, _, card)
|
||||
|
|
@ -54,12 +64,8 @@ SMODS.Consumable {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Consumable {
|
||||
spectral {
|
||||
key = "dual",
|
||||
set = "Spectral",
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 4,
|
||||
atlas = "afterimage",
|
||||
pronouns = "he_they",
|
||||
config = {extra = {amount = 2}},
|
||||
loc_vars = function(_, _, card)
|
||||
|
|
@ -88,12 +94,8 @@ SMODS.Consumable {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Consumable {
|
||||
spectral {
|
||||
key = "mirror",
|
||||
set = "Spectral",
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 4,
|
||||
atlas = "afterimage",
|
||||
pronouns = "he_they",
|
||||
config = {extra = {amount = 1}},
|
||||
loc_vars = function(_, _, card)
|
||||
|
|
@ -109,13 +111,9 @@ SMODS.Consumable {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Consumable {
|
||||
spectral {
|
||||
key = "void",
|
||||
set = "Spectral",
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 4,
|
||||
hidden = true,
|
||||
atlas = "void",
|
||||
soul_rate = 0.003,
|
||||
soul_set = "Spectral",
|
||||
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
|
||||