diff --git a/assets/1x/default/c_jane_reversetarots.png b/assets/1x/default/c_jane_reversetarots.png deleted file mode 100644 index 8563bb1..0000000 Binary files a/assets/1x/default/c_jane_reversetarots.png and /dev/null differ diff --git a/assets/sounds/corrupt_milestone.ogg b/assets/sounds/corrupt_milestone.ogg new file mode 100644 index 0000000..9426450 Binary files /dev/null and b/assets/sounds/corrupt_milestone.ogg differ diff --git a/assets/sounds/corrupt_tick.ogg b/assets/sounds/corrupt_tick.ogg new file mode 100644 index 0000000..f5bfda3 Binary files /dev/null and b/assets/sounds/corrupt_tick.ogg differ diff --git a/assets/sounds/corrupt_untick.ogg b/assets/sounds/corrupt_untick.ogg new file mode 100644 index 0000000..b2fd5a7 Binary files /dev/null and b/assets/sounds/corrupt_untick.ogg differ diff --git a/manifest.json b/manifest.json index 833e3da..f8949e9 100644 --- a/manifest.json +++ b/manifest.json @@ -12,5 +12,5 @@ "Bakery (>=0.1.26~*)" ], "conflicts": ["Jen"], - "version": "0.3.3" + "version": "1.0.0" } \ No newline at end of file diff --git a/src/back.lua b/src/back.lua index 63697ff..361f33f 100644 --- a/src/back.lua +++ b/src/back.lua @@ -35,15 +35,93 @@ SMODS.Back { end } +local function add_rain_world_joker() + if not G.jokers then + return true + end + + local candidates = { + "j_jane_monk", + "j_jane_survivor", + "j_jane_hunter", + "j_jane_gourmand", + "j_jane_artificer", + "j_jane_spearmaster", + "j_jane_rivulet", + "j_jane_saint", + "j_jane_rot", + } + + local unobtained = {} + + for _, v in pairs(candidates) do + if not next(SMODS.find_card(v, true)) then + unobtained[#unobtained + 1] = v + end + end + + local chosen = pseudorandom_element(next(unobtained) and unobtained or candidates, pseudoseed("karma_deck")) + local card = create_card("Joker", G.jokers, nil, nil, nil, nil, chosen, "karma_deck_next") + card:add_to_deck() + card:start_materialize() + G.jokers:emplace(card) + return true +end + SMODS.Back { - key = 'obsidian', - atlas = 'janedecks', + key = "karma", + atlas = "janedecks", + pos = {x = 3, y = 0}, + loc_txt = { + name = "Karma Deck", + text = { + "Start with a {C:legendary}Rain World Joker", + "Create another when", + "{C:attention}Boss Blind {}is defeated" + } + }, + apply = function(_) + G.E_MANAGER:add_event(Event({func = add_rain_world_joker})) + end, + trigger_effect = function(_, args) + if args.context == "eval" and G.GAME.last_blind and G.GAME.last_blind.boss then + add_rain_world_joker() + end + end, +} + +SMODS.Back { + key = "mysterious", + atlas = "janedecks", + pos = {x = 1, y = 0}, + loc_txt = { + name = "Mysterious Deck", + text = { + "Jokers, consumables, and", + "playing cards are {C:green,E:1}randomized", + "when they are added", + "to your possession", + } + }, + apply = function(_) + G.GAME.mysterious = true + + Jane.q(function() + save_run() + return true + end) + end +} + +SMODS.Back { + key = "obsidian", + atlas = "janedecks", pos = {x = 2, y = 1}, loc_txt = { - name = 'Obsidian Deck', + name = "Obsidian Deck", text = { - '{C:attention}Hidden{} cards {C:inactive}(ex. {C:spectral}The Soul{C:inactive})', - 'can {C:attention}appear normally{}', + "{C:attention}Hidden{} cards {C:inactive}(ex. {C:spectral}The Soul{C:inactive})", + "can {C:attention}appear normally{}", } }, apply = function(_) @@ -51,6 +129,22 @@ SMODS.Back { end } +local function apply_orrery() + Jane.q(function() + local orrery = {} + G.GAME.orrery = orrery + + for k, v in pairs(G.GAME.hands) do + v.mult = 1 + v.chips = 150 + orrery[k] = {chips = v.chips, level = v.level, mult = v.mult} + end + + save_run() + return true + end) +end + SMODS.Back { key = "orrery", atlas = "janedecks", @@ -63,20 +157,7 @@ SMODS.Back { } }, apply = function(_) - Jane.q(function() - local orrery = {} - G.GAME.orrery = orrery - - for k, v in pairs(G.GAME.hands) do - v.mult = 1 - v.chips = 150 - orrery[k] = {chips = v.chips, level = v.level, mult = v.mult} - end - - save_run() - return true - end - ) + apply_orrery() end } @@ -96,6 +177,40 @@ SMODS.Back { end } +local function apply_weeck() + G.GAME.weeck = true + + Jane.q(function() + local new_card = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck") + new_card.ability.cry_absolute = true + new_card.ability.eternal = true + G.jokers:emplace(new_card) + local add = {} + + for _, v in pairs(G.playing_cards) do + if v.base.id == 2 then + v.ability.cry_absolute = true + v.ability.eternal = true + add[#add + 1] = v + else + v:start_dissolve(nil, true) + end + end + + for _, v in pairs(add) do + local dupe = copy_card(v) + dupe:start_materialize() + dupe:add_to_deck() + G.hand:emplace(dupe) + G.playing_card = (G.playing_card and G.playing_card + 1) or 1 + table.insert(G.playing_cards, dupe) + end + + save_run() + return true + end) +end + SMODS.Back { key = "weeck", atlas = "janedecks", @@ -110,38 +225,47 @@ SMODS.Back { } }, apply = function(_) - G.GAME.weeck = true + apply_weeck() + end +} - Jane.q(function() - local new_card = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck") - new_card.ability.cry_absolute = true - new_card.ability.eternal = true - G.jokers:emplace(new_card) - local add = {} - - for _, v in pairs(G.playing_cards) do - if v.base.id == 2 then - v.ability.cry_absolute = true - v.ability.eternal = true - add[#add + 1] = v - else - v:start_dissolve(nil, true) - end - end - - for _, v in pairs(add) do - local dupe = copy_card(v) - dupe:start_materialize() - dupe:add_to_deck() - G.hand:emplace(dupe) - G.playing_card = (G.playing_card and G.playing_card + 1) or 1 - table.insert(G.playing_cards, dupe) - end +SMODS.Back { + key = "omega", + atlas = "janedecks", + pos = {x = 5, y = 1}, + loc_txt = { + name = "Omega Deck", + text = { + "Applies the {C:legendary,E:1}upsides", + "of {C:attention}every Jane deck", + } + }, + apply = function(_) + apply_orrery() + G.E_MANAGER:add_event(Event({func = function() + local wee = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck") + G.jokers:emplace(wee) + add_rain_world_joker() + G.GAME.mysterious = true + G.GAME.tortoise = true + G.GAME.obsidian = true save_run() return true - end) - end + end})) + end, + trigger_effect = function(_, args) + G.GAME.mysterious = nil + + if args.context == "eval" and G.GAME.last_blind and G.GAME.last_blind.boss then + add_rain_world_joker() + + Jane.q(function() + Jane.empowered() + return true + end) + end + end, } local orig_ante = ease_ante @@ -173,3 +297,213 @@ function ease_ante(mod) orig_ante(mod) end + +local orig_emplace = CardArea.emplace + +function CardArea:emplace(card, location, stay_flipped) + local function randomize(targets, noanim) + local function go(i) + return function() + local c = targets[i] + c:set_base(pseudorandom_element(G.P_CARDS)) + + if pseudorandom(pseudoseed("chancetime")) > 1 / (#G.P_CENTER_POOLS["Enhanced"]+1) then + c:set_ability(pseudorandom_element(G.P_CENTER_POOLS["Enhanced"], pseudoseed("spectral_chance"))) + else + c:set_ability(G.P_CENTERS["c_base"]) + end + + local edition_rate = 2 + c:set_edition(poll_edition("standard_edition" .. G.GAME.round_resets.ante, edition_rate, true)) + local seal_rate = 10 + local seal_poll = pseudorandom(pseudoseed("stdseal" .. G.GAME.round_resets.ante)) + + if seal_poll > 1 - 0.02 * seal_rate then + local seal_type = pseudorandom(pseudoseed("stdsealtype" .. G.GAME.round_resets.ante)) + local seal_list = {} + + for k, _ in pairs(G.P_SEALS) do + table.insert(seal_list, k) + end + + seal_type = math.floor(seal_type * #seal_list) + c:set_seal(seal_list[seal_type]) + else + c:set_seal() + end + + if noanim then + c:flip() + play_sound("card3", 0.85 + (i - 0.999) / (#G.hand.cards - 0.998) * 0.3, 0.6) + end + + c:juice_up(0.3, 0.3) + return true + end + end + + if #targets <= 0 then + return + end + + if noanim then + for i = 1, #targets do + go(i) + end + else + for i = 1, #targets do + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.15, + func = function() + targets[i]:flip() + play_sound("card1", 1.15 - (i - 0.999) / (#G.hand.cards - 0.998) * 0.3) + targets[i]:juice_up(0.3, 0.3) + return true + end + })) + end + + delay(0.2) + + for i = 1, #targets do + G.E_MANAGER:add_event(Event({ + trigger = "after", + delay = 0.1, + func = go(i) + })) + end + end + end + + local function rnd(seed, excluded_flags, pool, ignore_pooling, attempts) + excluded_flags = excluded_flags or {} + local selection = "n/a" + local passes = 0 + local tries = attempts or 500 + local pooling = false + + if (SMODS.Mods.jane or {}).can_load and (G.GAME or {}).obsidian then + for k, v in ipairs(excluded_flags) do + if v == "hidden" then + table.remove(excluded_flags, k) + break + end + end + end + + while true do + passes = 0 + pooling = false + tries = tries - 1 + selection = G.P_CENTERS[pseudorandom_element(pool or G.P_CENTER_POOLS.Consumeables, pseudoseed(seed or "jane_rnd_mysterious")).key] + + if ignore_pooling then + pooling = true + else + if selection.in_pool and selection:in_pool() then + pooling = true + elseif not selection.in_pool then + pooling = true + end + end + + for _, v in pairs(excluded_flags) do + if not selection[v] then + passes = passes + 1 + end + end + + if (pooling and passes >= #excluded_flags) or tries <= 0 then + return selection + end + end + end + + if G.jokers and + G.hand and + G.deck and + G.consumeables and + (self == G.jokers or self == G.hand or self == G.deck or self == G.consumeables) and + G.GAME.mysterious and card.ability and not + card.ability.mysterious_created and not + card.created_from_split then + card.ability.mysterious_created = true + local cen = card.gc and card:gc() + if cen then + if self == G.jokers then + Jane.q(function() + if card then + if card.added_to_deck then + card:remove_from_deck() + card.added_to_deck = nil + end + card:flip() + card:juice_up(0.3, 0.3) + play_sound("card1", 1, 0.6) + end + return true + end, 0.75) + + delay(0.75) + + Jane.q(function() + if card then + card:flip() + card:juice_up(0.3, 0.3) + play_sound("card3", 1, 0.6) + card:set_ability(rnd("mysterious_deck_joker", {"no_mysterious"}, G.P_CENTER_POOLS.Joker)) + + if not card.added_to_deck then + card:add_to_deck() + end + end + return true + end, 0.75) + elseif self == G.consumeables then + Jane.q(function() + if card then + if card.added_to_deck then + card:remove_from_deck() + card.added_to_deck = nil + end + + card:flip() + card:juice_up(0.3, 0.3) + play_sound("card1", 1, 0.6) + end + return true + end, 0.75) + + delay(0.75) + + Jane.q(function() + if card then + card:flip() + card:juice_up(0.3, 0.3) + play_sound("card3", 1, 0.6) + card:set_ability(rnd("mysterious_deck_consumable", cen.hidden and {} or {"hidden"}, G.P_CENTER_POOLS[cen.set])) + + if not card.added_to_deck then + card:add_to_deck() + end + end + + return true + end, 0.75) + elseif (card.base or {}).value or (card.base or {}).suit then + randomize({card}) + end + end + + Jane.q(function() + if card and self then + orig_emplace(self, card, location, stay_flipped) + end + + return true + end) + else + orig_emplace(self, card, location, stay_flipped) + end +end diff --git a/src/booster.lua b/src/booster.lua index 8ea8438..edfbb16 100644 --- a/src/booster.lua +++ b/src/booster.lua @@ -24,12 +24,26 @@ for i = 1, 2 do loc_vars = function(_, _, card) return {vars = {card.ability.choose, card.ability.extra}} end, - ease_background_colour = function(_) - ease_background_colour_blind(G.STATES.STANDARD_PACK) + create_card = function(_, _, _) + local edition = poll_edition("standard_edition" .. G.GAME.round_resets.ante, 2, true) + local seal = SMODS.poll_seal({mod = 10}) + + return { + set = (pseudorandom(pseudoseed("stdset" .. G.GAME.round_resets.ante)) > 0.6) and "Enhanced" or "Base", + edition = edition, + seal = seal, + area = G.pack_cards, + skip_materialize = true, + soulable = true, + key_append = "sta" + } end, create_UIBox = function(_) return create_UIBox_standard_pack() end, + ease_background_colour = function(_) + ease_background_colour_blind(G.STATES.STANDARD_PACK) + end, particles = function(_) G.booster_pack_sparkles = Particles(1, 1, 0,0, { timer = 0.015, @@ -46,20 +60,6 @@ for i = 1, 2 do G.booster_pack_sparkles.fade_alpha = 1 G.booster_pack_sparkles:fade(1, 0) end, - create_card = function(_, _, _) - local edition = poll_edition("standard_edition"..G.GAME.round_resets.ante, 2, true) - local seal = SMODS.poll_seal({mod = 10}) - - return { - set = (pseudorandom(pseudoseed("stdset"..G.GAME.round_resets.ante)) > 0.6) and "Enhanced" or "Base", - edition = edition, - seal = seal, - area = G.pack_cards, - skip_materialize = true, - soulable = true, - key_append = "sta" - } - end, } end @@ -83,28 +83,6 @@ for i = 1, 2 do loc_vars = function(_, _, card) return {vars = {card.ability.choose, card.ability.extra}} end, - ease_background_colour = function(_) - ease_background_colour_blind(G.STATES.TAROT_PACK) - end, - create_UIBox = function(_) - return create_UIBox_arcana_pack() - end, - particles = function(_) - G.booster_pack_sparkles = Particles(1, 1, 0,0, { - timer = 0.015, - scale = 0.2, - initialize = true, - lifespan = 1, - speed = 1.1, - padding = -1, - attach = G.ROOM_ATTACH, - colours = {G.C.WHITE, lighten(G.C.PURPLE, 0.4), lighten(G.C.PURPLE, 0.2), lighten(G.C.GOLD, 0.2)}, - fill = true - }) - - G.booster_pack_sparkles.fade_alpha = 1 - G.booster_pack_sparkles:fade(1, 0) - end, create_card = function(_, _, _) if G.GAME.used_vouchers.v_omen_globe and pseudorandom("omen_globe") > 0.8 then return { @@ -123,7 +101,29 @@ for i = 1, 2 do area = G.pack_cards, skip_materialize = true, } - end + end, + create_UIBox = function(_) + return create_UIBox_arcana_pack() + end, + ease_background_colour = function(_) + ease_background_colour_blind(G.STATES.TAROT_PACK) + end, + particles = function(_) + G.booster_pack_sparkles = Particles(1, 1, 0,0, { + timer = 0.015, + scale = 0.2, + initialize = true, + lifespan = 1, + speed = 1.1, + padding = -1, + attach = G.ROOM_ATTACH, + colours = {G.C.WHITE, lighten(G.C.PURPLE, 0.4), lighten(G.C.PURPLE, 0.2), lighten(G.C.GOLD, 0.2)}, + fill = true + }) + + G.booster_pack_sparkles.fade_alpha = 1 + G.booster_pack_sparkles:fade(1, 0) + end, } end @@ -146,36 +146,6 @@ for i = 1, 2 do loc_vars = function(_, _, card) return {vars = {card.ability.choose, card.ability.extra}} end, - ease_background_colour = function(_) ease_background_colour_blind(G.STATES.PLANET_PACK) end, - create_UIBox = function(_) return create_UIBox_celestial_pack() end, - set_ability = function (_, card, _, delay_sprites) - card.ability = card.ability or {} - card.ability.set = "Booster" - card.ability.name = "Mini Celestial Pack" - end, - particles = function(_) - G.booster_pack_stars = Particles(1, 1, 0,0, { - fill = true, - scale = 0.1, - speed = 0.1, - timer = 0.07, - padding = -4, - lifespan = 15, - initialize = true, - attach = G.ROOM_ATTACH, - colours = {G.C.WHITE, HEX("a7d6e0"), HEX("fddca0")}, - }) - - G.booster_pack_meteors = Particles(1, 1, 0,0, { - speed = 4, - timer = 2, - fill = true, - scale = 0.05, - lifespan = 1.5, - attach = G.ROOM_ATTACH, - colours = {G.C.WHITE}, - }) - end, create_card = function(_, _, index) if not G.GAME.used_vouchers.v_telescope or index ~= 1 then return { @@ -212,7 +182,41 @@ for i = 1, 2 do area = G.pack_cards, skip_materialize = true, } - end + end, + create_UIBox = function(_) + return create_UIBox_celestial_pack() + end, + ease_background_colour = function(_) + ease_background_colour_blind(G.STATES.PLANET_PACK) + end, + particles = function(_) + G.booster_pack_stars = Particles(1, 1, 0,0, { + fill = true, + scale = 0.1, + speed = 0.1, + timer = 0.07, + padding = -4, + lifespan = 15, + initialize = true, + attach = G.ROOM_ATTACH, + colours = {G.C.WHITE, HEX("a7d6e0"), HEX("fddca0")}, + }) + + G.booster_pack_meteors = Particles(1, 1, 0,0, { + speed = 4, + timer = 2, + fill = true, + scale = 0.05, + lifespan = 1.5, + attach = G.ROOM_ATTACH, + colours = {G.C.WHITE}, + }) + end, + set_ability = function (_, card, _, _) + card.ability = card.ability or {} + card.ability.set = "Booster" + card.ability.name = "Mini Celestial Pack" + end, } end @@ -236,12 +240,21 @@ for i = 1, 2 do loc_vars = function(_, _, card) return {vars = {card.ability.choose, card.ability.extra}} end, - ease_background_colour = function(_) - ease_background_colour_blind(G.STATES.SPECTRAL_PACK) + create_card = function(_, _, _) + return { + soulable = true, + set = "Spectral", + key_append = "spe", + area = G.pack_cards, + skip_materialize = true, + } end, create_UIBox = function(_) return create_UIBox_spectral_pack() end, + ease_background_colour = function(_) + ease_background_colour_blind(G.STATES.SPECTRAL_PACK) + end, particles = function(_) G.booster_pack_sparkles = Particles(1, 1, 0,0, { scale = 0.1, @@ -258,14 +271,115 @@ for i = 1, 2 do G.booster_pack_sparkles.fade_alpha = 1 G.booster_pack_sparkles:fade(1, 0) end, - create_card = function(_, _, _) - return { - soulable = true, - set = "Spectral", - key_append = "spe", - area = G.pack_cards, - skip_materialize = true, + } +end + +if Cryptid then + SMODS.Booster { + atlas = "janebooster", + key = "minicode", + loc_txt = { + name = "Mini Code Pack", + text = { + "Choose {C:attention}#1#{} of up to", + "{C:attention}#2# {C:green}Code{} cards to", + "be used immediately", } + }, + pos = {x = 6, y = 2}, + config = {extra = 2, choose = 1}, + cost = 2, + weight = 0.24, + create_card = function(_, _) + return create_card("Code", G.pack_cards, nil, nil, true, true, nil, "cry_program_3") + end, + ease_background_colour = function(_) + ease_colour(G.C.DYN_UI.MAIN, G.C.SET.Code) + ease_background_colour({new_colour = G.C.SET.Code, special_colour = G.C.BLACK, contrast = 2}) + end, + loc_vars = function(self, _, card) + return { + vars = { + card and card.ability.choose or self.config.choose, + card and card.ability.extra or self.config.extra, + }, + } + end, + cry_digital_hallucinations = { + colour = HEX("14b341"), + loc_key = "cry_plus_code", + create = function() + local ccard = create_card("Code", G.consumeables, nil, nil, nil, nil, nil, "diha") + ccard:set_edition({negative = true}, true) + ccard:add_to_deck() + G.consumeables:emplace(ccard) + end, + }, + } +end + +for i = 1, 2 do + SMODS.Booster{ + key = "minitoken" .. i, + atlas = "janebooster", + loc_txt = { + name = "Mini Token Pack", + text = { + "Choose {C:attention}#1#{} of up to", + "{C:attention}#2# Token {}cards to", + "be used immediately", + } + }, + pos = {x = i - 1, y = 5}, + config = {extra = 2, choose = 1}, + cost = 2, + weight = 0.2, + loc_vars = function(_, _, card) + return {vars = {card.ability.choose, card.ability.extra}} + end, + create_card = function(_, _, _) + return create_card("jane_tokens", G.pack_cards, nil, nil, true, true, nil, "jane_tokens" .. i) + end, + create_UIBox = function(_) + local size = SMODS.OPENED_BOOSTER.ability.extra + + G.pack_cards = CardArea( + G.ROOM.T.x + 9 + G.hand.T.x, G.hand.T.y, + math.max(1, math.min(size, 5)) * G.CARD_W * 1.1, + 1.05 * G.CARD_H, + {card_limit = size, highlight_limit = 1, type = "consumeable"} + ) + + local t = {n = G.UIT.ROOT, config = {align = "tm", r = 0.15, colour = G.C.CLEAR, padding = 0.15}, nodes = { + {n = G.UIT.R, config = {align = "cl", colour = G.C.CLEAR, r = 0.15, padding = 0.1, minh = 2, shadow = true}, nodes = { + {n = G.UIT.R, config = {align = "cm"}, nodes = { + {n = G.UIT.C, config = {align = "cm", padding = 0.1}, nodes = { + {n = G.UIT.C, config = {align = "cm", r = 0.2, colour = G.C.CLEAR, shadow = true}, nodes = { + {n = G.UIT.O, config = {object = G.pack_cards}}}}}}}}, + {n = G.UIT.R, config = {align = "cm"}, nodes = {}}, + {n = G.UIT.R, config = {align = "tm"}, nodes = { + {n = G.UIT.C,config = {align = "tm", padding = 0.05, minw = 2.4}, nodes = {}}, + {n = G.UIT.C,config = {align = "tm", padding = 0.05}, nodes = { + UIBox_dyn_container({ + {n = G.UIT.C, config = {align = "cm", padding = 0.05, minw = 4}, nodes = { + {n = G.UIT.R,config = {align = "bm", padding = 0.05}, nodes = { + {n = G.UIT.O, config = {object = DynaText({string = {"Token Pack"}, colours = {G.C.WHITE},shadow = true, rotate = true, bump = true, spacing = 2, scale = 0.7, maxw = 4, pop_in = 0.5})}}}}, + {n = G.UIT.R,config = {align = "bm", padding = 0.05}, nodes = { + {n = G.UIT.O, config = {object = DynaText({string = {localize("k_choose") .. " "}, colours = {G.C.WHITE},shadow = true, rotate = true, bump = true, spacing = 2, scale = 0.5, pop_in = 0.7})}}, + {n = G.UIT.O, config = {object = DynaText({string = {{ref_table = G.GAME, ref_value = "pack_choices"}}, colours = {G.C.WHITE},shadow = true, rotate = true, bump = true, spacing = 2, scale = 0.5, pop_in = 0.7})}}}}}} + })}}, + {n = G.UIT.C,config = {align = "tm", padding = 0.05, minw = 2.4}, nodes = { + {n = G.UIT.R,config = {minh = 0.2}, nodes = {}}, + {n = G.UIT.R,config = {align = "tm",padding = 0.2, minh = 1.2, minw = 1.8, r = 0.15,colour = G.C.GREY, one_press = true, button = "skip_booster", hover = true,shadow = true, func = "can_skip_booster"}, nodes = { + {n = G.UIT.T, config = {text = localize("b_skip"), scale = 0.5, colour = G.C.WHITE, shadow = true, focus_args = {button = "y", orientation = "bm"}, func = "set_button_pip"}}}}}}}}}}}} + + return t + end, + ease_background_colour = function(_) + ease_background_colour{new_colour = HEX(i == 1 and "F0C197" or "FD5F55"), special_colour = HEX("000000"), contrast = 5} + end, + in_pool = function (_, _) + return G.GAME.used_vouchers.v_jane_token_voucher end, } end diff --git a/src/joker.lua b/src/joker.lua index 0b62ec0..e92a85a 100644 --- a/src/joker.lua +++ b/src/joker.lua @@ -11,6 +11,10 @@ for i = 1, 6 do SMODS.Sound({key = "grand" .. i, path = "grand_dad" .. i .. ".ogg"}) end +SMODS.Sound({key = "corrupt_milestone", path = "corrupt_milestone.ogg"}) +SMODS.Sound({key = "corrupt_untick", path = "corrupt_untick.ogg"}) +SMODS.Sound({key = "corrupt_tick", path = "corrupt_tick.ogg"}) + local exotic = Cryptid and "cry_exotic" or 4 local food = { @@ -203,6 +207,7 @@ function Jane.update_honey() end mergeable[i].ability.extra.level = tostring(tonumber(mergeable[i].ability.extra.level) + 1) + play_sound("jane_corrupt_milestone", 0.9 ^ (tonumber(mergeable[i].ability.extra.level) - 2)) ::continue:: end end @@ -292,7 +297,7 @@ function SMODS.poll_rarity(_pool_key, _rand_key) local max = 0 for _, v in pairs(SMODS.find_card("j_jane_honey")) do - max = math.max(max, v.ability.extra.level) + max = v.debuff and max or math.max(max, v.ability.extra.level) end local rarity = orig_rarity(_pool_key, _rand_key) @@ -332,6 +337,7 @@ function Jane.oxy(card, removed) if destroyed_steel > 0 then extra.progress = extra.progress + destroyed_steel + play_sound("jane_corrupt_tick") card_eval_status_text( card, @@ -411,6 +417,7 @@ SMODS.Joker { context.individual and not context.repetition and not context.retrigger_joker then + play_sound("jane_corrupt_untick") extra.progress = extra.progress - 1 card_eval_status_text( @@ -446,6 +453,7 @@ SMODS.Joker { card:flip() card:juice_up(1, 1) play_sound("card1") + play_sound("jane_corrupt_milestone") extra.is_corrupted = not extra.is_corrupted extra.is_corrupting = nil return true @@ -522,7 +530,7 @@ SMODS.Joker { soul_pos = {x = 1, y = 0}, atlas = "jane7granddad", blueprint_compat = true, - cost = Cryptid and 50 or 8, + cost = Cryptid and 49 or 7, rarity = Cryptid and exotic or 3, loc_vars = function(_, _, center) return {vars = {center.ability.shopslots}} @@ -546,15 +554,15 @@ SMODS.Joker { if rnd == 1 then return { - message = "+777", - chips = 777, + message = Cryptid and "+777" or "+77", + chips = Cryptid and 777 or 77, colour = palette, card = card }, true elseif rnd == 2 then return { - message = "+777 Mult", - mult = 777, + message = Cryptid and "+777 Mult" or "+77 Mult", + mult = Cryptid and 777 or 77, colour = palette, card = card }, true @@ -567,15 +575,15 @@ SMODS.Joker { }, true elseif rnd == 4 then return { - message = "x7", - x_chips = 7, + message = Cryptid and "x7" or "x1.77", + x_chips = Cryptid and 7 or 1.77, colour = palette, card = card }, true elseif rnd == 5 then return { - message = "x7 Mult", - x_mult = 7, + message = Cryptid and "x7 Mult" or "x1.77 Mult", + x_mult = Cryptid and 7 or 1.77, colour = palette, card = card }, true diff --git a/src/slugcat.lua b/src/slugcat.lua index eaaf717..7d6026d 100644 --- a/src/slugcat.lua +++ b/src/slugcat.lua @@ -99,7 +99,7 @@ SMODS.Joker { rarity = 4, } -local hunter = {7, 5, 3, 2, 1} +local hunter = {5, 4, 3, 2, 1} SMODS.Joker { key = "hunter", diff --git a/src/spectral.lua b/src/spectral.lua index 9eb8cbb..93787cd 100644 --- a/src/spectral.lua +++ b/src/spectral.lua @@ -227,7 +227,7 @@ SMODS.Consumable { config = {extra = {spectrals = 2}}, pos = {x = 2, y = 4}, cost = 4, - loc_vars = function(self, info_queue, center) + loc_vars = function(_, _, center) return {vars = {math.ceil(center.ability.extra.spectrals)}} end, can_use = Jane.can_use, @@ -249,8 +249,8 @@ SMODS.Consumable { name = "Shadows", text = { "Create {C:attention}#1#{} {C:green}random {C:dark_edition}Negative", - "{C:attention}Perishable {C:attention}Jokers{}, set", - "{C:money}sell value{} of {C:attention}all Jokers{} to {C:money}$0", + "{C:attention}Perishable {C:attention}Jokers{}, set {C:money}sell", + "{C:money}value {}of {C:attention}all Jokers {}to {C:money}$0", } }, config = {extra = {shadows = 2}}, @@ -308,25 +308,18 @@ SMODS.Consumable { SMODS.Consumable { - key = "reverse_hanged_man", - atlas = "janertarots", + key = "rift", + atlas = "janeacc", set = "Spectral", loc_txt = { - name = "Zen", + name = "Rift", text = { - "{C:attention}Reset{} your deck to", - "a {C:attention}standard 52-card deck" + "{C:attention}Reset{} your deck to a", + "{C:attention}standard 52-card deck" } }, - config = {extra = {destruction = 0.5}}, - pos = {x = 7, y = 1}, cost = 15, - loc_vars = function(_, _, center) - return {vars = { - math.min(100, center.ability.extra.destruction * 100), - math.ceil(#(G.playing_cards or {}) * center.ability.extra.destruction) - }} - end, + pos = {x = 4, y = 4}, can_use = Jane.can_use, use = function(_, _, _, _) Jane.q(function() diff --git a/src/token.lua b/src/token.lua index e897681..d93ea13 100644 --- a/src/token.lua +++ b/src/token.lua @@ -15,7 +15,7 @@ SMODS.ConsumableType { name = "Token" }, shop_rate = 0, - collection_rows = {6, 6}, + collection_rows = {5, 6}, primary_colour = G.C.CHIPS, secondary_colour = G.C.VOUCHER, } @@ -26,29 +26,58 @@ for _, v in pairs({ {"tag_meteor", "Meteor", 2, 0, 5}, {"tag_ethereal", "Ethereal", 3, 0, 5}, {"tag_buffoon", "Buffoon", 4, 0, 8}, + {"tag_cry_console", "Console", 5, 0, 7}, + + {"tag_cry_loss", "Loss", 0, 1, 12}, {"tag_cry_bundle", "Bundle", 1, 1, 10}, {"tag_uncommon", "Uncommon", 2, 1, 3}, {"tag_rare", "Rare", 3, 1, 5}, {"tag_cry_epic", "Epic", 4, 1, 8}, - {"tag_foil", "Foil", 1, 3, 3}, - {"tag_holo", "Holographic", 2, 3, 4}, - {"tag_polychrome", "Polychrome", 3, 3, 5}, - {"tag_negative", "Negative", 4, 3, 10}, - {"tag_investment", "Investment", 0, 3, 8}, - {"tag_voucher", "Voucher", 4, 5, 5}, - {"tag_handy", "Handy", 1, 5, 8}, - {"tag_garbage", "Garbage", 0, 5, 6}, - {"tag_coupon", "Coupon", 4, 4, 10}, - {"tag_juggle", "Juggle", 2, 5, 2}, - {"tag_d_six", "Dice", 0, 4, 2}, - {"tag_top_up", "Top-up", 2, 4, 2}, - {"tag_skip", "Speed", 4, 2, 7}, - {"tag_economy", "Economy", 5, 2, 10}, + {"tag_cry_gourmond", "Gourmond", 5, 1, 4}, + {"tag_double", "Double", 0, 2, 6}, {"tag_cry_triple", "Triple", 1, 2, 8}, {"tag_cry_quadruple", "Quadruple", 2, 2, 10}, {"tag_cry_quintuple", "Quintuple", 3, 2, 13}, - {"tag_cry_memory", "Memory", 5, 4, 8} + {"tag_skip", "Speed", 4, 2, 7}, + {"tag_economy", "Economy", 5, 2, 10}, + + {"tag_investment", "Investment", 0, 3, 8}, + {"tag_foil", "Foil", 1, 3, 3}, + {"tag_holo", "Holographic", 2, 3, 4}, + {"tag_polychrome", "Polychrome", 3, 3, 5}, + {"tag_negative", "Negative", 4, 3, 10}, + + {"tag_d_six", "Dice", 0, 4, 2}, + {"tag_orbital", "Orbital", 1, 4, 6}, + {"tag_top_up", "Top-up", 2, 4, 2}, + {"tag_cry_bettertop_up", "Top-up+", 3, 4, 3}, + {"tag_coupon", "Coupon", 4, 4, 10}, + {"tag_cry_memory", "Memory", 5, 4, 8}, + + {"tag_garbage", "Garbage", 0, 5, 6}, + {"tag_handy", "Handy", 1, 5, 8}, + {"tag_juggle", "Juggle", 2, 5, 2}, + {"tag_cry_schematic", "Schematic", 3, 5, 10}, + {"tag_voucher", "Voucher", 4, 5, 5}, + {"tag_cry_better_voucher", "Voucher+", 5, 5, 7}, + + {"tag_cry_gambler", "Gamble", 0, 6, 10}, + {"tag_cry_cat", "Cat", 1, 6, 1}, + {"tag_cry_mosaic", "Mosaic", 2, 6, 6}, + {"tag_cry_fragile", "Fragile", 3, 6, 7}, + {"tag_cry_astral", "Astral", 4, 6, 8}, + {"tag_cry_m", "M", 5, 6, 8}, + + {"tag_cry_blur", "Blurred", 0, 7, 11}, + {"tag_cry_oversat", "Oversaturated", 1, 7, 12}, + {"tag_cry_glitched", "Glitched", 2, 7, 13}, + {"tag_cry_gold", "Golden", 3, 7, 9}, + {"tag_cry_booster", "Booster", 4, 7, 4}, + {"tag_cry_scope", "Scope", 5, 7, 3}, + + {"tag_cry_banana", "Banana", 0, 8, 4}, + }) do if Cryptid or v[1]:sub(1, 7) ~= "tag_cry" then SMODS.Consumable {