Compare commits
69 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6ff684ed79 | |||
| 8e44deab99 | |||
| 023fa306ff | |||
| 63a48ff597 | |||
| af75973c0b | |||
| d131dadae8 | |||
| dd96176c3d | |||
| f93d8f09e6 | |||
| ed3303e575 | |||
| 93e0a4f6d6 | |||
| b4834d2c9b | |||
| 571eff1e53 | |||
| 91a5163b20 | |||
| 9de61821c5 | |||
| c494379e07 | |||
| 3002fe967f | |||
| 89b072cb45 | |||
| 00abcb0c14 | |||
| a2a238be3a | |||
| 23a77ed39f | |||
| 1c592f3878 | |||
| 0b6aa8afbb | |||
| 7549eb55d9 | |||
| 151023da0e | |||
| cf014cb9b7 | |||
| f1e6007cbd | |||
| f6c6066751 | |||
| 9347fca3cc | |||
| abf64c33d6 | |||
| ff09fc2722 | |||
| a061166e36 | |||
|
|
780814fece | ||
|
|
81695eae8b | ||
|
|
bb5908b042 | ||
|
|
5582920601 | ||
|
|
80b7cd1d47 | ||
|
|
a77fb916c7 | ||
|
|
5383f83425 | ||
|
|
2e661e0b50 | ||
|
|
e9090a2a5d | ||
|
|
e767c7651b | ||
|
|
9d8a6991b1 | ||
|
|
fbe895ba22 | ||
|
|
b7e8ca7cb9 | ||
|
|
767d54d2d8 | ||
|
|
e069cd8f68 | ||
|
|
bafb18d0c9 | ||
|
|
d0a9cdfe72 | ||
|
|
3c98e2cbca | ||
|
|
98265a1bbe | ||
|
|
a879fa12b2 | ||
|
|
9f5eedb704 | ||
|
|
8c4ce9bb00 | ||
|
|
43113e16e2 | ||
|
|
39d429e56d | ||
|
|
0cea7728fe | ||
|
|
0838c558b6 | ||
|
|
78b5b64f4c | ||
|
|
0140ff7e79 | ||
|
|
6e4f7e6b8e | ||
|
|
9828da63a9 | ||
|
|
e21b95254f | ||
|
|
5c1cabb252 | ||
|
|
de1cc7158d | ||
|
|
ecfc0d59b7 | ||
|
|
34da94cddf | ||
|
|
f0551cfb4a | ||
|
|
6bf2f76b34 | ||
|
|
f7037ce504 |
29 changed files with 2655 additions and 1041 deletions
171
.editorconfig
Normal file
171
.editorconfig
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
# see https://github.com/CppCXY/EmmyLuaCodeStyle
|
||||
[*.lua]
|
||||
# [basic]
|
||||
|
||||
# optional space/tab
|
||||
indent_style = space
|
||||
# if indent_style is space, this is valid
|
||||
indent_size = 4
|
||||
# if indent_style is tab, this is valid
|
||||
tab_width = 4
|
||||
# none/single/double
|
||||
quote_style = double
|
||||
|
||||
continuation_indent = 4
|
||||
## extend option
|
||||
# continuation_indent.before_block = 4
|
||||
# continuation_indent.in_expr = 4
|
||||
# continuation_indent.in_table = 4
|
||||
|
||||
# this mean utf8 length , if this is 'unset' then the line width is no longer checked
|
||||
# this option decides when to chopdown the code
|
||||
max_line_length = 120
|
||||
|
||||
# optional crlf/lf/cr/auto, if it is 'auto', in windows it is crlf other platforms are lf
|
||||
# in neovim the value 'auto' is not a valid option, please use 'unset'
|
||||
end_of_line = lf
|
||||
|
||||
# none/ comma / semicolon / only_kv_colon
|
||||
table_separator_style = none
|
||||
|
||||
#optional keep/never/always/smart
|
||||
trailing_table_separator = smart
|
||||
|
||||
# keep/remove/remove_table_only/remove_string_only
|
||||
call_arg_parentheses = keep
|
||||
|
||||
detect_end_of_line = false
|
||||
|
||||
# this will check text end with new line
|
||||
insert_final_newline = true
|
||||
|
||||
# [space]
|
||||
space_around_table_field_list = false
|
||||
|
||||
space_before_attribute = false
|
||||
|
||||
space_before_function_open_parenthesis = false
|
||||
|
||||
space_before_function_call_open_parenthesis = false
|
||||
|
||||
space_before_closure_open_parenthesis = false
|
||||
|
||||
# optional always/only_string/only_table/none
|
||||
# or true/false
|
||||
space_before_function_call_single_arg = always
|
||||
## extend option
|
||||
## always/keep/none
|
||||
# space_before_function_call_single_arg.table = always
|
||||
## always/keep/none
|
||||
# space_before_function_call_single_arg.string = always
|
||||
|
||||
space_before_open_square_bracket = false
|
||||
|
||||
space_inside_function_call_parentheses = false
|
||||
|
||||
space_inside_function_param_list_parentheses = false
|
||||
|
||||
space_inside_square_brackets = false
|
||||
|
||||
# like t[#t+1] = 1
|
||||
space_around_table_append_operator = false
|
||||
|
||||
ignore_spaces_inside_function_call = false
|
||||
|
||||
# detail number or 'keep'
|
||||
space_before_inline_comment = 1
|
||||
|
||||
# convert '---' to '--- ' or '--' to '-- '
|
||||
space_after_comment_dash = false
|
||||
|
||||
# [operator space]
|
||||
space_around_math_operator = true
|
||||
# space_around_math_operator.exponent = false
|
||||
|
||||
space_after_comma = true
|
||||
|
||||
space_after_comma_in_for_statement = true
|
||||
|
||||
# true/false or none/always/no_space_asym
|
||||
space_around_concat_operator = true
|
||||
|
||||
space_around_logical_operator = true
|
||||
|
||||
# true/false or none/always/no_space_asym
|
||||
space_around_assign_operator = true
|
||||
|
||||
# [align]
|
||||
|
||||
align_call_args = false
|
||||
|
||||
align_function_params = true
|
||||
|
||||
# true/false or always
|
||||
align_continuous_assign_statement = true
|
||||
|
||||
align_continuous_rect_table_field = true
|
||||
|
||||
align_continuous_line_space = 2
|
||||
|
||||
align_if_branch = false
|
||||
|
||||
# option none / always / contain_curly/
|
||||
align_array_table = true
|
||||
|
||||
align_continuous_similar_call_args = false
|
||||
|
||||
align_continuous_inline_comment = true
|
||||
# option none / always / only_call_stmt
|
||||
align_chain_expr = none
|
||||
|
||||
# [indent]
|
||||
|
||||
never_indent_before_if_condition = false
|
||||
|
||||
never_indent_comment_on_if_branch = false
|
||||
|
||||
keep_indents_on_empty_lines = false
|
||||
|
||||
allow_non_indented_comments = false
|
||||
# [line space]
|
||||
|
||||
# The following configuration supports four expressions
|
||||
# keep
|
||||
# fixed(n)
|
||||
# min(n)
|
||||
# max(n)
|
||||
# for eg. min(2)
|
||||
|
||||
line_space_after_if_statement = fixed(2)
|
||||
|
||||
line_space_after_do_statement = fixed(2)
|
||||
|
||||
line_space_after_while_statement = fixed(2)
|
||||
|
||||
line_space_after_repeat_statement = fixed(2)
|
||||
|
||||
line_space_after_for_statement = fixed(2)
|
||||
|
||||
line_space_after_local_or_assign_statement = max(2)
|
||||
|
||||
line_space_after_function_statement = fixed(2)
|
||||
|
||||
line_space_after_expression_statement = max(2)
|
||||
|
||||
line_space_after_comment = fixed(1)
|
||||
|
||||
line_space_around_block = fixed(1)
|
||||
# [line break]
|
||||
break_all_list_when_line_exceed = false
|
||||
|
||||
auto_collapse_lines = false
|
||||
|
||||
break_before_braces = false
|
||||
|
||||
# [preference]
|
||||
ignore_space_after_colon = false
|
||||
|
||||
remove_call_expression_list_finish_comma = true
|
||||
# keep / always / same_line / replace_with_newline / never
|
||||
end_statement_with_semicolon = replace_with_newline
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB |
BIN
assets/1x/default/sleeve_jane_sleeves.png
Normal file
BIN
assets/1x/default/sleeve_jane_sleeves.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/1x/default/v_jane_jolly_voucher.png
Normal file
BIN
assets/1x/default/v_jane_jolly_voucher.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/2x/default/sleeve_jane_sleeves.png
Normal file
BIN
assets/2x/default/sleeve_jane_sleeves.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
BIN
assets/2x/default/v_jane_jolly_voucher.png
Normal file
BIN
assets/2x/default/v_jane_jolly_voucher.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
151
assets/shaders/moire.fs
Normal file
151
assets/shaders/moire.fs
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
#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 moire;
|
||||
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);
|
||||
}
|
||||
|
||||
number hue(number s, number t, number h)
|
||||
{
|
||||
number hs = mod(h, 1.)*6.;
|
||||
if (hs < 1.) return (t-s) * hs + s;
|
||||
if (hs < 3.) return t;
|
||||
if (hs < 4.) return (t-s) * (4.-hs) + s;
|
||||
return s;
|
||||
}
|
||||
|
||||
vec4 RGB(vec4 c)
|
||||
{
|
||||
if (c.y < 0.0001)
|
||||
return vec4(vec3(c.z), c.a);
|
||||
|
||||
number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z);
|
||||
number s = 2.0 * c.z - t;
|
||||
return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w);
|
||||
}
|
||||
|
||||
vec4 HSL(vec4 c)
|
||||
{
|
||||
number low = min(c.r, min(c.g, c.b));
|
||||
number high = max(c.r, max(c.g, c.b));
|
||||
number delta = high - low;
|
||||
number sum = high+low;
|
||||
|
||||
vec4 hsl = vec4(.0, .0, .5 * sum, c.a);
|
||||
if (delta == .0)
|
||||
return hsl;
|
||||
|
||||
hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum);
|
||||
|
||||
if (high == c.r)
|
||||
hsl.x = (c.g - c.b) / delta;
|
||||
else if (high == c.g)
|
||||
hsl.x = (c.b - c.r) / delta + 2.0;
|
||||
else
|
||||
hsl.x = (c.r - c.g) / delta + 4.0;
|
||||
|
||||
hsl.x = mod(hsl.x / 6., 1.);
|
||||
return hsl;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
number low = min(tex.r, min(tex.g, tex.b));
|
||||
number high = max(tex.r, max(tex.g, tex.b));
|
||||
number delta = high - low;
|
||||
|
||||
number saturation_fac = 1. - max(0., 0.05*(1.1-delta));
|
||||
|
||||
vec4 hsl = HSL(vec4(tex.r*saturation_fac, tex.g*saturation_fac, tex.b, tex.a));
|
||||
|
||||
float t = moire.y*2.221 + mod(time,1.);
|
||||
vec2 floored_uv = (floor((uv*texture_details.ba)))/texture_details.ba;
|
||||
vec2 uv_scaled_centered = (floored_uv - 0.5) * 50.;
|
||||
|
||||
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.;
|
||||
|
||||
float res = (.5 + .5* cos( (moire.x) * 2.612 + ( field + -.5 ) *3.14));
|
||||
hsl.x = length(field_part2);
|
||||
hsl.z = sin(hsl.z/2.5 - res/4. + sin(moire.y)/8. + 0.5)/1.4;
|
||||
|
||||
|
||||
tex.rgb = RGB(hsl).rgb;
|
||||
|
||||
if (tex[3] < 0.7)
|
||||
tex[3] = tex[3]/3.;
|
||||
return dissolve_mask(tex*colour, 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
|
||||
BIN
assets/sounds/corrupt_milestone.ogg
Normal file
BIN
assets/sounds/corrupt_milestone.ogg
Normal file
Binary file not shown.
BIN
assets/sounds/corrupt_tick.ogg
Normal file
BIN
assets/sounds/corrupt_tick.ogg
Normal file
Binary file not shown.
BIN
assets/sounds/corrupt_untick.ogg
Normal file
BIN
assets/sounds/corrupt_untick.ogg
Normal file
Binary file not shown.
BIN
assets/sounds/e_moire.ogg
Normal file
BIN
assets/sounds/e_moire.ogg
Normal file
Binary file not shown.
BIN
assets/sounds/music_attuned.ogg
Normal file
BIN
assets/sounds/music_attuned.ogg
Normal file
Binary file not shown.
BIN
assets/sounds/music_attuned_sinister.ogg
Normal file
BIN
assets/sounds/music_attuned_sinister.ogg
Normal file
Binary file not shown.
50
lovely.toml
50
lovely.toml
|
|
@ -1,7 +1,7 @@
|
|||
[manifest]
|
||||
version = "1.0.0"
|
||||
dump_lua = true
|
||||
priority = 2147483647
|
||||
priority = 114
|
||||
|
||||
[[patches]]
|
||||
[patches.pattern]
|
||||
|
|
@ -42,10 +42,13 @@ match_indent = true
|
|||
target = "functions/misc_functions.lua"
|
||||
pattern = "local AC = G.SETTINGS.ambient_control"
|
||||
position = "before"
|
||||
payload = '''if Jane and 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 / (to_big(base) ^ to_big(expo))):to_number() > 1
|
||||
Jane.sinister = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number() > 1
|
||||
G.escapey_sinister = Jane.sinister
|
||||
end'''
|
||||
match_indent = true
|
||||
|
||||
|
|
@ -55,10 +58,15 @@ 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
|
||||
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)
|
||||
SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, nil)
|
||||
if Cryptid 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)
|
||||
SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, nil)
|
||||
end
|
||||
else
|
||||
SMODS.calculate_main_scoring({cardarea = G.hand, full_hand = G.hand.cards, scoring_hand = G.hand.cards, scoring_name = text, poker_hands = poker_hands}, G.hand.cards)
|
||||
SMODS.calculate_main_scoring({cardarea = G.hand, full_hand = G.hand.cards, scoring_hand = G.hand.cards, scoring_name = text, poker_hands = poker_hands}, nil)
|
||||
end
|
||||
else'''
|
||||
match_indent = true
|
||||
|
|
@ -116,7 +124,31 @@ match_indent = true
|
|||
[[patches]]
|
||||
[patches.regex]
|
||||
target = "functions/state_events.lua"
|
||||
pattern = '''hand_chips\*mult'''
|
||||
pattern = '''hand_chips\*mult\)'''
|
||||
position = "at"
|
||||
payload = "Jane.get_chipmult_sum(hand_chips, mult)"
|
||||
payload = "Jane.get_chipmult_sum(hand_chips, mult))"
|
||||
match_indent = true
|
||||
|
||||
[[patches]]
|
||||
[patches.pattern]
|
||||
target = '=[SMODS Cryptid "items/spectral.lua"]'
|
||||
pattern = "local _first_dissolve = nil"
|
||||
position = "after"
|
||||
payload = 'deletable_jokers = next(SMODS.find_card("j_jane_saint")) and {} or deletable_jokers'
|
||||
match_indent = true
|
||||
|
||||
[[patches]]
|
||||
[patches.pattern]
|
||||
target = '=[SMODS Cryptid "items/exotic.lua"]'
|
||||
pattern = "local _first_dissolve = nil"
|
||||
position = "after"
|
||||
payload = 'deletable_jokers = next(SMODS.find_card("j_jane_saint")) and {} or deletable_jokers'
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1,16 +1,21 @@
|
|||
{
|
||||
"id": "jane",
|
||||
"name": "Almighty",
|
||||
"author": ["jenwalter666", "Emik"],
|
||||
"description": "Fork of Jen's almanac that focuses on only including the absolute best parts of the mod, and removing everything else.",
|
||||
"author": [
|
||||
"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.",
|
||||
"prefix": "jane",
|
||||
"main_file": "src/main.lua",
|
||||
"badge_colour": "3c3cff",
|
||||
"priority": 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999,
|
||||
"priority": 114,
|
||||
"dependencies": [
|
||||
"Steamodded (>=1.0.0~ALPHA-1304a)",
|
||||
"Bakery (>=0.1.26~*)"
|
||||
],
|
||||
"conflicts": ["Jen"],
|
||||
"version": "0.1.3"
|
||||
"conflicts": [
|
||||
"Jen"
|
||||
],
|
||||
"version": "1.5.19"
|
||||
}
|
||||
1
refs/CardSleeves
Symbolic link
1
refs/CardSleeves
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../CardSleeves/
|
||||
921
src/back.lua
921
src/back.lua
File diff suppressed because it is too large
Load diff
|
|
@ -4,7 +4,7 @@ SMODS.Atlas {
|
|||
frames = 21,
|
||||
key = "janeblinds",
|
||||
atlas_table = "ANIMATION_ATLAS",
|
||||
path = Jane.config.texture_pack .. "/bl_jane_blinds.png"
|
||||
path = Jane.config.texture_pack .. "/bl_jane_blinds.png",
|
||||
}
|
||||
|
||||
local final_operations = {
|
||||
|
|
@ -35,7 +35,7 @@ local function offset_operator(by)
|
|||
if type(inner) == "table" and
|
||||
type(inner.config) == "table" and
|
||||
(inner.config.text == final_operations[previous][1] or
|
||||
inner.config.text == final_operations[2][1]) and
|
||||
inner.config.text == final_operations[2][1]) and
|
||||
inner.config.text_drawable then
|
||||
if inner.config.text ~= txt then
|
||||
changed_text = true
|
||||
|
|
@ -53,8 +53,6 @@ local function offset_operator(by)
|
|||
if changed_text then
|
||||
play_sound("button", 1.1, 0.65)
|
||||
end
|
||||
|
||||
return true
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
@ -62,10 +60,10 @@ local function to_number(x)
|
|||
return type(x) == "table" and x:to_number() or x
|
||||
end
|
||||
|
||||
SMODS.Blind {
|
||||
SMODS.Blind {
|
||||
loc_txt = {
|
||||
name = "The Descending",
|
||||
text = {"Decrease Chip-Mult", "operator by 1 level"}
|
||||
text = {"Decrease Chip-Mult", "operator by 1 level"},
|
||||
},
|
||||
key = "descending",
|
||||
config = {},
|
||||
|
|
@ -77,8 +75,7 @@ SMODS.Blind {
|
|||
dollars = 6,
|
||||
defeat = function(_)
|
||||
if not Cryptid then
|
||||
G.GAME.operator = 2
|
||||
offset_operator(0)
|
||||
offset_operator(2 - Jane.get_operator())
|
||||
elseif not G.GAME.blind.disabled then
|
||||
offset_operator(1)
|
||||
end
|
||||
|
|
@ -101,10 +98,10 @@ SMODS.Blind {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Blind {
|
||||
SMODS.Blind {
|
||||
loc_txt = {
|
||||
name = "The Insignia",
|
||||
text = {"Hand must contain", "only one suit"}
|
||||
text = {"Hand must contain", "only one suit"},
|
||||
},
|
||||
key = "insignia",
|
||||
config = {},
|
||||
|
|
@ -132,22 +129,29 @@ SMODS.Blind {
|
|||
end,
|
||||
}
|
||||
|
||||
SMODS.Blind {
|
||||
SMODS.Blind {
|
||||
loc_txt = {
|
||||
name = "The Wee",
|
||||
text = {"Only 2s can be played"}
|
||||
text = {"Only 2s can be played"},
|
||||
},
|
||||
key = "wee",
|
||||
config = {},
|
||||
boss = {min = 1, max = 10, no_orb = true, hardcore = true},
|
||||
boss = {min = 2, max = 10, no_orb = true, hardcore = true},
|
||||
boss_colour = HEX("7F3F3F"),
|
||||
atlas = "janeblinds",
|
||||
pos = {x = 0, y = 3},
|
||||
vars = {},
|
||||
dollars = 2,
|
||||
debuff_hand = function(_, cards, _, _, _)
|
||||
disable = function(self)
|
||||
self.disabled = true
|
||||
end,
|
||||
debuff_hand = function(self, cards, _, _, _)
|
||||
if self.disabled then
|
||||
return false
|
||||
end
|
||||
|
||||
for _, v in ipairs(cards) do
|
||||
if v:norank() or v:get_id() ~= 2 then
|
||||
if (v:norank() or v:get_id() ~= 2) and (v.ability or {}).aikoyori_letters_stickers ~= "2" then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
|
@ -155,8 +159,10 @@ SMODS.Blind {
|
|||
get_loc_debuff_text = function(_)
|
||||
return "Hand must contain only 2s"
|
||||
end,
|
||||
recalc_debuff = function(_, card, _)
|
||||
return card:norank() or card:get_id() ~= 2
|
||||
recalc_debuff = function(self, card, _)
|
||||
return not self.disabled and
|
||||
(card:norank() or card:get_id() ~= 2) and
|
||||
(card.ability or {}).aikoyori_letters_stickers ~= "2"
|
||||
end,
|
||||
set_blind = function(self)
|
||||
if to_number(self.mult) == 0 then
|
||||
|
|
|
|||
336
src/booster.lua
336
src/booster.lua
|
|
@ -2,7 +2,7 @@ SMODS.Atlas {
|
|||
px = 71,
|
||||
py = 95,
|
||||
key = "janebooster",
|
||||
path = Jane.config.texture_pack .. "/p_jane_boosters.png"
|
||||
path = Jane.config.texture_pack .. "/p_jane_boosters.png",
|
||||
}
|
||||
|
||||
for i = 1, 2 do
|
||||
|
|
@ -14,7 +14,7 @@ for i = 1, 2 do
|
|||
"Choose {C:attention}#1#{} of up to",
|
||||
"{C:attention}#2# playing cards{} to",
|
||||
"add to your deck",
|
||||
}
|
||||
},
|
||||
},
|
||||
atlas = "janebooster",
|
||||
pos = {x = 6, y = i - 1},
|
||||
|
|
@ -24,14 +24,28 @@ for i = 1, 2 do
|
|||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.choose, card.ability.extra}}
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.STANDARD_PACK)
|
||||
create_card = function(_, _, _)
|
||||
local edition = poll_edition("standard_edition" .. G.GAME.round_resets.ante, 2, true)
|
||||
local seal = SMODS.poll_seal({mod = 10})
|
||||
|
||||
return {
|
||||
set = (pseudorandom(pseudoseed("stdset" .. G.GAME.round_resets.ante)) > 0.6) and "Enhanced" or "Base",
|
||||
edition = edition,
|
||||
seal = seal,
|
||||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
soulable = true,
|
||||
key_append = "sta",
|
||||
}
|
||||
end,
|
||||
create_UIBox = function(_)
|
||||
return create_UIBox_standard_pack()
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.STANDARD_PACK)
|
||||
end,
|
||||
particles = function(_)
|
||||
G.booster_pack_sparkles = Particles(1, 1, 0,0, {
|
||||
G.booster_pack_sparkles = Particles(1, 1, 0, 0, {
|
||||
timer = 0.015,
|
||||
scale = 0.3,
|
||||
initialize = true,
|
||||
|
|
@ -40,26 +54,12 @@ for i = 1, 2 do
|
|||
padding = -1,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.BLACK, G.C.RED},
|
||||
fill = true
|
||||
fill = true,
|
||||
})
|
||||
|
||||
G.booster_pack_sparkles.fade_alpha = 1
|
||||
G.booster_pack_sparkles:fade(1, 0)
|
||||
end,
|
||||
create_card = function(_, _, _)
|
||||
local edition = poll_edition("standard_edition"..G.GAME.round_resets.ante, 2, true)
|
||||
local seal = SMODS.poll_seal({mod = 10})
|
||||
|
||||
return {
|
||||
set = (pseudorandom(pseudoseed("stdset"..G.GAME.round_resets.ante)) > 0.6) and "Enhanced" or "Base",
|
||||
edition = edition,
|
||||
seal = seal,
|
||||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
soulable = true,
|
||||
key_append = "sta"
|
||||
}
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ for i = 1, 2 do
|
|||
"Choose {C:attention}#1#{} of up to",
|
||||
"{C:attention}#2# {C:tarot}Tarot{} cards to",
|
||||
"be used immediately",
|
||||
}
|
||||
},
|
||||
},
|
||||
atlas = "janebooster",
|
||||
pos = {x = 3 + i, y = 1},
|
||||
|
|
@ -83,28 +83,6 @@ for i = 1, 2 do
|
|||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.choose, card.ability.extra}}
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.TAROT_PACK)
|
||||
end,
|
||||
create_UIBox = function(_)
|
||||
return create_UIBox_arcana_pack()
|
||||
end,
|
||||
particles = function(_)
|
||||
G.booster_pack_sparkles = Particles(1, 1, 0,0, {
|
||||
timer = 0.015,
|
||||
scale = 0.2,
|
||||
initialize = true,
|
||||
lifespan = 1,
|
||||
speed = 1.1,
|
||||
padding = -1,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.WHITE, lighten(G.C.PURPLE, 0.4), lighten(G.C.PURPLE, 0.2), lighten(G.C.GOLD, 0.2)},
|
||||
fill = true
|
||||
})
|
||||
|
||||
G.booster_pack_sparkles.fade_alpha = 1
|
||||
G.booster_pack_sparkles:fade(1, 0)
|
||||
end,
|
||||
create_card = function(_, _, _)
|
||||
if G.GAME.used_vouchers.v_omen_globe and pseudorandom("omen_globe") > 0.8 then
|
||||
return {
|
||||
|
|
@ -123,7 +101,29 @@ for i = 1, 2 do
|
|||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
}
|
||||
end
|
||||
end,
|
||||
create_UIBox = function(_)
|
||||
return create_UIBox_arcana_pack()
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.TAROT_PACK)
|
||||
end,
|
||||
particles = function(_)
|
||||
G.booster_pack_sparkles = Particles(1, 1, 0, 0, {
|
||||
timer = 0.015,
|
||||
scale = 0.2,
|
||||
initialize = true,
|
||||
lifespan = 1,
|
||||
speed = 1.1,
|
||||
padding = -1,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.WHITE, lighten(G.C.PURPLE, 0.4), lighten(G.C.PURPLE, 0.2), lighten(G.C.GOLD, 0.2)},
|
||||
fill = true,
|
||||
})
|
||||
|
||||
G.booster_pack_sparkles.fade_alpha = 1
|
||||
G.booster_pack_sparkles:fade(1, 0)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ for i = 1, 2 do
|
|||
"Choose {C:attention}#1#{} of up to",
|
||||
"{C:attention}#2# {C:planet}Planet{} cards to",
|
||||
"be used immediately",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {extra = 2, choose = 1},
|
||||
pos = {x = 3 + i, y = 0},
|
||||
|
|
@ -146,36 +146,6 @@ for i = 1, 2 do
|
|||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.choose, card.ability.extra}}
|
||||
end,
|
||||
ease_background_colour = function(_) ease_background_colour_blind(G.STATES.PLANET_PACK) end,
|
||||
create_UIBox = function(_) return create_UIBox_celestial_pack() end,
|
||||
set_ability = function (_, card, _, delay_sprites)
|
||||
card.ability = card.ability or {}
|
||||
card.ability.set = "Booster"
|
||||
card.ability.name = "Mini Celestial Pack"
|
||||
end,
|
||||
particles = function(_)
|
||||
G.booster_pack_stars = Particles(1, 1, 0,0, {
|
||||
fill = true,
|
||||
scale = 0.1,
|
||||
speed = 0.1,
|
||||
timer = 0.07,
|
||||
padding = -4,
|
||||
lifespan = 15,
|
||||
initialize = true,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.WHITE, HEX("a7d6e0"), HEX("fddca0")},
|
||||
})
|
||||
|
||||
G.booster_pack_meteors = Particles(1, 1, 0,0, {
|
||||
speed = 4,
|
||||
timer = 2,
|
||||
fill = true,
|
||||
scale = 0.05,
|
||||
lifespan = 1.5,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.WHITE},
|
||||
})
|
||||
end,
|
||||
create_card = function(_, _, index)
|
||||
if not G.GAME.used_vouchers.v_telescope or index ~= 1 then
|
||||
return {
|
||||
|
|
@ -183,7 +153,7 @@ for i = 1, 2 do
|
|||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
soulable = true,
|
||||
key_append = "pl1"
|
||||
key_append = "pl1",
|
||||
}
|
||||
end
|
||||
|
||||
|
|
@ -212,7 +182,41 @@ for i = 1, 2 do
|
|||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
}
|
||||
end
|
||||
end,
|
||||
create_UIBox = function(_)
|
||||
return create_UIBox_celestial_pack()
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.PLANET_PACK)
|
||||
end,
|
||||
particles = function(_)
|
||||
G.booster_pack_stars = Particles(1, 1, 0, 0, {
|
||||
fill = true,
|
||||
scale = 0.1,
|
||||
speed = 0.1,
|
||||
timer = 0.07,
|
||||
padding = -4,
|
||||
lifespan = 15,
|
||||
initialize = true,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.WHITE, HEX("a7d6e0"), HEX("fddca0")},
|
||||
})
|
||||
|
||||
G.booster_pack_meteors = Particles(1, 1, 0, 0, {
|
||||
speed = 4,
|
||||
timer = 2,
|
||||
fill = true,
|
||||
scale = 0.05,
|
||||
lifespan = 1.5,
|
||||
attach = G.ROOM_ATTACH,
|
||||
colours = {G.C.WHITE},
|
||||
})
|
||||
end,
|
||||
set_ability = function(_, card, _, _)
|
||||
card.ability = card.ability or {}
|
||||
card.ability.set = "Booster"
|
||||
card.ability.name = "Mini Celestial Pack"
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
|
|
@ -226,7 +230,7 @@ for i = 1, 2 do
|
|||
"Choose {C:attention}#1#{} of up to",
|
||||
"{C:attention}#2# {C:spectral}Spectral{} cards to",
|
||||
"be used immediately",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {extra = 1, choose = 1},
|
||||
pos = {x = 3 + i, y = 2},
|
||||
|
|
@ -236,14 +240,23 @@ for i = 1, 2 do
|
|||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.choose, card.ability.extra}}
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.SPECTRAL_PACK)
|
||||
create_card = function(_, _, _)
|
||||
return {
|
||||
soulable = true,
|
||||
set = "Spectral",
|
||||
key_append = "spe",
|
||||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
}
|
||||
end,
|
||||
create_UIBox = function(_)
|
||||
return create_UIBox_spectral_pack()
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour_blind(G.STATES.SPECTRAL_PACK)
|
||||
end,
|
||||
particles = function(_)
|
||||
G.booster_pack_sparkles = Particles(1, 1, 0,0, {
|
||||
G.booster_pack_sparkles = Particles(1, 1, 0, 0, {
|
||||
scale = 0.1,
|
||||
fill = true,
|
||||
speed = 0.2,
|
||||
|
|
@ -258,14 +271,163 @@ for i = 1, 2 do
|
|||
G.booster_pack_sparkles.fade_alpha = 1
|
||||
G.booster_pack_sparkles:fade(1, 0)
|
||||
end,
|
||||
create_card = function(_, _, _)
|
||||
}
|
||||
end
|
||||
|
||||
if Cryptid then
|
||||
SMODS.Booster {
|
||||
atlas = "janebooster",
|
||||
key = "minicode",
|
||||
loc_txt = {
|
||||
name = "Mini Code Pack",
|
||||
text = {
|
||||
"Choose {C:attention}#1#{} of up to",
|
||||
"{C:attention}#2# {C:green}Code{} cards to",
|
||||
"be used immediately",
|
||||
},
|
||||
},
|
||||
pos = {x = 6, y = 2},
|
||||
config = {extra = 2, choose = 1},
|
||||
cost = 2,
|
||||
weight = 0.24,
|
||||
create_card = function(_, _)
|
||||
return create_card("Code", G.pack_cards, nil, nil, true, true, nil, "cry_program_3")
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_colour(G.C.DYN_UI.MAIN, G.C.SET.Code)
|
||||
ease_background_colour({new_colour = G.C.SET.Code, special_colour = G.C.BLACK, contrast = 2})
|
||||
end,
|
||||
loc_vars = function(self, _, card)
|
||||
return {
|
||||
soulable = true,
|
||||
set = "Spectral",
|
||||
key_append = "spe",
|
||||
area = G.pack_cards,
|
||||
skip_materialize = true,
|
||||
vars = {
|
||||
card and card.ability.choose or self.config.choose,
|
||||
card and card.ability.extra or self.config.extra,
|
||||
},
|
||||
}
|
||||
end,
|
||||
cry_digital_hallucinations = {
|
||||
colour = HEX("14b341"),
|
||||
loc_key = "cry_plus_code",
|
||||
create = function()
|
||||
local ccard = create_card("Code", G.consumeables, nil, nil, nil, nil, nil, "diha")
|
||||
ccard:set_edition({negative = true}, true)
|
||||
ccard:add_to_deck()
|
||||
G.consumeables:emplace(ccard)
|
||||
end,
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
for i = 1, 2 do
|
||||
SMODS.Booster {
|
||||
key = "minitoken" .. i,
|
||||
atlas = "janebooster",
|
||||
loc_txt = {
|
||||
name = "Mini Token Pack",
|
||||
text = {
|
||||
"Choose {C:attention}#1#{} of up to",
|
||||
"{C:attention}#2# Token {}cards to",
|
||||
"be used immediately",
|
||||
},
|
||||
},
|
||||
pos = {x = i - 1, y = 5},
|
||||
config = {extra = 2, choose = 1},
|
||||
cost = 2,
|
||||
weight = 0.2,
|
||||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.choose, card.ability.extra}}
|
||||
end,
|
||||
create_card = function(_, _, _)
|
||||
return create_card("jane_tokens", G.pack_cards, nil, nil, true, true, nil, "jane_tokens" .. i)
|
||||
end,
|
||||
create_UIBox = function(_)
|
||||
local size = SMODS.OPENED_BOOSTER.ability.extra
|
||||
|
||||
G.pack_cards = CardArea(
|
||||
G.ROOM.T.x + 9 + G.hand.T.x, G.hand.T.y,
|
||||
math.max(1, math.min(size, 5)) * G.CARD_W * 1.1,
|
||||
1.05 * G.CARD_H,
|
||||
{card_limit = size, highlight_limit = 1, type = "consumeable"}
|
||||
)
|
||||
|
||||
local t = {
|
||||
n = G.UIT.ROOT,
|
||||
config = {align = "tm", r = 0.15, colour = G.C.CLEAR, padding = 0.15},
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = {align = "cl", colour = G.C.CLEAR, r = 0.15, padding = 0.1, minh = 2, shadow = true},
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = {align = "cm"},
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = {align = "cm", padding = 0.1},
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = {align = "cm", r = 0.2, colour = G.C.CLEAR, shadow = true},
|
||||
nodes = {
|
||||
{n = G.UIT.O, config = {object = G.pack_cards}}},
|
||||
}},
|
||||
}},
|
||||
},
|
||||
{n = G.UIT.R, config = {align = "cm"}, nodes = {}},
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = {align = "tm"},
|
||||
nodes = {
|
||||
{n = G.UIT.C, config = {align = "tm", padding = 0.05, minw = 2.4}, nodes = {}},
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = {align = "tm", padding = 0.05},
|
||||
nodes = {
|
||||
UIBox_dyn_container({
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = {align = "cm", padding = 0.05, minw = 4},
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = {align = "bm", padding = 0.05},
|
||||
nodes = {
|
||||
{n = G.UIT.O, config = {object = DynaText({string = {"Token Pack"}, colours = {G.C.WHITE}, shadow = true, rotate = true, bump = true, spacing = 2, scale = 0.7, maxw = 4, pop_in = 0.5})}}},
|
||||
},
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = {align = "bm", padding = 0.05},
|
||||
nodes = {
|
||||
{n = G.UIT.O, config = {object = DynaText({string = {localize("k_choose") .. " "}, colours = {G.C.WHITE}, shadow = true, rotate = true, bump = true, spacing = 2, scale = 0.5, pop_in = 0.7})}},
|
||||
{n = G.UIT.O, config = {object = DynaText({string = {{ref_table = G.GAME, ref_value = "pack_choices"}}, colours = {G.C.WHITE}, shadow = true, rotate = true, bump = true, spacing = 2, scale = 0.5, pop_in = 0.7})}}},
|
||||
}},
|
||||
},
|
||||
})},
|
||||
},
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = {align = "tm", padding = 0.05, minw = 2.4},
|
||||
nodes = {
|
||||
{n = G.UIT.R, config = {minh = 0.2}, nodes = {}},
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = {align = "tm", padding = 0.2, minh = 1.2, minw = 1.8, r = 0.15, colour = G.C.GREY, one_press = true, button = "skip_booster", hover = true, shadow = true, func = "can_skip_booster"},
|
||||
nodes = {
|
||||
{n = G.UIT.T, config = {text = localize("b_skip"), scale = 0.5, colour = G.C.WHITE, shadow = true, focus_args = {button = "y", orientation = "bm"}, func = "set_button_pip"}}},
|
||||
}},
|
||||
}},
|
||||
}},
|
||||
}},
|
||||
}
|
||||
|
||||
return t
|
||||
end,
|
||||
ease_background_colour = function(_)
|
||||
ease_background_colour {new_colour = HEX(i == 1 and "F0C197" or "FD5F55"), special_colour = HEX("000000"), contrast = 5}
|
||||
end,
|
||||
in_pool = function(_, _)
|
||||
return G.GAME.used_vouchers.v_jane_token_voucher
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
|
|
|||
78
src/challenge.lua
Normal file
78
src/challenge.lua
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
local is_rain_world_joker = {}
|
||||
|
||||
for _, v in pairs(Jane.rain_world_jokers) do
|
||||
is_rain_world_joker[v] = true
|
||||
end
|
||||
|
||||
SMODS.Challenge {
|
||||
key = "downpour",
|
||||
loc_txt = {
|
||||
name = "Downpour",
|
||||
},
|
||||
rules = {custom = {
|
||||
{id = "jane_downpour1"},
|
||||
{id = "jane_downpour2"},
|
||||
{id = "jane_downpour3"},
|
||||
{id = "jane_downpour4"},
|
||||
}},
|
||||
apply = function(_)
|
||||
G.GAME.win_ante = 16
|
||||
|
||||
for _, v in ipairs(Jane.rain_world_jokers) do
|
||||
Jane.q(function()
|
||||
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, v, "karma_deck_next")
|
||||
card:add_to_deck()
|
||||
card:start_materialize()
|
||||
G.jokers:emplace(card)
|
||||
play_sound("timpani")
|
||||
end, 0.2)
|
||||
end
|
||||
end,
|
||||
calculate = function(_, context)
|
||||
local function l()
|
||||
if G.STAGE == G.STAGES.RUN then
|
||||
G.STATE = G.STATES.GAME_OVER
|
||||
G.STATE_COMPLETE = false
|
||||
end
|
||||
end
|
||||
|
||||
if not Jane.is_end_of_ante(context) then
|
||||
return
|
||||
end
|
||||
|
||||
local destructible_jokers = {}
|
||||
|
||||
for _, v in pairs(G.jokers.cards) do
|
||||
if is_rain_world_joker[v.config.center.key] and not ((v.ability or {}).eternal or (v.ability or {}).cry_absolute) then
|
||||
destructible_jokers[#destructible_jokers + 1] = v
|
||||
end
|
||||
end
|
||||
|
||||
if not next(destructible_jokers) then
|
||||
return l()
|
||||
end
|
||||
|
||||
local chosen = pseudorandom_element(destructible_jokers, pseudoseed("karma_deck"))
|
||||
|
||||
if chosen then
|
||||
chosen.getting_sliced = true
|
||||
chosen:start_dissolve()
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
G.localization.misc.v_text["ch_c_jane_downpour1"] = {
|
||||
"Start with all {C:legendary}Rain World Jokers",
|
||||
}
|
||||
|
||||
G.localization.misc.v_text["ch_c_jane_downpour2"] = {
|
||||
"Destroy a random {C:legendary}Rain World Joker {}when",
|
||||
}
|
||||
|
||||
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",
|
||||
}
|
||||
167
src/edition.lua
167
src/edition.lua
|
|
@ -1,24 +1,25 @@
|
|||
SMODS.Sound({key = "e_jumbo", path = "e_jumbo.ogg"})
|
||||
SMODS.Shader({key = "moire", path = "moire.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_polygloss", path = "e_polygloss.ogg"})
|
||||
|
||||
local function resize(card, mod, force_save)
|
||||
if force_save or not card.origsize then
|
||||
card.origsize = {w = card.T.w, h = card.T.h}
|
||||
local function allow_moire()
|
||||
if Cryptid then
|
||||
return true
|
||||
end
|
||||
|
||||
card:hard_set_T(card.T.x, card.T.y, card.T.w * mod, card.T.h * mod)
|
||||
remove_all(card.children)
|
||||
card.children = {}
|
||||
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
|
||||
((G.shop_jokers and card.area == G.shop_jokers) or
|
||||
(G.shop_booster and card.area == G.shop_booster) or
|
||||
(G.shop_vouchers and card.area == G.shop_vouchers)) then
|
||||
create_shop_card_ui(card)
|
||||
for _, v in pairs(SMODS.find_card("j_jane_saint")) do
|
||||
if v.ability.extra.is_attuned then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
local function get_weight(self)
|
||||
return G.GAME.edition_rate * self.weight * (allow_moire() and 1 or 0)
|
||||
end
|
||||
|
||||
SMODS.Edition({
|
||||
|
|
@ -26,54 +27,70 @@ SMODS.Edition({
|
|||
loc_txt = {
|
||||
name = "Polygloss",
|
||||
label = "Polygloss",
|
||||
text = {
|
||||
"{C:chips}+#1#{}, {X:chips,C:white}x#2#{} & {X:chips,C:dark_edition}^#3#{} Chips",
|
||||
"{C:mult}+#4#{}, {X:mult,C:white}x#5#{} & {X:mult,C:dark_edition}^#6#{} Mult",
|
||||
"Generates {C:money}+$#7#",
|
||||
}
|
||||
text = Cryptid 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",
|
||||
} or {
|
||||
"{C:chips}+#1#{} Chips",
|
||||
"{C:mult}+#2#{} & {X:mult,C:white}X#3#{} Mult",
|
||||
"{C:money}$#4# {}when scored",
|
||||
},
|
||||
},
|
||||
config = {chips = 1, mult = 1, x_chips = 1.1, x_mult = 1.1, e_chips = 1.01, e_mult = 1.01, p_dollars = 1},
|
||||
sound = {
|
||||
sound = "jane_e_polygloss",
|
||||
per = 1.2,
|
||||
vol = 0.4
|
||||
config = {
|
||||
mult = 2,
|
||||
chips = 12,
|
||||
x_mult = 1.2,
|
||||
p_dollars = 1,
|
||||
e_mult = Cryptid and 1.02 or nil,
|
||||
},
|
||||
sound = {sound = "jane_e_polygloss", per = 1.2, vol = 0.4},
|
||||
weight = 8,
|
||||
extra_cost = 2,
|
||||
extra_cost = 4,
|
||||
in_shop = true,
|
||||
shader = "polygloss",
|
||||
apply_to_float = false,
|
||||
loc_vars = function(self)
|
||||
return {vars = {
|
||||
self.config.chips,
|
||||
self.config.x_chips,
|
||||
self.config.e_chips,
|
||||
self.config.mult,
|
||||
self.config.x_mult,
|
||||
self.config.e_mult,
|
||||
self.config.p_dollars
|
||||
}}
|
||||
loc_vars = function(self, _, _)
|
||||
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}
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
if context.pre_joker then
|
||||
return {
|
||||
chips = card.edition.chips,
|
||||
mult = card.edition.mult,
|
||||
chips = card.edition.chips,
|
||||
}
|
||||
elseif context.post_joker then
|
||||
return {
|
||||
x_chips = card.edition.x_chips,
|
||||
e_chips = card.edition.e_chips,
|
||||
x_mult = card.edition.x_mult,
|
||||
e_mult = card.edition.e_mult,
|
||||
x_mult = card.edition.x_mult,
|
||||
p_dollars = card.edition.p_dollars,
|
||||
}
|
||||
elseif context.main_scoring and context.cardarea == G.play then
|
||||
return card.edition
|
||||
return {
|
||||
mult = card.edition.mult,
|
||||
chips = card.edition.chips,
|
||||
e_mult = card.edition.e_mult,
|
||||
x_mult = card.edition.x_mult,
|
||||
p_dollars = card.edition.p_dollars,
|
||||
}
|
||||
end
|
||||
end
|
||||
end,
|
||||
get_weight = get_weight,
|
||||
})
|
||||
|
||||
local orig_draw_shader = Sprite.draw_shader
|
||||
|
||||
function Sprite:draw_shader(_shader, ...)
|
||||
if _shader ~= "jane_jumbo" then
|
||||
return orig_draw_shader(self, _shader, ...)
|
||||
end
|
||||
end
|
||||
|
||||
local jumbo_modifier = Cryptid and 100 or 2
|
||||
|
||||
SMODS.Edition({
|
||||
|
|
@ -85,18 +102,13 @@ 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.7}Whoa, it's huge!!{}",
|
||||
},
|
||||
},
|
||||
on_apply = function(card)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
blocking = false,
|
||||
blockable = false,
|
||||
func = function()
|
||||
resize(card, Jane.config.wee_sizemod)
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
Jane.resize(card, Jane.config.wee_sizemod)
|
||||
end, nil, nil, nil, false, false)
|
||||
|
||||
local obj = card:gc()
|
||||
|
||||
|
|
@ -115,14 +127,9 @@ SMODS.Edition({
|
|||
end
|
||||
end,
|
||||
on_remove = function(card)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
blocking = false,
|
||||
blockable = false,
|
||||
func = function()
|
||||
resize(card, 1 / Jane.config.wee_sizemod)
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
Jane.resize(card, 1 / Jane.config.wee_sizemod)
|
||||
end, nil, nil, nil, false, false)
|
||||
|
||||
local was_added = card.added_to_deck
|
||||
|
||||
|
|
@ -136,18 +143,42 @@ SMODS.Edition({
|
|||
card:add_to_deck()
|
||||
end
|
||||
end,
|
||||
config = {twos_scored = 0},
|
||||
sound = {
|
||||
sound = "jane_e_jumbo",
|
||||
per = 1,
|
||||
vol = 0.5
|
||||
},
|
||||
weight = 0.8,
|
||||
sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5},
|
||||
weight = 4,
|
||||
extra_cost = 5,
|
||||
in_shop = true,
|
||||
shader = false,
|
||||
extra_cost = 12,
|
||||
apply_to_float = false,
|
||||
get_weight = get_weight,
|
||||
})
|
||||
|
||||
SMODS.Edition({
|
||||
key = "moire",
|
||||
loc_txt = {
|
||||
name = "Moire",
|
||||
label = "Moire",
|
||||
text = {
|
||||
"{X:chips,C:dark_edition}^#1#{C:chips} Chips",
|
||||
"{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},
|
||||
sound = {sound = "jane_e_moire", per = 1, vol = 0.7},
|
||||
weight = 2,
|
||||
extra_cost = 6,
|
||||
in_shop = true,
|
||||
shader = "moire",
|
||||
in_pool = allow_moire,
|
||||
apply_to_float = false,
|
||||
get_weight = function(self)
|
||||
return G.GAME.edition_rate * self.weight
|
||||
end,
|
||||
loc_vars = function(self, _, _)
|
||||
return {vars = {self.config.e_chips, self.config.e_mult}}
|
||||
end,
|
||||
calculate = function(self, _, context)
|
||||
if context.post_joker or context.main_scoring and context.cardarea == G.play then
|
||||
return {e_chips = self.config.e_chips, e_mult = self.config.e_mult}
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
|
|
|||
512
src/joker.lua
512
src/joker.lua
|
|
@ -11,6 +11,10 @@ for i = 1, 6 do
|
|||
SMODS.Sound({key = "grand" .. i, path = "grand_dad" .. i .. ".ogg"})
|
||||
end
|
||||
|
||||
SMODS.Sound({key = "corrupt_milestone", path = "corrupt_milestone.ogg"})
|
||||
SMODS.Sound({key = "corrupt_untick", path = "corrupt_untick.ogg"})
|
||||
SMODS.Sound({key = "corrupt_tick", path = "corrupt_tick.ogg"})
|
||||
|
||||
local exotic = Cryptid and "cry_exotic" or 4
|
||||
|
||||
local food = {
|
||||
|
|
@ -42,7 +46,7 @@ local granddad_palette = {
|
|||
HEX("155fd9"),
|
||||
HEX("ff8170"),
|
||||
HEX("ffffff"),
|
||||
HEX("6c0700")
|
||||
HEX("6c0700"),
|
||||
}
|
||||
|
||||
local function food_jokers_count()
|
||||
|
|
@ -66,7 +70,6 @@ local function grand_dad(card)
|
|||
|
||||
Jane.q(function()
|
||||
card:juice_up(0.5, 0.5)
|
||||
return true
|
||||
end)
|
||||
|
||||
local rnd = math.random(6)
|
||||
|
|
@ -124,6 +127,8 @@ local maxie_quotes = {
|
|||
},
|
||||
}
|
||||
|
||||
local maxie_limit = 25
|
||||
|
||||
SMODS.Joker {
|
||||
key = "maxie",
|
||||
atlas = "janemaxie",
|
||||
|
|
@ -132,7 +137,7 @@ SMODS.Joker {
|
|||
text = {
|
||||
"{C:attention}+#1# {}booster pack slot#2#",
|
||||
"{C:inactive,s:0.75,E:1}#3#{C:red,s:1.5,E:1}#4#",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {extra = {choices = Cryptid and 2 or 1}},
|
||||
pos = {x = 0, y = 0},
|
||||
|
|
@ -141,65 +146,153 @@ SMODS.Joker {
|
|||
cost = 6,
|
||||
rarity = 2,
|
||||
loc_vars = function(_, _, card)
|
||||
return {vars = {
|
||||
card.ability.extra.choices,
|
||||
card.ability.extra.choices == 1 and "" or "s",
|
||||
Jane.sinister and "" or pseudorandom_element(maxie_quotes.normal, pseudoseed("MaxieQuotes")),
|
||||
Jane.sinister and pseudorandom_element(maxie_quotes.scared, pseudoseed("MaxieQuotes")) or "",
|
||||
}}
|
||||
return {
|
||||
vars = {
|
||||
card.ability.extra.choices,
|
||||
card.ability.extra.choices == 1 and "" or "s",
|
||||
Jane.sinister and "" or pseudorandom_element(maxie_quotes.normal, pseudoseed("MaxieQuotes")),
|
||||
Jane.sinister and pseudorandom_element(maxie_quotes.scared, pseudoseed("MaxieQuotes")) or "",
|
||||
},
|
||||
}
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
local min = math.min(card.ability.extra.choices, maxie_limit)
|
||||
card.ability.extra.choices = min
|
||||
|
||||
if context.starting_shop then
|
||||
for _ = 1, card.ability.extra.choices do
|
||||
for _ = 1, min do
|
||||
SMODS.add_booster_to_shop()
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
function Jane.update_honey()
|
||||
if not G.GAME then
|
||||
return
|
||||
end
|
||||
|
||||
local honey = SMODS.find_card("j_jane_honey")
|
||||
local mergeable = {}
|
||||
local max = 1
|
||||
|
||||
for _, v in pairs(honey) do
|
||||
local level = tonumber(v.ability.extra.level) or 1
|
||||
max = math.max(max, level)
|
||||
|
||||
if not mergeable[level] then
|
||||
mergeable[level] = v
|
||||
elseif level == 1 then
|
||||
mergeable[0] = v
|
||||
end
|
||||
end
|
||||
|
||||
for i = math.min(max, #Jane.rarity_ids - 2), 1, -1 do
|
||||
if not mergeable[i] then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local skip = true
|
||||
|
||||
for j = i - 1, i == 1 and 0 or 1, -1 do
|
||||
if not mergeable[j] then
|
||||
break
|
||||
end
|
||||
|
||||
skip = j > 1
|
||||
end
|
||||
|
||||
if skip then
|
||||
goto continue
|
||||
end
|
||||
|
||||
for j = i - 1, i == 1 and 0 or 1, -1 do
|
||||
mergeable[i].sell_cost = mergeable[i].sell_cost + mergeable[j].sell_cost
|
||||
mergeable[j].ability.extra.level = "-1"
|
||||
mergeable[j]:start_dissolve()
|
||||
end
|
||||
|
||||
mergeable[i].ability.extra.level = tostring(tonumber(mergeable[i].ability.extra.level) + 1)
|
||||
play_sound("jane_corrupt_milestone", 0.9 ^ (tonumber(mergeable[i].ability.extra.level) - 2))
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
SMODS.Joker {
|
||||
key = "honey",
|
||||
atlas = "janehoney",
|
||||
loc_txt = {
|
||||
name = "Honey{C:dark_edition}#1#",
|
||||
text = {
|
||||
"{C:attention}Common#2#{}#3#",
|
||||
"{C:attention}#2#{}#3#",
|
||||
"#4#cannot appear",
|
||||
"#5#{C:attention}#6#",
|
||||
"{C:dark_edition}#7#{}#8#{C:inactive,s:0.75,E:1}#9#",
|
||||
"{C:inactive,s:0.75,E:1}#10#{C:red,s:1.5,E:1}#11#",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {extra = {is_corrupted = false}},
|
||||
config = {extra = {level = "1"}}, -- Strings do not get mutated by other mods
|
||||
pos = {x = 0, y = 0},
|
||||
sinis = {x = 2, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
eternal_compat = false,
|
||||
cost = 8,
|
||||
rarity = 3,
|
||||
loc_vars = function(_, _, card)
|
||||
local level = tonumber(card.ability.extra.level)
|
||||
|
||||
local function level_name(i)
|
||||
local acc = ""
|
||||
local prefixes = {"super", "hyper", "ultra"}
|
||||
|
||||
while i > 0 do
|
||||
acc = prefixes[((i - 1) % 3) + 1] .. acc
|
||||
i = math.floor(i / 3)
|
||||
end
|
||||
|
||||
return #acc == 0 and "Corrupted" or acc:gsub("^%l", string.upper) .. "corrupted"
|
||||
end
|
||||
|
||||
local is_corrupted = level > 1
|
||||
local exclusions = is_corrupted and "" or Jane.rarity_names[level]
|
||||
local separator = level == 2 and " " or (is_corrupted and ", " or "")
|
||||
|
||||
if is_corrupted then
|
||||
for i = 1, level do
|
||||
exclusions = exclusions .. separator .. (i == level and "and " or "") .. Jane.rarity_names[i]
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
vars = {
|
||||
is_corrupted and " (" .. level_name(level - 2) .. ")" or "",
|
||||
(exclusions or ""):sub(#separator),
|
||||
is_corrupted and "" or " jokers",
|
||||
is_corrupted and "jokers " or "",
|
||||
is_corrupted and (level >= #Jane.rarity_names - 1 and "Cannot be upgraded." or "") or "Getting another ",
|
||||
is_corrupted and "" or "Honey",
|
||||
is_corrupted and "" or "corrupts ",
|
||||
is_corrupted and "" or "this Joker",
|
||||
Jane.sinister and "" or (is_corrupted and "*Her eyes are looking around," or ""),
|
||||
Jane.sinister and "" or
|
||||
(is_corrupted and "as if she wants to say something...*" or "Buzzzzz! I'll do my best!"),
|
||||
Jane.sinister and (is_corrupted and "..." or "S-STOP THAT!! YOU'RE FREAKING ME OOOUT!!!") or "",
|
||||
},
|
||||
}
|
||||
end,
|
||||
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 = extra.is_corrupted and 1 or 0
|
||||
local y = tonumber(extra.level) > 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
|
||||
end,
|
||||
loc_vars = function(_, _, card)
|
||||
local is_corrupted = card.ability.extra.is_corrupted
|
||||
|
||||
return {vars = {
|
||||
is_corrupted and " (Corrupted)" or "",
|
||||
is_corrupted and " and Uncommon" or "",
|
||||
is_corrupted and "" or " jokers",
|
||||
is_corrupted and "jokers " or "",
|
||||
is_corrupted and "" or "Getting another ",
|
||||
is_corrupted and "" or "Honey",
|
||||
is_corrupted and "" or "corrupts ",
|
||||
is_corrupted and "" or "this Joker",
|
||||
Jane.sinister and "" or (is_corrupted and "*Her eyes are looking around," or ""),
|
||||
Jane.sinister and "" or (is_corrupted and "as if she wants to say something...*" or "Buzzzzz! I'll do my best!"),
|
||||
Jane.sinister and (is_corrupted and "..." or "S-STOP THAT!! YOU'RE FREAKING ME OOOUT!!!") or "",
|
||||
}}
|
||||
local level = tonumber(card.ability.extra.level)
|
||||
|
||||
if not Jane.sinister and level > 2 then
|
||||
card:juice_up(0, math.random() * (level - 2) / #Jane.rarity_ids)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
|
|
@ -210,14 +303,21 @@ end
|
|||
local orig_rarity = SMODS.poll_rarity
|
||||
|
||||
function SMODS.poll_rarity(_pool_key, _rand_key)
|
||||
local is_corrupted
|
||||
local max = 0
|
||||
|
||||
for _, v in pairs(SMODS.find_card("j_jane_honey")) do
|
||||
is_corrupted = is_corrupted or v.ability.extra.is_corrupted
|
||||
max = v.debuff and max or math.max(max, v.ability.extra.level)
|
||||
end
|
||||
|
||||
local rarity = orig_rarity(_pool_key, _rand_key)
|
||||
return (is_corrupted and (rarity == 1 or rarity == 2)) and 3 or ((is_corrupted ~= nil and rarity == 1) and 2 or rarity)
|
||||
|
||||
for i = 1, max do
|
||||
if rarity == Jane.rarity_ids[i] then
|
||||
return Jane.rarity_ids[max + 1] or Jane.rarity_ids[#Jane.rarity_ids]
|
||||
end
|
||||
end
|
||||
|
||||
return rarity
|
||||
end
|
||||
|
||||
local oxy_quotes = {
|
||||
|
|
@ -231,53 +331,89 @@ local oxy_quotes = {
|
|||
"...H-how are you doing t-that...?",
|
||||
"This is... unsettling...",
|
||||
"S-... So much power...",
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
function Jane.oxy(card, removed)
|
||||
local extra = card.ability.extra or {}
|
||||
local destroyed_steel = 0
|
||||
|
||||
for _, v in pairs(removed or {}) do
|
||||
if (v.ability or {}).name == "Steel Card" then
|
||||
destroyed_steel = destroyed_steel + 1
|
||||
end
|
||||
end
|
||||
|
||||
if destroyed_steel > 0 then
|
||||
extra.progress = extra.progress + destroyed_steel
|
||||
play_sound("jane_corrupt_tick")
|
||||
|
||||
card_eval_status_text(
|
||||
card,
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{
|
||||
message = (extra.is_corrupted and "+" or "-") .. destroyed_steel,
|
||||
colour = extra.is_corrupted and G.C.PURPLE or G.C.GREY,
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
local steel = 2
|
||||
|
||||
SMODS.Joker {
|
||||
key = "oxy",
|
||||
atlas = "janeoxy",
|
||||
loc_txt = {
|
||||
name = "Oxy{C:dark_edition}#1#",
|
||||
text = {
|
||||
"{C:attention}Scored steel {}cards give",
|
||||
"{X:mult,C:white}x#2#{} {C:mult}Mult {}and {X:chips,C:white}x#2#{} {C:chips}Chips",
|
||||
"{C:attention}Scored steel {}cards",
|
||||
"give {X:mult,C:white}X#2#{} {C:mult}Mult",
|
||||
"{C:dark_edition,E:1}#3#{}#4#{C:red}#5#{C:attention}#6#",
|
||||
"{C:dark_edition,E:1}#7#{}#8#",
|
||||
"#9#{C:dark_edition,E:1}#10#",
|
||||
"{C:inactive,s:0.75,E:1}#11#{C:red,s:1.5,E:1}#12#",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {extra = {corrupted_steel = 2.5, is_corrupted = false, milestone = 3, progress = 0, steel = 1.5}},
|
||||
config = {extra = {corrupted_steel = 6, is_corrupted = false, milestone = 3, progress = 0}},
|
||||
pos = {x = 0, y = 0},
|
||||
sinis = {x = 2, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
blueprint_compat = true,
|
||||
cost = Cryptid and 8 or 20,
|
||||
rarity = Cryptid and 3 or 4,
|
||||
loc_vars = function(_, _, card)
|
||||
loc_vars = function(_, info_queue, card)
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.m_steel
|
||||
local ability = card.ability.extra or {}
|
||||
local milestone = ability.milestone
|
||||
local progress = ability.progress
|
||||
local is_corrupted = ability.is_corrupted
|
||||
local amount = is_corrupted and ability.corrupted_steel or ability.steel
|
||||
local amount = is_corrupted and ability.corrupted_steel or steel
|
||||
local effective = is_corrupted and progress or milestone - progress
|
||||
local plural = effective == 1 and "" or "s"
|
||||
|
||||
return {vars = {
|
||||
is_corrupted and " (Corrupted)" or "",
|
||||
amount,
|
||||
is_corrupted and "Purifies " or "",
|
||||
is_corrupted and "in " or "",
|
||||
is_corrupted and "" or "Destroying ",
|
||||
effective .. (is_corrupted and " round" or " steel card") .. plural,
|
||||
is_corrupted and "" or "corrupts ",
|
||||
is_corrupted and "Destroying steel cards" or "this Joker",
|
||||
is_corrupted and "prolongs the " or "",
|
||||
is_corrupted and "corruption" or "",
|
||||
Jane.sinister and "" or (is_corrupted and pseudorandom_element(oxy_quotes.normal, pseudoseed("OxyQuotes")) or "We all cut close..."),
|
||||
Jane.sinister and (is_corrupted and pseudorandom_element(oxy_quotes.scared, pseudoseed("OxyQuotes")) or "WHAT ARE YOU DOING DOWN THERE?!?") or "",
|
||||
}}
|
||||
return {
|
||||
vars = {
|
||||
is_corrupted and " (Corrupted)" or "",
|
||||
amount,
|
||||
is_corrupted and "Purifies " or "",
|
||||
is_corrupted and "in " or "",
|
||||
is_corrupted and "" or "Destroying ",
|
||||
effective .. (is_corrupted and " round" or " steel card") .. plural,
|
||||
is_corrupted and "" or "corrupts ",
|
||||
is_corrupted and "Destroying steel cards" or "this Joker",
|
||||
is_corrupted and "prolongs the " or "",
|
||||
is_corrupted and "corruption" or "",
|
||||
Jane.sinister and "" or
|
||||
(is_corrupted and pseudorandom_element(oxy_quotes.normal, pseudoseed("OxyQuotes")) or "We all cut close..."),
|
||||
Jane.sinister and
|
||||
(is_corrupted and pseudorandom_element(oxy_quotes.scared, pseudoseed("OxyQuotes")) or "WHAT ARE YOU DOING DOWN THERE?!?") or
|
||||
"",
|
||||
},
|
||||
}
|
||||
end,
|
||||
update = function(_, card, _)
|
||||
if card.added_to_deck and card.children.center and card.children.floating_sprite then
|
||||
|
|
@ -289,35 +425,14 @@ SMODS.Joker {
|
|||
end,
|
||||
calculate = function(_, card, context)
|
||||
local extra = card.ability.extra or {}
|
||||
local destroyed_steel = 0
|
||||
|
||||
for _, v in pairs(context.removed or {}) do
|
||||
if (v.ability or {}).name == "Steel Card" then
|
||||
destroyed_steel = destroyed_steel + 1
|
||||
end
|
||||
end
|
||||
|
||||
if destroyed_steel > 0 then
|
||||
extra.progress = extra.progress + destroyed_steel
|
||||
|
||||
card_eval_status_text(
|
||||
card,
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{
|
||||
message = (extra.is_corrupted and "+" or "-") .. destroyed_steel,
|
||||
colour = extra.is_corrupted and G.C.PURPLE or G.C.GREY
|
||||
}
|
||||
)
|
||||
end
|
||||
Jane.oxy(card, context.removed)
|
||||
|
||||
if context.end_of_round and
|
||||
extra.progress > 0 and not
|
||||
context.individual and not
|
||||
context.repetition and not
|
||||
context.retrigger_joker then
|
||||
play_sound("jane_corrupt_untick")
|
||||
extra.progress = extra.progress - 1
|
||||
|
||||
card_eval_status_text(
|
||||
|
|
@ -328,143 +443,46 @@ SMODS.Joker {
|
|||
nil,
|
||||
{
|
||||
message = extra.is_corrupted and "-1" or "+1",
|
||||
colour = extra.is_corrupted and G.C.PURPLE or G.C.GREY
|
||||
colour = extra.is_corrupted and G.C.PURPLE or G.C.GREY,
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
if not extra.is_corrupting and
|
||||
((extra.progress >= extra.milestone and not extra.is_corrupted) or
|
||||
(extra.progress <= 0 and extra.is_corrupted)) then
|
||||
(extra.progress <= 0 and extra.is_corrupted)) then
|
||||
extra.is_corrupting = true
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
delay = 0.1,
|
||||
func = function()
|
||||
card:flip()
|
||||
play_sound("card1")
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
card:flip()
|
||||
play_sound("card1")
|
||||
end, 0.1)
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
delay = 1,
|
||||
func = function()
|
||||
card:flip()
|
||||
card:juice_up(1, 1)
|
||||
play_sound("card1")
|
||||
extra.is_corrupted = not extra.is_corrupted
|
||||
extra.is_corrupting = nil
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
card:flip()
|
||||
card:juice_up(1, 1)
|
||||
play_sound("card1")
|
||||
play_sound("jane_corrupt_milestone")
|
||||
extra.is_corrupted = not extra.is_corrupted
|
||||
extra.is_corrupting = nil
|
||||
end, 1)
|
||||
end
|
||||
|
||||
if context.individual and
|
||||
context.cardarea == G.play and
|
||||
context.other_card.ability.name == "Steel Card" then
|
||||
local amount = extra.is_corrupted and extra.corrupted_steel or extra.steel
|
||||
return {x_chips = amount, x_mult = amount, colour = G.C.PURPLE, card = card}, true
|
||||
local amount = extra.is_corrupted and extra.corrupted_steel or steel
|
||||
return {x_mult = amount, colour = G.C.PURPLE, card = card}, true
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
if Cryptid then
|
||||
Cryptid.aliases["oxy"] = "j_jane_oxy"
|
||||
end
|
||||
|
||||
SMODS.Joker {
|
||||
key = "7granddad",
|
||||
loc_txt = {
|
||||
name = "7 GRAND DAD",
|
||||
text = {
|
||||
"This Joker has a {C:jane_RGB,E:1}strange",
|
||||
"{C:jane_RGB,E:1}reaction {}to scored {C:attention}7{}s",
|
||||
}
|
||||
},
|
||||
config = {},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
atlas = "jane7granddad",
|
||||
blueprint_compat = true,
|
||||
cost = Cryptid and 50 or 8,
|
||||
rarity = Cryptid and exotic or 3,
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {center.ability.shopslots}}
|
||||
end,
|
||||
add_to_deck = function(_, card, _)
|
||||
grand_dad(card)
|
||||
end,
|
||||
remove_from_deck = function(_, card, _)
|
||||
grand_dad(card)
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
if context.cardarea == G.play then
|
||||
local function scj(c)
|
||||
return c.cardarea and c.cardarea == G.play and not c.before and not c.after and not c.repetition
|
||||
end
|
||||
|
||||
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 7 or 5)
|
||||
|
||||
if rnd == 1 then
|
||||
return {
|
||||
message = "+777",
|
||||
chips = 777,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
elseif rnd == 2 then
|
||||
return {
|
||||
message = "+777 Mult",
|
||||
mult = 777,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
elseif rnd == 3 then
|
||||
return {
|
||||
message = "+$7",
|
||||
dollars = 7,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
elseif rnd == 4 then
|
||||
return {
|
||||
message = "x7",
|
||||
x_chips = 7,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
elseif rnd == 5 then
|
||||
return {
|
||||
message = "x7 Mult",
|
||||
x_mult = 7,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
elseif rnd == 6 then
|
||||
return {
|
||||
message = "^1.77",
|
||||
e_chips = 1.77,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
else
|
||||
return {
|
||||
message = "^1.77 Mult",
|
||||
e_mult = 1.77,
|
||||
colour = palette,
|
||||
card = card
|
||||
}, true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local operator = Cryptid and "^" or "X"
|
||||
local operator_prefix = Cryptid and "{X:dark_edition,C:mult}" or "{X:mult,C:white}"
|
||||
|
||||
SMODS.Joker {
|
||||
key = "betmma",
|
||||
|
|
@ -472,12 +490,12 @@ SMODS.Joker {
|
|||
loc_txt = {
|
||||
name = "Betmma",
|
||||
text = {
|
||||
"{X:dark_edition,C:chips}+" .. operator .. "#1#{C:chips} Chips{} for every",
|
||||
operator_prefix .. "+" .. operator .. "#1#{C:mult} Mult{} for every",
|
||||
"{C:attention}unique Voucher redeemed",
|
||||
"{C:inactive}(Currently {X:dark_edition,C:chips}" .. operator .. "#2#{C:inactive})",
|
||||
}
|
||||
"{C:inactive}(Currently " .. operator_prefix .. operator .. "#2#{C:inactive})",
|
||||
},
|
||||
},
|
||||
config = {big_num_scaler = true, extra = {tet = Cryptid and 0.1 or 0.5}},
|
||||
config = {extra = {tet = Cryptid and 0.25 or 0.5}},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
blueprint_compat = true,
|
||||
|
|
@ -500,10 +518,87 @@ SMODS.Joker {
|
|||
card = card,
|
||||
colour = G.C.jane_RGB,
|
||||
message = operator .. number_format(num),
|
||||
[Cryptid and "Echips_mod" or "Xchips_mod"] = num,
|
||||
[Cryptid and "e_mult" or "x_mult"] = num,
|
||||
}, true
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
SMODS.Joker {
|
||||
key = "7granddad",
|
||||
loc_txt = {
|
||||
name = "7 GRAND DAD",
|
||||
text = {
|
||||
"This Joker has a {C:jane_RGB,E:1}strange",
|
||||
"{C:jane_RGB,E:1}reaction {}to scored {C:attention}7{}s",
|
||||
},
|
||||
},
|
||||
config = {},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
atlas = "jane7granddad",
|
||||
blueprint_compat = true,
|
||||
cost = Cryptid and 49 or 7,
|
||||
rarity = Cryptid and exotic or 3,
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {center.ability.shopslots}}
|
||||
end,
|
||||
add_to_deck = function(_, card, _)
|
||||
grand_dad(card)
|
||||
end,
|
||||
remove_from_deck = function(_, card, _)
|
||||
grand_dad(card)
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
if context.cardarea == G.play then
|
||||
local function scj(c)
|
||||
return c.cardarea and c.cardarea == G.play and not c.before and not c.after and not c.repetition
|
||||
end
|
||||
|
||||
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)
|
||||
|
||||
if rnd == 1 then
|
||||
return {
|
||||
message = Cryptid and "+777" or "+77",
|
||||
chips = Cryptid 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,
|
||||
colour = palette,
|
||||
card = card,
|
||||
}, true
|
||||
elseif rnd == 3 then
|
||||
return {
|
||||
message = "+$7",
|
||||
dollars = 7,
|
||||
colour = palette,
|
||||
card = card,
|
||||
}, true
|
||||
elseif rnd == 4 then
|
||||
return {
|
||||
message = Cryptid and "X7 Mult" or "X1.77 Mult",
|
||||
x_mult = Cryptid and 7 or 1.77,
|
||||
colour = palette,
|
||||
card = card,
|
||||
}, true
|
||||
else
|
||||
return {
|
||||
message = "^1.77 Mult",
|
||||
e_mult = 1.77,
|
||||
colour = palette,
|
||||
card = card,
|
||||
}, true
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
SMODS.Joker {
|
||||
|
|
@ -512,29 +607,30 @@ SMODS.Joker {
|
|||
loc_txt = {
|
||||
name = "Peppino Spaghetti",
|
||||
text = {
|
||||
"{X:dark_edition,C:red}" .. operator .. "2^x{C:red} Mult{} for every",
|
||||
operator_prefix .. operator .. "2^x{C:red} Mult{} for every",
|
||||
"{C:attention}food or Peppino Joker",
|
||||
"in your possession",
|
||||
"{C:inactive}(Currently {X:dark_edition,C:red}" .. operator .. "#1#{C:red} Mult{C:inactive})",
|
||||
}
|
||||
"{C:inactive}(Currently " .. operator_prefix .. operator .. "#1#{C:red} Mult{C:inactive})",
|
||||
},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
config = {extra = {base = 2}},
|
||||
rarity = exotic,
|
||||
blueprint_compat = true,
|
||||
cost = Cryptid and 50 or 20,
|
||||
loc_vars = function(_, _, _)
|
||||
return {vars = {2 ^ food_jokers_count()}}
|
||||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.extra.base ^ food_jokers_count()}}
|
||||
end,
|
||||
calculate = function(_, _, context)
|
||||
calculate = function(_, card, context)
|
||||
local count = food_jokers_count()
|
||||
|
||||
if context.joker_main and count > 0 then
|
||||
return {
|
||||
colour = G.C.DARK_EDITION,
|
||||
message = operator .. 2 ^ count .. " Mult",
|
||||
[Cryptid and "Emult_mod" or "Xmult_mod"] = 2 ^ count,
|
||||
message = operator .. card.ability.extra.base ^ count .. " Mult",
|
||||
[Cryptid and "e_mult" or "x_mult"] = card.ability.extra.base ^ count,
|
||||
}, true
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
|
|
|||
219
src/main.lua
219
src/main.lua
|
|
@ -2,22 +2,26 @@ Jane = {
|
|||
config = {
|
||||
wee_sizemod = 1.25,
|
||||
texture_pack = "default",
|
||||
bans = {"j_cry_crustulum", "c_cry_hammerspace"}
|
||||
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_names = Cryptid and {"Common", "Uncommon", "Rare", "Epic", "Legendary", "Exotic", "Junk"} or
|
||||
{"Common", "Uncommon", "Rare", "Legendary", "Junk"}
|
||||
|
||||
if not Jane.misprintize then
|
||||
assert(SMODS.load_file("src/misprintize.lua"))()
|
||||
end
|
||||
|
||||
function Jane.canuse()
|
||||
function Jane.can_use()
|
||||
return not (((G.play and #G.play.cards > 0) or
|
||||
(G.CONTROLLER.locked) or
|
||||
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
|
||||
(G.CONTROLLER.locked) or
|
||||
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
|
||||
G.STATE ~= G.STATES.HAND_PLAYED and
|
||||
G.STATE ~= G.STATES.DRAW_TO_HAND and
|
||||
G.STATE ~= G.STATES.PLAY_TAROT)
|
||||
|
|
@ -37,7 +41,7 @@ function Jane.card_status_text(
|
|||
sound,
|
||||
volume,
|
||||
pitch,
|
||||
trig,
|
||||
trigger,
|
||||
f
|
||||
)
|
||||
if (delay or 0) <= 0 then
|
||||
|
|
@ -52,7 +56,7 @@ function Jane.card_status_text(
|
|||
backdrop_colour = colour or (G.C.FILTER),
|
||||
align = align or "bm",
|
||||
major = card,
|
||||
offset = {x = xoffset or 0, y = yoffset or (-0.05*G.CARD_H)}
|
||||
offset = {x = xoffset or 0, y = yoffset or (-0.05 * G.CARD_H)},
|
||||
})
|
||||
|
||||
if sound then
|
||||
|
|
@ -71,10 +75,8 @@ function Jane.card_status_text(
|
|||
G.ROOM.jiggle = G.ROOM.jiggle + jiggle
|
||||
end
|
||||
else
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = trig,
|
||||
delay = delay,
|
||||
func = function()
|
||||
Jane.q(
|
||||
function()
|
||||
if f and type(f) == "function" then
|
||||
f(card)
|
||||
end
|
||||
|
|
@ -86,11 +88,11 @@ function Jane.card_status_text(
|
|||
backdrop_colour = colour or (G.C.FILTER),
|
||||
align = align or "bm",
|
||||
major = card,
|
||||
offset = {x = xoffset or 0, y = yoffset or (-0.05*G.CARD_H)}
|
||||
offset = {x = xoffset or 0, y = yoffset or (-0.05 * G.CARD_H)},
|
||||
})
|
||||
|
||||
if sound then
|
||||
play_sound(sound, pitch or (0.9 + (0.2*math.random())), volume or 1)
|
||||
play_sound(sound, pitch or (0.9 + (0.2 * math.random())), volume or 1)
|
||||
end
|
||||
|
||||
if juice then
|
||||
|
|
@ -104,17 +106,18 @@ function Jane.card_status_text(
|
|||
if jiggle then
|
||||
G.ROOM.jiggle = G.ROOM.jiggle + jiggle
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}))
|
||||
end,
|
||||
delay,
|
||||
nil,
|
||||
trigger
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function Jane.empowered()
|
||||
if Cryptid then
|
||||
add_tag(Tag("tag_cry_empowered"))
|
||||
return true
|
||||
return
|
||||
end
|
||||
|
||||
local card = create_card("Spectral", G.consumeables, nil, nil, nil, nil, "c_soul", "acceleration_soul")
|
||||
|
|
@ -127,8 +130,9 @@ function Jane.get_chipmult_sum(chips, mult)
|
|||
chips = chips or 0
|
||||
mult = mult or 0
|
||||
|
||||
local op, big = Jane.get_operator(), Talisman.config_file.break_infinity == "omeganum" and
|
||||
to_big or function (x) return x end
|
||||
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 op = Jane.get_operator()
|
||||
|
||||
if op >= 3 then
|
||||
return big(chips) ^ big(mult)
|
||||
|
|
@ -149,29 +153,56 @@ function Jane.get_operator()
|
|||
end
|
||||
|
||||
function Jane.hidden(card)
|
||||
return G.GAME and not
|
||||
G.GAME.obsidian and
|
||||
type(card) == 'table' and
|
||||
(card.name == "Black Hole" or card.name == "The Soul" or card.hidden)
|
||||
return G.GAME and not G.GAME.obsidian and
|
||||
(type(card) == "table" and (card.name == "Black Hole" or card.name == "The Soul") or card.hidden)
|
||||
end
|
||||
|
||||
function Jane.is_end_of_ante(context, card)
|
||||
return not context.individual and not
|
||||
context.repetition and not
|
||||
(card or {}).debuff and
|
||||
context.end_of_round and not
|
||||
context.blueprint and
|
||||
G.GAME.blind.boss and not
|
||||
(G.GAME.blind.config and G.GAME.blind.config.bonus)
|
||||
end
|
||||
|
||||
function Jane.play_sound(sound, per, vol)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
play_sound(sound,per,vol)
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
play_sound(sound, per, vol)
|
||||
end)
|
||||
end
|
||||
|
||||
function Jane.q(fc, de, t, tr, bl, ba)
|
||||
function Jane.resize(card, mod, force_save)
|
||||
if force_save or 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)
|
||||
remove_all(card.children)
|
||||
card.children = {}
|
||||
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
|
||||
((G.shop_jokers and card.area == G.shop_jokers) or
|
||||
(G.shop_booster and card.area == G.shop_booster) or
|
||||
(G.shop_vouchers and card.area == G.shop_vouchers)) then
|
||||
create_shop_card_ui(card)
|
||||
end
|
||||
end
|
||||
|
||||
function Jane.q(func, delay, timer, trigger, blockable, blocking)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
timer = t,
|
||||
trigger = tr,
|
||||
delay = de,
|
||||
blockable = bl,
|
||||
blocking = ba,
|
||||
func = fc
|
||||
delay = delay,
|
||||
timer = timer,
|
||||
trigger = (delay and not trigger) and "after" or trigger,
|
||||
blocking = blocking,
|
||||
blockable = blockable,
|
||||
func = function(...)
|
||||
local ret = func(...)
|
||||
return ret == nil and true or ret
|
||||
end,
|
||||
}))
|
||||
end
|
||||
|
||||
|
|
@ -187,17 +218,6 @@ function Card:nosuit()
|
|||
return self.ability.name == "Stone Card" or self.config.center.no_suit
|
||||
end
|
||||
|
||||
local orig_debuff = Card.set_debuff
|
||||
|
||||
function Card:set_debuff(should_debuff)
|
||||
if should_debuff and ((self.config or {}).center or {}).debuff_immune then
|
||||
Jane.card_status_text(self, "Immune", nil, 0.05 * self.T.h, G.C.RED, nil, 0.6, nil, nil, "bm", "cancel", 1, 0.9)
|
||||
return false
|
||||
else
|
||||
orig_debuff(self, should_debuff)
|
||||
end
|
||||
end
|
||||
|
||||
local orig_menu = Game.main_menu
|
||||
|
||||
function Game:main_menu(change_context)
|
||||
|
|
@ -220,80 +240,11 @@ function Game:update(dt)
|
|||
end
|
||||
end
|
||||
|
||||
local function hand(name, chip, mul, lv, notif, snd, vol, pit, de)
|
||||
local config = {
|
||||
delay = de or 0.3,
|
||||
pitch = pit or 0.8,
|
||||
volume = vol or 0.7,
|
||||
sound = type(snd) == "string" and snd or type(snd) == "nil" and "button",
|
||||
}
|
||||
|
||||
local vals = {
|
||||
level = lv or "?",
|
||||
mult = mul or "?",
|
||||
StatusText = notif,
|
||||
chips = chip or "?",
|
||||
handname = name or "????",
|
||||
}
|
||||
|
||||
update_hand_text(config, vals)
|
||||
end
|
||||
|
||||
local function rebalance_orrery()
|
||||
local function small(x)
|
||||
return type(x) == "table" and x:to_number() or x
|
||||
end
|
||||
|
||||
local orrery = (G.GAME or {}).orrery
|
||||
|
||||
if not orrery then
|
||||
return
|
||||
end
|
||||
|
||||
local count = 0
|
||||
local hands = {}
|
||||
local inequalities = 0
|
||||
local pools = {chips = 0, level = 0, mult = 0}
|
||||
|
||||
for k, v in pairs(G.GAME.hands) do
|
||||
if orrery[k] and
|
||||
(orrery[k].mult ~= v.mult or
|
||||
orrery[k].chips ~= v.chips or
|
||||
orrery[k].level ~= v.level) then
|
||||
inequalities = inequalities + 1
|
||||
end
|
||||
|
||||
count = count + 1
|
||||
hands[#hands + 1] = v
|
||||
pools.mult = v.mult + pools.mult
|
||||
pools.chips = v.chips + pools.chips
|
||||
pools.level = v.level + pools.level
|
||||
end
|
||||
|
||||
if inequalities == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
pools.chips = pools.chips + inequalities * 150
|
||||
table.sort(hands, function (x, y) return x.order > y.order end)
|
||||
|
||||
for i, v in ipairs(hands) do
|
||||
v.mult = math.floor(pools.mult / count) + (small(pools.mult % count) >= i and 1 or 0)
|
||||
v.chips = math.floor(pools.chips / count) + (small(pools.chips % count) >= i and 1 or 0)
|
||||
v.level = math.floor(pools.level / count) + (small(pools.level % count) >= i and 1 or 0)
|
||||
end
|
||||
|
||||
for k, v in pairs(G.GAME.hands) do
|
||||
orrery[k] = {chips = v.chips, level = v.level, mult = v.mult}
|
||||
end
|
||||
|
||||
hand(localize("k_all_hands"), math.floor(pools.chips / count), math.floor(pools.mult / count), math.floor(pools.level / count))
|
||||
delay(1)
|
||||
update_hand_text({sound = "button", volume = 0.7, pitch = 1.1, delay = 0}, {mult = 0, chips = 0, handname = "", level = ""})
|
||||
end
|
||||
|
||||
local function hsv(h, s, v)
|
||||
if s <= 0 then return v, v, v end
|
||||
if s <= 0 then
|
||||
return v, v, v
|
||||
end
|
||||
|
||||
h = h * 6
|
||||
local c = v * s
|
||||
local x = (1 - math.abs((h % 2) - 1)) * c
|
||||
|
|
@ -317,26 +268,15 @@ function Game:update(dt)
|
|||
end
|
||||
|
||||
orig_update(self, 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
|
||||
|
||||
local honey = SMODS.find_card("j_jane_honey")
|
||||
|
||||
for _, v in ipairs(honey) do
|
||||
if not v.ability.extra.is_corrupted and v ~= honey[#honey] then
|
||||
v.sell_cost = v.sell_cost + honey[#honey].sell_cost
|
||||
v.ability.extra.is_corrupted = true
|
||||
honey[#honey]:start_dissolve()
|
||||
honey[#honey] = nil
|
||||
end
|
||||
end
|
||||
Jane.update_honey()
|
||||
|
||||
if not Jane.bans_done then
|
||||
delete_hardbans()
|
||||
Jane.bans_done = true
|
||||
delete_hardbans()
|
||||
end
|
||||
|
||||
if (G.GAME or {}).banned_keys then
|
||||
|
|
@ -353,18 +293,6 @@ function Game:update(dt)
|
|||
self.C.jane_RGB_HUE = (self.C.jane_RGB_HUE + 0.5) % 360
|
||||
G.ARGS.LOC_COLOURS.jane_RGB = self.C.jane_RGB
|
||||
end
|
||||
|
||||
rebalance_orrery()
|
||||
end
|
||||
|
||||
local orig_card = SMODS.find_card
|
||||
|
||||
---@param key string
|
||||
---@param count_debuffed true?
|
||||
---@return Card[]|table[]
|
||||
--- Returns all cards matching provided `key`.
|
||||
function SMODS.find_card(key, count_debuffed)
|
||||
return orig_card(key == "j_jen_saint" and "j_jane_saint" or key, count_debuffed)
|
||||
end
|
||||
|
||||
SMODS.Atlas {
|
||||
|
|
@ -385,6 +313,7 @@ for _, v in ipairs({
|
|||
"back",
|
||||
"blind",
|
||||
"booster",
|
||||
"challenge",
|
||||
"edition",
|
||||
"joker",
|
||||
"slugcat",
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
-- The following code is slightly adapted from
|
||||
-- https://github.com/MathIsFun0/Cryptid/blob/main/lib/misprintize.lua
|
||||
|
||||
local base_values = {}
|
||||
|
||||
local big_num_whitelist = {
|
||||
local big_num_allowlist = {
|
||||
j_egg = true,
|
||||
j_wee = true,
|
||||
j_flash = true,
|
||||
|
|
@ -102,7 +101,7 @@ local function is_card_big(joker)
|
|||
return false
|
||||
end
|
||||
|
||||
return big_num_whitelist[center.key or "Nope!"]
|
||||
return big_num_allowlist[center.key or "Nope!"]
|
||||
end
|
||||
|
||||
local function log_random(seed, min, max)
|
||||
|
|
@ -114,7 +113,6 @@ local function log_random(seed, min, max)
|
|||
end
|
||||
|
||||
function Jane.misprintize_val(val, override, big)
|
||||
|
||||
return is_number(val) and check(
|
||||
format(
|
||||
val * log_random(
|
||||
|
|
@ -153,30 +151,30 @@ function Jane.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack,
|
|||
|
||||
tbl[k] = check(
|
||||
clear and base_values[name][k]
|
||||
or format(
|
||||
(stack and tbl[k] or base_values[name][k])
|
||||
* log_random(
|
||||
pseudoseed("cry_misprint" .. G.GAME.round_resets.ante),
|
||||
override and override.min or G.GAME.modifiers.cry_misprint_min,
|
||||
override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
),
|
||||
"%.2g"
|
||||
or format(
|
||||
(stack and tbl[k] or base_values[name][k])
|
||||
* log_random(
|
||||
pseudoseed("cry_misprint" .. G.GAME.round_resets.ante),
|
||||
override and override.min or G.GAME.modifiers.cry_misprint_min,
|
||||
override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
),
|
||||
"%.2g"
|
||||
),
|
||||
big
|
||||
)
|
||||
end
|
||||
else
|
||||
for _k, _ in pairs(tbl[k]) do
|
||||
if is_number(tbl[k][_k]) and not
|
||||
(_k == "id") and not
|
||||
(k == "perish_tally") and not
|
||||
(k == "colour") and not
|
||||
(_k == "suit_nominal") and not
|
||||
(_k == "base_nominal") and not
|
||||
(_k == "face_nominal") and not
|
||||
(_k == "qty") and not
|
||||
(k == "x_mult" and v == 1 and not tbl[k].override_x_mult_check) and not
|
||||
(_k == "selected_d6_face") then
|
||||
(_k == "id") and not
|
||||
(k == "perish_tally") and not
|
||||
(k == "colour") and not
|
||||
(_k == "suit_nominal") and not
|
||||
(_k == "base_nominal") and not
|
||||
(_k == "face_nominal") and not
|
||||
(_k == "qty") and not
|
||||
(k == "x_mult" and v == 1 and not tbl[k].override_x_mult_check) and not
|
||||
(_k == "selected_d6_face") then
|
||||
if not base_values[name] then
|
||||
base_values[name] = {}
|
||||
end
|
||||
|
|
@ -191,15 +189,15 @@ function Jane.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack,
|
|||
|
||||
tbl[k][_k] = check(
|
||||
clear and base_values[name][k][_k]
|
||||
or format(
|
||||
(stack and tbl[k][_k] or base_values[name][k][_k]) *
|
||||
log_random(
|
||||
pseudoseed("cry_misprint" .. G.GAME.round_resets.ante),
|
||||
override and override.min or G.GAME.modifiers.cry_misprint_min,
|
||||
override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
),
|
||||
"%.2g"
|
||||
or format(
|
||||
(stack and tbl[k][_k] or base_values[name][k][_k]) *
|
||||
log_random(
|
||||
pseudoseed("cry_misprint" .. G.GAME.round_resets.ante),
|
||||
override and override.min or G.GAME.modifiers.cry_misprint_min,
|
||||
override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
),
|
||||
"%.2g"
|
||||
),
|
||||
big
|
||||
)
|
||||
end
|
||||
|
|
@ -247,10 +245,11 @@ function Jane.misprintize(card, override, force_reset, stack)
|
|||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if (not force_reset or G.GAME.modifiers.cry_jkr_misprint_mod) and
|
||||
(G.GAME.modifiers.cry_misprint_min or override or card.ability.set == "Joker") and not
|
||||
stack or not
|
||||
no(card, "immutable", true) then
|
||||
no(card, "immutable", true) then
|
||||
if card.ability.name == "Ace Aequilibrium" then
|
||||
return
|
||||
end
|
||||
|
|
|
|||
464
src/slugcat.lua
464
src/slugcat.lua
|
|
@ -5,6 +5,36 @@ for i = 1, 8 do
|
|||
SMODS.Sound({key = "gore" .. i, path = "gore" .. i .. ".ogg"})
|
||||
end
|
||||
|
||||
SMODS.Sound({
|
||||
key = "music_attuned",
|
||||
path = "music_attuned.ogg",
|
||||
volume = 1,
|
||||
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
|
||||
end
|
||||
end
|
||||
|
||||
return -1 / 0
|
||||
end,
|
||||
})
|
||||
|
||||
SMODS.Sound({
|
||||
key = "music_attuned_sinister",
|
||||
path = "music_attuned_sinister.ogg",
|
||||
volume = 1,
|
||||
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 10 or -1 / 0
|
||||
end
|
||||
end
|
||||
|
||||
return -1 / 0
|
||||
end,
|
||||
})
|
||||
|
||||
for _, v in pairs({
|
||||
"artificer",
|
||||
"hunter",
|
||||
|
|
@ -20,7 +50,7 @@ for _, v in pairs({
|
|||
key = "jane" .. v,
|
||||
px = 71,
|
||||
py = 95,
|
||||
path = Jane.config.texture_pack .. "/j_jane_" .. v .. ".png"
|
||||
path = Jane.config.texture_pack .. "/j_jane_" .. v .. ".png",
|
||||
}
|
||||
end
|
||||
|
||||
|
|
@ -29,41 +59,63 @@ local exotic = Cryptid and "cry_exotic" or 4
|
|||
|
||||
SMODS.Rarity {
|
||||
key = "junk",
|
||||
default_weight = 1e-9,
|
||||
loc_txt = {name = "Junk"},
|
||||
badge_colour = G.C.JOKER_GREY,
|
||||
}
|
||||
|
||||
local monk_limit = 25
|
||||
|
||||
SMODS.Joker {
|
||||
key = "monk",
|
||||
atlas = "janemonk",
|
||||
loc_txt = {
|
||||
name = "The Monk",
|
||||
text = {
|
||||
"{C:attention}Retrigger{} scored cards",
|
||||
"{C:attention}<card's rank> {}times",
|
||||
"{C:inactive}(ex. 9 = 9 times, Ace = 11 times)",
|
||||
}
|
||||
"{C:attention}Retrigger {}scored",
|
||||
"cards {C:attention}#1# time#2# {}if",
|
||||
"hand contains {C:attention}#3#",
|
||||
"or fewer card#4#",
|
||||
},
|
||||
},
|
||||
config = {extra = {retriggers = 2, requirement = 4}},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
cost = 20,
|
||||
rarity = 4,
|
||||
blueprint_compat = true,
|
||||
calculate = function(_, card, context)
|
||||
if context.repetition and
|
||||
context.cardarea == G.play and
|
||||
context.other_card and
|
||||
context.other_card.ability.name ~= "Stone Card" then
|
||||
local id = context.other_card:get_id()
|
||||
loc_vars = function(_, _, card)
|
||||
local extra = card.ability.extra
|
||||
local retriggers = extra.retriggers
|
||||
local requirement = extra.requirement
|
||||
|
||||
return {
|
||||
message = localize("k_again_ex"),
|
||||
repetitions = id == 14 and 11 or math.min(id, 10),
|
||||
colour = G.C.ORANGE,
|
||||
card = card
|
||||
}, true
|
||||
return {
|
||||
vars = {
|
||||
retriggers,
|
||||
retriggers == 1 and "" or "s",
|
||||
requirement,
|
||||
requirement == 1 and "" or "s",
|
||||
},
|
||||
}
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
if not context.repetition or
|
||||
context.cardarea ~= G.play or not
|
||||
context.other_card or
|
||||
#G.play.cards > card.ability.extra.requirement then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local min = math.min(card.ability.extra.retriggers, monk_limit)
|
||||
card.ability.extra.retriggers = min
|
||||
|
||||
return {
|
||||
card = card,
|
||||
repetitions = min,
|
||||
colour = G.C.ORANGE,
|
||||
message = localize("k_again_ex"),
|
||||
}, true
|
||||
end,
|
||||
}
|
||||
|
||||
SMODS.Joker {
|
||||
|
|
@ -73,10 +125,10 @@ SMODS.Joker {
|
|||
name = "The Survivor",
|
||||
text = {
|
||||
"All cards held in hand",
|
||||
"{C:attention}contribute to scoring {}and",
|
||||
"are all considered as",
|
||||
"the {C:attention}first played card",
|
||||
}
|
||||
"{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,
|
||||
},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
|
|
@ -84,7 +136,7 @@ SMODS.Joker {
|
|||
rarity = 4,
|
||||
}
|
||||
|
||||
local hunter = { 7, 5, 3, 2, 1 }
|
||||
local hunter = {5, 4, 3, 2, 1}
|
||||
|
||||
SMODS.Joker {
|
||||
key = "hunter",
|
||||
|
|
@ -97,33 +149,37 @@ SMODS.Joker {
|
|||
(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",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {rounds_left = hunter[1]},
|
||||
config = {extra = {rounds_left = hunter[1]}},
|
||||
pos = {x = 0, y = 0},
|
||||
eternal_compat = false,
|
||||
perishable_compat = false,
|
||||
soul_pos = {x = 1, y = 0},
|
||||
cost = Cryptid and 20 or 8,
|
||||
rarity = Cryptid and 4 or 3,
|
||||
loc_vars = function(_, _, card)
|
||||
cost = Cryptid and 15 or 8,
|
||||
rarity = Cryptid 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
|
||||
|
||||
local rounds_left = card.ability.rounds_left
|
||||
local sold = rounds_left - hunter[2]
|
||||
info_queue[#info_queue + 1] = Cryptid 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[3]
|
||||
|
||||
return {vars = {
|
||||
rounds_left .. rounds(rounds_left) .. (rounds_left <= 0 and "...?" or ""),
|
||||
sold <= 0 and "" or " after " .. sold .. rounds(sold),
|
||||
sold <= 0 and " into" or "",
|
||||
sold <= 0 and "" or "into ",
|
||||
}}
|
||||
return {
|
||||
vars = {
|
||||
rounds_left .. rounds(rounds_left) .. (rounds_left <= 0 and "...?" or ""),
|
||||
sold <= 0 and "" or " after " .. sold .. rounds(sold),
|
||||
sold <= 0 and " into" or "",
|
||||
sold <= 0 and "" or "into ",
|
||||
},
|
||||
}
|
||||
end,
|
||||
update = function(_, card, _)
|
||||
if card.added_to_deck and card.children.center and card.children.floating_sprite then
|
||||
for k, v in ipairs(hunter) do
|
||||
if card.ability.rounds_left <= v then
|
||||
if card.ability.extra.rounds_left <= v then
|
||||
card.children.center:set_sprite_pos({x = 0, y = k - 1})
|
||||
card.children.floating_sprite:set_sprite_pos({x = 1, y = k - 1})
|
||||
else
|
||||
|
|
@ -136,6 +192,7 @@ SMODS.Joker {
|
|||
local function spawn_rot()
|
||||
card:flip()
|
||||
card:juice_up(2, 0.8)
|
||||
card.getting_sliced = true
|
||||
Jane.card_status_text(card, "Dead!", nil, 0.05 * card.T.h, G.C.BLACK, 2, 0, 0, nil, "bm", "jane_gore6")
|
||||
|
||||
Jane.q(function()
|
||||
|
|
@ -145,31 +202,26 @@ SMODS.Joker {
|
|||
card:set_eternal(nil)
|
||||
card2:set_eternal(true)
|
||||
play_sound("jane_gore5")
|
||||
return true
|
||||
end)
|
||||
end
|
||||
|
||||
local function die()
|
||||
spawn_rot()
|
||||
|
||||
Jane.q(function()
|
||||
Jane.empowered()
|
||||
return true
|
||||
end, 0.1)
|
||||
|
||||
Jane.q(function()
|
||||
card:start_dissolve()
|
||||
return true
|
||||
end, 1)
|
||||
end
|
||||
|
||||
return true
|
||||
local function die()
|
||||
Jane.q(function()
|
||||
Jane.empowered()
|
||||
end, 0.1)
|
||||
|
||||
spawn_rot()
|
||||
end
|
||||
|
||||
if context.blueprint then
|
||||
return
|
||||
end
|
||||
|
||||
if context.selling_self and card.ability.rounds_left <= hunter[2] then
|
||||
if context.selling_self and card.ability.extra.rounds_left <= hunter[3] 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
|
||||
|
|
@ -178,17 +230,13 @@ SMODS.Joker {
|
|||
|
||||
if not card.hunter_prep then
|
||||
card.hunter_prep = true
|
||||
|
||||
Jane.q(function()
|
||||
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
|
||||
card.hunter_prep = nil
|
||||
|
||||
return true
|
||||
end)
|
||||
|
||||
return true
|
||||
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
|
||||
|
||||
|
|
@ -197,9 +245,10 @@ SMODS.Joker {
|
|||
end
|
||||
|
||||
card.hunter_prep = nil
|
||||
card.ability.rounds_left = card.ability.rounds_left - 1
|
||||
local rl = card.ability.rounds_left
|
||||
Jane.card_status_text(card, tostring(card.ability.rounds_left), nil, nil, G.C.RED, nil, nil, nil, nil, nil, "generic1")
|
||||
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,
|
||||
nil, "generic1")
|
||||
|
||||
if rl > hunter[2] then
|
||||
card:juice_up(0.6, 0.1)
|
||||
|
|
@ -232,10 +281,10 @@ SMODS.Joker {
|
|||
else
|
||||
card:juice_up(2, 0.8)
|
||||
Jane.play_sound("jane_warning_heartbeat")
|
||||
G.E_MANAGER:add_event(Event({trigger = "after", func = die}))
|
||||
Jane.q(die, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
SMODS.Joker {
|
||||
|
|
@ -248,7 +297,7 @@ SMODS.Joker {
|
|||
"are {C:attention}multiplied{} by {C:attention}#1#",
|
||||
"when they are created",
|
||||
"{C:inactive}(If possible)",
|
||||
}
|
||||
},
|
||||
},
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {center.ability.modifier}}
|
||||
|
|
@ -288,7 +337,7 @@ SMODS.Joker {
|
|||
text = {
|
||||
"Grants the {C:green}ability{} to {C:red}destroy",
|
||||
"selected {C:attention}playing cards",
|
||||
}
|
||||
},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
|
|
@ -296,15 +345,21 @@ SMODS.Joker {
|
|||
rarity = exotic,
|
||||
Bakery_use_button_text = function(_, _) return "DESTROY" end,
|
||||
Bakery_can_use = function(_, card)
|
||||
return not card.debuff and Jane.canuse() and next(G.hand.highlighted)
|
||||
return not card.debuff and Jane.can_use() and next(G.hand.highlighted)
|
||||
end,
|
||||
Bakery_use_joker = function(_, _)
|
||||
for _, v in pairs(SMODS.find_card("j_jane_oxy")) do
|
||||
Jane.oxy(v, G.hand.highlighted)
|
||||
end
|
||||
|
||||
for _, v in pairs(G.hand.highlighted) do
|
||||
v:start_dissolve()
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local spearmaster_limit = 25
|
||||
|
||||
SMODS.Joker {
|
||||
key = "spearmaster",
|
||||
atlas = "janespearmaster",
|
||||
|
|
@ -314,12 +369,15 @@ SMODS.Joker {
|
|||
"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",
|
||||
}
|
||||
},
|
||||
},
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {center.ability.extra.extrachoices}}
|
||||
config = {extra = {choices = 1}},
|
||||
loc_vars = function(_, _, card)
|
||||
return {vars = {card.ability.extra.choices}}
|
||||
end,
|
||||
calculate = function(_, card, _)
|
||||
card.ability.extra.choices = math.min(card.ability.extra.choices, spearmaster_limit)
|
||||
end,
|
||||
config = {extra = {extrachoices = 1}},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
cost = Cryptid and 12 or 20,
|
||||
|
|
@ -335,7 +393,7 @@ function Card:open()
|
|||
|
||||
if next(spearmasters) then
|
||||
for _, v in pairs(spearmasters) do
|
||||
orig = orig + v.ability.extra.extrachoices
|
||||
orig = orig + v.ability.extra.choices
|
||||
end
|
||||
|
||||
self.config.choose = math.floor(orig)
|
||||
|
|
@ -344,17 +402,11 @@ function Card:open()
|
|||
|
||||
orig_open(self)
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
delay = 0.5,
|
||||
timer = "REAL",
|
||||
func = function()
|
||||
if next(spearmasters) then
|
||||
G.GAME.pack_choices = math.floor(self.ability.extra)
|
||||
end
|
||||
|
||||
return true
|
||||
Jane.q(function()
|
||||
if next(spearmasters) then
|
||||
G.GAME.pack_choices = math.floor(self.ability.extra)
|
||||
end
|
||||
}))
|
||||
end, 0.5, "REAL")
|
||||
end
|
||||
|
||||
SMODS.Joker {
|
||||
|
|
@ -365,7 +417,7 @@ SMODS.Joker {
|
|||
text = {
|
||||
"Non-{C:dark_edition}editioned{} cards are",
|
||||
"{C:attention}given a random {C:dark_edition}Edition",
|
||||
}
|
||||
},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
|
|
@ -395,8 +447,7 @@ 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.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
|
||||
|
|
@ -406,89 +457,187 @@ function Card:draw(layer)
|
|||
orig_draw(self, layer)
|
||||
end
|
||||
|
||||
local attunement = Cryptid and 1.001 or 1.5
|
||||
local orig_debuff = Card.set_debuff
|
||||
|
||||
function Card:set_debuff(should_debuff)
|
||||
if should_debuff and ((self.config or {}).center or {}).debuff_immune then
|
||||
Jane.card_status_text(self, "Immune", nil, 0.05 * self.T.h, G.C.RED, nil, 0.6, nil, nil, "bm", "cancel", 1, 0.9)
|
||||
return false
|
||||
else
|
||||
orig_debuff(self, should_debuff)
|
||||
end
|
||||
end
|
||||
|
||||
local function attunement()
|
||||
return (G.GAME or {}).weeckweeck and 2 or (Cryptid and 1.002 or 1.2)
|
||||
end
|
||||
|
||||
SMODS.Joker {
|
||||
key = "saint",
|
||||
atlas = "janesaint",
|
||||
loc_txt = {
|
||||
name = "The Saint{C:jane_RGB}#1#",
|
||||
text = {
|
||||
"{C:spectral}#2# {}will {C:attention}not destroy Jokers",
|
||||
"{C:jane_RGB}#3#{}#4#{X:black,C:jane_RGB,s:1.5}#5#{C:spectral}#6#{C:chips}#7#{}#8#{C:mult}#9#",
|
||||
"{C:inactive,s:1.25}#10#{C:attention,s:1.25}#11#{C:inactive,s:1.25}#12#{C:inactive}#13#",
|
||||
}
|
||||
text = Cryptid and {
|
||||
"{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:spectral}Ankh {}will {C:attention}not destroy Jokers",
|
||||
"{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#",
|
||||
},
|
||||
},
|
||||
config = {extra = {karma = 0, max_karma = Cryptid and 10 or 5}},
|
||||
config = {extra = {karma = 0, max_karma = Cryptid 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(_, _, card)
|
||||
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] = G.P_CENTERS.c_ankh
|
||||
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
|
||||
|
||||
local extra = card.ability.extra
|
||||
local karma = extra.karma
|
||||
local max_karma = extra.max_karma
|
||||
local attuned = karma >= max_karma
|
||||
|
||||
return {vars = {
|
||||
attuned and " (Attuned)" or "",
|
||||
Cryptid and "Ankh and Gateway" or "Ankh",
|
||||
attuned and "" or "Attune ",
|
||||
attuned and "" or "after using ",
|
||||
attuned and (Cryptid and "^^" or "^") .. attunement or max_karma,
|
||||
attuned and "" or (Cryptid and " Gateways" or " Ankh or Soul Cards"),
|
||||
attuned and " Chips " or "",
|
||||
attuned and "& " or "",
|
||||
attuned and "Mult" or "",
|
||||
attuned and "" or "[",
|
||||
attuned and "" or karma,
|
||||
attuned and "" or " / " .. max_karma .. "]",
|
||||
attuned and "(Cannot be debuffed)" or "",
|
||||
}}
|
||||
return {
|
||||
vars = Cryptid and {
|
||||
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 "",
|
||||
},
|
||||
}
|
||||
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.karma >= extra.max_karma and 2 or 1, y = 0})
|
||||
card.children.floating_sprite:set_sprite_pos({x = extra.is_attuned and 2 or 1, y = 0})
|
||||
end
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
local extra = card.ability.extra
|
||||
local max_karma = extra.max_karma
|
||||
extra.is_attuned = extra.is_attuned and extra.karma >= max_karma
|
||||
|
||||
local function ascend()
|
||||
if extra.is_attuning then
|
||||
return
|
||||
end
|
||||
|
||||
extra.is_attuning = true
|
||||
|
||||
Jane.card_status_text(
|
||||
card,
|
||||
"!!!",
|
||||
nil,
|
||||
0.05 * card.T.h,
|
||||
G.C.DARK_EDITION,
|
||||
0.6,
|
||||
0.6,
|
||||
2,
|
||||
2,
|
||||
"bm",
|
||||
"jane_enlightened"
|
||||
)
|
||||
|
||||
Jane.q(function()
|
||||
card:flip()
|
||||
play_sound("card1")
|
||||
end, 0.1)
|
||||
|
||||
Jane.q(function()
|
||||
card:flip()
|
||||
card:juice_up(1, 1)
|
||||
play_sound("card1")
|
||||
extra.is_attuned = true
|
||||
end, 1)
|
||||
end
|
||||
|
||||
if extra.is_attuned then
|
||||
card.debuff = false
|
||||
|
||||
if extra.karma >= max_karma then
|
||||
if card.ability then
|
||||
card.ability.perishable = false
|
||||
card.ability.perish_tally = 1e9
|
||||
end
|
||||
|
||||
card.debuff = false
|
||||
|
||||
if not context.joker_main then
|
||||
if Cryptid and not context.joker_main then
|
||||
return
|
||||
end
|
||||
|
||||
return {
|
||||
card = card,
|
||||
colour = G.C.jane_RGB,
|
||||
sound = "talisman_eeechip",
|
||||
message = "^^" .. attunement .. " Chips & Mult",
|
||||
[Cryptid and "EEchip_mod" or "Echip_mod"] = attunement,
|
||||
[Cryptid and "EEmult_mod" or "Emult_mod"] = attunement,
|
||||
}, true
|
||||
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",
|
||||
[Cryptid and "EEchip_mod" or "Echip_mod"] = attune,
|
||||
[Cryptid and "EEmult_mod" or "Emult_mod"] = attune,
|
||||
message = (Cryptid and "^^" or "^") .. attune .. " Chips & Mult",
|
||||
},
|
||||
})[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
|
||||
ascend()
|
||||
end
|
||||
|
||||
if not (not context.blueprint and
|
||||
(not context.retrigger_joker_check and not context.retrigger_joker) and
|
||||
context.using_consumeable and
|
||||
context.consumeable) then
|
||||
(not context.retrigger_joker_check and not context.retrigger_joker) and
|
||||
context.using_consumeable and
|
||||
context.consumeable) then
|
||||
return
|
||||
end
|
||||
|
||||
local key = context.consumeable:gc().key
|
||||
|
||||
-- TODO: Make ankh not destroy jokers
|
||||
if Cryptid and key ~= "c_cry_gateway" or not Cryptid and (key ~= "c_ankh" and key ~= "c_soul") then
|
||||
return
|
||||
end
|
||||
|
|
@ -518,39 +667,8 @@ SMODS.Joker {
|
|||
return
|
||||
end
|
||||
|
||||
Jane.card_status_text(
|
||||
card,
|
||||
"!!!",
|
||||
nil,
|
||||
0.05 * card.T.h,
|
||||
G.C.DARK_EDITION,
|
||||
0.6,
|
||||
0.6,
|
||||
2,
|
||||
2,
|
||||
"bm",
|
||||
"jane_enlightened"
|
||||
)
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
delay = 0.1,
|
||||
func = function()
|
||||
card:flip()
|
||||
play_sound("card1")
|
||||
return true
|
||||
end
|
||||
}))
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
delay = 1,
|
||||
func = function()
|
||||
card:flip()
|
||||
card:juice_up(1, 1)
|
||||
play_sound("card1")
|
||||
return true
|
||||
end
|
||||
}))
|
||||
end
|
||||
ascend()
|
||||
end,
|
||||
}
|
||||
|
||||
if Cryptid then
|
||||
|
|
@ -567,13 +685,19 @@ SMODS.Joker {
|
|||
"Clogs up your Joker slots",
|
||||
"{C:attention}Duplicates itself{} at the",
|
||||
"end of {C:attention}every ante",
|
||||
}
|
||||
},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
soul_pos = {x = 1, y = 0},
|
||||
cost = 1,
|
||||
rarity = "jane_junk",
|
||||
in_pool = function (_, _)
|
||||
in_pool = function(_, _)
|
||||
for _, v in pairs(SMODS.find_card("j_jane_honey")) do
|
||||
if tonumber(v.ability.extra.level) == #Jane.rarity_ids - 1 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return not not next(SMODS.find_card("j_jane_rot"))
|
||||
end,
|
||||
calculate = function(_, card, context)
|
||||
|
|
@ -581,17 +705,11 @@ SMODS.Joker {
|
|||
return G.jokers.config.card_count < G.jokers.config.card_limit
|
||||
end
|
||||
|
||||
local function is_end_of_ante()
|
||||
return not context.individual and not
|
||||
context.repetition and not
|
||||
card.debuff and
|
||||
context.end_of_round and not
|
||||
context.blueprint and
|
||||
G.GAME.blind.boss and not
|
||||
(G.GAME.blind.config and G.GAME.blind.config.bonus)
|
||||
end
|
||||
|
||||
local function spawn()
|
||||
if card.cloned then
|
||||
return
|
||||
end
|
||||
|
||||
local rot = copy_card(card)
|
||||
rot.cloned = true
|
||||
rot:add_to_deck()
|
||||
|
|
@ -599,10 +717,10 @@ SMODS.Joker {
|
|||
Jane.card_status_text(rot, "...", nil, 0.05 * card.T.h, G.C.BLACK, 3, 0, 0, nil, "bm")
|
||||
end
|
||||
|
||||
if has_room() and not card.cloned and is_end_of_ante() then
|
||||
spawn()
|
||||
if has_room() and not card.cloned and Jane.is_end_of_ante(context, card) then
|
||||
Jane.q(spawn, 0.5)
|
||||
else
|
||||
card.cloned = false
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
|
|
|||
257
src/spectral.lua
257
src/spectral.lua
|
|
@ -2,7 +2,7 @@ SMODS.Atlas {
|
|||
key = "janertarots",
|
||||
px = 71,
|
||||
py = 95,
|
||||
path = Jane.config.texture_pack .. "/c_jane_reversetarots.png"
|
||||
path = Jane.config.texture_pack .. "/c_jane_reversetarots.png",
|
||||
}
|
||||
|
||||
SMODS.Sound({key = "draw", path = "draw.ogg"})
|
||||
|
|
@ -12,61 +12,51 @@ local function conjure(card, number)
|
|||
math.ceil(card.ability.extra.spectrals) * number,
|
||||
G.consumeables.config.card_limit - #G.consumeables.cards
|
||||
) do
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.4,
|
||||
func = function()
|
||||
if G.consumeables.config.card_limit <= #G.consumeables.cards then
|
||||
return true
|
||||
end
|
||||
|
||||
play_sound("jane_draw")
|
||||
local spectral = create_card("Spectral", G.consumeables, nil, nil, nil, nil, nil, "pri")
|
||||
spectral:add_to_deck()
|
||||
G.consumeables:emplace(spectral)
|
||||
card:juice_up(0.3, 0.5)
|
||||
return true
|
||||
Jane.q(function()
|
||||
if G.consumeables.config.card_limit <= #G.consumeables.cards then
|
||||
return
|
||||
end
|
||||
}))
|
||||
|
||||
play_sound("jane_draw")
|
||||
local spectral = create_card("Spectral", G.consumeables, nil, nil, nil, nil, nil, "pri")
|
||||
spectral:add_to_deck()
|
||||
G.consumeables:emplace(spectral)
|
||||
card:juice_up(0.3, 0.5)
|
||||
end, 0.4)
|
||||
end
|
||||
end
|
||||
|
||||
local function createfulldeck(enhancement, edition, amount, emplacement)
|
||||
local function create_full_deck(enhancement, edition, amount, emplacement)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(G.P_CARDS) do
|
||||
for i = 1, (amount or 1) do
|
||||
G.E_MANAGER:add_event(Event({
|
||||
delay = 0.1,
|
||||
func = function()
|
||||
cards[i] = true
|
||||
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
|
||||
for i = 1, amount or 1 do
|
||||
Jane.q(function()
|
||||
cards[i] = true
|
||||
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
|
||||
|
||||
local card = Card(
|
||||
G.play.T.x + G.play.T.w / 2,
|
||||
G.play.T.y, G.CARD_W, G.CARD_H,
|
||||
v,
|
||||
enhancement or G.P_CENTERS.c_base,
|
||||
{playing_card = G.playing_card}
|
||||
)
|
||||
local card = Card(
|
||||
G.play.T.x + G.play.T.w / 2,
|
||||
G.play.T.y, G.CARD_W, G.CARD_H,
|
||||
v,
|
||||
enhancement or G.P_CENTERS.c_base,
|
||||
{playing_card = G.playing_card}
|
||||
)
|
||||
|
||||
if edition then
|
||||
card:set_edition(type(edition) == "table" and edition or {[edition] = true}, true, true)
|
||||
end
|
||||
|
||||
play_sound("card1")
|
||||
table.insert(G.playing_cards, card)
|
||||
card:add_to_deck()
|
||||
|
||||
if emplacement then
|
||||
emplacement:emplace(card)
|
||||
else
|
||||
G.deck:emplace(card)
|
||||
end
|
||||
|
||||
return true
|
||||
if edition then
|
||||
card:set_edition(type(edition) == "table" and edition or {[edition] = true}, true, true)
|
||||
end
|
||||
}))
|
||||
|
||||
play_sound("card1")
|
||||
table.insert(G.playing_cards, card)
|
||||
card:add_to_deck()
|
||||
|
||||
if emplacement then
|
||||
emplacement:emplace(card)
|
||||
else
|
||||
G.deck:emplace(card)
|
||||
end
|
||||
end, 0.1)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -74,13 +64,6 @@ local function createfulldeck(enhancement, edition, amount, emplacement)
|
|||
if next(cards) then
|
||||
playing_card_joker_effects(cards)
|
||||
end
|
||||
|
||||
return true
|
||||
end)
|
||||
|
||||
Jane.q(function()
|
||||
cards = nil
|
||||
return true
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
@ -90,7 +73,7 @@ local function randomize(targets, noanim)
|
|||
end
|
||||
|
||||
if noanim then
|
||||
for i=1, #targets do
|
||||
for i = 1, #targets do
|
||||
local card = targets[i]
|
||||
card:set_base(pseudorandom_element(G.P_CARDS))
|
||||
|
||||
|
|
@ -125,16 +108,11 @@ local function randomize(targets, noanim)
|
|||
for i = 1, #targets do
|
||||
local percent = 1.15 - (i - 0.999) / (#G.hand.cards - 0.998) * 0.3
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.15,
|
||||
func = function()
|
||||
targets[i]:flip()
|
||||
play_sound("card1", percent)
|
||||
targets[i]:juice_up(0.3, 0.3)
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
targets[i]:flip()
|
||||
play_sound("card1", percent)
|
||||
targets[i]:juice_up(0.3, 0.3)
|
||||
end, 0.15)
|
||||
end
|
||||
|
||||
delay(0.2)
|
||||
|
|
@ -142,39 +120,34 @@ local function randomize(targets, noanim)
|
|||
for i = 1, #targets do
|
||||
local percent = 0.85 + (i - 0.999) / (#G.hand.cards - 0.998) * 0.3
|
||||
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.1,
|
||||
func = function()
|
||||
local card = targets[i]
|
||||
card:set_base(pseudorandom_element(G.P_CARDS))
|
||||
card:set_ability(pseudorandom_element(G.P_CENTER_POOLS["Enhanced"]))
|
||||
Jane.q(function()
|
||||
local card = targets[i]
|
||||
card:set_base(pseudorandom_element(G.P_CARDS))
|
||||
card:set_ability(pseudorandom_element(G.P_CENTER_POOLS["Enhanced"]))
|
||||
|
||||
local edition_rate = 2
|
||||
card:set_edition(poll_edition("standard_edition" .. G.GAME.round_resets.ante, edition_rate, true))
|
||||
local seal_rate = 10
|
||||
local seal_poll = pseudorandom(pseudoseed("stdseal" .. G.GAME.round_resets.ante))
|
||||
local edition_rate = 2
|
||||
card:set_edition(poll_edition("standard_edition" .. G.GAME.round_resets.ante, edition_rate, true))
|
||||
local seal_rate = 10
|
||||
local seal_poll = pseudorandom(pseudoseed("stdseal" .. G.GAME.round_resets.ante))
|
||||
|
||||
if seal_poll > 1 - 0.02 * seal_rate then
|
||||
local seal_type = pseudorandom(pseudoseed("stdsealtype" .. G.GAME.round_resets.ante))
|
||||
local seal_list = {}
|
||||
if seal_poll > 1 - 0.02 * seal_rate then
|
||||
local seal_type = pseudorandom(pseudoseed("stdsealtype" .. G.GAME.round_resets.ante))
|
||||
local seal_list = {}
|
||||
|
||||
for k, _ in pairs(G.P_SEALS) do
|
||||
table.insert(seal_list, k)
|
||||
end
|
||||
|
||||
seal_type = math.floor(seal_type * #seal_list)
|
||||
card:set_seal(seal_list[seal_type])
|
||||
else
|
||||
card:set_seal()
|
||||
for k, _ in pairs(G.P_SEALS) do
|
||||
table.insert(seal_list, k)
|
||||
end
|
||||
|
||||
card:flip()
|
||||
play_sound("card3", percent, 0.6)
|
||||
card:juice_up(0.3, 0.3)
|
||||
return true
|
||||
seal_type = math.floor(seal_type * #seal_list)
|
||||
card:set_seal(seal_list[seal_type])
|
||||
else
|
||||
card:set_seal()
|
||||
end
|
||||
}))
|
||||
|
||||
card:flip()
|
||||
play_sound("card3", percent, 0.6)
|
||||
card:juice_up(0.3, 0.3)
|
||||
end, 0.1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -189,27 +162,22 @@ SMODS.Consumable {
|
|||
"{C:green,E:1}Randomises{} all cards in hand",
|
||||
"{C:inactive}(Rank, seal, edition,",
|
||||
"{C:inactive}enhancement, and suit)",
|
||||
}
|
||||
},
|
||||
},
|
||||
pos = {x = 0, y = 4},
|
||||
cost = 4,
|
||||
can_use = function(_, _)
|
||||
return Jane.canuse() and #((G.hand or {}).cards or {}) > 0
|
||||
return Jane.can_use() and #((G.hand or {}).cards or {}) > 0
|
||||
end,
|
||||
use = function(_, card, _, _)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.4,
|
||||
func = function()
|
||||
play_sound("tarot1")
|
||||
card:juice_up(0.3, 0.5)
|
||||
return true
|
||||
end
|
||||
}))
|
||||
Jane.q(function()
|
||||
play_sound("tarot1")
|
||||
card:juice_up(0.3, 0.5)
|
||||
end, 0.4)
|
||||
|
||||
randomize(G.hand.cards)
|
||||
delay(0.5)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
SMODS.Consumable {
|
||||
|
|
@ -220,17 +188,17 @@ SMODS.Consumable {
|
|||
name = "Conjure",
|
||||
text = {
|
||||
"Creates {C:attention}#1#",
|
||||
"{C:spectral}Spectral{} cards",
|
||||
"{C:spectral}Spectral {}cards",
|
||||
"{C:inactive}(Must have room)",
|
||||
}
|
||||
},
|
||||
},
|
||||
config = {extra = {spectrals = 2}},
|
||||
pos = {x = 2, y = 4},
|
||||
cost = 4,
|
||||
loc_vars = function(self, info_queue, center)
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {math.ceil(center.ability.extra.spectrals)}}
|
||||
end,
|
||||
can_use = Jane.canuse,
|
||||
can_use = Jane.can_use,
|
||||
use = function(_, card, _, _)
|
||||
conjure(card, 1)
|
||||
delay(0.6)
|
||||
|
|
@ -238,9 +206,11 @@ SMODS.Consumable {
|
|||
bulk_use = function(_, card, _, _, number)
|
||||
conjure(card, number)
|
||||
delay(0.6)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local shadows_limit = 25
|
||||
|
||||
SMODS.Consumable {
|
||||
key = "shadows",
|
||||
set = "Spectral",
|
||||
|
|
@ -249,19 +219,19 @@ SMODS.Consumable {
|
|||
name = "Shadows",
|
||||
text = {
|
||||
"Create {C:attention}#1#{} {C:green}random {C:dark_edition}Negative",
|
||||
"{C:attention}Perishable {C:attention}Jokers{}, set",
|
||||
"{C:money}sell value{} of {C:attention}all Jokers{} to {C:money}$0",
|
||||
}
|
||||
"{C:attention}Perishable {C:attention}Jokers{}, set {C:money}sell",
|
||||
"{C:money}value {}of {C:attention}all Jokers {}to {C:money}$0",
|
||||
},
|
||||
},
|
||||
config = {extra = {shadows = 2}},
|
||||
pos = {x = 3, y = 4},
|
||||
cost = 4,
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {((center.ability or {}).extra or {}).shadows or 2}}
|
||||
loc_vars = function(_, _, card)
|
||||
return {vars = {math.min(((card.ability or {}).extra or {}).shadows or 2, shadows_limit)}}
|
||||
end,
|
||||
can_use = Jane.canuse,
|
||||
can_use = Jane.can_use,
|
||||
use = function(_, card, _, _)
|
||||
for _ = 1, card.ability.extra.shadows do
|
||||
for _ = 1, math.min(card.ability.extra.shadows, shadows_limit) do
|
||||
local joker = create_card("Joker", G.jokers, nil, nil, nil, nil, nil, "phantom")
|
||||
joker:set_edition({negative = true})
|
||||
joker.ability.eternal = false
|
||||
|
|
@ -278,11 +248,13 @@ SMODS.Consumable {
|
|||
G.jokers.cards[i].extra_cost = 0
|
||||
G.jokers.cards[i].cost = 0
|
||||
G.jokers.cards[i].sell_cost = 0
|
||||
G.jokers.cards[i].sell_cost_label = G.jokers.cards[i].facing == "back" and "?" or G.jokers.cards[i].sell_cost
|
||||
|
||||
G.jokers.cards[i].sell_cost_label = G.jokers.cards[i].facing == "back" and "?" or
|
||||
G.jokers.cards[i].sell_cost
|
||||
end
|
||||
end,
|
||||
bulk_use = function(_, card, _, _, number)
|
||||
for _ = 1, card.ability.extra.shadows * number do
|
||||
for _ = 1, math.min(card.ability.extra.shadows, 25) * number do
|
||||
local joker = create_card("Joker", G.jokers, nil, nil, nil, nil, nil, "phantom")
|
||||
joker.no_forced_edition = true
|
||||
joker:set_edition({negative = true})
|
||||
|
|
@ -301,54 +273,35 @@ SMODS.Consumable {
|
|||
G.jokers.cards[i].extra_cost = 0
|
||||
G.jokers.cards[i].cost = 0
|
||||
G.jokers.cards[i].sell_cost = 0
|
||||
G.jokers.cards[i].sell_cost_label = G.jokers.cards[i].facing == "back" and "?" or G.jokers.cards[i].sell_cost
|
||||
|
||||
G.jokers.cards[i].sell_cost_label = G.jokers.cards[i].facing == "back" and "?" or
|
||||
G.jokers.cards[i].sell_cost
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
|
||||
SMODS.Consumable {
|
||||
key = "reverse_hanged_man",
|
||||
atlas = "janertarots",
|
||||
key = "rift",
|
||||
atlas = "janeacc",
|
||||
set = "Spectral",
|
||||
loc_txt = {
|
||||
name = "Zen",
|
||||
name = "Rift",
|
||||
text = {
|
||||
"{C:attention}Reset{} your deck to",
|
||||
"a {C:attention}standard 52-card deck"
|
||||
}
|
||||
"{C:attention}Reset {}your deck to a",
|
||||
"{C:attention}standard 52-card deck",
|
||||
},
|
||||
},
|
||||
config = {extra = {destruction = 0.5}},
|
||||
pos = {x = 7, y = 1},
|
||||
cost = 15,
|
||||
loc_vars = function(_, _, center)
|
||||
return {vars = {
|
||||
math.min(100, center.ability.extra.destruction * 100),
|
||||
math.ceil(#(G.playing_cards or {}) * center.ability.extra.destruction)
|
||||
}}
|
||||
end,
|
||||
can_use = Jane.canuse,
|
||||
pos = {x = 4, y = 4},
|
||||
cost = 4,
|
||||
can_use = Jane.can_use,
|
||||
use = function(_, _, _, _)
|
||||
Jane.q(function()
|
||||
for _, v in pairs(G.playing_cards) do
|
||||
v:start_dissolve()
|
||||
end
|
||||
|
||||
return true
|
||||
end)
|
||||
|
||||
local function realdelay(time, queue)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
timer = "REAL",
|
||||
delay = time or 1,
|
||||
func = function()
|
||||
return true
|
||||
end
|
||||
}), queue)
|
||||
end
|
||||
|
||||
realdelay(1)
|
||||
createfulldeck()
|
||||
end
|
||||
delay(2)
|
||||
create_full_deck()
|
||||
end,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,30 +1,40 @@
|
|||
local function j()
|
||||
return G.GAME.used_vouchers.v_jane_jolly_voucher and "j_jolly" or "j_joker"
|
||||
end
|
||||
|
||||
local required = 2
|
||||
|
||||
local function get_uses()
|
||||
G.GAME.joker_in_a_tarot = G.GAME.joker_in_a_tarot or 0
|
||||
return G.GAME.joker_in_a_tarot
|
||||
end
|
||||
|
||||
local blurbs = {
|
||||
"M!",
|
||||
"Hey! Pick me!",
|
||||
"You wouldn't say no to a free negative me, would you?",
|
||||
"Sometimes, an extra four mult goes a long way!",
|
||||
"Hee-hee, hoo-hoo!",
|
||||
"Looks like the joke is on you!",
|
||||
"Ouch, I think the joke is on me!",
|
||||
"I won't take up space, I promise!",
|
||||
"Don't ask how I ended up in a tarot!",
|
||||
"Hee-hee, hoo-hoo!",
|
||||
"Who knew even fortunes could be a circus act?",
|
||||
"Looks like the joke is on the crystal globe!",
|
||||
"It's a little cramped in this tarot...!",
|
||||
"Ouch, I think the joke is on me!",
|
||||
"Looks like the joke is on you!",
|
||||
"I'm not just a clown; I'm the whole circus!",
|
||||
"Seems a little suspicious for a jolly old fella like me to be in this card...",
|
||||
"I can't help if I'm still in this silly old card, break me out!",
|
||||
"Let me tell you, you'd love the show going on in this tarot!",
|
||||
"I'd give you more tickets to JimCon, but I'm fresh out.",
|
||||
"I've heard of a round buffoon that lives in a pretty funky town...",
|
||||
"I can't give four mult if I'm still in this card!",
|
||||
"I'm rooting for you! Even if it means I'll never get out of this card...",
|
||||
"Who knew I'd have access to a great show? That show being you!",
|
||||
"The stakes are only gonna rise here!",
|
||||
"Juggling is one of my favourite passtimes!",
|
||||
"I wonder what's the deal with pairs?",
|
||||
"It's a little cramped in this tarot...!",
|
||||
"Juggling is one of my favourite passtimes!",
|
||||
"I'm not just a clown; I'm the whole circus!",
|
||||
"Looks like the joke is on the crystal globe!",
|
||||
"Who knew even fortunes could be a circus act?",
|
||||
"Sometimes, an extra four mult goes a long way!",
|
||||
"I can't give four mult if I'm still in this card!",
|
||||
"You wouldn't say no to a free negative me, would you?",
|
||||
"I'd give you more tickets to JimCon, but I'm fresh out.",
|
||||
"Let me tell you, you'd love the show going on in this tarot!",
|
||||
"Who knew I'd have access to a great show? That show being you!",
|
||||
"I can't help if I'm still in this silly old card, break me out!",
|
||||
"I've heard of a round buffoon that lives in a pretty funky town...",
|
||||
"You don't need to understand math to enjoy watching the digits climb!",
|
||||
"You should meet my friend Joseph; he's stuck in a Planet card!",
|
||||
"M!",
|
||||
"I'm rooting for you! Even if it means I'll never get out of this card...",
|
||||
"Seems a little suspicious for a jolly old fella like me to be in this card...",
|
||||
}
|
||||
|
||||
SMODS.Consumable {
|
||||
|
|
@ -32,20 +42,41 @@ SMODS.Consumable {
|
|||
atlas = "janeacc",
|
||||
set = "Tarot",
|
||||
loc_txt = {
|
||||
name = "Joker-in-a-Tarot",
|
||||
name = "#1#-in-a-Tarot",
|
||||
text = {
|
||||
"Create a {C:dark_edition}Negative {C:attention}default Joker",
|
||||
"{C:inactive,E:1}#1#{}"
|
||||
}
|
||||
"Create a {C:dark_edition}Negative {C:attention}#2#",
|
||||
"after {C:attention}#3# {}uses {C:inactive}(#4# left)",
|
||||
"{C:inactive,E:1}#5#{}",
|
||||
},
|
||||
},
|
||||
loc_vars = function(_, _, _)
|
||||
return {vars = {blurbs[math.random(#blurbs)]}}
|
||||
loc_vars = function(_, info_queue, card)
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS[j()]
|
||||
local is_jolly = G.GAME.used_vouchers.v_jane_jolly_voucher
|
||||
|
||||
card.blurb = not card.fake_card and
|
||||
(card.blurb or pseudorandom_element(blurbs, pseudoseed("jokerinatarotblurbs"))) or ""
|
||||
|
||||
if is_jolly then
|
||||
card.blurb = card.blurb:gsub("four", "eight")
|
||||
end
|
||||
|
||||
local desc = is_jolly and "Jolly Joker" or "default Joker"
|
||||
local name = is_jolly and "Jolly" or "Joker"
|
||||
return {vars = {name, desc, required, required - get_uses(), card.blurb}}
|
||||
end,
|
||||
pos = {x = 0, y = 1},
|
||||
cost = 3,
|
||||
can_use = Jane.canuse,
|
||||
cost = 4,
|
||||
can_use = Jane.can_use,
|
||||
use = function(_, _, _, _)
|
||||
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_joker", "jokerfromatarot")
|
||||
local uses = get_uses() + 1
|
||||
|
||||
if uses < required then
|
||||
G.GAME.joker_in_a_tarot = uses
|
||||
return
|
||||
end
|
||||
|
||||
G.GAME.joker_in_a_tarot = 0
|
||||
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, j(), "jokerfromatarot")
|
||||
card:set_edition({negative = true}, true)
|
||||
card.cost = 1
|
||||
card.base_cost = 1
|
||||
|
|
@ -59,5 +90,12 @@ SMODS.Consumable {
|
|||
for _ = 1, number do
|
||||
self:use(card, area, copier)
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
if Cryptid 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"
|
||||
Cryptid.aliases["jolly-in-a-tarot"] = "c_jane_jokerinatarot"
|
||||
end
|
||||
|
|
|
|||
121
src/token.lua
121
src/token.lua
|
|
@ -2,7 +2,7 @@ SMODS.Atlas {
|
|||
key = "janetokens",
|
||||
px = 71,
|
||||
py = 95,
|
||||
path = Jane.config.texture_pack .. "/c_jane_tokens.png"
|
||||
path = Jane.config.texture_pack .. "/c_jane_tokens.png",
|
||||
}
|
||||
|
||||
SMODS.Sound({key = "e_gilded", path = "e_gilded.ogg"})
|
||||
|
|
@ -12,43 +12,83 @@ SMODS.ConsumableType {
|
|||
default = "c_jane_token_tag_standard",
|
||||
loc_txt = {
|
||||
collection = "Tokens",
|
||||
name = "Token"
|
||||
name = "Token",
|
||||
},
|
||||
shop_rate = 0,
|
||||
collection_rows = {6, 6},
|
||||
collection_rows = {5, 6},
|
||||
primary_colour = G.C.CHIPS,
|
||||
secondary_colour = G.C.VOUCHER,
|
||||
}
|
||||
|
||||
local function on_token_use(id)
|
||||
local t = Tag(id)
|
||||
|
||||
if id == "tag_orbital" then
|
||||
local hands = {}
|
||||
|
||||
for k, v in pairs(G.GAME.hands) do
|
||||
if v.visible then
|
||||
hands[#hands + 1] = k
|
||||
end
|
||||
end
|
||||
|
||||
t.ability.orbital_hand = pseudorandom_element(hands, pseudoseed("jane_token_orbital"))
|
||||
end
|
||||
|
||||
add_tag(t)
|
||||
end
|
||||
|
||||
local vowels = {A = true, E = true, I = true, O = true, U = true}
|
||||
|
||||
for _, v in pairs({
|
||||
{"tag_standard", "Standard", 0, 0, 3},
|
||||
{"tag_charm", "Charm", 1, 0, 5},
|
||||
{"tag_meteor", "Meteor", 2, 0, 5},
|
||||
{"tag_ethereal", "Ethereal", 3, 0, 5},
|
||||
{"tag_buffoon", "Buffoon", 4, 0, 8},
|
||||
{"tag_cry_bundle", "Bundle", 1, 1, 10},
|
||||
{"tag_uncommon", "Uncommon", 2, 1, 3},
|
||||
{"tag_rare", "Rare", 3, 1, 5},
|
||||
{"tag_cry_epic", "Epic", 4, 1, 8},
|
||||
{"tag_foil", "Foil", 1, 3, 3},
|
||||
{"tag_holo", "Holographic", 2, 3, 4},
|
||||
{"tag_polychrome", "Polychrome", 3, 3, 5},
|
||||
{"tag_negative", "Negative", 4, 3, 10},
|
||||
{"tag_investment", "Investment", 0, 3, 8},
|
||||
{"tag_voucher", "Voucher", 4, 5, 5},
|
||||
{"tag_handy", "Handy", 1, 5, 8},
|
||||
{"tag_garbage", "Garbage", 0, 5, 6},
|
||||
{"tag_coupon", "Coupon", 4, 4, 10},
|
||||
{"tag_juggle", "Juggle", 2, 5, 2},
|
||||
{"tag_d_six", "Dice", 0, 4, 2},
|
||||
{"tag_top_up", "Top-up", 2, 4, 2},
|
||||
{"tag_skip", "Speed", 4, 2, 7},
|
||||
{"tag_economy", "Economy", 5, 2, 10},
|
||||
{"tag_double", "Double", 0, 2, 6},
|
||||
{"tag_cry_triple", "Triple", 1, 2, 8},
|
||||
{"tag_cry_quadruple", "Quadruple", 2, 2, 10},
|
||||
{"tag_cry_quintuple", "Quintuple", 3, 2, 13},
|
||||
{"tag_cry_memory", "Memory", 5, 4, 8}
|
||||
{"tag_standard", "Standard", 0, 0, 3},
|
||||
{"tag_charm", "Charm", 1, 0, 5},
|
||||
{"tag_meteor", "Meteor", 2, 0, 5},
|
||||
{"tag_ethereal", "Ethereal", 3, 0, 5},
|
||||
{"tag_buffoon", "Buffoon", 4, 0, 8},
|
||||
{"tag_cry_console", "Console", 5, 0, 7},
|
||||
{"tag_cry_loss", "Loss", 0, 1, 12},
|
||||
{"tag_cry_bundle", "Bundle", 1, 1, 10},
|
||||
{"tag_uncommon", "Uncommon", 2, 1, 3},
|
||||
{"tag_rare", "Rare", 3, 1, 5},
|
||||
{"tag_cry_epic", "Epic", 4, 1, 8},
|
||||
{"tag_cry_gourmond", "Gourmond", 5, 1, 4},
|
||||
{"tag_double", "Double", 0, 2, 6},
|
||||
{"tag_cry_triple", "Triple", 1, 2, 8},
|
||||
{"tag_cry_quadruple", "Quadruple", 2, 2, 10},
|
||||
{"tag_cry_quintuple", "Quintuple", 3, 2, 13},
|
||||
{"tag_skip", "Speed", 4, 2, 7},
|
||||
{"tag_economy", "Economy", 5, 2, 10},
|
||||
{"tag_investment", "Investment", 0, 3, 8},
|
||||
{"tag_foil", "Foil", 1, 3, 3},
|
||||
{"tag_holo", "Holographic", 2, 3, 4},
|
||||
{"tag_polychrome", "Polychrome", 3, 3, 5},
|
||||
{"tag_negative", "Negative", 4, 3, 10},
|
||||
{"tag_d_six", "Dice", 0, 4, 2},
|
||||
{"tag_orbital", "Orbital", 1, 4, 6},
|
||||
{"tag_top_up", "Top-up", 2, 4, 2},
|
||||
{"tag_cry_bettertop_up", "Top-up+", 3, 4, 3},
|
||||
{"tag_coupon", "Coupon", 4, 4, 10},
|
||||
{"tag_cry_memory", "Memory", 5, 4, 8},
|
||||
{"tag_garbage", "Garbage", 0, 5, 6},
|
||||
{"tag_handy", "Handy", 1, 5, 8},
|
||||
{"tag_juggle", "Juggle", 2, 5, 2},
|
||||
{"tag_cry_schematic", "Schematic", 3, 5, 10},
|
||||
{"tag_voucher", "Voucher", 4, 5, 5},
|
||||
{"tag_cry_better_voucher", "Voucher+", 5, 5, 7},
|
||||
{"tag_cry_gambler", "Gamble", 0, 6, 10},
|
||||
{"tag_cry_cat", "Cat", 1, 6, 1},
|
||||
{"tag_cry_mosaic", "Mosaic", 2, 6, 6},
|
||||
{"tag_cry_glass", "Fragile", 3, 6, 7},
|
||||
{"tag_cry_astral", "Astral", 4, 6, 8},
|
||||
{"tag_cry_m", "M", 5, 6, 8},
|
||||
{"tag_cry_blur", "Blurred", 0, 7, 11},
|
||||
{"tag_cry_oversat", "Oversaturated", 1, 7, 12},
|
||||
{"tag_cry_glitched", "Glitched", 2, 7, 13},
|
||||
{"tag_cry_gold", "Golden", 3, 7, 9},
|
||||
{"tag_cry_booster", "Booster", 4, 7, 4},
|
||||
{"tag_cry_scope", "Scope", 5, 7, 3},
|
||||
{"tag_cry_banana", "Banana", 0, 8, 4},
|
||||
}) do
|
||||
if Cryptid or v[1]:sub(1, 7) ~= "tag_cry" then
|
||||
SMODS.Consumable {
|
||||
|
|
@ -57,30 +97,31 @@ for _, v in pairs({
|
|||
atlas = "janetokens",
|
||||
loc_txt = {
|
||||
name = v[2] .. " Token",
|
||||
text = {
|
||||
"Use to create a",
|
||||
"{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
|
||||
return {vars = {}}
|
||||
end,
|
||||
pos = {x = v[3], y = v[4]},
|
||||
cost = v[5],
|
||||
can_stack = true,
|
||||
can_divide = true,
|
||||
can_use = Jane.canuse,
|
||||
in_pool = function (_, _)
|
||||
can_use = Jane.can_use,
|
||||
in_pool = function(_, _)
|
||||
return G.GAME.used_vouchers.v_jane_token_voucher
|
||||
end,
|
||||
use = function(_, _, _, _)
|
||||
play_sound("jane_e_gilded", 1.25, 0.4)
|
||||
add_tag(Tag(v[1]))
|
||||
on_token_use(v[1])
|
||||
end,
|
||||
bulk_use = function(_, _, _, _, number)
|
||||
play_sound("jane_e_gilded", 1.25, 0.4)
|
||||
|
||||
for _ = 1, number do
|
||||
add_tag(Tag(v[1]))
|
||||
on_token_use(v[1])
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,8 +1,31 @@
|
|||
SMODS.Atlas {
|
||||
key = "janejollyvoucher",
|
||||
px = 71,
|
||||
py = 95,
|
||||
path = Jane.config.texture_pack .. "/v_jane_jolly_voucher.png",
|
||||
}
|
||||
|
||||
SMODS.Atlas {
|
||||
key = "janetokenvoucher",
|
||||
px = 71,
|
||||
py = 95,
|
||||
path = Jane.config.texture_pack .. "/v_jane_token_voucher.png"
|
||||
path = Jane.config.texture_pack .. "/v_jane_token_voucher.png",
|
||||
}
|
||||
|
||||
SMODS.Voucher {
|
||||
key = "jolly_voucher",
|
||||
atlas = "janejollyvoucher",
|
||||
loc_txt = {
|
||||
name = "Jolly Voucher",
|
||||
text = {"{C:attention,T:c_jane_jokerinatarot}Joker-in-a-Tarot {}creates", "{C:attention,T:j_jolly}Jolly Joker {}instead"},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 8,
|
||||
loc_vars = function(_, info_queue, _)
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.c_jane_jokerinatarot
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.j_jolly
|
||||
return {vars = {}}
|
||||
end,
|
||||
}
|
||||
|
||||
SMODS.Voucher {
|
||||
|
|
@ -10,14 +33,11 @@ SMODS.Voucher {
|
|||
atlas = "janetokenvoucher",
|
||||
loc_txt = {
|
||||
name = "Token Voucher",
|
||||
text = {
|
||||
"{C:attention}Tokens {}can appear",
|
||||
"in the shop",
|
||||
}
|
||||
text = {"{C:attention}Tokens {}can appear", "in the shop"},
|
||||
},
|
||||
pos = {x = 0, y = 0},
|
||||
cost = 15,
|
||||
redeem = function (_, _)
|
||||
G.GAME['jane_tokens_rate'] = 1.5
|
||||
end
|
||||
redeem = function(_, _)
|
||||
G.GAME["jane_tokens_rate"] = 1.5
|
||||
end,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue