Compare commits

..

No commits in common. "main" and "1.11.29" have entirely different histories.

29 changed files with 68 additions and 2019 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

View file

@ -1,117 +0,0 @@
#if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH)
#define MY_HIGHP_OR_MEDIUMP highp
#else
#define MY_HIGHP_OR_MEDIUMP mediump
#endif
extern MY_HIGHP_OR_MEDIUMP vec2 gaming;
extern MY_HIGHP_OR_MEDIUMP number dissolve;
extern MY_HIGHP_OR_MEDIUMP number time;
extern MY_HIGHP_OR_MEDIUMP vec4 texture_details;
extern MY_HIGHP_OR_MEDIUMP vec2 image_details;
extern bool shadow;
extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_1;
extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_2;
vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv)
{
if (dissolve < 0.001) {
return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a);
}
float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values
float t = time * 10.0 + 2003.;
vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a);
vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a);
vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324));
vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532));
vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000));
float field = (1.+ (
cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) +
cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.;
vec2 borders = vec2(0.2, 0.8);
float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14))
- (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve)
- (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve)
- (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve)
- (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve);
if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) {
if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) {
tex.rgba = burn_colour_1.rgba;
} else if (burn_colour_2.a > 0.01) {
tex.rgba = burn_colour_2.rgba;
}
}
return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0);
}
vec3 oklab2srgb(vec3 c)
{
float l_ = c.r + 0.3963377774 * c.g + 0.2158037573 * c.b;
float m_ = c.r - 0.1055613458 * c.g - 0.0638541728 * c.b;
float s_ = c.r - 0.0894841775 * c.g - 1.2914855480 * c.b;
float l = l_ * l_ * l_;
float m = m_ * m_ * m_;
float s = s_ * s_ * s_;
return vec3(
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
-0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s
);
}
vec3 oklch2srgb(vec3 c)
{
return oklab2srgb(vec3(c.x, c.y * cos(c.z), c.y * sin(c.z)));
}
vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords )
{
MY_HIGHP_OR_MEDIUMP vec4 tex = Texel( texture, texture_coords);
if (tex.r + tex.g + tex.b > 2.5) {
tex = vec4(oklch2srgb(vec3(.95, 0.0325, gaming.y + texture_coords.y * 10)), tex.a);
}
else if (tex.r + tex.g + tex.b < 1.5) {
tex = vec4(oklch2srgb(vec3(.7, 0.0325, gaming.y + texture_coords.y * 10 + 3.14159)), tex.a);
}
MY_HIGHP_OR_MEDIUMP vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba;
if (!shadow && dissolve > 0.01){
if (burn_colour_2.a > 0.01){
tex.rgb = tex.rgb*(1.-0.6*dissolve) + 0.6*burn_colour_2.rgb*dissolve;
} else if (burn_colour_1.a > 0.01){
tex.rgb = tex.rgb*(1.-0.6*dissolve) + 0.6*burn_colour_1.rgb*dissolve;
}
}
return dissolve_mask(tex, texture_coords, uv);
}
extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos;
extern MY_HIGHP_OR_MEDIUMP float hovering;
extern MY_HIGHP_OR_MEDIUMP float screen_scale;
#ifdef VERTEX
vec4 position( mat4 transform_projection, vec4 vertex_position )
{
if (hovering <= 0.){
return transform_projection * vertex_position;
}
float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale;
float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist))
*hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist);
return transform_projection * vertex_position + vec4(0,0,0,scale);
}
#endif

View file

