Add a familiar joker, add new art

This commit is contained in:
Emik 2026-08-03 18:38:17 +02:00
parent ff55a27567
commit 407c18dc6e
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
7 changed files with 72 additions and 27 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View file

@ -414,6 +414,16 @@ return {
text = {"{X:red,C:white}X#1#{} discards each round"}, text = {"{X:red,C:white}X#1#{} discards each round"},
unlock = {"Defeat {C:dark_edition}#1#"}, unlock = {"Defeat {C:dark_edition}#1#"},
}, },
j_Roland_yard = {
name = "Yard Sale",
text = {
"Gain {C:money}$#1#{} when a",
"card is {C:attention}added",
"or {C:attention}removed",
"from the deck",
},
unlock = {"Complete the", "{C:attention}#1#", "challenge"},
},
}, },
Other = { Other = {
roland_glass_seal = { roland_glass_seal = {
@ -594,7 +604,7 @@ return {
c_Roland_Jokerful = "Jokerful", c_Roland_Jokerful = "Jokerful",
c_Roland_Pastries = "Sweet Pastries", c_Roland_Pastries = "Sweet Pastries",
c_Roland_Spin_To_Win = "Spin to Win", c_Roland_Spin_To_Win = "Spin to Win",
c_Roland_Yard_Sale = "Yard Sale", c_Roland_Spring_Cleaning = "Spring Cleaning",
}, },
v_dictionary = { v_dictionary = {
b_Roland_add = "ADD", b_Roland_add = "ADD",
@ -634,8 +644,6 @@ return {
ch_c_Roland_Eternally_Violet = {"{C:attention}Violet Vessel{}'s effect is active every blind"}, ch_c_Roland_Eternally_Violet = {"{C:attention}Violet Vessel{}'s effect is active every blind"},
ch_c_Roland_Glass1 = {"Played cards with no seal have a"}, ch_c_Roland_Glass1 = {"Played cards with no seal have a"},
ch_c_Roland_Glass2 = {"{C:green}1 in 2{} chance to gain {C:dark_edition}Glass Seal"}, ch_c_Roland_Glass2 = {"{C:green}1 in 2{} chance to gain {C:dark_edition}Glass Seal"},
ch_c_Roland_Yard_Sale1 = {"Gain {C:money}$5 {}when playing cards are {C:attention}added {}or {C:attention}removed"},
ch_c_Roland_Yard_Sale2 = {"Earn {C:red}no money {}from any other source"},
ch_c_Roland_Go = {"Set money to {C:money}$0 {}when entering the shop"}, ch_c_Roland_Go = {"Set money to {C:money}$0 {}when entering the shop"},
ch_c_Roland_Jokerful = {"The only jokers are {C:mult}Joker{} and {C:chips}Ms. Joker"}, ch_c_Roland_Jokerful = {"The only jokers are {C:mult}Joker{} and {C:chips}Ms. Joker"},
ch_c_Roland_Pastries = {"All blinds, cards, and tags are of {C:gold}Bakery{} or {C:blue}Roland"}, ch_c_Roland_Pastries = {"All blinds, cards, and tags are of {C:gold}Bakery{} or {C:blue}Roland"},
@ -644,6 +652,7 @@ return {
ch_c_Roland_Showdown_Crimson = {"Showdown blinds are {C:attention}Crimson Heart {}(stacks with above)"}, ch_c_Roland_Showdown_Crimson = {"Showdown blinds are {C:attention}Crimson Heart {}(stacks with above)"},
ch_c_Roland_Showdown_Verdant = {"Showdown blinds are {C:attention}Verdant Leaf {}(stacks with above)"}, ch_c_Roland_Showdown_Verdant = {"Showdown blinds are {C:attention}Verdant Leaf {}(stacks with above)"},
ch_c_Roland_Showdown_Violet = {"Showdown blinds are {C:attention}Violet Vessel {}(stacks with above)"}, ch_c_Roland_Showdown_Violet = {"Showdown blinds are {C:attention}Violet Vessel {}(stacks with above)"},
ch_c_Roland_Spring_Cleaning = {"Earn {C:red}no money {}from sources other than {C:attention}Yard Sale"},
}, },
}, },
} }

View file

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

View file

@ -85,23 +85,21 @@ SMODS.Challenge {
local yard_sale local yard_sale
SMODS.Challenge { SMODS.Challenge {
key = "Yard_Sale", key = "Spring_Cleaning",
config = {extra = {dollars = 5}, no_interest = true}, config = {no_interest = true},
consumeables = {{id = "c_hanged_man"}},
jokers = {{id = "j_Roland_yard"}, {id = "j_Roland_yard"}},
vouchers = {{id = "v_magic_trick"}, {id = "v_overstock_norm"}}, vouchers = {{id = "v_magic_trick"}, {id = "v_overstock_norm"}},
rules = {custom = multirule("Yard_Sale", 2), modifiers = {{id = "dollars", value = 14}}}, rules = {custom = {{id = "Roland_Spring_Cleaning"}}},
restrictions = yard, restrictions = yard,
apply = function() apply = function()
G.GAME.modifiers.no_blind_reward = {Small = true, Big = true, Boss = true} G.GAME.modifiers.no_blind_reward = {Small = true, Big = true, Boss = true}
G.GAME.modifiers.no_extra_hand_money = true G.GAME.modifiers.no_extra_hand_money = true
f(Bakery_API.econ_only_items):keys():each(function(v) f(Bakery_API.econ_only_items):keys():where(f.nq "j_Roland_yard"):each(function(v)
G.GAME.banned_keys[v] = true G.GAME.banned_keys[v] = true
end) end)
end, end,
calculate = function(self, context)
yard_sale = (context.playing_card_added or context.remove_playing_cards) and not context.blueprint
return yard_sale and {dollars = self.config.extra.dollars * #(context.cards or context.removed or {})} or nil
end,
} }
SMODS.Challenge { SMODS.Challenge {
@ -347,7 +345,7 @@ q {
Bakery_API.no_money_decks = setmetatable({}, { Bakery_API.no_money_decks = setmetatable({}, {
orig = orig, orig = orig,
__index = function(_, k) __index = function(_, k)
return (G.GAME or {}).challenge == "c_Roland_Yard_Sale" and not yard_sale or orig[k] return (G.GAME or {}).challenge == "c_Roland_Spring_Cleaning" and not yard_sale or orig[k]
end, end,
}) })

View file

@ -10,11 +10,6 @@ return {
fg = HEX "362708ff", fg = HEX "362708ff",
bg = HEX "edd198ff", bg = HEX "edd198ff",
}, },
char = {
name = "char (@irregulester)",
fg = HEX "f8f8f2ff",
bg = HEX "ff79c6ff",
},
ghostlyfield = { ghostlyfield = {
name = "ghostlyfield", name = "ghostlyfield",
fg = HEX "ffffffff", fg = HEX "ffffffff",

View file

@ -196,8 +196,8 @@ joker {
joker { joker {
key = "sunny", key = "sunny",
pronouns = "it_its", pronouns = "it_its",
artist = "char",
idea = "redstoad", idea = "redstoad",
artist = "ghostlyfield",
attributes = {"food", "on_sell"}, attributes = {"food", "on_sell"},
cost = 2, cost = 2,
rarity = 1, rarity = 1,
@ -286,7 +286,7 @@ joker {
joker { joker {
key = "monomino", key = "monomino",
pronouns = "it_its", pronouns = "it_its",
artist = "char", artist = "ghostlyfield",
config = {extra = {price = 4, hand_name = "Four of a Kind"}}, config = {extra = {price = 4, hand_name = "Four of a Kind"}},
attributes = {"sell_value", "scaling", "economy", "hand_type"}, attributes = {"sell_value", "scaling", "economy", "hand_type"},
cost = 4, cost = 4,
@ -315,7 +315,7 @@ joker {
joker { joker {
key = "domino", key = "domino",
pronouns = "it_its", pronouns = "it_its",
artist = "char", artist = "ghostlyfield",
config = {extra = {mult_gain = 4, hand_name = "Four of a Kind", mult = 0}}, config = {extra = {mult_gain = 4, hand_name = "Four of a Kind", mult = 0}},
attributes = {"mult", "scaling", "hand_type"}, attributes = {"mult", "scaling", "hand_type"},
cost = 4, cost = 4,
@ -346,7 +346,7 @@ joker {
joker { joker {
key = "trimino", key = "trimino",
pronouns = "it_its", pronouns = "it_its",
artist = "char", artist = "ghostlyfield",
config = {extra = {times = 4, hand_name = "Four of a Kind"}}, config = {extra = {times = 4, hand_name = "Four of a Kind"}},
attributes = {"generation", "hand_type"}, attributes = {"generation", "hand_type"},
cost = 8, cost = 8,
@ -405,7 +405,7 @@ joker {
joker { joker {
key = "misfortune", key = "misfortune",
pronouns = "she_they", pronouns = "she_they",
artist = "char", artist = "ghostlyfield",
attributes = {"discard", "passive", "tarot", "planet", "generation", "seals"}, attributes = {"discard", "passive", "tarot", "planet", "generation", "seals"},
cost = 6, cost = 6,
rarity = 2, rarity = 2,
@ -425,6 +425,7 @@ joker {
joker { joker {
key = "polaris", key = "polaris",
pronouns = "he_him", pronouns = "he_him",
artist = "ghostlyfield",
attributes = {"editions", "space"}, attributes = {"editions", "space"},
cost = 6, cost = 6,
rarity = 1, rarity = 1,
@ -497,6 +498,7 @@ joker {
joker { joker {
key = "snowsquall", key = "snowsquall",
pronouns = "he_they", pronouns = "he_they",
artist = "ghostlyfield",
config = {extra = {mult_gain = 3, mult = 0}}, config = {extra = {mult_gain = 3, mult = 0}},
attributes = {"mult", "scaling", "hand_type"}, attributes = {"mult", "scaling", "hand_type"},
cost = 6, cost = 6,
@ -554,6 +556,7 @@ end
joker { joker {
key = "arctic", key = "arctic",
pronouns = "they_them", pronouns = "they_them",
artist = "ghostlyfield",
cost = 10, cost = 10,
rarity = 3, rarity = 3,
config = {extra = {frozen = 1, non_frozen = 0, color = "DARK_EDITION"}}, config = {extra = {frozen = 1, non_frozen = 0, color = "DARK_EDITION"}},
@ -598,8 +601,8 @@ joker {
joker { joker {
key = "sapling", key = "sapling",
pronouns = "they_them", pronouns = "they_them",
artist = "char",
idea = "redstoad", idea = "redstoad",
artist = "ghostlyfield",
attributes = {"mult", "suit"}, attributes = {"mult", "suit"},
cost = 4, cost = 4,
rarity = 1, rarity = 1,
@ -836,6 +839,7 @@ joker {
joker { joker {
key = "venerable", key = "venerable",
pronouns = "any_all", pronouns = "any_all",
artist = "ghostlyfield",
defeated_blind = "bl_Roland_venerable_visage", defeated_blind = "bl_Roland_venerable_visage",
config = {extra = {xdiscard = 3}}, config = {extra = {xdiscard = 3}},
pixel_size = {w = 68, h = 68}, pixel_size = {w = 68, h = 68},
@ -862,11 +866,45 @@ joker {
ease_discard(round_resets.discards - discards) ease_discard(round_resets.discards - discards)
end, end,
} }
joker {
key = "yard",
pronouns = "he_him",
artist = "ghostlyfield",
config = {extra = {dollars = 3}},
attributes = {"economy"},
cost = 6,
rarity = 1,
unlocked = true,
discovered = true,
eternal_compat = true,
blueprint_compat = true,
perishable_compat = true,
check_for_unlock = function()
return not not f.indices "challenge_progress.completed.c_Roland_Spring_Cleaning" (G.PROFILES[G.SETTINGS.profile])
end,
locked_loc_vars = function()
return {vars = {localize("c_Roland_Spring_Cleaning", "challenge_names")}}
end,
loc_vars = function(_, _, card)
return {vars = {card.ability.extra.dollars}}
end,
calculate = function(_, card, c)
local ret = (c.forcetrigger or not c.blueprint and (c.playing_card_added or c.remove_playing_cards)) and
{dollars = card.ability.extra.dollars * #(c.cards or c.removed or {c.forcetrigger})} or nil
if ret and (G.GAME or {}).challenge == "c_Roland_Spring_Cleaning" then
G.GAME.dollars = G.GAME.dollars + ret.dollars
else
return ret
end
end,
}
joker { joker {
key = "bulldozer", key = "bulldozer",
pronouns = "she_her", pronouns = "she_her",
idea = "redstoad", idea = "redstoad",
artist = "ghostlyfield",
attributes = {"xmult"}, attributes = {"xmult"},
cost = 6, cost = 6,
rarity = 2, rarity = 2,
@ -929,8 +967,8 @@ joker {
joker { joker {
key = "nilly", key = "nilly",
pronouns = "any_all", pronouns = "any_all",
artist = "ghostlyfield",
idea = "redstoad", idea = "redstoad",
artist = "ghostlyfield",
config = {extra = {flipped = false}}, config = {extra = {flipped = false}},
attributes = {"xmult", "bakery_double_sided"}, attributes = {"xmult", "bakery_double_sided"},
cost = 0, cost = 0,
@ -966,6 +1004,7 @@ joker {
key = "martingale", key = "martingale",
pronouns = "he_him", pronouns = "he_him",
idea = "redstoad", idea = "redstoad",
artist = "ghostlyfield",
config = {extra = {odds = 2}}, config = {extra = {odds = 2}},
attributes = {"xmult", "chance"}, attributes = {"xmult", "chance"},
cost = 8, cost = 8,
@ -1029,6 +1068,7 @@ joker {
joker { joker {
key = "idle", key = "idle",
pronouns = "any_all", pronouns = "any_all",
artist = "ghostlyfield",
rarity = 2, rarity = 2,
Roland_idle_capacity = 6, Roland_idle_capacity = 6,
cost = G.P_CENTERS.j_idol.cost, cost = G.P_CENTERS.j_idol.cost,
@ -1105,6 +1145,7 @@ joker {
joker { joker {
key = "suitable", key = "suitable",
pronouns = "she_they", pronouns = "she_they",
artist = "ghostlyfield",
attributes = {"suit", "passive", "hearts", "diamonds", "spades", "clubs"}, attributes = {"suit", "passive", "hearts", "diamonds", "spades", "clubs"},
cost = 4, cost = 4,
rarity = 2, rarity = 2,
@ -1157,8 +1198,8 @@ end
joker { joker {
key = "artemis", key = "artemis",
pronouns = "any_all", pronouns = "any_all",
artist = "hamester",
idea = "redstoad", idea = "redstoad",
artist = "hamester",
cost = 6, cost = 6,
rarity = 2, rarity = 2,
config = {extra = { config = {extra = {
@ -1224,6 +1265,7 @@ joker {
key = "excalibur", key = "excalibur",
pronouns = "he_him", pronouns = "he_him",
idea = "redstoad", idea = "redstoad",
artist = "ghostlyfield",
cost = 8, cost = 8,
rarity = 3, rarity = 3,
config = {extra = { config = {extra = {
@ -1295,7 +1337,7 @@ joker {
joker { joker {
key = "oops", key = "oops",
pronouns = "she_they", pronouns = "she_they",
artist = "char", artist = "ghostlyfield",
cost = 7, cost = 7,
rarity = 3, rarity = 3,
config = {extra = {probability = 1, probability_mult = 2, reset = 1}}, config = {extra = {probability = 1, probability_mult = 2, reset = 1}},
@ -1338,6 +1380,7 @@ q {
return false return false
end end
table.insert(Bakery_API.econ_only_items, "j_Roland_yard")
table.insert(Bakery_API.econ_only_items, "j_Roland_artemis") table.insert(Bakery_API.econ_only_items, "j_Roland_artemis")
end, end,
} }