Compare commits

..

78 commits
1.5.38 ... main

Author SHA1 Message Date
bb05a0512b
Nerf Saint 2026-06-26 16:50:28 +02:00
8122036a55
Buff Saint 2026-06-26 14:28:28 +02:00
3cf0a17c45
Simplify Attuned Saint to be a passive ability 2026-06-26 01:58:28 +02:00
67f6ca08f5
Remove outdated info queue 2026-06-24 16:44:44 +02:00
9175f9bb7f
Simplify The Saint 2026-06-24 16:16:48 +02:00
3e679120e0
Tweak number 2026-06-24 01:09:19 +02:00
5931aa264b
Clarify 2026-06-24 01:01:28 +02:00
0b5560d019
Nerf Jumbo playing cards on non-Cryptid 2026-06-24 00:38:40 +02:00
6f7aac1234
Tweak number 2026-06-24 00:14:05 +02:00
7dfc8671e4
Make Gourmand quiet 2026-06-23 23:52:24 +02:00
31669e6b0c
Re-add bonus chips from Jumbo 2026-06-23 22:09:00 +02:00
0f0ec63819
Improve Jumbo hand sorting 2026-06-23 22:03:28 +02:00
4640b21403
Fix Jumbo card size not being applied on reload 2026-06-23 21:56:02 +02:00
5f28cc3d36
Nerf Jumbo sell value 2026-06-23 21:53:56 +02:00
2af1d9be76
Swap Gourmand and Rivulet, but with a twist 2026-06-23 21:43:37 +02:00
65fd36476a
Ban Frozen from appearing via Rivulet 2026-06-23 21:22:12 +02:00
1db153664f
Tweak number 2026-06-23 21:15:05 +02:00
40e8d4086b
Allow Saint to remove Eternal stickers from Frozen cards 2026-06-23 21:05:21 +02:00
ced0a9ab08
Make Saint progression take more effort 2026-06-23 19:10:24 +02:00
d3193af581
Completely Rework Saint, Buff Moire, Fix Artificer 2026-06-23 18:52:55 +02:00
f76e4fe160
Rebalance on Omega Deck 2026-06-22 21:42:49 +02:00
618474b080
Merge branch 'main' of https://git.emik.dev/emik/Jane 2026-06-21 21:16:42 +02:00
ef007afc55
Allow tokens to appear if only its Tier 2 Voucher is obtained 2026-06-21 21:15:24 +02:00
12ae6ff798
Allow tokens to appear if only its Tier 2 Voucher is obtained 2026-06-21 21:11:34 +02:00
2086d386d8
Ban discarding effects 2026-06-21 12:26:26 +02:00
8b00262f22
Add new challenge 2026-06-20 12:20:45 +02:00
cb4262093d
Fix OBOB 2026-06-18 16:22:13 +02:00
e9f1050dc2
Update label aggressively 2026-06-17 13:30:41 +02:00
0e47de546b
Improve localization 2026-06-17 12:43:03 +02:00
70895b77e8
Fix Survivor edgecase, Improve Escapey 2026-06-17 09:47:40 +02:00
050289d7bf
Buff Hunter cost 2026-06-16 23:39:17 +02:00
507f6dbdff
Add ambience 2026-06-15 22:26:29 +02:00
18624dc29f
Increase song priority 2026-06-15 21:06:28 +02:00
0145e774a5
Remove hard dependency 2026-06-15 17:17:22 +02:00
a6e349fb57
Buff Omega 2026-06-12 23:01:47 +02:00
7786ca2a8f
Improve compatibility 2026-06-11 13:49:46 +02:00
7d6288e59f
Tweak numbers 2026-06-10 13:02:13 +02:00
ee984ed5f3
Resize Jumbo 2026-06-10 04:40:49 +02:00
1e2ec5f67c
Hottestfix 2026-06-10 04:06:32 +02:00
fc58d49867
Hotterfix 2026-06-10 04:04:53 +02:00
7d1ff51525
Hotfix 2026-06-10 04:04:16 +02:00
3b39632c17
The best compatibility hack you've ever seen 2026-06-10 04:00:07 +02:00
96c8732deb
The worst compatibility hack you've ever seen 2026-06-10 02:47:14 +02:00
218de7ce6b
Change formatting 2026-06-09 16:08:13 +02:00
f3381d1046
Buff Maxie, Downshift Artificier, Nerf Hunter and Gourmand 2026-06-09 15:56:36 +02:00
d3629c857e
Hotfix 2026-06-07 19:42:29 +02:00
ec4dd25b36
Change Peppino rarity, improve compatibility, remove redundant assets 2026-06-07 14:48:13 +02:00
956bab043d
Fix The Rot's text in Cryptid 2026-06-07 12:58:07 +02:00
de3e416e84
Use new tag id 2026-06-06 21:43:26 +02:00
4d656e9fc7
Always use native misprintize 2026-06-06 21:41:26 +02:00
597dc5eaf0
Uncap Escapey in Cryptid 2026-06-06 21:29:40 +02:00
795f6dc3fe
Revert "Fix charms in new deck"
This reverts commit 54fe6e96dc.
2026-06-06 19:35:28 +02:00
54fe6e96dc
Fix charms in new deck 2026-06-06 19:23:52 +02:00
71b2029f47
Nerf new deck 2026-06-06 14:37:55 +02:00
fa1b398c08
Fix Escapey destroying jokers on new deck 2026-06-06 14:14:55 +02:00
87e5be7ba7
Add new deck 2026-06-06 01:19:44 +02:00
d2349ec498
Only remove highlight limit if actually necessary 2026-05-27 13:31:38 +02:00
74b185e090
Rephrase The Wee, buff its payout 2026-05-27 13:12:10 +02:00
196a9efa9d
Improve Jumbo implementation 2026-05-26 23:37:19 +02:00
e3e5b574d8
Fix hook 2026-05-26 15:10:48 +02:00
bb7f3d7b81
Use hook 2026-05-26 15:09:10 +02:00
73a7fa0db3
Fix typo 2026-05-26 15:00:25 +02:00
3b50fb132b
Add new voucher, nerf Escapey 2026-05-26 14:51:23 +02:00
2e1c67a49e
Nerf challenge 2026-05-24 16:15:20 +02:00
b9b1cedb79
Increase cap 2026-05-24 02:27:36 +02:00
fd6f25b913
Merge branch 'main' of https://git.emik.dev/emik/Jane 2026-05-23 21:34:48 +02:00
940058d18d
Restrict Spearmaster use button 2026-05-23 21:34:10 +02:00
2d7cf24aa6
Restrict Spearmaster use button 2026-05-23 19:29:23 +02:00
9574b532dc
Fix Spearmaster crash 2026-05-23 19:13:13 +02:00
7403424764
Trigger jokers 2026-05-23 19:03:25 +02:00
0fdef846cb
Make planets disappear 2026-05-23 18:39:57 +02:00
e26b590128
Fix Spearmaster crash 2026-05-23 18:33:01 +02:00
e902d8b72e
Add a "Use All" button for Spearmaster 2026-05-23 18:31:41 +02:00
2baf0c9d4a
Remove Negative from Rivulet's edition polling 2026-05-22 22:05:42 +02:00
1f9b29fda9
Cull another joker in non-Cryptid 2026-05-22 22:01:11 +02:00
2ec2177b69
Fix improper order of operations 2026-05-20 13:51:30 +02:00
7ea64afb09
Allow Jumbo for playing cards, change Escapey, nerf sinister requirement 2026-05-19 23:36:12 +02:00
43f0599995
Add Escapey joker, move Peppino to Cryptid, nerf challenge goal 2026-05-17 15:59:02 +02:00
24 changed files with 858 additions and 379 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -42,13 +42,44 @@ match_indent = true
target = "functions/misc_functions.lua"
pattern = "local AC = G.SETTINGS.ambient_control"
position = "before"
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
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
local break_infinity = ((Talisman or {}).config_file or {}).break_infinity
local big = (break_infinity == "" or break_infinity == nil) and function (x) return x end or to_big
local base = Cryptid and 10 or G.ARGS.score_intensity.required_score
local expo = Cryptid and G.ARGS.score_intensity.required_score or 10
Jane.sinister = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number() > 1
G.escapey_sinister = Jane.sinister
local base = Cryptid and 2 or G.ARGS.score_intensity.required_score
local expo = Cryptid and G.ARGS.score_intensity.required_score or 2
local ratio = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number()
Jane.sinister = ratio > 1
G.ARGS.score_intensity.ambientSurreal4 =
(break_infinity and
SMODS.Mods.Amulet and
G.ARGS.score_intensity.earned_score >= Bakery_API.parse_hyper_e("e10#10##10000")) and 1 or 0
G.ARGS.score_intensity.ambientSurreal3 =
(G.ARGS.score_intensity.ambientSurreal4 == 0 and
number_format(G.ARGS.score_intensity.earned_score):find("#")) and 1 or 0
G.ARGS.score_intensity.ambientSurreal2 =
(G.ARGS.score_intensity.ambientSurreal3 == 0 and
G.ARGS.score_intensity.ambientSurreal4 == 0 and
(G.ARGS.score_intensity.earned_score /
(Cryptid and
big(G.ARGS.score_intensity.required_score) ^
big(G.ARGS.score_intensity.required_score) ^
big(G.ARGS.score_intensity.required_score) or
big(2) ^ big(G.ARGS.score_intensity.required_score)
)
):to_number() > 1
) and 1 or 0
G.ARGS.score_intensity.ambientSurreal1 =
(Jane.sinister and
G.ARGS.score_intensity.ambientSurreal2 == 0 and
G.ARGS.score_intensity.ambientSurreal3 == 0 and
G.ARGS.score_intensity.ambientSurreal4 == 0) and 1 or 0
end'''
match_indent = true
@ -58,7 +89,7 @@ target = "functions/state_events.lua"
pattern = "for _, v in ipairs(SMODS.get_card_areas('playing_cards')) do"
position = "after"
payload = '''if v == G.hand and not (G.GAME.blind and G.GAME.blind.name == "The Card" and not G.GAME.blind.disabled) and next(SMODS.find_card("j_jane_survivor")) then
if Cryptid then
if Jane.cry then
for _, v in ipairs(G.hand.cards) do
local area = {cards = {v}}
SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, area.cards)
@ -152,3 +183,91 @@ pattern = "function SMODS.has_enhancement(card, key)"
position = "after"
payload = "if not card.config then return false end"
match_indent = true
[[patches]]
[patches.pattern]
target = "game.lua"
pattern = '''self.consumeables = CardArea('''
position = "before"
payload = '''if not G.GAME.modifiers.jane_spacious then'''
match_indent = true
[[patches]]
[patches.pattern]
target = "game.lua"
pattern = '''self.discard = CardArea('''
position = "before"
payload = '''else
self.jokers = CardArea(
0, 0,
CAI.joker_W+CAI.consumeable_W,
CAI.joker_H,
{card_limit = (self.GAME.starting_params.joker_slots +
self.GAME.starting_params.consumable_slots -
(G.GAME.modifiers.jane_spacious_omega and 0 or 1)) *
(G.GAME.modifiers.alt_jane_spacious and 2 or 1),
type = 'joker',
highlight_limit = 1e100
}
)
self.consumeables = self.jokers
end'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = '''G.consumeables.T.y = 0'''
position = "after"
payload = '''G.jokers.T.x = G.hand.T.x - 0.1
G.jokers.T.y = 0'''
match_indent = true
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = '''if G.consumeables.cards[1] then'''
position = "at"
payload = '''local eligible = {}
for i = 1, #G.consumeables.cards do
if G.consumeables.cards[i].ability.consumeable then
eligible[#eligible + 1] = G.consumeables.cards[i]
end
end
if #eligible > 0 then'''
match_indent = true
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = '''local card = copy_card(pseudorandom_element(G.consumeables.cards, pseudoseed('perkeo')), nil)'''
position = "at"
payload = '''local card = copy_card(pseudorandom_element(eligible, pseudoseed('perkeo')), nil)'''
match_indent = true
[[patches]]
[patches.pattern]
target = '''=[SMODS _ "src/utils.lua"]'''
pattern = '''-- TARGET: add your own CardAreas for joker evaluation'''
position = "after"
payload = '''
if G.GAME.modifiers.jane_spacious then
t = {G.jokers, G.vouchers}
end'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/misc_functions.lua"
pattern = "ambientOrgan1 = {volfunc = function(_prev_volume) return _prev_volume*(1 - dt) + dt*0.6*(G.SETTINGS.SOUND.music_volume + 100)/200*(G.ARGS.score_intensity.organ) end},"
position = "after"
payload = '''
jane_ambientSurreal1 = {volfunc = function(_prev_volume) return _prev_volume*(1 - dt) + dt*0.6*(G.SETTINGS.SOUND.music_volume + 80)/200*((G.ARGS.score_intensity.ambientSurreal1 or 0) * 1.4) end},
jane_ambientSurreal2 = {volfunc = function(_prev_volume) return _prev_volume*(1 - dt) + dt*0.6*(G.SETTINGS.SOUND.music_volume + 90)/200*((G.ARGS.score_intensity.ambientSurreal2 or 0) * 1.6) end},
jane_ambientSurreal3 = {volfunc = function(_prev_volume) return _prev_volume*(1 - dt) + dt*0.6*(G.SETTINGS.SOUND.music_volume + 100)/200*((G.ARGS.score_intensity.ambientSurreal3 or 0) * 1.8) end},
jane_ambientSurreal4 = {volfunc = function(_prev_volume) return _prev_volume*(1 - dt) + dt*0.6*(G.SETTINGS.SOUND.music_volume + 110)/200*((G.ARGS.score_intensity.ambientSurreal4 or 0) * 2) end},
'''
match_indent = true

View file

@ -5,17 +5,18 @@
"jenwalter666",
"Emik"
],
"description": "Fork of Jen's almanac that rebalances the mod by heavily toning down on the power creep and cutting out anything deemed not essential. Made out of genuine love for the original mod.",
"description": "Demake of POLTERWORX (formerly Jen's Almanac) that strips down the mod to my favorite components, alongside arbitrary mechanics that I reworked and arbitrary balance changes. Made out of genuine love for the original mod.",
"prefix": "jane",
"main_file": "src/main.lua",
"badge_colour": "3c3cff",
"priority": 114,
"dependencies": [
"Steamodded (>=1.0.0~ALPHA-1304a)",
"Bakery (>=0.1.26~*)"
"Steamodded (>=1.0.0~BETA-1606b)",
"Lovely (>=0.6)",
"Bakery (>=3.2.0~*)"
],
"conflicts": [
"Jen"
],
"version": "1.5.38"
"version": "1.11.0"
}

View file

@ -102,35 +102,35 @@ back {
loc_txt = {
name = "Acceleration Deck",
text = {
Cryptid and "" or "{C:attention}Ante increases twice{} as strong",
Jane.cry and "" or "{C:attention}Ante increases twice{} as strong",
"After defeating the {C:attention}Boss Blind{},",
Cryptid and "set {C:attention}ante {}to the {C:attention}next" or "",
Cryptid and "{C:attention}triangle number {}and create" or "",
Cryptid and "an {C:spectral,E:1}Empowered Tag" or "create a {C:dark_edition}Negative {C:spectral,E:1}Soul",
Jane.cry and "set {C:attention}ante {}to the {C:attention}next" or "",
Jane.cry and "{C:attention}triangle number {}and create" or "",
Jane.cry and "an {C:spectral,E:1}Empowered Tag" or "create a {C:dark_edition}Negative {C:spectral,E:1}Soul",
},
},
alt_loc_txt = {
name = "Jolt Sleeve",
text = {
Cryptid and "{C:attention}Ante number {}scales with {C:attention}square numbers" or "{C:attention}Ante increases twice{} as strong",
Jane.cry and "{C:attention}Ante number {}scales with {C:attention}square numbers" or "{C:attention}Ante increases twice{} as strong",
"After defeating the {C:attention}Small {}or {C:attention}Big Blind{},",
Cryptid and "create a {C:spectral,E:1}Empowered Tag" or "create a {C:dark_edition}Negative {C:spectral,E:1}Soul",
Jane.cry and "create a {C:spectral,E:1}Empowered Tag" or "create a {C:dark_edition}Negative {C:spectral,E:1}Soul",
},
},
loc_vars = function(_, info_queue, _)
if info_queue then
info_queue[#info_queue + 1] = Cryptid and G.P_TAGS.tag_cry_empowered or G.P_CENTERS.c_soul
info_queue[#info_queue + 1] = Jane.cry and G.P_TAGS.tag_cry_empowered or G.P_CENTERS.c_soul
end
return {vars = {}}
end,
alt_apply = function(_)
G.GAME.win_ante = Cryptid and G.GAME.win_ante * G.GAME.win_ante or G.GAME.win_ante * 4 - 1
G.GAME.win_ante = Jane.cry and G.GAME.win_ante * G.GAME.win_ante or G.GAME.win_ante * 4 - 1
G.GAME.alt_nitro = true
G.GAME.nitro = true
end,
apply = function(_)
G.GAME.win_ante = Cryptid and G.GAME.win_ante * (G.GAME.win_ante + 1) / 2 or G.GAME.win_ante * 2 - 1
G.GAME.win_ante = Jane.cry and G.GAME.win_ante * (G.GAME.win_ante + 1) / 2 or G.GAME.win_ante * 2 - 1
G.GAME.nitro = true
end,
alt_calculate = function(_, _, context)
@ -152,9 +152,8 @@ back {
local rain_world_jokers = {
"j_jane_monk",
"j_jane_survivor",
"j_jane_artificer",
"j_jane_spearmaster",
"j_jane_rivulet",
"j_jane_gourmand",
"j_jane_saint",
}
@ -213,7 +212,7 @@ back {
end,
}
if Cryptid then
if Jane.cry then
back {
key = "mysterious",
atlas = "janedecks",
@ -431,14 +430,14 @@ back {
name = "Orrery Deck",
text = {
"{C:attention}Hand stats {}are",
"always " .. (Cryptid and "{C:cry_ascendant}" or "{C:attention}") .. "equalized",
"always " .. (Jane.cry and "{C:cry_ascendant}" or "{C:attention}") .. "equalized",
},
},
alt_loc_txt = {
name = "Ephemeris Sleeve",
text = {
"{C:blue}Hands{}, {C:red}discards{}, and {C:money}money",
"are always " .. (Cryptid and "{C:cry_ascendant}" or "{C:attention}") .. "equalized",
"are always " .. (Jane.cry and "{C:cry_ascendant}" or "{C:attention}") .. "equalized",
},
},
alt_apply = function(_)
@ -563,7 +562,7 @@ local function two(x)
end
end
local eternal_text = Cryptid and "Absolute" or "Eternal"
local eternal_text = Jane.cry and "Absolute" or "Eternal"
back {
key = "weeck",
@ -571,7 +570,7 @@ back {
pos = {x = 4, y = 1},
loc_txt = {
name = "Weeck",
text = Cryptid and {
text = Jane.cry and {
"Start with an {C:purple,E:1}" .. eternal_text,
"{C:attention}Wee Joker {}and a deck",
"containing {C:attention}2 {C:purple,E:1}" .. eternal_text,
@ -623,6 +622,31 @@ back {
end,
}
back {
key = "spacious",
atlas = "janedecks",
pos = {x = 4, y = 0},
loc_txt = {
name = "Spacious Deck",
text = {
"{C:attention}Joker {}and {C:attention}Consumable",
"slots are {C:attention}combined",
"{C:attention}-1 {}Slot",
},
},
alt_loc_txt = {
name = "Boundless Sleeve",
text = {"Slots are {C:attention}doubled"},
},
alt_apply = function(_)
G.GAME.modifiers.alt_jane_spacious = true
G.GAME.modifiers.jane_spacious = true
end,
apply = function(_)
G.GAME.modifiers.jane_spacious = true
end,
}
local banned_keys = {
sleeve_Seen_Seen = true,
sleeve_jane_omega = true,
@ -664,13 +688,15 @@ back {
end,
apply = function(_)
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
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)
add_rain_world_joker()
G.GAME.tortoise = true
G.GAME.obsidian = true
G.GAME.mysterious = true
@ -689,6 +715,7 @@ back {
end
end,
calculate = function(_, _, context)
rebalance_orrery()
G.GAME.mysterious = nil
if Jane.is_end_of_ante(context) then
@ -730,7 +757,7 @@ function ease_ante(mod)
end
if G.GAME.nitro then
mod = Cryptid and
mod = Jane.cry and
(G.GAME.round_resets.ante < 0 and -G.GAME.round_resets.ante or
math.ceil(next_number(G.GAME.round_resets.ante) - G.GAME.round_resets.ante)) or
(mod > 0 and mod * 2 or mod)

View file

@ -36,9 +36,9 @@ SMODS.Blind {
atlas = "janeblinds",
pos = {x = 0, y = 0},
vars = {},
dollars = 6,
dollars = Jane.cry and 7 or 5,
defeat = function(_)
if not Cryptid then
if not Jane.cry then
offset_operator(2 - Jane.get_operator())
elseif not G.GAME.blind.disabled then
offset_operator(1)
@ -62,7 +62,7 @@ SMODS.Blind {
end,
}
if Cryptid then
if Jane.cry then
SMODS.Blind {
loc_txt = {
name = "The Insignia",
@ -98,7 +98,7 @@ end
SMODS.Blind {
loc_txt = {
name = "The Wee",
text = {"Only 2s can be played"},
text = {"All non-2s are debuffed", "and cannot be played"},
},
key = "wee",
config = {},
@ -107,7 +107,7 @@ SMODS.Blind {
atlas = "janeblinds",
pos = {x = 0, y = 3},
vars = {},
dollars = 2,
dollars = Jane.cry and 2 or 5,
disable = function(self)
self.disabled = true
end,
@ -123,7 +123,7 @@ SMODS.Blind {
end
end,
get_loc_debuff_text = function(_)
return "Hand must contain only 2s"
return "Hand must strictly contain only 2s"
end,
recalc_debuff = function(self, card, _)
return not self.disabled and

View file

@ -5,7 +5,7 @@ SMODS.Atlas {
path = Jane.config.texture_pack .. "/p_jane_boosters.png",
}
if Cryptid then
if Jane.cry then
for i = 1, 2 do
SMODS.Booster {
key = "ministandard" .. i,

View file

@ -10,26 +10,38 @@ local rain_world_jokers = {
"j_jane_rot",
}
local is_rain_world_joker = {}
local is_rain_world_joker, survival = {}, {}
for _, v in pairs(rain_world_jokers) do
is_rain_world_joker[v] = true
end
Jane.q(function()
for gk, g in pairs(G.localization.descriptions) do
for ck, c in pairs((type(g) == "table" and not ({Back = true, Sleeve = true})[gk]) and g or {}) do
for _, text in pairs((type(c) == "table" and type(c.text) == "table" and G.P_CENTERS[ck]) and c.text or {}) do
if type(text) == "string" and (text:find("discard") or text:find("Discard")) then
survival[#survival + 1] = {id = ck}
break
end
end
end
end
end, nil, nil, nil, nil, false, true)
SMODS.Challenge {
key = "survival",
loc_txt = {name = "Survival"},
jokers = {{id = "j_jane_survivor"}},
rules = {modifiers = {{id = "discards", value = 0}}},
restrictions = {banned_cards = survival},
}
SMODS.Challenge {
key = "downpour",
loc_txt = {
name = "Downpour",
},
rules = {custom = {
{id = "jane_downpour1"},
{id = "jane_downpour2"},
{id = "jane_downpour3"},
{id = "jane_downpour4"},
}},
loc_txt = {name = "Downpour"},
rules = {custom = {{id = "jane_downpour1"}, {id = "jane_downpour2"}, {id = "jane_downpour3"}}},
apply = function(_)
G.GAME.win_ante = 16
for _, v in ipairs(rain_world_jokers) do
Jane.q(function()
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, v, "karma_deck_next")
@ -81,6 +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"}
G.localization.misc.v_text.ch_c_jane_downpour4 =
{"Win on {C:attention}Ante 16"}

View file

@ -5,10 +5,6 @@ SMODS.Sound({key = "e_moire", path = "e_moire.ogg"})
SMODS.Sound({key = "e_polygloss", path = "e_polygloss.ogg"})
local function allow_moire()
if Cryptid then
return true
end
for _, v in pairs(SMODS.find_card("j_jane_saint")) do
if v.ability.extra.is_attuned then
return true
@ -22,16 +18,12 @@ local function get_weight(self)
return G.GAME.edition_rate * self.weight
end
local function is_playing_card(card)
return ({Default = true, Enhanced = true})[((card.config or {}).center or {}).set]
end
SMODS.Edition({
key = "polygloss",
loc_txt = {
name = "Polygloss",
label = "Polygloss",
text = Cryptid and {
text = Jane.cry and {
"{C:chips}+#1#{} Chips",
"{C:mult}+#2#{}, {X:mult,C:white}X#3#{}, & {X:mult,C:dark_edition}^#4#{} Mult",
"{C:money}$#5# {}when scored",
@ -46,7 +38,7 @@ SMODS.Edition({
chips = 12,
x_mult = 1.2,
p_dollars = 1,
e_mult = Cryptid and 1.02 or nil,
e_mult = Jane.cry and 1.02 or nil,
},
sound = {sound = "jane_e_polygloss", per = 1.2, vol = 0.4},
weight = 10,
@ -95,9 +87,9 @@ function Sprite:draw_shader(_shader, ...)
end
end
local jumbo_modifier = Cryptid and 100 or 2
local jumbo_modifier = Jane.cry and 100 or 2
SMODS.Edition({
local jumbo = SMODS.Edition({
key = "jumbo",
loc_txt = {
name = "Jumbo",
@ -106,22 +98,19 @@ SMODS.Edition({
"All card values are",
"{C:attention}multiplied{} by {C:attention}up to " .. jumbo_modifier,
"{C:inactive}(If possible)",
"{C:inactive,E:1,s:0.7}Whoa, it's huge!!{}",
"{C:inactive,E:1,s:0.75}Whoa, it's huge!!{}",
},
},
on_apply = function(card)
if not Cryptid and is_playing_card(card) then
if card.Jane_jumbo then
return
end
Jane.q(function()
Jane.resize(card, Jane.config.wee_sizemod)
end, nil, nil, nil, false, false)
card.Jane_jumbo = true
local obj = card:gc()
if obj.set == "Booster" or obj.jumbo_mod then
jumbo_modifier = obj.jumbo_mod or 10
jumbo_modifier = obj.jumbo_mod or 2
end
if card.added_to_deck then
@ -130,19 +119,25 @@ SMODS.Edition({
Jane.misprintize(card, {min = jumbo_modifier, max = jumbo_modifier}, nil, true)
if (card.ability or {}).bonus and (card.base or {}).nominal then
card.ability.bonus = card.ability.bonus + card.base.nominal
end
if card.added_to_deck then
card:add_to_deck()
end
Jane.resize(card, Jane.config.wee_sizemod)
end,
on_load = function(card)
Jane.resize(card, Jane.config.wee_sizemod)
end,
on_remove = function(card)
if not Cryptid and is_playing_card(card) then
if not card.Jane_jumbo then
return
end
Jane.q(function()
Jane.resize(card, 1 / Jane.config.wee_sizemod)
end, nil, nil, nil, false, false)
card.Jane_jumbo = nil
local was_added = card.added_to_deck
if was_added then
@ -151,19 +146,51 @@ SMODS.Edition({
Jane.misprintize(card, {min = 1 / jumbo_modifier, max = 1 / jumbo_modifier}, nil, true)
if (card.ability or {}).bonus and (card.base or {}).nominal then
card.ability.bonus = card.ability.bonus - card.base.nominal
end
if was_added then
card:add_to_deck()
end
Jane.resize(card)
end,
sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5},
weight = 5,
extra_cost = 5,
extra_cost = 2,
in_shop = true,
shader = false,
apply_to_float = false,
get_weight = get_weight,
})
local orig_set_ability = Card.set_ability
function Card:set_ability(...)
local is_jumbo = self.edition and self.edition.jane_jumbo
if is_jumbo then
if Jane.cry then
jumbo.on_remove(self)
else
Jane.resize(self)
end
end
local ret = orig_set_ability(self, ...)
if is_jumbo then
if Jane.cry then
jumbo.on_apply(self)
else
Jane.resize(self, Jane.config.wee_sizemod)
end
end
return ret
end
SMODS.Edition({
key = "moire",
loc_txt = {
@ -174,16 +201,15 @@ SMODS.Edition({
"{X:mult,C:dark_edition}^#2#{C:mult} Mult",
},
},
config = {e_chips = Cryptid and 0.8 or 0.9, e_mult = Cryptid and 1.2 or 1.1},
config = {e_chips = Jane.cry and 0.8 or 0.9, e_mult = Jane.cry and 1.2 or 1.1},
sound = {sound = "jane_e_moire", per = 1, vol = 0.7},
weight = 2,
weight = 1,
extra_cost = 10,
in_shop = true,
shader = "moire",
in_pool = allow_moire,
apply_to_float = false,
get_weight = function(self)
return G.GAME.edition_rate * self.weight * (allow_moire() and 1 or 0)
return G.GAME.edition_rate * self.weight * (allow_moire() and 20 or 2)
end,
loc_vars = function(self, _, _)
return {vars = {self.config.e_chips, self.config.e_mult}}

View file

@ -1,4 +1,4 @@
for _, v in pairs({"7granddad", "betmma", "honey", "oxy", "maxie", "peppino"}) do
for _, v in pairs({"7granddad", "betmma", "escapey", "honey", "oxy", "maxie", Jane.cry and "peppino" or nil}) do
SMODS.Atlas {
px = 71,
py = 95,
@ -15,7 +15,7 @@ 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 exotic = Jane.cry and "cry_exotic" or 4
local food = {
"j_gros_michel",
@ -48,6 +48,10 @@ local granddad_palette = {
HEX("6c0700"),
}
local function destructible(card)
return card.ability.consumeable and not card.highlighted and not (card.ability or {}).eternal
end
local function food_jokers_count()
if not G.jokers or not next(G.jokers.cards) then
return 0
@ -116,6 +120,154 @@ local function voucher_count()
return count
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
local esc = SMODS.Joker {
key = "escapey",
atlas = "janeescapey",
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,
loc_vars = function(_, _, card)
local extra = card.ability.extra
local normal = Jane.sinister and "" or
pseudorandom_element(escapey_quotes.normal, pseudoseed "EscapeyQuotes") or ""
local scared = not Jane.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 Jane.can_use() 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
Jane.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 = Jane.cry and G.GAME.dollars or math.min(G.GAME.dollars, extra.max)
local tag_times = Jane.cry and math.pow(extra.xmoney, xtimes) - 1 or xtimes
ease_dollars(math.ceil(times * extra.money + tag_money * tag_times))
end,
tag_threshold = 30,
}
local _ = Jane.cry or table.insert(
esc.loc_txt.text,
3,
"{C:inactive,s:1.25}(Max of {C:money,s:1.25}$#2#{C:inactive,s:1.25})"
)
local maxie_quotes = {
normal = {
"Hey! I hope we can become great friends together!",
@ -144,7 +296,7 @@ SMODS.Joker {
"{C:inactive,s:0.75,E:1}#3#{C:red,s:1.5,E:1}#4#",
},
},
config = {extra = {choices = Cryptid and 2 or 1}},
config = {extra = {choices = Jane.cry and 2 or 1}},
pos = {x = 0, y = 0},
sinis = {x = 2, y = 0},
soul_pos = {x = 1, y = 0},
@ -161,15 +313,20 @@ SMODS.Joker {
},
}
end,
calculate = function(_, card, context)
calculate = function(self, card, context)
local _ = context.starting_shop and self:add_to_deck(card, false)
end,
add_to_deck = function(_, card, from_debuff)
if from_debuff then
return
end
local min = math.min(card.ability.extra.choices, maxie_limit)
card.ability.extra.choices = min
if context.starting_shop then
for _ = 1, min do
SMODS.add_booster_to_shop()
end
end
end,
}
@ -246,7 +403,7 @@ SMODS.Joker {
cost = 8,
rarity = 3,
loc_vars = function(_, _, card)
local level = tonumber(card.ability.extra.level)
local level = tonumber(card.ability.extra.level) or 1
local function level_name(i)
local acc = ""
@ -290,12 +447,12 @@ SMODS.Joker {
update = function(_, card, _)
if card.added_to_deck and card.children.center and card.children.floating_sprite then
local extra = card.ability.extra or {}
local y = tonumber(extra.level) > 1 and 1 or 0
local y = (tonumber(extra.level) or 1) > 1 and 1 or 0
card.children.center:set_sprite_pos({x = 0, y = y})
card.children.floating_sprite:set_sprite_pos({x = Jane.sinister and 2 or 1, y = y})
end
local level = tonumber(card.ability.extra.level)
local level = tonumber(card.ability.extra.level) or 1
if not Jane.sinister and level > 2 then
card:juice_up(0, math.random() * (level - 2) / #Jane.rarity_ids)
@ -303,7 +460,7 @@ SMODS.Joker {
end,
}
if Cryptid then
if Cryptid and Cryptid.aliases then
Cryptid.aliases["honey"] = "j_jane_honey"
end
@ -313,7 +470,7 @@ function SMODS.poll_rarity(_pool_key, _rand_key)
local max = 0
for _, v in pairs(SMODS.find_card("j_jane_honey")) do
max = v.debuff and max or math.max(max, tonumber(v.ability.extra.level))
max = v.debuff and max or math.max(max, tonumber(v.ability.extra.level) or 1)
end
local rarity = orig_rarity(_pool_key, _rand_key)
@ -385,7 +542,7 @@ SMODS.Joker {
"{C:inactive,s:0.75,E:1}#11#{C:red,s:1.5,E:1}#12#",
},
},
config = {extra = {corrupted_steel = Cryptid and 20 or 5, is_corrupted = false, milestone = 3, progress = 0}},
config = {extra = {corrupted_steel = Jane.cry and 20 or 5, is_corrupted = false, milestone = 3, progress = 0}},
pos = {x = 0, y = 0},
sinis = {x = 2, y = 0},
soul_pos = {x = 1, y = 0},
@ -484,12 +641,12 @@ SMODS.Joker {
end,
}
if Cryptid then
if Cryptid and Cryptid.aliases then
Cryptid.aliases["oxy"] = "j_jane_oxy"
end
local operator = Cryptid and "^" or "X"
local operator_prefix = Cryptid and "{X:dark_edition,C:mult}" or "{X:mult,C:white}"
local operator = Jane.cry and "^" or "X"
local operator_prefix = Jane.cry and "{X:dark_edition,C:mult}" or "{X:mult,C:white}"
SMODS.Joker {
key = "betmma",
@ -498,16 +655,16 @@ SMODS.Joker {
name = "Betmma",
text = {
operator_prefix .. "+" .. operator .. "#1#{C:mult} Mult{} for every",
"{C:attention}unique Voucher redeemed",
"{C:attention}" .. (Jane.cry and "Unique " or "") .. "Voucher{} redeemed",
"{C:inactive}(Currently " .. operator_prefix .. operator .. "#2#{C:inactive})",
},
},
config = {extra = {tet = Cryptid and 0.25 or 0.5}},
config = {extra = {tet = Jane.cry and 0.25 or 0.5}},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
blueprint_compat = true,
cost = Cryptid and 20 or 8,
rarity = Cryptid and 4 or 3,
cost = Jane.cry and 20 or 8,
rarity = Jane.cry and 4 or 3,
loc_vars = function(_, _, center)
return {vars = {center.ability.extra.tet, 1 + (voucher_count() * center.ability.extra.tet)}}
end,
@ -523,14 +680,18 @@ SMODS.Joker {
return {
card = card,
colour = Cryptid and G.C.jane_RGB or nil,
message = Cryptid and (operator .. number_format(num)) or nil,
[Cryptid and "e_mult" or "x_mult"] = num,
colour = Jane.cry and G.C.jane_RGB or nil,
message = Jane.cry and (operator .. number_format(num)) or nil,
[Jane.cry and "e_mult" or "x_mult"] = num,
}, true
end
end,
}
if not Jane.cry then
return
end
SMODS.Joker {
key = "7granddad",
loc_txt = {
@ -545,8 +706,8 @@ SMODS.Joker {
soul_pos = {x = 1, y = 0},
atlas = "jane7granddad",
blueprint_compat = true,
cost = Cryptid and 49 or 7,
rarity = Cryptid and exotic or 3,
cost = Jane.cry and 49 or 7,
rarity = Jane.cry and exotic or 3,
loc_vars = function(_, _, center)
return {vars = {center.ability.shopslots}}
end,
@ -565,19 +726,19 @@ SMODS.Joker {
if context.other_card and context.other_card:get_id() == 7 and scj(context) then
grand_dad(card)
local palette = granddad_palette[math.random(#granddad_palette)]
local rnd = pseudorandom(pseudoseed("granddad"), 1, Cryptid and 5 or 4)
local rnd = pseudorandom(pseudoseed("granddad"), 1, Jane.cry and 5 or 4)
if rnd == 1 then
return {
message = Cryptid and "+777" or "+77",
chips = Cryptid and 777 or 77,
message = Jane.cry and "+777" or "+77",
chips = Jane.cry and 777 or 77,
colour = palette,
card = card,
}, true
elseif rnd == 2 then
return {
message = Cryptid and "+777 Mult" or "+77 Mult",
mult = Cryptid and 777 or 77,
message = Jane.cry and "+777 Mult" or "+77 Mult",
mult = Jane.cry and 777 or 77,
colour = palette,
card = card,
}, true
@ -590,8 +751,8 @@ SMODS.Joker {
}, true
elseif rnd == 4 then
return {
message = Cryptid and "X7 Mult" or "X1.77 Mult",
x_mult = Cryptid and 7 or 1.77,
message = Jane.cry and "X7 Mult" or "X1.77 Mult",
x_mult = Jane.cry and 7 or 1.77,
colour = palette,
card = card,
}, true
@ -621,8 +782,8 @@ SMODS.Joker {
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
config = {extra = {base = 2}},
rarity = 3,
cost = 8,
cost = Jane.cry and 20 or 8,
rarity = Jane.cry and 4 or 3,
blueprint_compat = true,
loc_vars = function(_, _, card)
return {vars = {card.ability.extra.base ^ food_jokers_count()}}
@ -631,7 +792,7 @@ SMODS.Joker {
local count = food_jokers_count()
if context.joker_main and count > 0 then
return {[Cryptid and "e_mult" or "x_mult"] = card.ability.extra.base ^ count}
return {[Jane.cry and "e_mult" or "x_mult"] = card.ability.extra.base ^ count}
end
end,
}

View file

@ -1,17 +1,15 @@
Jane = {
cry = not not G.P_CENTERS.j_cry_m,
config = {
wee_sizemod = 1.25,
texture_pack = "default",
wee_sizemod = math.sqrt(2),
bans = {"j_cry_crustulum", "c_cry_hammerspace"},
},
}
Jane.misprintize = (Cryptid or {}).misprintize
Jane.misprintize_tbl = (Cryptid or {}).misprintize_tbl
Jane.misprinitze_val = (Cryptid or {}).misprintize_val
Jane.rarity_ids = Cryptid and {1, 2, 3, "cry_epic", 4, "cry_exotic", "jane_junk"} or {1, 2, 3, 4, "jane_junk"}
Jane.rarity_ids = Jane.cry and {1, 2, 3, "cry_epic", 4, "cry_exotic", "jane_junk"} or {1, 2, 3, 4, "jane_junk"}
Jane.rarity_names = Cryptid and {"Common", "Uncommon", "Rare", "Epic", "Legendary", "Exotic", "Junk"} or
Jane.rarity_names = Jane.cry and {"Common", "Uncommon", "Rare", "Epic", "Legendary", "Exotic", "Junk"} or
{"Common", "Uncommon", "Rare", "Legendary", "Junk"}
if not Jane.misprintize then
@ -115,7 +113,7 @@ function Jane.card_status_text(
end
function Jane.empowered()
if Cryptid then
if Jane.cry then
add_tag(Tag("tag_cry_empowered"))
return
end
@ -173,15 +171,24 @@ function Jane.play_sound(sound, per, vol)
end)
end
function Jane.resize(card, mod, force_save)
if force_save or not card.origsize then
function Jane.resize(card, mod)
if not card.origsize then
card.origsize = {w = card.T.w, h = card.T.h}
end
card:hard_set_T(card.T.x, card.T.y, card.T.w * mod, card.T.h * mod)
card:hard_set_T(
card.T.x,
card.T.y,
mod and mod * card.T.w or card.origsize.w,
mod and mod * card.T.h or card.origsize.h
)
if not mod then
card.origsize = nil
end
remove_all(card.children)
card.children = {}
card.children.shadow = Moveable(0, 0, 0, 0)
card.children = {shadow = Moveable(0, 0, 0, 0)}
card:set_sprites(card.config.center, card.base.id and card.config.card)
if card.area and
@ -192,13 +199,14 @@ function Jane.resize(card, mod, force_save)
end
end
function Jane.q(func, delay, timer, trigger, blockable, blocking)
function Jane.q(func, delay, timer, trigger, blockable, blocking, no_delete)
G.E_MANAGER:add_event(Event({
delay = delay,
timer = timer,
trigger = (delay and not trigger) and "after" or trigger,
blocking = blocking,
blockable = blockable,
no_delete = no_delete,
func = function(...)
local ret = func(...)
return ret == nil and true or ret
@ -206,6 +214,44 @@ function Jane.q(func, delay, timer, trigger, blockable, blocking)
}))
end
if false then
---@type table?
Big = Big
---@type { aliases: { [string]: string } }?
Cryptid = Cryptid
---@type { config_file: { break_infinity: boolean, disable_anims: boolean }? }?
Talisman = Talisman
---@type fun(any): boolean
_G.is_number = _G.is_number
end
local orig_can_highlight = CardArea.can_highlight
function CardArea:can_highlight(...)
if self ~= G.consumeables then
return orig_can_highlight(self, ...)
end
local has_escapey = next(SMODS.find_card("j_jane_escapey"))
local config = self.config
config.old_limit = config.highlighted_limit == 1 / 0 and config.old_limit or config.highlighted_limit
config.highlighted_limit = has_escapey and 1 / 0 or config.old_limit
return has_escapey and true or orig_can_highlight(self, ...)
end
local orig_highlight = Card.highlight
function Card:highlight(is_highlighted, ...)
self.highlighted = is_highlighted
if not G.CONTROLLER.HID.controller then
return orig_highlight(self, is_highlighted, ...)
end
end
function Card:gc()
return (self.config or {}).center or {}
end
@ -271,7 +317,7 @@ function Game:update(dt)
local ante = G.GAME.round_resets.ante
local blind = get_blind_amount((ante >= 1 and ante <= 8) and math.floor(ante) or ante)
G.P_BLINDS["bl_jane_wee"].mult = 22 / blind
G.P_BLINDS["bl_jane_descending"].mult = math.floor(8 * math.sqrt(blind)) / blind
G.P_BLINDS["bl_jane_descending"].mult = math.ceil(8 * math.sqrt(blind)) / blind
Jane.update_honey()
if not Jane.bans_done then
@ -295,6 +341,15 @@ function Game:update(dt)
end
end
local orig_draw_card = draw_card
---@diagnostic disable-next-line: lowercase-global
function draw_card(a, b, c, d, e, f, ...)
if type(f) ~= "table" or (not f.shattered and not f.destroyed) then
return orig_draw_card(a, b, c, d, e, f, ...)
end
end
SMODS.Atlas {
px = 34,
py = 34,
@ -309,6 +364,10 @@ SMODS.Atlas {
path = Jane.config.texture_pack .. "/c_jane_acc.png",
}
for i = 1, 4 do
SMODS.Sound({key = "ambientSurreal" .. i, path = "ambient_surreal" .. i .. ".ogg"})
end
for _, v in ipairs({
"back",
"blind",

View file

@ -133,8 +133,11 @@ function Jane.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack,
for k, v in pairs(tbl) do
if (type(tbl[k]) ~= "table") or is_number(tbl[k]) then
if is_number(tbl[k]) and not
(k == "x_chips" and not Jane.cry) and not
(k == "h_x_chips" and not Jane.cry) and not
(k == "id") and not
(k == "colour") and not
(k == "nominal") and not
(k == "suit_nominal") and not
(k == "base_nominal") and not
(k == "face_nominal") and not

View file

@ -12,7 +12,7 @@ SMODS.Sound({
select_music_track = function()
for _, v in pairs(SMODS.find_card("j_jane_saint")) do
if v.ability.extra.is_attuned then
return Jane.sinister and -1 / 0 or 10
return 201
end
end
@ -25,9 +25,13 @@ SMODS.Sound({
path = "music_attuned_sinister.ogg",
volume = 1,
select_music_track = function()
if not Jane.sinister then
return -1 / 0
end
for _, v in pairs(SMODS.find_card("j_jane_saint")) do
if v.ability.extra.is_attuned then
return Jane.sinister and 10 or -1 / 0
return 202
end
end
@ -54,8 +58,8 @@ for _, v in pairs({
}
end
local epic = Cryptid and "cry_epic" or 3
local exotic = Cryptid and "cry_exotic" or 4
local epic = Jane.cry and "cry_epic" or 3
local exotic = Jane.cry and "cry_exotic" or 4
SMODS.Rarity {
key = "junk",
@ -124,10 +128,10 @@ SMODS.Joker {
loc_txt = {
name = "The Survivor",
text = {
"All cards held in hand",
"{C:attention}contribute to scoring" .. (Cryptid and " {}and" or ""),
Cryptid and "are all considered as" or nil,
Cryptid and "the {C:attention}first played card" or nil,
"All cards held in",
"hand also {C:attention}score" .. (Jane.cry and " {}and" or ""),
Jane.cry and "considered as the" or nil,
Jane.cry and "{C:attention}first {}played card" or nil,
},
},
pos = {x = 0, y = 0},
@ -144,11 +148,9 @@ SMODS.Joker {
loc_txt = {
name = "The Hunter",
text = {
"{C:blue}Provides infinite hands",
"{C:red,s,E:1}Succumbs to the Rot {}and creates",
(Cryptid and "an {C:spectral}Empowered Tag" or "a {C:dark_edition}Negative {C:spectral}Soul") .. " {}after #1#",
"When {C:attention}sold#2#{}, turns#3#",
"#4#{C:red}The Rot{} without rewards",
"{E:1}Succumbs to the {X:black,C:white,E:1}Rot{},",
(Jane.cry and "creating an {C:spectral}Empowered" or "creating a {C:dark_edition}Negative"),
(Jane.cry and "{C:spectral}Tag" or "{C:spectral}Soul") .. " {}after #1#",
},
},
config = {extra = {rounds_left = hunter[1]}},
@ -157,14 +159,15 @@ SMODS.Joker {
blueprint_compat = false,
perishable_compat = false,
soul_pos = {x = 1, y = 0},
cost = Cryptid and 15 or 8,
rarity = Cryptid and epic or 3,
cost = Jane.cry and 15 or 8,
rarity = Jane.cry and epic or 3,
loc_vars = function(_, info_queue, card)
local function rounds(amount)
return " round" .. ((math.abs(amount) > 1 or math.abs(amount) == 0) and "s" or "")
end
info_queue[#info_queue + 1] = Cryptid and G.P_CENTERS.c_cry_empowered or G.P_CENTERS.c_soul
info_queue[#info_queue + 1] = G.P_CENTERS.j_jane_rot
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_empowered or G.P_CENTERS.c_soul
local rounds_left = card.ability.extra.rounds_left
local sold = rounds_left - hunter[5]
@ -218,34 +221,14 @@ SMODS.Joker {
spawn_rot()
end
if context.blueprint then
if context.blueprint or
context.individual or
context.repetition or
context.retrigger_joker or
not context.end_of_round then
return
end
if context.selling_self and card.ability.extra.rounds_left <= hunter[5] then
spawn_rot()
elseif not context.individual and not context.repetition and not context.retrigger_joker then
if G.GAME.round_resets.hands <= 0 then
G.GAME.round_resets.hands = 1
end
if not card.hunter_prep then
card.hunter_prep = true
Jane.q(function()
card.hunter_prep = nil
if G.GAME.current_round.hands_left < G.GAME.round_resets.hands then
ease_hands_played(G.GAME.round_resets.hands - G.GAME.current_round.hands_left)
end
end)
end
if not context.end_of_round then
return
end
card.hunter_prep = nil
card.ability.extra.rounds_left = card.ability.extra.rounds_left - 1
local rl = card.ability.extra.rounds_left
Jane.card_status_text(card, tostring(card.ability.extra.rounds_left), nil, nil, G.C.RED, nil, nil, nil, nil,
@ -284,7 +267,6 @@ SMODS.Joker {
Jane.play_sound("jane_warning_heartbeat")
Jane.q(die, 0)
end
end
end,
}
@ -293,41 +275,90 @@ SMODS.Joker {
atlas = "janegourmand",
loc_txt = {
name = "The Gourmand",
text = {
"Values on {C:attention}consumables",
"are {C:attention}multiplied{} by {C:attention}#1#",
"when they are created",
"{C:inactive}(If possible)",
text = {"All cards are {C:dark_edition}Jumbo"},
},
},
loc_vars = function(_, _, center)
return {vars = {center.ability.modifier}}
end,
config = {modifier = 2},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
blueprint_compat = false,
cost = 8,
rarity = 3,
cost = 20,
rarity = 4,
loc_vars = function(_, info_queue)
info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_jumbo
end,
}
local function add_to_consumable_ability_by(n)
local f = SMODS.Mods.Roland.qol[1]
local function new(v)
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 {}
local function go(key)
---@type { [string]: number }|number
local value = ability[key]
--print(key)
if not value then
return
end
if type(value) == "number" then
ability[key] = value + n
return
end
if type(value) ~= "table" then
return
end
local new_value = f(value):map(new):table()
f(new_value):each(function(v, k)
ability[k] = v
end)
ability[key] = new_value
end
local center_key = (card.config or {}).center_key
if center_key and center_key:sub(1, 2) == "c_" then
f {"extra", "consumeable"}:each(go)
end
end
end
local orig_set_ability = Card.set_ability
---@diagnostic disable-next-line: duplicate-set-field
function Card:set_ability(center, initial, delay_sprites)
orig_set_ability(self, center, initial, delay_sprites)
if next(SMODS.find_card("j_jane_gourmand")) and
if next(SMODS.find_card("j_jane_rivulet")) and
self.gc and
self:gc().key ~= "c_base" and
string.sub(self:gc().key, 1, 2) == "c_" then
if Jane.cry or not ((SMODS.Mods.Roland or {}).qol or {})[1] then
local mod = 1
for _, v in pairs(SMODS.find_card("j_jane_gourmand")) do
for _, v in pairs(SMODS.find_card("j_jane_rivulet")) do
mod = mod * v.ability.modifier
end
Jane.misprintize(self, {min = mod, max = mod}, nil, true)
else
local mod = 0
for _, v in pairs(SMODS.find_card("j_jane_rivulet")) do
mod = mod + v.ability.modifier
end
add_to_consumable_ability_by(mod)(self)
end
end
end
@ -337,20 +368,31 @@ SMODS.Joker {
loc_txt = {
name = "The Artificer",
text = {
"Grants the {C:green}ability{} to {C:red}destroy",
"Use to {C:red}destroy",
"selected {C:attention}playing cards",
not Jane.cry and "{C:red,E:1}Self-destructs" or nil,
not Jane.cry and "after {C:attention}#1# #2#" or nil,
},
},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
config = {extra = {uses = 2}},
eternal_compat = false,
blueprint_compat = false,
cost = Cryptid and 50 or 20,
rarity = exotic,
cost = Jane.cry and 50 or 7,
rarity = Jane.cry and exotic or 3,
loc_vars = function(_, _, card)
card.ability = card.ability or {}
card.ability.extra = card.ability.extra or {}
card.ability.extra.uses = card.ability.extra.uses or 2
local uses = card.ability.extra.uses
return {vars = {uses, uses == 1 and "use" or "uses"}}
end,
Bakery_use_button_text = function(_, _) return "DESTROY" end,
Bakery_can_use = function(_, card)
return not card.debuff and Jane.can_use() and next(G.hand.highlighted)
end,
Bakery_use_joker = function(_, _)
Bakery_use_joker = function(_, card)
for _, v in pairs(SMODS.find_card("j_jane_oxy")) do
Jane.oxy(v, G.hand.highlighted)
end
@ -358,6 +400,17 @@ SMODS.Joker {
for _, v in pairs(G.hand.highlighted) do
v:start_dissolve()
end
if Jane.cry then
return
end
card.ability.extra.uses = card.ability.extra.uses - 1
local _ = card.ability.extra.uses <= 0 and card:start_dissolve()
local _ = card.ability.extra.uses == 1 and juice_card_until(card, function()
return card.area == G.jokers
end, true)
end,
}
@ -369,9 +422,11 @@ SMODS.Joker {
loc_txt = {
name = "The Spearmaster",
text = {
"You can choose {C:attention}any number of cards",
"after opening {C:attention}any Booster Pack",
"{C:attention}Booster Packs{} have {C:green}+#1#{} additional cards",
"You can choose {C:attention}any",
"number of cards",
"in {C:attention}Booster Packs",
"{C:attention}Booster Packs{} have",
"{C:green}+#1#{} additional cards",
},
},
config = {extra = {choices = 1}},
@ -384,8 +439,50 @@ SMODS.Joker {
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
blueprint_compat = false,
cost = Cryptid and 12 or 20,
rarity = Cryptid and epic or 4,
cost = Jane.cry and 12 or 20,
rarity = Jane.cry and epic or 4,
Bakery_can_use = function(_, card)
if card.debuff or not
Jane.can_use() or not
((G.pack_cards or {}).cards or {})[1] then
return false
end
local ret = false
for _, v in pairs(G.pack_cards.cards) do
if v.jane_spearmaster then
return false
elseif ((v.ability or {}).consumeable or {}).hand_type then
ret = true
end
end
return ret
end,
Bakery_use_button_text = function() return "USE ALL" end,
Bakery_use_joker = function(self, card)
if not self:Bakery_can_use(card) then
return
end
local c = G.pack_cards.cards
for i = #c, 1, -1 do
if ((c[i].ability or {}).consumeable or {}).hand_type then
c[i].jane_spearmaster = true
c[i]:use_consumeable()
SMODS.calculate_context {using_consumeable = true, consumeable = c[i], area = c[i].from_area}
local normal = c[i].area ~= G.pack_cards
c[i]:start_dissolve()
if not normal then
G.GAME.pack_choices = G.GAME.pack_choices - 1
local _ = G.GAME.pack_choices <= 0 and G.FUNCS.end_consumeable()
end
end
end
end,
}
local orig_open = Card.open
@ -419,15 +516,21 @@ SMODS.Joker {
loc_txt = {
name = "The Rivulet",
text = {
"Non-{C:dark_edition}editioned{} cards are",
"{C:attention}given a random {C:dark_edition}Edition",
"Values on {C:attention}consumables",
"are {C:attention}" .. (Jane.cry and "multiplied" or "added") .. "{} by {C:attention}#1#" .. (Jane.cry and "" or "{} when"),
(Jane.cry and "when " or "") .. "they are created",
"{C:inactive}(If possible)",
},
},
config = {modifier = Jane.cry and 2 or 1},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
blueprint_compat = false,
cost = 20,
rarity = 4,
cost = 8,
rarity = 3,
loc_vars = function(_, _, center)
return {vars = {center.ability.modifier}}
end,
}
local orig_draw = Card.draw
@ -452,11 +555,11 @@ function Card:draw(layer)
if cen and
self.facing == "front" and
self.config and
(self.added_to_deck or (self.area and self.area == G.hand)) and not
self.edition and
(self.added_to_deck or (self.area and self.area == G.hand)) and
not self.edition and
(self.area == G.consumeables or cen.set ~= "Booster") and
next(SMODS.find_card("j_jane_rivulet")) then
self:set_edition(poll_edition("rivulet_edition", nil, nil, true))
next(SMODS.find_card("j_jane_gourmand")) then
self:set_edition("e_jane_jumbo", true, true)
end
orig_draw(self, layer)
@ -473,44 +576,28 @@ function Card:set_debuff(should_debuff)
end
end
local function attunement()
return (G.GAME or {}).weeckweeck and 2 or (Cryptid and 1.002 or 1.25)
end
SMODS.Joker {
key = "saint",
atlas = "janesaint",
loc_txt = {
name = "The Saint{C:jane_RGB}#1#",
text = Cryptid and {
"{C:attention}Use {}to toggle {X:legendary,C:white}Eternal{} stickers to the left",
"{C:spectral}Analog{}, {C:spectral}Ankh{}, {C:spectral}Gateway{}, and",
"{C:spectral,s:0.95}Summoning {s:0.95}will {C:attention,s:0.95}not destroy Jokers",
"{C:jane_RGB}#2#{}#3#{X:black,C:jane_RGB,s:1.5}#4#{C:spectral}#5#{C:mult}#6#",
"{C:inactive,s:1.25}#7#{C:attention,s:1.25}#8#{C:inactive,s:1.25}#9#{C:inactive}#10#",
} or {
"{C:attention}Use {}to toggle {X:legendary,C:white}Eternal{} stickers to the left",
"{C:jane_RGB}#2#{}#3#{C:dark_edition}#4#{C:spectral}#5#",
"{C:inactive,s:1.25}#6#{C:attention,s:1.25}#7#{C:inactive,s:1.25}#8#{C:inactive}#9#",
name = {"{}", "#1#{C:jane_RGB,s:0.8}#2#", "{C:jane_RGB,s:1.6}#3#"},
text = {
"{C:attention}Use {}to toggle itself or",
"other Jokers to its",
"left's {C:legendary}Eternal{} sticker",
"{C:attention}#4#{}#5#{C:spectral}#6#{}#7#",
"{C:inactive,s:1.25}#8#{C:attention,s:1.25}#9#{C:inactive,s:1.25}#10#",
Jane.cry and "{C:inactive}(Gateway has no downside)" or nil,
},
},
config = {extra = {karma = 0, max_karma = Cryptid and 10 or 2}},
config = {extra = {changes_editions = false, jokers = Jane.cry and 10 or 1, karma = 0, max_karma = Jane.cry and 10 or 3}},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
cost = 20,
rarity = 4,
blueprint_compat = true,
loc_vars = function(_, info_queue, card)
if Cryptid then
info_queue[#info_queue + 1] = G.P_CENTERS.c_cry_analog
end
info_queue[#info_queue + 1] = Cryptid and G.P_CENTERS.c_ankh or nil
info_queue[#info_queue + 1] = Cryptid and G.P_CENTERS.c_cry_gateway or G.P_CENTERS.c_soul
if Cryptid then
info_queue[#info_queue + 1] = G.P_CENTERS.c_cry_summoning
end
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or nil
local extra = card.ability.extra
local karma = extra.karma
@ -518,36 +605,26 @@ SMODS.Joker {
local attuned = karma >= max_karma
return {
vars = Cryptid and {
attuned and " (Attuned)" or "",
vars = {
attuned and "" or "The Saint",
attuned and "The" or "",
attuned and "Attuned" or "",
attuned and "" or "Attune ",
attuned and "" or "after using ",
attuned and "^^" .. attunement() or max_karma,
attuned and "" or " Gateways",
attuned and " Mult" or "",
attuned and "" or "[",
attuned and "" or karma,
attuned and "" or " / " .. max_karma .. "]",
attuned and "(Cannot be debuffed)" or "",
} or {
attuned and " (Attuned)" or "",
attuned and "" or "Attune ",
attuned and "Boosts cards with " or "after using ",
attuned and "editions" or max_karma,
attuned and "" or " Ankh or Soul Cards",
attuned and "" or "[",
attuned and "" or karma,
attuned and "" or " / " .. max_karma .. "]",
attuned and "(Cannot be debuffed)" or "",
attuned and "" or "at ",
attuned and (Jane.cry and "Gateways " or "Spectrals ") or
max_karma .. (Jane.cry and " Gateways" or " Spectrals"),
attuned and "add Joker slots" or "",
attuned and "[Currently " or "[",
attuned and "+" .. karma or karma,
attuned and "]" or " / " .. max_karma .. "]",
},
}
end,
update = function(_, card, _)
card.debuff_immune = card.ability.extra.is_attuned
if card.added_to_deck and card.children.center and card.children.floating_sprite then
local extra = card.ability.extra
card.children.floating_sprite:set_sprite_pos({x = extra.is_attuned and 2 or 1, y = 0})
if card.edition and card.edition.Roland_frozen then
card:set_edition("e_base")
elseif card.children.floating_sprite then
card.children.floating_sprite:set_sprite_pos({x = card.ability.extra.is_attuned and 2 or 1, y = 0})
end
end,
calculate = function(_, card, context)
@ -589,49 +666,9 @@ SMODS.Joker {
end, 1)
end
if extra.is_attuned then
card.debuff = false
if card.ability then
card.ability.perishable = false
card.ability.perish_tally = 1e9
end
if Cryptid and not context.joker_main then
return
end
if not Cryptid and not context.other_joker and (not context.individual or context.cardarea ~= G.play) then
return
end
local attune = attunement()
local trigger = ({
e_holo = {mult = 50},
e_foil = {chips = 250},
e_polychrome = {x_mult = 2.5},
e_jane_polygloss = {
mult = 10,
x_mult = 2,
chips = 100,
p_dollars = 10,
},
e_jane_moire = {
colour = G.C.jane_RGB,
sound = "talisman_eeechip",
EEchip_mod = Cryptid and attune or nil,
[Cryptid and "EEmult_mod" or "Emult_mod"] = attune,
message = (Cryptid and "^^" or "^") .. attune .. (Cryptid and " Chips & Mult" or ""),
},
})[Cryptid and "e_jane_moire" or ((context.other_card or context.other_joker or {}).edition or {}).key]
if trigger then
trigger.card = card
end
return trigger
elseif extra.karma >= max_karma then
if extra.karma >= max_karma then
local karma = (extra.is_attuning or extra.is_attuned) and 0 or extra.karma
G.jokers:change_size(karma * extra.jokers)
ascend()
end
@ -642,9 +679,9 @@ SMODS.Joker {
return
end
local key = context.consumeable:gc().key
local gc = context.consumeable:gc()
if Cryptid and key ~= "c_cry_gateway" or not Cryptid and (key ~= "c_ankh" and key ~= "c_soul") then
if Jane.cry and gc.key ~= "c_cry_gateway" or not Jane.cry and gc.set ~= "Spectral" then
return
end
@ -660,7 +697,7 @@ SMODS.Joker {
{message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN}
)
card_eval_status_text(
local _ = extra.karma <= max_karma and card_eval_status_text(
card,
"extra",
nil,
@ -673,33 +710,49 @@ SMODS.Joker {
return
end
G.jokers:change_size((extra.is_attuned and quota or extra.karma) * extra.jokers)
ascend()
end,
Bakery_can_use = function(_, card)
return not card.debuff and Jane.can_use()
return Jane.can_use() and not card.debuff
end,
Bakery_use_joker = function(_, card)
if card.debuff then
return
end
for k, v in ipairs(G.jokers.cards) do
if card == v then
for i = 1, math.max(k - 1, 1) do
local joker = G.jokers.cards[i]
for joker_index = 1, math.max(card.rank - 1, 1) do
local joker = G.jokers.cards[joker_index]
joker:set_eternal(not joker.ability.eternal)
joker:juice_up()
if joker.Roland_frozen_ability then
joker.Roland_frozen_ability.eternal = joker.ability.eternal
end
return
if not card.ability.extra.changes_editions or
not card.ability.extra.is_attuned or
joker.ability.eternal then
joker:juice_up()
goto continue
end
local edition = 1
for ii, vv in ipairs(joker.edition and G.P_CENTER_POOLS.Edition or {}) do
if vv.key == joker.edition.key then
edition = ii
break
end
end
local next = edition < #G.P_CENTER_POOLS.Edition and edition + 1 or 1
joker:set_edition(G.P_CENTER_POOLS.Edition[next].key)
::continue::
end
end,
}
if Cryptid then
if Cryptid and Cryptid.aliases then
Cryptid.aliases["saint"] = "j_jane_saint"
Cryptid.aliases["attuned"] = "j_jane_saint"
Cryptid.aliases["the saint"] = "j_jane_saint"
Cryptid.aliases["the attuned"] = "j_jane_saint"
end
SMODS.Joker {
@ -708,9 +761,8 @@ SMODS.Joker {
loc_txt = {
name = "The Rot",
text = {
not Cryptid and "{C:inactive,E:1}Does nothing" or nil,
Cryptid and "{C:attention}Duplicates itself{} at the" or nil,
Cryptid and "end of {C:attention}every ante" or nil,
Jane.cry and "{C:attention}Duplicates itself{} at the" or "{C:inactive,E:1}Does nothing",
Jane.cry and "end of {C:attention}every ante" or nil,
},
},
pos = {x = 0, y = 0},
@ -727,7 +779,7 @@ SMODS.Joker {
return not not next(SMODS.find_card("j_jane_rot"))
end,
calculate = Cryptid and function(_, card, context)
calculate = Jane.cry and function(_, card, context)
local function has_room()
return G.jokers.config.card_count < G.jokers.config.card_limit
end

View file

@ -1,10 +1,3 @@
SMODS.Atlas {
key = "janertarots",
px = 71,
py = 95,
path = Jane.config.texture_pack .. "/c_jane_reversetarots.png",
}
SMODS.Sound({key = "draw", path = "draw.ogg"})
local function conjure(card, number)
@ -190,8 +183,8 @@ SMODS.Consumable {
loc_txt = {
name = "Shadows",
text = {
"Create {C:attention}#1#{} {C:green}random {C:dark_edition}Negative",
"{C:attention}Perishable {C:attention}Jokers{}, set {C:money}sell",
"Create {C:attention}#1#{} random {C:dark_edition}Negative",
"{C:attention}Perishable Jokers{}, set {C:money}sell",
"{C:money}value {}of {C:attention}all Jokers {}to {C:money}$0",
},
},
@ -256,13 +249,13 @@ SMODS.Consumable {
key = "obfuscation",
atlas = "janeacc",
set = "Spectral",
hidden = not Cryptid,
soul_rate = not Cryptid and 0.003 or nil,
soul_set = not Cryptid and "Spectral" or nil,
hidden = not Jane.cry,
soul_rate = not Jane.cry and 0.003 or nil,
soul_set = not Jane.cry and "Spectral" or nil,
loc_txt = {
name = "Obfuscation",
text = {
"{C:green,E:1}Randomises{} all cards in hand",
"{C:green,E:1}Randomizes{} all cards in hand",
"{C:inactive}(Rank, seal, edition,",
"{C:inactive}enhancement, and suit)",
},
@ -287,14 +280,14 @@ SMODS.Consumable {
key = "rift",
atlas = "janeacc",
set = "Spectral",
hidden = not Cryptid,
soul_rate = not Cryptid and 0.003 or nil,
soul_set = not Cryptid and "Spectral" or nil,
hidden = not Jane.cry,
soul_rate = not Jane.cry and 0.003 or nil,
soul_set = not Jane.cry and "Spectral" or nil,
loc_txt = {
name = "Rift",
text = {
"{C:attention}Reset {}your deck to a",
"{C:attention}standard 52-card deck",
"{C:red}Reset {}your deck to a",
"standard 52-card deck",
},
},
pos = {x = 4, y = 4},

View file

@ -1,4 +1,4 @@
if not Cryptid then
if not Jane.cry then
return
end
@ -97,7 +97,7 @@ SMODS.Consumable {
end,
}
if Cryptid then
if Cryptid and Cryptid.aliases then
Cryptid.aliases["joker in a tarot"] = "c_jane_jokerinatarot"
Cryptid.aliases["joker-in-a-tarot"] = "c_jane_jokerinatarot"
Cryptid.aliases["jolly in a tarot"] = "c_jane_jokerinatarot"

View file

@ -38,6 +38,9 @@ local function on_token_use(id)
add_tag(t)
end
local gourmand = G.P_TAGS.j_cry_gourmand and "j_cry_gourmand" or
(G.P_TAGS.j_cry_gourmond and "j_cry_gourmond" or nil)
local vowels = {A = true, E = true, I = true, O = true, U = true}
for _, v in pairs({
@ -52,7 +55,7 @@ for _, v in pairs({
{"tag_uncommon", "Uncommon", 2, 1, 3},
{"tag_rare", "Rare", 3, 1, 5},
{"tag_cry_epic", "Epic", 4, 1, 8},
{"tag_cry_gourmond", "Gourmond", 5, 1, 4},
{gourmand, "Gourmand", 5, 1, 4},
{"tag_double", "Double", 0, 2, 6},
{"tag_cry_triple", "Triple", 1, 2, 8},
{"tag_cry_quadruple", "Quadruple", 2, 2, 10},
@ -90,14 +93,17 @@ for _, v in pairs({
{"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
if v[1] and (Jane.cry or v[1]:sub(1, 7) ~= "tag_cry") then
SMODS.Consumable {
key = "token_" .. v[1],
set = "jane_tokens",
atlas = "janetokens",
loc_txt = {
name = v[2] .. " Token",
text = {"Creates a" .. (vowels[v[2]:sub(1, 1)] and "n" or "") .. " {C:attention}" .. v[2] .. " Tag"},
text = {
"Creates a" .. (vowels[v[2]:sub(1, 1)] and "n" or ""),
"{C:attention}" .. v[2] .. " Tag",
},
},
loc_vars = function(_, info_queue, _)
info_queue[#info_queue + 1] = v[1] ~= "tag_cry_cat" and G.P_TAGS[v[1]] or nil
@ -109,7 +115,9 @@ for _, v in pairs({
can_divide = true,
can_use = Jane.can_use,
in_pool = function(_, _)
return G.GAME.used_vouchers.v_jane_token_voucher or G.GAME.modifiers.Roland_alt_swapper_deck
return G.GAME.used_vouchers.v_jane_token_voucher or
G.GAME.used_vouchers.v_jane_token_voucher_plus or
G.GAME.modifiers.Roland_alt_swapper_deck
end,
use = function(_, _, _, _)
play_sound("jane_e_gilded", 1.25, 0.4)

View file

@ -12,7 +12,14 @@ SMODS.Atlas {
path = Jane.config.texture_pack .. "/v_jane_token_voucher.png",
}
if Cryptid then
SMODS.Atlas {
key = "janetokenvoucherplus",
px = 71,
py = 95,
path = Jane.config.texture_pack .. "/v_jane_token_voucher_plus.png",
}
if Jane.cry then
SMODS.Voucher {
key = "jolly_voucher",
atlas = "janejollyvoucher",
@ -35,12 +42,26 @@ SMODS.Voucher {
atlas = "janetokenvoucher",
loc_txt = {
name = "Token Voucher",
text = {"{C:attention}Tokens {}can appear", "in the shop", SMODS.Mods.Roland and "{C:inactive}(Permanently disables Escapey)"},
text = {"{C:attention}Tokens {}can appear", "in the shop"},
},
pos = {x = 0, y = 0},
cost = 10,
redeem = function(_, _)
G.GAME.jane_tokens_rate = 1.5
G.GAME.modifiers.Roland_debuff_escapey = true
G.GAME.jane_tokens_rate = 1
end,
}
SMODS.Voucher {
key = "token_voucher_plus",
atlas = "janetokenvoucherplus",
loc_txt = {
name = "Token Voucher+",
text = {"{C:attention}Tokens {}appear {C:attention}3X", "more frequently", "in the shop"},
},
requires = {"v_jane_token_voucher"},
pos = {x = 0, y = 0},
cost = 10,
redeem = function(_, _)
G.GAME.jane_tokens_rate = (G.GAME.jane_tokens_rate or 1) * 3
end,
}