Add new joker

This commit is contained in:
Emik 2026-04-04 19:10:59 +02:00
parent 21952a529b
commit e74f4d44c9
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
13 changed files with 76 additions and 10 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 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: 88 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

BIN
assets/sounds/nilly.ogg Normal file

Binary file not shown.

View file

@ -229,6 +229,14 @@ return {
name = "Ms. Joker", name = "Ms. Joker",
text = {"{C:chips}+#1#{} Chips"}, text = {"{C:chips}+#1#{} Chips"},
}, },
j_Roland_nilly = {
name = "Nilly",
text = {
"Toggleable {X:mult,C:white}X0{} Mult",
"{C:inactive}(Currently {C:attention}#1#{C:inactive})",
"{C:inactive,s:0.75,E:1}Wait... what?",
},
},
j_Roland_oops = { j_Roland_oops = {
name = "Oops! All 7s", name = "Oops! All 7s",
text = { text = {
@ -389,6 +397,8 @@ return {
}, },
v_dictionary = { v_dictionary = {
b_Roland_bye = "Bye!", b_Roland_bye = "Bye!",
b_Roland_disabled = "Disabled",
b_Roland_enabled = "Enabled",
b_Roland_comma = ", ", b_Roland_comma = ", ",
b_Roland_debuffed = "DEBUFFED", b_Roland_debuffed = "DEBUFFED",
b_Roland_entering_shop = "Entering shop!", b_Roland_entering_shop = "Entering shop!",
@ -404,6 +414,7 @@ return {
b_Roland_no_wild_debuff = "No wild card debuffs", b_Roland_no_wild_debuff = "No wild card debuffs",
b_Roland_na = "N/A", b_Roland_na = "N/A",
b_Roland_of = " of ", b_Roland_of = " of ",
b_Roland_toggle = "TOGGLE",
}, },
labels = { labels = {
Roland_frozen = "Frozen", Roland_frozen = "Frozen",

View file

@ -6,7 +6,7 @@
"author": [ "author": [
"Emik" "Emik"
], ],
"version": "2.2.6", "version": "2.2.7",
"badge_colour": "8BE9FD", "badge_colour": "8BE9FD",
"main_file": "src/main.lua", "main_file": "src/main.lua",
"badge_text_colour": "44475A", "badge_text_colour": "44475A",
@ -17,6 +17,6 @@
"dependencies": [ "dependencies": [
"Steamodded (>=1.*)", "Steamodded (>=1.*)",
"Lovely (>=0.6)", "Lovely (>=0.6)",
"Bakery (>=1.3.2~*)" "Bakery (>=0.1.26~*)"
] ]
} }

View file

@ -19,6 +19,12 @@ local joker = (function()
tbl.artist = tbl.artist and "Roland_" .. tbl.artist or nil tbl.artist = tbl.artist and "Roland_" .. tbl.artist or nil
tbl.soul_pos = tbl.soul_pos and inc() or nil tbl.soul_pos = tbl.soul_pos and inc() or nil
tbl.sinis = tbl.sinis and inc() or nil tbl.sinis = tbl.sinis and inc() or nil
if ((tbl.config or {}).extra or {}).flipped ~= nil then
tbl.config.extra.front_pos = tbl.pos
tbl.config.extra.back_pos = inc()
end
local joker = SMODS.Joker(tbl) local joker = SMODS.Joker(tbl)
q(function() q(function()
@ -89,6 +95,11 @@ SMODS.Atlas {
py = 95, py = 95,
} }
SMODS.Sound {
key = "nilly",
path = "nilly.ogg",
}
joker { joker {
key = "escapey", key = "escapey",
pronouns = "they_them", pronouns = "they_them",
@ -123,6 +134,9 @@ joker {
}, },
} }
end, end,
calculate = function(self, card, context)
return context.forcetrigger and self.proc(card) or nil
end,
Bakery_can_use = function(self, card) Bakery_can_use = function(self, card)
return not card.debuff and u() and (self.exchangable() or self.fusable(card)) return not card.debuff and u() and (self.exchangable() or self.fusable(card))
end, end,
@ -134,9 +148,6 @@ joker {
"b_Roland_fuse" or "b_Roland_escape"), "b_Roland_fuse" or "b_Roland_escape"),
} }
end, end,
calculate = function(self, card, context)
return context.forcetrigger and self.proc(card) or nil
end,
Bakery_use_joker = function(self, card) Bakery_use_joker = function(self, card)
if card.debuff then if card.debuff then
return return
@ -392,7 +403,7 @@ joker {
return return
end end
for _ = 1, extra.times do f(extra.times):each(function()
G.playing_card = (G.playing_card or 0) + 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 chosen = pseudorandom_element(scored_cards, pseudoseed "Roland_trimino") local chosen = pseudorandom_element(scored_cards, pseudoseed "Roland_trimino")
@ -402,7 +413,7 @@ joker {
copy:start_materialize() copy:start_materialize()
table.insert(copied, copy) table.insert(copied, copy)
table.insert(G.playing_cards, copy) table.insert(G.playing_cards, copy)
end end)
SMODS.calculate_effect({{message = localize "k_copied_ex", message_card = card}}, card) SMODS.calculate_effect({{message = localize "k_copied_ex", message_card = card}}, card)
playing_card_joker_effects(copied) playing_card_joker_effects(copied)
@ -806,6 +817,50 @@ joker {
end, end,
} }
joker {
key = "nilly",
pronouns = "any_all",
config = {extra = {flipped = false}},
cost = 0,
rarity = 3,
eternal_compat = true,
blueprint_compat = true,
perishable_compat = true,
loc_vars = function(_, _, card)
return {
vars = {localize {
type = "variable",
key = card.ability.extra.flipped and "b_Roland_enabled" or "b_Roland_disabled",
}},
}
end,
inject = function(...)
SMODS.Joker.inject(...)
Bakery_API.double_sided_jokers.j_Roland_nilly = true
end,
calculate = function(_, card, context)
if (not context.joker_main or not card.ability.extra.flipped) and not context.forcetrigger then
return
end
mult = mod_mult(0)
update_hand_text({delay = 0}, {chips = hand_chips, mult = mult})
return {sound = "Roland_nilly", message = "0X " .. localize "k_mult", colour = G.C.MULT, card = card}
end,
Bakery_can_use = function(_, card)
return not card.debuff
end,
Bakery_use_button_text = function(_, card)
return localize {
type = "variable",
key = card.debuff and "b_Roland_debuffed" or "b_Roland_toggle",
}
end,
Bakery_use_joker = function(_, card)
local _ = card.debuff or Bakery_API.flip_double_sided(card)
end,
}
joker { joker {
key = "arctic", key = "arctic",
pronouns = "it_its", pronouns = "it_its",

View file

@ -107,7 +107,7 @@ spectral {
f(cards):take(card.ability.extra.amount):each(function(v) f(cards):take(card.ability.extra.amount):each(function(v)
local seal local seal
for _ = 1, 31 do for _ = 1, 64 do
seal = SMODS.poll_seal {guaranteed = true} seal = SMODS.poll_seal {guaranteed = true}
if seal ~= "Roland_glass" then if seal ~= "Roland_glass" then
@ -177,12 +177,12 @@ local void = spectral {
f(cards):each(destroy) f(cards):each(destroy)
f(G.jokers.cards):each(calculate_joker) f(G.jokers.cards):each(calculate_joker)
for _ = 1, card.ability.extra.amount do f(card.ability.extra.amount):each(function()
local cryptid = create_card(nil, G.consumeables, nil, nil, nil, nil, "c_cryptid", "void") local cryptid = create_card(nil, G.consumeables, nil, nil, nil, nil, "c_cryptid", "void")
cryptid:set_edition({negative = true}, true) cryptid:set_edition({negative = true}, true)
cryptid:add_to_deck() cryptid:add_to_deck()
G.consumeables:emplace(cryptid) G.consumeables:emplace(cryptid)
end end)
end end
play_sound("Roland_void", 1, 0.7) play_sound("Roland_void", 1, 0.7)