@ -207,7 +207,7 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords
vec4 tex = Texel(texture, texture_coords);
vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba;
// Doesn't do anything it makes the shader useable
// Dummy, doesn't do anything but at least it makes the shader useable
if (uv.x > uv.x * 2.){
uv = polygloss;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,222 +0,0 @@
[manifest]
version = "1.0.0"
dump_lua = true
priority = 115
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "if v ~= chosen_joker then"
position = "at"
payload = """if v ~= chosen_joker and
not next(SMODS.find_card('j_jane_saint')) and
not next(SMODS.find_card('j_jen_saint')) and
not next(SMODS.find_card('j_jen_saint_attuned')) then"""
match_indent = true
[[patches]]
[patches.pattern]
target = '=[SMODS jen "Jen.lua"]'
pattern = "'rot',"
position = "after"
payload = "'escapey',"
match_indent = true
[[patches]]
[patches.pattern]
target = '=[SMODS jen "Jen.lua"]'
pattern = "if cen.click_noise then"
position = "before"
payload = """
if cen.key == "j_jen_escapey" then
local escapey_per = 10
cen.click_noise_vol = 0.4
cen.click_noise = 'jen_plasticButton' .. math.random(2)
cen.click_noise_per = math.random() / escapey_per + (escapey_per * 2 - 1) / (escapey_per * 2)
end
"""
match_indent = true
[[patches]]
[patches.pattern]
target = '=[SMODS jen "Jen.lua"]'
pattern = "--SOUNDS"
position = "after"
payload = """
SMODS.Sound({
key = "plasticButton1",
path = "plasticButton1.ogg"
})
SMODS.Sound({
key = "plasticButton2",
path = "plasticButton2.ogg"
})
"""
match_indent = true
[[patches]]
[patches.pattern]
target = '=[SMODS jen "Jen.lua"]'
pattern = "local crimbo_quotes = {"
position = "before"
payload = """
local function destructible(card)
return card.ability.consumeable and not card.highlighted and not (card.ability or {}).eternal
end
local escapey_quotes = {
marble = {"there is no escape..."},
normal = {
{"", "I can't wait to work with you!"},
{"", "Did you need something from me?"},
{"", "Oh! I'm just so happy to see you!"},
{"Can I say something irrelevant?", "I promise it won't be long."},
{"Tell me about your buddies!", "Assuming you have them, anyway."},
},
scared = {
"What am I going to do?!",
"I'm not scared, you are!",
"Tell me when this is over...",
"I can't keep looking at this!",
"Let me go hide in this corner... Okay?",
},
}
local function escapey_button_text(card)
if card.debuff then
return "DEBUFFED"
end
for _, v in ipairs(G.consumeables.cards) do
if destructible(v) then
return "CONSUME"
end
end
return "ESCAPE"
end
SMODS.Joker {
key = "escapey",
atlas = "jenescapey",
pronouns = "they_them",
loc_txt = {
name = "Escapey",
text = {
"{s:1.25}Use to sell {C:attention,s:1.25}tags",
"{s:1.25}for {X:money,C:white,s:1.25}$#1#X{s:1.25} each",
"If any {C:attention}consumables",
"are unselected, sell",
"those for {C:money}$#3# {}instead",
"{C:inactive,s:0.75,E:1}#4#",
"{C:inactive,s:0.75,E:1}#5#{C:red,s:1.5,E:1}#6#",
},
},
config = {extra = {money = 2, xmoney = 2, max = 200, escape_label = "ESCAPE"}},
attributes = {"destroy_card", "economy", "tag"},
pos = {x = 0, y = 0},
sinis = {x = 2, y = 0},
soul_pos = {x = 1, y = 0},
cost = 4,
rarity = 2,
eternal_compat = true,
blueprint_compat = false,
perishable_compat = true,
inject = not SMODS.Attribute and function(...)
SMODS.Joker.inject(...)
Bakery_API.usable_jokers.j_jen_escapey = true
end or nil,
loc_vars = function(_, _, card)
local extra = card.ability.extra
local normal = Jen.sinister and {"", ""} or
pseudorandom_element(escapey_quotes.normal, pseudoseed "EscapeyQuotes") or {"", ""}
local scared = not Jen.sinister and "" or
pseudorandom_element(escapey_quotes.scared, pseudoseed "EscapeyQuotes") or ""
return {vars = {extra.xmoney, number_format(extra.max), extra.money, normal[1], normal[2], scared}}
end,
calculate = function(_, card)
local extra = card.ability.extra
local label = extra.escape_label
extra.escape_label = escapey_button_text(card)
local _ = label ~= extra.escape_label and Bakery_API.rehighlight(card)
end,
Bakery_can_use = function(_, card)
if not jl.canuse() or card.debuff then
return false
end
if next(G.GAME.tags) then
return true
end
for _, v in ipairs(G.consumeables.cards) do
if destructible(v) then
return true
end
end
return false
end,
Bakery_use_button_text = function(_, card)
return card.ability.extra.escape_label
end,
Bakery_use_joker = function(self, card)
if card.debuff then
return
end
local times, xtimes = 0, 0
local extra = card.ability.extra
for _, v in ipairs(G.consumeables.cards) do
if destructible(v) then
v:start_dissolve({HEX "57ecabff"}, nil, 1.6)
times = times + 1
end
end
if times == 0 then
local delay = #G.GAME.tags >= self.tag_threshold and 0 or 1 / #G.GAME.tags
local trigger = delay == 0 and "immediate" or "before"
for _, v in ipairs(G.GAME.tags) do
Q(function()
attention_text {
scale = 0.7,
align = "cm",
text = "ESC",
cover = v.HUD_tag,
colour = G.C.WHITE,
cover_colour = G.C.BLACK,
hold = 0.3 / G.SETTINGS.GAMESPEED,
}
play_sound("cancel", 1.66, 0.5)
v.HUD_tag.states.visible = false
v:remove()
end, delay, nil, trigger, nil, delay ~= 0)
xtimes = xtimes + 1
end
end
local tag_money = G.GAME.dollars
local tag_times = math.pow(extra.xmoney, xtimes) - 1
ease_dollars(math.ceil(times * extra.money + tag_money * tag_times))
end,
tag_threshold = 30,
}
"""
match_indent = true
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = "function SMODS.has_enhancement(card, key)"
position = "after"
payload = "if not card.config then return false end"
match_indent = true

View file

@ -8,10 +8,7 @@ priority = 115
target = "card.lua"
pattern = "if v ~= chosen_joker then"
position = "at"
payload = """if v ~= chosen_joker and
not next(SMODS.find_card('j_jane_saint')) and
not next(SMODS.find_card('j_jen_saint')) and
not next(SMODS.find_card('j_jen_saint_attuned')) then"""
payload = "if v ~= chosen_joker and not next(SMODS.find_card('j_jane_saint')) then"
match_indent = true
[[patches]]
@ -27,7 +24,7 @@ match_indent = true
target = "functions/common_events.lua"
pattern = "if v.name == 'Black Hole' or v.name == 'The Soul' or v.hidden then"
position = "at"
payload = "if Jane and Jane.hidden(v) or not Jane and (v.name == 'Black Hole' or v.name == 'The Soul' or v.hidden) then"
payload = "if Jane.hidden(v) then"
match_indent = true
[[patches]]
@ -35,9 +32,7 @@ match_indent = true
target = "functions/misc_functions.lua"
pattern = "G.GAME.current_round.current_hand.chips*G.GAME.current_round.current_hand.mult"
position = "at"
payload = '''Jane and
Jane.get_chipmult_sum(G.GAME.current_round.current_hand.chips, G.GAME.current_round.current_hand.mult) or
G.GAME.current_round.current_hand.chips*G.GAME.current_round.current_hand.mult'''
payload = '''Jane.get_chipmult_sum(G.GAME.current_round.current_hand.chips, G.GAME.current_round.current_hand.mult)'''
match_indent = true
[[patches]]
@ -45,10 +40,7 @@ match_indent = true
target = "functions/misc_functions.lua"
pattern = "local AC = G.SETTINGS.ambient_control"
position = "before"
payload = '''local jane_rgb = G.C.jane_RGB
jane_rgb[1], jane_rgb[2], jane_rgb[3] = Jane.hsv(1 - (G.TIMERS.REAL / 3 % 1), math.sin(G.TIMERS.REAL) / 10 + 0.6, 1)
if Jane and
payload = '''if Jane and
(type(G.ARGS.score_intensity.required_score) == "table" and
G.ARGS.score_intensity.required_score:to_number() or
G.ARGS.score_intensity.required_score) ~= 0 then
@ -167,7 +159,7 @@ match_indent = true
target = "functions/state_events.lua"
pattern = '''hand_chips\*mult\)'''
position = "at"
payload = "Jane and Jane.get_chipmult_sum(hand_chips, mult) or hand_chips*mult)"
payload = "Jane.get_chipmult_sum(hand_chips, mult))"
[[patches]]
[patches.pattern]
@ -294,10 +286,6 @@ SMODS.Joker {
eternal_compat = true,
blueprint_compat = false,
perishable_compat = true,
inject = not SMODS.Attribute and function(...)
SMODS.Joker.inject(...)
Bakery_API.usable_jokers.j_jen_escapey = true
end or nil,
loc_vars = function(_, _, card)
local extra = card.ability.extra

View file

@ -11,10 +11,10 @@
"badge_colour": "3c3cff",
"priority": 115,
"dependencies": [
"Steamodded (>=1.0.0~BETA-0711a)",
"Steamodded (>=1.0.0~BETA-1606b)",
"Lovely (>=0.6)",
"Bakery (>=3.0.0~*)"
"Bakery (>=3.2.0~*)"
],
"conflicts": [],
"version": "1.12.14"
"version": "1.11.29"
}

View file

@ -157,7 +157,7 @@ local rain_world_jokers = {
"j_jane_saint",
}
function Jane.add_rain_world_joker()
local function add_rain_world_joker()
if not G.jokers then
return
end
@ -200,14 +200,14 @@ back {
},
},
alt_apply = function(_)
Jane.q(Jane.add_rain_world_joker)
Jane.q(add_rain_world_joker)
end,
apply = function(_)
Jane.q(Jane.add_rain_world_joker)
Jane.q(add_rain_world_joker)
end,
alt_calculate = function(_, _, context)
if Jane.is_end_of_ante(context) then
Jane.add_rain_world_joker()
add_rain_world_joker()
end
end,
}
@ -228,7 +228,7 @@ if Jane.cry then
},
alt_loc_txt = {
name = "Sleeve?",
text = {"{C:attention}Ante order {}is", "{C:green,E:1}randomized"},
text = {"{C:attention}Ante order {}is {C:green,E:1}randomized"},
},
alt_apply = function(_)
G.GAME.mysterious = true
@ -265,17 +265,6 @@ local function redeem_omen_globe()
end)
end
function Jane.increase_rates()
for _, v in ipairs(SMODS.ConsumableType.obj_buffer) do
local key = v:lower() .. "_rate"
local n = G.GAME[key]
if v ~= "jane_omegaconsumable" and type(n) == "number" then
G.GAME[key] = math.max(n, 1)
end
end
end
back {
key = "obsidian",
atlas = "janedecks",
@ -305,12 +294,10 @@ back {
alt_apply = function(_)
G.GAME.alt_obsidian = true
G.GAME.obsidian = true
Jane.increase_rates()
redeem_omen_globe()
end,
apply = function(_)
G.GAME.obsidian = true
Jane.increase_rates()
redeem_omen_globe()
end,
}
@ -346,7 +333,7 @@ function get_current_pool(_type, ...)
return pool, pool_key
end
function Jane.apply_orrery()
local function apply_orrery()
Jane.q(function()
local orrery = {}
G.GAME.orrery = orrery
@ -361,7 +348,7 @@ function Jane.apply_orrery()
end)
end
function Jane.rebalance_orrery()
local function rebalance_orrery()
local function small(x)
return type(x) == "table" and x:to_number() or x
end
@ -454,12 +441,12 @@ back {
},
},
alt_apply = function(_)
Jane.apply_orrery()
apply_orrery()
end,
apply = function(_)
Jane.apply_orrery()
apply_orrery()
end,
calculate = Jane.rebalance_orrery,
calculate = rebalance_orrery,
alt_calculate = function(_, _, context)
local function small(x)
return type(x) == "table" and x:to_number() or x
@ -493,7 +480,7 @@ back {
ease_discard(new_discards, true)
end
Jane.rebalance_orrery()
rebalance_orrery()
end,
}
@ -663,39 +650,6 @@ back {
end,
}
function Jane.display_omega_odds()
local omega_replacement = ((G.GAME or {}).modifiers or {}).omega_replacement
if not omega_replacement or omega_replacement == 0 then
return
end
local handy_speed = ((Handy or {}).speed_multiplier or {}).value or 1
local pitch = 0.9 + (0.2 * math.random())
play_sound("jane_pop", pitch * 0.75, 0.75)
play_sound("jane_pop", pitch * 1.5, 0.75)
Jane.card_status_text(
nil,
"Omega Cards are now a 1 in " .. number_format(1 / G.GAME.modifiers.omega_replacement),
0,
0.0005,
G.C.jane_RGB,
1.5,
nil,
nil,
nil,
"cm",
"jane_pop",
0.75,
pitch,
nil,
nil,
G.SETTINGS.GAMESPEED * handy_speed * 3
)
end
local banned_keys = {
sleeve_Seen_Seen = true,
sleeve_jane_omega = true,
@ -708,8 +662,8 @@ back {
loc_txt = {
name = "Omega Deck",
text = {
"{C:jane_RGB}Omega {}cards may appear",
"Odds increase per {C:attention}ante",
"Applies the {C:legendary,E:1}upsides",
"of {C:attention}every Jane deck",
},
},
alt_loc_txt = {
@ -736,19 +690,21 @@ back {
end
end,
apply = function(_)
for _, v in ipairs({
"j_Bakery_Lua",
not Jane.cry and "tag_charm" or nil,
"tag_meteor",
"tag_ethereal",
"c_jane_token_tag_charm",
"c_jane_token_tag_meteor",
"c_jane_token_tag_ethereal",
}) do
G.GAME.banned_keys[v] = true
end
apply_orrery()
G.GAME.modifiers.jane_spacious = true
G.GAME.used_vouchers.v_omen_globe = true
G.GAME.modifiers.jane_spacious_omega = true
G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1
G.GAME.modifiers.omega_replacement = (not _G["MP"] or not _G["MP"]["LOBBY"]) and 1 / 301 or 0
Jane.q(function()
add_rain_world_joker()
local wee = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck")
G.jokers:emplace(wee)
G.GAME.tortoise = true
G.GAME.obsidian = true
G.GAME.mysterious = true
save_run()
end)
end,
alt_calculate = function(_, ...)
for _, v in pairs(G.P_CENTERS) do
@ -764,44 +720,14 @@ back {
G.hand.config.card_limit = math.max(G.hand.config.card_limit or 12, 12)
end,
calculate = function(_, _, context)
if not _G["MP"] or not _G["MP"]["LOBBY"] then
if Jane.is_end_of_ante(context) then
G.GAME.modifiers.omega_replacement = G.GAME.modifiers.omega_replacement ^ 0.95
Jane.q(Jane.display_omega_odds)
end
rebalance_orrery()
G.GAME.mysterious = nil
return
if Jane.is_end_of_ante(context) then
Jane.q(function()
Jane.empowered()
end)
end
if not context.end_of_round or
context.individual or
context.repetition or
context.blueprint then
return
end
local blind = ({
["Small Blind"] = 8,
["Big Blind"] = 5,
})[G.GAME.blind.name] or 2
local ante = G.GAME.round_resets.ante
local chance = 1 - math.pow(300 / 301, ante * 9 - blind)
local key = "omega_mp_" .. number_format(ante) .. "_" .. number_format(blind)
Jane.q(function()
G.GAME.modifiers.omega_replacement = chance
Jane.display_omega_odds()
G.GAME.modifiers.omega_replacement = 0
end)
if pseudorandom(key) >= chance then
return
end
Jane.q(function()
Jane.omega(key)
end)
end,
}
@ -1070,9 +996,3 @@ function CardArea:emplace(card, location, stay_flipped)
end
end
end
local orig_add_to_pool = SMODS.add_to_pool
function SMODS.add_to_pool(...)
return G.GAME.obsidian or orig_add_to_pool(...)
end

View file

@ -291,7 +291,6 @@ if Jane.cry then
cost = 2,
weight = 0.24,
create_card = function(_, _)
---@diagnostic disable-next-line: return-type-mismatch
return create_card("Code", G.pack_cards, nil, nil, true, true, nil, "cry_program_3")
end,
ease_background_colour = function(_)
@ -339,7 +338,6 @@ for i = 1, 2 do
return {vars = {card.ability.choose, card.ability.extra}}
end,
create_card = function(_, _, _)
---@diagnostic disable-next-line: return-type-mismatch
return create_card("jane_tokens", G.pack_cards, nil, nil, true, true, nil, "jane_tokens" .. i)
end,
create_UIBox = function(_)

View file

@ -93,45 +93,3 @@ G.localization.misc.v_text.ch_c_jane_downpour2 =
G.localization.misc.v_text.ch_c_jane_downpour3 =
{"{C:attention}Boss Blind {}is defeated, or {C:red}lose"}
SMODS.Challenge {
key = "jerma",
loc_txt = {name = "Jerma"},
rules = {custom = {{id = "jane_jerma1"}, {id = "jane_jerma2"}}},
apply = function(_)
Jane.apply_orrery()
Jane.increase_rates()
G.GAME.modifiers.jane_spacious = true
G.GAME.used_vouchers.v_omen_globe = true
G.GAME.modifiers.jane_spacious_omega = true
G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1
G.GAME.modifiers.omega_replacement = (not _G["MP"] or not _G["MP"]["LOBBY"]) and 1 / 301 or 0
Jane.q(function()
Jane.add_rain_world_joker()
local wee = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck")
G.jokers:emplace(wee)
G.GAME.tortoise = true
G.GAME.obsidian = true
G.GAME.mysterious = true
save_run()
end)
end,
calculate = function(card, context)
G.P_CENTERS.b_jane_omega:calculate(card, context)
Jane.rebalance_orrery()
G.GAME.mysterious = nil
if Jane.is_end_of_ante(context) then
Jane.q(function()
Jane.empowered()
end)
end
end,
}
G.localization.misc.v_text.ch_c_jane_jerma1 =
{"Applies the {C:legendary,E:1}upsides"}
G.localization.misc.v_text.ch_c_jane_jerma2 =
{"of {C:attention}every Jane deck"}

View file

@ -1,61 +1,15 @@
SMODS.Shader({key = "moire", path = "moire.fs"})
SMODS.Shader({key = "gaming", path = "gaming.fs"})
SMODS.Shader({key = "polygloss", path = "polygloss.fs"})
SMODS.Sound({key = "e_jumbo", path = "e_jumbo.ogg"})
SMODS.Sound({key = "e_moire", path = "e_moire.ogg"})
SMODS.Sound({key = "e_gaming", path = "e_gaming.ogg"})
SMODS.Sound({key = "e_polygloss", path = "e_polygloss.ogg"})
local function get_weight(self)
return self.weight *
G.GAME.edition_rate *
(G.GAME.modifiers.omega_replacement and 0 or 1) *
(next(SMODS.find_card "j_jane_saint") and 10 or 1)
end
SMODS.Edition({
key = "gaming",
loc_txt = {
name = "Gaming",
label = "Gaming",
text = {
"{C:blue}+Mult{} Chips",
"{C:red}+Chips{} Mult",
},
},
config = {e_chips = 1.2, e_mult = 0.8},
sound = {sound = "jane_e_gaming", per = 1, vol = 0.7},
weight = 1,
extra_cost = 20,
in_shop = true,
no_shadow = true,
apply_to_float = false,
shader = "jane_gaming",
disable_base_shader = true,
loc_vars = function(self, _, _)
return {vars = {self.config.e_chips, self.config.e_mult}}
end,
calculate = function(_, card, context)
if not context.post_joker and (not context.main_scoring or context.cardarea ~= G.play) then
return
end
return {
extra = {
card = card,
chips = mult,
colour = G.C.jane_RGB,
extra = {
card = card,
mult = hand_chips + mult,
colour = G.C.jane_RGB,
},
},
}
end,
})
SMODS.Edition({
key = "polygloss",
loc_txt = {
@ -73,19 +27,21 @@ SMODS.Edition({
},
config = {
mult = 2,
chips = 21,
chips = 22,
x_mult = 1.2,
p_dollars = 1,
e_mult = Jane.cry and 1.02 or nil,
},
sound = {sound = "jane_e_polygloss", per = 1.2, vol = 0.4},
weight = 7,
extra_cost = 5,
weight = 10,
extra_cost = 2,
in_shop = true,
shader = "jane_polygloss",
apply_to_float = false,
loc_vars = function(self, _, _)
local vars = {self.config.chips, self.config.mult, self.config.x_mult}
local vars = {self.config.chips}
vars[#vars + 1] = self.config.mult
vars[#vars + 1] = self.config.x_mult
vars[#vars + 1] = self.config.e_mult
vars[#vars + 1] = self.config.p_dollars
return {vars = vars}
@ -115,7 +71,7 @@ SMODS.Edition({
get_weight = get_weight,
})
SMODS.Edition({
local moire = SMODS.Edition({
key = "moire",
loc_txt = {
name = "Moire",
@ -128,10 +84,11 @@ SMODS.Edition({
config = {e_chips = 0.8, e_mult = 1.2},
sound = {sound = "jane_e_moire", per = 1, vol = 0.7},
weight = 1,
extra_cost = 20,
extra_cost = 10,
in_shop = true,
shader = "jane_moire",
apply_to_float = false,
get_weight = get_weight,
loc_vars = function(self, _, _)
return {vars = {self.config.e_chips, self.config.e_mult}}
end,
@ -160,20 +117,13 @@ local jumbo_modifier = Jane.cry and 100 or 2
local jumbo = SMODS.Edition({
key = "jumbo",
loc_txt = {
name = "{s:" .. math.pow(Jane.config.wee_sizemod, 2) .. "}" .. "Jumbo",
name = "Jumbo",
label = "Jumbo",
text = {
"{s:" .. Jane.config.wee_sizemod .. "}" ..
"All values are",
"{C:attention,s:" .. Jane.config.wee_sizemod .. "}" ..
"multiplied" ..
"{s:" .. Jane.config.wee_sizemod .. "}" ..
" by " ..
"{C:attention,s:" .. Jane.config.wee_sizemod .. "}" ..
jumbo_modifier,
"{C:inactive,s:" .. Jane.config.wee_sizemod .. "}" ..
"(If possible)",
"{C:inactive,E:1}Whoa, it's huge!!",
"All card values are",
"{C:attention}multiplied{} by {C:attention}up to " .. jumbo_modifier,
"{C:inactive}(If possible)",
"{C:inactive,E:1,s:0.75}Whoa, it's huge!!{}",
},
},
on_apply = function(card)
@ -245,8 +195,8 @@ local jumbo = SMODS.Edition({
end
end,
sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5},
weight = 7,
extra_cost = 10,
weight = 6,
extra_cost = 5,
in_shop = true,
shader = false,
apply_to_float = false,

View file

@ -27,25 +27,6 @@ if not Jane.misprintize then
assert(SMODS.load_file("src/misprintize.lua"))()
end
local function update_omega_from_collection()
local buffer = SMODS.ConsumableType.visible_buffer
if not buffer then
return
end
for i = 1, #buffer do
if buffer[i] == "jane_omegaconsumable" then
table.remove(buffer, i)
i = i - 1
end
end
if G.GAME.modifiers.omega_replacement then
buffer[#buffer + 1] = "jane_omegaconsumable"
end
end
function Jane.can_use()
return not (((G.play and #G.play.cards > 0) or
(G.CONTROLLER.locked) or
@ -70,8 +51,7 @@ function Jane.card_status_text(
volume,
pitch,
trigger,
f,
hold
f
)
if (delay or 0) <= 0 then
if type(f) == "function" then
@ -81,7 +61,7 @@ function Jane.card_status_text(
attention_text({
text = text,
scale = size or 1,
hold = hold or 0.7,
hold = 0.7,
backdrop_colour = colour or (G.C.FILTER),
align = align or "bm",
major = card,
@ -113,7 +93,7 @@ function Jane.card_status_text(
attention_text({
text = text,
scale = size or 1,
hold = (hold or 0.7) + (delay or 0),
hold = 0.7 + (delay or 0),
backdrop_colour = colour or (G.C.FILTER),
align = align or "bm",
major = card,
@ -289,13 +269,6 @@ end
local orig_can_highlight = CardArea.can_highlight
function CardArea:can_highlight(...)
for _, v in pairs(type(self.cards) == "table" and self.cards or {}) do
if (((v or {}).config or {}).center or {}).key == "c_jane_fool_omega" then
self.config.highlighted_limit = math.max(self.config.highlighted_limit, 2)
return true
end
end
if self ~= G.consumeables then
return orig_can_highlight(self, ...)
end
@ -332,47 +305,20 @@ end
local orig_menu = Game.main_menu
function Game:main_menu(change_context)
orig_menu(self, change_context)
G.ARGS.score_intensity.ambientSurreal1,
G.ARGS.score_intensity.ambientSurreal2,
G.ARGS.score_intensity.ambientSurreal3,
G.ARGS.score_intensity.ambientSurreal4 = 0, 0, 0, 0
update_omega_from_collection()
G.C.BACKGROUND.C[4] = 1
G.C.BACKGROUND.L[4] = 1
Jane.sinister = nil
orig_menu(self, change_context)
end
local orig_start_run = Game.start_run
function Game:start_run(...)
orig_start_run(self, ...)
self.GAME.modifiers.omegas_found = nil
Jane.q(Jane.display_omega_odds)
update_omega_from_collection()
if self.GAME.banned_keys then
for _, v in pairs(Jane.config.bans) do
self.GAME.banned_keys[v] = true
end
end
if self.GAME.banned_keys.j_Bakery_Lua and next(SMODS.find_card("j_Bakery_Lua")) then
G.C.BACKGROUND.L[4] = 0
end
end
local orig_card_collection_UIBox = SMODS.card_collection_UIBox
function SMODS.card_collection_UIBox(_pool, rows, ...)
if _pool == G.P_CENTER_POOLS.Edition then
rows[1] = rows[1] + 1
rows[2] = rows[2] + 1
end
return orig_card_collection_UIBox(_pool, rows, ...)
end
local orig_draw_card = draw_card
@ -416,7 +362,6 @@ for _, v in ipairs({
"challenge",
"edition",
"joker",
"omega",
"slugcat",
"spectral",
"tarot",

File diff suppressed because it is too large Load diff

View file

@ -5,24 +5,11 @@ for i = 1, 8 do
SMODS.Sound({key = "gore" .. i, path = "gore" .. i .. ".ogg"})
end
local function playing()
return ({
[G.STATES.PLAY_TAROT] = true,
[G.STATES.HAND_PLAYED] = true,
[G.STATES.DRAW_TO_HAND] = true,
[G.STATES.SELECTING_HAND] = true,
})[G.STATE]
end
SMODS.Sound({
key = "music_attuned",
path = "music_attuned.ogg",
volume = 1,
select_music_track = function()
if not playing() or next(SMODS.find_card("j_Bakery_Lua")) then
return -1 / 0
end
for _, v in pairs(SMODS.find_card("j_jane_saint")) do
if v.ability.extra.is_attuned then
return 201
@ -38,7 +25,7 @@ SMODS.Sound({
path = "music_attuned_sinister.ogg",
volume = 1,
select_music_track = function()
if not Jane.sinister or not playing() or next(SMODS.find_card("j_Bakery_Lua")) then
if not Jane.sinister then
return -1 / 0
end
@ -52,16 +39,6 @@ SMODS.Sound({
end,
})
SMODS.Sound({
key = "music_lua",
path = "music_lua.ogg",
pitch = 1,
volume = 1,
select_music_track = function()
return playing() and next(SMODS.find_card("j_Bakery_Lua")) and 203 or -1 / 0
end,
})
for _, v in pairs({
"artificer",
"hunter",
@ -315,7 +292,7 @@ SMODS.Joker {
atlas = "janegourmand",
loc_txt = {
name = "The Gourmand",
text = {"All cards are {C:dark_edition,s:" .. Jane.config.wee_sizemod .. "}Jumbo"},
text = {"All cards are {C:dark_edition}Jumbo"},
},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
@ -336,6 +313,7 @@ local function add_to_consumable_ability_by(n)
return type(v) == "number" and v + n or type(v) == "table" and f(v):map(new):table() or v
end
---@param card Card
return function(card)
local ability = card.ability or {}
@ -434,7 +412,6 @@ SMODS.Joker {
return not card.debuff and Jane.can_use() and next(G.hand.highlighted)
end,
Bakery_use_joker = function(_, card)
---@diagnostic disable-next-line: deprecated
local removed = {unpack(G.hand.highlighted)}
for _, v in pairs(removed) do
@ -665,6 +642,9 @@ SMODS.Joker {
}
end,
draw = function(_, card)
local rgb = G.C.jane_RGB
rgb[1], rgb[2], rgb[3] = Jane.hsv(1 - (G.TIMERS.REAL / 3 % 1), math.sin(G.TIMERS.REAL) / 10 + 0.6, 1)
local _ = card and
card.children.floating_sprite and
card.children.floating_sprite:set_sprite_pos({x = card.ability.extra.is_attuned and 2 or 1, y = 0})

View file

@ -13,15 +13,6 @@ SMODS.ConsumableType {
loc_txt = {
collection = "Tokens",
name = "Token",
undiscovered = {
name = "Not Discovered",
text = {
"Purchase or use",
"this card in an",
"unseeded run to",
"learn what it does",
},
},
},
shop_rate = 0,
collection_rows = {6, 6},