diff --git a/assets/1x/joker.png b/assets/1x/joker.png index 0a9adc0..29cb229 100644 Binary files a/assets/1x/joker.png and b/assets/1x/joker.png differ diff --git a/assets/2x/joker.png b/assets/2x/joker.png index 2e566ed..0c6b7c8 100644 Binary files a/assets/2x/joker.png and b/assets/2x/joker.png differ diff --git a/localization/en-us.lua b/localization/en-us.lua index 6ce5bf4..4381251 100644 --- a/localization/en-us.lua +++ b/localization/en-us.lua @@ -414,6 +414,16 @@ return { text = {"{X:red,C:white}X#1#{} discards each round"}, 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 = { roland_glass_seal = { @@ -594,7 +604,7 @@ return { c_Roland_Jokerful = "Jokerful", c_Roland_Pastries = "Sweet Pastries", c_Roland_Spin_To_Win = "Spin to Win", - c_Roland_Yard_Sale = "Yard Sale", + c_Roland_Spring_Cleaning = "Spring Cleaning", }, v_dictionary = { 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_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_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_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"}, @@ -644,6 +652,7 @@ return { 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_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"}, }, }, } diff --git a/manifest.json b/manifest.json index 8834aa2..a08a21a 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "id": "Roland", "name": "Roland", "prefix": "Roland", - "version": "2.9.87", + "version": "2.9.88", "badge_colour": "8BE9FD", "display_name": "Roland", "main_file": "src/main.lua", diff --git a/src/challenge.lua b/src/challenge.lua index 49587b7..c7fe33e 100644 --- a/src/challenge.lua +++ b/src/challenge.lua @@ -85,23 +85,21 @@ SMODS.Challenge { local yard_sale SMODS.Challenge { - key = "Yard_Sale", - config = {extra = {dollars = 5}, no_interest = true}, + key = "Spring_Cleaning", + 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"}}, - rules = {custom = multirule("Yard_Sale", 2), modifiers = {{id = "dollars", value = 14}}}, + rules = {custom = {{id = "Roland_Spring_Cleaning"}}}, restrictions = yard, apply = function() G.GAME.modifiers.no_blind_reward = {Small = true, Big = true, Boss = 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 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 { @@ -347,7 +345,7 @@ q { Bakery_API.no_money_decks = setmetatable({}, { orig = orig, __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, }) diff --git a/src/credits.lua b/src/credits.lua index b30f8db..7925ece 100644 --- a/src/credits.lua +++ b/src/credits.lua @@ -10,11 +10,6 @@ return { fg = HEX "362708ff", bg = HEX "edd198ff", }, - char = { - name = "char (@irregulester)", - fg = HEX "f8f8f2ff", - bg = HEX "ff79c6ff", - }, ghostlyfield = { name = "ghostlyfield", fg = HEX "ffffffff", diff --git a/src/joker.lua b/src/joker.lua index 06e6812..8d68fe9 100644 --- a/src/joker.lua +++ b/src/joker.lua @@ -196,8 +196,8 @@ joker { joker { key = "sunny", pronouns = "it_its", - artist = "char", idea = "redstoad", + artist = "ghostlyfield", attributes = {"food", "on_sell"}, cost = 2, rarity = 1, @@ -286,7 +286,7 @@ joker { joker { key = "monomino", pronouns = "it_its", - artist = "char", + artist = "ghostlyfield", config = {extra = {price = 4, hand_name = "Four of a Kind"}}, attributes = {"sell_value", "scaling", "economy", "hand_type"}, cost = 4, @@ -315,7 +315,7 @@ joker { joker { key = "domino", pronouns = "it_its", - artist = "char", + artist = "ghostlyfield", config = {extra = {mult_gain = 4, hand_name = "Four of a Kind", mult = 0}}, attributes = {"mult", "scaling", "hand_type"}, cost = 4, @@ -346,7 +346,7 @@ joker { joker { key = "trimino", pronouns = "it_its", - artist = "char", + artist = "ghostlyfield", config = {extra = {times = 4, hand_name = "Four of a Kind"}}, attributes = {"generation", "hand_type"}, cost = 8, @@ -405,7 +405,7 @@ joker { joker { key = "misfortune", pronouns = "she_they", - artist = "char", + artist = "ghostlyfield", attributes = {"discard", "passive", "tarot", "planet", "generation", "seals"}, cost = 6, rarity = 2, @@ -425,6 +425,7 @@ joker { joker { key = "polaris", pronouns = "he_him", + artist = "ghostlyfield", attributes = {"editions", "space"}, cost = 6, rarity = 1, @@ -497,6 +498,7 @@ joker { joker { key = "snowsquall", pronouns = "he_they", + artist = "ghostlyfield", config = {extra = {mult_gain = 3, mult = 0}}, attributes = {"mult", "scaling", "hand_type"}, cost = 6, @@ -554,6 +556,7 @@ end joker { key = "arctic", pronouns = "they_them", + artist = "ghostlyfield", cost = 10, rarity = 3, config = {extra = {frozen = 1, non_frozen = 0, color = "DARK_EDITION"}}, @@ -598,8 +601,8 @@ joker { joker { key = "sapling", pronouns = "they_them", - artist = "char", idea = "redstoad", + artist = "ghostlyfield", attributes = {"mult", "suit"}, cost = 4, rarity = 1, @@ -836,6 +839,7 @@ joker { joker { key = "venerable", pronouns = "any_all", + artist = "ghostlyfield", defeated_blind = "bl_Roland_venerable_visage", config = {extra = {xdiscard = 3}}, pixel_size = {w = 68, h = 68}, @@ -862,11 +866,45 @@ joker { ease_discard(round_resets.discards - discards) 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 { key = "bulldozer", pronouns = "she_her", idea = "redstoad", + artist = "ghostlyfield", attributes = {"xmult"}, cost = 6, rarity = 2, @@ -929,8 +967,8 @@ joker { joker { key = "nilly", pronouns = "any_all", - artist = "ghostlyfield", idea = "redstoad", + artist = "ghostlyfield", config = {extra = {flipped = false}}, attributes = {"xmult", "bakery_double_sided"}, cost = 0, @@ -966,6 +1004,7 @@ joker { key = "martingale", pronouns = "he_him", idea = "redstoad", + artist = "ghostlyfield", config = {extra = {odds = 2}}, attributes = {"xmult", "chance"}, cost = 8, @@ -1029,6 +1068,7 @@ joker { joker { key = "idle", pronouns = "any_all", + artist = "ghostlyfield", rarity = 2, Roland_idle_capacity = 6, cost = G.P_CENTERS.j_idol.cost, @@ -1105,6 +1145,7 @@ joker { joker { key = "suitable", pronouns = "she_they", + artist = "ghostlyfield", attributes = {"suit", "passive", "hearts", "diamonds", "spades", "clubs"}, cost = 4, rarity = 2, @@ -1157,8 +1198,8 @@ end joker { key = "artemis", pronouns = "any_all", - artist = "hamester", idea = "redstoad", + artist = "hamester", cost = 6, rarity = 2, config = {extra = { @@ -1224,6 +1265,7 @@ joker { key = "excalibur", pronouns = "he_him", idea = "redstoad", + artist = "ghostlyfield", cost = 8, rarity = 3, config = {extra = { @@ -1295,7 +1337,7 @@ joker { joker { key = "oops", pronouns = "she_they", - artist = "char", + artist = "ghostlyfield", cost = 7, rarity = 3, config = {extra = {probability = 1, probability_mult = 2, reset = 1}}, @@ -1338,6 +1380,7 @@ q { return false end + table.insert(Bakery_API.econ_only_items, "j_Roland_yard") table.insert(Bakery_API.econ_only_items, "j_Roland_artemis") end, }