updated cryptid, smods and talisman
2
Cryptid/.gitignore
vendored
|
@ -2,3 +2,5 @@
|
|||
.vscode/*
|
||||
.luarc.json
|
||||
.lovelyignore
|
||||
.idea/*
|
||||
*.diff
|
||||
|
|
|
@ -9,13 +9,16 @@
|
|||
"priority": 114,
|
||||
"badge_colour": "708b91",
|
||||
"badge_text_colour": "FFFFFF",
|
||||
"version": "0.5.5b",
|
||||
"version": "0.5.12a",
|
||||
"dependencies": [
|
||||
"Talisman (>=2.0.9)",
|
||||
"Steamodded (>=1.0.0~BETA-0314c)"
|
||||
"Talisman (>=2.2.0a)",
|
||||
"Steamodded (>=1.0.0~BETA-0827)"
|
||||
],
|
||||
"conflicts": [
|
||||
"Saturn",
|
||||
"AntePreview (>= 2.0.0~0c16a) (<<3.0.0)"
|
||||
"AntePreview (>= 2.0.0~0c16a) (<<3.0.0)",
|
||||
"Cartomancer (<= 4.11)"
|
||||
],
|
||||
"provides": [
|
||||
"Cryptlib"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -8,19 +8,23 @@ if not Cryptid then
|
|||
end
|
||||
local mod_path = "" .. SMODS.current_mod.path -- this path changes when each mod is loaded, but the local variable will retain Cryptid's path
|
||||
Cryptid.path = mod_path
|
||||
Cryptid_config = SMODS.current_mod.config
|
||||
Cryptid_config = SMODS.current_mod.config or {} --is this nil check needed? idk but i saw crash reports related to this
|
||||
|
||||
-- Lovely Patch Target, toggles being able to change gameset config. Here for mod support
|
||||
Cryptid_config.gameset_toggle = true
|
||||
|
||||
-- Enable optional features
|
||||
SMODS.current_mod.optional_features = {
|
||||
retrigger_joker = true,
|
||||
post_trigger = true,
|
||||
quantum_enhancements = false,
|
||||
-- Here are some other ones Steamodded has
|
||||
-- Cryptid doesn't use them YET, but these should be uncommented if Cryptid uses them
|
||||
-- These ones add new card areas that Steamodded will calculate through
|
||||
-- Might already be useful for sticker calc
|
||||
|
||||
-- Cryptid uses cardarea deck now
|
||||
cardareas = {
|
||||
--deck = true,
|
||||
deck = true,
|
||||
discard = true, -- used by scorch
|
||||
},
|
||||
}
|
||||
|
@ -124,7 +128,7 @@ end
|
|||
-- either in [Mod]/Cryptid.lua or [Mod]/Cryptid/*.lua
|
||||
for _, mod in pairs(SMODS.Mods) do
|
||||
-- Note: Crashes with lone lua files
|
||||
if mod.path and mod.id ~= "Cryptid" then
|
||||
if not mod.disabled and mod.path and mod.id ~= "Cryptid" then
|
||||
local path = mod.path
|
||||
local files = NFS.getDirectoryItems(path)
|
||||
for _, file in ipairs(files) do
|
||||
|
@ -182,6 +186,74 @@ function SMODS.injectItems(...)
|
|||
end
|
||||
end
|
||||
end
|
||||
if G.PROFILES[G.SETTINGS.profile].all_unlocked then
|
||||
G.PROFILES[G.SETTINGS.profile].cry_none = (Cryptid.enabled("set_cry_poker_hand_stuff") == true)
|
||||
end
|
||||
G.P_CENTERS.j_stencil.immutable = true
|
||||
G.P_CENTERS.j_four_fingers.immutable = true
|
||||
G.P_CENTERS.j_mime.immutable = true
|
||||
G.P_CENTERS.j_ceremonial.immutable = true
|
||||
G.P_CENTERS.j_marble.immutable = true
|
||||
G.P_CENTERS.j_dusk.immutable = true
|
||||
G.P_CENTERS.j_raised_fist.immutable = true
|
||||
G.P_CENTERS.j_chaos.immutable = true
|
||||
G.P_CENTERS.j_hack.immutable = true
|
||||
G.P_CENTERS.j_pareidolia.immutable = true
|
||||
G.P_CENTERS.j_supernova.immutable = true
|
||||
G.P_CENTERS.j_space.immutable = true
|
||||
G.P_CENTERS.j_dna.immutable = true
|
||||
G.P_CENTERS.j_splash.immutable = true
|
||||
G.P_CENTERS.j_sixth_sense.immutable = true
|
||||
G.P_CENTERS.j_superposition.immutable = true
|
||||
G.P_CENTERS.j_seance.immutable = true
|
||||
G.P_CENTERS.j_riff_raff.immutable = true
|
||||
G.P_CENTERS.j_shortcut.immutable = true
|
||||
G.P_CENTERS.j_midas_mask.immutable = true
|
||||
G.P_CENTERS.j_luchador.immutable = true
|
||||
G.P_CENTERS.j_fortune_teller.immutable = true
|
||||
G.P_CENTERS.j_diet_cola.immutable = true
|
||||
G.P_CENTERS.j_mr_bones.immutable = true
|
||||
G.P_CENTERS.j_sock_and_buskin.immutable = true
|
||||
G.P_CENTERS.j_swashbuckler.immutable = true
|
||||
G.P_CENTERS.j_certificate.immutable = true
|
||||
G.P_CENTERS.j_smeared.immutable = true
|
||||
G.P_CENTERS.j_ring_master.immutable = true
|
||||
G.P_CENTERS.j_blueprint.immutable = true
|
||||
G.P_CENTERS.j_oops.immutable = true
|
||||
G.P_CENTERS.j_invisible.immutable = true
|
||||
G.P_CENTERS.j_brainstorm.immutable = true
|
||||
G.P_CENTERS.j_shoot_the_moon.immutable = true
|
||||
G.P_CENTERS.j_cartomancer.immutable = true
|
||||
G.P_CENTERS.j_astronomer.immutable = true
|
||||
G.P_CENTERS.j_burnt.immutable = true
|
||||
G.P_CENTERS.j_chicot.immutable = true
|
||||
G.P_CENTERS.j_perkeo.immutable = true
|
||||
G.P_CENTERS.j_hanging_chad.misprintize_caps = { extra = 40 }
|
||||
G.P_CENTERS.c_high_priestess.misprintize_caps = { planets = 100 }
|
||||
G.P_CENTERS.c_emperor.misprintize_caps = { tarots = 100 }
|
||||
G.P_CENTERS.c_familiar.misprintize_caps = { extra = 100 }
|
||||
G.P_CENTERS.c_grim.misprintize_caps = { extra = 100 }
|
||||
G.P_CENTERS.c_incantation.misprintize_caps = { extra = 100 }
|
||||
G.P_CENTERS.c_immolate.misprintize_caps = { destroy = 1e300 }
|
||||
G.P_CENTERS.c_cryptid.misprintize_caps = { extra = 100, max_highlighted = 100 }
|
||||
G.P_CENTERS.c_immolate.misprintize_caps = { destroy = 1e300 }
|
||||
Cryptid.inject_pointer_aliases()
|
||||
|
||||
--this has to be here because the colors dont exist earlier then this
|
||||
Cryptid.circus_rarities["rare"] = { rarity = 3, base_mult = 2, order = 1, colour = G.C.RARITY.Rare }
|
||||
Cryptid.circus_rarities["epic"] = { rarity = "cry_epic", base_mult = 3, order = 2, colour = G.C.RARITY.cry_epic }
|
||||
Cryptid.circus_rarities["legendary"] = { rarity = 4, base_mult = 4, order = 3, colour = G.C.RARITY.Legendary }
|
||||
Cryptid.circus_rarities["exotic"] =
|
||||
{ rarity = "cry_exotic", base_mult = 20, order = 4, colour = G.C.RARITY.cry_exotic }
|
||||
|
||||
Cryptid.reload_localization()
|
||||
end
|
||||
|
||||
local old_repitions = SMODS.calculate_repetitions
|
||||
SMODS.calculate_repetitions = function(card, context, reps)
|
||||
local reps = old_repitions(card, context, reps)
|
||||
reps = reps or { 1 }
|
||||
return reps
|
||||
end
|
||||
|
||||
local cryptidConfigTab = function()
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Cryptid
|
||||
An unbalanced Balatro mod.
|
||||
|
||||
Note: Cryptid requires [Steamodded **1.0.0~BETA-0314c**](https://github.com/Steamopollys/Steamodded/archive/refs/heads/main.zip) and [Talisman](https://github.com/MathIsFun0/Talisman/releases/latest).
|
||||
Note: Cryptid requires [Steamodded](https://github.com/Steamodded/smods/releases/latest) and [Talisman](https://github.com/SpectralPack/Talisman/releases/latest).
|
||||
|
||||
Cryptid currently adds:
|
||||
|
||||
|
@ -11,7 +11,7 @@ Cryptid currently adds:
|
|||

|
||||
|
||||
|
||||
### [Official Discord](https://discord.gg/cryptid)
|
||||
### [Official Discord](https://discord.gg/eUf9Ur6RyB)
|
||||
### [Mac Video Installation Guide](https://youtu.be/l5ni7fHgwTE?si=GAN5t5-y_IuEv8uA)
|
||||
### [Not Mac Video Installation Guide](https://www.youtube.com/watch?v=aUr0gXE77rk)
|
||||
|
||||
|
@ -23,11 +23,8 @@ Cryptid currently adds:
|
|||
> *My game is crashing on startup/something doesn't appear to be loading!*
|
||||
|
||||
Make sure everything is properly installed.
|
||||
For Talisman, the folder that contains Talisman should be named `Talisman`. If you've downloaded the source code from GitHub (by clicking on [Code] and then [Download ZIP]), the folder within the ZIP may be called `Talisman-main`, which will cause a problem. Simply rename the folder(s) so that the `-main` part of the name is removed, so that the folder is just called `Talisman`.
|
||||
Whenever you are manually updating Talisman or Cryptid, or any other mod for that matter, it's a good approach to instead delete the contents of the folder, then install the contents of the folder from the ZIP into the existing folder to avoid having to constantly rename the folder over and over.
|
||||
For automatic updates, try using the [automatic update script](https://discord.com/channels/1264429948970733782/1268911536638787625).
|
||||
It could also be that Steamodded is out of date, sometimes mods may use features of a new version that's absent in an older version, but don't change the version that they ask for.
|
||||
You can grab the latest Steamodded by [clicking here](https://github.com/Steamopollys/Steamodded/archive/refs/heads/main.zip).
|
||||
|
||||
> *I can't see any new jokers/content!*
|
||||
|
||||
|
@ -40,12 +37,12 @@ If they show up red, that means there's a problem. Hover over the mod icon (whic
|
|||
|
||||
> *There's some content in the mod I don't like! Is there any way to remove them?*
|
||||
|
||||
You can disable some features of the mod by opening your Settings, going over to the Spectral Pack tab, clicking [Cryptid], then checking/unchecking what you want.
|
||||
You can also enable/disable certain music tracks. If you're a streamer, consider disabling the Jimball music for your safety!
|
||||
You can disable some features of the mod by opening your Mods, clicking [Cryptid], going over to the Config tab, and clicking Thematic Sets. There, you can toggle various Cryptid additions on or off as you see fit.
|
||||
You can also enable/disable certain music tracks in the Music tab. If you're a streamer, consider disabling the Jimball music for your safety!
|
||||
|
||||
> *I'm hitting infinity very often, is there any way to raise the limit of the scoring system?*
|
||||
|
||||
Talisman may be configured to be on **BigNum** mode, which has a maximum limit of ee308. You can make the limit virtually disappear by changing it to **OmegaNum**, which can handle e10##1000. You can configure it the same way; going into Settings, then the Spectral Pack tab, then Talisman. Be careful; if you have a saved run that was on a different number system, you won't be able to load it (unless if you switch back)!
|
||||
Talisman may be configured to be on **BigNum** mode, which has a maximum limit of ee308. You can make the limit virtually disappear by changing it to **OmegaNum**, which can handle e10##1000. You can configure it by going into Mods, then clicking Talisman, and changing the Score Limit under Config. Be careful; if you have a saved run that was on a different number system, you won't be able to load it (unless if you switch back)!
|
||||
|
||||
|
||||
> *I've experienced a crash/bug!*
|
||||
|
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 29 KiB |
BIN
Cryptid/assets/1x/bl_cry_two.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 26 KiB |
BIN
Cryptid/assets/1x/intercept_sprite.aseprite
Normal file
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
BIN
Cryptid/assets/1x/sleeve_cry_glowing.png
Normal file
After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 162 KiB |
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 246 KiB |
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 247 KiB After Width: | Height: | Size: 268 KiB |
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 207 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 70 KiB |
BIN
Cryptid/assets/2x/bl_cry_two.png
Normal file
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 47 KiB |
BIN
Cryptid/assets/2x/intercept_sprite.aseprite
Normal file
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 16 KiB |
BIN
Cryptid/assets/2x/sleeve_cry_glowing.png
Normal file
After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 15 KiB |
|
@ -12,6 +12,9 @@ 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;
|
||||
extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos;
|
||||
extern MY_HIGHP_OR_MEDIUMP float hovering;
|
||||
extern MY_HIGHP_OR_MEDIUMP float screen_scale;
|
||||
|
||||
vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv)
|
||||
{
|
||||
|
@ -94,20 +97,144 @@ vec4 HSL(vec4 c)
|
|||
return hsl;
|
||||
}
|
||||
|
||||
vec4 RGBtoHSV(vec4 rgb)
|
||||
{
|
||||
vec4 hsv;
|
||||
float minVal = min(min(rgb.r, rgb.g), rgb.b);
|
||||
float maxVal = max(max(rgb.r, rgb.g), rgb.b);
|
||||
float delta = maxVal - minVal;
|
||||
|
||||
// Value
|
||||
hsv.z = maxVal;
|
||||
|
||||
// Saturation
|
||||
if (maxVal != 0.0)
|
||||
hsv.y = delta / maxVal;
|
||||
else {
|
||||
// r = g = b = 0, s = 0, v is undefined
|
||||
hsv.y = 0.0;
|
||||
hsv.x = -1.0;
|
||||
return hsv;
|
||||
}
|
||||
|
||||
// Hue
|
||||
if (rgb.r == maxVal)
|
||||
hsv.x = (rgb.g - rgb.b) / delta; // between yellow & magenta
|
||||
else if (rgb.g == maxVal)
|
||||
hsv.x = 2.0 + (rgb.b - rgb.r) / delta; // between cyan & yellow
|
||||
else
|
||||
hsv.x = 4.0 + (rgb.r - rgb.g) / delta; // between magenta & cyan
|
||||
|
||||
hsv.x = hsv.x * (1.0 / 6.0);
|
||||
if (hsv.x < 0.0)
|
||||
hsv.x += 1.0;
|
||||
|
||||
// Alpha
|
||||
hsv.w = rgb.a;
|
||||
|
||||
return hsv;
|
||||
}
|
||||
|
||||
vec4 HSVtoRGB(vec4 hsv) {
|
||||
vec4 rgb;
|
||||
|
||||
float h = hsv.x * 6.0;
|
||||
float c = hsv.z * hsv.y;
|
||||
float x = c * (1.0 - abs(mod(h, 2.0) - 1.0));
|
||||
float m = hsv.z - c;
|
||||
|
||||
if (h < 1.0) {
|
||||
rgb = vec4(c, x, 0.0, hsv.a);
|
||||
} else if (h < 2.0) {
|
||||
rgb = vec4(x, c, 0.0, hsv.a);
|
||||
} else if (h < 3.0) {
|
||||
rgb = vec4(0.0, c, x, hsv.a);
|
||||
} else if (h < 4.0) {
|
||||
rgb = vec4(0.0, x, c, hsv.a);
|
||||
} else if (h < 5.0) {
|
||||
rgb = vec4(x, 0.0, c, hsv.a);
|
||||
} else {
|
||||
rgb = vec4(c, 0.0, x, hsv.a);
|
||||
}
|
||||
|
||||
rgb.rgb += m;
|
||||
|
||||
return rgb;
|
||||
}
|
||||
|
||||
float bitxor(float val1, float val2)
|
||||
{
|
||||
float outp = 0.;
|
||||
for(float i = 1.; i < 9.; i++) outp += floor(mod(mod(floor(val1*pow(2.,-i)),pow(2.,i))+mod(floor(val2*pow(2.,-i)),pow(2.,i)),2.))*pow(2.,i);
|
||||
return outp/256.;
|
||||
}
|
||||
|
||||
float mod2(float val1, float mod1)
|
||||
{
|
||||
val1 /= mod1;
|
||||
val1 -= floor(val1);
|
||||
return(mod1 * val1);
|
||||
}
|
||||
|
||||
#define PI 3.14159265358979323846
|
||||
|
||||
float rand(vec2 c){
|
||||
return fract(sin(dot(c.xy ,vec2(12.9898,78.233))) * 43758.5453);
|
||||
}
|
||||
|
||||
float noise(vec2 p, float freq ){
|
||||
float unit = 1./freq;
|
||||
vec2 ij = floor(p/unit);
|
||||
vec2 xy = mod(p,unit)/unit;
|
||||
//xy = 3.*xy*xy-2.*xy*xy*xy;
|
||||
xy = .5*(1.-cos(PI*xy));
|
||||
float a = rand((ij+vec2(0.,0.)));
|
||||
float b = rand((ij+vec2(1.,0.)));
|
||||
float c = rand((ij+vec2(0.,1.)));
|
||||
float d = rand((ij+vec2(1.,1.)));
|
||||
float x1 = mix(a, b, xy.x);
|
||||
float x2 = mix(c, d, xy.x);
|
||||
return mix(x1, x2, xy.y);
|
||||
}
|
||||
|
||||
float pNoise(vec2 p, int res){
|
||||
float persistance = .5;
|
||||
float n = 0.;
|
||||
float normK = 0.;
|
||||
float f = 4.;
|
||||
float amp = 1.;
|
||||
int iCount = 0;
|
||||
for (int i = 0; i<50; i++){
|
||||
n+=amp*noise(p, f);
|
||||
f*=2.;
|
||||
normK+=amp;
|
||||
amp*=persistance;
|
||||
if (iCount == res) break;
|
||||
iCount++;
|
||||
}
|
||||
float nf = n/normK;
|
||||
return nf*nf*nf*nf;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
// Dummy, doesn't do anything but at least it makes the shader useable
|
||||
if (uv.x > uv.x * 2.){
|
||||
uv = astral;
|
||||
}
|
||||
|
||||
float mod = astral.r * 1.0;
|
||||
|
||||
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, tex.g, tex.b, tex.a));
|
||||
|
||||
vec4 hsl = HSL(vec4(tex.r*saturation_fac, tex.g*saturation_fac, tex.b, tex.a));
|
||||
|
||||
float t = astral.y*2.221 + mod(time,1.);
|
||||
float t = astral.y*2.221 + time;
|
||||
vec2 floored_uv = (floor((uv*texture_details.ba)))/texture_details.ba;
|
||||
vec2 uv_scaled_centered = (floored_uv - 0.5) * 50.;
|
||||
|
||||
|
@ -119,22 +246,48 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords
|
|||
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( (astral.x) * 2.612 + ( field + -.5 ) *3.14));
|
||||
hsl.x = .8;
|
||||
hsl.y = hsl.y * 0.8;
|
||||
hsl.z = hsl.z * 0.2 + 0.6 * sin(hsl.z/2.5 - res/4. + sin(astral.y)/8. + 0.5)/1.4;
|
||||
|
||||
vec4 pixel = Texel(texture, texture_coords);
|
||||
|
||||
float cx = uv_scaled_centered.x * 1.;
|
||||
float cy = uv_scaled_centered.y * 1.;
|
||||
|
||||
|
||||
|
||||
vec4 hsl = HSL(vec4(tex.r, tex.g, tex.b, tex.a));
|
||||
|
||||
|
||||
// |y| = 50, |x| = 50
|
||||
|
||||
tex.rgb = RGB(hsl).rgb;
|
||||
|
||||
if (tex[3] < 0.7)
|
||||
tex[3] = tex[3]/3.;
|
||||
vec2 mouse_offset = (screen_coords.xy - mouse_screen_pos.xy)/screen_scale;
|
||||
|
||||
float scaled_uvy = (uv.y +mouse_offset.y -0.5)*5.*1.338;
|
||||
float scaled_uvx = (uv.x +mouse_offset.x -0.5)*5.;
|
||||
float norm_uv = sqrt(scaled_uvx*scaled_uvx + scaled_uvy*scaled_uvy);
|
||||
|
||||
pixel = vec4(pixel.rgb * 0.0 + tex.rgb * tex.a, pixel.a);
|
||||
|
||||
float res = (.5 + .5* cos( (astral.x) * 2.612 + ( field + -.5 ) *3.14));
|
||||
vec4 textp = RGB(hsl);
|
||||
tex.rgb = textp.rgb;
|
||||
|
||||
float stars = ((pNoise(uv*10. + t/15.0, 10)*pNoise(uv*10. + t/15.0, 10)+1.5)/1.+0.15 + ((pNoise(uv*12. + t/15.0, 10)+1.2)/1.+0.3))/2.2+0.05 + 0.007*norm_uv * 1.1;
|
||||
|
||||
float clusters = (pNoise(uv*10.0-t/15.0, 10)+1.5)/1.5-0.25 + 0.007*norm_uv;
|
||||
|
||||
float super_clusters = (pNoise(uv/15.0, 10)+0.1)/2.+0.3 - 0.008*norm_uv;
|
||||
|
||||
clusters *= clusters * clusters * clusters * 0.4;
|
||||
stars *= stars * stars;
|
||||
super_clusters *= super_clusters * super_clusters;
|
||||
|
||||
colour.rgb = vec3(0.6, 0.45, 1.) * (((clusters + stars + super_clusters)+0.1)) * 0.285;
|
||||
|
||||
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 )
|
||||
{
|
||||
|
@ -146,6 +299,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -179,6 +179,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -104,6 +104,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -139,6 +139,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
282
Cryptid/assets/shaders/glitched_b.fs
Normal file
|
@ -0,0 +1,282 @@
|
|||
#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 glitched_b;
|
||||
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 RGBtoHSV(vec4 rgb)
|
||||
{
|
||||
vec4 hsv;
|
||||
float minVal = min(min(rgb.r, rgb.g), rgb.b);
|
||||
float maxVal = max(max(rgb.r, rgb.g), rgb.b);
|
||||
float delta = maxVal - minVal;
|
||||
|
||||
// Value
|
||||
hsv.z = maxVal;
|
||||
|
||||
// Saturation
|
||||
if (maxVal != 0.0)
|
||||
hsv.y = delta / maxVal;
|
||||
else {
|
||||
// r = g = b = 0, s = 0, v is undefined
|
||||
hsv.y = 0.0;
|
||||
hsv.x = -1.0;
|
||||
return hsv;
|
||||
}
|
||||
|
||||
// Hue
|
||||
if (rgb.r == maxVal)
|
||||
hsv.x = (rgb.g - rgb.b) / delta; // between yellow & magenta
|
||||
else if (rgb.g == maxVal)
|
||||
hsv.x = 2.0 + (rgb.b - rgb.r) / delta; // between cyan & yellow
|
||||
else
|
||||
hsv.x = 4.0 + (rgb.r - rgb.g) / delta; // between magenta & cyan
|
||||
|
||||
hsv.x = hsv.x * (1.0 / 6.0);
|
||||
if (hsv.x < 0.0)
|
||||
hsv.x += 1.0;
|
||||
|
||||
// Alpha
|
||||
hsv.w = rgb.a;
|
||||
|
||||
return hsv;
|
||||
}
|
||||
|
||||
vec4 HSVtoRGB(vec4 hsv) {
|
||||
vec4 rgb;
|
||||
|
||||
float h = hsv.x * 6.0;
|
||||
float c = hsv.z * hsv.y;
|
||||
float x = c * (1.0 - abs(mod(h, 2.0) - 1.0));
|
||||
float m = hsv.z - c;
|
||||
|
||||
if (h < 1.0) {
|
||||
rgb = vec4(c, x, 0.0, hsv.a);
|
||||
} else if (h < 2.0) {
|
||||
rgb = vec4(x, c, 0.0, hsv.a);
|
||||
} else if (h < 3.0) {
|
||||
rgb = vec4(0.0, c, x, hsv.a);
|
||||
} else if (h < 4.0) {
|
||||
rgb = vec4(0.0, x, c, hsv.a);
|
||||
} else if (h < 5.0) {
|
||||
rgb = vec4(x, 0.0, c, hsv.a);
|
||||
} else {
|
||||
rgb = vec4(c, 0.0, x, hsv.a);
|
||||
}
|
||||
|
||||
rgb.rgb += m;
|
||||
|
||||
return rgb;
|
||||
}
|
||||
|
||||
float bitxor(float val1, float val2)
|
||||
{
|
||||
float outp = 0.;
|
||||
for(float i = 1.; i < 9.; i++) outp += floor(mod(mod(floor(val1*pow(2.,-i)),pow(2.,i))+mod(floor(val2*pow(2.,-i)),pow(2.,i)),2.))*pow(2.,i);
|
||||
return outp/256.;
|
||||
}
|
||||
|
||||
float mod2(float val1, float mod1)
|
||||
{
|
||||
val1 /= mod1;
|
||||
val1 -= floor(val1);
|
||||
return(mod1 * val1);
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
|
||||
// Dummy, doesn't do anything but at least it makes the shader useable
|
||||
if (uv.x > uv.x * 2.){
|
||||
uv = glitched_b;
|
||||
}
|
||||
|
||||
float mod = glitched_b.r * 1.0;
|
||||
|
||||
number low = min(tex.r, min(tex.g, tex.b));
|
||||
number high = max(tex.r, max(tex.g, tex.b));
|
||||
number delta = high - low;
|
||||
|
||||
//vec4 hsl = HSL(vec4(tex.r, tex.g, tex.b, tex.a));
|
||||
|
||||
float t = glitched_b.y*2.221 + time;
|
||||
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.;
|
||||
|
||||
|
||||
vec4 pixel = Texel(texture, texture_coords);
|
||||
|
||||
float cx = uv_scaled_centered.x * 1.;
|
||||
float cy = uv_scaled_centered.y * 1.;
|
||||
|
||||
float randnum = mod2(floor(4.*t), 256.)*mod2(floor(4.*t), 27.);
|
||||
randnum = mod2(bitxor(pow(randnum, 3.) - randnum + 3., 7. + floor(randnum/11.)), 256.);
|
||||
randnum = mod2(randnum*123.54,0.1)*10.;
|
||||
|
||||
|
||||
|
||||
vec4 hsl = HSL(vec4(tex.r, tex.g, tex.b, tex.a));
|
||||
|
||||
float xorscale = 10.;
|
||||
|
||||
// |y| = 50, |x| = 50
|
||||
|
||||
float mbx;
|
||||
float mby;
|
||||
float offx;
|
||||
float offy;
|
||||
float rmasksum = -1.;
|
||||
float rectmask = 1.;
|
||||
t = floor(t/4.);
|
||||
|
||||
for(float i = 0.; i < 5.; i++)
|
||||
{
|
||||
randnum = bitxor(255.*randnum + mod2(t,81.), pow(randnum*(16.-i), 2.));
|
||||
mbx = (cx - 25.*sin(100./randnum)) * (1. + 2.*(floor(cos(177./randnum + 1.))));
|
||||
mby = (cy - 25.*cos(113./randnum + 1.)) * (1. + 2.*(floor(sin(221./randnum))));
|
||||
offx = bitxor(255.*randnum, pow(255.*randnum,5.) - 255.*randnum);
|
||||
offy = bitxor(255.*randnum, pow(255.*randnum,5.) + 255.*randnum);
|
||||
offx /= 10.;
|
||||
offy /= 10.;
|
||||
rectmask = (-mbx + abs(abs(mbx) + offx) - offx) - (mby - abs(abs(mby) - offy) + offy);
|
||||
rmasksum *= -1. * min(0., max(-1., 5. - pow(rectmask, 2.)));
|
||||
}
|
||||
|
||||
float laddermask = pow(sin((23.-20.*randnum*randnum)*pow(sin(sin(cy*randnum) + pow(sin(cy*randnum),2.)),2.)),2.) * rmasksum;
|
||||
|
||||
|
||||
hsl.x += floor(randnum + 0.1) * rmasksum * 4. * randnum * (1. - laddermask);// * bitxor(cx * xorscale, cy * xorscale)/4;
|
||||
hsl.y += laddermask * (1. + 2. * rmasksum);
|
||||
hsl.z += floor(randnum + 0.2) * (1. + rmasksum) * (1. - 1.5*hsl.z) * 0.1;
|
||||
|
||||
tex.rgb = RGB(hsl).rgb;
|
||||
|
||||
pixel = vec4(pixel.rgb * 0.0 + tex.rgb * tex.a, pixel.a);
|
||||
|
||||
|
||||
|
||||
float res = (.5 + .5* cos( (glitched_b.x) * 2.612 + ( field + -.5 ) *3.14));
|
||||
vec4 textp = RGB(hsl);
|
||||
tex.rgb = textp.rgb;
|
||||
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
|
|
@ -109,6 +109,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -130,6 +130,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -145,6 +145,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -88,6 +88,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
|
@ -222,6 +222,6 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
|
|||
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);
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
||||
|
|
157
Cryptid/assets/shaders/ultrafoil.fs
Normal file
|
@ -0,0 +1,157 @@
|
|||
#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 ultrafoil;
|
||||
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;
|
||||
vec2 adjusted_uv = uv - vec2(0.5, 0.5);
|
||||
adjusted_uv.x = adjusted_uv.x*texture_details.b/texture_details.a;
|
||||
|
||||
number low = min(tex.r, min(tex.g, tex.b));
|
||||
number high = max(tex.r, max(tex.g, tex.b));
|
||||
number delta = min(high, max(0.5, 1. - low));
|
||||
|
||||
/*
|
||||
//number fac = max(min(2.*sin((length(90.*adjusted_uv) + ultrafoil.r*2.) + 3.*(1.+0.8*cos(length(113.1121*adjusted_uv) - ultrafoil.r*3.121))) - 1. - max(5.-length(90.*adjusted_uv), 0.), 1.), 0.);
|
||||
number fac = 0.8 + 0.5*sin(23.*uv.x+.37*uv.y + ultrafoil.r*12. + cos(ultrafoil.r*5.3 + uv.y*4.2 - uv.x*4.));
|
||||
number fac2 = 0.25 + 0.25*sin(20.*uv.x+.6*uv.y + ultrafoil.r*5. - cos(ultrafoil.r*2.3 + uv.y*8.2));
|
||||
number fac3 = 0.5 + 0.2*sin(32.*uv.x+.26*uv.y + ultrafoil.r*6.111 + sin(ultrafoil.r*5.3 + uv.y*3.2));
|
||||
number fac4 = 0.25 + 0.1*sin(10.*uv.x+.32*uv.y + ultrafoil.r*8.111 + sin(ultrafoil.r*1.3 + uv.y*13.2));
|
||||
number fac5 = sin(0.5*16.*uv.x+.16*uv.y + ultrafoil.r*12. + cos(ultrafoil.r*5.3 + uv.y*4.2 - uv.x*4.));
|
||||
|
||||
number maxfac = max(max(fac, max(fac2, max(fac3, max(fac4, 0.0)))) + 2.2*(fac+fac2+fac3+fac4), 0.);
|
||||
|
||||
vec3 facv = vec3(
|
||||
fac+fac2,
|
||||
max(fac4+fac5,fac2+fac3),
|
||||
fac+fac3+fac5
|
||||
);*/
|
||||
vec3 fac = vec3(0.0);
|
||||
fac += vec3(0.2,0.4,0.7)*(sin(4.0*uv.x + ultrafoil.r*4.0 + cos(ultrafoil.r*5.3))+.5);
|
||||
fac += vec3(0.5,0.1,0.7)*(sin(6.0*uv.x + ultrafoil.r*6.3 + cos(ultrafoil.r*2.))+.5);
|
||||
fac += max(vec3(0.7,0.2,0.2)*(1.-pow(uv.x*10.0-10.0 + ultrafoil.r*2.3,2.)), vec3(0.));
|
||||
fac += max(vec3(0.5,0.3,0.6)*(1.-pow(uv.x*40.0-40.0 + ultrafoil.r*15.3,2.)), vec3(0.));
|
||||
fac += max(vec3(0.7,0.2,0.2)*(1.-pow(uv.x*10.0-20.0 + ultrafoil.r*3.7,2.)), vec3(0.));
|
||||
fac += max(vec3(0.5,0.3,0.6)*(1.-pow(uv.x*40.0-50.0 + ultrafoil.r*11.8,2.)), vec3(0.));
|
||||
fac += sqrt(uv.y*0.2);
|
||||
|
||||
tex.rgb *= vec3(0.5,0.7,1.0);
|
||||
tex.rgb += tex.rgb*fac*0.5;
|
||||
//tex.a = min(tex.a, 0.3*tex.a + 0.9*min(0.5, maxfac*0.1));
|
||||
|
||||
return dissolve_mask(tex, texture_coords, uv);
|
||||
}
|
||||
|
||||
extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos;
|
||||
extern MY_HIGHP_OR_MEDIUMP float hovering;
|
||||
extern MY_HIGHP_OR_MEDIUMP float screen_scale;
|
||||
|
||||
#ifdef VERTEX
|
||||
vec4 position( mat4 transform_projection, vec4 vertex_position )
|
||||
{
|
||||
if (hovering <= 0.){
|
||||
return transform_projection * vertex_position;
|
||||
}
|
||||
float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
|
||||
vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale;
|
||||
float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist))
|
||||
*hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist);
|
||||
|
||||
return transform_projection * vertex_position + vec4(0.,0.,0.,scale);
|
||||
}
|
||||
#endif
|
BIN
Cryptid/assets/sounds/demitrigger.ogg
Normal file
BIN
Cryptid/assets/sounds/forcetrigger.ogg
Normal file
|
@ -1,14 +1,14 @@
|
|||
return {
|
||||
["Cryptid"] = {
|
||||
["jimball_music"] = true,
|
||||
["code_music"] = true,
|
||||
["exotic_music"] = true,
|
||||
["big_music"] = true,
|
||||
["alt_bg_music"] = true,
|
||||
["jimball_music"] = true, -- plays funkytown when jimball
|
||||
["code_music"] = true, -- plays code music when code pack
|
||||
["exotic_music"] = true, -- plays exotic music when exotic joker
|
||||
["big_music"] = true, -- plays music when sufficiently high score
|
||||
["alt_bg_music"] = true, -- plays alternate title screen music based on gameset
|
||||
},
|
||||
["family_mode"] = false,
|
||||
["experimental"] = false,
|
||||
["force_tooltips"] = true,
|
||||
["HTTPS"] = true,
|
||||
["menu"] = true,
|
||||
["family_mode"] = false, -- removes f*ck
|
||||
["experimental"] = false, -- experimental stuff
|
||||
["force_tooltips"] = true, -- i don't actually know what this does
|
||||
["HTTPS"] = true, -- your internet connection
|
||||
["menu"] = true, -- i don't know what this does either
|
||||
}
|
||||
|
|
|
@ -423,6 +423,38 @@ local pin = {
|
|||
end
|
||||
end,
|
||||
}
|
||||
local technically_positive = {
|
||||
object_type = "Achievement",
|
||||
key = "technically_positive",
|
||||
order = 23,
|
||||
bypass_all_unlocked = true,
|
||||
atlas = "cry_achievements",
|
||||
--reset_on_startup = true,
|
||||
unlock_condition = function(self, args)
|
||||
if args.type == "modify_jokers" then
|
||||
for i = 1, #G.jokers.cards do
|
||||
if
|
||||
G.jokers.cards[i].config.center.key == "j_cry_negative"
|
||||
and (G.jokers.cards[i].edition and G.jokers.cards[i].edition.negative)
|
||||
then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
-- local stoned = {
|
||||
-- object_type = "Achievement",
|
||||
-- key = "stoned",
|
||||
-- order = 24,
|
||||
-- bypass_all_unlocked = true,
|
||||
-- atlas = "cry_achievements",
|
||||
-- --reset_on_startup = true,
|
||||
-- unlock_condition = function(self, args)
|
||||
|
||||
-- end,
|
||||
-- }
|
||||
|
||||
-- TODO: Add new Achievements.
|
||||
-- Current Ideas (Normal):
|
||||
|
@ -477,6 +509,7 @@ local achievement_objects = {
|
|||
home_realtor,
|
||||
traffic_jam,
|
||||
perfectly_balanced,
|
||||
technically_positive,
|
||||
--pin, Needs to be screened
|
||||
}
|
||||
return { name = "Achievements", items = achievement_objects }
|
||||
|
|
|
@ -11,6 +11,7 @@ local oldox = {
|
|||
boss = {
|
||||
min = 2,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 4,
|
||||
|
@ -36,6 +37,7 @@ local oldhouse = {
|
|||
boss = {
|
||||
min = 3,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 5,
|
||||
|
@ -64,6 +66,7 @@ local oldarm = {
|
|||
boss = {
|
||||
min = 3,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 6,
|
||||
|
@ -92,6 +95,7 @@ local oldfish = {
|
|||
boss = {
|
||||
min = 2,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 7,
|
||||
|
@ -117,6 +121,7 @@ local oldmanacle = {
|
|||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 8,
|
||||
|
@ -142,6 +147,7 @@ local oldserpent = {
|
|||
boss = {
|
||||
min = 5,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 9,
|
||||
|
@ -167,6 +173,7 @@ local oldpillar = {
|
|||
boss = {
|
||||
min = 3,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 10,
|
||||
|
@ -195,6 +202,7 @@ local oldflint = {
|
|||
boss = {
|
||||
min = 3,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 11,
|
||||
|
@ -223,6 +231,7 @@ local oldmark = {
|
|||
boss = {
|
||||
min = 4,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "nostalgia",
|
||||
order = 12,
|
||||
|
@ -249,14 +258,15 @@ local tax = {
|
|||
key = "tax",
|
||||
pos = { x = 0, y = 0 },
|
||||
boss = {
|
||||
min = 1,
|
||||
min = 2,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 2,
|
||||
boss_colour = HEX("40ff40"),
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { 0.4 * get_blind_amount(G.GAME.round_resets.ante) * 2 * G.GAME.starting_params.ante_scaling } } -- no bignum?
|
||||
return { vars = { 0.4 * get_blind_amount(G.GAME.round_resets.ante) * 2 * G.GAME.starting_params.ante_scaling } }
|
||||
end,
|
||||
preview_ui = function(self)
|
||||
local value = self:loc_vars().vars[1]
|
||||
|
@ -283,8 +293,14 @@ local tax = {
|
|||
collection_loc_vars = function(self)
|
||||
return { vars = { localize("cry_tax_placeholder") } }
|
||||
end,
|
||||
cry_cap_score = function(self, score)
|
||||
return math.floor(math.min(0.4 * G.GAME.blind.chips, score) + 0.5)
|
||||
set_blind = function(self, reset, silent)
|
||||
SMODS.set_scoring_calculation("cry_tax")
|
||||
end,
|
||||
defeat = function(self, silent)
|
||||
SMODS.set_scoring_calculation("multiply")
|
||||
end,
|
||||
disable = function(self, silent)
|
||||
SMODS.set_scoring_calculation("multiply")
|
||||
end,
|
||||
in_pool = function()
|
||||
return G.GAME.round_resets.hands >= 3
|
||||
|
@ -303,6 +319,7 @@ local box = {
|
|||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 13,
|
||||
|
@ -327,8 +344,9 @@ local clock = {
|
|||
pos = { x = 0, y = 1 },
|
||||
mult = 0,
|
||||
boss = {
|
||||
min = 1,
|
||||
min = 2,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
config = {
|
||||
tw_bl = {
|
||||
|
@ -348,8 +366,10 @@ local clock = {
|
|||
cry_ante_base_mod = function(self, dt)
|
||||
if G.SETTINGS.paused then
|
||||
return 0
|
||||
elseif G.GAME.round == 0 and G.GAME.skips == 0 then
|
||||
return 0
|
||||
else
|
||||
return 0.1 * (dt * math.min(G.SETTINGS.GAMESPEED, 4) / 4) / 3
|
||||
return 0.1 * ((dt * (G.GAME.modifiers.cry_rush_hour_iii or 1)) * math.min(G.SETTINGS.GAMESPEED, 4) / 4) / 3
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
@ -366,6 +386,7 @@ local trick = {
|
|||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 14,
|
||||
|
@ -402,6 +423,7 @@ local joke = {
|
|||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 15,
|
||||
|
@ -449,6 +471,7 @@ local hammer = {
|
|||
boss = {
|
||||
min = 2,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 19,
|
||||
|
@ -457,6 +480,7 @@ local hammer = {
|
|||
if card.area ~= G.jokers and not G.GAME.blind.disabled then
|
||||
if
|
||||
not SMODS.has_no_rank(card)
|
||||
and not SMODS.has_enhancement(card, "m_cry_abstract")
|
||||
and (
|
||||
card.base.value == "3"
|
||||
or card.base.value == "5"
|
||||
|
@ -484,6 +508,7 @@ local magic = {
|
|||
boss = {
|
||||
min = 2,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 20,
|
||||
|
@ -492,6 +517,7 @@ local magic = {
|
|||
if card.area ~= G.jokers and not G.GAME.blind.disabled then
|
||||
if
|
||||
not SMODS.has_no_rank(card)
|
||||
and not SMODS.has_enhancement(card, "m_cry_abstract")
|
||||
and (
|
||||
card.base.value == "2"
|
||||
or card.base.value == "4"
|
||||
|
@ -519,6 +545,7 @@ local windmill = {
|
|||
boss = {
|
||||
min = 4,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 16,
|
||||
|
@ -543,6 +570,7 @@ local striker = {
|
|||
boss = {
|
||||
min = 4,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 1,
|
||||
|
@ -567,6 +595,7 @@ local shackle = {
|
|||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 18,
|
||||
|
@ -601,6 +630,7 @@ local pin = {
|
|||
boss = {
|
||||
min = 4,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 17,
|
||||
|
@ -617,10 +647,10 @@ local pin = {
|
|||
(card.area == G.jokers)
|
||||
and not G.GAME.blind.disabled
|
||||
and (
|
||||
card.config.center.rarity ~= 3
|
||||
and card.config.center.rarity ~= 2
|
||||
and card.config.center.rarity ~= 1
|
||||
and card.config.center.rarity ~= 5
|
||||
card.config.center.rarity == 4
|
||||
or card.config.center.rarity == "cry_epic"
|
||||
or card.config.center.rarity == "cry_exotic"
|
||||
or Cryptid.pin_debuff[card.config.center.rarity]
|
||||
)
|
||||
then
|
||||
return true
|
||||
|
@ -640,10 +670,11 @@ local scorch = {
|
|||
object_type = "Blind",
|
||||
name = "cry-scorch",
|
||||
key = "scorch",
|
||||
pos = { x = 0, y = 18 }, -- use Trick as placeholder icon
|
||||
pos = { x = 0, y = 18 },
|
||||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 21,
|
||||
|
@ -659,11 +690,11 @@ local scorch = {
|
|||
and (context.cardarea == G.play or context.cardarea == "unscored")
|
||||
and not G.GAME.blind.disabled
|
||||
then
|
||||
return { remove = not context.destroy_card.ability.eternal }
|
||||
return { remove = not SMODS.is_eternal(context.destroying_card) }
|
||||
end
|
||||
if context.discard and not G.GAME.blind.disabled then
|
||||
for i, card in ipairs(G.hand.highlighted) do
|
||||
return { remove = not card.ability.eternal }
|
||||
return { remove = not SMODS.is_eternal(card) }
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
@ -675,6 +706,285 @@ local scorch = {
|
|||
end
|
||||
end,
|
||||
}
|
||||
-- +0.25X blind requirements
|
||||
-- for every $5 you have when selected
|
||||
local greed = {
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_blind",
|
||||
},
|
||||
},
|
||||
config = {
|
||||
money_factor = 5,
|
||||
blind_mod = 0.25,
|
||||
max_scale = 5000,
|
||||
},
|
||||
object_type = "Blind",
|
||||
name = "cry-greed",
|
||||
key = "greed",
|
||||
pos = { x = 0, y = 19 }, -- use Tax as placeholder icon
|
||||
boss = {
|
||||
min = 1,
|
||||
max = 10,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 22,
|
||||
boss_colour = HEX("C19030"),
|
||||
mult = 1,
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return {
|
||||
vars = {
|
||||
number_format(5),
|
||||
number_format(lenient_bignum((get_blind_amount(G.GAME.round_resets.ante) * 0.25))),
|
||||
},
|
||||
}
|
||||
end,
|
||||
collection_loc_vars = function(self)
|
||||
return {
|
||||
vars = {
|
||||
number_format(5),
|
||||
"(" .. number_format(0.25) .. "X base)",
|
||||
},
|
||||
}
|
||||
end,
|
||||
set_blind = function(self, reset, silent)
|
||||
if to_big(G.GAME.dollars) > to_big(0) then
|
||||
if to_big(G.GAME.dollars) < to_big(5000) then
|
||||
G.GAME.blind.chips = -- go my equations
|
||||
((get_blind_amount(G.GAME.round_resets.ante) * G.GAME.starting_params.ante_scaling) + (math.floor(
|
||||
G.GAME.dollars / 5
|
||||
) * (get_blind_amount(G.GAME.round_resets.ante) * 0.25)))
|
||||
else
|
||||
G.GAME.blind.chips = -- set cap at $5000
|
||||
(
|
||||
(get_blind_amount(G.GAME.round_resets.ante) * G.GAME.starting_params.ante_scaling)
|
||||
+ (
|
||||
math.floor(5000 / 5) -- 1000 extra increments
|
||||
* (get_blind_amount(G.GAME.round_resets.ante) * 0.25)
|
||||
)
|
||||
)
|
||||
end
|
||||
G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
|
||||
end
|
||||
end,
|
||||
disable = function(self, silent)
|
||||
G.GAME.blind.chips = get_blind_amount(G.GAME.round_resets.ante) * G.GAME.starting_params.ante_scaling
|
||||
G.GAME.blind.chip_text = number_format(G.GAME.blind.chips)
|
||||
end,
|
||||
}
|
||||
--Fasten all jokers after hand or discard
|
||||
--After defeat, open a baneful buffoon pack containing:
|
||||
---4 cursed jokers (can overflow)
|
||||
---a "unique consumeable" that will banish the rightmost joker
|
||||
--Only after that, are jokers unfastened
|
||||
local decision = {
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_blind",
|
||||
"set_cry_cursed",
|
||||
},
|
||||
},
|
||||
mult = 2,
|
||||
object_type = "Blind",
|
||||
name = "cry-Decision",
|
||||
key = "decision",
|
||||
pos = { x = 0, y = 20 },
|
||||
dollars = 5,
|
||||
boss = {
|
||||
min = 4,
|
||||
max = 666666,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 23,
|
||||
boss_colour = HEX("474931"),
|
||||
get_loc_debuff_text = function(self)
|
||||
return localize("cry_blind_baneful_pack")
|
||||
end,
|
||||
calculate = function(self, blind, context)
|
||||
if context.discard and not G.GAME.blind.disabled and not G.GAME.cry_fastened then
|
||||
--visual cue to wiggle all jokers
|
||||
G.GAME.cry_fastened = true
|
||||
if G.jokers.cards then
|
||||
G.GAME.blind:wiggle()
|
||||
G.GAME.blind.triggered = true
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
v:juice_up(0, 0.25)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
cry_before_play = function(self)
|
||||
if not G.GAME.blind.disabled and not G.GAME.cry_fastened then
|
||||
--visual cue to wiggle all jokers
|
||||
G.GAME.cry_fastened = true
|
||||
if G.jokers.cards then
|
||||
G.GAME.blind:wiggle()
|
||||
G.GAME.blind.triggered = true
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
v:juice_up(0, 0.25)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
cry_before_cash = function(self)
|
||||
--Always fasten if before cash context (gaming chair, debug mode)
|
||||
G.GAME.cry_fastened = true
|
||||
G.GAME.blind:wiggle()
|
||||
G.GAME.blind.triggered = true
|
||||
G.GAME.cry_make_a_decision = true
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "before",
|
||||
func = function()
|
||||
local key = "p_cry_baneful_1"
|
||||
local card = Card(
|
||||
G.play.T.x + G.play.T.w / 2 - G.CARD_W * 1.27 / 2,
|
||||
G.play.T.y + G.play.T.h / 2 - G.CARD_H * 1.27 / 2,
|
||||
G.CARD_W * 1.27,
|
||||
G.CARD_H * 1.27,
|
||||
G.P_CARDS.empty,
|
||||
G.P_CENTERS[key],
|
||||
{ bypass_discovery_center = true, bypass_discovery_ui = true }
|
||||
)
|
||||
card.cost = 0
|
||||
card.from_tag = true
|
||||
G.FUNCS.use_card({ config = { ref_table = card } })
|
||||
card:start_materialize()
|
||||
pack_opened = true
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end,
|
||||
disable = function(self, silent)
|
||||
G.GAME.cry_fastened = nil
|
||||
end,
|
||||
defeat = function(self, silent)
|
||||
G.GAME.cry_fastened = nil
|
||||
end,
|
||||
}
|
||||
|
||||
local repulsor = {
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_blind",
|
||||
},
|
||||
},
|
||||
mult = 2,
|
||||
object_type = "Blind",
|
||||
name = "cry-repulsor",
|
||||
key = "repulsor",
|
||||
pos = { x = 0, y = 0 },
|
||||
dollars = 5,
|
||||
boss = {
|
||||
min = 4,
|
||||
max = 666666,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds_two",
|
||||
order = 24,
|
||||
boss_colour = HEX("7c5798"),
|
||||
calculate = function(self, blind, context)
|
||||
if not G.GAME.blind.disabled then
|
||||
if context.before then
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
if v ~= G.jokers.cards[1] and v ~= G.jokers.cards[#G.jokers.cards] then
|
||||
if not v.debuff then
|
||||
G.GAME.blind.triggered = true
|
||||
v.debuff = true
|
||||
v.debuff_from_repulsor = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if context.retrigger_joker_check and not context.retrigger_joker then
|
||||
if context.other_card == G.jokers.cards[1] or context.other_card == G.jokers.cards[#G.jokers.cards] then
|
||||
return {
|
||||
repetitions = 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
if context.after then
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
if v.debuff_from_repulsor then
|
||||
v.debuff = nil
|
||||
v.debuff_from_repulsor = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local chromatic = {
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_blind",
|
||||
},
|
||||
},
|
||||
mult = 2,
|
||||
object_type = "Blind",
|
||||
name = "cry-chromatic",
|
||||
key = "chromatic",
|
||||
pos = { x = 0, y = 1 },
|
||||
dollars = 5,
|
||||
boss = {
|
||||
min = 1,
|
||||
max = 666666,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds_two",
|
||||
order = 25,
|
||||
boss_colour = HEX("a34f98"),
|
||||
cry_modify_score = function(self, score)
|
||||
if math.floor(G.GAME.current_round.hands_played + 1) % 2 == 1 then
|
||||
return score * -1
|
||||
else
|
||||
return score
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local landlord = {
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_blind",
|
||||
},
|
||||
},
|
||||
mult = 2,
|
||||
object_type = "Blind",
|
||||
name = "cry-landlord",
|
||||
key = "landlord",
|
||||
pos = { x = 0, y = 2 },
|
||||
dollars = 5,
|
||||
boss = {
|
||||
min = 4,
|
||||
max = 666666,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds_two",
|
||||
order = 26,
|
||||
boss_colour = HEX("c89f13"),
|
||||
debuff_hand = function(self, cards, hand, handname, check)
|
||||
G.GAME.blind.triggered = false
|
||||
local jokers = {}
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
if not v.ability.rental then
|
||||
jokers[#jokers + 1] = v
|
||||
end
|
||||
end
|
||||
if #jokers > 0 then
|
||||
G.GAME.blind.triggered = true
|
||||
if not check then
|
||||
local joker = pseudorandom_element(jokers, pseudoseed("cry_landlord"))
|
||||
joker:set_rental(true)
|
||||
joker:juice_up()
|
||||
G.GAME.blind:wiggle()
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
--It seems Showdown blind order is seperate from normal blind collection order? convenient for me at least
|
||||
--Nvm they changed it
|
||||
local lavender_loop = {
|
||||
|
@ -694,6 +1004,7 @@ local lavender_loop = {
|
|||
min = 3,
|
||||
max = 10,
|
||||
showdown = true,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 91,
|
||||
|
@ -708,22 +1019,20 @@ local lavender_loop = {
|
|||
G.GAME.cry_ach_conditions.patience_virtue_earnable = nil
|
||||
end,
|
||||
cry_round_base_mod = function(self, dt)
|
||||
local aaa = 4 * (G.GAME.modifiers.cry_rush_hour_iii or 1)
|
||||
if
|
||||
G.GAME.cry_ach_conditions.patience_virtue_timer > 0
|
||||
and G.GAME.cry_ach_conditions.patience_virtue_earnable ~= true
|
||||
then
|
||||
G.GAME.cry_ach_conditions.patience_virtue_timer = G.GAME.cry_ach_conditions.patience_virtue_timer
|
||||
- dt
|
||||
* (G.GAME.modifiers.cry_rush_hour_iii and 0.5 or 1)
|
||||
* (G.SETTINGS.paused and 0 or 1)
|
||||
* G.SETTINGS.GAMESPEED
|
||||
- dt * (G.SETTINGS.paused and 0 or 1) * G.SETTINGS.GAMESPEED
|
||||
elseif G.GAME.current_round.hands_played == 0 then
|
||||
G.GAME.cry_ach_conditions.patience_virtue_earnable = true
|
||||
end
|
||||
if G.SETTINGS.paused or G.STATE == G.STATES.HAND_PLAYED then
|
||||
return 1
|
||||
else
|
||||
return 1.25 ^ (dt / (1.5 / math.min(G.SETTINGS.GAMESPEED, 4) * 4))
|
||||
return 1.25 ^ (dt / (1.5 / math.min(G.SETTINGS.GAMESPEED, 4) * aaa))
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
@ -748,7 +1057,7 @@ local tornado = {
|
|||
order = 94,
|
||||
boss_colour = HEX("3dd9ca"),
|
||||
loc_vars = function(self)
|
||||
return { vars = { "" .. ((Cryptid.safe_get(G.GAME, "probabilities", "normal") or 1) * 2), 3 } }
|
||||
return { vars = { SMODS.get_probability_vars(self, 2, 3, "Turquoise Tornado") } }
|
||||
end,
|
||||
set_blind = function(self, reset, silent)
|
||||
if not reset then
|
||||
|
@ -759,12 +1068,12 @@ local tornado = {
|
|||
return #Cryptid.advanced_find_joker("Oops! All 6s", nil, nil, { "eternal" }, nil) == 0
|
||||
end,
|
||||
collection_loc_vars = function(self)
|
||||
return { vars = { "" .. ((Cryptid.safe_get(G.GAME, "probabilities", "normal") or 1) * 2), 3 } }
|
||||
return { vars = { SMODS.get_probability_vars(self, 2, 3, "Turquoise Tornado") } }
|
||||
end,
|
||||
debuff_hand = function(self, cards, hand, handname, check)
|
||||
if
|
||||
not check
|
||||
and (pseudorandom(pseudoseed("tornado")) < ((G.GAME.probabilities.normal * 2) / 3))
|
||||
and SMODS.pseudorandom_probability(self, "tornado", 2, 3, "Turquoise Tornado")
|
||||
and not G.GAME.blind.disabled
|
||||
then
|
||||
--check for guarantee
|
||||
|
@ -797,26 +1106,33 @@ local vermillion_virus = {
|
|||
min = 3,
|
||||
max = 10,
|
||||
showdown = true,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 90,
|
||||
boss_colour = HEX("f65d34"),
|
||||
cry_before_play = function(self)
|
||||
if G.jokers.cards[1] then
|
||||
local idx = pseudorandom(pseudoseed("cry_vermillion_virus"), 1, #G.jokers.cards)
|
||||
if G.jokers.cards[idx] then
|
||||
if G.jokers.cards[idx].config.center.immune_to_vermillion then
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[idx],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_nope_ex"), colour = G.C.JOKER_GREY }
|
||||
)
|
||||
else
|
||||
local eligible_cards = {}
|
||||
local idx
|
||||
--Check for eligible cards (not eternal and not immune)
|
||||
for i = 1, #G.jokers.cards do
|
||||
if not G.jokers.cards[i].config.center.immune_to_vermillion and not SMODS.is_eternal(G.jokers.cards[i]) then
|
||||
eligible_cards[#eligible_cards + 1] = G.jokers.cards[i]
|
||||
end
|
||||
end
|
||||
if #eligible_cards ~= 0 then
|
||||
--Choose 1 eligible card and get the position of it
|
||||
local option = pseudorandom_element(eligible_cards, pseudoseed("cry_vermillion_virus"))
|
||||
for i = 1, #G.jokers.cards do
|
||||
if G.jokers.cards[i] == option then
|
||||
idx = i
|
||||
break
|
||||
end
|
||||
end
|
||||
if idx and G.jokers.cards[idx] then
|
||||
_card = create_card("Joker", G.jokers, nil, nil, nil, nil, nil, "cry_vermillion_virus_gen")
|
||||
G.jokers.cards[idx]:remove_from_deck()
|
||||
G.jokers.cards[idx]:start_dissolve()
|
||||
--G.jokers.cards[idx]:remove_from_deck()
|
||||
_card:add_to_deck()
|
||||
_card:start_materialize()
|
||||
G.jokers.cards[idx] = _card
|
||||
|
@ -825,7 +1141,6 @@ local vermillion_virus = {
|
|||
G.jokers:align_cards()
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
local sapphire_stamp = {
|
||||
|
@ -843,18 +1158,22 @@ local sapphire_stamp = {
|
|||
min = 3,
|
||||
max = 10,
|
||||
showdown = true,
|
||||
yes_orb = true,
|
||||
},
|
||||
atlas = "blinds",
|
||||
order = 92,
|
||||
boss_colour = HEX("4057d6"),
|
||||
cry_before_play = function(self)
|
||||
if #G.hand.highlighted > 0 then
|
||||
local idx = pseudorandom(pseudoseed("cry_sapphire_stamp"), 1, #G.hand.highlighted)
|
||||
G.hand:remove_from_highlighted(G.hand.highlighted[idx])
|
||||
end
|
||||
end,
|
||||
set_blind = function(self, reset, silent)
|
||||
if not reset then
|
||||
G.GAME.stamp_mod = true
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit + 1
|
||||
SMODS.change_play_limit(1)
|
||||
SMODS.change_discard_limit(1)
|
||||
end
|
||||
end,
|
||||
defeat = function(self, silent)
|
||||
|
@ -862,7 +1181,8 @@ local sapphire_stamp = {
|
|||
G.GAME.stamp_mod = nil
|
||||
end
|
||||
if not G.GAME.blind.disabled then
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit - 1
|
||||
SMODS.change_play_limit(-1)
|
||||
SMODS.change_discard_limit(-1)
|
||||
end
|
||||
end,
|
||||
disable = function(self, silent)
|
||||
|
@ -870,7 +1190,8 @@ local sapphire_stamp = {
|
|||
G.GAME.stamp_mod = nil
|
||||
end
|
||||
if not G.GAME.blind.disabled then
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit - 1
|
||||
SMODS.change_play_limit(-1)
|
||||
SMODS.change_discard_limit(-1)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
@ -1233,7 +1554,7 @@ local obsidian_orb = {
|
|||
if area == G.hand then
|
||||
if
|
||||
s.name == "The Wheel"
|
||||
and pseudorandom(pseudoseed("ObsidianOrb")) < G.GAME.probabilities.normal / 7
|
||||
and SMODS.pseudorandom_probability(self, "ObsidianOrb", 1, 7, "Obsidian Orb")
|
||||
then
|
||||
return true
|
||||
end
|
||||
|
@ -1348,6 +1669,21 @@ local obsidian_orb = {
|
|||
end
|
||||
end
|
||||
end,
|
||||
cry_before_cash = function(self)
|
||||
local decision_made = false
|
||||
for k, _ in pairs(G.GAME.defeated_blinds) do
|
||||
s = G.P_BLINDS[k]
|
||||
if s.cry_before_cash then
|
||||
decision_made = true
|
||||
s:cry_before_cash()
|
||||
end
|
||||
end
|
||||
if not decision_made then
|
||||
G.GAME.cry_make_a_decision = nil
|
||||
G.STATE = G.STATES.ROUND_EVAL
|
||||
G.STATE_COMPLETE = false
|
||||
end
|
||||
end,
|
||||
get_loc_debuff_text = function(self)
|
||||
if not G.GAME.blind.debuff_boss then
|
||||
return localize("cry_debuff_obsidian_orb")
|
||||
|
@ -1406,6 +1742,7 @@ local trophy = {
|
|||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local items_togo = {
|
||||
oldox,
|
||||
oldhouse,
|
||||
|
@ -1427,6 +1764,8 @@ local items_togo = {
|
|||
shackle,
|
||||
pin,
|
||||
scorch,
|
||||
greed,
|
||||
repulsor,
|
||||
vermillion_virus,
|
||||
tornado,
|
||||
sapphire_stamp,
|
||||
|
@ -1434,5 +1773,8 @@ local items_togo = {
|
|||
clock,
|
||||
lavender_loop,
|
||||
trophy,
|
||||
decision,
|
||||
chromatic,
|
||||
landlord,
|
||||
}
|
||||
return { name = "Blinds", items = items_togo }
|
||||
|
|
|
@ -51,7 +51,9 @@ local ballin = {
|
|||
key = "ballin",
|
||||
order = 1,
|
||||
rules = {
|
||||
custom = {},
|
||||
custom = {
|
||||
{ id = "cry_force_enhancement", value = "m_stone" },
|
||||
},
|
||||
modifiers = {
|
||||
{ id = "joker_slots", value = 3 },
|
||||
},
|
||||
|
@ -66,20 +68,6 @@ local ballin = {
|
|||
restrictions = {
|
||||
banned_cards = {
|
||||
{ id = "j_vampire" },
|
||||
{ id = "c_magician" },
|
||||
{ id = "c_empress" },
|
||||
{ id = "c_heirophant" },
|
||||
{ id = "c_lovers" },
|
||||
{ id = "c_chariot" },
|
||||
{ id = "c_justice" },
|
||||
{ id = "c_devil" },
|
||||
{ id = "c_tower" },
|
||||
{ id = "c_cry_seraph" },
|
||||
{ id = "c_familiar" },
|
||||
{ id = "c_grim" },
|
||||
{ id = "c_incantation" },
|
||||
{ id = "c_cry_eclipse" },
|
||||
{ id = "c_cry_class" },
|
||||
},
|
||||
banned_other = {},
|
||||
},
|
||||
|
@ -128,10 +116,6 @@ local rush_hour_ii = {
|
|||
{ id = "j_diet_cola" },
|
||||
{ id = "v_directors_cut" },
|
||||
{ id = "v_retcon" },
|
||||
{ id = "j_cry_pickle" },
|
||||
{ id = "v_cry_copies" },
|
||||
{ id = "v_cry_tag_printer" },
|
||||
{ id = "v_cry_clone_machine" },
|
||||
},
|
||||
banned_other = {},
|
||||
},
|
||||
|
@ -145,7 +129,7 @@ local rush_hour_iii = {
|
|||
custom = {
|
||||
{ id = "cry_rush_hour" },
|
||||
{ id = "cry_rush_hour_ii" },
|
||||
{ id = "cry_rush_hour_iii" },
|
||||
{ id = "cry_rush_hour_iii", value = 2 },
|
||||
{ id = "cry_no_tags" },
|
||||
},
|
||||
modifiers = {},
|
||||
|
@ -222,10 +206,6 @@ local rush_hour_iii = {
|
|||
{ id = "j_diet_cola" },
|
||||
{ id = "v_directors_cut" },
|
||||
{ id = "v_retcon" },
|
||||
{ id = "j_cry_pickle" },
|
||||
{ id = "v_cry_copies" },
|
||||
{ id = "v_cry_tag_printer" },
|
||||
{ id = "v_cry_clone_machine" },
|
||||
},
|
||||
banned_other = {},
|
||||
},
|
||||
|
@ -506,61 +486,18 @@ function Game:start_run(args)
|
|||
if G.GAME.modifiers.cry_no_consumables then
|
||||
G.GAME.joker_rate = 1e300
|
||||
end
|
||||
for i, v in pairs(G.handlist) do
|
||||
if v == "cry_Declare0" then
|
||||
d0 = true
|
||||
end
|
||||
--Add banned cards when specific features/mods are enabled here
|
||||
--TODO other mods
|
||||
if (SMODS.Mods["jen"] or {}).can_load then
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_chance" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_cry_bundle" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_magician" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_empress" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_heirophant" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_lovers" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_chariot" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_justice" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_devil" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_tower" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_star" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_moon" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_sun" }
|
||||
ballin.restrictions.banned_cards[#ballin.restrictions.banned_cards + 1] = { id = "c_jen_reverse_world" }
|
||||
rng.restrictions.banned_cards[#rng.restrictions.banned_cards + 1] = { id = "c_jen_jokerinatarot" }
|
||||
rng.restrictions.banned_cards[#rng.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_uncommon" }
|
||||
rng.restrictions.banned_cards[#rng.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_rare" }
|
||||
rng.restrictions.banned_cards[#rng.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_top_up" }
|
||||
rng.restrictions.banned_cards[#rng.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_cry_epic" }
|
||||
rng.restrictions.banned_cards[#rng.restrictions.banned_cards + 1] = { id = "c_jen_wraith_ex" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "j_jen_shikigami" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_charm" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_meteor" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_buffoon" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_ethereal" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_token_tag_cry_bundle" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_magician" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_empress" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_heirophant" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_lovers" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_chariot" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_justice" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_devil" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_tower" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] =
|
||||
{ id = "c_jen_reverse_high_priestess" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_emperor" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_death" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_star" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_moon" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_sun" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_world" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_reverse_judgement" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_mischief" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_wonder" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_familiar_ex" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_grim_ex" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_incantation_ex" }
|
||||
onlycard.restrictions.banned_cards[#onlycard.restrictions.banned_cards + 1] = { id = "c_jen_cryptid_ex" }
|
||||
end
|
||||
--end of banned cards
|
||||
if not d0 then
|
||||
table.insert(G.handlist, 1, "cry_Declare0")
|
||||
table.insert(G.handlist, 1, "cry_Declare1")
|
||||
table.insert(G.handlist, 1, "cry_Declare2")
|
||||
end
|
||||
Cryptid.base_values = {}
|
||||
end
|
||||
local challenges = {
|
||||
sticker_sheet,
|
||||
sticker_sheet_plus,
|
||||
|
|
|
@ -55,34 +55,6 @@ local equilibrium = {
|
|||
apply = function(self)
|
||||
G.GAME.modifiers.cry_equilibrium = true
|
||||
end,
|
||||
init = function(self)
|
||||
local gp = get_pack
|
||||
function get_pack(k, t)
|
||||
if G.GAME.modifiers.cry_equilibrium then
|
||||
if not P_CRY_ITEMS then
|
||||
P_CRY_ITEMS = {}
|
||||
local valid_pools = { "Joker", "Consumeables", "Voucher", "Booster" }
|
||||
for _, id in ipairs(valid_pools) do
|
||||
for k, v in pairs(G.P_CENTER_POOLS[id]) do
|
||||
if not Cryptid.no(v, "doe", k) then
|
||||
P_CRY_ITEMS[#P_CRY_ITEMS + 1] = v.key
|
||||
end
|
||||
end
|
||||
end
|
||||
for k, v in pairs(G.P_CARDS) do
|
||||
if not Cryptid.no(v, "doe", k) then
|
||||
P_CRY_ITEMS[#P_CRY_ITEMS + 1] = v.key
|
||||
end
|
||||
end
|
||||
end
|
||||
return G.P_CENTERS[pseudorandom_element(
|
||||
P_CRY_ITEMS,
|
||||
pseudoseed("cry_equipackbrium" .. G.GAME.round_resets.ante)
|
||||
)]
|
||||
end
|
||||
return gp(k, t)
|
||||
end
|
||||
end,
|
||||
unlocked = false,
|
||||
check_for_unlock = function(self, args)
|
||||
if Cryptid.safe_get(G, "jokers") then
|
||||
|
@ -147,13 +119,22 @@ local infinite = {
|
|||
name = "cry-Infinite",
|
||||
key = "infinite",
|
||||
order = 2,
|
||||
config = { cry_highlight_limit = 1e20, hand_size = 1 },
|
||||
config = { hand_size = 1 },
|
||||
pos = { x = 3, y = 0 },
|
||||
atlas = "atlasdeck",
|
||||
apply = function(self)
|
||||
G.GAME.modifiers.cry_highlight_limit = self.config.cry_highlight_limit
|
||||
end,
|
||||
unlocked = false,
|
||||
apply = function(self)
|
||||
G.GAME.infinitedeck = true
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.7,
|
||||
func = function()
|
||||
SMODS.change_play_limit(1e6)
|
||||
SMODS.change_discard_limit(1e6)
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end,
|
||||
check_for_unlock = function(self, args)
|
||||
if args.type == "hand_contents" then
|
||||
if #args.cards >= 6 then
|
||||
|
@ -377,17 +358,26 @@ local legendary = {
|
|||
},
|
||||
name = "cry-Legendary",
|
||||
key = "legendary",
|
||||
config = { cry_legendary = true, cry_legendary_rate = 0.2 },
|
||||
config = { cry_legendary = true, cry_legendary_rate = 5 },
|
||||
pos = { x = 0, y = 6 },
|
||||
atlas = "atlasdeck",
|
||||
order = 15,
|
||||
loc_vars = function(self, info_queue, center)
|
||||
return { vars = { SMODS.get_probability_vars(self, 1, self.config.cry_legendary_rate, "Legendary Deck") } }
|
||||
end,
|
||||
calculate = function(self, back, context)
|
||||
if context.context == "eval" and Cryptid.safe_get(G.GAME, "last_blind", "boss") then
|
||||
if G.jokers then
|
||||
if #G.jokers.cards < G.jokers.config.card_limit then
|
||||
local legendary_poll = pseudorandom(pseudoseed("cry_legendary"))
|
||||
legendary_poll = legendary_poll / (G.GAME.probabilities.normal or 1)
|
||||
if legendary_poll < self.config.cry_legendary_rate then
|
||||
if
|
||||
SMODS.pseudorandom_probability(
|
||||
self,
|
||||
"cry_legendary",
|
||||
1,
|
||||
self.config.cry_legendary_rate,
|
||||
"Legendary Deck"
|
||||
)
|
||||
then
|
||||
local card = create_card("Joker", G.jokers, true, 4, nil, nil, nil, "")
|
||||
card:add_to_deck()
|
||||
card:start_materialize()
|
||||
|
@ -460,18 +450,21 @@ local critical = {
|
|||
name = "cry-Critical",
|
||||
key = "critical",
|
||||
order = 10,
|
||||
config = { cry_crit_rate = 0.25, cry_crit_miss_rate = 0.125 },
|
||||
config = { cry_crit_rate = 4, cry_crit_miss_rate = 8 },
|
||||
pos = { x = 4, y = 5 },
|
||||
atlas = "atlasdeck",
|
||||
loc_vars = function(self, info_queue, center)
|
||||
return { vars = { G.GAME.probabilities.normal or 1 } }
|
||||
local _, aaa = SMODS.get_probability_vars(self, 1, self.config.cry_crit_miss_rate, "Critical Deck")
|
||||
return { vars = { SMODS.get_probability_vars(self, 1, self.config.cry_crit_rate, "Critical Deck"), aaa } }
|
||||
end,
|
||||
calculate = function(self, card, context)
|
||||
if context.final_scoring_step then
|
||||
local aaa =
|
||||
SMODS.pseudorandom_probability(self, "cry_critical", 1, self.config.cry_crit_rate, "Critical Deck")
|
||||
local bbb =
|
||||
SMODS.pseudorandom_probability(self, "cry_critical", 1, self.config.cry_crit_miss_rate, "Critical Deck")
|
||||
local check
|
||||
local crit_poll = pseudorandom(pseudoseed("cry_critical"))
|
||||
crit_poll = crit_poll / (G.GAME.probabilities.normal or 1)
|
||||
if crit_poll < self.config.cry_crit_rate then
|
||||
if aaa then
|
||||
check = 2
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
|
@ -487,7 +480,7 @@ local critical = {
|
|||
return true
|
||||
end,
|
||||
}))
|
||||
elseif crit_poll < self.config.cry_crit_rate + self.config.cry_crit_miss_rate then
|
||||
elseif bbb then
|
||||
check = 0.5
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
|
@ -552,9 +545,7 @@ local glowing = {
|
|||
if context.context == "eval" and Cryptid.safe_get(G.GAME, "last_blind", "boss") then
|
||||
for i = 1, #G.jokers.cards do
|
||||
if not Card.no(G.jokers.cards[i], "immutable", true) then
|
||||
Cryptid.with_deck_effects(G.jokers.cards[i], function(card)
|
||||
Cryptid.misprintize(card, { min = 1.25, max = 1.25 }, nil, true)
|
||||
end)
|
||||
Cryptid.manipulate(G.jokers.cards[i], { value = 1.25 })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -697,8 +688,8 @@ local antimatter = {
|
|||
key = "antimatter",
|
||||
config = {
|
||||
cry_antimatter = true,
|
||||
cry_crit_rate = 0.25, --Critical Deck
|
||||
cry_legendary_rate = 0.2, --Legendary Deck
|
||||
cry_crit_rate = 4, --Critical Deck
|
||||
cry_legendary_rate = 5, --Legendary Deck
|
||||
-- Enhanced Decks
|
||||
cry_force_enhancement = "random",
|
||||
cry_force_edition = "random",
|
||||
|
@ -882,7 +873,16 @@ local antimatter = {
|
|||
~= 0
|
||||
or skip
|
||||
then
|
||||
G.GAME.modifiers.cry_highlight_limit = 1e20
|
||||
G.GAME.infinitedeck = true
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.7,
|
||||
func = function()
|
||||
SMODS.change_play_limit(1e6)
|
||||
SMODS.change_discard_limit(1e6)
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
G.GAME.starting_params.hand_size = G.GAME.starting_params.hand_size + 1
|
||||
end
|
||||
-- Wormhole deck
|
||||
|
@ -986,8 +986,6 @@ local antimatter = {
|
|||
|
||||
function Cryptid.antimatter_trigger_final_scoring(self, context, skip)
|
||||
if context.context == "final_scoring_step" then
|
||||
local crit_poll = pseudorandom(pseudoseed("cry_critical"))
|
||||
crit_poll = crit_poll / (G.GAME.probabilities.normal or 1)
|
||||
--Critical Deck
|
||||
if
|
||||
(
|
||||
|
@ -997,7 +995,15 @@ local antimatter = {
|
|||
~= 0
|
||||
or skip
|
||||
then
|
||||
if crit_poll < self.config.cry_crit_rate then
|
||||
if
|
||||
SMODS.pseudorandom_probability(
|
||||
self,
|
||||
"cry_critical",
|
||||
1,
|
||||
self.config.cry_crit_rate,
|
||||
"Antimatter Deck"
|
||||
)
|
||||
then
|
||||
context.mult = context.mult ^ 2
|
||||
update_hand_text({ delay = 0 }, { mult = context.mult, chips = context.chips })
|
||||
G.E_MANAGER:add_event(Event({
|
||||
|
@ -1090,9 +1096,7 @@ local antimatter = {
|
|||
or skip
|
||||
then
|
||||
for i = 1, #G.jokers.cards do
|
||||
Cryptid.with_deck_effects(G.jokers.cards[i], function(card)
|
||||
Cryptid.misprintize(card, { min = 1.25, max = 1.25 }, nil, true)
|
||||
end)
|
||||
Cryptid.manipulate(G.jokers.cards[i], { value = 1.25 })
|
||||
end
|
||||
end
|
||||
--Legendary Deck
|
||||
|
@ -1112,9 +1116,15 @@ local antimatter = {
|
|||
or skip
|
||||
then
|
||||
if #G.jokers.cards < G.jokers.config.card_limit then
|
||||
local legendary_poll = pseudorandom(pseudoseed("cry_legendary"))
|
||||
legendary_poll = legendary_poll / (G.GAME.probabilities.normal or 1)
|
||||
if legendary_poll < self.config.cry_legendary_rate then
|
||||
if
|
||||
SMODS.pseudorandom_probability(
|
||||
self,
|
||||
"cry_legendary",
|
||||
1,
|
||||
self.config.cry_legendary_rate,
|
||||
"Antimatter Deck"
|
||||
)
|
||||
then
|
||||
local card = create_card("Joker", G.jokers, true, 4, nil, nil, nil, "")
|
||||
card:add_to_deck()
|
||||
card:start_materialize()
|
||||
|
@ -1234,7 +1244,7 @@ local antimatter = {
|
|||
unlocked = false,
|
||||
check_for_unlock = function(self, args)
|
||||
if args.type == "win_deck" then
|
||||
if get_deck_win_stake("b_cry_blank") > 0 and get_deck_win_stake() >= 8 then
|
||||
if get_deck_win_stake("b_cry_blank") >= 8 then
|
||||
unlock_card(self)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
--Move all the stuff in here into atlasdeck.png later
|
||||
--Also a lot of the edition decks have wrong proportions so those also need to get fixed
|
||||
local atlasedition = {
|
||||
object_type = "Atlas",
|
||||
key = "atlaseditiondeck",
|
||||
|
@ -78,7 +76,7 @@ Cryptid.edeck_atlas_update = function(self)
|
|||
if not sprite then
|
||||
error(self.edeck_type)
|
||||
end
|
||||
local enh_info = { Cryptid.enhanced_deck_info(self) }
|
||||
local enh_info = { Cryptid.enhanced_deck_info(G.cry_edeck_center and self or {}) }
|
||||
sprite = sprite[enh_info[sprite.order]] or sprite.default
|
||||
self.atlas, self.pos = sprite.atlas, sprite.pos
|
||||
return sprite
|
||||
|
@ -96,13 +94,13 @@ local e_deck = {
|
|||
order = 17,
|
||||
pos = { x = 5, y = 2 },
|
||||
loc_vars = function(self, info_queue, center)
|
||||
local aaa = Cryptid.enhanced_deck_info(self)
|
||||
local aaa = Cryptid.enhanced_deck_info(G.cry_edeck_center and self or {})
|
||||
return { vars = { localize({ type = "name_text", set = "Edition", key = "e_" .. aaa }) } }
|
||||
end,
|
||||
edeck_type = "edition",
|
||||
config = { cry_no_edition_price = true },
|
||||
apply = function(self)
|
||||
local aaa = Cryptid.enhanced_deck_info(self)
|
||||
local aaa = Cryptid.enhanced_deck_info({})
|
||||
G.GAME.modifiers.cry_force_edition = aaa
|
||||
--Ban Edition tags (They will never redeem)
|
||||
for k, v in pairs(G.P_TAGS) do
|
||||
|
@ -327,20 +325,7 @@ return {
|
|||
init = function()
|
||||
local sa = Card.set_ability
|
||||
function Card:set_ability(center, y, z)
|
||||
--adding immutable to cards because
|
||||
-- A they are hardcoded and unaffected by misprintize but still have a description that changes because of it
|
||||
-- B so they ignore misprintize in order to keep vanilla descripton accurate (ex hack shouldn't be able to trigger more than once)
|
||||
-- C so Gemini doesn't say they are compatible when they are not
|
||||
-- D Invisible Joker
|
||||
|
||||
if
|
||||
center
|
||||
and center.name
|
||||
== ("Fortune Teller" or "Shoot the Moon" or "Riff-raff" or "Chaos the Clown" or "Dusk" or "Mime" or "Hack" or "Sock and Buskin" or "Invisible Joker" or "Swashbuckler" or "Smeared Joker" or "Certificate" or "Mr. Bones" or "Diet Cola" or "Luchador" or "Midas Mask" or "Shortcut" or "Seance" or "Superposition" or "Sixth Sense" or "DNA" or "Splash" or "Supernova" or "Pareidolia" or "Raised Fist" or "Marble Joker" or "Four Fingers" or "Joker Stencil" or "Showman" or "Blueprint" or "Oops! All 6s" or "Brainstorm" or "Cartomancer" or "Astronomer" or "Burnt Joker" or "Chicot" or "Perkeo")
|
||||
then
|
||||
self.config.center.immutable = true
|
||||
end
|
||||
if Cryptid.safe_get(center, "name") == "Default Base" then -- scuffed
|
||||
if not G.SETTINGS.paused and Cryptid.safe_get(center, "name") == "Default Base" then -- scuffed
|
||||
return sa(
|
||||
self,
|
||||
(not self.no_forced_enhancement and G.GAME.modifiers.cry_force_enhancement)
|
||||
|
@ -355,7 +340,7 @@ return {
|
|||
end
|
||||
local se = Card.set_edition
|
||||
function Card:set_edition(edition, y, z, force)
|
||||
if not force then
|
||||
if not force and not G.SETTINGS.paused then
|
||||
return se(
|
||||
self,
|
||||
(not self.no_forced_edition and G.GAME.modifiers.cry_force_edition)
|
||||
|
@ -369,11 +354,19 @@ return {
|
|||
end
|
||||
local ss = Card.set_seal
|
||||
function Card:set_seal(seal, y, z)
|
||||
return ss(self, not self.no_forced_seal and G.GAME.modifiers.cry_force_seal or seal, y, z)
|
||||
return ss(
|
||||
self,
|
||||
not self.no_forced_seal and not G.SETTINGS.paused and G.GAME.modifiers.cry_force_seal or seal,
|
||||
y,
|
||||
z
|
||||
)
|
||||
end
|
||||
local cs = Card.change_suit
|
||||
function Card:change_suit(new_suit)
|
||||
return cs(self, not self.no_forced_suit and G.GAME.modifiers.cry_force_suit or new_suit)
|
||||
return cs(
|
||||
self,
|
||||
not self.no_forced_suit and not G.SETTINGS.paused and G.GAME.modifiers.cry_force_suit or new_suit
|
||||
)
|
||||
end
|
||||
local ccl = Card.click
|
||||
function Card:click()
|
||||
|
@ -391,8 +384,9 @@ return {
|
|||
and (Cryptid.safe_get(G.GAME, "viewed_back", "effect", "center", "edeck_type") and (self.back == "viewed_back" or self.edeck_select))
|
||||
then
|
||||
if not G.cry_edeck_select then
|
||||
Cryptid.enhancement_config_UI(Galdur and self.config.center or G.GAME.viewed_back.effect.center)
|
||||
G.cry_edeck_select = true
|
||||
G.cry_edeck_center = Galdur and self.config.center or G.GAME.viewed_back.effect.center
|
||||
Cryptid.enhancement_config_UI(Galdur and self.config.center or G.GAME.viewed_back.effect.center, 1)
|
||||
else
|
||||
if self.edeck_select then
|
||||
G.PROFILES[G.SETTINGS.profile]["cry_edeck_" .. self.config.center.edeck_type] =
|
||||
|
@ -402,10 +396,12 @@ return {
|
|||
definition = G.UIDEF.run_setup("main_menu_play"),
|
||||
})
|
||||
G.cry_edeck_select = nil
|
||||
G.cry_edeck_center = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
function Cryptid.enhancement_config_UI(center)
|
||||
function Cryptid.enhancement_config_UI(center, actual_page)
|
||||
local count_per_page = 6
|
||||
if not center.edeck_type then
|
||||
return
|
||||
end
|
||||
|
@ -434,18 +430,30 @@ return {
|
|||
seal = G.P_SEALS,
|
||||
}
|
||||
local editions = {}
|
||||
for _, v in pairs(pool_table[center.edeck_type]) do
|
||||
for i, v in pairs(pool_table[center.edeck_type]) do
|
||||
if v.key ~= "e_base" and not v.no_edeck then
|
||||
editions[#editions + 1] = (center.edeck_type == "edition" and v.key:sub(3)) or v.key
|
||||
editions[#editions + 1] =
|
||||
{ index = i, center = (center.edeck_type == "edition" and v.key:sub(3)) or v.key }
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, #editions do
|
||||
local page = (actual_page and actual_page * count_per_page or count_per_page) - (count_per_page - 1)
|
||||
local max_pages = math.floor(#editions / count_per_page)
|
||||
if max_pages * count_per_page < #editions then --idk why this is needed but it is
|
||||
max_pages = max_pages + 1
|
||||
end
|
||||
local modification_options = {}
|
||||
for i = 1, max_pages do
|
||||
table.insert(
|
||||
modification_options,
|
||||
localize("k_page") .. " " .. tostring(i) .. "/" .. tostring(max_pages)
|
||||
)
|
||||
end
|
||||
for i = page, math.min(page + count_per_page - 1, #editions) do
|
||||
local _center = Cryptid.deep_copy(center)
|
||||
_center.config["cry_force_" .. center.edeck_type] = editions[i]
|
||||
_center.config["cry_force_" .. center.edeck_type] = editions[i].center
|
||||
Cryptid.edeck_atlas_update(_center)
|
||||
local card = Cryptid.generic_card(_center)
|
||||
card.edeck_select = editions[i]
|
||||
card.edeck_select = editions[i].center
|
||||
G.your_collection[1]:emplace(card)
|
||||
end
|
||||
|
||||
|
@ -461,12 +469,31 @@ return {
|
|||
config = { align = "cm", minw = 2.5, padding = 0.1, r = 0.1, colour = G.C.BLACK, emboss = 0.05 },
|
||||
nodes = { deck_tables },
|
||||
},
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm" },
|
||||
nodes = {
|
||||
create_option_cycle({
|
||||
options = modification_options,
|
||||
w = 4.5,
|
||||
cycle_shoulders = true,
|
||||
opt_callback = "edeck_page",
|
||||
current_option = actual_page,
|
||||
colour = G.C.RED,
|
||||
no_pips = true,
|
||||
focus_args = { snap_to = true, nav = "wide" },
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
G.FUNCS.overlay_menu({
|
||||
definition = t,
|
||||
})
|
||||
end
|
||||
G.FUNCS.edeck_page = function(args)
|
||||
Cryptid.enhancement_config_UI(G.cry_edeck_center, args.cycle_config.current_option)
|
||||
end
|
||||
end,
|
||||
items = { e_deck, et_deck, sk_deck, st_deck, sl_deck, atlasedition },
|
||||
}
|
||||
|
|
|
@ -141,6 +141,7 @@
|
|||
--Penetrating Joker
|
||||
--Treacherous Joker
|
||||
|
||||
--[[
|
||||
if JokerDisplay then
|
||||
--Side note: I Don't think retrigger type exp gives a correct value with Emult jokers, but ehhhhh ig I can live with that (It's good enough)
|
||||
|
||||
|
@ -1374,9 +1375,9 @@ if JokerDisplay then
|
|||
{ ref_table = "card.joker_display_values", ref_value = "localized_text" },
|
||||
},
|
||||
calc_function = function(card)
|
||||
local is_active = card.ability.extra.score >= card.ability.extra.req
|
||||
local is_active = card.ability.immutable.score >= card.ability.extra.req
|
||||
card.joker_display_values.localized_text = "("
|
||||
.. (is_active and localize("k_active_ex") or (card.ability.extra.score .. "/" .. card.ability.extra.req))
|
||||
.. (is_active and localize("k_active_ex") or (card.ability.immutable.score .. "/" .. card.ability.extra.req))
|
||||
.. ")"
|
||||
end,
|
||||
}
|
||||
|
@ -2041,4 +2042,6 @@ if JokerDisplay then
|
|||
|
||||
--end of Jokerdisplays
|
||||
end
|
||||
]]
|
||||
--
|
||||
return { name = "JokerDisplay" }
|
||||
|
|
2725
Cryptid/items/pointer.lua
Normal file
|
@ -118,7 +118,7 @@ local amber = {
|
|||
atlas = "stake",
|
||||
applied_stakes = { "cry_diamond" },
|
||||
modifiers = function()
|
||||
G.GAME.modifiers.cry_booster_packs = 1
|
||||
G.GAME.modifiers.extra_boosters = -1
|
||||
end,
|
||||
shiny = true,
|
||||
order = 17,
|
||||
|
@ -352,10 +352,7 @@ return {
|
|||
-- Disallow use of Debuffed Perishable consumables
|
||||
local cuc = Card.can_use_consumeable
|
||||
function Card:can_use_consumeable(any_state, skip_check)
|
||||
if self.ability.perish_tally == nil then
|
||||
self.ability.perish_tally = G.GAME.perishable_rounds or 5
|
||||
end
|
||||
if self.ability.perishable and self.ability.perish_tally <= 0 then
|
||||
if self.debuff then
|
||||
return false
|
||||
end
|
||||
return cuc(self, any_state, skip_check)
|
||||
|
@ -366,7 +363,7 @@ return {
|
|||
local temp_hand = {}
|
||||
local hasHand = false
|
||||
for k, v in ipairs(G.hand.cards) do
|
||||
if not v.ability.eternal then
|
||||
if not SMODS.is_eternal(v) then
|
||||
temp_hand[#temp_hand + 1] = v
|
||||
hasHand = true
|
||||
end
|
||||
|
|
|
@ -225,6 +225,9 @@ local empoweredPack = {
|
|||
G.consumeables:emplace(ccard)
|
||||
end,
|
||||
},
|
||||
in_pool = function()
|
||||
return false
|
||||
end,
|
||||
}
|
||||
local empowered = {
|
||||
cry_credits = {
|
||||
|
@ -325,11 +328,11 @@ local gambler = {
|
|||
key = "gambler",
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = { set = "Tag", key = "tag_cry_empowered" }
|
||||
return { vars = { G.GAME.probabilities.normal or 1, self.config.odds } }
|
||||
return { vars = { SMODS.get_probability_vars(self, 1, self.config.odds, "Gambler Tag") } }
|
||||
end,
|
||||
apply = function(self, tag, context)
|
||||
if context.type == "new_blind_choice" then
|
||||
if pseudorandom("cry_gambler_tag") < G.GAME.probabilities.normal / tag.config.odds then
|
||||
if SMODS.pseudorandom_probability(card, "cry_gambler_tag", 1, tag.config.odds, "Gambler Tag") then
|
||||
local lock = tag.ID
|
||||
G.CONTROLLER.locks[lock] = true
|
||||
tag:yep("+", G.C.SECONDARY_SET.Spectral, function()
|
||||
|
@ -1036,22 +1039,14 @@ local banana = {
|
|||
set = "Joker",
|
||||
key = G.P_CENTER_POOLS["Joker"][61].key,
|
||||
})
|
||||
info_queue[#info_queue + 1] = {
|
||||
set = "Joker",
|
||||
key = "j_cavendish",
|
||||
specific_vars = { 3, G.GAME.probabilities.normal or 1, 1000 },
|
||||
}
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.j_cavendish
|
||||
else
|
||||
banana = localize({
|
||||
type = "name_text",
|
||||
set = "Joker",
|
||||
key = G.P_CENTER_POOLS["Joker"][38].key,
|
||||
})
|
||||
info_queue[#info_queue + 1] = {
|
||||
set = "Joker",
|
||||
key = "j_gros_michel",
|
||||
specific_vars = { 15, G.GAME.probabilities.normal or 1, 6 },
|
||||
}
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.j_gros_michel
|
||||
end
|
||||
return { vars = { banana } }
|
||||
end,
|
||||
|
@ -1328,7 +1323,7 @@ local better_voucher = {
|
|||
G.P_CENTERS[voucher_key],
|
||||
{ bypass_discovery_center = true, bypass_discovery_ui = true }
|
||||
)
|
||||
Cryptid.misprintize(card)
|
||||
Cryptid.manipulate(card)
|
||||
create_shop_card_ui(card, "Voucher", G.shop_vouchers)
|
||||
card:start_materialize()
|
||||
if G.GAME.modifiers.cry_force_edition and not G.GAME.modifiers.cry_force_random_edition then
|
||||
|
@ -1404,7 +1399,7 @@ local booster = {
|
|||
local lock = tag.ID
|
||||
G.CONTROLLER.locks[lock] = true
|
||||
tag:yep("+", G.C.BLUE, function()
|
||||
G.GAME.boostertag = (G.GAME.boostertag or 0) + 1
|
||||
G.GAME.boostertag = G.GAME.boostertag + 1
|
||||
G.CONTROLLER.locks[lock] = nil
|
||||
return true
|
||||
end)
|
||||
|
@ -1413,6 +1408,244 @@ local booster = {
|
|||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local clone = {
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Squiddy",
|
||||
},
|
||||
art = {
|
||||
"lord.ruby",
|
||||
},
|
||||
code = {
|
||||
"lord.ruby",
|
||||
},
|
||||
},
|
||||
object_type = "Tag",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tag",
|
||||
},
|
||||
},
|
||||
name = "cry-Clone Tag",
|
||||
order = 29,
|
||||
atlas = "tag_cry",
|
||||
pos = { x = 6, y = 3 },
|
||||
config = { type = "item_bought", cost_fac = 1.5 },
|
||||
key = "clone",
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = { self.config.cost_fac } }
|
||||
end,
|
||||
min_ante = 4,
|
||||
apply = function(self, tag, context)
|
||||
if context.type == "item_bought" then
|
||||
local lock = tag.ID
|
||||
G.CONTROLLER.locks[lock] = true
|
||||
tag:yep("+", G.C.BLUE, function()
|
||||
local copy = copy_card(context.card)
|
||||
copy:add_to_deck()
|
||||
if context.card.area then
|
||||
context.card.area:emplace(copy)
|
||||
else
|
||||
G.consumeables:emplace(copy)
|
||||
end
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
for i, v in pairs(G.I.CARD) do
|
||||
if v.set_cost then
|
||||
v:set_cost()
|
||||
end
|
||||
end
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
G.CONTROLLER.locks[lock] = nil
|
||||
return true
|
||||
end)
|
||||
tag.triggered = true
|
||||
return true
|
||||
end
|
||||
end,
|
||||
init = function()
|
||||
local buy_ref = G.FUNCS.buy_from_shop
|
||||
G.FUNCS.buy_from_shop = function(e)
|
||||
local r = buy_ref(e)
|
||||
if r ~= false then
|
||||
for i = 1, #G.GAME.tags do
|
||||
G.GAME.tags[i]:apply_to_run({ type = "item_bought", card = e.config.ref_table })
|
||||
end
|
||||
end
|
||||
return r
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local lens = {
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Squiddy",
|
||||
},
|
||||
art = {
|
||||
"lord.ruby",
|
||||
},
|
||||
code = {
|
||||
"lord.ruby",
|
||||
},
|
||||
},
|
||||
object_type = "Tag",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tag",
|
||||
},
|
||||
},
|
||||
name = "cry-Lens Tag",
|
||||
order = 30,
|
||||
atlas = "tag_cry",
|
||||
pos = { x = 7, y = 3 },
|
||||
config = { type = "immediate", negatives = 2 },
|
||||
key = "lens",
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.e_negative
|
||||
return { vars = { self.config.negatives } }
|
||||
end,
|
||||
min_ante = 4,
|
||||
apply = function(self, tag, context)
|
||||
if context.type == "immediate" then
|
||||
local c = {}
|
||||
for i, v in pairs(G.consumeables.cards) do
|
||||
if not v.edition or not v.edition.negative then
|
||||
if not v.will_be_editioned then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
if #c > 0 then
|
||||
local lock = tag.ID
|
||||
G.CONTROLLER.locks[lock] = true
|
||||
local card = pseudorandom_element(c, pseudoseed("cry_lens_tag"))
|
||||
card.will_be_editioned = true
|
||||
local card2 = pseudorandom_element(c, pseudoseed("cry_lens_tag"))
|
||||
if card2 then
|
||||
card2.will_be_editioned = true
|
||||
end
|
||||
tag:yep("+", G.C.BLUE, function()
|
||||
card:set_edition("e_negative")
|
||||
G.CONTROLLER.locks[lock] = nil
|
||||
card.will_be_editioned = nil
|
||||
if card2 then
|
||||
card2:set_edition("e_negative")
|
||||
card2.will_be_editioned = nil
|
||||
end
|
||||
return true
|
||||
end)
|
||||
else
|
||||
tag:nope()
|
||||
end
|
||||
tag.triggered = true
|
||||
return true
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local palette_cleanser = {
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Squiddy",
|
||||
},
|
||||
art = {
|
||||
"lord.ruby",
|
||||
},
|
||||
code = {
|
||||
"lord.ruby",
|
||||
},
|
||||
},
|
||||
object_type = "Tag",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tag",
|
||||
},
|
||||
},
|
||||
name = "cry-Palette Cleanser Tag",
|
||||
order = 30,
|
||||
atlas = "tag_cry",
|
||||
pos = { x = 0, y = 4 },
|
||||
config = { type = "immediate" },
|
||||
key = "palette_cleanser",
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = {} }
|
||||
end,
|
||||
min_ante = 4,
|
||||
apply = function(self, tag, context)
|
||||
if context.type == "immediate" then
|
||||
local c = {}
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
if v:has_stickers() then
|
||||
if not v.will_be_cleansed then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in pairs(G.deck.cards) do
|
||||
if v:has_stickers() then
|
||||
if not v.will_be_cleansed then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in pairs(G.hand.cards) do
|
||||
if v:has_stickers() then
|
||||
if not v.will_be_cleansed then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
if #c > 0 then
|
||||
local lock = tag.ID
|
||||
G.CONTROLLER.locks[lock] = true
|
||||
local card = pseudorandom_element(c, pseudoseed("cry_palette_cleanser_tag"))
|
||||
card.will_be_cleansed = true
|
||||
tag:yep("+", G.C.BLUE, function()
|
||||
card:remove_random_sticker("cry_palette_cleanser_sticker")
|
||||
G.CONTROLLER.locks[lock] = nil
|
||||
card.will_be_cleansed = nil
|
||||
return true
|
||||
end)
|
||||
else
|
||||
tag:nope()
|
||||
end
|
||||
tag.triggered = true
|
||||
return true
|
||||
end
|
||||
end,
|
||||
in_pool = function()
|
||||
local c = {}
|
||||
if G.jokers then
|
||||
for i, v in pairs(G.jokers.cards) do
|
||||
if not v:has_stickers() then
|
||||
if not v.will_be_cleansed then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in pairs(G.deck.cards) do
|
||||
if not v:has_stickers() then
|
||||
if not v.will_be_cleansed then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in pairs(G.hand.cards) do
|
||||
if not v:has_stickers() then
|
||||
if not v.will_be_cleansed then
|
||||
c[#c + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return #c > 0
|
||||
end,
|
||||
}
|
||||
|
||||
local tagitems = {
|
||||
cat,
|
||||
empoweredPack,
|
||||
|
@ -1436,6 +1669,9 @@ local tagitems = {
|
|||
blur_tag,
|
||||
astral_tag,
|
||||
loss,
|
||||
clone,
|
||||
lens,
|
||||
palette_cleanser,
|
||||
m_tag,
|
||||
double_m_tag,
|
||||
}
|
||||
|
|
|
@ -129,18 +129,24 @@ local test3 = {
|
|||
},
|
||||
},
|
||||
calculate = function(self, card, context)
|
||||
if context.end_of_round and not context.individual and not context.repetition then
|
||||
Cryptid.suit_level_up(context.blueprint_card or card, nil, 1, {
|
||||
"High Card",
|
||||
"Pair",
|
||||
"Two Pair",
|
||||
"Three of a Kind",
|
||||
"Straight",
|
||||
"Flush",
|
||||
"Full House",
|
||||
"Four of a Kind",
|
||||
"Straight Flush",
|
||||
}, true)
|
||||
if context.using_consumeable then
|
||||
if context.consumeable.ability.set == "Tarot" then
|
||||
Cryptid.suit_level_up(
|
||||
context.blueprint_card or card,
|
||||
nil,
|
||||
1,
|
||||
Cryptid.table_merge({ "Three of a Kind" }, { "Three of a Kind" }, { "Full House" }, { "Pair" }),
|
||||
true
|
||||
)
|
||||
else
|
||||
Cryptid.suit_level_up(
|
||||
context.blueprint_card or card,
|
||||
nil,
|
||||
1,
|
||||
Cryptid.table_merge({ "Three of a Kind" }, { "Full House" }, { "Pair" }, { "Three of a Kind" }),
|
||||
true
|
||||
)
|
||||
end
|
||||
elseif context.pre_discard and not context.hook then
|
||||
local text, loc_disp_text, poker_hands, scoring_hand, disp_text =
|
||||
G.FUNCS.get_poker_hand_info(G.hand.highlighted)
|
||||
|
|
|
@ -5,7 +5,9 @@ local voucher_atlas = {
|
|||
px = 71,
|
||||
py = 95,
|
||||
}
|
||||
local copies = { --Double tags become Triple Tags and are 2X as common
|
||||
|
||||
-- Normal Vouchers (T1/T2)
|
||||
local copies = { -- DTag T1; Double tags become Triple Tags and are 2X as common
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Catman",
|
||||
|
@ -27,7 +29,7 @@ local copies = { --Double tags become Triple Tags and are 2X as common
|
|||
},
|
||||
key = "copies",
|
||||
atlas = "atlasvoucher",
|
||||
order = 1,
|
||||
order = 20001,
|
||||
pos = { x = 1, y = 1 },
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = { set = "Tag", key = "tag_double" }
|
||||
|
@ -56,7 +58,7 @@ local copies = { --Double tags become Triple Tags and are 2X as common
|
|||
end
|
||||
end,
|
||||
}
|
||||
local tag_printer = { --Double tags become Quadruple Tags and are 3X as common
|
||||
local tag_printer = { --DTag T2; Double tags become Quadruple Tags and are 3X as common
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Catman",
|
||||
|
@ -78,7 +80,7 @@ local tag_printer = { --Double tags become Quadruple Tags and are 3X as common
|
|||
},
|
||||
},
|
||||
key = "tag_printer",
|
||||
order = 2,
|
||||
order = 20002,
|
||||
atlas = "atlasvoucher",
|
||||
pos = { x = 1, y = 2 },
|
||||
loc_vars = function(self, info_queue)
|
||||
|
@ -88,144 +90,7 @@ local tag_printer = { --Double tags become Quadruple Tags and are 3X as common
|
|||
end,
|
||||
requires = { "v_cry_copies" },
|
||||
}
|
||||
local clone_machine = { --Double tags become Quintuple Tags and are 4X as common
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Catman",
|
||||
"Mystic Misclick",
|
||||
},
|
||||
art = {
|
||||
"Linus Goof Balls",
|
||||
},
|
||||
code = {
|
||||
"Math",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_tag",
|
||||
"set_cry_tier3",
|
||||
"v_cry_tag_printer",
|
||||
},
|
||||
},
|
||||
key = "clone_machine",
|
||||
atlas = "atlasvoucher",
|
||||
order = 91,
|
||||
pos = { x = 1, y = 3 },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = { set = "Tag", key = "tag_double" }
|
||||
info_queue[#info_queue + 1] = { set = "Tag", key = "tag_cry_quintuple", specific_vars = { 4 } }
|
||||
return { vars = {} }
|
||||
end,
|
||||
requires = { "v_cry_tag_printer" },
|
||||
}
|
||||
local command_prompt = { --Code cards can appear in the shop
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Mathguy",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_code",
|
||||
},
|
||||
},
|
||||
key = "command_prompt",
|
||||
atlas = "atlasvoucher",
|
||||
order = 3,
|
||||
pos = { x = 0, y = 1 },
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = {} }
|
||||
end,
|
||||
redeem = function(self)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
G.GAME.code_rate = (G.GAME.code_rate or 0) + 4
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end,
|
||||
unredeem = function(self)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
G.GAME.code_rate = math.max(0, G.GAME.code_rate - 4)
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end,
|
||||
}
|
||||
local satellite_uplink = { --Code cards may appear in any of the Celestial Packs
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Mathguy",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_code",
|
||||
"v_cry_command_prompt",
|
||||
},
|
||||
},
|
||||
key = "satellite_uplink",
|
||||
atlas = "atlasvoucher",
|
||||
order = 4,
|
||||
pos = { x = 0, y = 2 },
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = {} }
|
||||
end,
|
||||
requires = { "v_cry_command_prompt" },
|
||||
}
|
||||
local quantum_computing = { --Code cards can spawn with Negative addition
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Mathguy",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_tier3",
|
||||
"set_cry_code",
|
||||
"v_cry_satellite_uplink",
|
||||
},
|
||||
},
|
||||
key = "quantum_computing",
|
||||
order = 92,
|
||||
atlas = "atlasvoucher",
|
||||
pos = { x = 0, y = 3 },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = {} }
|
||||
end,
|
||||
requires = { "v_cry_satellite_uplink" },
|
||||
}
|
||||
local pairing = { --Retrigger all M Jokers if played hand is a Pair
|
||||
local pairing = { -- M T1; Retrigger all M Jokers if played hand is a Pair
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
|
@ -235,7 +100,7 @@ local pairing = { --Retrigger all M Jokers if played hand is a Pair
|
|||
},
|
||||
key = "pairing",
|
||||
atlas = "atlasvoucher",
|
||||
order = 5,
|
||||
order = 20003,
|
||||
pos = { x = 4, y = 5 },
|
||||
cry_credits = {
|
||||
art = {
|
||||
|
@ -257,7 +122,7 @@ local pairing = { --Retrigger all M Jokers if played hand is a Pair
|
|||
return false
|
||||
end,
|
||||
}
|
||||
local repair_man = { --Retrigger all M Jokers if played hand contains a pair
|
||||
local repair_man = { -- M T2; Retrigger all M Jokers if played hand contains a pair
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
|
@ -268,7 +133,7 @@ local repair_man = { --Retrigger all M Jokers if played hand contains a pair
|
|||
},
|
||||
key = "repair_man",
|
||||
atlas = "atlasvoucher",
|
||||
order = 6,
|
||||
order = 20004,
|
||||
pos = { x = 5, y = 5 },
|
||||
requires = { "v_cry_pairing" },
|
||||
cry_credits = {
|
||||
|
@ -291,43 +156,7 @@ local repair_man = { --Retrigger all M Jokers if played hand contains a pair
|
|||
return false
|
||||
end,
|
||||
}
|
||||
local pairamount_plus = { --Retrigger all M Jokers once for every pair contained in played hand
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_m",
|
||||
"set_cry_tier3",
|
||||
"v_cry_repair_man",
|
||||
},
|
||||
},
|
||||
key = "pairamount_plus",
|
||||
atlas = "atlasvoucher",
|
||||
order = 93,
|
||||
pos = { x = 6, y = 5 },
|
||||
requires = { "v_cry_repair_man" },
|
||||
pools = { ["Tier3"] = true },
|
||||
cry_credits = {
|
||||
art = {
|
||||
"lolxddj",
|
||||
},
|
||||
code = {
|
||||
"Math",
|
||||
},
|
||||
jolly = {
|
||||
"Jolly Open Winner",
|
||||
"Xaltios",
|
||||
},
|
||||
},
|
||||
in_pool = function(self)
|
||||
local mcheck = Cryptid.get_m_jokers()
|
||||
if mcheck > 0 then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
}
|
||||
local double_vision = { --Double-Sided cards appear 4x more frequently
|
||||
local double_vision = { -- DSide T1; Double-Sided cards appear 4x more frequently
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
|
@ -336,7 +165,7 @@ local double_vision = { --Double-Sided cards appear 4x more frequently
|
|||
},
|
||||
},
|
||||
key = "double_vision",
|
||||
order = 7,
|
||||
order = 20005,
|
||||
atlas = "atlasvoucher",
|
||||
pos = { x = 4, y = 3 },
|
||||
loc_vars = function(self, info_queue)
|
||||
|
@ -355,7 +184,7 @@ local double_vision = { --Double-Sided cards appear 4x more frequently
|
|||
},
|
||||
},
|
||||
}
|
||||
local double_slit = { --Meld can appear in the shop and Arcana Packs
|
||||
local double_slit = { -- DSide T2; Meld can appear in the shop and Arcana Packs
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
|
@ -367,7 +196,7 @@ local double_slit = { --Meld can appear in the shop and Arcana Packs
|
|||
},
|
||||
key = "double_slit",
|
||||
atlas = "atlasvoucher",
|
||||
order = 8,
|
||||
order = 20006,
|
||||
pos = { x = 3, y = 4 },
|
||||
requires = { "v_cry_double_vision" },
|
||||
loc_vars = function(self, info_queue)
|
||||
|
@ -386,39 +215,159 @@ local double_slit = { --Meld can appear in the shop and Arcana Packs
|
|||
},
|
||||
},
|
||||
}
|
||||
local double_down = { --After every round, X1.5 to all values on the back of Double-Sided Cards
|
||||
local stickyhand = { -- CSL T1; +1 card selection limit
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_tier3",
|
||||
"e_cry_double_sided",
|
||||
"v_cry_double_slit",
|
||||
},
|
||||
},
|
||||
key = "double_down",
|
||||
key = "stickyhand",
|
||||
config = { extra = 1 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 94,
|
||||
pos = { x = 4, y = 4 },
|
||||
requires = { "v_cry_double_slit" },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.e_cry_double_sided
|
||||
order = 20007,
|
||||
pos = { x = 0, y = 5 },
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { (card and card.ability.extra or self.config.extra) } }
|
||||
end,
|
||||
redeem = function(self, card)
|
||||
SMODS.change_play_limit(card.ability.extra or self.config.extra)
|
||||
SMODS.change_discard_limit(card.ability.extra or self.config.extra)
|
||||
end,
|
||||
unredeem = function(self, card)
|
||||
SMODS.change_play_limit(-(card.ability.extra or self.config.extra))
|
||||
SMODS.change_discard_limit(-(card.ability.extra or self.config.extra))
|
||||
if not G.GAME.before_play_buffer then
|
||||
G.hand:unhighlight_all()
|
||||
end
|
||||
end,
|
||||
}
|
||||
local grapplinghook = { -- CSL T2; +2 card selection limit
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"Linus Goof Balls",
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Math",
|
||||
},
|
||||
jolly = {
|
||||
"Jolly Open Winner",
|
||||
"Axolotolus",
|
||||
"HexaCryonic",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"v_cry_stickyhand",
|
||||
},
|
||||
},
|
||||
key = "grapplinghook",
|
||||
config = { extra = 2 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 20008,
|
||||
pos = { x = 1, y = 5 },
|
||||
requires = { "v_cry_stickyhand" },
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { (card and card.ability.extra or self.config.extra) } }
|
||||
end,
|
||||
redeem = function(self, card)
|
||||
SMODS.change_play_limit(card.ability.extra or self.config.extra)
|
||||
SMODS.change_discard_limit(card.ability.extra or self.config.extra)
|
||||
end,
|
||||
unredeem = function(self, card)
|
||||
SMODS.change_play_limit(-(card.ability.extra or self.config.extra))
|
||||
SMODS.change_discard_limit(-(card.ability.extra or self.config.extra))
|
||||
if not G.GAME.before_play_buffer then
|
||||
G.hand:unhighlight_all()
|
||||
end
|
||||
end,
|
||||
}
|
||||
local overstock_multi = { --+1 card slot[s], +1 booster pack slot[s] and +1 voucher slot[s] available in the shop
|
||||
local command_prompt = { -- Code T1; Code cards can appear in the shop
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Mathguy",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_code",
|
||||
},
|
||||
},
|
||||
key = "command_prompt",
|
||||
atlas = "atlasvoucher",
|
||||
order = 20031,
|
||||
pos = { x = 0, y = 1 },
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = {} }
|
||||
end,
|
||||
redeem = function(self)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
G.GAME.code_rate = (G.GAME.code_rate or 0) + 4
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end,
|
||||
unredeem = function(self)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
G.GAME.code_rate = math.max(0, G.GAME.code_rate - 4)
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end,
|
||||
}
|
||||
local satellite_uplink = { -- Code T2; Code cards may appear in any of the Celestial Packs
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Mathguy",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_code",
|
||||
"v_cry_command_prompt",
|
||||
},
|
||||
},
|
||||
key = "satellite_uplink",
|
||||
atlas = "atlasvoucher",
|
||||
order = 20032,
|
||||
pos = { x = 0, y = 2 },
|
||||
loc_vars = function(self, info_queue)
|
||||
return { vars = {} }
|
||||
end,
|
||||
requires = { "v_cry_command_prompt" },
|
||||
}
|
||||
|
||||
-- Tier 3 Vouchers
|
||||
local overstock_multi = { -- Overstock T3; +1 card slot, +1 booster pack slot and +1 voucher slot available in the shop
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -439,7 +388,7 @@ local overstock_multi = { --+1 card slot[s], +1 booster pack slot[s] and +1 vouc
|
|||
key = "overstock_multi",
|
||||
config = { extra = 1 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 75,
|
||||
order = 32658,
|
||||
pos = { x = 4, y = 1 },
|
||||
requires = { "v_overstock_plus" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -471,7 +420,7 @@ local overstock_multi = { --+1 card slot[s], +1 booster pack slot[s] and +1 vouc
|
|||
SMODS.change_voucher_limit(-mod)
|
||||
end,
|
||||
}
|
||||
local massproduct = { --All cards and packs in the shop cost $1
|
||||
local massproduct = { -- Clearance Sale T3; All cards and packs in the shop cost $1
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -491,7 +440,7 @@ local massproduct = { --All cards and packs in the shop cost $1
|
|||
},
|
||||
key = "massproduct",
|
||||
atlas = "atlasvoucher",
|
||||
order = 76,
|
||||
order = 32659,
|
||||
pos = { x = 6, y = 4 },
|
||||
requires = { "v_liquidation" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -523,7 +472,7 @@ local massproduct = { --All cards and packs in the shop cost $1
|
|||
}))
|
||||
end,
|
||||
}
|
||||
local curate = { --All cards appear with an Edition
|
||||
local curate = { -- Hone T3; All cards appear with an Edition
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -543,7 +492,7 @@ local curate = { --All cards appear with an Edition
|
|||
},
|
||||
key = "curate",
|
||||
atlas = "atlasvoucher",
|
||||
order = 77,
|
||||
order = 32660,
|
||||
pos = { x = 6, y = 1 },
|
||||
requires = { "v_glow_up" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -558,7 +507,7 @@ local curate = { --All cards appear with an Edition
|
|||
end
|
||||
end,
|
||||
}
|
||||
local rerollexchange = { --All rerolls cost $2
|
||||
local rerollexchange = { -- Reroll Surplus T3; All rerolls cost $2
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Project666",
|
||||
|
@ -578,7 +527,7 @@ local rerollexchange = { --All rerolls cost $2
|
|||
},
|
||||
key = "rerollexchange",
|
||||
atlas = "atlasvoucher",
|
||||
order = 78,
|
||||
order = 32661,
|
||||
pos = { x = 6, y = 2 },
|
||||
requires = { "v_reroll_glut" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -602,22 +551,35 @@ local rerollexchange = { --All rerolls cost $2
|
|||
}))
|
||||
end,
|
||||
}
|
||||
--Order 79 reserved for celestial storage (unimplemented)
|
||||
local scope = { --Also unimplemented
|
||||
local CBALLT3PLACEHOLDER = { -- RESERVED FOR CRYSTAL BALL T3
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tier3",
|
||||
},
|
||||
},
|
||||
key = "scope",
|
||||
key = "CBALLT3PLACEHOLDER",
|
||||
atlas = "atlasvoucher",
|
||||
order = 80,
|
||||
order = 32662,
|
||||
-- pos = { x = 2, y = 0 },
|
||||
requires = { "v_omen_globe" },
|
||||
pools = { ["Tier3"] = true },
|
||||
}
|
||||
local TSCOPET3PLACEHOLDER = { -- RESERVED FOR TELESCOPE T3
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tier3",
|
||||
},
|
||||
},
|
||||
key = "TSCOPET3PLACEHOLDER",
|
||||
atlas = "atlasvoucher",
|
||||
order = 32663,
|
||||
pos = { x = 2, y = 0 },
|
||||
requires = { "v_observatory" },
|
||||
pools = { ["Tier3"] = true },
|
||||
}
|
||||
local dexterity = { --Permanently gain +2 hand[s] each round
|
||||
local dexterity = { -- Grabber T3; Permanently gain +2 hands each round
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -638,7 +600,7 @@ local dexterity = { --Permanently gain +2 hand[s] each round
|
|||
key = "dexterity",
|
||||
config = { extra = 2 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 81,
|
||||
order = 32664,
|
||||
pos = { x = 6, y = 3 },
|
||||
requires = { "v_nacho_tong" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -654,7 +616,7 @@ local dexterity = { --Permanently gain +2 hand[s] each round
|
|||
ease_hands_played(-1 * (card and card.ability.extra or self.config.extra))
|
||||
end,
|
||||
}
|
||||
local threers = { --Permanently gain +2 discard[s] each round
|
||||
local threers = { -- Wasteful T3; Permanently gain +2 discards each round
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -675,7 +637,7 @@ local threers = { --Permanently gain +2 discard[s] each round
|
|||
key = "threers",
|
||||
config = { extra = 2 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 82,
|
||||
order = 32665,
|
||||
pos = { x = 5, y = 0 },
|
||||
requires = { "v_recyclomancy" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -691,7 +653,7 @@ local threers = { --Permanently gain +2 discard[s] each round
|
|||
ease_discard(-1 * (card and card.ability.extra or self.config.extra))
|
||||
end,
|
||||
}
|
||||
local tacclimator = { --Tarot cards appear X6 more frequently in the shop All future Tarot cards are free
|
||||
local tacclimator = { -- Tarot Merchant T3; Tarots are free, spawn rate controllable in run info
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -713,7 +675,7 @@ local tacclimator = { --Tarot cards appear X6 more frequently in the shop All
|
|||
key = "tacclimator",
|
||||
config = { extra = 24 / 4, extra_disp = 6 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 83,
|
||||
order = 32666,
|
||||
pos = { x = 1, y = 4 },
|
||||
requires = { "v_tarot_tycoon" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -737,7 +699,7 @@ local tacclimator = { --Tarot cards appear X6 more frequently in the shop All
|
|||
}))
|
||||
end,
|
||||
}
|
||||
local pacclimator = { --Planet cards appear X6 more frequently in the shop All future Planet cards are free
|
||||
local pacclimator = { -- Planet Merchant T3; Planets are free, spawn rate controllable in run info
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -759,7 +721,7 @@ local pacclimator = { --Planet cards appear X6 more frequently in the shop All
|
|||
key = "pacclimator",
|
||||
config = { extra = 24 / 4, extra_disp = 6 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 84,
|
||||
order = 32667,
|
||||
pos = { x = 0, y = 4 },
|
||||
requires = { "v_planet_tycoon" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -783,7 +745,7 @@ local pacclimator = { --Planet cards appear X6 more frequently in the shop All
|
|||
}))
|
||||
end,
|
||||
}
|
||||
local moneybean = { --Raise the cap on interest earned in each round to $2.0e299
|
||||
local moneybean = { -- Seed Money T3; Raise the cap on interest earned in each round to $2.0e299
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -804,7 +766,7 @@ local moneybean = { --Raise the cap on interest earned in each round to $2.0e299
|
|||
key = "moneybean",
|
||||
config = { extra = 1e300 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 85,
|
||||
order = 32668,
|
||||
pos = { x = 5, y = 1 },
|
||||
requires = { "v_money_tree" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -832,7 +794,7 @@ local moneybean = { --Raise the cap on interest earned in each round to $2.0e299
|
|||
}))
|
||||
end,
|
||||
}
|
||||
local fabric = { --+2 Joker slot[s]
|
||||
local fabric = { -- Blank Voucher T3; +2 Joker slots
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -853,7 +815,7 @@ local fabric = { --+2 Joker slot[s]
|
|||
key = "fabric",
|
||||
config = { extra = 2 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 86,
|
||||
order = 32669,
|
||||
pos = { x = 6, y = 0 },
|
||||
requires = { "v_antimatter" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -898,8 +860,21 @@ local fabric = { --+2 Joker slot[s]
|
|||
end
|
||||
end,
|
||||
}
|
||||
--Order 87 reserved for Fake-out (unimplemented)
|
||||
local asteroglyph = { --Set Ante to 0
|
||||
local MTRICKT3PLACEHOLDER = { -- RESERVED FOR MAGIC TRICK T3
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tier3",
|
||||
},
|
||||
},
|
||||
key = "TSCOPET3PLACEHOLDER",
|
||||
atlas = "atlasvoucher",
|
||||
order = 32670,
|
||||
pos = { x = 2, y = 0 },
|
||||
requires = { "v_observatory" },
|
||||
pools = { ["Tier3"] = true },
|
||||
}
|
||||
local asteroglyph = { -- Heiroglyph T3; Set Ante to 0
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -919,7 +894,7 @@ local asteroglyph = { --Set Ante to 0
|
|||
},
|
||||
key = "asteroglyph",
|
||||
atlas = "atlasvoucher",
|
||||
order = 88,
|
||||
order = 32761,
|
||||
pos = { x = 5, y = 2 },
|
||||
requires = { "v_petroglyph" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -963,8 +938,21 @@ local asteroglyph = { --Set Ante to 0
|
|||
end
|
||||
end,
|
||||
}
|
||||
--Order 89 reserved for Ivory Script (unimplemented)
|
||||
local blankcanvas = { --+2 hand size
|
||||
local DCUTT3PLACEHOLDER = { -- RESERVED FOR DIRECTOR'S CUT T3
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_tier3",
|
||||
},
|
||||
},
|
||||
key = "TSCOPET3PLACEHOLDER",
|
||||
atlas = "atlasvoucher",
|
||||
order = 32672,
|
||||
pos = { x = 2, y = 0 },
|
||||
requires = { "v_observatory" },
|
||||
pools = { ["Tier3"] = true },
|
||||
}
|
||||
local blankcanvas = { -- Paint Brush T3; +2 hand size
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"Frix",
|
||||
|
@ -985,7 +973,7 @@ local blankcanvas = { --+2 hand size
|
|||
key = "blankcanvas",
|
||||
config = { extra = 2 },
|
||||
atlas = "atlasvoucher",
|
||||
order = 90,
|
||||
order = 32763,
|
||||
pos = { x = 2, y = 4 },
|
||||
requires = { "v_palette" },
|
||||
pools = { ["Tier3"] = true },
|
||||
|
@ -1011,91 +999,110 @@ local blankcanvas = { --+2 hand size
|
|||
end
|
||||
end,
|
||||
}
|
||||
local stickyhand = { --+1 card selection limit
|
||||
local clone_machine = { -- DTag Voucher T3; Double tags become Quintuple Tags and are 4X as common
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
"Catman",
|
||||
"Mystic Misclick",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
"Linus Goof Balls",
|
||||
},
|
||||
code = {
|
||||
"HexaCryonic",
|
||||
"Math",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_tag",
|
||||
"set_cry_tier3",
|
||||
"v_cry_tag_printer",
|
||||
},
|
||||
},
|
||||
key = "stickyhand",
|
||||
config = { extra = 1 },
|
||||
key = "clone_machine",
|
||||
atlas = "atlasvoucher",
|
||||
order = 9,
|
||||
pos = { x = 0, y = 5 },
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { (card and card.ability.extra or self.config.extra) } }
|
||||
end,
|
||||
redeem = function(self, card)
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit
|
||||
+ (card and card.ability.extra or self.config.extra)
|
||||
end,
|
||||
unredeem = function(self, card)
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit
|
||||
- (card and card.ability.extra or self.config.extra)
|
||||
if G.hand.config.highlighted_limit < 5 then
|
||||
G.hand.config.highlighted_limit = 5
|
||||
end
|
||||
if not G.GAME.before_play_buffer then
|
||||
G.hand:unhighlight_all()
|
||||
end
|
||||
order = 32764,
|
||||
pos = { x = 1, y = 3 },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = { set = "Tag", key = "tag_double" }
|
||||
info_queue[#info_queue + 1] = { set = "Tag", key = "tag_cry_quintuple", specific_vars = { 4 } }
|
||||
return { vars = {} }
|
||||
end,
|
||||
requires = { "v_cry_tag_printer" },
|
||||
}
|
||||
local grapplinghook = { --+1 card selection limit (replace me when "extra functionality" is added later)
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
},
|
||||
local pairamount_plus = { -- M T3; Retrigger all M Jokers once for every pair contained in played hand
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"v_cry_stickyhand",
|
||||
"set_cry_m",
|
||||
"set_cry_tier3",
|
||||
"v_cry_repair_man",
|
||||
},
|
||||
},
|
||||
key = "grapplinghook",
|
||||
config = { extra = 2 },
|
||||
key = "pairamount_plus",
|
||||
atlas = "atlasvoucher",
|
||||
order = 10,
|
||||
pos = { x = 1, y = 5 },
|
||||
requires = { "v_cry_stickyhand" },
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { (card and card.ability.extra or self.config.extra) } }
|
||||
end,
|
||||
redeem = function(self, card)
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit
|
||||
+ (card and card.ability.extra or self.config.extra)
|
||||
end,
|
||||
unredeem = function(self, card)
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit
|
||||
- (card and card.ability.extra or self.config.extra)
|
||||
if G.hand.config.highlighted_limit < 5 then
|
||||
G.hand.config.highlighted_limit = 5
|
||||
end
|
||||
if not G.GAME.before_play_buffer then
|
||||
G.hand:unhighlight_all()
|
||||
order = 32765,
|
||||
pos = { x = 6, y = 5 },
|
||||
requires = { "v_cry_repair_man" },
|
||||
pools = { ["Tier3"] = true },
|
||||
cry_credits = {
|
||||
art = {
|
||||
"lolxddj",
|
||||
},
|
||||
code = {
|
||||
"Math",
|
||||
},
|
||||
jolly = {
|
||||
"Jolly Open Winner",
|
||||
"Xaltios",
|
||||
},
|
||||
},
|
||||
in_pool = function(self)
|
||||
local mcheck = Cryptid.get_m_jokers()
|
||||
if mcheck > 0 then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
}
|
||||
local hyperspacetether = { --+2 card selection limit + other stuff
|
||||
local double_down = { -- DSide T3; After every round, X1.5 to all values on the back of Double-Sided Cards
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_tier3",
|
||||
"e_cry_double_sided",
|
||||
"v_cry_double_slit",
|
||||
},
|
||||
},
|
||||
key = "double_down",
|
||||
atlas = "atlasvoucher",
|
||||
order = 32766,
|
||||
pos = { x = 4, y = 4 },
|
||||
requires = { "v_cry_double_slit" },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue)
|
||||
info_queue[#info_queue + 1] = G.P_CENTERS.e_cry_double_sided
|
||||
end,
|
||||
cry_credits = {
|
||||
art = {
|
||||
"Linus Goof Balls",
|
||||
},
|
||||
code = {
|
||||
"Math",
|
||||
"lord-ruby",
|
||||
},
|
||||
jolly = {
|
||||
"Jolly Open Winner",
|
||||
"Axolotolus",
|
||||
},
|
||||
},
|
||||
}
|
||||
local hyperspacetether = { -- CSL T3; +2 card selection limit, all* selected cards contribute to asc power
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
|
@ -1119,27 +1126,58 @@ local hyperspacetether = { --+2 card selection limit + other stuff
|
|||
config = { extra = 2 },
|
||||
atlas = "atlasvoucher",
|
||||
pos = { x = 2, y = 5 },
|
||||
order = 95,
|
||||
order = 32767,
|
||||
requires = { "v_cry_grapplinghook" },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { (card and card.ability.extra or self.config.extra) } }
|
||||
end,
|
||||
redeem = function(self, card)
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit
|
||||
+ (card and card.ability.extra or self.config.extra)
|
||||
SMODS.change_play_limit(card.ability.extra or self.config.extra)
|
||||
SMODS.change_discard_limit(card.ability.extra or self.config.extra)
|
||||
end,
|
||||
unredeem = function(self, card)
|
||||
G.hand.config.highlighted_limit = G.hand.config.highlighted_limit
|
||||
- (card and card.ability.extra or self.config.extra)
|
||||
if G.hand.config.highlighted_limit < 5 then
|
||||
G.hand.config.highlighted_limit = 5
|
||||
end
|
||||
SMODS.change_play_limit(-(card.ability.extra or self.config.extra))
|
||||
SMODS.change_discard_limit(-(card.ability.extra or self.config.extra))
|
||||
if not G.GAME.before_play_buffer then
|
||||
G.hand:unhighlight_all()
|
||||
end
|
||||
end,
|
||||
}
|
||||
local quantum_computing = { -- Code T3; Code cards spawn with +1 use
|
||||
cry_credits = {
|
||||
idea = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
art = {
|
||||
"HexaCryonic",
|
||||
},
|
||||
code = {
|
||||
"Mathguy",
|
||||
},
|
||||
},
|
||||
object_type = "Voucher",
|
||||
dependencies = {
|
||||
items = {
|
||||
"set_cry_voucher",
|
||||
"set_cry_tier3",
|
||||
"set_cry_code",
|
||||
"v_cry_satellite_uplink",
|
||||
},
|
||||
},
|
||||
key = "quantum_computing",
|
||||
order = 32768,
|
||||
atlas = "atlasvoucher",
|
||||
pos = { x = 0, y = 3 },
|
||||
config = { extra = 1 },
|
||||
pools = { ["Tier3"] = true },
|
||||
loc_vars = function(self, info_queue, card)
|
||||
return { vars = { (card and card.ability.extra or self.config.extra) } }
|
||||
end,
|
||||
requires = { "v_cry_satellite_uplink" },
|
||||
}
|
||||
|
||||
-- Triple+ tag tags
|
||||
local triple = { --Copies voucher triple tag
|
||||
cry_credits = {
|
||||
idea = {
|
||||
|
@ -1351,36 +1389,44 @@ if SMODS.Mods["Tier3Sub"] then
|
|||
end
|
||||
local voucheritems = {
|
||||
voucher_atlas,
|
||||
-- Cryptid Normal Vouchers
|
||||
copies,
|
||||
tag_printer,
|
||||
triple,
|
||||
quadruple,
|
||||
quintuple,
|
||||
pairing,
|
||||
repair_man,
|
||||
double_vision,
|
||||
double_slit,
|
||||
stickyhand,
|
||||
grapplinghook,
|
||||
command_prompt,
|
||||
satellite_uplink,
|
||||
-- Vanilla T3s
|
||||
overstock_multi,
|
||||
massproduct,
|
||||
curate,
|
||||
rerollexchange,
|
||||
-- Crystal Ball T3 Placeholder
|
||||
-- Telescope T3 Placeholder
|
||||
dexterity,
|
||||
threers,
|
||||
tacclimator,
|
||||
pacclimator,
|
||||
moneybean,
|
||||
fabric,
|
||||
-- Magic Trick T3 Placeholder
|
||||
asteroglyph,
|
||||
-- Director's Cut T3 Placeholder
|
||||
blankcanvas,
|
||||
-- Cryptid T3s
|
||||
clone_machine,
|
||||
stickyhand,
|
||||
grapplinghook,
|
||||
hyperspacetether,
|
||||
command_prompt,
|
||||
satellite_uplink,
|
||||
quantum_computing,
|
||||
pairing,
|
||||
repair_man,
|
||||
pairamount_plus,
|
||||
double_vision,
|
||||
double_slit,
|
||||
double_down,
|
||||
hyperspacetether,
|
||||
quantum_computing,
|
||||
|
||||
triple,
|
||||
quadruple,
|
||||
quintuple,
|
||||
}
|
||||
return {
|
||||
name = "Vouchers",
|
||||
|
|
|
@ -32,9 +32,15 @@ function G.FUNCS.get_poker_hand_info(_cards)
|
|||
loc_disp_text = localize(disp_text, "poker_hands")
|
||||
end
|
||||
end
|
||||
|
||||
local hidden = false
|
||||
for i, v in pairs(scoring_hand) do
|
||||
if v.facing == "back" then
|
||||
hidden = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if G.SETTINGS.language == "en-us" then
|
||||
if #scoring_hand > 5 and (text == "Flush Five" or text == "Five of a Kind") then
|
||||
if #scoring_hand > 5 and (text == "Flush Five" or text == "Five of a Kind" or text == "bunc_Spectrum Five") then
|
||||
local rank_array = {}
|
||||
local county = 0
|
||||
for i = 1, #scoring_hand do
|
||||
|
@ -104,103 +110,192 @@ function G.FUNCS.get_poker_hand_info(_cards)
|
|||
return str_ret
|
||||
end
|
||||
-- text gets stupid small at 100+ anyway
|
||||
loc_disp_text = (text == "Flush Five" and "Flush " or "")
|
||||
loc_disp_text = (text == "Flush Five" and "Flush " or text == "bunc_Spectrum Five" and "Spectrum " or "")
|
||||
.. (
|
||||
(county < 1000 and create_num_chunk(county) or "Thousand")
|
||||
.. (text == "Five of a Kind" and " of a Kind" or "")
|
||||
)
|
||||
end
|
||||
end
|
||||
local hand_table = {
|
||||
["High Card"] = G.GAME.used_vouchers.v_cry_hyperspacetether and 1 or nil,
|
||||
["Pair"] = G.GAME.used_vouchers.v_cry_hyperspacetether and 2 or nil,
|
||||
["Two Pair"] = 4,
|
||||
["Three of a Kind"] = G.GAME.used_vouchers.v_cry_hyperspacetether and 3 or nil,
|
||||
["Straight"] = next(SMODS.find_card("j_four_fingers")) and Cryptid.gameset() ~= "modest" and 4 or 5,
|
||||
["Flush"] = next(SMODS.find_card("j_four_fingers")) and Cryptid.gameset() ~= "modest" and 4 or 5,
|
||||
["Full House"] = 5,
|
||||
["Four of a Kind"] = G.GAME.used_vouchers.v_cry_hyperspacetether and 4 or nil,
|
||||
["Straight Flush"] = next(SMODS.find_card("j_four_fingers")) and Cryptid.gameset() ~= "modest" and 4 or 5, --debatable
|
||||
["cry_Bulwark"] = 5,
|
||||
["Five of a Kind"] = 5,
|
||||
["Flush House"] = 5,
|
||||
["Flush Five"] = 5,
|
||||
["cry_Clusterfuck"] = 8,
|
||||
["cry_UltPair"] = 8,
|
||||
["cry_WholeDeck"] = 52,
|
||||
}
|
||||
-- Ascension power
|
||||
local a_power = Cryptid.calculate_ascension_power(
|
||||
text,
|
||||
_cards,
|
||||
scoring_hand,
|
||||
G.GAME.used_vouchers.v_cry_hyperspacetether,
|
||||
G.GAME.bonus_asc_power
|
||||
)
|
||||
if a_power > 0 then
|
||||
G.GAME.current_round.current_hand.cry_asc_num = a_power
|
||||
-- Change mult and chips colors if hand is ascended
|
||||
if hand_table[text] and next(scoring_hand) and #scoring_hand > hand_table[text] then
|
||||
if not hidden then
|
||||
ease_colour(G.C.UI_CHIPS, copy_table(G.C.GOLD), 0.3)
|
||||
ease_colour(G.C.UI_MULT, copy_table(G.C.GOLD), 0.3)
|
||||
G.GAME.current_round.current_hand.cry_asc_num_text = (
|
||||
a_power and (type(a_power) == "table" and a_power:gt(to_big(0)) or a_power > 0)
|
||||
)
|
||||
and " (+" .. a_power .. ")"
|
||||
or ""
|
||||
else
|
||||
ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3)
|
||||
ease_colour(G.C.UI_MULT, G.C.RED, 0.3)
|
||||
G.GAME.current_round.current_hand.cry_asc_num_text = ""
|
||||
end
|
||||
-- this is where all the logic for asc hands is. currently it's very simple but if you want more complex logic, here's the place to do it
|
||||
if hand_table[text] and Cryptid.enabled("set_cry_poker_hand_stuff") == true then
|
||||
G.GAME.current_round.current_hand.cry_asc_num = G.GAME.used_vouchers.v_cry_hyperspacetether
|
||||
and #_cards - hand_table[text]
|
||||
or #scoring_hand - hand_table[text]
|
||||
else
|
||||
G.GAME.current_round.current_hand.cry_asc_num = 0
|
||||
ease_colour(G.C.UI_CHIPS, G.C.BLUE, 0.3)
|
||||
ease_colour(G.C.UI_MULT, G.C.RED, 0.3)
|
||||
G.GAME.current_round.current_hand.cry_asc_num_text = ""
|
||||
end
|
||||
|
||||
G.GAME.current_round.current_hand.cry_asc_num = math.max(0, G.GAME.current_round.current_hand.cry_asc_num)
|
||||
if G.GAME.cry_exploit_override then
|
||||
G.GAME.current_round.current_hand.cry_asc_num = G.GAME.current_round.current_hand.cry_asc_num + 1
|
||||
end
|
||||
|
||||
G.GAME.current_round.current_hand.cry_asc_num_text = (
|
||||
G.GAME.current_round.current_hand.cry_asc_num
|
||||
and (
|
||||
type(G.GAME.current_round.current_hand.cry_asc_num) == "table"
|
||||
and G.GAME.current_round.current_hand.cry_asc_num:gt(to_big(0))
|
||||
or G.GAME.current_round.current_hand.cry_asc_num > 0
|
||||
)
|
||||
)
|
||||
and " (+" .. G.GAME.current_round.current_hand.cry_asc_num .. ")"
|
||||
or ""
|
||||
return text, loc_disp_text, poker_hands, scoring_hand, disp_text
|
||||
end
|
||||
function Cryptid.ascend(num) -- edit this function at your leisure
|
||||
if Cryptid.enabled("set_cry_poker_hand_stuff") ~= true then
|
||||
if (Cryptid.safe_get(G, "GAME", "current_round", "current_hand", "cry_asc_num") or 0) <= 0 then
|
||||
return num
|
||||
end
|
||||
if Cryptid.gameset() == "modest" then
|
||||
-- x(1.1 + 0.05 per sol) base, each card gives + (0.1 + 0.05 per sol)
|
||||
if not G.GAME.current_round.current_hand.cry_asc_num then
|
||||
return num
|
||||
end
|
||||
if G.GAME.current_round.current_hand.cry_asc_num <= 0 then
|
||||
return num
|
||||
end
|
||||
return math.max(
|
||||
num,
|
||||
num
|
||||
* (
|
||||
1
|
||||
+ 0.1
|
||||
+ to_big(0.05 * (G.GAME.sunnumber or 0))
|
||||
+ to_big(
|
||||
(0.1 + (0.05 * (G.GAME.sunnumber or 0)))
|
||||
* to_big(G.GAME.current_round.current_hand.cry_asc_num or 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
if Cryptid.gameset(G.P_CENTERS.c_cry_sunplanet) == "modest" then
|
||||
-- Default: Chips and Mult multiplier + 0.25 for every 1 Ascension power
|
||||
return num * to_big(1 + ((0.25 + G.GAME.sunnumber.modest) * G.GAME.current_round.current_hand.cry_asc_num))
|
||||
else
|
||||
return math.max(
|
||||
num,
|
||||
num
|
||||
* to_big(
|
||||
(1.25 + (0.05 * (G.GAME.sunnumber or 0)))
|
||||
^ to_big(G.GAME.current_round.current_hand.cry_asc_num or 0)
|
||||
)
|
||||
)
|
||||
-- Default: Chips and Mult multiplier X1.25 for every 1 Ascension power
|
||||
return num * to_big((1.25 + G.GAME.sunnumber.not_modest) ^ G.GAME.current_round.current_hand.cry_asc_num)
|
||||
end
|
||||
end
|
||||
|
||||
function Cryptid.pulse_flame(duration, intensity) -- duration is in seconds, intensity is in idfk honestly, but it increases pretty quickly
|
||||
G.cry_flame_override = G.cry_flame_override or {}
|
||||
G.cry_flame_override["duration"] = duration or 0.01
|
||||
G.cry_flame_override["intensity"] = intensity or 2
|
||||
end
|
||||
|
||||
function Cryptid.calculate_ascension_power(hand_name, hand_cards, hand_scoring_cards, tether, bonus)
|
||||
bonus = bonus or 0
|
||||
local starting = 0
|
||||
if Cryptid.enabled("set_cry_poker_hand_stuff") ~= true then
|
||||
return 0
|
||||
end
|
||||
if hand_name then
|
||||
-- Get Starting Ascension power from Poker Hands
|
||||
if hand_cards then
|
||||
local check = Cryptid.hand_ascension_numbers(hand_name, tether)
|
||||
if check then
|
||||
starting = (tether and #hand_cards or #hand_scoring_cards) - check
|
||||
end
|
||||
end
|
||||
-- Extra starting calculation for Declare hands
|
||||
if G.GAME.hands[hand_name] and G.GAME.hands[hand_name].declare_cards then
|
||||
local total = 0
|
||||
for i, v in pairs(G.GAME.hands[hand_name].declare_cards or {}) do
|
||||
local how_many_fit = 0
|
||||
local suit, rank
|
||||
for i2, v2 in pairs(hand_cards) do
|
||||
if not v2.marked then
|
||||
if SMODS.has_no_rank(v2) and v.rank == "rankless" or v2:get_id() == v.rank then
|
||||
rank = true
|
||||
end
|
||||
if v2:is_suit(v.suit) or (v.suit == "suitless" and SMODS.has_no_suit(v2)) or not v.suit then
|
||||
suit = true
|
||||
end
|
||||
if not (suit and rank) then
|
||||
suit = false
|
||||
rank = false
|
||||
end
|
||||
if suit and rank then
|
||||
how_many_fit = how_many_fit + 1
|
||||
v2.marked = true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not rank or not suit then
|
||||
how_many_fit = 0
|
||||
end
|
||||
total = total + how_many_fit
|
||||
end
|
||||
for i2, v2 in pairs(hand_cards) do
|
||||
v2.marked = nil
|
||||
end
|
||||
starting = starting + (total - #hand_scoring_cards)
|
||||
end
|
||||
end
|
||||
-- Get Ascension power from Exploit
|
||||
if G.GAME.cry_exploit_override then
|
||||
bonus = bonus + 1
|
||||
end
|
||||
-- Get Ascension Power From Sol (Observatory effect)
|
||||
if G.GAME.used_vouchers.v_observatory and next(find_joker("cry-sunplanet")) then
|
||||
if #find_joker("cry-sunplanet") == 1 then
|
||||
bonus = bonus + 1
|
||||
else
|
||||
bonus = bonus + Cryptid.nuke_decimals(Cryptid.funny_log(2, #find_joker("cry-sunplanet") + 1), 2)
|
||||
end
|
||||
end
|
||||
local final = math.max(0, starting + bonus)
|
||||
-- Round to 1 if final value is less than 1 but greater than 0
|
||||
if final > 0 and final < 1 then
|
||||
final = 1
|
||||
end
|
||||
return final
|
||||
end
|
||||
function Cryptid.hand_ascension_numbers(hand_name, tether)
|
||||
if Cryptid.ascension_numbers[hand_name] and type(Cryptid.ascension_numbers[hand_name]) == "function" then
|
||||
return Cryptid.ascension_numbers[hand_name](hand_name, tether)
|
||||
end
|
||||
if hand_name == "High Card" then
|
||||
return tether and 1 or nil
|
||||
elseif hand_name == "Pair" then
|
||||
return tether and 2 or nil
|
||||
elseif hand_name == "Two Pair" then
|
||||
return 4
|
||||
elseif hand_name == "Three of a Kind" then
|
||||
return tether and 3 or nil
|
||||
elseif hand_name == "Straight" or hand_name == "Flush" or hand_name == "Straight Flush" then
|
||||
return next(SMODS.find_card("j_four_fingers")) and Cryptid.gameset() ~= "modest" and 4 or 5
|
||||
elseif
|
||||
hand_name == "Full House"
|
||||
or hand_name == "Five of a Kind"
|
||||
or hand_name == "Flush House"
|
||||
or hand_name == "cry_Bulwark"
|
||||
or hand_name == "Flush Five"
|
||||
or hand_name == "bunc_Spectrum"
|
||||
or hand_name == "bunc_Straight Spectrum"
|
||||
or hand_name == "bunc_Spectrum House"
|
||||
or hand_name == "bunc_Spectrum Five"
|
||||
then
|
||||
return 5
|
||||
elseif hand_name == "Four of a Kind" then
|
||||
return G.GAME.used_vouchers.v_cry_hyperspacetether and 4 or nil
|
||||
elseif hand_name == "cry_Clusterfuck" or hand_name == "cry_UltPair" then
|
||||
return 8
|
||||
elseif hand_name == "cry_WholeDeck" then
|
||||
return 52
|
||||
elseif hand_name == "cry_Declare0" then
|
||||
return G.GAME.hands.cry_Declare0
|
||||
and G.GAME.hands.cry_Declare0.declare_cards
|
||||
and #G.GAME.hands.cry_Declare0.declare_cards
|
||||
elseif hand_name == "cry_Declare1" then
|
||||
return G.GAME.hands.cry_Declare1
|
||||
and G.GAME.hands.cry_Declare1.declare_cards
|
||||
and #G.GAME.hands.cry_Declare1.declare_cards
|
||||
elseif hand_name == "cry_Declare2" then
|
||||
return G.GAME.hands.cry_Declare2
|
||||
and G.GAME.hands.cry_Declare2.declare_cards
|
||||
and #G.GAME.hands.cry_Declare2.declare_cards
|
||||
elseif
|
||||
hand_name == "spa_Spectrum"
|
||||
or hand_name == "spa_Straight_Spectrum"
|
||||
or hand_name == "spa_Spectrum_House"
|
||||
or hand_name == "spa_Spectrum_Five"
|
||||
or hand_name == "spa_Flush_Spectrum"
|
||||
or hand_name == "spa_Straight_Flush_Spectrum"
|
||||
or hand_name == "spa_Flush_Spectrum_House"
|
||||
or hand_name == "spa_Flush_Spectrum_Five"
|
||||
then
|
||||
return SpectrumAPI
|
||||
and SpectrumAPI.configuration.misc.four_fingers_spectrums
|
||||
and next(SMODS.find_card("j_four_fingers"))
|
||||
and Cryptid.gameset() ~= "modest"
|
||||
and 4
|
||||
or 5
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
|
|
@ -3,18 +3,19 @@
|
|||
-- deal with Rigged and Fragile when scoring a playing card
|
||||
local ec = eval_card
|
||||
function eval_card(card, context)
|
||||
if not card then
|
||||
card = {
|
||||
ability = {},
|
||||
can_calculate = function()
|
||||
return false
|
||||
end,
|
||||
}
|
||||
end
|
||||
if card.will_shatter then
|
||||
return {}, {}
|
||||
end
|
||||
-- Store old probability for later reference
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local ret, post = ec(card, context)
|
||||
if card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
return ret, post
|
||||
end
|
||||
|
||||
|
@ -39,398 +40,6 @@ function Card:cry_copy_ability()
|
|||
end
|
||||
local cj = Card.calculate_joker
|
||||
|
||||
function Card:cry_double_scale_calc(orig_ability, in_context_scaling)
|
||||
if
|
||||
self.ability.name ~= "cry-happyhouse"
|
||||
and self.ability.name ~= "Acrobat"
|
||||
and self.ability.name ~= "cry-sapling"
|
||||
and self.ability.name ~= "cry-mstack"
|
||||
and self.ability.name ~= "cry-notebook"
|
||||
and self.ability.name ~= "Invisible Joker"
|
||||
and self.ability.name ~= "cry-Old Invisible Joker"
|
||||
then
|
||||
local jkr = self
|
||||
if jkr.ability and type(jkr.ability) == "table" then
|
||||
if not G.GAME.cry_double_scale[jkr.sort_id] or not G.GAME.cry_double_scale[jkr.sort_id].ability then
|
||||
if not G.GAME.cry_double_scale[jkr.sort_id] then
|
||||
G.GAME.cry_double_scale[jkr.sort_id] = { ability = { double_scale = true } }
|
||||
end
|
||||
for k, v in pairs(jkr.ability) do
|
||||
if type(jkr.ability[k]) ~= "table" then
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k] = v
|
||||
else
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k] = {}
|
||||
for _k, _v in pairs(jkr.ability[k]) do
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k][_k] = _v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if G.GAME.cry_double_scale[jkr.sort_id] and not G.GAME.cry_double_scale[jkr.sort_id].scaler then
|
||||
local dbl_info = G.GAME.cry_double_scale[jkr.sort_id]
|
||||
if jkr.ability.name == "cry-Number Blocks" then
|
||||
dbl_info.base = { "extra", "money" }
|
||||
dbl_info.scaler = { "extra", "money_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.money_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "cry-Exponentia" then
|
||||
dbl_info.base = { "extra", "Emult" }
|
||||
dbl_info.scaler = { "extra", "Emult_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.Emult_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "cry-Redeo" then
|
||||
dbl_info.base = { "extra", "money_req" }
|
||||
dbl_info.scaler = { "extra", "money_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.money_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "cry-Chili Pepper" then
|
||||
dbl_info.base = { "extra", "Xmult" }
|
||||
dbl_info.scaler = { "extra", "Xmult_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.Xmult_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "cry-Scalae" then
|
||||
dbl_info.base = { "extra", "shadow_scale" }
|
||||
dbl_info.scaler = { "extra", "shadow_scale_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.scale_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "cry-mprime" then
|
||||
dbl_info.base = { "extra", "mult" }
|
||||
dbl_info.scaler = { "extra", "bonus" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.bonus
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "Yorick" then
|
||||
dbl_info.base = { "x_mult" }
|
||||
dbl_info.scaler = { "extra", "xmult" } --not kidding
|
||||
dbl_info.scaler_base = 1
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "Hologram" then
|
||||
dbl_info.base = { "x_mult" }
|
||||
dbl_info.scaler = { "extra" }
|
||||
dbl_info.scaler_base = jkr.ability.extra
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "Gift Card" then
|
||||
dbl_info.base = { "extra_value" }
|
||||
dbl_info.scaler = { "extra" }
|
||||
dbl_info.scaler_base = jkr.ability.extra
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "Throwback" then
|
||||
dbl_info.base = { "x_mult" }
|
||||
dbl_info.scaler = { "extra" }
|
||||
dbl_info.scaler_base = jkr.ability.x_mult or 1
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
if jkr.ability.name == "Egg" then
|
||||
dbl_info.base = { "extra_value" }
|
||||
dbl_info.scaler = { "extra" }
|
||||
dbl_info.scaler_base = jkr.ability.extra
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
local default_modifiers = {
|
||||
mult = 0,
|
||||
h_mult = 0,
|
||||
h_x_mult = 0,
|
||||
h_dollars = 0,
|
||||
p_dollars = 0,
|
||||
t_mult = 0,
|
||||
t_chips = 0,
|
||||
x_mult = 1,
|
||||
h_size = 0,
|
||||
d_size = 0,
|
||||
}
|
||||
for k, v in pairs(jkr.ability) do
|
||||
--extra_value is ignored because it can be scaled by Gift Card
|
||||
if
|
||||
k ~= "extra_value"
|
||||
and dbl_info.ability[k] ~= v
|
||||
and is_number(v)
|
||||
and is_number(dbl_info.ability[k])
|
||||
then
|
||||
dbl_info.base = { k }
|
||||
local predicted_mod = math.abs(to_number(to_big(v)) - to_number(to_big(dbl_info.ability[k])))
|
||||
local best_key = { "" }
|
||||
local best_coeff = 10 ^ 100
|
||||
for l, u in pairs(jkr.ability) do
|
||||
if not (default_modifiers[l] and default_modifiers[l] == u) then
|
||||
if l ~= k and is_number(u) then
|
||||
if
|
||||
to_number(to_big(predicted_mod / u)) >= 0.999
|
||||
and to_number(to_big(predicted_mod / u)) < to_number(to_big(best_coeff))
|
||||
then
|
||||
best_coeff = to_number(to_big(predicted_mod / u))
|
||||
best_key = { l }
|
||||
end
|
||||
end
|
||||
if type(jkr.ability[l]) == "table" then
|
||||
for _l, _u in pairs(jkr.ability[l]) do
|
||||
if
|
||||
is_number(_u)
|
||||
and to_number(to_big(predicted_mod / _u)) >= 0.999
|
||||
and to_number(to_big(predicted_mod / _u))
|
||||
< to_number(to_big(best_coeff))
|
||||
then
|
||||
best_coeff = to_number(to_big(predicted_mod / _u))
|
||||
best_key = { l, _l }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
dbl_info.scaler = best_key
|
||||
end
|
||||
if
|
||||
type(jkr.ability[k]) == "table"
|
||||
and type(dbl_info.ability) == "table"
|
||||
and type(dbl_info.ability[k]) == "table"
|
||||
then
|
||||
for _k, _v in pairs(jkr.ability[k]) do
|
||||
if
|
||||
dbl_info.ability[k][_k] ~= _v
|
||||
and is_number(_v)
|
||||
and is_number(dbl_info.ability[k][_k])
|
||||
then
|
||||
dbl_info.base = { k, _k }
|
||||
local predicted_mod = math.abs(_v - dbl_info.ability[k][_k])
|
||||
local best_key = { "" }
|
||||
local best_coeff = 10 ^ 100
|
||||
for l, u in pairs(jkr.ability) do
|
||||
if is_number(u) and to_number(to_big(predicted_mod / u)) >= 0.999 then
|
||||
if to_number(to_big(predicted_mod / u)) < to_number(to_big(best_coeff)) then
|
||||
best_coeff = to_number(to_big(predicted_mod / u))
|
||||
best_key = { l }
|
||||
end
|
||||
end
|
||||
if type(jkr.ability[l]) == "table" then
|
||||
for _l, _u in pairs(jkr.ability[l]) do
|
||||
if
|
||||
(l ~= k or _l ~= _k)
|
||||
and is_number(_u)
|
||||
and to_number(to_big(predicted_mod / _u)) >= 0.999
|
||||
then
|
||||
if
|
||||
to_number(to_big(predicted_mod / _u))
|
||||
< to_number(to_big(best_coeff))
|
||||
then
|
||||
best_coeff = to_number(to_big(predicted_mod / _u))
|
||||
best_key = { l, _l }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
dbl_info.scaler = best_key
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if dbl_info.scaler then
|
||||
dbl_info.scaler_base = #dbl_info.scaler == 2
|
||||
and orig_ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
or orig_ability[dbl_info.scaler[1]]
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local orig_scale_base = nil
|
||||
local orig_scale_scale = nil
|
||||
if G.GAME.cry_double_scale[self.sort_id] and G.GAME.cry_double_scale[self.sort_id].scaler then
|
||||
local jkr = self
|
||||
local dbl_info = G.GAME.cry_double_scale[self.sort_id]
|
||||
if #dbl_info.base == 2 then
|
||||
if
|
||||
not (
|
||||
type(jkr.ability) ~= "table"
|
||||
or not orig_ability[dbl_info.base[1]]
|
||||
or type(orig_ability[dbl_info.base[1]]) ~= "table"
|
||||
or not orig_ability[dbl_info.base[1]][dbl_info.base[2]]
|
||||
)
|
||||
then
|
||||
orig_scale_base = orig_ability[dbl_info.base[1]][dbl_info.base[2]]
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.base[1]] then
|
||||
orig_scale_base = orig_ability[dbl_info.base[1]]
|
||||
end
|
||||
end
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not orig_ability[dbl_info.scaler[1]]
|
||||
or type(orig_ability[dbl_info.scaler[1]]) == "number"
|
||||
or not orig_ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
orig_scale_scale = orig_ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
end
|
||||
else
|
||||
if orig_ability[dbl_info.scaler[1]] then
|
||||
orig_scale_scale = orig_ability[dbl_info.scaler[1]]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if orig_scale_base and orig_scale_scale then
|
||||
local new_scale_base = nil
|
||||
local true_base = nil
|
||||
local jkr = self
|
||||
local dbl_info = G.GAME.cry_double_scale[self.sort_id]
|
||||
if #dbl_info.base == 2 then
|
||||
if
|
||||
not (
|
||||
type(jkr.ability) ~= "table"
|
||||
or not jkr.ability[dbl_info.base[1]]
|
||||
or type(jkr.ability[dbl_info.base[1]]) ~= "table"
|
||||
or not jkr.ability[dbl_info.base[1]][dbl_info.base[2]]
|
||||
)
|
||||
then
|
||||
new_scale_base = jkr.ability[dbl_info.base[1]][dbl_info.base[2]]
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.base[1]] then
|
||||
new_scale_base = jkr.ability[dbl_info.base[1]]
|
||||
end
|
||||
end
|
||||
true_base = dbl_info.scaler_base
|
||||
if
|
||||
new_scale_base and ((to_big(math.abs(new_scale_base - orig_scale_base)) > to_big(0)) or in_context_scaling)
|
||||
then
|
||||
for i = 1, #G.jokers.cards do
|
||||
local obj = G.jokers.cards[i].config.center
|
||||
if obj.cry_scale_mod and type(obj.cry_scale_mod) == "function" then
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local o = obj:cry_scale_mod(
|
||||
G.jokers.cards[i],
|
||||
jkr,
|
||||
orig_scale_scale,
|
||||
true_base,
|
||||
orig_scale_base,
|
||||
new_scale_base
|
||||
)
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if o then
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not jkr.ability[dbl_info.scaler[1]]
|
||||
or not jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.scaler[1]] then
|
||||
jkr.ability[dbl_info.scaler[1]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
end
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[i],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_upgrade_ex") }
|
||||
)
|
||||
end
|
||||
local reps = {}
|
||||
for i2 = 1, #G.jokers.cards do
|
||||
local _card = G.jokers.cards[i2]
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if _card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local check =
|
||||
cj(G.jokers.cards[i2], { retrigger_joker_check = true, other_card = G.jokers.cards[i] })
|
||||
if _card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if type(check) == "table" then
|
||||
reps[i2] = check and check.repetitions and check or 0
|
||||
else
|
||||
reps[i2] = 0
|
||||
end
|
||||
if
|
||||
G.jokers.cards[i2] == G.jokers.cards[i]
|
||||
and G.jokers.cards[i].edition
|
||||
and G.jokers.cards[i].edition.retriggers
|
||||
then
|
||||
local old_repetitions = reps[i] ~= 0 and reps[i].repetitions or 0
|
||||
local check = false --G.jokers.cards[i]:calculate_retriggers()
|
||||
if check and check.repetitions then
|
||||
check.repetitions = check.repetitions + old_repetitions
|
||||
reps[i] = check
|
||||
end
|
||||
end
|
||||
end
|
||||
for i0, j in ipairs(reps) do
|
||||
if (type(j) == "table") and j.repetitions and (j.repetitions > 0) then
|
||||
for r = 1, j.repetitions do
|
||||
card_eval_status_text(j.card, "jokers", nil, nil, nil, j)
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local o = obj:cry_scale_mod(
|
||||
G.jokers.cards[i],
|
||||
jkr,
|
||||
orig_scale_scale,
|
||||
true_base,
|
||||
orig_scale_base,
|
||||
new_scale_base
|
||||
)
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if o then
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not jkr.ability[dbl_info.scaler[1]]
|
||||
or not jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.scaler[1]] then
|
||||
jkr.ability[dbl_info.scaler[1]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
end
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[i],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_upgrade_ex") }
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local smcc = SMODS.calculate_context
|
||||
function SMODS.calculate_context(context, return_table)
|
||||
for k, v in pairs(SMODS.Events) do
|
||||
|
@ -497,8 +106,9 @@ function Card:calculate_joker(context)
|
|||
and self.edition
|
||||
and self.edition.cry_double_sided
|
||||
then
|
||||
self:init_dbl_side()
|
||||
active_side = self.dbl_side
|
||||
local dummy = self:get_other_side_dummy()
|
||||
if dummy then
|
||||
active_side = dummy
|
||||
if context.callback then
|
||||
local m = context.callback
|
||||
context.callback = function(card, a, b)
|
||||
|
@ -506,18 +116,17 @@ function Card:calculate_joker(context)
|
|||
end
|
||||
context.dbl_side = true
|
||||
end
|
||||
end
|
||||
if active_side.will_shatter then
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
if not active_side or active_side.will_shatter then
|
||||
return
|
||||
end
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if not G.GAME.cry_double_scale then
|
||||
G.GAME.cry_double_scale = { double_scale = true } --doesn't really matter what's in here as long as there's something
|
||||
end
|
||||
if active_side.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local orig_ability = active_side:cry_copy_ability()
|
||||
local orig_ability = copy_table(active_side.ability)
|
||||
local in_context_scaling = false
|
||||
local callback = context.callback
|
||||
if active_side.ability.cry_possessed then
|
||||
|
@ -594,327 +203,5 @@ function Card:calculate_joker(context)
|
|||
in_context_scaling = true
|
||||
end
|
||||
end
|
||||
if active_side.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if
|
||||
(next(find_joker("cry-Scalae")) or next(find_joker("cry-Double Scale")))
|
||||
or (active_side.ability.name == "cry-Exponentia" or "cry-Compound Interest")
|
||||
then
|
||||
active_side:cry_double_scale_calc(orig_ability, in_context_scaling)
|
||||
end
|
||||
return ret, trig
|
||||
end
|
||||
|
||||
function Cryptid.exponentia_scale_mod(self, orig_scale_scale, orig_scale_base, new_scale_base)
|
||||
local jkr = self
|
||||
local dbl_info = G.GAME.cry_double_scale[jkr.sort_id]
|
||||
if jkr.ability and type(jkr.ability) == "table" then
|
||||
if not G.GAME.cry_double_scale[jkr.sort_id] or not G.GAME.cry_double_scale[jkr.sort_id].ability then
|
||||
if not G.GAME.cry_double_scale[jkr.sort_id] then
|
||||
G.GAME.cry_double_scale[jkr.sort_id] = { ability = { double_scale = true } }
|
||||
end
|
||||
for k, v in pairs(jkr.ability) do
|
||||
if type(jkr.ability[k]) ~= "table" then
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k] = v
|
||||
else
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k] = {}
|
||||
for _k, _v in pairs(jkr.ability[k]) do
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k][_k] = _v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not dbl_info then
|
||||
dbl_info = {}
|
||||
end
|
||||
if G.GAME.cry_double_scale[jkr.sort_id] and not G.GAME.cry_double_scale[jkr.sort_id].scaler then
|
||||
dbl_info.base = { "extra", "Emult" }
|
||||
dbl_info.scaler = { "extra", "Emult_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.Emult_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
end
|
||||
local true_base = dbl_info.scaler_base
|
||||
if true_base then
|
||||
for i = 1, #G.jokers.cards do
|
||||
local obj = G.jokers.cards[i].config.center
|
||||
if obj.cry_scale_mod and type(obj.cry_scale_mod) == "function" then
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local o = obj:cry_scale_mod(
|
||||
G.jokers.cards[i],
|
||||
jkr,
|
||||
orig_scale_scale,
|
||||
true_base,
|
||||
orig_scale_base,
|
||||
new_scale_base
|
||||
)
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if o then
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not jkr.ability[dbl_info.scaler[1]]
|
||||
or not jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.scaler[1]] then
|
||||
jkr.ability[dbl_info.scaler[1]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
end
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[i],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_upgrade_ex") }
|
||||
)
|
||||
end
|
||||
local reps = {}
|
||||
for i2 = 1, #G.jokers.cards do
|
||||
local _card = G.jokers.cards[i2]
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if _card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local check =
|
||||
cj(G.jokers.cards[i2], { retrigger_joker_check = true, other_card = G.jokers.cards[i] })
|
||||
if _card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if type(check) == "table" then
|
||||
reps[i2] = check and check.repetitions and check or 0
|
||||
else
|
||||
reps[i2] = 0
|
||||
end
|
||||
if
|
||||
G.jokers.cards[i2] == G.jokers.cards[i]
|
||||
and G.jokers.cards[i].edition
|
||||
and G.jokers.cards[i].edition.retriggers
|
||||
then
|
||||
local old_repetitions = reps[i] ~= 0 and reps[i].repetitions or 0
|
||||
local check = false --G.jokers.cards[i]:calculate_retriggers()
|
||||
if check and check.repetitions then
|
||||
check.repetitions = check.repetitions + old_repetitions
|
||||
reps[i] = check
|
||||
end
|
||||
end
|
||||
end
|
||||
for i0, j in ipairs(reps) do
|
||||
if (type(j) == "table") and j.repetitions and (j.repetitions > 0) then
|
||||
for r = 1, j.repetitions do
|
||||
card_eval_status_text(j.card, "jokers", nil, nil, nil, j)
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local o = obj:cry_scale_mod(
|
||||
G.jokers.cards[i],
|
||||
jkr,
|
||||
orig_scale_scale,
|
||||
true_base,
|
||||
orig_scale_base,
|
||||
new_scale_base
|
||||
)
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if o then
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not jkr.ability[dbl_info.scaler[1]]
|
||||
or not jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.scaler[1]] then
|
||||
jkr.ability[dbl_info.scaler[1]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
end
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[i],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_upgrade_ex") }
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Cryptid.compound_interest_scale_mod(self, orig_scale_scale, orig_scale_base, new_scale_base)
|
||||
local jkr = self
|
||||
local dbl_info = G.GAME.cry_double_scale[jkr.sort_id]
|
||||
if jkr.ability and type(jkr.ability) == "table" then
|
||||
if not G.GAME.cry_double_scale[jkr.sort_id] or not G.GAME.cry_double_scale[jkr.sort_id].ability then
|
||||
if not G.GAME.cry_double_scale[jkr.sort_id] then
|
||||
G.GAME.cry_double_scale[jkr.sort_id] = { ability = { double_scale = true } }
|
||||
end
|
||||
for k, v in pairs(jkr.ability) do
|
||||
if type(jkr.ability[k]) ~= "table" then
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k] = v
|
||||
else
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k] = {}
|
||||
for _k, _v in pairs(jkr.ability[k]) do
|
||||
G.GAME.cry_double_scale[jkr.sort_id].ability[k][_k] = _v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if G.GAME.cry_double_scale[jkr.sort_id] and not G.GAME.cry_double_scale[jkr.sort_id].scaler then
|
||||
dbl_info.base = { "extra", "percent" }
|
||||
dbl_info.scaler = { "extra", "percent_mod" }
|
||||
dbl_info.scaler_base = jkr.ability.extra.percent_mod
|
||||
dbl_info.offset = 1
|
||||
end
|
||||
end
|
||||
local true_base = dbl_info.scaler_base
|
||||
if true_base then
|
||||
for i = 1, #G.jokers.cards do
|
||||
local obj = G.jokers.cards[i].config.center
|
||||
if obj.cry_scale_mod and type(obj.cry_scale_mod) == "function" then
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local o = obj:cry_scale_mod(
|
||||
G.jokers.cards[i],
|
||||
jkr,
|
||||
orig_scale_scale,
|
||||
true_base,
|
||||
orig_scale_base,
|
||||
new_scale_base
|
||||
)
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if o then
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not jkr.ability[dbl_info.scaler[1]]
|
||||
or not jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.scaler[1]] then
|
||||
jkr.ability[dbl_info.scaler[1]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
end
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[i],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_upgrade_ex") }
|
||||
)
|
||||
end
|
||||
local reps = {}
|
||||
for i2 = 1, #G.jokers.cards do
|
||||
local _card = G.jokers.cards[i2]
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if _card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local check =
|
||||
cj(G.jokers.cards[i2], { retrigger_joker_check = true, other_card = G.jokers.cards[i] })
|
||||
if _card.ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if type(check) == "table" then
|
||||
reps[i2] = check and check.repetitions and check or 0
|
||||
else
|
||||
reps[i2] = 0
|
||||
end
|
||||
if
|
||||
G.jokers.cards[i2] == G.jokers.cards[i]
|
||||
and G.jokers.cards[i].edition
|
||||
and G.jokers.cards[i].edition.retriggers
|
||||
then
|
||||
local old_repetitions = reps[i] ~= 0 and reps[i].repetitions or 0
|
||||
local check = false --G.jokers.cards[i]:calculate_retriggers()
|
||||
if check and check.repetitions then
|
||||
check.repetitions = check.repetitions + old_repetitions
|
||||
reps[i] = check
|
||||
end
|
||||
end
|
||||
end
|
||||
for i0, j in ipairs(reps) do
|
||||
if (type(j) == "table") and j.repetitions and (j.repetitions > 0) then
|
||||
for r = 1, j.repetitions do
|
||||
card_eval_status_text(j.card, "jokers", nil, nil, nil, j)
|
||||
local ggpn = G.GAME.probabilities.normal
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = 1e9
|
||||
end
|
||||
local o = obj:cry_scale_mod(
|
||||
G.jokers.cards[i],
|
||||
jkr,
|
||||
orig_scale_scale,
|
||||
true_base,
|
||||
orig_scale_base,
|
||||
new_scale_base
|
||||
)
|
||||
if G.jokers.cards[i].ability.cry_rigged then
|
||||
G.GAME.probabilities.normal = ggpn
|
||||
end
|
||||
if o then
|
||||
if #dbl_info.scaler == 2 then
|
||||
if
|
||||
not (
|
||||
not jkr.ability[dbl_info.scaler[1]]
|
||||
or not jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]]
|
||||
)
|
||||
then
|
||||
jkr.ability[dbl_info.scaler[1]][dbl_info.scaler[2]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
else
|
||||
if jkr.ability[dbl_info.scaler[1]] then
|
||||
jkr.ability[dbl_info.scaler[1]] = o
|
||||
orig_scale_scale = o
|
||||
end
|
||||
end
|
||||
card_eval_status_text(
|
||||
G.jokers.cards[i],
|
||||
"extra",
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{ message = localize("k_upgrade_ex") }
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,11 +15,11 @@ SMODS.PokerHand({
|
|||
l_chips = 50,
|
||||
l_mult = 1,
|
||||
example = {
|
||||
{ "S_A", true, "m_stone" },
|
||||
{ "S_A", true, "m_stone" },
|
||||
{ "S_A", true, "m_stone" },
|
||||
{ "S_A", true, "m_stone" },
|
||||
{ "S_A", true, "m_stone" },
|
||||
{ "S_A", true, enhancement = "m_stone" },
|
||||
{ "S_A", true, enhancement = "m_stone" },
|
||||
{ "S_A", true, enhancement = "m_stone" },
|
||||
{ "S_A", true, enhancement = "m_stone" },
|
||||
{ "S_A", true, enhancement = "m_stone" },
|
||||
},
|
||||
atlas = "poker_hands",
|
||||
pos = { x = 0, y = 0 },
|
||||
|
@ -267,6 +267,68 @@ SMODS.PokerHand({
|
|||
return
|
||||
end,
|
||||
})
|
||||
|
||||
SMODS.PokerHand({
|
||||
key = "None",
|
||||
visible = false,
|
||||
chips = 0,
|
||||
mult = 0,
|
||||
l_chips = 5,
|
||||
l_mult = 0.5,
|
||||
example = {},
|
||||
atlas = "poker_hands",
|
||||
pos = { x = 0, y = 0 },
|
||||
evaluate = function(parts, hand)
|
||||
if Cryptid.enabled("set_cry_poker_hand_stuff") ~= true or Cryptid.enabled("c_cry_nibiru") ~= true then --or Cryptid.enabled("c_cry_asteroidbelt") ~= true then
|
||||
return {}
|
||||
end
|
||||
return { hand and #hand == 0 and G.GAME.hands["cry_None"].visible and {} or nil }
|
||||
end,
|
||||
})
|
||||
|
||||
SMODS.PokerHand({
|
||||
key = "Declare0",
|
||||
visible = false,
|
||||
chips = 0,
|
||||
mult = 0,
|
||||
l_chips = 0,
|
||||
l_mult = 0,
|
||||
example = {},
|
||||
atlas = "poker_hands",
|
||||
pos = { x = 0, y = 0 },
|
||||
above_hand = "cry_UltPair",
|
||||
order_offset = 1000,
|
||||
evaluate = function(parts, hand) end,
|
||||
})
|
||||
SMODS.PokerHand({
|
||||
key = "Declare1",
|
||||
visible = false,
|
||||
chips = 0,
|
||||
mult = 0,
|
||||
l_chips = 0,
|
||||
l_mult = 0,
|
||||
example = {},
|
||||
atlas = "poker_hands",
|
||||
pos = { x = 0, y = 0 },
|
||||
above_hand = "cry_UltPair",
|
||||
order_offset = 1001,
|
||||
evaluate = function(parts, hand) end,
|
||||
})
|
||||
SMODS.PokerHand({
|
||||
key = "Declare2",
|
||||
visible = false,
|
||||
chips = 0,
|
||||
mult = 0,
|
||||
l_chips = 0,
|
||||
l_mult = 0,
|
||||
example = {},
|
||||
atlas = "poker_hands",
|
||||
pos = { x = 0, y = 0 },
|
||||
above_hand = "cry_UltPair",
|
||||
order_offset = 1002,
|
||||
evaluate = function(parts, hand) end,
|
||||
})
|
||||
|
||||
SMODS.Rarity({
|
||||
key = "exotic",
|
||||
loc_txt = {},
|
||||
|
@ -312,6 +374,7 @@ SMODS.ConsumableType({
|
|||
default = "c_cry_potion",
|
||||
can_stack = false,
|
||||
can_divide = false,
|
||||
no_collection = true,
|
||||
})
|
||||
-- Pool used by Food Jokers
|
||||
SMODS.ObjectType({
|
||||
|
@ -399,6 +462,14 @@ SMODS.Atlas({
|
|||
Sprite(0, 0, G.CARD_W, G.CARD_H, G[self.atlas_table][self.key_noloc or self.key], { x = 5, y = 0 })
|
||||
end,
|
||||
})
|
||||
SMODS.Sound({
|
||||
key = "forcetrigger",
|
||||
path = "forcetrigger.ogg",
|
||||
})
|
||||
SMODS.Sound({
|
||||
key = "demitrigger",
|
||||
path = "demitrigger.ogg",
|
||||
})
|
||||
SMODS.Sound({
|
||||
key = "meow1",
|
||||
path = "meow1.ogg",
|
||||
|
@ -492,9 +563,17 @@ SMODS.Sound({
|
|||
key = "music_big",
|
||||
path = "music_big.ogg",
|
||||
select_music_track = function()
|
||||
return Cryptid_config.Cryptid
|
||||
if G.GAME.cry_music_big then
|
||||
return G.GAME.cry_music_big
|
||||
end
|
||||
if
|
||||
Cryptid_config.Cryptid
|
||||
and Cryptid_config.Cryptid.big_music
|
||||
and to_big(G.GAME.round_scores["hand"].amt) > to_big(10) ^ 1000000
|
||||
then
|
||||
G.GAME.cry_music_big = true
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
||||
SMODS.Sound({
|
||||
|
@ -661,7 +740,7 @@ SMODS.UndiscoveredSprite({
|
|||
key = "Code",
|
||||
atlas = "atlasnotjokers",
|
||||
path = "atlasnotjokers.png",
|
||||
pos = { x = 9, y = 5 },
|
||||
pos = { x = 12, y = 6 },
|
||||
px = 71,
|
||||
py = 95,
|
||||
})
|
||||
|
@ -681,6 +760,15 @@ SMODS.Atlas({
|
|||
py = 34,
|
||||
frames = 21,
|
||||
})
|
||||
--splitting these up because like more than 20 on one atlas is a crime
|
||||
SMODS.Atlas({
|
||||
key = "blinds_two",
|
||||
atlas_table = "ANIMATION_ATLAS",
|
||||
path = "bl_cry_two.png",
|
||||
px = 34,
|
||||
py = 34,
|
||||
frames = 21,
|
||||
})
|
||||
SMODS.Atlas({
|
||||
key = "nostalgia",
|
||||
atlas_table = "ANIMATION_ATLAS",
|
||||
|
@ -702,3 +790,77 @@ SMODS.Atlas({
|
|||
px = 73,
|
||||
py = 95,
|
||||
})
|
||||
SMODS.Atlas({
|
||||
key = "glowingSleeve",
|
||||
path = "sleeve_cry_glowing.png",
|
||||
px = 73,
|
||||
py = 95,
|
||||
})
|
||||
-- Scoring Calculation for The Tax
|
||||
SMODS.Scoring_Calculation({
|
||||
key = "tax",
|
||||
func = function(self, chips, mult, flames)
|
||||
return math.floor(math.min(0.4 * G.GAME.blind.chips, chips * mult) + 0.5)
|
||||
end,
|
||||
replace_ui = function(self)
|
||||
local aaa = 40
|
||||
local bbb = localize({ type = "variable", key = "tax_hand", vars = { aaa } })[1]
|
||||
-- rebuild the ui to change colours and add text and stuff
|
||||
-- SMODS made some stuff for this so that's kinda convienient ig
|
||||
return {
|
||||
n = G.UIT.R,
|
||||
config = { minh = 1.2, align = "cm" },
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = { align = "cm" },
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm", minh = 1, padding = 0.1 },
|
||||
nodes = {
|
||||
-- Chips box
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = { align = "cm", id = "hand_chips_container" },
|
||||
nodes = {
|
||||
SMODS.GUI.score_container({
|
||||
type = "chips",
|
||||
text = "chip_text",
|
||||
align = "cr",
|
||||
colour = G.C.CRY_TAX_CHIPS,
|
||||
}),
|
||||
},
|
||||
},
|
||||
-- Operator thingy (Stays the same)
|
||||
SMODS.GUI.operator(0.4),
|
||||
-- Mult box
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = { align = "cm", id = "hand_mult_container" },
|
||||
nodes = {
|
||||
SMODS.GUI.score_container({
|
||||
type = "mult",
|
||||
colour = G.C.CRY_TAX_MULT,
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
-- Text
|
||||
{
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm" },
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.T,
|
||||
config = { text = bbb, scale = 0.25, colour = G.C.IMPORTANT },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -13,26 +13,28 @@ SMODS.Joker:take_ownership("green_joker", {
|
|||
and not context.blueprint
|
||||
and context.other_card == context.full_hand[#context.full_hand]
|
||||
then
|
||||
local prev_mult = card.ability.mult
|
||||
card.ability.mult = math.max(0, card.ability.mult - card.ability.extra)
|
||||
if card.ability.mult ~= prev_mult then
|
||||
return {
|
||||
message = localize({
|
||||
type = "variable",
|
||||
key = "a_mult_minus",
|
||||
vars = { card.ability.extra },
|
||||
}),
|
||||
colour = G.C.RED,
|
||||
card = card,
|
||||
}
|
||||
if card.ability.mult ~= 0 then
|
||||
SMODS.scale_card(card, {
|
||||
ref_table = card.ability,
|
||||
ref_value = "mult",
|
||||
scalar_table = card.ability,
|
||||
scalar_value = "extra",
|
||||
operation = function(ref_table, ref_value, initial, change)
|
||||
ref_table[ref_value] = math.max(0, initial - change)
|
||||
end,
|
||||
message_key = "a_mult_minus",
|
||||
message_colour = G.C.RED,
|
||||
})
|
||||
end
|
||||
end
|
||||
if context.cardarea == G.jokers and context.before and not context.blueprint then
|
||||
card.ability.mult = card.ability.mult + card.ability.extra
|
||||
return {
|
||||
card = card,
|
||||
message = localize({ type = "variable", key = "a_mult", vars = { card.ability.extra } }),
|
||||
}
|
||||
SMODS.scale_card(card, {
|
||||
ref_table = card.ability,
|
||||
ref_value = "mult",
|
||||
scalar_value = "extra",
|
||||
message_key = "a_mult",
|
||||
message_colour = G.C.RED,
|
||||
})
|
||||
end
|
||||
if context.joker_main then
|
||||
return {
|
||||
|
@ -44,41 +46,6 @@ SMODS.Joker:take_ownership("green_joker", {
|
|||
loc_txt = {},
|
||||
}, true)
|
||||
|
||||
--Top Gear from The World End with Jimbo has several conflicts with Cryptid items
|
||||
--Namely, It overrides the edition that edition jokers spawn with, and doesn't work correctly with edition decks
|
||||
--I'm taking ownership of this, overiding it, and making an implementaion that is compatible with Cryptid
|
||||
|
||||
--Unrelated but kind of related side note: this prevents top gear from showing up in collection, not sure what's up with that
|
||||
--Is it due to how TWEWJ is Coded? Is it an issue with Steamodded itself? Might be worth looking into, just sayin
|
||||
|
||||
if (SMODS.Mods["TWEWY"] or {}).can_load then
|
||||
SMODS.Joker:take_ownership("twewy_topGear", {
|
||||
name = "Cry-topGear",
|
||||
--Stop Top Gear's Old code from working by overriding these
|
||||
add_to_deck = function(self, card, from_debuff) end,
|
||||
remove_from_deck = function(self, card, from_debuff) end,
|
||||
rarity = 3,
|
||||
loc_txt = {
|
||||
name = "Top Gear",
|
||||
text = {
|
||||
"All {C:blue}Common{C:attention} Jokers{}",
|
||||
"are {C:dark_edition}Polychrome{}",
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--Make Ortalab's Locked jokers not show up on Deck of Equilibrium and Antimatter Deck
|
||||
if (SMODS.Mods["ortalab"] or {}).can_load then
|
||||
for i = 1, 150 do
|
||||
print(i)
|
||||
SMODS.Joker:take_ownership("ortalab_temp_" .. i, {
|
||||
name = "Cry-skibidi",
|
||||
no_doe = true,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
--Requires Malverk Mod
|
||||
if (SMODS.Mods["malverk"] or {}).can_load then
|
||||
AltTexture({
|
||||
|
@ -117,9 +84,11 @@ if (SMODS.Mods["AntePreview"] or {}).can_load then
|
|||
big = get_new_boss()
|
||||
end
|
||||
local predictions = predict_hook()
|
||||
if next(SMODS.find_card("j_cry_kittyprinter")) then
|
||||
predictions.Small.tag = "tag_cry_cat"
|
||||
predictions.Big.tag = "tag_cry_cat"
|
||||
local s = Cryptid.get_next_tag("Small")
|
||||
local b = Cryptid.get_next_tag("Big")
|
||||
if s or b then
|
||||
predictions.Small.tag = s or predictions.Small.tag
|
||||
predictions.Big.tag = b or predictions.Big.tag
|
||||
end
|
||||
if G.GAME.modifiers.cry_no_tags then
|
||||
for _, pred in pairs(predictions) do
|
||||
|
@ -140,3 +109,63 @@ if (SMODS.Mods["AntePreview"] or {}).can_load then
|
|||
return predictions
|
||||
end
|
||||
end
|
||||
|
||||
--Designed to run if ran with is_suit overriding mods of higher priority (UnStable comes to first mind)
|
||||
function Card:is_suit_force_enhancement(suit, bypass_debuff, flush_calc)
|
||||
--Force suit to be suit X if specified in enhancement, only if not vampired
|
||||
if Cryptid.cry_enhancement_has_specific_suit(self) and not self.vampired then
|
||||
return suit == Cryptid.cry_enhancement_get_specific_suit(self)
|
||||
end
|
||||
local ref = self:is_suit(suit, bypass_debuff, flush_calc)
|
||||
return ref
|
||||
end
|
||||
|
||||
-- === Cross mod access for Cryptid === --
|
||||
-- IcyEthics: Adding this section to collect functions that are intended to help other mods
|
||||
-- interact with Cryptid's functionality in some way
|
||||
|
||||
-- ://CLASS API
|
||||
-- This function allows another mod to set up a name and alias that's accessible by the ://CLASS Code Card
|
||||
-- It's also set up more generically so that other mods can access the same information
|
||||
Cryptid.enhancement_alias_list = {}
|
||||
|
||||
---@param list table
|
||||
function Cryptid.load_enhancement_aliases(list)
|
||||
for _enhancementkey, _listofaliases in pairs(list) do
|
||||
Cryptid.enhancement_alias_list[_enhancementkey] = _listofaliases
|
||||
end
|
||||
end
|
||||
|
||||
-- Acclimator Voucher API functions
|
||||
-- This should allow other mods to set up their own tier 3 vouchers in the style of
|
||||
-- the Tarot Acclimator voucher by setting up the voucher and just initializing
|
||||
-- a call to this function in their initialization
|
||||
|
||||
Cryptid.voucher_acclimator_data = {}
|
||||
|
||||
---@param voucher_key string
|
||||
---@param localization_key string
|
||||
---@param ref_value string
|
||||
---@param colour any
|
||||
function Cryptid.setup_voucher_rate_adjuster(voucher_key, localization_key, ref_value, colour)
|
||||
-- Necessary values:
|
||||
-- Voucher key
|
||||
-- localize key
|
||||
-- ref value
|
||||
-- colour
|
||||
|
||||
if not voucher_key or not localization_key or not ref_value or not colour then
|
||||
print("Cryptid.setup_voucher_rate_adjuster was improperly called")
|
||||
end
|
||||
|
||||
Cryptid.voucher_acclimator_data[#Cryptid.voucher_acclimator_data + 1] = {
|
||||
voucher_key = voucher_key,
|
||||
localization_key = localization_key,
|
||||
ref_value = ref_value,
|
||||
colour = colour,
|
||||
}
|
||||
print(Cryptid.voucher_acclimator_data[#Cryptid.voucher_acclimator_data])
|
||||
end
|
||||
|
||||
Cryptid.setup_voucher_rate_adjuster("v_cry_tacclimator", "b_tarot_rate", "tarot", G.C.SECONDARY_SET.Tarot)
|
||||
Cryptid.setup_voucher_rate_adjuster("v_cry_pacclimator", "b_planet_rate", "planet", G.C.SECONDARY_SET.Planet)
|
||||
|
|
1332
Cryptid/lib/forcetrigger.lua
Normal file
|
@ -31,10 +31,6 @@ function Game:update(dt)
|
|||
end
|
||||
|
||||
G.FUNCS.cry_intro_controller = function()
|
||||
if Jen then
|
||||
G.PROFILES[G.SETTINGS.profile].cry_intro_complete = true
|
||||
G.PROFILES[G.SETTINGS.profile].cry_gameset = "madness"
|
||||
end
|
||||
G.PROFILES[G.SETTINGS.profile].cry_intro_progress = G.PROFILES[G.SETTINGS.profile].cry_intro_progress
|
||||
or {
|
||||
state = "start",
|
||||
|
@ -188,7 +184,7 @@ G.FUNCS.cry_intro_part = function(_part)
|
|||
--TODO: localize
|
||||
G.modestBtn = create_UIBox_character_button_with_sprite({
|
||||
sprite = modestSprite,
|
||||
button = "Modest",
|
||||
button = localize("cry_gameset_modest"),
|
||||
id = "modest",
|
||||
func = "cry_modest",
|
||||
colour = G.C.GREEN,
|
||||
|
@ -196,7 +192,7 @@ G.FUNCS.cry_intro_part = function(_part)
|
|||
})
|
||||
G.mainlineBtn = create_UIBox_character_button_with_sprite({
|
||||
sprite = mainlineSprite,
|
||||
button = "Mainline",
|
||||
button = localize("cry_gameset_mainline"),
|
||||
id = "mainline",
|
||||
func = "cry_mainline",
|
||||
colour = G.C.RED,
|
||||
|
@ -204,7 +200,7 @@ G.FUNCS.cry_intro_part = function(_part)
|
|||
})
|
||||
G.madnessBtn = create_UIBox_character_button_with_sprite({
|
||||
sprite = madnessSprite,
|
||||
button = "Madness",
|
||||
button = localize("cry_gameset_madness"),
|
||||
id = "madness",
|
||||
func = "cry_madness",
|
||||
colour = G.C.CRY_EXOTIC,
|
||||
|
@ -547,9 +543,6 @@ end
|
|||
|
||||
-- designed to work on any object type
|
||||
function Cryptid.gameset(card, center)
|
||||
if Jen then
|
||||
return "madness"
|
||||
end
|
||||
if not center then
|
||||
if not card then
|
||||
return G.PROFILES[G.SETTINGS.profile].cry_gameset or "mainline"
|
||||
|
@ -569,7 +562,9 @@ function Cryptid.gameset(card, center)
|
|||
if center.tag and center.tag.key then --dumb fix for tags
|
||||
center = center.tag
|
||||
else
|
||||
if false then
|
||||
print("Could not find key for center: " .. tprint(center))
|
||||
end
|
||||
return G.PROFILES[G.SETTINGS.profile].cry_gameset or "mainline"
|
||||
end
|
||||
end
|
||||
|
@ -602,6 +597,11 @@ function Card:set_ability(center, y, z)
|
|||
if not center then
|
||||
return
|
||||
end
|
||||
-- Addition by IcyEthics to make compatible with strings used on set_ability. Copied directly from the smods set_ability implementation
|
||||
if type(center) == "string" then
|
||||
assert(G.P_CENTERS[center], ('Could not find center "%s"'):format(center))
|
||||
center = G.P_CENTERS[center]
|
||||
end
|
||||
if not center.config then
|
||||
center.config = {} --crashproofing
|
||||
end
|
||||
|
@ -634,14 +634,18 @@ function Card:set_ability(center, y, z)
|
|||
end
|
||||
|
||||
-- open gameset config UI when clicking on a card in the Cryptid collection
|
||||
--disable this functionality for Jen's Almanac
|
||||
if not Jen then
|
||||
-- can be disabled in config
|
||||
if Cryptid_config.gameset_toggle then
|
||||
local ccl = Card.click
|
||||
function Card:click()
|
||||
ccl(self)
|
||||
if G.your_collection then
|
||||
for k, v in pairs(G.your_collection) do
|
||||
if self.area == v and G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if
|
||||
self.area == v
|
||||
and G.ACTIVE_MOD_UI
|
||||
and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid")
|
||||
then
|
||||
if not self.config.center or self.config.center and self.config.center.set == "Default" then
|
||||
--make a fake center
|
||||
local old_force_gameset = self.config.center and self.config.center.force_gameset
|
||||
|
@ -1115,15 +1119,29 @@ function Cryptid.update_obj_registry(m, force_enable)
|
|||
end
|
||||
if m.obj_table then
|
||||
for k, v in pairs(m.obj_table) do
|
||||
if v.mod and v.mod.id == "Cryptid" then
|
||||
if v.mod and (v.mod.id == "Cryptid" or Cryptid.mod_gameset_whitelist[v.mod.id]) then
|
||||
local en = force_enable or Cryptid.enabled(k)
|
||||
if en == true then
|
||||
if v.cry_disabled then
|
||||
v:enable()
|
||||
if v.key == "set_cry_poker_hand_stuff" then
|
||||
G.PROFILES[G.SETTINGS.profile].cry_none = Cryptid.safe_get(
|
||||
G.PROFILES,
|
||||
G.SETTINGS.profile,
|
||||
"cry_none2"
|
||||
) or nil
|
||||
G.PROFILES[G.SETTINGS.profile].cry_none2 = nil
|
||||
end
|
||||
end
|
||||
else
|
||||
if not v.cry_disabled then
|
||||
v:_disable(en)
|
||||
if v.key == "set_cry_poker_hand_stuff" and G.PROFILES[G.SETTINGS.profile].cry_none then
|
||||
--Remove the none flag if poker hands are disabled because leaving it on can leave to softlocks
|
||||
G.PROFILES[G.SETTINGS.profile].cry_none2 =
|
||||
Cryptid.safe_get(G.PROFILES, G.SETTINGS.profile, "cry_none")
|
||||
G.PROFILES[G.SETTINGS.profile].cry_none = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1141,7 +1159,7 @@ function Cryptid.index_items(func, m)
|
|||
end
|
||||
if m.obj_table then
|
||||
for k, v in pairs(m.obj_table) do
|
||||
if v.mod and v.mod.id == "Cryptid" then
|
||||
if v.mod and (v.mod.id == "Cryptid" or Cryptid.mod_gameset_whitelist[v.mod.id]) then
|
||||
func(v)
|
||||
end
|
||||
end
|
||||
|
@ -1186,6 +1204,12 @@ SMODS.ContentSet({
|
|||
key = "m",
|
||||
atlas = "atlasepic",
|
||||
pos = { x = 3, y = 1 }, --m
|
||||
cry_order = -23,
|
||||
})
|
||||
SMODS.ContentSet({
|
||||
key = "meme",
|
||||
atlas = "atlastwo",
|
||||
pos = { x = 2, y = 4 }, --Happy House
|
||||
cry_order = -22,
|
||||
})
|
||||
SMODS.ContentSet({
|
||||
|
@ -1218,7 +1242,7 @@ SMODS.ContentSet({
|
|||
key = "deck",
|
||||
atlas = "atlasdeck",
|
||||
pos = { x = 4, y = 5 }, --Critical Deck
|
||||
cry_order = -23,
|
||||
cry_order = -24,
|
||||
})
|
||||
SMODS.ContentSet({
|
||||
key = "spooky",
|
||||
|
@ -1243,7 +1267,7 @@ SMODS.ContentSet({
|
|||
key = "misc",
|
||||
atlas = "cry_misc",
|
||||
pos = { x = 2, y = 0 }, --Echo Card
|
||||
cry_order = -22,
|
||||
cry_order = -21,
|
||||
})
|
||||
SMODS.ContentSet({
|
||||
key = "misc_joker",
|
||||
|
@ -1329,7 +1353,7 @@ function create_UIBox_your_collection_content_sets()
|
|||
|
||||
local joker_pool = {}
|
||||
for k, v in pairs(SMODS.ContentSet.obj_table) do
|
||||
if v.set == "Content Set" then
|
||||
if v.set == "Content Set" and v.original_mod.id == G.ACTIVE_MOD_UI.id then
|
||||
table.insert(joker_pool, v)
|
||||
end
|
||||
end
|
||||
|
@ -1424,7 +1448,7 @@ function create_UIBox_your_collection_current_set()
|
|||
end
|
||||
Cryptid.index_items(is_in_set)
|
||||
table.sort(joker_pool, function(a, b)
|
||||
return a.cry_order < b.cry_order
|
||||
return (a.cry_order or a.order or pseudorandom(a.key)) < (b.cry_order or b.order or pseudorandom(b.key))
|
||||
end)
|
||||
local joker_options = {}
|
||||
for i = 1, math.ceil(#joker_pool / (5 * #G.your_collection)) do
|
||||
|
@ -1493,12 +1517,12 @@ G.FUNCS.your_collection_content_set_page = function(args)
|
|||
end
|
||||
local joker_pool = {}
|
||||
for k, v in pairs(SMODS.ContentSet.obj_table) do
|
||||
if v.set == "Content Set" then
|
||||
if v.set == "Content Set" and v.original_mod.id == G.ACTIVE_MOD_UI.id then
|
||||
table.insert(joker_pool, v)
|
||||
end
|
||||
end
|
||||
table.sort(joker_pool, function(a, b)
|
||||
return a.cry_order < b.cry_order
|
||||
return (a.cry_order or a.order or pseudorandom(a.key)) < (b.cry_order or b.order or pseudorandom(b.key))
|
||||
end)
|
||||
for i = 1, 5 do
|
||||
for j = 1, #G.your_collection do
|
||||
|
@ -1541,7 +1565,7 @@ G.FUNCS.your_collection_current_set_page = function(args)
|
|||
end
|
||||
Cryptid.index_items(is_in_set)
|
||||
table.sort(joker_pool, function(a, b)
|
||||
return a.cry_order < b.cry_order
|
||||
return (a.cry_order or a.order or pseudorandom(a.key)) < (b.cry_order or b.order or pseudorandom(b.key))
|
||||
end)
|
||||
for i = 1, 5 do
|
||||
for j = 1, #G.your_collection do
|
||||
|
@ -1612,19 +1636,19 @@ end
|
|||
-- Hooks for all collection types
|
||||
local smcp = SMODS.collection_pool
|
||||
SMODS.collection_pool = function(m)
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
-- use SMODS pools instead of vanilla pools, so disabled cards appear
|
||||
if m[1] and m[1].set and m[1].set == "Seal" then
|
||||
m = {}
|
||||
for k, v in pairs(SMODS.Seal.obj_table) do
|
||||
if v.mod and v.mod.id == "Cryptid" then
|
||||
if v.mod and (Cryptid.mod_gameset_whitelist[v.mod.id] or v.mod.id == "Cryptid") then
|
||||
table.insert(m, v)
|
||||
end
|
||||
end
|
||||
elseif m[1] and m[1].set and m[1].set == "Sticker" then
|
||||
m = {}
|
||||
for k, v in pairs(SMODS.Sticker.obj_table) do
|
||||
if v.mod and v.mod.id == "Cryptid" then
|
||||
if v.mod and (Cryptid.mod_gameset_whitelist[v.mod.id] or v.mod.id == "Cryptid") then
|
||||
table.insert(m, v)
|
||||
end
|
||||
end
|
||||
|
@ -1632,19 +1656,19 @@ SMODS.collection_pool = function(m)
|
|||
local set = m[1].set
|
||||
m = {}
|
||||
for k, v in pairs(SMODS.Center.obj_table) do
|
||||
if v.set == set and v.mod and v.mod.id == "Cryptid" then
|
||||
if v.set == set and v.mod and (Cryptid.mod_gameset_whitelist[v.mod.id] or v.mod.id == "Cryptid") then
|
||||
table.insert(m, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Fix blind issues
|
||||
for k, v in pairs(m) do
|
||||
if v.set == "Blind" and v.mod and v.mod.id == "Cryptid" then
|
||||
if v.set == "Blind" and v.mod and (Cryptid.mod_gameset_whitelist[v.mod.id] or v.mod.id == "Cryptid") then
|
||||
v.config = {}
|
||||
end
|
||||
end
|
||||
table.sort(m, function(a, b)
|
||||
return a.cry_order < b.cry_order
|
||||
return (a.cry_order or a.order or pseudorandom(a.key)) < (b.cry_order or b.order or pseudorandom(b.key))
|
||||
end)
|
||||
end
|
||||
return smcp(m)
|
||||
|
@ -1654,7 +1678,7 @@ end
|
|||
local mct = modsCollectionTally
|
||||
function modsCollectionTally(pool, set)
|
||||
local t = mct(pool, set)
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
local obj_tally = { tally = 0, of = 0 }
|
||||
--infer pool
|
||||
local _set = set or Cryptid.safe_get(pool, 1, "set")
|
||||
|
@ -1709,10 +1733,10 @@ end
|
|||
-- Make non-center collections show all cards as centers
|
||||
local uibk = create_UIBox_your_collection_decks
|
||||
function create_UIBox_your_collection_decks()
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
local generic_collection_pool = {}
|
||||
for k, v in pairs(SMODS.Center.obj_table) do
|
||||
if v.set == "Back" and v.mod and v.mod.id == "Cryptid" then
|
||||
if v.set == "Back" and v.mod and (v.mod.id == "Cryptid" or Cryptid.mod_gameset_whitelist[v.mod.id]) then
|
||||
table.insert(generic_collection_pool, v)
|
||||
end
|
||||
end
|
||||
|
@ -1740,10 +1764,10 @@ end
|
|||
|
||||
local uitag = create_UIBox_your_collection_tags
|
||||
function create_UIBox_your_collection_tags()
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
local generic_collection_pool = {}
|
||||
for k, v in pairs(SMODS.Tag.obj_table) do
|
||||
if v.set == "Tag" and v.mod and v.mod.id == "Cryptid" then
|
||||
if v.set == "Tag" and v.mod and (v.mod.id == "Cryptid" or Cryptid.mod_gameset_whitelist[v.mod.id]) then
|
||||
table.insert(generic_collection_pool, v)
|
||||
end
|
||||
end
|
||||
|
@ -1763,10 +1787,10 @@ end
|
|||
|
||||
local uibl = create_UIBox_your_collection_blinds
|
||||
function create_UIBox_your_collection_blinds()
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
local generic_collection_pool = {}
|
||||
for k, v in pairs(SMODS.Blind.obj_table) do
|
||||
if v.set == "Blind" and v.mod and v.mod.id == "Cryptid" then
|
||||
if v.set == "Blind" and v.mod and (v.mod.id == "Cryptid" or Cryptid.mod_gameset_whitelist[v.mod.id]) then
|
||||
table.insert(generic_collection_pool, v)
|
||||
end
|
||||
end
|
||||
|
@ -1786,7 +1810,7 @@ end
|
|||
|
||||
local uisl = create_UIBox_your_collection_seals
|
||||
function create_UIBox_your_collection_seals()
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
return SMODS.card_collection_UIBox(G.P_CENTER_POOLS.Seal, { 5, 5 }, {
|
||||
snap_back = true,
|
||||
infotip = localize("ml_edition_seal_enhancement_explanation"),
|
||||
|
@ -1808,7 +1832,7 @@ end
|
|||
|
||||
local uist = create_UIBox_your_collection_stickers
|
||||
function create_UIBox_your_collection_stickers()
|
||||
if G.ACTIVE_MOD_UI and G.ACTIVE_MOD_UI.id == "Cryptid" then
|
||||
if G.ACTIVE_MOD_UI and (Cryptid.mod_gameset_whitelist[G.ACTIVE_MOD_UI.id] or G.ACTIVE_MOD_UI.id == "Cryptid") then
|
||||
return SMODS.card_collection_UIBox(SMODS.Stickers, { 5, 5 }, {
|
||||
snap_back = true,
|
||||
hide_single_page = true,
|
||||
|
|
|
@ -187,6 +187,9 @@ function Cryptid.pluralize(str, vars)
|
|||
if type(num) == "string" then
|
||||
num = (Big and to_number(to_big(num))) or num
|
||||
end
|
||||
if not num then
|
||||
num = 1
|
||||
end
|
||||
local plural = _table[1] -- default
|
||||
local checks = { [1] = "=" } -- checks 1 by default
|
||||
local checks1mod = false -- tracks if 1 was modified
|
||||
|
@ -217,6 +220,9 @@ function Cryptid.pluralize(str, vars)
|
|||
table.sort(keys, function(a, b)
|
||||
return a < b
|
||||
end)
|
||||
if not (tonumber(num) or is_number(num)) then
|
||||
num = 1
|
||||
end
|
||||
for _, k in ipairs(keys) do
|
||||
if fch(checks[k], "=") then
|
||||
if to_big(math.abs(num - k)) < to_big(0.001) then
|
||||
|
@ -293,9 +299,11 @@ function Cryptid.with_deck_effects(card, func)
|
|||
if not card.added_to_deck then
|
||||
return func(card)
|
||||
else
|
||||
card.from_quantum = true
|
||||
card:remove_from_deck(true)
|
||||
local ret = func(card)
|
||||
card:add_to_deck(true)
|
||||
card.from_quantum = nil
|
||||
return ret
|
||||
end
|
||||
end
|
||||
|
@ -468,7 +476,7 @@ function Cryptid.bonus_voucher_mod(mod)
|
|||
{ bypass_discovery_center = true, bypass_discovery_ui = true }
|
||||
)
|
||||
card.shop_cry_bonusvoucher = #curr_bonus
|
||||
Cryptid.misprintize(card)
|
||||
Cryptid.manipulate(card)
|
||||
if G.GAME.events.ev_cry_choco2 then
|
||||
card.misprint_cost_fac = (card.misprint_cost_fac or 1) * 2
|
||||
card:set_cost()
|
||||
|
@ -502,6 +510,9 @@ end
|
|||
local sppref = set_profile_progress
|
||||
function set_profile_progress()
|
||||
sppref()
|
||||
if not Cryptid.shinytagdata then
|
||||
Cryptid.shinytagdata = {}
|
||||
end
|
||||
if not Cryptid.shinytagdata.init then
|
||||
for k, v in pairs(G.P_TAGS) do
|
||||
if Cryptid.shinytagdata[k] == nil then
|
||||
|
@ -512,54 +523,46 @@ function set_profile_progress()
|
|||
end
|
||||
end
|
||||
|
||||
Cryptid.big_num_whitelist = {
|
||||
j_ride_the_bus = true,
|
||||
j_egg = true,
|
||||
j_runner = true,
|
||||
j_ice_cream = true,
|
||||
j_constellation = true,
|
||||
j_green_joker = true,
|
||||
j_red_card = true,
|
||||
j_madness = true,
|
||||
j_square = true,
|
||||
j_vampire = true,
|
||||
j_hologram = true,
|
||||
j_obelisk = true,
|
||||
j_turtle_bean = true,
|
||||
j_lucky_cat = true,
|
||||
j_flash = true,
|
||||
j_popcorn = true,
|
||||
j_trousers = true,
|
||||
j_ramen = true,
|
||||
j_castle = true,
|
||||
j_campfire = true,
|
||||
j_throwback = true,
|
||||
j_glass = true,
|
||||
j_wee = true,
|
||||
j_hit_the_road = true,
|
||||
j_caino = true,
|
||||
j_yorick = true,
|
||||
-- Once all Cryptid Jokers get support for this, these can be removed
|
||||
j_cry_dropshot = true,
|
||||
j_cry_wee_fib = true,
|
||||
j_cry_whip = true,
|
||||
j_cry_pickle = true,
|
||||
j_cry_chili_pepper = true,
|
||||
j_cry_cursor = true,
|
||||
j_cry_jimball = true,
|
||||
j_cry_eternalflame = true,
|
||||
j_cry_fspinner = true,
|
||||
j_cry_krustytheclown = true,
|
||||
j_cry_antennastoheaven = true,
|
||||
j_cry_mondrian = true,
|
||||
j_cry_spaceglobe = true,
|
||||
j_cry_m = true,
|
||||
j_cry_exponentia = true,
|
||||
j_cry_crustulum = true,
|
||||
j_cry_primus = true,
|
||||
j_cry_stella_mortis = true,
|
||||
j_cry_hugem = true,
|
||||
j_cry_mprime = true,
|
||||
Cryptid.big_num_blacklist = {
|
||||
["j_cry_fractal"] = true,
|
||||
["j_cry_wonka_bar"] = true,
|
||||
["j_cry_oldcandy"] = true,
|
||||
["j_cry_negative"] = true,
|
||||
|
||||
["c_magician"] = true,
|
||||
["c_empress"] = true,
|
||||
["c_heirophant"] = true,
|
||||
["c_lovers"] = true,
|
||||
["c_chariot"] = true,
|
||||
["c_justice"] = true,
|
||||
["c_strength"] = true,
|
||||
["c_hanged_man"] = true,
|
||||
["c_death"] = true,
|
||||
["c_devil"] = true,
|
||||
["c_tower"] = true,
|
||||
["c_star"] = true,
|
||||
["c_moon"] = true,
|
||||
["c_sun"] = true,
|
||||
["c_world"] = true,
|
||||
["c_cry_eclipse"] = true,
|
||||
["c_cry_seraph"] = true,
|
||||
["c_cry_instability"] = true,
|
||||
|
||||
["v_cry_stickyhand"] = true,
|
||||
["v_cry_grapplinghook"] = true,
|
||||
["v_cry_hyperspacetether"] = true,
|
||||
|
||||
-- Add your Jokers here if you *don't* want to have it's numbers go into BigNum
|
||||
-- FORMAT: <Joker Key ("j_cry_oil_lamp")> = true,
|
||||
-- TARGET: BigNum Black List
|
||||
}
|
||||
|
||||
Cryptid.mod_whitelist = {
|
||||
Cryptid = true,
|
||||
|
||||
-- Add your ModName here if you want your mod to have it's jokers' values go into BigNum
|
||||
-- FORMAT: <ModName> = true,
|
||||
-- TARGET: BigNum Mod Whitelist
|
||||
}
|
||||
|
||||
function Cryptid.is_card_big(joker)
|
||||
|
@ -567,7 +570,18 @@ function Cryptid.is_card_big(joker)
|
|||
if not center then
|
||||
return false
|
||||
end
|
||||
return Cryptid.big_num_whitelist[center.key or "Nope!"] --[[or
|
||||
|
||||
if center.immutable and center.immutable == true then
|
||||
return false
|
||||
end
|
||||
|
||||
if center.mod and not Cryptid.mod_whitelist[center.mod.name] then
|
||||
return false
|
||||
end
|
||||
|
||||
local in_blacklist = Cryptid.big_num_blacklist[center.key or "Nope!"] or false
|
||||
|
||||
return not in_blacklist --[[or
|
||||
(center.mod and center.mod.id == "Cryptid" and not center.no_break_infinity) or center.break_infinity--]]
|
||||
end
|
||||
|
||||
|
@ -585,6 +599,7 @@ function Cryptid.safe_get(t, ...)
|
|||
end
|
||||
return current
|
||||
end
|
||||
|
||||
--Functions used by boss blinds
|
||||
function Blind:cry_ante_base_mod(dt)
|
||||
if not self.disabled then
|
||||
|
@ -595,6 +610,7 @@ function Blind:cry_ante_base_mod(dt)
|
|||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function Blind:cry_round_base_mod(dt)
|
||||
if not self.disabled then
|
||||
local obj = self.config.blind
|
||||
|
@ -604,15 +620,20 @@ function Blind:cry_round_base_mod(dt)
|
|||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
function Blind:cry_cap_score(score)
|
||||
if not self.disabled then
|
||||
local obj = self.config.blind
|
||||
if obj.cry_modify_score and type(obj.cry_modify_score) == "function" then
|
||||
score = obj:cry_modify_score(score)
|
||||
end
|
||||
if obj.cry_cap_score and type(obj.cry_cap_score) == "function" then
|
||||
return obj:cry_cap_score(score)
|
||||
end
|
||||
end
|
||||
return score
|
||||
end
|
||||
|
||||
function Blind:cry_after_play()
|
||||
if not self.disabled then
|
||||
local obj = self.config.blind
|
||||
|
@ -621,6 +642,7 @@ function Blind:cry_after_play()
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Blind:cry_before_play()
|
||||
if not self.disabled then
|
||||
local obj = self.config.blind
|
||||
|
@ -629,6 +651,17 @@ function Blind:cry_before_play()
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
--The decision's ability to show a booster pack
|
||||
function Blind:cry_before_cash()
|
||||
if not self.disabled then
|
||||
local obj = self.config.blind
|
||||
if obj.cry_before_cash and type(obj.cry_before_cash) == "function" then
|
||||
return obj:cry_before_cash()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Blind:cry_calc_ante_gain()
|
||||
if G.GAME.modifiers.cry_spooky then --here is the best place to check when spooky should apply
|
||||
local card
|
||||
|
@ -649,6 +682,7 @@ function Blind:cry_calc_ante_gain()
|
|||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
function Cryptid.enhanced_deck_info(deck)
|
||||
--only accounts for vanilla stuff at the moment (WIP)
|
||||
local edition, enhancement, sticker, suit, seal =
|
||||
|
@ -679,6 +713,7 @@ function Cryptid.enhanced_deck_info(deck)
|
|||
end
|
||||
return ret.edition, ret.enhancement, ret.sticker, ret.suit, ret.seal
|
||||
end
|
||||
|
||||
function Cryptid.post_process(center)
|
||||
if center.pools and center.pools.M then
|
||||
local vc = center.calculate
|
||||
|
@ -703,8 +738,11 @@ end
|
|||
-- For resetting localization on the fly for family friendly toggle
|
||||
function Cryptid.reload_localization()
|
||||
SMODS.handle_loc_file(Cryptid.path)
|
||||
Cryptid.handle_other_localizations()
|
||||
return init_localization()
|
||||
end
|
||||
-- Purely for crossmod purposes
|
||||
function Cryptid.handle_other_localizations() end
|
||||
|
||||
-- Checks if all jokers in shop will have editions (via Curate, Edition Decks, etc.)
|
||||
-- Will cause edition tags to Nope!
|
||||
|
@ -760,3 +798,665 @@ function Cryptid.is_shiny()
|
|||
end
|
||||
return false
|
||||
end
|
||||
|
||||
--Abstracted cards
|
||||
function Cryptid.cry_enhancement_has_specific_suit(card)
|
||||
for k, _ in pairs(SMODS.get_enhancements(card)) do
|
||||
if G.P_CENTERS[k].specific_suit then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Cryptid.cry_enhancement_get_specific_suit(card)
|
||||
for k, _ in pairs(SMODS.get_enhancements(card)) do
|
||||
if G.P_CENTERS[k].specific_suit then
|
||||
return G.P_CENTERS[k].specific_suit
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function Cryptid.cry_enhancement_has_specific_rank(card)
|
||||
for k, _ in pairs(SMODS.get_enhancements(card)) do
|
||||
if G.P_CENTERS[k].specific_rank then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Cryptid.cry_enhancement_get_specific_rank(card)
|
||||
for k, _ in pairs(SMODS.get_enhancements(card)) do
|
||||
if G.P_CENTERS[k].specific_rank then
|
||||
return G.P_CENTERS[k].specific_rank
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
--For better durability (at the expense of performance), this finds the rank ID of a custom rank (such as abstract).
|
||||
function Cryptid.cry_rankname_to_id(rankname)
|
||||
for i, v in pairs(SMODS.Rank.obj_buffer) do
|
||||
if rankname == v then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
-- for buttercup
|
||||
function G.FUNCS.can_store_card(e)
|
||||
-- get shop highlighted
|
||||
-- only from the jokers spot
|
||||
local highlighted_shop_cards = {}
|
||||
local areas_to_check = {
|
||||
shop_jokers = G.shop_jokers,
|
||||
shop_vouchers = G.shop_vouchers,
|
||||
shop_booster = G.shop_booster,
|
||||
}
|
||||
local jok = e.config.ref_table
|
||||
|
||||
for key, value in pairs(areas_to_check) do
|
||||
if value == nil then
|
||||
e.config.colour = G.C.UI.BACKGROUND_INACTIVE
|
||||
e.config.button = nil
|
||||
return
|
||||
elseif #value.highlighted == 1 and #highlighted_shop_cards == 0 then
|
||||
highlighted_shop_cards[1] = value.highlighted[1]
|
||||
end
|
||||
end
|
||||
if #highlighted_shop_cards == 1 and jok:can_use_storage() then
|
||||
e.config.colour = G.C.BLUE
|
||||
e.config.button = "store_card"
|
||||
else
|
||||
e.config.colour = G.C.UI.BACKGROUND_INACTIVE
|
||||
e.config.button = nil
|
||||
end
|
||||
end
|
||||
|
||||
function G.FUNCS.store_card(e)
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "after",
|
||||
delay = 0.1,
|
||||
func = function()
|
||||
local areas_to_check = {
|
||||
shop_jokers = G.shop_jokers,
|
||||
shop_vouchers = G.shop_vouchers,
|
||||
shop_booster = G.shop_booster,
|
||||
}
|
||||
local this_card = e.config.ref_table
|
||||
-- This doesn't take into account the possibility that multiple cards might be selected in different areas
|
||||
-- but can_store_card already does that for us, so who cares tbh
|
||||
for shop_name, shop_area in pairs(areas_to_check) do
|
||||
if #shop_area.highlighted == 1 then
|
||||
local new_card = shop_area.highlighted[1]
|
||||
new_card.T.orig = { w = new_card.T.w, h = new_card.T.h }
|
||||
new_card.T.w = new_card.T.w * 0.5
|
||||
new_card.T.h = new_card.T.h * 0.5
|
||||
new_card.cry_from_shop = shop_name
|
||||
if new_card.children.price then
|
||||
new_card.children.price:remove()
|
||||
end
|
||||
new_card.children.price = nil
|
||||
if new_card.children.buy_button then
|
||||
new_card.children.buy_button:remove()
|
||||
end
|
||||
new_card.children.buy_button = nil
|
||||
shop_area:remove_card(new_card)
|
||||
this_card.cry_storage:emplace(new_card)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end,
|
||||
}))
|
||||
end
|
||||
|
||||
function Card:can_use_storage()
|
||||
if self.cry_storage ~= nil then
|
||||
return #self.cry_storage.cards < self.ability.extra.slots
|
||||
elseif self.config.center.key == "j_cry_buttercup" then -- "where did my fucking storage go"
|
||||
sendInfoMessage("creating missing card area")
|
||||
self.cry_storage = CardArea(0.5, 0.5, 1, 1, storage_area_config)
|
||||
end
|
||||
return false
|
||||
end
|
||||
function Cryptid.reset_to_none()
|
||||
update_hand_text({ delay = 0 }, {
|
||||
mult = Cryptid.ascend(G.GAME.hands["cry_None"].mult),
|
||||
chips = Cryptid.ascend(G.GAME.hands["cry_None"].chips),
|
||||
level = G.GAME.hands["cry_None"].level,
|
||||
handname = localize("cry_None", "poker_hands"),
|
||||
})
|
||||
end
|
||||
|
||||
function Card:is_food()
|
||||
--you cant really check if vanilla jokers are in a pool because its hardcoded
|
||||
--so i have to hardcode it here too for the starfruit unlock
|
||||
local food = {
|
||||
j_gros_michel = true,
|
||||
j_egg = true,
|
||||
j_ice_cream = true,
|
||||
j_cavendish = true,
|
||||
j_turtle_bean = true,
|
||||
j_diet_cola = true,
|
||||
j_popcorn = true,
|
||||
j_ramen = true,
|
||||
j_selzer = true,
|
||||
}
|
||||
if food[self.config.center.key] or Cryptid.safe_get(self.config.center, "pools", "Food") then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function Cryptid.get_highlighted_cards(areas, ignore, min, max, blacklist, seed)
|
||||
ignore.checked = true
|
||||
blacklist = blacklist or function()
|
||||
return true
|
||||
end
|
||||
local cards = {}
|
||||
for i, area in pairs(areas) do
|
||||
if area.cards then
|
||||
for i2, card in pairs(area.cards) do
|
||||
if
|
||||
card ~= ignore
|
||||
and blacklist(card)
|
||||
and (card.highlighted or G.cry_force_use)
|
||||
and not card.checked
|
||||
then
|
||||
cards[#cards + 1] = card
|
||||
card.checked = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in ipairs(cards) do
|
||||
v.checked = nil
|
||||
end
|
||||
if (#cards >= min and #cards <= max) or not G.cry_force_use then
|
||||
ignore.checked = nil
|
||||
return cards
|
||||
else
|
||||
for i, v in pairs(cards) do
|
||||
v.f_use_order = i
|
||||
end
|
||||
pseudoshuffle(cards, pseudoseed("forcehighlight" or seed))
|
||||
local actual = {}
|
||||
for i = 1, max do
|
||||
if cards[i] and not cards[i].checked and actual ~= ignore then
|
||||
actual[#actual + 1] = cards[i]
|
||||
end
|
||||
end
|
||||
table.sort(actual, function(a, b)
|
||||
return a.f_use_order < b.f_use_order
|
||||
end)
|
||||
for i, v in pairs(cards) do
|
||||
v.f_use_order = nil
|
||||
end
|
||||
ignore.checked = nil
|
||||
return actual
|
||||
end
|
||||
return {}
|
||||
end
|
||||
|
||||
function Cryptid.table_merge(...)
|
||||
local tbl = {}
|
||||
for _, t in ipairs({ ... }) do
|
||||
if type(t) == "table" then
|
||||
for _, v in pairs(t) do
|
||||
tbl[#tbl + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
return tbl
|
||||
end
|
||||
|
||||
function Cryptid.get_circus_description()
|
||||
local desc = {}
|
||||
local ind = 1
|
||||
local extra_rarities = {}
|
||||
if not Cryptid.circus_rarities then
|
||||
Cryptid.circus_rarities = {}
|
||||
end
|
||||
for i, v in pairs(Cryptid.circus_rarities) do
|
||||
if not v.hidden then
|
||||
extra_rarities[#extra_rarities + 1] = v
|
||||
end
|
||||
end
|
||||
table.sort(extra_rarities, function(a, b)
|
||||
return a.order < b.order
|
||||
end)
|
||||
for i, v in pairs(extra_rarities) do
|
||||
local rarity = v.rarity
|
||||
rarity = localize(({
|
||||
[1] = "k_common",
|
||||
[2] = "k_uncommon",
|
||||
[3] = "k_rare",
|
||||
[4] = "k_legendary",
|
||||
})[rarity] or "k_" .. rarity)
|
||||
local orig = localize("cry_circus_generic")
|
||||
orig = string.gsub(orig, "#1#", ind)
|
||||
orig = string.gsub(orig, "#2#", rarity)
|
||||
orig = string.gsub(orig, "#3#", "#" .. tostring(ind) .. "#")
|
||||
desc[#desc + 1] = orig
|
||||
ind = ind + 1
|
||||
end
|
||||
return desc
|
||||
end
|
||||
|
||||
function Cryptid.add_circus_rarity(rarity, dontreload)
|
||||
Cryptid.circus_rarities[rarity.rarity] = rarity
|
||||
if not dontreload then
|
||||
Cryptid.reload_localization()
|
||||
end
|
||||
end
|
||||
|
||||
function Cryptid.get_paved_joker()
|
||||
if G.hand then
|
||||
local total = 0
|
||||
for i, v in pairs(SMODS.find_card("j_cry_paved_joker")) do
|
||||
total = total + v.ability.extra
|
||||
end
|
||||
local stones = 0
|
||||
for i, v in pairs(G.hand.highlighted) do
|
||||
if v.config.center.key == "m_stone" then
|
||||
stones = stones + 1
|
||||
end
|
||||
end
|
||||
for i, v in pairs(G.play.cards) do
|
||||
if v.config.center.key == "m_stone" then
|
||||
stones = stones + 1
|
||||
end
|
||||
end
|
||||
total = math.min(stones, total)
|
||||
return total
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function Card:has_stickers()
|
||||
for i, v in pairs(SMODS.Sticker.obj_table) do
|
||||
if self.ability[i] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
function Card:remove_random_sticker(seed)
|
||||
local s = {}
|
||||
for i, v in pairs(SMODS.Sticker.obj_table) do
|
||||
if not v.hidden and i ~= "cry_absolute" and self.ability[i] then
|
||||
s[#s + 1] = i
|
||||
end
|
||||
end
|
||||
if #s > 0 then
|
||||
local sticker = pseudorandom_element(s, pseudoseed(seed))
|
||||
self.ability[sticker] = nil
|
||||
if sticker == "perishable" then
|
||||
self.ability.perish_tally = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function create_UIBox_class()
|
||||
return SMODS.card_collection_UIBox(G.P_CENTER_POOLS.Enhanced, { 4, 4 }, {
|
||||
no_materialize = true,
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
--infotip = localize('ml_edition_seal_enhancement_explanation'),
|
||||
hide_single_page = true,
|
||||
back_func = "exit_overlay_menu_code",
|
||||
})
|
||||
end
|
||||
|
||||
function create_UIBox_variable_code()
|
||||
local cards = {}
|
||||
local ranks = {}
|
||||
for i, v in pairs(SMODS.Ranks) do
|
||||
cards[#cards + 1] = G.P_CENTERS.c_base
|
||||
ranks[#ranks + 1] = i
|
||||
end
|
||||
table.sort(ranks, function(a, b)
|
||||
return SMODS.Ranks[a].id < SMODS.Ranks[b].id
|
||||
end)
|
||||
return SMODS.card_collection_UIBox(cards, { 5, 5, 5 }, {
|
||||
no_materialize = true,
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
--infotip = localize('ml_edition_seal_enhancement_explanation'),
|
||||
hide_single_page = true,
|
||||
back_func = "exit_overlay_menu_code",
|
||||
modify_card = function(card, center, i, j)
|
||||
SMODS.change_base(card, "Spades", ranks[(j - 1) * 5 + i])
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function create_UIBox_exploit()
|
||||
local cards = {}
|
||||
local ranks = {}
|
||||
for i, v in pairs(G.P_CENTER_POOLS.Planet) do
|
||||
if v.config.handname then
|
||||
cards[#cards + 1] = v
|
||||
end
|
||||
end
|
||||
table.sort(ranks, function(a, b)
|
||||
return G.GAME.hands[a.config.handname].order < G.GAME.hands[b.config.handname]
|
||||
end)
|
||||
return SMODS.card_collection_UIBox(cards, { 5, 5, 5 }, {
|
||||
no_materialize = true,
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
--infotip = localize('ml_edition_seal_enhancement_explanation'),
|
||||
hide_single_page = true,
|
||||
back_func = "exit_overlay_menu_code",
|
||||
})
|
||||
end
|
||||
|
||||
G.FUNCS.exit_overlay_menu_code = function(e)
|
||||
G.FUNCS.exit_overlay_menu(e)
|
||||
G.GAME.USING_CLASS = nil
|
||||
G.GAME.USING_CODE = nil
|
||||
G.GAME.USING_VARIABLE = nil
|
||||
G.GAME.USING_EXPLOIT_HAND = nil
|
||||
G.GAME.USING_EXPLOIT = nil
|
||||
G.GAME.USING_POINTER = nil
|
||||
G.GAME.POINTER_SUBMENU = nil
|
||||
G.GAME.POINTER_PLAYING = nil
|
||||
G.GAME.POINTER_COLLECTION = nil
|
||||
if
|
||||
G.GAME.CODE_DESTROY_CARD
|
||||
and G.GAME.CODE_DESTROY_CARD.ability
|
||||
and G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse
|
||||
then
|
||||
G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse = G.GAME.CODE_DESTROY_CARD.ability.cry_multiuse - 1
|
||||
elseif G.GAME.CODE_DESTROY_CARD then
|
||||
G.GAME.CODE_DESTROY_CARD:start_dissolve()
|
||||
G.GAME.CODE_DESTROY_CARD = nil
|
||||
end
|
||||
G.GAME.CODE_DESTROY_CARD = nil
|
||||
end
|
||||
|
||||
function G.UIDEF.exploit_menu()
|
||||
return create_UIBox_generic_options({
|
||||
contents = {
|
||||
create_tabs({
|
||||
tabs = {
|
||||
{
|
||||
label = localize("b_poker_hands"),
|
||||
chosen = true,
|
||||
tab_definition_function = create_UIBox_current_hands_exploit,
|
||||
},
|
||||
},
|
||||
tab_h = 8,
|
||||
snap_to_nav = true,
|
||||
}),
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
function create_UIBox_current_hands_exploit(simple)
|
||||
local ref = create_UIBox_current_hand_row
|
||||
local ret = create_UIBox_current_hands(simple)
|
||||
create_UIBox_current_hand_row = ref
|
||||
return ret
|
||||
end
|
||||
|
||||
local htref = create_UIBox_hand_tip
|
||||
function create_UIBox_hand_tip(handname)
|
||||
if G.GAME.USING_EXPLOIT then
|
||||
G.GAME.USING_EXPLOIT_HAND = handname
|
||||
end
|
||||
return htref(handname)
|
||||
end
|
||||
|
||||
local lcpref = Controller.L_cursor_press
|
||||
function Controller:L_cursor_press(x, y)
|
||||
lcpref(self, x, y)
|
||||
if G and G.GAME and G.GAME.hands and G.GAME.USING_EXPLOIT_HAND then
|
||||
if
|
||||
G.CONTROLLER.cursor_hover
|
||||
and G.CONTROLLER.cursor_hover.target
|
||||
and G.CONTROLLER.cursor_hover.target.config
|
||||
and G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip
|
||||
and G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip.filler
|
||||
and G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip.filler.args
|
||||
and G.GAME.hands[G.CONTROLLER.cursor_hover.target.config.on_demand_tooltip.filler.args]
|
||||
then
|
||||
-- Re-use the Exploit card
|
||||
if G.GAME.ACTIVE_CODE_CARD then
|
||||
if
|
||||
not G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse
|
||||
or to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) <= to_big(1)
|
||||
then
|
||||
G.GAME.ACTIVE_CODE_CARD:start_dissolve()
|
||||
else
|
||||
G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse =
|
||||
lenient_bignum(to_big(G.GAME.ACTIVE_CODE_CARD.ability.cry_multiuse) - to_big(1))
|
||||
end
|
||||
end
|
||||
G.GAME.ACTIVE_CODE_CARD = nil
|
||||
G.GAME.cry_exploit_override = G.GAME.USING_EXPLOIT_HAND
|
||||
G.FUNCS.exit_overlay_menu_code()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function create_UIBox_pointer_rank()
|
||||
G.GAME.POINTER_SUBMENU = "Rank"
|
||||
G.GAME.POINTER_PLAYING = {}
|
||||
local cards = {}
|
||||
local ranks = {}
|
||||
for i, v in pairs(SMODS.Ranks) do
|
||||
cards[#cards + 1] = G.P_CENTERS.c_base
|
||||
ranks[#ranks + 1] = i
|
||||
end
|
||||
table.sort(ranks, function(a, b)
|
||||
return SMODS.Ranks[a].id < SMODS.Ranks[b].id
|
||||
end)
|
||||
return SMODS.card_collection_UIBox(cards, { 5, 5, 5 }, {
|
||||
no_materialize = true,
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
--infotip = localize('ml_edition_seal_enhancement_explanation'),
|
||||
hide_single_page = true,
|
||||
back_func = "your_collection",
|
||||
modify_card = function(card, center, i, j)
|
||||
SMODS.change_base(card, "Spades", ranks[(j - 1) * 5 + i])
|
||||
if
|
||||
center.hidden
|
||||
or center.no_noe
|
||||
or center.no_pointer
|
||||
or center.no_code
|
||||
or center.no_variable
|
||||
or center.no_class
|
||||
then
|
||||
card.deuff = true
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function create_UIBox_pointer_suit()
|
||||
G.GAME.POINTER_SUBMENU = "Suit"
|
||||
local cards = {}
|
||||
local suits = {}
|
||||
for i, v in pairs(SMODS.Suits) do
|
||||
cards[#cards + 1] = G.P_CENTERS.c_base
|
||||
suits[#suits + 1] = i
|
||||
end
|
||||
table.sort(suits, function(a, b)
|
||||
return SMODS.Suits[a].suit_nominal < SMODS.Suits[b].suit_nominal
|
||||
end)
|
||||
return SMODS.card_collection_UIBox(cards, { 4, 4, 4 }, {
|
||||
no_materialize = true,
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
--infotip = localize('ml_edition_seal_enhancement_explanation'),
|
||||
hide_single_page = true,
|
||||
back_func = "your_collection",
|
||||
modify_card = function(card, center, i, j)
|
||||
SMODS.change_base(card, suits[(j - 1) * 4 + i], G.GAME.POINTER_PLAYING.rank)
|
||||
if
|
||||
center.hidden
|
||||
or center.no_noe
|
||||
or center.no_pointer
|
||||
or center.no_code
|
||||
or center.no_variable
|
||||
or center.no_class
|
||||
then
|
||||
card.deuff = true
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function create_UIBox_pointer_enhancement()
|
||||
G.GAME.POINTER_SUBMENU = "Enhancement"
|
||||
return create_UIBox_your_collection_enhancements_pointer()
|
||||
end
|
||||
|
||||
function create_UIBox_pointer_edition()
|
||||
G.GAME.POINTER_SUBMENU = "Edition"
|
||||
return create_UIBox_your_collection_editions_pointer()
|
||||
end
|
||||
|
||||
function create_UIBox_pointer_seal()
|
||||
G.GAME.POINTER_SUBMENU = "Seal"
|
||||
return create_UIBox_your_collection_seals_pointer()
|
||||
end
|
||||
|
||||
G.FUNCS.your_collection_create_card_rank = function(e)
|
||||
G.SETTINGS.paused = true
|
||||
G.FUNCS.overlay_menu({
|
||||
definition = create_UIBox_pointer_rank(),
|
||||
})
|
||||
end
|
||||
|
||||
create_UIBox_your_collection_enhancements_pointer = function()
|
||||
local cards = {
|
||||
G.P_CENTERS.c_base,
|
||||
}
|
||||
for i, v in pairs(G.P_CENTER_POOLS.Enhanced) do
|
||||
cards[#cards + 1] = v
|
||||
end
|
||||
return SMODS.card_collection_UIBox(cards, { 4, 4 }, {
|
||||
no_materialize = true,
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
hide_single_page = true,
|
||||
modify_card = function(card, center)
|
||||
SMODS.change_base(card, G.GAME.POINTER_PLAYING.suit, G.GAME.POINTER_PLAYING.rank)
|
||||
if
|
||||
center.hidden
|
||||
or center.no_noe
|
||||
or center.no_pointer
|
||||
or center.no_code
|
||||
or center.no_variable
|
||||
or center.no_class
|
||||
then
|
||||
card.deuff = true
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
create_UIBox_your_collection_editions_pointer = function()
|
||||
return SMODS.card_collection_UIBox(G.P_CENTER_POOLS.Edition, { 5, 5 }, {
|
||||
snap_back = true,
|
||||
h_mod = 1.03,
|
||||
hide_single_page = true,
|
||||
collapse_single_page = true,
|
||||
modify_card = function(card, center)
|
||||
if center.discovered then
|
||||
card:set_edition(center.key, true, true)
|
||||
SMODS.change_base(card, G.GAME.POINTER_PLAYING.suit, G.GAME.POINTER_PLAYING.rank)
|
||||
card:set_ability(G.P_CENTERS[G.GAME.POINTER_PLAYING.center])
|
||||
if
|
||||
center.hidden
|
||||
or center.no_noe
|
||||
or center.no_pointer
|
||||
or center.no_code
|
||||
or center.no_variable
|
||||
or center.no_class
|
||||
then
|
||||
card.deuff = true
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
create_UIBox_your_collection_seals_pointer = function()
|
||||
local cards = {
|
||||
{ key = nil },
|
||||
}
|
||||
for i, v in pairs(G.P_CENTER_POOLS.Seal) do
|
||||
cards[#cards + 1] = v
|
||||
end
|
||||
return SMODS.card_collection_UIBox(cards, { 5, 5 }, {
|
||||
snap_back = true,
|
||||
hide_single_page = true,
|
||||
collapse_single_page = true,
|
||||
center = "c_base",
|
||||
h_mod = 1.03,
|
||||
modify_card = function(card, center)
|
||||
card:set_seal(center.key, true)
|
||||
SMODS.change_base(card, G.GAME.POINTER_PLAYING.suit, G.GAME.POINTER_PLAYING.rank)
|
||||
card:set_ability(G.P_CENTERS[G.GAME.POINTER_PLAYING.center])
|
||||
card:set_edition(G.GAME.POINTER_PLAYING.edition, true, true)
|
||||
if
|
||||
center.hidden
|
||||
or center.no_noe
|
||||
or center.no_pointer
|
||||
or center.no_code
|
||||
or center.no_variable
|
||||
or center.no_class
|
||||
then
|
||||
card.deuff = true
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function Cryptid.get_next_tag(override)
|
||||
if next(SMODS.find_card("j_cry_kittyprinter")) then
|
||||
return "tag_cry_cat"
|
||||
end
|
||||
end
|
||||
|
||||
-- for Cryptid.isNonRollProbabilityContext
|
||||
local probability_contexts = {
|
||||
"mod_probability",
|
||||
"fix_probability",
|
||||
}
|
||||
|
||||
-- Checks if a context table is a probability context called outside of a roll
|
||||
function Cryptid.isNonRollProbabilityContext(context)
|
||||
for _, ctx in ipairs(probability_contexts) do
|
||||
if context[ctx] then
|
||||
return context.from_roll
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function Cryptid.nuke_decimals(number, surviving_decimals, round)
|
||||
surviving_decimals = surviving_decimals or 0
|
||||
--Set round to 0.5 to round or 0 to floor
|
||||
round = round or 0
|
||||
local aaa = 10 ^ surviving_decimals
|
||||
return math.floor(number * aaa + round) / aaa
|
||||
end
|
||||
-- "log base (x) of (y)". Pre-Calculus courses recommended
|
||||
function Cryptid.funny_log(x, y)
|
||||
return math.log(y) / math.log(x)
|
||||
end
|
||||
|
||||
local say_stuff_ref = Card_Character.say_stuff
|
||||
function Card_Character:say_stuff(n, not_first, quip_key)
|
||||
local quip = SMODS.JimboQuips[quip_key]
|
||||
if quip then
|
||||
return say_stuff_ref(self, n, not_first, quip_key)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,78 +2,195 @@
|
|||
|
||||
--Redefine these here because they're always used
|
||||
Cryptid.base_values = {}
|
||||
function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack, big)
|
||||
|
||||
Cryptid.misprintize_value_blacklist = {
|
||||
perish_tally = false,
|
||||
id = false,
|
||||
suit_nominal = false,
|
||||
base_nominal = false,
|
||||
face_nominal = false,
|
||||
qty = false,
|
||||
h_x_chips = false,
|
||||
d_size = false,
|
||||
h_size = false,
|
||||
selected_d6_face = false,
|
||||
cry_hook_id = false,
|
||||
colour = false,
|
||||
suit_nominal_original = false,
|
||||
times_played = false,
|
||||
-- TARGET: Misprintize Value Blacklist (format: key = false, )
|
||||
}
|
||||
Cryptid.misprintize_bignum_blacklist = {
|
||||
odds = false,
|
||||
cry_prob = false,
|
||||
--nominal = false,
|
||||
}
|
||||
|
||||
function Cryptid.calculate_misprint(initial, min, max, grow_type, pow_level)
|
||||
local big_initial = (type(initial) ~= "table" and to_big(initial)) or initial
|
||||
local big_min = (type(min) ~= "table" and to_big(min)) or min
|
||||
local big_max = (type(max) ~= "table" and to_big(max)) or max
|
||||
|
||||
local grow = Cryptid.log_random(pseudoseed("cry_misprint" .. G.GAME.round_resets.ante), big_min, big_max)
|
||||
|
||||
local calc = big_initial
|
||||
if not grow_type then
|
||||
calc = calc * grow
|
||||
elseif grow_type == "+" then
|
||||
calc = calc + grow
|
||||
elseif grow_type == "-" then
|
||||
calc = calc - grow
|
||||
elseif grow_type == "/" then
|
||||
calc = calc / grow
|
||||
elseif grow_type == "^" then
|
||||
pow_level = pow_level or 1
|
||||
if pow_level == 1 then
|
||||
calc = calc ^ grow
|
||||
else
|
||||
local function hyper(level, base, height)
|
||||
local big_base = (type(base) ~= "table" and to_big(base)) or base
|
||||
local big_height = (type(height) ~= "table" and to_big(height)) or height
|
||||
|
||||
if height == 1 then
|
||||
return big_base
|
||||
elseif level == 1 then
|
||||
return big_base ^ big_height
|
||||
else
|
||||
local inner = hyper(level, base, height - 1)
|
||||
return hyper(level - 1, base, inner)
|
||||
end
|
||||
end
|
||||
|
||||
calc = hyper(pow_level, calc, grow)
|
||||
end
|
||||
end
|
||||
|
||||
if calc > to_big(-1e100) and calc < to_big(1e100) then
|
||||
calc = to_number(calc)
|
||||
end
|
||||
|
||||
return calc
|
||||
end
|
||||
|
||||
function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack, big, grow_type, pow_level)
|
||||
local prob_max = 1e69 -- funny number
|
||||
local max_slots = 100
|
||||
local max_booster_slots = 25
|
||||
|
||||
local function num_too_big(initial, min, max, limit)
|
||||
return (
|
||||
to_big(initial) > to_big(limit)
|
||||
or (min and to_big(initial) * min > to_big(limit))
|
||||
or (max and to_big(initial) * max > to_big(limit))
|
||||
)
|
||||
end
|
||||
|
||||
if name and ref_tbl and ref_value then
|
||||
tbl = Cryptid.deep_copy(ref_tbl[ref_value])
|
||||
local tbl = Cryptid.deep_copy(ref_tbl[ref_value])
|
||||
|
||||
local function can_misprintize_value(k, v)
|
||||
if
|
||||
(k == "x_mult" and v == 1 and not tbl.override_x_mult_check)
|
||||
or (k == "x_chips" and v == 1 and not tbl.override_x_chips_check)
|
||||
then
|
||||
return false
|
||||
end
|
||||
for key, val in pairs(Cryptid.misprintize_value_blacklist) do
|
||||
if tostring(k) == tostring(key) then
|
||||
return val
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
for k, v in pairs(tbl) do
|
||||
if (type(tbl[k]) ~= "table") or is_number(tbl[k]) then
|
||||
if
|
||||
is_number(tbl[k])
|
||||
and not (k == "perish_tally")
|
||||
and not (k == "id")
|
||||
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.override_x_mult_check)
|
||||
and not (k == "x_chips" and v == 1 and not tbl.override_x_chips_check)
|
||||
and not (k == "h_x_chips")
|
||||
and not (k == "selected_d6_face")
|
||||
then --Temp fix, even if I did clamp the number to values that wouldn't crash the game, the fact that it did get randomized means that there's a higher chance for 1 or 6 than other values
|
||||
if is_number(tbl[k]) and can_misprintize_value(k, tbl[k]) then
|
||||
if not Cryptid.base_values[name] then
|
||||
Cryptid.base_values[name] = {}
|
||||
end
|
||||
if not Cryptid.base_values[name][k] then
|
||||
Cryptid.base_values[name][k] = tbl[k]
|
||||
if not Cryptid.base_values[name][k .. ref_value] then
|
||||
Cryptid.base_values[name][k .. ref_value] = tbl[k]
|
||||
end
|
||||
local initial = (stack and tbl[k] or Cryptid.base_values[name][k .. ref_value])
|
||||
local min = override and override.min or G.GAME.modifiers.cry_misprint_min
|
||||
local max = override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
|
||||
if
|
||||
(
|
||||
k == "cry_prob"
|
||||
-- Hack for vanilla jokers that use the extra field to describe their odds
|
||||
or (
|
||||
(
|
||||
name == "j_8_ball"
|
||||
or name == "j_business"
|
||||
or name == "j_space"
|
||||
or name == "j_hallucination"
|
||||
) and k == "extra"
|
||||
)
|
||||
) and num_too_big(initial, min, max, prob_max)
|
||||
then
|
||||
initial = Cryptid.base_values[name][k .. ref_value] * prob_max
|
||||
min = 1
|
||||
max = 1
|
||||
end
|
||||
|
||||
tbl[k] = Cryptid.sanity_check(
|
||||
clear and Cryptid.base_values[name][k]
|
||||
or cry_format(
|
||||
(stack and tbl[k] or Cryptid.base_values[name][k])
|
||||
* Cryptid.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"
|
||||
),
|
||||
clear and Cryptid.base_values[name][k .. ref_value]
|
||||
or cry_format(Cryptid.calculate_misprint(initial, min, max, grow_type, pow_level), "%.2g"),
|
||||
big
|
||||
)
|
||||
end
|
||||
elseif not (k == "immutable") then
|
||||
elseif not (k == "immutable") and not (k == "colour") then
|
||||
for _k, _v in pairs(tbl[k]) do
|
||||
if
|
||||
is_number(tbl[k][_k])
|
||||
and not (_k == "id")
|
||||
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 == "x_chips" and v == 1 and not tbl[k].override_x_chips_check)
|
||||
and not (k == "h_x_chips")
|
||||
and not (_k == "selected_d6_face")
|
||||
then --Refer to above
|
||||
if is_number(tbl[k][_k]) and can_misprintize_value(_k, tbl[k][_k]) then
|
||||
if not Cryptid.base_values[name] then
|
||||
Cryptid.base_values[name] = {}
|
||||
end
|
||||
if not Cryptid.base_values[name][k] then
|
||||
Cryptid.base_values[name][k] = {}
|
||||
if not Cryptid.base_values[name][_k .. k] then
|
||||
if
|
||||
G.P_CENTERS[name]
|
||||
and type(G.P_CENTERS[name].config[k]) == "table"
|
||||
and G.P_CENTERS[name].config[k][_k]
|
||||
then
|
||||
Cryptid.base_values[name][_k .. k] = G.P_CENTERS[name].config[k][_k]
|
||||
else
|
||||
Cryptid.base_values[name][_k .. k] = tbl[k][_k]
|
||||
end
|
||||
if not Cryptid.base_values[name][k][_k] then
|
||||
Cryptid.base_values[name][k][_k] = tbl[k][_k]
|
||||
end
|
||||
|
||||
local initial = (stack and tbl[k][_k] or Cryptid.base_values[name][_k .. k])
|
||||
local min = override and override.min or G.GAME.modifiers.cry_misprint_min
|
||||
local max = override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
|
||||
if (_k == "odds") and num_too_big(initial, min, max, prob_max) then
|
||||
initial = Cryptid.base_values[name][_k .. k] * prob_max
|
||||
min = 1
|
||||
max = 1
|
||||
end
|
||||
|
||||
if
|
||||
(_k == "slots" and (name == "j_cry_tenebris" or name == "j_cry_negative"))
|
||||
and num_too_big(initial, min, max, max_slots)
|
||||
then
|
||||
initial = max_slots
|
||||
min = 1
|
||||
max = 1
|
||||
end
|
||||
|
||||
if
|
||||
(_k == "booster_slots" and (name == "j_cry_booster"))
|
||||
and num_too_big(initial, min, max, max_booster_slots)
|
||||
then
|
||||
initial = max_booster_slots
|
||||
min = 1
|
||||
max = 1
|
||||
end
|
||||
|
||||
tbl[k][_k] = Cryptid.sanity_check(
|
||||
clear and Cryptid.base_values[name][k][_k]
|
||||
clear and Cryptid.base_values[name][_k .. k]
|
||||
or cry_format(
|
||||
(stack and tbl[k][_k] or Cryptid.base_values[name][k][_k])
|
||||
* Cryptid.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
|
||||
),
|
||||
Cryptid.calculate_misprint(initial, min, max, grow_type, pow_level),
|
||||
"%.2g"
|
||||
),
|
||||
big
|
||||
|
@ -85,15 +202,16 @@ function Cryptid.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stac
|
|||
ref_tbl[ref_value] = tbl
|
||||
end
|
||||
end
|
||||
function Cryptid.misprintize_val(val, override, big)
|
||||
function Cryptid.misprintize_val(val, override, big, grow_type, pow_level)
|
||||
if is_number(val) then
|
||||
val = Cryptid.sanity_check(
|
||||
cry_format(
|
||||
val
|
||||
* Cryptid.log_random(
|
||||
pseudoseed("cry_misprint" .. G.GAME.round_resets.ante),
|
||||
Cryptid.calculate_misprint(
|
||||
val,
|
||||
override and override.min or G.GAME.modifiers.cry_misprint_min,
|
||||
override and override.max or G.GAME.modifiers.cry_misprint_max
|
||||
override and override.max or G.GAME.modifiers.cry_misprint_max,
|
||||
grow_type,
|
||||
pow_level
|
||||
),
|
||||
"%.2g"
|
||||
),
|
||||
|
@ -117,9 +235,19 @@ function Cryptid.sanity_check(val, is_big)
|
|||
if not val or type(val) == "number" and (val ~= val or val > 1e300 or val < -1e300) then
|
||||
return 1e300
|
||||
end
|
||||
if type(val) == "table" then
|
||||
if val > to_big(1e300) then
|
||||
return 1e300
|
||||
end
|
||||
if val < to_big(-1e300) then
|
||||
return -1e300
|
||||
end
|
||||
return to_number(val)
|
||||
end
|
||||
return val
|
||||
end
|
||||
function Cryptid.misprintize(card, override, force_reset, stack)
|
||||
function Cryptid.misprintize(card, override, force_reset, stack, grow_type, pow_level)
|
||||
local clamps = card.config.center.misprintize_caps or {}
|
||||
if Card.no(card, "immutable", true) then
|
||||
force_reset = true
|
||||
end
|
||||
|
@ -127,7 +255,7 @@ function Cryptid.misprintize(card, override, force_reset, stack)
|
|||
if card.infinifusion then
|
||||
if card.config.center == card.infinifusion_center or card.config.center.key == "j_infus_fused" then
|
||||
calculate_infinifusion(card, nil, function(i)
|
||||
Cryptid.misprintize(card, override, force_reset, stack)
|
||||
Cryptid.misprintize(card, override, force_reset, stack, grow_type, pow_level)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
@ -137,9 +265,6 @@ function Cryptid.misprintize(card, override, force_reset, stack)
|
|||
and not stack
|
||||
or not Card.no(card, "immutable", true)
|
||||
then
|
||||
if card.ability.name == "Ace Aequilibrium" then
|
||||
return
|
||||
end
|
||||
if G.GAME.modifiers.cry_jkr_misprint_mod and card.ability.set == "Joker" then
|
||||
if not override then
|
||||
override = {}
|
||||
|
@ -157,7 +282,9 @@ function Cryptid.misprintize(card, override, force_reset, stack)
|
|||
nil,
|
||||
override,
|
||||
stack,
|
||||
Cryptid.is_card_big(card)
|
||||
Cryptid.is_card_big(card),
|
||||
grow_type,
|
||||
pow_level
|
||||
)
|
||||
if card.base then
|
||||
Cryptid.misprintize_tbl(
|
||||
|
@ -167,7 +294,9 @@ function Cryptid.misprintize(card, override, force_reset, stack)
|
|||
nil,
|
||||
override,
|
||||
stack,
|
||||
Cryptid.is_card_big(card)
|
||||
Cryptid.is_card_big(card),
|
||||
grow_type,
|
||||
pow_level
|
||||
)
|
||||
end
|
||||
end
|
||||
|
@ -182,7 +311,41 @@ function Cryptid.misprintize(card, override, force_reset, stack)
|
|||
card:set_cost()
|
||||
end
|
||||
else
|
||||
Cryptid.misprintize_tbl(card.config.center_key, card, "ability", true, nil, nil, Cryptid.is_card_big(card))
|
||||
Cryptid.misprintize_tbl(
|
||||
card.config.center_key,
|
||||
card,
|
||||
"ability",
|
||||
true,
|
||||
nil,
|
||||
nil,
|
||||
Cryptid.is_card_big(card),
|
||||
grow_type,
|
||||
pow_level
|
||||
)
|
||||
end
|
||||
if clamps then
|
||||
for i, v in pairs(clamps) do
|
||||
if type(v) == "table" and not v.tetrate then
|
||||
for i2, v2 in pairs(v) do
|
||||
if to_big(card.ability[i][i2]) > to_big(v2) then
|
||||
card.ability[i][i2] = Cryptid.sanity_check(v2, Cryptid.is_card_big(card))
|
||||
if
|
||||
to_big(card.ability[i][i2]) > to_big(-1e100)
|
||||
or to_big(card.ability[i][i2]) < to_big(1e100)
|
||||
then
|
||||
card.ability[i][i2] = to_number(card.ability[i][i2])
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif (type(v) == "table" and v.tetrate) or type(v) == "number" then
|
||||
if to_big(card.ability[i]) > to_big(v) then
|
||||
card.ability[i] = Cryptid.sanity_check(v, Cryptid.is_card_big(card))
|
||||
if to_big(card.ability[i]) > to_big(-1e100) or to_big(card.ability[i]) < to_big(1e100) then
|
||||
card.ability[i] = to_number(card.ability[i])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if card.ability.consumeable then
|
||||
for k, v in pairs(card.ability.consumeable) do
|
||||
|
@ -223,3 +386,187 @@ function Card:get_nominal(mod)
|
|||
+ 10 * self.base.face_nominal * rank_mult
|
||||
+ 0.000001 * self.unique_val
|
||||
end
|
||||
|
||||
function Cryptid.manipulate(card, args)
|
||||
if not Card.no(card, "immutable", true) or (args and args.bypass_checks) then
|
||||
if not args then
|
||||
return Cryptid.manipulate(card, {
|
||||
min = (G.GAME.modifiers.cry_misprint_min or 1) * (G.GAME.modifiers.cry_jkr_misprint_mod or 1),
|
||||
max = (G.GAME.modifiers.cry_misprint_max or 1) * (G.GAME.modifiers.cry_jkr_misprint_mod or 1),
|
||||
type = "X",
|
||||
dont_stack = true,
|
||||
no_deck_effects = true,
|
||||
})
|
||||
else
|
||||
local func = function(card)
|
||||
if not args.type then
|
||||
args.type = "X"
|
||||
end
|
||||
--hardcoded whatever
|
||||
if card.config.center.set == "Booster" then
|
||||
args.big = false
|
||||
end
|
||||
local caps = card.config.center.misprintize_caps or {}
|
||||
if card.infinifusion then
|
||||
if card.config.center == card.infinifusion_center or card.config.center.key == "j_infus_fused" then
|
||||
calculate_infinifusion(card, nil, function(i)
|
||||
Cryptid.manipulate(card, args)
|
||||
end)
|
||||
end
|
||||
end
|
||||
Cryptid.manipulate_table(card, card, "ability", args)
|
||||
if card.base then
|
||||
Cryptid.manipulate_table(card, card, "base", args)
|
||||
end
|
||||
if G.GAME.modifiers.cry_misprint_min then
|
||||
--card.cost = cry_format(card.cost / Cryptid.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),"%.2f")
|
||||
card.misprint_cost_fac = 1
|
||||
/ Cryptid.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
|
||||
)
|
||||
card:set_cost()
|
||||
end
|
||||
if caps then
|
||||
for i, v in pairs(caps) do
|
||||
if type(v) == "table" and not v.tetrate then
|
||||
for i2, v2 in pairs(v) do
|
||||
if to_big(card.ability[i][i2]) > to_big(v2) then
|
||||
card.ability[i][i2] = Cryptid.sanity_check(v2, Cryptid.is_card_big(card))
|
||||
end
|
||||
end
|
||||
elseif (type(v) == "table" and v.tetrate) or type(v) == "number" then
|
||||
if to_big(card.ability[i]) > to_big(v) then
|
||||
card.ability[i] = Cryptid.sanity_check(v, Cryptid.is_card_big(card))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local config = copy_table(card.config.center.config)
|
||||
if not Cryptid.base_values[card.config.center.key] then
|
||||
Cryptid.base_values[card.config.center.key] = {}
|
||||
for i, v in pairs(config) do
|
||||
if (type(v) == "table" and v.tetrate) or type(v) == "number" and to_big(v) ~= to_big(0) then
|
||||
Cryptid.base_values[card.config.center.key][i .. "ability"] = v
|
||||
elseif type(v) == "table" then
|
||||
for i2, v2 in pairs(v) do
|
||||
Cryptid.base_values[card.config.center.key][i2 .. i] = v2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not args.bypass_checks and not args.no_deck_effects then
|
||||
Cryptid.with_deck_effects(card, func)
|
||||
else
|
||||
func(card)
|
||||
end
|
||||
if card.ability.consumeable then
|
||||
for k, v in pairs(card.ability.consumeable) do
|
||||
card.ability.consumeable[k] = Cryptid.deep_copy(card.ability[k])
|
||||
end
|
||||
end
|
||||
--ew ew ew ew
|
||||
G.P_CENTERS[card.config.center.key].config = config
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function Cryptid.manipulate_table(card, ref_table, ref_value, args, tblkey)
|
||||
if ref_value == "consumeable" then
|
||||
return
|
||||
end
|
||||
for i, v in pairs(ref_table[ref_value]) do
|
||||
if
|
||||
(type(v) == "number" or (type(v) == "table" and v.tetrate))
|
||||
and Cryptid.misprintize_value_blacklist[i] ~= false
|
||||
then
|
||||
local num = v
|
||||
if args.dont_stack then
|
||||
if
|
||||
Cryptid.base_values[card.config.center.key]
|
||||
and (
|
||||
Cryptid.base_values[card.config.center.key][i .. ref_value]
|
||||
or (ref_value == "ability" and Cryptid.base_values[card.config.center.key][i .. "consumeable"])
|
||||
)
|
||||
then
|
||||
num = Cryptid.base_values[card.config.center.key][i .. ref_value]
|
||||
or Cryptid.base_values[card.config.center.key][i .. "consumeable"]
|
||||
end
|
||||
end
|
||||
if args.big ~= nil then
|
||||
ref_table[ref_value][i] = Cryptid.manipulate_value(num, args, args.big, i)
|
||||
else
|
||||
ref_table[ref_value][i] = Cryptid.manipulate_value(num, args, Cryptid.is_card_big(card), i)
|
||||
end
|
||||
elseif i ~= "immutable" and type(v) == "table" and Cryptid.misprintize_value_blacklist[i] ~= false then
|
||||
Cryptid.manipulate_table(card, ref_table[ref_value], i, args)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Cryptid.manipulate_value(num, args, is_big, name)
|
||||
if args.func then
|
||||
num = args.func(num, args, is_big, name)
|
||||
else
|
||||
if args.min and args.max then
|
||||
local new_args = args
|
||||
local big_min = to_big(args.min)
|
||||
local big_max = to_big(args.max)
|
||||
local new_value = Cryptid.log_random(
|
||||
pseudoseed(args.seed or ("cry_misprint" .. G.GAME.round_resets.ante)),
|
||||
big_min,
|
||||
big_max
|
||||
)
|
||||
if args.type == "+" then
|
||||
if to_big(num) ~= to_big(0) and to_big(num) ~= to_big(1) then
|
||||
num = num + new_value
|
||||
end
|
||||
elseif args.type == "X" then
|
||||
if
|
||||
to_big(num) ~= to_big(0) and (to_big(num) ~= to_big(1) or (name ~= "x_chips" and name ~= "x_mult"))
|
||||
then
|
||||
num = num * new_value
|
||||
end
|
||||
elseif args.type == "^" then
|
||||
num = to_big(num) ^ new_value
|
||||
elseif args.type == "hyper" then
|
||||
if to_big(num) ~= to_big(0) and to_big(num) ~= to_big(1) then
|
||||
num = to_big(num):arrow(args.value.arrows, to_big(new_value))
|
||||
end
|
||||
end
|
||||
elseif args.value then
|
||||
if args.type == "+" then
|
||||
if to_big(num) ~= to_big(0) and to_big(num) ~= to_big(1) then
|
||||
num = num + to_big(args.value)
|
||||
end
|
||||
elseif args.type == "X" then
|
||||
if
|
||||
to_big(num) ~= to_big(0) and (to_big(num) ~= to_big(1) or (name ~= "x_chips" and name ~= "x_mult"))
|
||||
then
|
||||
num = num * args.value
|
||||
end
|
||||
elseif args.type == "^" then
|
||||
num = to_big(num) ^ args.value
|
||||
elseif args.type == "hyper" then
|
||||
num = to_big(num):arrow(args.value.arrows, to_big(args.value.height))
|
||||
end
|
||||
end
|
||||
end
|
||||
if Cryptid.misprintize_bignum_blacklist[name] == false then
|
||||
num = to_number(num)
|
||||
return to_number(Cryptid.sanity_check(num, false))
|
||||
end
|
||||
local val = Cryptid.sanity_check(num, is_big)
|
||||
if to_big(val) > to_big(-1e100) and to_big(val) < to_big(1e100) then
|
||||
return to_number(val)
|
||||
end
|
||||
return val
|
||||
end
|
||||
|
||||
local get_nominalref = Card.get_nominal
|
||||
function Card:get_nominal(...)
|
||||
return to_number(get_nominalref(self, ...))
|
||||
end
|
||||
|
|
|
@ -318,14 +318,7 @@ function Card:update(dt)
|
|||
if self.flipping == "f2b" then
|
||||
self.flipping = "b2f"
|
||||
end
|
||||
self:dbl_side_flip()
|
||||
end
|
||||
if self.ability.cry_absolute then -- feedback loop... may be problematic
|
||||
self.cry_absolute = true
|
||||
end
|
||||
if self.cry_absolute then
|
||||
self.ability.cry_absolute = true
|
||||
self.ability.eternal = true
|
||||
self:flip_side()
|
||||
end
|
||||
if self.ability.pinned then
|
||||
self.pinned = true
|
||||
|
@ -395,7 +388,7 @@ function cry_best_interest_cap()
|
|||
}
|
||||
for _, table in ipairs(vouchers) do
|
||||
for i, v in ipairs(table) do
|
||||
if v.ability.extra >= best then
|
||||
if to_big(v.ability.extra) >= to_big(best) then
|
||||
best = v.ability.extra
|
||||
end
|
||||
end
|
||||
|
@ -407,6 +400,7 @@ G.FUNCS.evaluate_round = function()
|
|||
G.GAME.interest_cap = cry_best_interest_cap() -- blehhhhhh
|
||||
--Semicolon Stuff
|
||||
if G.GAME.current_round.semicolon then
|
||||
G.GAME.saved_text = ";"
|
||||
add_round_eval_row({ dollars = 0, name = "blind1", pitch = 0.95, saved = true })
|
||||
G.E_MANAGER:add_event(Event({
|
||||
trigger = "before",
|
||||
|
@ -578,7 +572,7 @@ function Card:set_eternal(_eternal)
|
|||
end
|
||||
function Card:calculate_banana()
|
||||
if not self.ability.extinct then
|
||||
if self.ability.banana and (pseudorandom("banana") < G.GAME.probabilities.normal / 10) then
|
||||
if self.ability.banana and SMODS.pseudorandom_probability(self, "banana", 1, 10, "Banana Sticker") then
|
||||
self.ability.extinct = true
|
||||
G.E_MANAGER:add_event(Event({
|
||||
func = function()
|
||||
|
@ -676,6 +670,16 @@ SMODS.Sticker:take_ownership("eternal", {
|
|||
return { key = "cry_eternal_booster" }
|
||||
end
|
||||
end,
|
||||
draw = function(self, card)
|
||||
local notilt = nil
|
||||
if card.area and card.area.config.type == "deck" then
|
||||
notilt = true
|
||||
end
|
||||
if not card.ability.cry_absolute then
|
||||
G.shared_stickers[self.key].role.draw_major = card
|
||||
G.shared_stickers[self.key]:draw_shader("dissolve", nil, nil, notilt, card.children.center)
|
||||
end
|
||||
end,
|
||||
})
|
||||
SMODS.Sticker:take_ownership("rental", {
|
||||
loc_vars = function(self, info_queue, card)
|
||||
|
@ -713,13 +717,16 @@ SMODS.Sticker({
|
|||
should_apply = false,
|
||||
loc_vars = function(self, info_queue, card)
|
||||
if card.ability.consumeable then
|
||||
return { key = "cry_banana_consumeable", vars = { G.GAME.probabilities.normal or 1, 4 } }
|
||||
return {
|
||||
key = "cry_banana_consumeable",
|
||||
vars = { SMODS.get_probability_vars(card, 1, 4, "Banana Sticker") },
|
||||
}
|
||||
elseif card.ability.set == "Voucher" then
|
||||
return { key = "cry_banana_voucher", vars = { G.GAME.probabilities.normal or 1, 12 } }
|
||||
return { key = "cry_banana_voucher", vars = { SMODS.get_probability_vars(card, 1, 12, "Banana Sticker") } }
|
||||
elseif card.ability.set == "Booster" then
|
||||
return { key = "cry_banana_booster" }
|
||||
else
|
||||
return { vars = { G.GAME.probabilities.normal or 1, 10 } }
|
||||
return { vars = { SMODS.get_probability_vars(card, 1, 10, "Banana Sticker") } }
|
||||
end
|
||||
end,
|
||||
calculate = function(self, card, context)
|
||||
|
@ -730,7 +737,15 @@ SMODS.Sticker({
|
|||
and not context.individual
|
||||
then
|
||||
if card.ability.set == "Voucher" then
|
||||
if pseudorandom("byebyevoucher") < G.GAME.probabilities.normal / G.GAME.cry_voucher_banana_odds then
|
||||
if
|
||||
SMODS.pseudorandom_probability(
|
||||
card,
|
||||
"byebyevoucher",
|
||||
1,
|
||||
G.GAME.cry_voucher_banana_odds,
|
||||
"Banana Sticker"
|
||||
)
|
||||
then
|
||||
local area
|
||||
if G.STATE == G.STATES.HAND_PLAYED then
|
||||
if not G.redeemed_vouchers_during_hand then
|
||||
|
@ -873,53 +888,33 @@ function G.UIDEF.used_vouchers()
|
|||
{ n = G.UIT.R, config = { align = "cm", padding = 0, no_fill = true }, nodes = voucher_tables }
|
||||
)
|
||||
|
||||
local t = silent
|
||||
and {
|
||||
n = G.UIT.ROOT,
|
||||
config = { align = "cm", colour = G.C.CLEAR },
|
||||
nodes = {
|
||||
|
||||
-- tarot/planet acclimator sliders
|
||||
next(SMODS.find_card("v_cry_tacclimator"))
|
||||
and {
|
||||
-- Code by IcyEthics: Generates sliders dynamically
|
||||
local cryptid_voucher_nodes = {}
|
||||
if silent then
|
||||
for i, _info in ipairs(Cryptid.voucher_acclimator_data) do
|
||||
if next(SMODS.find_card(_info.voucher_key)) then
|
||||
cryptid_voucher_nodes[#cryptid_voucher_nodes + 1] = {
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm" },
|
||||
nodes = {
|
||||
create_slider({
|
||||
label = localize("b_tarot_rate"),
|
||||
label = localize(_info.localization_key),
|
||||
label_scale = 0.4,
|
||||
text_scale = 0.3,
|
||||
w = 4,
|
||||
h = 0.4,
|
||||
ref_table = G.GAME.cry_percrate,
|
||||
ref_value = "tarot",
|
||||
colour = G.C.SECONDARY_SET.Tarot,
|
||||
ref_value = _info.ref_value,
|
||||
colour = _info.colour,
|
||||
min = 0,
|
||||
max = 100,
|
||||
}),
|
||||
},
|
||||
}
|
||||
or nil,
|
||||
next(SMODS.find_card("v_cry_pacclimator")) and {
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm" },
|
||||
nodes = {
|
||||
create_slider({
|
||||
label = localize("b_planet_rate"),
|
||||
label_scale = 0.4,
|
||||
text_scale = 0.3,
|
||||
w = 4,
|
||||
h = 0.4,
|
||||
ref_table = G.GAME.cry_percrate,
|
||||
ref_value = "planet",
|
||||
colour = G.C.SECONDARY_SET.Planet,
|
||||
min = 0,
|
||||
max = 100,
|
||||
}),
|
||||
},
|
||||
} or nil,
|
||||
end
|
||||
end
|
||||
|
||||
{
|
||||
cryptid_voucher_nodes[#cryptid_voucher_nodes + 1] = {
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm" },
|
||||
nodes = {
|
||||
|
@ -935,16 +930,28 @@ function G.UIDEF.used_vouchers()
|
|||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{ n = G.UIT.R, config = { align = "cm", minh = 0.5 }, nodes = {} },
|
||||
{
|
||||
}
|
||||
|
||||
cryptid_voucher_nodes[#cryptid_voucher_nodes + 1] = {
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm", minh = 0.5 },
|
||||
nodes = {},
|
||||
}
|
||||
|
||||
cryptid_voucher_nodes[#cryptid_voucher_nodes + 1] = {
|
||||
n = G.UIT.R,
|
||||
config = { align = "cm", colour = G.C.BLACK, r = 1, padding = 0.15, emboss = 0.05 },
|
||||
nodes = {
|
||||
{ n = G.UIT.R, config = { align = "cm" }, nodes = voucher_table_rows },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
local t = silent
|
||||
and {
|
||||
n = G.UIT.ROOT,
|
||||
config = { align = "cm", colour = G.C.CLEAR },
|
||||
nodes = cryptid_voucher_nodes,
|
||||
}
|
||||
or {
|
||||
n = G.UIT.ROOT,
|
||||
|
|
193
Cryptid/lib/pointerlib.lua
Normal file
|
@ -0,0 +1,193 @@
|
|||
-- if it works, it works
|
||||
Cryptid.pointerblist = {}
|
||||
Cryptid.pointerblisttype = {}
|
||||
Cryptid.pointeralias = {}
|
||||
|
||||
function Cryptid.pointerblistify(target, remove) -- Add specific joker to blacklist, must input either a card object or a key as string, eg:
|
||||
if not Cryptid.pointerblist then
|
||||
Cryptid.pointerblist = {}
|
||||
end
|
||||
if not remove then
|
||||
Cryptid.pointerblist[#Cryptid.pointerblist + 1] = target
|
||||
return true
|
||||
else
|
||||
for i = 1, #Cryptid.pointerblist do
|
||||
if Cryptid.pointerblist[i] == target then
|
||||
table.remove(Cryptid.pointerblisttype, i)
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Cryptid.pointeraliasify(target, key, remove) -- Add a specific alias/key combo to the alias list
|
||||
if type(key) == "string" then
|
||||
if string.len(key) ~= 1 then
|
||||
key = string.lower(key:gsub("%b{}", ""):gsub("%s+", ""))
|
||||
end
|
||||
if not remove then
|
||||
Cryptid.pointeralias[key] = target
|
||||
return true
|
||||
else
|
||||
Cryptid.pointeralias[key] = nil
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Cryptid.pointerblistifytype(target, key, remove) -- eg: blacklists a certain card value, see pointer.lua
|
||||
if not remove then
|
||||
for target1, key1 in pairs(Cryptid.pointerblisttype) do
|
||||
if target1 == target then
|
||||
for _, key2 in ipairs(Cryptid.pointerblisttype[target]) do
|
||||
if key2 == key then
|
||||
return true
|
||||
end
|
||||
end
|
||||
Cryptid.pointerblisttype[target][(#Cryptid.pointerblisttype[target] + 1)] = key
|
||||
return true
|
||||
end
|
||||
end
|
||||
if not Cryptid.pointerblisttype[target] then
|
||||
Cryptid.pointerblisttype[target] = {}
|
||||
end
|
||||
Cryptid.pointerblisttype[target][1] = key
|
||||
return true
|
||||
else
|
||||
if Cryptid.pointerblisttype[target] then
|
||||
for index, value in ipairs(Cryptid.pointerblisttype[target]) do
|
||||
if key == value then
|
||||
table.remove(Cryptid.pointerblisttype[target], index)
|
||||
return true
|
||||
end
|
||||
end
|
||||
if key == nil then
|
||||
Cryptid.pointerblisttype[target] = nil
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Cryptid.pointergetalias(target) -- "Is this alias legit?"
|
||||
target = tostring(target)
|
||||
local function apply_lower(strn)
|
||||
if type(strn) ~= string then -- safety
|
||||
strn = tostring(strn)
|
||||
end
|
||||
-- Remove content within {} and any remaining spaces
|
||||
strn = strn:gsub("%b{}", ""):gsub("%s+", "")
|
||||
--this weirdness allows you to get m and M separately
|
||||
if string.len(strn) == 1 then
|
||||
return strn
|
||||
end
|
||||
return string.lower(strn)
|
||||
end
|
||||
if Cryptid.pointeralias[apply_lower(target)] then
|
||||
return Cryptid.pointeralias[apply_lower(target)]
|
||||
end
|
||||
if G.P_CENTERS[apply_lower(target)] then
|
||||
return G.P_CENTERS[apply_lower(target)].key
|
||||
end
|
||||
if Cryptid.pointeralias[target] then
|
||||
return Cryptid.pointeralias[target]
|
||||
end
|
||||
if G.P_CENTERS[target] then
|
||||
return G.P_CENTERS[target].key
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function Cryptid.pointergetblist(target) -- "Is this card pointer banned?"
|
||||
target = Cryptid.pointergetalias(target) or target
|
||||
target = target
|
||||
results = {}
|
||||
results[1] = false
|
||||
if not target then
|
||||
results[1] = true
|
||||
end
|
||||
if G.GAME.banned_keys[target] or (type(target) == "table" and G.GAME.banned_keys[target.key]) then
|
||||
results[1] = true
|
||||
end
|
||||
for index, value in ipairs(Cryptid.pointerblist) do
|
||||
if target == value or (type(target) == "table" and target.key) then
|
||||
results[1] = true
|
||||
end
|
||||
end
|
||||
if results[1] ~= true and (G.P_CENTERS[target] or (type(target) == "table" and G.P_CENTERS[target.key])) then
|
||||
target = (G.P_CENTERS[target] or (type(target) == "table" and G.P_CENTERS[target.key]))
|
||||
for value, power in pairs(Cryptid.pointerblisttype) do
|
||||
for index, val2 in pairs(target) do
|
||||
if value == index then
|
||||
if power == ({} or true or nil) then
|
||||
results[1] = true
|
||||
end
|
||||
for _, val3 in ipairs(power) do
|
||||
if target[index] == val3 then
|
||||
results[1] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if G.DEBUG_POINTER then
|
||||
results[1] = false
|
||||
end
|
||||
target = G.P_CENTERS[target] or target
|
||||
if results[1] == false then
|
||||
if target and target.set == "Joker" then
|
||||
results[2] = "Joker"
|
||||
if
|
||||
target.unlocked -- If card unlocked
|
||||
and #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit -- and you have room
|
||||
then
|
||||
results[3] = true
|
||||
elseif G.DEBUG_POINTER then
|
||||
results[3] = true
|
||||
else
|
||||
results[3] = false
|
||||
end
|
||||
elseif target and target.consumeable then
|
||||
results[2] = "Consumeable"
|
||||
if #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then
|
||||
results[3] = true
|
||||
elseif G.DEBUG_POINTER then
|
||||
results[3] = true
|
||||
else
|
||||
results[3] = false
|
||||
end
|
||||
elseif target and target.set == "Voucher" then
|
||||
results[2] = "Voucher"
|
||||
if target.unlocked then
|
||||
results[3] = true
|
||||
elseif G.DEBUG_POINTER then
|
||||
results[3] = true
|
||||
else
|
||||
results[3] = false
|
||||
end
|
||||
elseif target and target.set == "Booster" then
|
||||
results[2] = "Booster"
|
||||
if
|
||||
not ( -- no boosters if already in booster
|
||||
G.STATE ~= G.STATES.TAROT_PACK
|
||||
and G.STATE ~= G.STATES.SPECTRAL_PACK
|
||||
and G.STATE ~= G.STATES.STANDARD_PACK
|
||||
and G.STATE ~= G.STATES.BUFFOON_PACK
|
||||
and G.STATE ~= G.STATES.PLANET_PACK
|
||||
and G.STATE ~= G.STATES.SMODS_BOOSTER_OPENED
|
||||
)
|
||||
then
|
||||
if target.unlocked then
|
||||
results[3] = true
|
||||
elseif G.DEBUG_POINTER then
|
||||
results[3] = true
|
||||
else
|
||||
results[3] = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return results
|
||||
end
|
|
@ -14,23 +14,6 @@ SMODS.DrawStep({
|
|||
self.params.viewed_back
|
||||
) == "table" and self.params.viewed_back or (self.params.viewed_back and G.GAME.viewed_back or G.GAME.selected_back))
|
||||
or Back(G.P_CENTERS["b_red"])
|
||||
if currentBack.effect.config.cry_force_edition and not currentBack.effect.config.cry_antimatter then
|
||||
if currentBack.effect.config.cry_force_edition_shader then
|
||||
self.children.back:draw_shader(
|
||||
currentBack.effect.config.cry_force_edition_shader,
|
||||
nil,
|
||||
self.ARGS.send_to_shader,
|
||||
true
|
||||
)
|
||||
else
|
||||
self.children.back:draw_shader(
|
||||
currentBack.effect.config.cry_force_edition,
|
||||
nil,
|
||||
self.ARGS.send_to_shader,
|
||||
true
|
||||
)
|
||||
end
|
||||
end
|
||||
if
|
||||
currentBack.effect.config.cry_force_seal
|
||||
and not currentBack.effect.config.hide_seal
|
||||
|
@ -200,6 +183,7 @@ SMODS.DrawStep({
|
|||
then
|
||||
local scale_mod = 0.07 -- + 0.02*math.cos(1.8*G.TIMERS.REAL) + 0.00*math.cos((G.TIMERS.REAL - math.floor(G.TIMERS.REAL))*math.pi*14)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^3
|
||||
local rotate_mod = 0 --0.05*math.cos(1.219*G.TIMERS.REAL) + 0.00*math.cos((G.TIMERS.REAL)*math.pi*5)*(1 - (G.TIMERS.REAL - math.floor(G.TIMERS.REAL)))^2
|
||||
if self.children.floating_sprite2 then
|
||||
self.children.floating_sprite2:draw_shader(
|
||||
"dissolve",
|
||||
0,
|
||||
|
@ -222,12 +206,44 @@ SMODS.DrawStep({
|
|||
scale_mod,
|
||||
rotate_mod
|
||||
)
|
||||
else
|
||||
local center = self.config.center
|
||||
if _center and _center.soul_pos and _center.soul_pos.extra then
|
||||
self.children.floating_sprite2 = Sprite(
|
||||
self.T.x,
|
||||
self.T.y,
|
||||
self.T.w,
|
||||
self.T.h,
|
||||
G.ASSET_ATLAS[_center.atlas or _center.set],
|
||||
_center.soul_pos.extra
|
||||
)
|
||||
self.children.floating_sprite2.role.draw_major = self
|
||||
self.children.floating_sprite2.states.hover.can = false
|
||||
self.children.floating_sprite2.states.click.can = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
conditions = { vortex = false, facing = "front" },
|
||||
})
|
||||
SMODS.draw_ignore_keys.floating_sprite2 = true
|
||||
|
||||
-- CCD Drawstep
|
||||
local interceptorSprite = nil
|
||||
SMODS.DrawStep({
|
||||
key = "ccd_interceptor",
|
||||
order = -5,
|
||||
func = function(self)
|
||||
local card_type = self.ability.set or "None"
|
||||
if card_type ~= "Default" and card_type ~= "Enhanced" and self.playing_card and self.facing == "front" then
|
||||
interceptorSprite = interceptorSprite
|
||||
or Sprite(0, 0, G.CARD_W, G.CARD_H, G.ASSET_ATLAS["cry_misc"], { x = 3, y = 1 })
|
||||
interceptorSprite.role.draw_major = self
|
||||
interceptorSprite:draw_shader("dissolve", nil, nil, nil, self.children.center)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Make hover UI collidable - so we can detect collision and display tooltips
|
||||
local m = Card.move
|
||||
function Card:move(dt)
|
||||
|
@ -278,7 +294,7 @@ end
|
|||
-- Unfortunately this doesn't play nicely with gameset UI
|
||||
local cainit = CardArea.init
|
||||
function CardArea:init(X, Y, W, H, config)
|
||||
if config.collection then
|
||||
if config and config.collection then
|
||||
config.highlight_limit = config.card_limit
|
||||
end
|
||||
return cainit(self, X, Y, W, H, config)
|
||||
|
@ -393,12 +409,13 @@ function G.UIDEF.use_and_sell_buttons(card)
|
|||
if card.config and card.config.center and card.config.center.key == "c_cry_potion" then
|
||||
table.remove(abc.nodes[1].nodes, 1)
|
||||
end
|
||||
-- i love buttercup
|
||||
if
|
||||
card.area
|
||||
and card.edition
|
||||
and (card.area == G.jokers or card.area == G.consumeables or card.area == G.hand)
|
||||
and card.edition.cry_double_sided
|
||||
and not Card.no(card, "dbl")
|
||||
and card.area.config.type == "joker"
|
||||
and card.config
|
||||
and card.config.center
|
||||
and card.ability.name == "cry-Buttercup"
|
||||
then
|
||||
local use = {
|
||||
n = G.UIT.C,
|
||||
|
@ -411,20 +428,20 @@ function G.UIDEF.use_and_sell_buttons(card)
|
|||
align = "cr",
|
||||
maxw = 1.25,
|
||||
padding = 0.1,
|
||||
r = 0.08,
|
||||
r = 0.05,
|
||||
hover = true,
|
||||
shadow = true,
|
||||
colour = G.C.UI.BACKGROUND_INACTIVE,
|
||||
one_press = true,
|
||||
button = "flip",
|
||||
func = "can_flip_card",
|
||||
button = "store",
|
||||
func = "can_store_card",
|
||||
},
|
||||
nodes = {
|
||||
{ n = G.UIT.B, config = { w = 0.1, h = 0.3 } },
|
||||
{
|
||||
n = G.UIT.T,
|
||||
config = {
|
||||
text = localize("b_flip"),
|
||||
text = localize("b_store"),
|
||||
colour = G.C.UI.TEXT_LIGHT,
|
||||
scale = 0.3,
|
||||
shadow = true,
|
||||
|
@ -447,63 +464,5 @@ function G.UIDEF.use_and_sell_buttons(card)
|
|||
} })
|
||||
return abc
|
||||
end
|
||||
if
|
||||
card.area
|
||||
and (card.area == G.jokers or card.area == G.consumeables or card.area == G.hand)
|
||||
and (not card.edition or not card.edition.cry_double_sided)
|
||||
and not card.ability.eternal
|
||||
and not Card.no(card, "dbl")
|
||||
then
|
||||
for i = 1, #card.area.cards do
|
||||
if card.area.cards[i].edition and card.area.cards[i].edition.cry_double_sided then
|
||||
local use = {
|
||||
n = G.UIT.C,
|
||||
config = { align = "cr" },
|
||||
nodes = {
|
||||
{
|
||||
n = G.UIT.C,
|
||||
config = {
|
||||
ref_table = card,
|
||||
align = "cr",
|
||||
maxw = 1.25,
|
||||
padding = 0.1,
|
||||
r = 0.08,
|
||||
hover = true,
|
||||
shadow = true,
|
||||
colour = G.C.UI.BACKGROUND_INACTIVE,
|
||||
one_press = true,
|
||||
button = "flip_merge",
|
||||
func = "can_flip_merge_card",
|
||||
},
|
||||
nodes = {
|
||||
{ n = G.UIT.B, config = { w = 0.1, h = 0.3 } },
|
||||
{
|
||||
n = G.UIT.T,
|
||||
config = {
|
||||
text = localize("b_merge"),
|
||||
colour = G.C.UI.TEXT_LIGHT,
|
||||
scale = 0.3,
|
||||
shadow = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
local m = abc.nodes[1]
|
||||
if not card.added_to_deck then
|
||||
use.nodes[1].nodes = { use.nodes[1].nodes[2] }
|
||||
if card.ability.consumeable then
|
||||
m = abc
|
||||
end
|
||||
end
|
||||
m.nodes = m.nodes or {}
|
||||
table.insert(m.nodes, { n = G.UIT.R, config = { align = "cl" }, nodes = {
|
||||
use,
|
||||
} })
|
||||
return abc
|
||||
end
|
||||
end
|
||||
end
|
||||
return abc
|
||||
end
|
||||
|
|
|
@ -52,8 +52,8 @@ return {
|
|||
name = "Baraja crítica",
|
||||
text = {
|
||||
"Después de cada mano jugada,",
|
||||
"{C:green}#1# en 4{} probabilidades para {X:dark_edition,C:white} ^2 {} multi",
|
||||
"{C:green}#1# en 8{} probabilidades para {X:dark_edition,C:white} ^0.5 {} multi",
|
||||
"{C:green}#1# en #2#{} probabilidades para {X:dark_edition,C:white} ^2 {} multi",
|
||||
"{C:green}#1# en #3#{} probabilidades para {X:dark_edition,C:white} ^0.5 {} multi",
|
||||
},
|
||||
},
|
||||
b_cry_encoded = {
|
||||
|
@ -136,7 +136,7 @@ return {
|
|||
name = "Baraja legendaria",
|
||||
text = {
|
||||
"Comienza con un comodín {C:legendary}legendario{C:legendary}",
|
||||
"{C:green}1 en 5{} probabilidades para crear otro",
|
||||
"{C:green}#1# en #2#{} probabilidades para crear otro",
|
||||
"cuando se derrota a la ciega jefe",
|
||||
"{C:inactive}(debe haber espacio){}",
|
||||
},
|
||||
|
@ -1427,7 +1427,7 @@ return {
|
|||
"{C:attention}primer descarte{} de cada ronda",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Muevo",
|
||||
text = {
|
||||
"Vende esta carta para crear",
|
||||
|
@ -1449,7 +1449,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} multi por cada miembro",
|
||||
"en el {C:attention}Discord de Cryptid{}",
|
||||
"{C:inactive}(Actual: {X:mult,C:white}X#2#{C:inactive} multi)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1458,7 +1458,7 @@ return {
|
|||
"{C:chips}+#1#{} fichas por cada miembro",
|
||||
"en el {C:attention}Discord de Cryptid{}",
|
||||
"{C:inactive}(Actual: {C:chips}+#2#{C:inactive} fichas)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2406,6 +2406,14 @@ return {
|
|||
"gana {C:attention}2{} vales aleatorios",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Fusionar",
|
||||
text = {
|
||||
"Selecciona un {C:attention}comodín{} o",
|
||||
"{C:attention}carta de juego{} para",
|
||||
"hacerla {C:dark_edition}Doble cara",
|
||||
},
|
||||
},
|
||||
c_cry_typhoon = {
|
||||
name = "Tifón",
|
||||
text = {
|
||||
|
@ -2848,14 +2856,7 @@ return {
|
|||
"una {C:attention}Carta de eco",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Fusionar",
|
||||
text = {
|
||||
"Selecciona un {C:attention}comodín{} o",
|
||||
"{C:attention}carta de juego{} para",
|
||||
"hacerla {C:dark_edition}Doble cara",
|
||||
},
|
||||
},
|
||||
|
||||
c_cry_theblessing = {
|
||||
name = "La bendición",
|
||||
text = {
|
||||
|
@ -3084,6 +3085,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "La rueda de la fortuna",
|
||||
text = {
|
||||
"{C:green}#1# en #2#{} probabilidades de agregar",
|
||||
"que sean {C:dark_edition}laminadas{}, {C:dark_edition}holográficas{} o",
|
||||
"{C:dark_edition}polícromas{}",
|
||||
"a un {C:attention}comodín al azar",
|
||||
},
|
||||
},
|
||||
banana = {
|
||||
name = "Banana",
|
||||
text = {
|
||||
|
@ -3563,6 +3573,7 @@ return {
|
|||
cry_debuff_obsidian_orb = "Aplica las habilidades de todos los jefes derrotados",
|
||||
|
||||
k_code = "Código",
|
||||
k_chips = "fichas",
|
||||
k_unique = "Único",
|
||||
b_code_cards = "Cartas de código",
|
||||
b_unique_cards = "Cartas únicas",
|
||||
|
|
|
@ -65,8 +65,8 @@ return {
|
|||
name = "Baraja crítica",
|
||||
text = {
|
||||
"Después de cada mano jugada,",
|
||||
"{C:green}#1# en 4{} probabilidades para {X:dark_edition,C:white} ^2 {} multi",
|
||||
"{C:green}#1# en 8{} probabilidades para {X:dark_edition,C:white} ^0.5 {} multi",
|
||||
"{C:green}#1# en #2#{} probabilidades para {X:dark_edition,C:white} ^2 {} multi",
|
||||
"{C:green}#1# en #3#{} probabilidades para {X:dark_edition,C:white} ^0.5 {} multi",
|
||||
},
|
||||
},
|
||||
b_cry_e_deck = {
|
||||
|
@ -188,7 +188,7 @@ return {
|
|||
name = "Baraja legendaria",
|
||||
text = {
|
||||
"Comienza con un comodín {C:legendary}legendario{C:legendary}",
|
||||
"{C:green}1 en 5{} probabilidades para crear otro",
|
||||
"{C:green}#1# en #2#{} probabilidades para crear otro",
|
||||
"cuando se derrota a la ciega jefe",
|
||||
"{C:inactive}(debe haber espacio){}",
|
||||
},
|
||||
|
@ -406,7 +406,7 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_crash = {
|
||||
name = "://CHOQUE",
|
||||
name = "://CRASH",
|
||||
text = {
|
||||
"{C:cry_code,E:1}No.",
|
||||
},
|
||||
|
@ -651,7 +651,7 @@ return {
|
|||
set_cry_poker_hand_stuff = {
|
||||
name = "Manos de póker",
|
||||
text = {
|
||||
"Añade 4 {C:attention}manos de póker{} nuevas",
|
||||
"Añade 5 {C:attention}manos de póker{} nuevas",
|
||||
"y habilita {C:attention}Manos ascendidas",
|
||||
},
|
||||
},
|
||||
|
@ -800,6 +800,16 @@ return {
|
|||
"{C:inactive}(Actual: {X:mult,C:white}X#2#{C:inactive} multi)",
|
||||
},
|
||||
},
|
||||
m_cry_abstract = {
|
||||
name = "Carta abstracta",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} multi,",
|
||||
"Cuenta como su {C:attention}propio{} rango y palo",
|
||||
"Chance de {C:green}#4# en #5#{} de que",
|
||||
"{C:red,E:2}se destruya{} la carta al tenerla en la mano al",
|
||||
"{C:attention}final de la ronda{} o al {C:attention}jugar una mano{}",
|
||||
},
|
||||
},
|
||||
},
|
||||
Joker = {
|
||||
j_cry_test_modest = {
|
||||
|
@ -925,6 +935,15 @@ return {
|
|||
"{C:inactive,s:0.8}La categoría no cambia",
|
||||
},
|
||||
},
|
||||
j_cry_highfive = {
|
||||
name = "Choca esos cinco",
|
||||
text = {
|
||||
"Si la carta {C:attention}puntuada más alta{}",
|
||||
"es {C:attention}5{}, convierte {C:attention}todas{} las cartas que puntúan",
|
||||
"en {C:attention}5{}s",
|
||||
"{s:0.8,C:inactive}Se considera a los Aces como 1",
|
||||
},
|
||||
},
|
||||
j_cry_blender = {
|
||||
name = "Blender",
|
||||
text = {
|
||||
|
@ -1149,6 +1168,18 @@ return {
|
|||
"una {E:1,C:attention}Pareja suprema",
|
||||
},
|
||||
},
|
||||
j_cry_the = {
|
||||
name = "El",
|
||||
text = {
|
||||
"{X:mult,C:white} X#1# {} multi si la mano",
|
||||
"jugada es {C:attention}#2#",
|
||||
},
|
||||
unlock = {
|
||||
"Gana una partida con",
|
||||
"tu última mano siendo",
|
||||
"una {E:1,C:attention}None", --queda None por traducir, revisar el discord si alguien lo solucionó
|
||||
},
|
||||
},
|
||||
j_cry_clicked_cookie = {
|
||||
name = "Galleta clickeada",
|
||||
text = {
|
||||
|
@ -1301,6 +1332,21 @@ return {
|
|||
"de su respectivo {C:attention}tipo{}",
|
||||
},
|
||||
},
|
||||
j_cry_starfruit = {
|
||||
name = "Carambola",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} multi,",
|
||||
"pierde {X:dark_edition,C:white}^#2#{} multi por cada",
|
||||
"{C:attention}renovación{} en la tienda",
|
||||
},
|
||||
},
|
||||
j_cry_demicolon = {
|
||||
name = "Demicolon",
|
||||
text = {
|
||||
"{C:attention}Activa por la fuerza{} al Comodín",
|
||||
"a la derecha",
|
||||
},
|
||||
},
|
||||
j_cry_discreet = {
|
||||
name = "Comodín discreto",
|
||||
text = {
|
||||
|
@ -1462,6 +1508,15 @@ return {
|
|||
"{C:attention}#2#{} o menos veces",
|
||||
},
|
||||
},
|
||||
j_cry_familiar_currency = {
|
||||
name = "Moneda familiar",
|
||||
text = {
|
||||
"Crea un {C:attention}comodín meme{}",
|
||||
"al final de la ronda",
|
||||
"por {C:money}$#1#{} {C:inactive}(si es posible)",
|
||||
"{C:inactive}(Debe haber espacio)",
|
||||
},
|
||||
},
|
||||
j_cry_filler = {
|
||||
name = "El relleno",
|
||||
text = {
|
||||
|
@ -1514,6 +1569,13 @@ return {
|
|||
"un {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_undefined = {
|
||||
name = "Comodín indefinido",
|
||||
text = {
|
||||
"{C:red}+#1#{} multi si la mano",
|
||||
"jugada es {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_formidiulosus = {
|
||||
name = "Formidiulosus",
|
||||
text = {
|
||||
|
@ -1618,7 +1680,7 @@ return {
|
|||
"{X:dark_edition,C:white}^#1#{} multi sólo después de",
|
||||
"jugar {C:attention}114{} manos{}",
|
||||
"{C:inactive}(Actual: #2#/114){}",
|
||||
"{C:inactive,s:0.8}¡No hay un lugar como el hugar!{}",
|
||||
"{C:inactive,s:0.8}¡No hay lugar como el hogar!{}",
|
||||
},
|
||||
},
|
||||
j_cry_home = {
|
||||
|
@ -1644,7 +1706,7 @@ return {
|
|||
j_cry_huntingseason = {
|
||||
name = "Época de caza",
|
||||
text = {
|
||||
"Si la mano jugada contiene exactalemte {C:attention}3{} cartas,",
|
||||
"Si la mano jugada contiene exactamente {C:attention}3{} cartas,",
|
||||
"{C:red}destruye{} la carta {C:attention}central{} después de puntuar",
|
||||
},
|
||||
},
|
||||
|
@ -1658,7 +1720,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_jawbreaker = {
|
||||
name = "Jawbreaker",
|
||||
name = "Rompemuelas",
|
||||
text = {
|
||||
"Al derrotar la {C:attention}ciega jefe,",
|
||||
"{C:attention}duplica{} los valores de los comodines adyacentes",
|
||||
|
@ -1708,6 +1770,14 @@ return {
|
|||
"o {C:attention}tipo fichas{} es vendido",
|
||||
},
|
||||
},
|
||||
j_cry_kittyprinter = {
|
||||
name = "Impresora de gatitos",
|
||||
text = {
|
||||
"{X:mult,C:white} X#1# {} multi",
|
||||
"Todas las etiquetas {C:attention}salteadas{}",
|
||||
"se vuelven {C:attention}etiquetas de gato{}",
|
||||
},
|
||||
},
|
||||
j_cry_kooky = {
|
||||
name = "Comodín raro",
|
||||
text = {
|
||||
|
@ -1769,7 +1839,7 @@ return {
|
|||
"{C:attention}Reactiva{} todos los comodines",
|
||||
"una vez por cada {C:attention}comodín{}",
|
||||
"{C:attention}contento{} vendido esta ronda",
|
||||
"{C:inactive}(Actual:{}{C:attention:} #1#{}{C:inactive} reactivaci#<ones,ón>2#){}",
|
||||
"{C:inactive}(Actual:{}{C:attention:} #1#{}{C:inactive} reactivaci#<ones,ón>1#){}",
|
||||
"{C:inactive,s:0.8}No había suficiente espacio...{}",
|
||||
},
|
||||
},
|
||||
|
@ -1868,7 +1938,7 @@ return {
|
|||
"{C:attention}primer descarte{} de cada ronda",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Muevo",
|
||||
text = {
|
||||
"Vende esta carta para crear",
|
||||
|
@ -1890,8 +1960,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} multi por cada miembro",
|
||||
"en el {C:attention}Discord de Cryptid{}",
|
||||
"{C:inactive}(Actual: {X:mult,C:white}X#2#{C:inactive} multi)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1900,7 +1969,7 @@ return {
|
|||
"{C:chips}+#1#{} ficha#<s>1# por cada miembro",
|
||||
"en el {C:attention}Discord de Cryptid{}",
|
||||
"{C:inactive}(Actual: {C:chips}+#2#{C:inactive} fichas)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo_balanced = {
|
||||
|
@ -1909,7 +1978,7 @@ return {
|
|||
"{C:chips}+#1#{} ficha#<s>1# por cada {C:attention}8{} miembros",
|
||||
"en el {C:attention}Discord de Cryptid{}",
|
||||
"{C:inactive}(Actual: {C:chips}+#2#{C:inactive} fichas)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2302,7 +2371,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_scrabble = {
|
||||
name = "Teja de Scrabble",
|
||||
name = "Ficha de Scrabble",
|
||||
text = {
|
||||
"{C:green}#1# en #2#{} probabilidades de crear",
|
||||
"un comodín {C:green}inusual{} {C:dark_edition}contento",
|
||||
|
@ -2380,7 +2449,22 @@ return {
|
|||
'{C:inactive,s:0.8}"Esta prisión... para mantenerme...?"',
|
||||
},
|
||||
},
|
||||
|
||||
j_cry_sock_and_sock = {
|
||||
name = "Calcetín y calcetín",
|
||||
text = {
|
||||
"Reactiva todas las cartas",
|
||||
"{C:attention}abstractas{} jugadas {C:attention}#1#{} vez#<ces>1#",
|
||||
},
|
||||
},
|
||||
j_cry_brokenhome = {
|
||||
name = "Hogar roto",
|
||||
text = {
|
||||
"{X:mult,C:white} X#1# {} multi",
|
||||
"{C:green}#2# en #3#{} probabilidades",
|
||||
"de que la carta se destruya",
|
||||
"al final de la ronda",
|
||||
},
|
||||
},
|
||||
j_cry_spaceglobe = {
|
||||
name = "Esfera celestial",
|
||||
text = {
|
||||
|
@ -2531,6 +2615,13 @@ return {
|
|||
"un {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_nebulous = {
|
||||
name = "Comodín Nebuloso",
|
||||
text = {
|
||||
"{C:chips}+#1#{} Chip#<s>1# si la mano",
|
||||
"jugada es {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_trick_or_treat = {
|
||||
name = "Dulce o truco",
|
||||
text = {
|
||||
|
@ -3094,6 +3185,14 @@ return {
|
|||
"de tu mano al azar",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Fusionar",
|
||||
text = {
|
||||
"Selecciona un {C:attention}comodín{} o",
|
||||
"{C:attention}carta de juego{} para",
|
||||
"hacerla {C:dark_edition}Doble cara",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Vacío",
|
||||
text = {
|
||||
|
@ -3536,14 +3635,7 @@ return {
|
|||
"una {C:attention}Carta de eco",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Fusionar",
|
||||
text = {
|
||||
"Selecciona un {C:attention}comodín{} o",
|
||||
"{C:attention}carta de juego{} para",
|
||||
"hacerla {C:dark_edition}Doble cara",
|
||||
},
|
||||
},
|
||||
|
||||
c_cry_theblessing = {
|
||||
name = "La bendición",
|
||||
text = {
|
||||
|
@ -3845,6 +3937,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "La rueda de la fortuna",
|
||||
text = {
|
||||
"{C:green}#1# en #2#{} probabilidades de agregar",
|
||||
"que sean {C:dark_edition}laminadas{}, {C:dark_edition}holográficas{} o",
|
||||
"{C:dark_edition}polícromas{}",
|
||||
"a un {C:attention}comodín al azar",
|
||||
},
|
||||
},
|
||||
disabled = {
|
||||
name = "Deshabilitado",
|
||||
text = {
|
||||
|
@ -4391,7 +4492,7 @@ return {
|
|||
ach_cry_pull_request = "Haz que ://COMMIT haga aparecer el mismo comodín que destruyó",
|
||||
ach_cry_traffic_jam = "Gana todos los desafíos Hora punta",
|
||||
ach_cry_ult_full_skip = "Gana en 1 ronda",
|
||||
ach_cry_used_crash = "Usa ://CHOQUE",
|
||||
ach_cry_used_crash = "Usa ://CRASH",
|
||||
ach_cry_what_have_you_done = "Elimina o sacrifica un comodín exótico",
|
||||
ach_cry_pin = "Pierde una partida contra El Alfiler",
|
||||
},
|
||||
|
@ -4465,6 +4566,7 @@ return {
|
|||
cry_joke_placeholder = "(múltiplo of 8)",
|
||||
|
||||
k_code = "Código",
|
||||
k_chips = "fichas",
|
||||
k_content_set = "Set temático",
|
||||
b_content_sets = "Sets temáticos",
|
||||
--Why aren't these in vanilla?
|
||||
|
|
|
@ -111,8 +111,8 @@ return {
|
|||
name = "Jeu Critique",
|
||||
text = {
|
||||
"Après chaque main jouée,",
|
||||
"{C:green}#1# chance#<s>1# sur 4{} d'obtenir {X:dark_edition,C:white} ^2 {} Multi",
|
||||
"{C:green}#1# chance#<s>1# sur 8{} d'obtenir {X:dark_edition,C:white} ^0.5 {} Multi",
|
||||
"{C:green}#1# chance#<s>1# sur #2#{} d'obtenir {X:dark_edition,C:white} ^2 {} Multi",
|
||||
"{C:green}#1# chance#<s>1# sur #3#{} d'obtenir {X:dark_edition,C:white} ^0.5 {} Multi",
|
||||
},
|
||||
unlock = {
|
||||
"Obtenir un {C:attention}Joker Truqué",
|
||||
|
@ -285,7 +285,7 @@ return {
|
|||
name = "Jeu Légendaire",
|
||||
text = {
|
||||
"Démarre avec un Joker {C:legendary}Légendaire{C:legendary}",
|
||||
"{C:green}1 chance sur 5{} d'en créer un autre",
|
||||
"{C:green}#1# chance sur #2#{} d'en créer un autre",
|
||||
"lorsque la Blinde de Boss est battue",
|
||||
"{C:inactive}(selon la place disponible)",
|
||||
},
|
||||
|
@ -307,7 +307,8 @@ return {
|
|||
name = "L'Horloge",
|
||||
text = {
|
||||
"+0.1X du score requis toutes",
|
||||
"les 12 secondes passées dans cette Ante",
|
||||
"les 12 secondes passées dans cette Ante,",
|
||||
"multiplié par la vitesse du jeu",
|
||||
},
|
||||
},
|
||||
bl_cry_hammer = {
|
||||
|
@ -335,7 +336,8 @@ return {
|
|||
name = "Boucle Lavande",
|
||||
text = {
|
||||
"1.25X du score requis toutes les",
|
||||
"6 secondes passées dans cette manche",
|
||||
"6 secondes passées dans cette manche,",
|
||||
"multiplié par la vitesse du jeu",
|
||||
},
|
||||
},
|
||||
bl_cry_obsidian_orb = {
|
||||
|
@ -412,6 +414,37 @@ return {
|
|||
"rareté supérieure sont affaiblis",
|
||||
},
|
||||
},
|
||||
bl_cry_greed = {
|
||||
name = "L'Avarice",
|
||||
text = {
|
||||
"+#2# à la taille de la blinde pour",
|
||||
"chaque $#1# lorsqu'elle est sélectionnée",
|
||||
},
|
||||
},
|
||||
bl_cry_repulsor = {
|
||||
name = "Le Répulseur",
|
||||
text = {
|
||||
"Redéclenche les jokers",
|
||||
"aux extrêmités, tous les autres",
|
||||
"Jokers ne déclenchent pas",
|
||||
},
|
||||
},
|
||||
bl_cry_chromatic = {
|
||||
name = "Le Chromatisme",
|
||||
text = {
|
||||
"Le score de la main",
|
||||
"est soustrait sur les",
|
||||
"mains impaires",
|
||||
},
|
||||
},
|
||||
bl_cry_landlord = {
|
||||
name = "Le Locateur",
|
||||
text = {
|
||||
"Applique Location à",
|
||||
"un Joker aléatoire",
|
||||
"après que la main soit jouée",
|
||||
},
|
||||
},
|
||||
bl_cry_pinkbow = {
|
||||
name = "Nœud Rose",
|
||||
text = {
|
||||
|
@ -422,9 +455,9 @@ return {
|
|||
bl_cry_scorch = {
|
||||
name = "La Grille",
|
||||
text = {
|
||||
"Must play 5 cards,",
|
||||
"destroy played and",
|
||||
"discarded cards",
|
||||
"5 cartes doivent être jouées,",
|
||||
"toutes les cartes jouées",
|
||||
"et défaussées sont détruites",
|
||||
},
|
||||
},
|
||||
bl_cry_sapphire_stamp = {
|
||||
|
@ -490,8 +523,25 @@ return {
|
|||
"sont affaiblis",
|
||||
},
|
||||
},
|
||||
bl_cry_decision = {
|
||||
name = "La Décision",
|
||||
text = {
|
||||
"Attache les Jokers après qu'une main",
|
||||
"soit jouée ou défaussée",
|
||||
"Ouvre un Paquet Bouffon Maléfique",
|
||||
"après la manche",
|
||||
},
|
||||
},
|
||||
},
|
||||
Code = {
|
||||
c_cry_assemble = {
|
||||
name = "://ASSEMBLAGE",
|
||||
text = {
|
||||
"Ajoute du {C:cry_code}Multi{}",
|
||||
"à la {C:cry_code}main sélectionnée{} égal au",
|
||||
"nombre de Jokers possédés",
|
||||
},
|
||||
},
|
||||
c_cry_alttab = {
|
||||
name = "://ALTTAB",
|
||||
text = {
|
||||
|
@ -518,7 +568,7 @@ return {
|
|||
c_cry_crash = {
|
||||
name = "://CRASH",
|
||||
text = {
|
||||
"{C:cry_code,E:1}Ne le faites pas.",
|
||||
"{C:cry_code,E:1}Ne le fais pas.",
|
||||
},
|
||||
},
|
||||
c_cry_ctrl_v = {
|
||||
|
@ -555,12 +605,26 @@ return {
|
|||
"{C:inactive,s:0.8}découvertes pour être valides",
|
||||
},
|
||||
},
|
||||
c_cry_cryfunction = {
|
||||
name = "FONCTION://",
|
||||
text = {
|
||||
"Enregistre les {C:cry_code}trois derniers{} consommables utilisés,",
|
||||
"réutiliser cette carte crée une copie du",
|
||||
"premier consommable avec un sticker {C:cry_code}Fonction://{}",
|
||||
},
|
||||
},
|
||||
c_cry_global = {
|
||||
name = "://GLOBAL",
|
||||
text = {
|
||||
"Définit la carte sélectionnée",
|
||||
"comme carte {C:cry_code}Globale{}",
|
||||
},
|
||||
},
|
||||
c_cry_hook = {
|
||||
name = "ACCROCHER://",
|
||||
text = {
|
||||
"Les deux jokers sélectionnés deviennent {C:cry_code}Accrochés",
|
||||
"{C:inactive,s:0.8}Ne marche seulement si les Jokers se déclenchent dans le même contexte,",
|
||||
"{C:inactive,s:0.8}comme Joker et Le Duo (les deux après le compte)",
|
||||
"Applique {C:cry_code}Accroché{} à",
|
||||
"2 Jokers sélectionnés",
|
||||
},
|
||||
},
|
||||
c_cry_inst = {
|
||||
|
@ -571,6 +635,21 @@ return {
|
|||
"{C:inactive}(si possible){}",
|
||||
},
|
||||
},
|
||||
c_cry_keygen = {
|
||||
name = "://KEYGEN",
|
||||
text = {
|
||||
"Crée un coupon {C:cry_code}Périssable Banane{}",
|
||||
"aléatoire, {C:cry_code}détruit{} le dernier coupon créé",
|
||||
"de cette manière",
|
||||
},
|
||||
},
|
||||
c_cry_log = {
|
||||
name = "://LOG",
|
||||
text = {
|
||||
"To Be {C:cry_code}Implemented{}",
|
||||
"in a future {C:cry_code}update{}",
|
||||
},
|
||||
},
|
||||
c_cry_machinecode = {
|
||||
name = "://MACHINECODE",
|
||||
text = {
|
||||
|
@ -596,6 +675,13 @@ return {
|
|||
"la fin de la manche",
|
||||
},
|
||||
},
|
||||
c_cry_nperror = {
|
||||
name = "://ERREURNP",
|
||||
text = {
|
||||
"Retourne la {C:cry_code}dernière main jouée{}",
|
||||
"dans votre main",
|
||||
},
|
||||
},
|
||||
c_cry_patch = {
|
||||
name = "://PATCH",
|
||||
text = {
|
||||
|
@ -620,6 +706,14 @@ return {
|
|||
"{C:inactive}(Currently {C:cry_code}+#2#{C:inactive})",
|
||||
},
|
||||
},
|
||||
c_cry_quantify = {
|
||||
name = "://QUANTIFIER",
|
||||
text = {
|
||||
"Transfère {C:attention}#1#{} {C:attention}Carte#<s>1#{}",
|
||||
"ou {C:attention}Paquet#<s>1#{} sélectionné#<s>1#",
|
||||
"dans les emplacements de {C:attention}Jokers{}",
|
||||
},
|
||||
},
|
||||
c_cry_reboot = {
|
||||
name = "://REDÉMARRAGE",
|
||||
text = {
|
||||
|
@ -671,6 +765,13 @@ return {
|
|||
"Nourriture {C:cry_code}Glitché",
|
||||
},
|
||||
},
|
||||
c_cry_cryupdate = {
|
||||
name = "://MISEAJOUR",
|
||||
text = {
|
||||
"on sait {C:cry_code}pas encore{},",
|
||||
"reviens dans la prochaine {C:cry_code}mise à jour{}",
|
||||
},
|
||||
},
|
||||
c_cry_variable = {
|
||||
name = "://VARIABLE",
|
||||
text = {
|
||||
|
@ -678,6 +779,15 @@ return {
|
|||
"en un rang {C:cry_code}choisi{}",
|
||||
},
|
||||
},
|
||||
c_cry_declare = {
|
||||
name = "://DECLARER",
|
||||
text = {
|
||||
"Vos {C:attention}cartes sélectionnées{}",
|
||||
"deviennent une {C:cry_code}nouvelle{} main de Poker",
|
||||
"qui est considérée comme un {C:attention}#1#{}",
|
||||
"Un maximum de {C:attention}3{} {C:inactive}[#2#]{} mains peuvent être créées",
|
||||
},
|
||||
},
|
||||
},
|
||||
["Content Set"] = {
|
||||
set_cry_blind = {
|
||||
|
@ -731,6 +841,13 @@ return {
|
|||
"et au {C:attention}Joker Joyeux",
|
||||
},
|
||||
},
|
||||
set_cry_meme = {
|
||||
name = "Mème",
|
||||
text = {
|
||||
"Tout un tas de références",
|
||||
"à de nombreux mèmes",
|
||||
},
|
||||
},
|
||||
set_cry_misc = {
|
||||
name = "Divers",
|
||||
text = {
|
||||
|
@ -757,7 +874,7 @@ return {
|
|||
set_cry_poker_hand_stuff = {
|
||||
name = "Mains de poker supplémentaires",
|
||||
text = {
|
||||
"Rajoute 4 nouvelles {C:attention}mains de poker",
|
||||
"Rajoute 5 nouvelles {C:attention}mains de poker",
|
||||
"et active les {C:attention}mains ascensionnées",
|
||||
},
|
||||
},
|
||||
|
@ -839,6 +956,7 @@ return {
|
|||
"{C:green}#1# chance#<s>1# sur #2#{} de",
|
||||
"ne pas {C:red}détruire{} cette carte",
|
||||
"lorsqu'elle est déclenchée",
|
||||
"{C:inactive}Non-truquable{}",
|
||||
},
|
||||
},
|
||||
e_cry_glitched = {
|
||||
|
@ -906,6 +1024,16 @@ return {
|
|||
"{C:inactive}(Actuellement {X:mult,C:white}X#2#{C:inactive} Multi)",
|
||||
},
|
||||
},
|
||||
m_cry_abstract = {
|
||||
name = "Carte abstraite",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} Multi,",
|
||||
"Compte comme son {C:attention}propre{} rang et couleur",
|
||||
"{C:green}#4# chance#<s>4# sur #5#{} de",
|
||||
"{C:red,E:2}détruire{} la carte lorsqu'elle {C:attention}jouée",
|
||||
"ou {C:attention}à la fin de la manche{} si elle est tenue en main",
|
||||
},
|
||||
},
|
||||
},
|
||||
Joker = {
|
||||
j_cry_test_modest = {
|
||||
|
@ -953,6 +1081,7 @@ return {
|
|||
"Vendre cette carte crée",
|
||||
"{C:attention}2{} copies du {C:attention}Joker{} le plus à gauche",
|
||||
"{C:inactive,s:0.8}Ne copie pas les Carte Googol Play Nostalgiques{}",
|
||||
"{C:inactive}(Selon la place disponible){}",
|
||||
},
|
||||
},
|
||||
j_cry_altgoogol_balanced = {
|
||||
|
@ -1038,6 +1167,16 @@ return {
|
|||
"{C:inactive,s:0.8}Le rang ne change pas",
|
||||
},
|
||||
},
|
||||
j_cry_rotten_egg = {
|
||||
name = "Œuf pourri",
|
||||
text = {
|
||||
"Lorsque obtenu, définit la valeur de vente",
|
||||
"de tous les Jokers actuels et futurs à {C:attention}$#1#{}",
|
||||
"Réduit la valeur de vente des {C:attention}Jokers{} de {C:attention}$#2#{}",
|
||||
"À la fin de la manche, après avoir gagné {C:attention}$#3#{} {C:inactive}[#4#]{}",
|
||||
"en vendant des {C:attention}Jokers{}, {C:red}s'auto-détruit{}",
|
||||
},
|
||||
},
|
||||
j_cry_blender = {
|
||||
name = "Blender",
|
||||
text = {
|
||||
|
@ -1129,6 +1268,14 @@ return {
|
|||
"pour {C:mult}-#2#{} Multi",
|
||||
},
|
||||
},
|
||||
j_cry_buttercup = {
|
||||
name = "Potimarron",
|
||||
text = {
|
||||
"Permet de stocker {C:attention}#1#{} objet#<s>1# de la boutique",
|
||||
"Lorsque ce Joker est vendu: Ajoute l#<es objets,'objet>1# stocké#<s>1#",
|
||||
"à la prochaîne boutique",
|
||||
},
|
||||
},
|
||||
j_cry_candy_basket = {
|
||||
name = "Panier de bonbons",
|
||||
text = {
|
||||
|
@ -1272,6 +1419,18 @@ return {
|
|||
"comme main gagnante",
|
||||
},
|
||||
},
|
||||
j_cry_the = {
|
||||
name = "Le",
|
||||
text = {
|
||||
"{X:mult,C:white} X#1# {} Multi si",
|
||||
"la dernière m {C:attention}#2#",
|
||||
},
|
||||
unlock = {
|
||||
"Gagner une partie",
|
||||
"en ne jouant {E:1,C:attention}Rien",
|
||||
"comme main gagnante",
|
||||
},
|
||||
},
|
||||
j_cry_clicked_cookie = {
|
||||
name = "Cookie cliqué", -- the joke works better in french :3c
|
||||
text = {
|
||||
|
@ -1426,6 +1585,21 @@ return {
|
|||
"contient une {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_demicolon = {
|
||||
name = "Deux-points-et-demie",
|
||||
text = {
|
||||
"{C:attention}Force-déclenche{} le Joker",
|
||||
"à droite de celui-ci",
|
||||
},
|
||||
},
|
||||
j_cry_starfruit = {
|
||||
name = "Starfruit",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} Multi,",
|
||||
"perd {X:dark_edition,C:white}^#2#{} Multi à chaque",
|
||||
"{C:attention}réapprovisionnement{} de la boutique",
|
||||
},
|
||||
},
|
||||
j_cry_digitalhallucinations = {
|
||||
name = "Hallucinations digitales",
|
||||
text = {
|
||||
|
@ -1597,7 +1771,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_highfive = {
|
||||
name = "High five",
|
||||
name = "Tapes-m'en-Cinq",
|
||||
text = {
|
||||
"Si le rang le plus haut {C:attention}marqué{}",
|
||||
"est un {C:attention}5{}, convertit {C:attention}toutes{} les cartes marquées",
|
||||
|
@ -1613,6 +1787,15 @@ return {
|
|||
"que {C:attention}#2#{} fois ou moins",
|
||||
},
|
||||
},
|
||||
j_cry_familiar_currency = {
|
||||
name = "Monnaie connue",
|
||||
text = {
|
||||
"Crée un {C:attention}Joker Mème{}",
|
||||
"à la fin de la manche",
|
||||
"pour {C:money}$#1#{} {C:inactive}(si possible)",
|
||||
"{C:inactive}(Selon la place disponible)",
|
||||
},
|
||||
},
|
||||
j_cry_filler = {
|
||||
name = "Le filler", -- "english word used in french" moment
|
||||
text = {
|
||||
|
@ -1665,6 +1848,14 @@ return {
|
|||
"une {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_undefined = {
|
||||
name = "Undefined Joker",
|
||||
text = {
|
||||
"{C:red}+#1#{} Multi si la",
|
||||
"main jouée contient",
|
||||
"un {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_formidiulosus = {
|
||||
name = "Formidiulosus",
|
||||
text = {
|
||||
|
@ -1809,6 +2000,7 @@ return {
|
|||
"{C:attention}#2#{} fois,",
|
||||
"chaque carte jouée donne",
|
||||
"{X:mult,C:white} X#1# {} Multi lorsqu'elle est comptée",
|
||||
"{C:inactive}(Maximum {}{C:attention}#3#{}{C:inactive} redéclenchements)",
|
||||
},
|
||||
},
|
||||
j_cry_jawbreaker = {
|
||||
|
@ -1907,6 +2099,7 @@ return {
|
|||
"Les {C:attention}Rois{} comptés donnent",
|
||||
"{C:attention}+#1#{} à la taille de la main cette manche",
|
||||
"et redéclenchent les effets des cartes {C:attention}tenues en main{}",
|
||||
"{C:inactive}(Actuellement {}{C:attention}+#2#{}{C:inactive})",
|
||||
},
|
||||
},
|
||||
j_cry_lightupthenight = {
|
||||
|
@ -2028,7 +2221,7 @@ return {
|
|||
"{C:attention}première défausse{} de chaque manche",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Mœuf",
|
||||
text = {
|
||||
"Vendre cette carte crée",
|
||||
|
@ -2050,7 +2243,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Multi pour chaque membre",
|
||||
"dans le {C:attention}serveur Discord{} de {C:attention}Cryptid{}",
|
||||
"{C:inactive}(Actuellement {X:mult,C:white}X#2#{C:inactive} Multi)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -2059,7 +2252,7 @@ return {
|
|||
"{C:chips}+#1#{} Jeton#<s>1# pour chaque membre",
|
||||
"dans le {C:attention}serveur Discord{} de {C:attention}Cryptid{}",
|
||||
"{C:inactive}(Actuellement {C:chips}+#2#{C:inactive} Jeton#<s>2#)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo_balanced = {
|
||||
|
@ -2068,7 +2261,7 @@ return {
|
|||
"{C:chips}+#1#{} Jeton#<s>1# tous les {C:attention}8{} membres",
|
||||
"dans le {C:attention}serveur Discord{} de {C:attention}Cryptid{}",
|
||||
"{C:inactive}(Actuellement {C:chips}+#2#{C:inactive} Jeton#<s>2#)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2305,6 +2498,14 @@ return {
|
|||
"donne un {C:attention}Badge{} aléatoire",
|
||||
},
|
||||
},
|
||||
j_cry_pity_prize_modest = {
|
||||
name = "Lot de pitié",
|
||||
text = {
|
||||
"Lorsqu'un {C:attention}Paquet Booster{} est passé,",
|
||||
"donne un {C:attention}Badge{} aléatoire",
|
||||
"{C:red,E:2}S'auto-détruit{}",
|
||||
},
|
||||
},
|
||||
j_cry_pot_of_jokes = {
|
||||
name = "Pot de Blagues",
|
||||
text = {
|
||||
|
@ -2526,8 +2727,9 @@ return {
|
|||
"{C:attention}+#1#{} emplacement#<s>1# de coupon",
|
||||
},
|
||||
unlock = {
|
||||
"Win a run with",
|
||||
"only {C:attention}High Card",
|
||||
"Gagner une partie",
|
||||
"avec uniquement",
|
||||
"des {C:attention}Carte Haute",
|
||||
},
|
||||
},
|
||||
j_cry_fleshpanopticon = {
|
||||
|
@ -2540,6 +2742,71 @@ return {
|
|||
'{C:inactive,s:0.8}"This prison... to hold... me?"',
|
||||
},
|
||||
},
|
||||
j_cry_sock_and_sock = {
|
||||
name = "Chaussettes de Cirque", -- un cirque plutôt digital, mdr
|
||||
text = {
|
||||
"Redéclenche toutes les",
|
||||
"cartes {C:attention}Abstraites{} {C:attention}#1#{} fois",
|
||||
},
|
||||
},
|
||||
j_cry_brokenhome = {
|
||||
name = "Maison cassée",
|
||||
text = {
|
||||
"{X:mult,C:white} X#1# {} Multi",
|
||||
"{C:green}#2# chance#<s>2# sur #3#{} que cette carte",
|
||||
"soit détruite à la fin",
|
||||
"de la manche",
|
||||
},
|
||||
},
|
||||
j_cry_yarnball = {
|
||||
name = "Boule de laine",
|
||||
text = {
|
||||
"Ajoute le niveau du {C:attention}Badge Chat{} le plus élevé",
|
||||
"à toutes les {C:green}probabilités affichées",
|
||||
},
|
||||
},
|
||||
j_cry_pizza = {
|
||||
name = "Pizza",
|
||||
text = {
|
||||
"Après {C:attention}#1#{} {C:inactive}[#2#]{} manche#<s>1#",
|
||||
"vendre ce Joker crée",
|
||||
"{C:attention}#3#{} Parts de pizza",
|
||||
},
|
||||
},
|
||||
j_cry_pizza_slice = {
|
||||
name = "Part de pizza",
|
||||
text = {
|
||||
"Ce Joker gagne {X:mult,C:white}X#1#{} Multi",
|
||||
"lorsqu'une {C:attention}Part de pizza{} est vendue",
|
||||
"{C:inactive}(Actuellement{} {X:mult,C:white}X#2#{}{C:inactive} Multi){}",
|
||||
},
|
||||
},
|
||||
j_cry_paved_joker = {
|
||||
name = "Joker pavé",
|
||||
text = {
|
||||
"Les Cartes Pierre peuvent remplir",
|
||||
"{C:attention}#1#{} trou#<s>1# dans les",
|
||||
"{C:attention}Quintes{} et {C:attention}Couleurs{}",
|
||||
},
|
||||
},
|
||||
j_cry_fading_joker = {
|
||||
name = "Joker effacé",
|
||||
text = {
|
||||
"Ce Joker gagne",
|
||||
"{X:mult,C:white}X#1#{} Multi lorsqu'une",
|
||||
"carte {C:attention}Périssable{} est affaiblie",
|
||||
"{C:inactive}(Actuellement{} {X:mult,C:white}X#2#{} {C:inactive}Multi){}",
|
||||
},
|
||||
},
|
||||
j_cry_poor_joker = {
|
||||
name = "Joker pauvre",
|
||||
text = {
|
||||
"Ce Joker gagne",
|
||||
"{X:mult,C:white}X#1#{} Multi lorsqu'une",
|
||||
"carte {C:attention}Location{} prend de l'argent",
|
||||
"{C:inactive}(Actuellement{} {C:mult}+#2#{} {C:inactive}Multi){}",
|
||||
},
|
||||
},
|
||||
j_cry_spaceglobe = {
|
||||
name = "Globe Céleste",
|
||||
text = {
|
||||
|
@ -2691,6 +2958,43 @@ return {
|
|||
"contient une {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_nebulous = {
|
||||
name = "Joker nébuleux",
|
||||
text = {
|
||||
"{C:chips}+#1#{} Jeton#<s>1# si",
|
||||
"la main jouée",
|
||||
"ne contient {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_words_cant_even = {
|
||||
name = "Un joker dont je ne suis pas en mesure de décrire avec des mots",
|
||||
text = {
|
||||
"{X:mult,C:white}X#1#{} Multi si",
|
||||
"la main jouée",
|
||||
"contient {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_many_lost_minds = {
|
||||
name = "Nombreux sont ceux que ce joker a rendus fous en essayant de le comprendre",
|
||||
text = {
|
||||
"{C:chips}+#1#{} Jetons si",
|
||||
"la main jouée",
|
||||
"contient {C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_annihalation = {
|
||||
name = "La destruction et la fin nette pure et dure de tout ce qui a rendu Balatro sacré",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} Multi si",
|
||||
"la main jouée",
|
||||
"contient {C:attention}#2#",
|
||||
},
|
||||
unlock = {
|
||||
"Gagner une partie",
|
||||
"en jouant l'{E:1,C:attention}#1#",
|
||||
"comme main gagnante",
|
||||
},
|
||||
},
|
||||
j_cry_trick_or_treat = {
|
||||
name = "Des bonbons ou un sort!",
|
||||
text = {
|
||||
|
@ -2720,7 +3024,7 @@ return {
|
|||
text = {
|
||||
"Vendre cette carte",
|
||||
"{C:attention}multiplie{} les valeurs",
|
||||
"des jokers possédés de {C:attention}X1.5{}",
|
||||
"des jokers possédés de {C:attention}X#1#{}",
|
||||
},
|
||||
},
|
||||
j_cry_unity = {
|
||||
|
@ -2883,7 +3187,7 @@ return {
|
|||
},
|
||||
Planet = {
|
||||
c_cry_Klubi = {
|
||||
name = "Klubi",
|
||||
name = "Risti",
|
||||
text = {
|
||||
"({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})",
|
||||
"Améliore",
|
||||
|
@ -2893,7 +3197,7 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_Lapio = {
|
||||
name = "Lapio",
|
||||
name = "Pata",
|
||||
text = {
|
||||
"({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})",
|
||||
"Améliore",
|
||||
|
@ -2912,6 +3216,16 @@ return {
|
|||
"et {C:attention}#3#{}",
|
||||
},
|
||||
},
|
||||
c_cry_voxel = {
|
||||
name = "Voxel",
|
||||
text = {
|
||||
"({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})",
|
||||
"Améliore",
|
||||
"{C:attention}#1#{},",
|
||||
"{C:attention}#2#{},",
|
||||
"et {C:attention}#3#{}",
|
||||
},
|
||||
},
|
||||
c_cry_nstar = {
|
||||
name = "Étoile à neutrons",
|
||||
text = {
|
||||
|
@ -2933,7 +3247,7 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_Sydan = {
|
||||
name = "Sydan",
|
||||
name = "Hertta",
|
||||
text = {
|
||||
"({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})",
|
||||
"Améliore",
|
||||
|
@ -2943,7 +3257,7 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_Timantti = {
|
||||
name = "Timantti",
|
||||
name = "Ruutu",
|
||||
text = {
|
||||
"({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})",
|
||||
"Améliore",
|
||||
|
@ -2998,6 +3312,26 @@ return {
|
|||
"{C:inactive}(Actuellement {X:gold,C:white}X(#3#^asc){C:inactive})",
|
||||
},
|
||||
},
|
||||
c_cry_Timantii = {
|
||||
name = "Ruutu",
|
||||
text = {
|
||||
"({V:1}lvl.#4#{})({V:2}lvl.#5#{})({V:3}lvl.#6#{})",
|
||||
"Améliore",
|
||||
"{C:attention}#1#{},",
|
||||
"{C:attention}#2#{},",
|
||||
"et {C:attention}#3#{}",
|
||||
},
|
||||
},
|
||||
-- give it up for le rien
|
||||
c_cry_nibiru = {
|
||||
name = "Nibiru",
|
||||
text = {
|
||||
"{S:0.8}({S:0.8,V:1}niv.#1#{S:0.8}){} Améliore",
|
||||
"{C:attention}#2#",
|
||||
"{C:mult}+#3#{} Multi et",
|
||||
"{C:chips}+#4#{} Jeton#<s>4#",
|
||||
},
|
||||
},
|
||||
},
|
||||
Sleeve = {
|
||||
sleeve_cry_beige_sleeve = {
|
||||
|
@ -3141,12 +3475,22 @@ return {
|
|||
sleeve_cry_antimatter_sleeve = {
|
||||
name = "Pochette d'Antimatière",
|
||||
text = {
|
||||
"Applique les {C:attention}effects{}",
|
||||
"Applique les {C:attention}effets{}",
|
||||
"et autres {C:attention}effets spéciaux{}",
|
||||
"de toutes les autres pochettes",
|
||||
"{C:red}WIP",
|
||||
},
|
||||
},
|
||||
sleeve_cry_antimatter_sleeve_balanced = {
|
||||
name = "Pochette d'Antimatière",
|
||||
text = {
|
||||
"Applique les {C:attention}effets{}",
|
||||
"et autres {C:attention}effets spéciaux{}",
|
||||
"de {C:attention}toutes{} les pochettes",
|
||||
"battues avec la {C:gold}Mise Or{}",
|
||||
"{C:red}WIP",
|
||||
},
|
||||
},
|
||||
},
|
||||
Spectral = {
|
||||
c_cry_adversary = {
|
||||
|
@ -3170,6 +3514,7 @@ return {
|
|||
text = {
|
||||
"Crée {C:attention}#1#{} copie#<s>1# {C:dark_edition}Négatives{}",
|
||||
"d'un consommable {C:attention}aléatoire",
|
||||
"en votre possession",
|
||||
"{C:inactive,s:0.8}Ne copie pas Chambré{}",
|
||||
},
|
||||
},
|
||||
|
@ -3261,6 +3606,14 @@ return {
|
|||
"sélectionnée",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Mélange", -- c'était "le Mélange qd c'était un tarot"
|
||||
text = {
|
||||
"Transforme un {C:attention}Joker{} ou",
|
||||
"une {C:attention}carte à jouer{} en",
|
||||
"carte {C:dark_edition}Double-face",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Aspiration",
|
||||
text = {
|
||||
|
@ -3683,6 +4036,30 @@ return {
|
|||
"{s:0.8,C:inactive}Badges de Copie exclus",
|
||||
},
|
||||
},
|
||||
tag_cry_clone = {
|
||||
name = "Badge Clone",
|
||||
text = {
|
||||
"Les objets de la boutique coûtent {C:attention}X#1#{}",
|
||||
"plus cher, octroie une {C:attention}Copie{}",
|
||||
"de la prochaîne carte achetée",
|
||||
},
|
||||
},
|
||||
tag_cry_lens = {
|
||||
name = "Badge Optique",
|
||||
text = {
|
||||
"Applique {C:dark_edition}Négatif{}",
|
||||
"à {C:attention}#1#{} consommable#<s>1#",
|
||||
"aléatoire#<s>1#",
|
||||
},
|
||||
},
|
||||
tag_cry_palette_cleanser = {
|
||||
name = "Badge Nettoyant Palette",
|
||||
text = {
|
||||
"Enlève un sticker {C:attention}aléatoire{}",
|
||||
"d'un Joker ou carte à jouer",
|
||||
"{C:attention}aléatoire{}",
|
||||
},
|
||||
},
|
||||
},
|
||||
Tarot = {
|
||||
c_cry_automaton = {
|
||||
|
@ -3701,12 +4078,12 @@ return {
|
|||
"{C:attention}Carte#<s>1# écho",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "le Mélange",
|
||||
c_cry_instability = {
|
||||
name = "Instabilité",
|
||||
text = {
|
||||
"Transforme un {C:attention}Joker{} ou",
|
||||
"une {C:attention}carte à jouer{} en",
|
||||
"carte {C:dark_edition}Double-face",
|
||||
"Transforme jusqu'à {C:attention}#1#{}",
|
||||
"carte#<s>1# sélectionnée#<s>1# en",
|
||||
"{C:attention}Carte#<s>1# abstraites",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
|
@ -3873,6 +4250,9 @@ return {
|
|||
"Les cartes {C:planet}Planète{} apparaissent",
|
||||
"{C:attention}X#1#{} plus souvent",
|
||||
"dans la boutique",
|
||||
"Permet de contrôler le {C:planet}taux d'apparition{}",
|
||||
"{C:planet}des planètes{} dans la boutique",
|
||||
"{C:inactive}(Voir les {C:attention}Infos de la partie{C:inactive})",
|
||||
"Toutes les futures cartes",
|
||||
"{C:planet}Planète{} sont {C:green}gratuites{}",
|
||||
},
|
||||
|
@ -3953,8 +4333,11 @@ return {
|
|||
"Les cartes {C:tarot}Tarot{} apparaissent",
|
||||
"{C:attention}X#1#{} plus souvent",
|
||||
"dans la boutique",
|
||||
"Permet de contrôler le {C:tarot}taux d'apparition{}",
|
||||
"{C:tarot}des Tarots{} dans la boutique",
|
||||
"{C:inactive}(Voir les {C:attention}Infos de la partie{C:inactive})",
|
||||
"Toutes les futures cartes",
|
||||
"{C:tarot}Tarot{} seront {C:green}gratuites{}",
|
||||
"{C:tarot}Tarot{} sont {C:green}gratuites{}",
|
||||
},
|
||||
unlock = {
|
||||
"Acheter {C:attention}100{} cartes",
|
||||
|
@ -4002,12 +4385,21 @@ return {
|
|||
text = {
|
||||
"{C:attention}+#1#{} limite",
|
||||
"de sélection de cartes",
|
||||
"{C:inactive,s:0.7}NOTE: Aura plus de{}",
|
||||
"{C:inactive,s:0.7}fonctionnalités plus tard{}",
|
||||
"Toutes les cartes sélectionnées contribuent",
|
||||
"aux {C:attention}Mains Ascensionées{}",
|
||||
},
|
||||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "La Roue de Fortune",
|
||||
text = {
|
||||
"{C:green}#1# chance(s) sur #2#{} d'ajouter une édition",
|
||||
"{C:dark_edition}Brillantes{}, {C:dark_edition}Holographique{} ou",
|
||||
"{C:dark_edition}Polychrome{}",
|
||||
"à un {C:attention}Joker au hasard",
|
||||
},
|
||||
},
|
||||
disabled = {
|
||||
name = "Désactivé",
|
||||
text = {
|
||||
|
@ -4062,6 +4454,16 @@ return {
|
|||
text = {
|
||||
"Quand ce joker est {C:cry_code}déclenché{},",
|
||||
"déclenche {C:cry_code}#1#",
|
||||
"{C:inactive}Ne marche pas avec toutes les cartes{}",
|
||||
"{C:inactive}mais tous les jokers peuvent déclencher l'autre{}",
|
||||
},
|
||||
},
|
||||
cry_global_sticker = {
|
||||
name = "Global",
|
||||
text = {
|
||||
"Cette carte est {C:cry_code}prioritaire",
|
||||
"lorsque des cartes sont tirées,",
|
||||
"si possible",
|
||||
},
|
||||
},
|
||||
cry_flickering = {
|
||||
|
@ -4079,6 +4481,22 @@ return {
|
|||
"{C:attention}#1#{} déclenchements",
|
||||
},
|
||||
},
|
||||
cry_function_sticker = {
|
||||
name = "Fonction://",
|
||||
text = {
|
||||
"Crée {C:cry_code}#1#{}",
|
||||
"à l'utilisation",
|
||||
},
|
||||
},
|
||||
cry_function_sticker_desc = { --for function:// card
|
||||
name = "Fonction://",
|
||||
text = {
|
||||
"Crée le consommable",
|
||||
"{C:cry_code}Fonction://{} suivant",
|
||||
"{C:inactive}Actuellement #1#, #2# puis #3#{}",
|
||||
},
|
||||
},
|
||||
|
||||
cry_possessed = {
|
||||
name = "Possédé",
|
||||
text = {
|
||||
|
@ -4103,10 +4521,11 @@ return {
|
|||
},
|
||||
},
|
||||
ev_cry_choco0 = {
|
||||
name = "",
|
||||
name = "Événements possibles",
|
||||
text = {
|
||||
"Les détails d'un {C:cry_ascendant,E:1}événement",
|
||||
"seront affichés ici",
|
||||
"{T:ev_cry_choco1}1{} {T:ev_cry_choco2}2{} {T:ev_cry_choco3}3{} {T:ev_cry_choco4}4{} {T:ev_cry_choco5}5{}",
|
||||
"{T:ev_cry_choco6}6{} {T:ev_cry_choco7}7{} {T:ev_cry_choco8}8{} {T:ev_cry_choco9}9{} {T:ev_cry_choco10}10{}",
|
||||
"{C:inactive}(Survolez pour plus d'informations)",
|
||||
},
|
||||
},
|
||||
ev_cry_choco1 = {
|
||||
|
@ -4368,6 +4787,15 @@ return {
|
|||
"{C:attention}Joker Mème{} parmi {C:attention}#2#{}",
|
||||
},
|
||||
},
|
||||
p_cry_baneful_1 = {
|
||||
name = "Paquet Bouffon Maléfique",
|
||||
text = {
|
||||
"Jusqu'à {C:attention}#1#{} Joker#<s>1#",
|
||||
"parmi {C:attention}#2#{} Joker#<s>2# {X:cry_cursed,C:white}Maudit#<s>2#{}",
|
||||
"{C:attention}Skipping{} will {C:red}banish{}",
|
||||
"{C:attention}rightmost{} owned Joker",
|
||||
},
|
||||
},
|
||||
undiscovered_code = {
|
||||
name = "Non découvert",
|
||||
text = {
|
||||
|
@ -4410,6 +4838,12 @@ return {
|
|||
'{C:inactive,s:0.7}"Je déteste cette carte" - SDM_0, 2024{}{}',
|
||||
},
|
||||
},
|
||||
cry_multiuse = {
|
||||
name = "m",
|
||||
text = {
|
||||
"{C:inactive}Réutilisable: ({C:cry_code}#1#{C:inactive} utilisations restantes)",
|
||||
},
|
||||
},
|
||||
},
|
||||
Unique = {
|
||||
c_cry_potion = {
|
||||
|
@ -4496,6 +4930,7 @@ return {
|
|||
["cry_UltPair"] = "Super Paire",
|
||||
["cry_WholeDeck"] = Cryptid_config.family_mode and "Jeu complet" or "un putain de jeu complet",
|
||||
["cry-Cluster Bulwark"] = "Capharna-rempart",
|
||||
["cry_None"] = "Rien",
|
||||
},
|
||||
poker_hand_descriptions = {
|
||||
["cry_Bulwark"] = {
|
||||
|
@ -4515,6 +4950,24 @@ return {
|
|||
"d'un jeu standard de 52 cartes.",
|
||||
"Je sais pas quoi dire, mais tu es fou.",
|
||||
},
|
||||
["cry_None"] = { "Une main contenant 0 cartes" },
|
||||
|
||||
["cry_Declare0"] = { "Compte toujours comme une Quinte" },
|
||||
["cry_Declare1"] = { "Compte toujours comme une Couleur" },
|
||||
["cry_Declare2"] = { "Compte toujours comme un Full" },
|
||||
|
||||
["cry_Declare0_suitless"] = {
|
||||
"Compte toujours comme une Quinte",
|
||||
"La main n'a pas besoin de couleurs particulières",
|
||||
},
|
||||
["cry_Declare1_suitless"] = {
|
||||
"Compte toujours comme une Couleur",
|
||||
"La main n'a pas besoin de couleurs particulières",
|
||||
},
|
||||
["cry_Declare2_suitless"] = {
|
||||
"Compte toujours comme un Full",
|
||||
"La main n'a pas besoin de couleurs particulières",
|
||||
},
|
||||
},
|
||||
achievement_names = {
|
||||
ach_cry_ace_in_crash = "ACE de poche",
|
||||
|
@ -4540,6 +4993,11 @@ return {
|
|||
ach_cry_pin = "L'épingle de la honte",
|
||||
ach_cry_youre_fucking_kidding = Cryptid_config.family_mode and "J'ai plus besoin de ça"
|
||||
or "Tu te fous de moi",
|
||||
ach_cry_decked = "Remis en jeu",
|
||||
ach_cry_despaired = "Déparaillé",
|
||||
ach_cry_stoned = "Solide",
|
||||
ach_cry_fucked = "Foutu",
|
||||
ach_cry_technically_positive = "Techniquement positif",
|
||||
},
|
||||
achievement_descriptions = {
|
||||
ach_cry_ace_in_crash = 'check_for_unlock({type = "ace_in_crash"})',
|
||||
|
@ -4558,12 +5016,17 @@ return {
|
|||
ach_cry_patience_virtue = "Attendre 2 minutes face à la Boucle Lavande avant de jouer la première main, puis battre la blinde",
|
||||
ach_cry_perfectly_balanced = "Battre le Jeu Très Équilibré avec la Mise Ascendante",
|
||||
ach_cry_pull_request = "Faire ://ENGAGER apparaître le même joker qu'il a détruit",
|
||||
ach_cry_traffic_jam = "Battre tous les challenges Heure de Pointe",
|
||||
ach_cry_traffic_jam = "Battre tous les challenges Heure de pointe",
|
||||
ach_cry_ult_full_skip = "Gagner en 1 tour",
|
||||
ach_cry_used_crash = "Utiliser ://CRASH",
|
||||
ach_cry_what_have_you_done = "Supprimer ou sacrifier un Joker exotique",
|
||||
ach_cry_pin = "Perdre une partie face à l'Épingle",
|
||||
ach_cry_youre_fucking_kidding = "Défausser " .. localize("cry_WholeDeck", "poker_hands"),
|
||||
ach_cry_decked = "Monter " .. localize("cry_WholeDeck", "poker_hands") .. " au niveau 5252",
|
||||
ach_cry_despaired = "Monter " .. localize("cry_UltPair", "poker_hands") .. " au niveau 2222",
|
||||
ach_cry_fucked = "Monter " .. localize("cry_Clusterfuck", "poker_hands") .. " au niveau 69",
|
||||
ach_cry_stoned = "Monter " .. localize("cry_Bulwark", "poker_hands") .. " au niveau 420",
|
||||
ach_cry_technically_positive = "Obtenir un Joker Négatif négatif",
|
||||
},
|
||||
challenge_names = {
|
||||
c_cry_ballin = "Ballin'",
|
||||
|
@ -4617,6 +5080,8 @@ return {
|
|||
|
||||
k_cry_program_pack = "Paquet Programme",
|
||||
k_cry_meme_pack = "Paquet Meme",
|
||||
k_cry_baneful_pack = "Paquet Bouffon Maléfique",
|
||||
cry_baneful_warning = "Passer bannira le Joker le plus à droite",
|
||||
|
||||
cry_critical_hit_ex = "Coup critique!",
|
||||
cry_critical_miss_ex = "Échec critique!",
|
||||
|
@ -4631,16 +5096,19 @@ return {
|
|||
cry_debuff_oldflint = "Pas de Couleur",
|
||||
cry_debuff_oldmark = "No hands containing a Pair",
|
||||
cry_debuff_obsidian_orb = "Applique les capacités de tous les boss battus",
|
||||
cry_blind_baneful_pack = "Après la manche, ouvre un Paquet Bouffon Maléfique",
|
||||
|
||||
cry_tax_placeholder = "(X0.4 taille de la blinde)",
|
||||
cry_joke_placeholder = "(multiple de 8)",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "Jetons",
|
||||
k_content_set = "Set à thème",
|
||||
b_content_sets = "Sets à thème",
|
||||
--Why aren't these in vanilla?
|
||||
b_tag = "Badge",
|
||||
b_blind = "Blinde",
|
||||
rush_hour_reminder = "Activez l'Horloge et la Boucle Lavande pour jouer à Heure de pointe",
|
||||
|
||||
b_tarot_rate = "Taux de tarot",
|
||||
b_planet_rate = "Taux de planète",
|
||||
|
@ -4668,6 +5136,7 @@ return {
|
|||
|
||||
b_flip = "RETOURNER",
|
||||
b_merge = "FUSIONNER",
|
||||
b_store = "STOCKER",
|
||||
|
||||
cry_asc_hands = "Mains Asc.",
|
||||
cry_p_star = "Étoile",
|
||||
|
@ -4679,6 +5148,7 @@ return {
|
|||
cry_again_q = "Encore?",
|
||||
cry_curse = "Malédiction",
|
||||
cry_curse_ex = "Malédiction!",
|
||||
cry_demicolon = "Demi-déclenché!",
|
||||
cry_sobbing = "À l'aide...",
|
||||
cry_gaming = "Gaming",
|
||||
cry_gaming_ex = "Gaming!",
|
||||
|
@ -4697,6 +5167,7 @@ return {
|
|||
cry_unredeemed = "Plus échangé...",
|
||||
cry_active = "Actif",
|
||||
cry_inactive = "Inactif",
|
||||
cry_divorced = "Divorcé!",
|
||||
|
||||
k_disable_music = "Désactiver la musique",
|
||||
|
||||
|
@ -4707,6 +5178,7 @@ return {
|
|||
k_planet_disc = "Disque Circumstellaire",
|
||||
k_planet_satellite = "Satellites Naturels",
|
||||
k_planet_universe = Cryptid_config.family_mode and "Univers" or "Le putain d'univers",
|
||||
k_planet_nibiru = "Inexistante",
|
||||
|
||||
cry_notif_jimball_1 = "Jimboule",
|
||||
cry_notif_jimball_2 = "Notice de droits d'auteur",
|
||||
|
@ -4747,6 +5219,7 @@ return {
|
|||
unique = "Unique",
|
||||
cry_rigged = "Truqué",
|
||||
cry_hooked = "Accroché",
|
||||
cry_global_sticker = "Global",
|
||||
cry_flickering = "Luisant",
|
||||
cry_possessed = "Possédé",
|
||||
|
||||
|
|
|
@ -1222,7 +1222,7 @@ return {
|
|||
"{C:attention}first discard{} of each round",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Megg",
|
||||
text = {
|
||||
"Sell this card to create",
|
||||
|
@ -1236,7 +1236,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Mult for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1245,7 +1245,7 @@ return {
|
|||
"{C:chips}+#1#{} Chips for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2045,6 +2045,14 @@ return {
|
|||
"card in your hand",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Vacuum",
|
||||
text = {
|
||||
|
@ -2477,14 +2485,7 @@ return {
|
|||
"into an {C:attention}Echo Card",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
|
||||
c_cry_theblessing = {
|
||||
name = "The Blessing",
|
||||
text = {
|
||||
|
@ -2716,6 +2717,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "The Wheel of Fortune",
|
||||
text = {
|
||||
"{C:green}#1# dalam #2#{} peluang untuk menambah",
|
||||
"edisi {C:dark_edition}Foil{}, {C:dark_edition}Holographic{}, dan",
|
||||
"{C:dark_edition}Polychrome{}",
|
||||
"menghancurkan sebuah {C:attention}Joker secara acak",
|
||||
},
|
||||
},
|
||||
banana = {
|
||||
name = "Banana",
|
||||
text = {
|
||||
|
@ -3041,6 +3051,7 @@ return {
|
|||
cry_debuff_obsidian_orb = "Applies abilities of all defeated bosses",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "chip",
|
||||
b_code_cards = "Code Cards",
|
||||
b_pull = "PULL",
|
||||
cry_hooked_ex = "Hooked!",
|
||||
|
|
|
@ -1222,7 +1222,7 @@ return {
|
|||
"{C:attention}first discard{} of each round",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Megg",
|
||||
text = {
|
||||
"Sell this card to create",
|
||||
|
@ -1236,7 +1236,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Mult for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1245,7 +1245,7 @@ return {
|
|||
"{C:chips}+#1#{} Chips for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2045,6 +2045,14 @@ return {
|
|||
"card in your hand",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Vacuum",
|
||||
text = {
|
||||
|
@ -2477,14 +2485,6 @@ return {
|
|||
"into an {C:attention}Echo Card",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
name = "The Blessing",
|
||||
text = {
|
||||
|
@ -2716,6 +2716,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "運命の輪",
|
||||
text = {
|
||||
"{C:green}#2#分の#1#{} の確率で",
|
||||
"ランダムな {C:attention}ジョーカー{} に",
|
||||
"{C:dark_edition}フォイル{}、 {C:dark_edition}ホログラム{}",
|
||||
"{C:dark_edition}ポリクローム{} エディションのいずれかを加える",
|
||||
},
|
||||
},
|
||||
banana = {
|
||||
name = "Banana",
|
||||
text = {
|
||||
|
@ -3041,6 +3050,7 @@ return {
|
|||
cry_debuff_obsidian_orb = "Applies abilities of all defeated bosses",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "チップ",
|
||||
b_code_cards = "Code Cards",
|
||||
b_pull = "PULL",
|
||||
cry_hooked_ex = "Hooked!",
|
||||
|
|
|
@ -1225,7 +1225,7 @@ return {
|
|||
"{C:attention}first discard{} of each round",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Megg",
|
||||
text = {
|
||||
"Sell this card to create",
|
||||
|
@ -1239,7 +1239,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Mult for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1248,7 +1248,7 @@ return {
|
|||
"{C:chips}+#1#{} Chips for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2049,6 +2049,14 @@ return {
|
|||
"card in your hand",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Vacuum",
|
||||
text = {
|
||||
|
@ -2481,14 +2489,6 @@ return {
|
|||
"into an {C:attention}Echo Card",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
name = "The Blessing",
|
||||
text = {
|
||||
|
@ -2720,6 +2720,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "Het rad van fortuin",
|
||||
text = {
|
||||
"Een kans van {C:green}#1# op #2#{} om",
|
||||
"{C:dark_edition}folie{}, {C:dark_edition}holografische{} of",
|
||||
"{C:dark_edition}polychrome{} editie toe te voegen",
|
||||
"aan een willekeurige {C:attention}Joker",
|
||||
},
|
||||
},
|
||||
banana = {
|
||||
name = "Banana",
|
||||
text = {
|
||||
|
@ -3044,6 +3053,7 @@ return {
|
|||
cry_debuff_obsidian_orb = "Applies abilities of all defeated bosses",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "fiches",
|
||||
b_code_cards = "Code Cards",
|
||||
b_pull = "PULL",
|
||||
cry_hooked_ex = "Hooked!",
|
||||
|
|
|
@ -52,8 +52,8 @@ return {
|
|||
name = "Krytyczna Talia",
|
||||
text = {
|
||||
"Po każdej zagranej ręce,",
|
||||
"{C:green}#1# na 4{} szans na mnożnik {X:dark_edition,C:white} ^2 {}",
|
||||
"{C:green}#1# na 8{} szans na mnożnik {X:dark_edition,C:white} ^0.5 {}",
|
||||
"{C:green}#1# na #2#{} szans na mnożnik {X:dark_edition,C:white} ^2 {}",
|
||||
"{C:green}#1# na #3#{} szans na mnożnik {X:dark_edition,C:white} ^0.5 {}",
|
||||
},
|
||||
},
|
||||
b_cry_encoded = {
|
||||
|
@ -136,7 +136,7 @@ return {
|
|||
name = "Legendarna Talia",
|
||||
text = {
|
||||
"Rozpoczynasz podejście z {C:legendary}legendarnym{C:legendary} jokerem",
|
||||
"{C:green}1 in 5{} szans na dodanie kolejnego",
|
||||
"{C:green}#1# in #2#{} szans na dodanie kolejnego",
|
||||
"po pokonaniu przeszkadzajki bossa",
|
||||
"{C:inactive}(wymaga miejsca){}",
|
||||
},
|
||||
|
@ -1426,7 +1426,7 @@ return {
|
|||
"{C:attention}pierwsza zrzutka{} rundy",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "M-Jajko",
|
||||
text = {
|
||||
"Sprzedaj tę kartę, aby stworzyć",
|
||||
|
@ -1448,7 +1448,7 @@ return {
|
|||
"Mnoż. {X:mult,C:white}X#1#{} za każdego członka",
|
||||
"discordowego serwera {C:attention}Cryptid{}",
|
||||
"{C:inactive}(obecny mnoż.: {X:mult,C:white}X#2#{C:inactive}",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1457,7 +1457,7 @@ return {
|
|||
"{C:chips}+#1#{} za każdego członka",
|
||||
"discordowego serwera {C:attention}Cryptid{}",
|
||||
"{C:inactive}(obecnie: {C:chips}+#2#{C:inactive} żet.)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2475,6 +2475,14 @@ return {
|
|||
"karty w ręcę",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Wtopienie",
|
||||
text = {
|
||||
"Wybierz {C:attention}jokera{} lub",
|
||||
"{C:attention}kartę rozgrywającą{}, aby",
|
||||
"stała się {C:dark_edition}Dwustronna",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Próżnia",
|
||||
text = {
|
||||
|
@ -2907,14 +2915,6 @@ return {
|
|||
"do: {C:attention}Karta Echa",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Wtopienie",
|
||||
text = {
|
||||
"Wybierz {C:attention}jokera{} lub",
|
||||
"{C:attention}kartę rozgrywającą{}, aby",
|
||||
"stała się {C:dark_edition}Dwustronna",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
name = "Błogosławieństwo",
|
||||
text = {
|
||||
|
@ -3141,6 +3141,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "Koło Fortuny",
|
||||
text = {
|
||||
"{C:green}#1# na #2#{} szans zamiany",
|
||||
"losowego {C:attention}jokera na jego wersję",
|
||||
"{C:dark_edition}w folii{}, {C:dark_edition}holograficzną{} lub",
|
||||
"{C:dark_edition}polichromowaną{}",
|
||||
},
|
||||
},
|
||||
banana = {
|
||||
name = "Bananowy",
|
||||
text = {
|
||||
|
@ -3653,6 +3662,7 @@ return {
|
|||
cry_debuff_obsidian_orb = "Aplikuje zdolności wszystkich pokonanych bossów",
|
||||
|
||||
k_code = "Kod",
|
||||
k_chips = "żet",
|
||||
k_unique = "Unikalny",
|
||||
b_code_cards = "Karty Kodowe",
|
||||
b_unique_cards = "Unikalne Karty",
|
||||
|
|
|
@ -65,8 +65,8 @@ return {
|
|||
name = "Baralho Crítico",
|
||||
text = {
|
||||
"Após cada mão jogada,",
|
||||
"{C:green}#1# em 4{} de chance para {X:dark_edition,C:white} ^2 {} Mult",
|
||||
"{C:green}#1# em 8{} de chance para {X:dark_edition,C:white} ^0.5 {} Mult",
|
||||
"{C:green}#1# em #2#{} de chance para {X:dark_edition,C:white} ^2 {} Mult",
|
||||
"{C:green}#1# em #3#{} de chance para {X:dark_edition,C:white} ^0.5 {} Mult",
|
||||
},
|
||||
},
|
||||
b_cry_e_deck = {
|
||||
|
@ -188,7 +188,7 @@ return {
|
|||
name = "Baralho Lendário",
|
||||
text = {
|
||||
"Começe com um Curinga {C:legendary}Lendário{C:legendary}",
|
||||
"{C:green}1 em 5{} de chance para criar outro",
|
||||
"{C:green}#1# em #2#{} de chance para criar outro",
|
||||
"quando o Blind Chefe é derrotado",
|
||||
"{C:inactive}(precisa ter espaço){}",
|
||||
},
|
||||
|
@ -645,7 +645,7 @@ return {
|
|||
set_cry_poker_hand_stuff = {
|
||||
name = "Poker Hand Stuff",
|
||||
text = {
|
||||
"Add 4 new {C:attention}poker hands",
|
||||
"Add 5 new {C:attention}poker hands",
|
||||
"and enable {C:attention}Ascended hands",
|
||||
},
|
||||
},
|
||||
|
@ -1894,7 +1894,7 @@ return {
|
|||
"{C:attention}primeiro descarte{} de cada rodada",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Movo",
|
||||
text = {
|
||||
"Venda esta carta para criar",
|
||||
|
@ -1916,7 +1916,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Mult para cada membro",
|
||||
"no {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Atualmente {X:mult,C:white}X#2#{C:inactive} Mult)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1925,7 +1925,7 @@ return {
|
|||
"{C:chips}+#1#{} Fichas#<s>1# para cada menbro",
|
||||
"no {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Atualmente {C:chips}+#2#{C:inactive} Ficha#<s>2#)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo_balanced = {
|
||||
|
@ -1934,7 +1934,7 @@ return {
|
|||
"{C:chips}+#1#{} Ficha#<s>1# para cada {C:attention}8{} membros",
|
||||
"no {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Atualmente {C:chips}+#2#{C:inactive} Ficha#<s>2#)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -3112,6 +3112,14 @@ return {
|
|||
"em sua mão",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Fusão",
|
||||
text = {
|
||||
"Selecione um {C:attention}Curinga{} ou",
|
||||
"{C:attention}carta de jogo{} para",
|
||||
"se tornar {C:dark_edition}Duas Caras",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Vácuo",
|
||||
text = {
|
||||
|
@ -3555,14 +3563,6 @@ return {
|
|||
"em uma {C:attention}Carta Eco",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Fusão",
|
||||
text = {
|
||||
"Selecione um {C:attention}Curinga{} ou",
|
||||
"{C:attention}carta de jogo{} para",
|
||||
"se tornar {C:dark_edition}Duas Caras",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
name = "A Benção",
|
||||
text = {
|
||||
|
@ -3861,6 +3861,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "A Roda da Fortuna",
|
||||
text = {
|
||||
"Chance de {C:green}#1# em #2#{} de adicionar",
|
||||
"edição {C:dark_edition}Laminada{}, {C:dark_edition}Holográfica{} ou",
|
||||
"{C:dark_edition}Policromática{}",
|
||||
"a um {C:attention}Curinga aleatório",
|
||||
},
|
||||
},
|
||||
disabled = {
|
||||
name = "Desativado",
|
||||
text = {
|
||||
|
@ -4483,6 +4492,7 @@ return {
|
|||
cry_joke_placeholder = "(multiple of 8)",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "fichas",
|
||||
k_content_set = "Thematic Set",
|
||||
b_content_sets = "Thematic Sets",
|
||||
--Why aren't these in vanilla?
|
||||
|
|
|
@ -73,20 +73,20 @@ return {
|
|||
},
|
||||
},
|
||||
b_cry_conveyor = {
|
||||
name = "Conveyor Deck",
|
||||
name = "Конвейерная колода",
|
||||
text = {
|
||||
"Jokers may {C:attention}not{} be moved",
|
||||
"At start of round,",
|
||||
"{C:attention}duplicate{} rightmost Joker",
|
||||
"and {C:attention}destroy{} leftmost Joker",
|
||||
"Джокеров {C:attention}нельзя{} двигать",
|
||||
"в начале раунда,",
|
||||
"{C:attention}дублирует{} самого правого джокера",
|
||||
"и {C:attention}уничтожает{} самого левого джокера",
|
||||
},
|
||||
},
|
||||
b_cry_critical = {
|
||||
name = "Критическая колода",
|
||||
text = {
|
||||
"После каждой сыгранной руки,",
|
||||
"{C:green}#1# к 4{} шанс для {X:dark_edition,C:white} ^2 {} Множ",
|
||||
"{C:green}#1# к 8{} шанс для {X:dark_edition,C:white} ^0.5 {} Множ",
|
||||
"{C:green}#1# к #2#{} шанс для {X:dark_edition,C:white} ^2 {} Множ",
|
||||
"{C:green}#1# к #3#{} шанс для {X:dark_edition,C:white} ^0.5 {} Множ",
|
||||
},
|
||||
},
|
||||
b_cry_encoded = {
|
||||
|
@ -108,7 +108,7 @@ return {
|
|||
},
|
||||
},
|
||||
b_cry_glowing = {
|
||||
name = "Glowing Deck",
|
||||
name = "Светящаяся колода",
|
||||
text = {
|
||||
"Умножает значения всех",
|
||||
"джокеров на {X:dark_edition,C:white} X1.25 {}",
|
||||
|
@ -646,21 +646,21 @@ return {
|
|||
j_cry_bonk = {
|
||||
name = "Bonk",
|
||||
text = {
|
||||
"Each {C:attention}Joker{} gives {C:chips}+#1#{} Chips",
|
||||
"Increase amount by {C:chips}+#2#{} if",
|
||||
"{C:attention} poker hand{} is a {C:attention}#3#{}",
|
||||
"{C:inactive,s:0.8}Jolly Jokers give{} {C:chips,s:0.8}+#4#{} {C:inactive,s:0.8}Chips instead{}",
|
||||
"Каждый {C:attention}Джокер{} дает {C:chips}+#1#{} фишек",
|
||||
"Увеличивает значение на {C:chips}+#2#{} если",
|
||||
"{C:attention}покерная рука{} это {C:attention}#3#{}",
|
||||
"{C:inactive,s:0.8}Веселые Джокеры вместо этого дают{} {C:chips,s:0.8}+#4#{} {C:inactive,s:0.8}фишек{}",
|
||||
},
|
||||
},
|
||||
j_cry_bonusjoker = {
|
||||
name = "Bonus Joker",
|
||||
name = "Бонусный Джокер",
|
||||
text = {
|
||||
"{C:green}#1# in #2#{} chance for each",
|
||||
"played {C:attention}Bonus{} card to increase",
|
||||
"{C:attention}Joker{} or {C:attention}Consumable slots",
|
||||
"by {C:dark_edition}1{} when scored",
|
||||
"{C:red}Works twice per round",
|
||||
"{C:inactive,s:0.8}(Equal chance for each){}",
|
||||
"{C:green}#1# из #2#{} шанс что каждая",
|
||||
"сыгранная {C:attention}Бонусная{} карта увеличит",
|
||||
"{C:attention}слоты для {C:attention}джокеров{} или {C:attention}расходников",
|
||||
"на {C:dark_edition}1{} когда засчитана",
|
||||
"{C:red}Работает дважды за раунд",
|
||||
"{C:inactive,s:0.8}(Равный шанс у каждой){}",
|
||||
},
|
||||
},
|
||||
j_cry_booster = {
|
||||
|
@ -754,11 +754,11 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_coin = {
|
||||
name = "Crypto Coin",
|
||||
name = "Крипто Монета",
|
||||
text = {
|
||||
"Earn between",
|
||||
"{C:money}$#1#{} and {C:money}$#2#{} for",
|
||||
"each Joker {C:attention}sold{}",
|
||||
"Получите между",
|
||||
"{C:money}$#1#{} и {C:money}$#2#{} за",
|
||||
"каждого {C:attention}проданного{} джокера",
|
||||
},
|
||||
},
|
||||
j_cry_compound_interest = {
|
||||
|
@ -771,62 +771,62 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_copypaste = {
|
||||
name = "Copy/Paste",
|
||||
name = "Копировать/Вставить",
|
||||
text = {
|
||||
"When a {C:cry_code}Code{} card is used,",
|
||||
"{C:green}#1# in #2#{} chance to add a copy",
|
||||
"to your consumable area",
|
||||
"{C:inactive}(Must have room)",
|
||||
"Когда карта {C:cry_code}Кода{} использована,",
|
||||
"{C:green}#1# из #2#{} шанс создает её копию",
|
||||
"в вашей зоне расходуемых",
|
||||
"{C:inactive}(Должно быть место)",
|
||||
},
|
||||
},
|
||||
j_cry_crustulum = {
|
||||
name = "Crustulum",
|
||||
text = {
|
||||
"This Joker gains {C:chips}+#2#{} Chips",
|
||||
"per {C:attention}reroll{} in the shop",
|
||||
"{C:green}All rerolls are free{}",
|
||||
"{C:inactive}(Currently {C:chips}+#1#{C:inactive} chips)",
|
||||
"Этот джокер дает {C:chips}+#2#{} фишек",
|
||||
"за каждый {C:attention}переброс{} в лавке",
|
||||
"{C:green}Все перебросы бесплатные{}",
|
||||
"{C:inactive}(Сейчас {C:chips}+#1#{C:inactive} фишек)",
|
||||
},
|
||||
},
|
||||
j_cry_cryptidmoment = {
|
||||
name = "M Chain",
|
||||
name = "Цепь М",
|
||||
text = {
|
||||
"Sell this card to",
|
||||
"add {C:money}$#1#{} of {C:attention}sell value{}",
|
||||
"to every {C:attention}Joker{} card",
|
||||
"Продайте эту карту",
|
||||
"чтобы добавить {C:money}$#1#{} {C:attention}к цене продажи{}",
|
||||
"каждого {C:attention}джокера{}",
|
||||
},
|
||||
},
|
||||
j_cry_cube = {
|
||||
name = "Cube",
|
||||
name = "Куб",
|
||||
text = {
|
||||
"{C:chips}+#1#{} Chips",
|
||||
"{C:chips}+#1#{} фишек",
|
||||
},
|
||||
},
|
||||
j_cry_curse_sob = {
|
||||
name = "Sob",
|
||||
text = {
|
||||
"{C:edition,E:1}you cannot{} {C:cry_ascendant,E:1}run...{}",
|
||||
"{C:edition,E:1}you cannot{} {C:cry_ascendant,E:1}hide...{}",
|
||||
"{C:dark_edition,E:1}you cannot escape...{}",
|
||||
"{C:inactive}(Must have room){}",
|
||||
"{C:edition,E:1}ты не можешь{} {C:cry_ascendant,E:1}бежать...{}",
|
||||
"{C:edition,E:1}ты не можешь{} {C:cry_ascendant,E:1}прятаться...{}",
|
||||
"{C:dark_edition,E:1}ты не можешь...{}",
|
||||
"{C:inactive}(Должно быть место){}",
|
||||
},
|
||||
},
|
||||
j_cry_cursor = {
|
||||
name = "Cursor",
|
||||
name = "Курсор",
|
||||
text = {
|
||||
"This Joker gains {C:chips}+#2#{} Chips",
|
||||
"for each card {C:attention}purchased{}",
|
||||
"{C:inactive}(Currently {C:chips}+#1#{C:inactive} Chips)",
|
||||
"Этот джокер дает {C:chips}+#2#{} фишек",
|
||||
"за каждую {C:attention}купленную{} карта",
|
||||
"{C:inactive}(Сейчас {C:chips}+#1#{C:inactive} фишек)",
|
||||
},
|
||||
},
|
||||
j_cry_cut = {
|
||||
name = "Cut",
|
||||
name = "Разрез",
|
||||
text = {
|
||||
"This Joker destroys",
|
||||
"a random {C:cry_code}Code{} card",
|
||||
"and gains {X:mult,C:white} X#1# {} Mult",
|
||||
"at the end of the {C:attention}shop{}",
|
||||
"{C:inactive}(Currently {X:mult,C:white} X#2# {C:inactive} Mult)",
|
||||
"Этот джокер уничтожает",
|
||||
"случайную карту {C:cry_code}Кода{}",
|
||||
"и получает {X:mult,C:white} X#1# {} множ.",
|
||||
"в конце {C:attention}магазина{}",
|
||||
"{C:inactive}(Сейчас {X:mult,C:white} X#2# {C:inactive} множ.)",
|
||||
},
|
||||
},
|
||||
j_cry_delirious = {
|
||||
|
@ -939,10 +939,10 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_exoplanet = {
|
||||
name = "Exoplanet",
|
||||
name = "Экзопланета",
|
||||
text = {
|
||||
"{C:dark_edition}Holographic{} cards",
|
||||
"each give {C:mult}+#1#{} Mult",
|
||||
"{C:dark_edition}Голографические{} карты",
|
||||
"дают {C:mult}+#1#{} множ.",
|
||||
},
|
||||
},
|
||||
j_cry_exponentia = {
|
||||
|
@ -1027,7 +1027,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_giggly = {
|
||||
name = "Absurd Joker",
|
||||
name = "Абсурдный джокер",
|
||||
text = {
|
||||
"{C:red}+#1#{} Mult if played",
|
||||
"hand contains",
|
||||
|
@ -1035,7 +1035,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_goldjoker = {
|
||||
name = "Gold Joker",
|
||||
name = "Золотой джокер",
|
||||
text = {
|
||||
"Earn {C:money}#1#%{} of total",
|
||||
"money at end of round",
|
||||
|
@ -1062,7 +1062,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_happyhouse = {
|
||||
name = "Happy House",
|
||||
name = "Счастливый дом",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} Mult only after",
|
||||
"playing {C:attention}114{} hands{}",
|
||||
|
@ -1071,11 +1071,11 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_home = {
|
||||
name = "The Home",
|
||||
name = "Дом",
|
||||
text = {
|
||||
"{X:mult,C:white} X#1# {} Mult if played",
|
||||
"hand contains",
|
||||
"a {C:attention}#2#",
|
||||
"{X:mult,C:white} X#1# {} множ. если сыгранная",
|
||||
"содержит",
|
||||
"{C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_hunger = {
|
||||
|
@ -1105,7 +1105,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_jollysus = {
|
||||
name = "Jolly Joker?",
|
||||
name = "Веселый джокер?",
|
||||
text = {
|
||||
"Create a {C:dark_edition}Jolly{} Joker",
|
||||
"when a Joker is {C:attention}sold{}",
|
||||
|
@ -1115,20 +1115,20 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_kidnap = {
|
||||
name = "Kidnapping",
|
||||
name = "Похищение",
|
||||
text = {
|
||||
"Earn {C:money}$#2#{} at end of round",
|
||||
"Increase payout by {C:money}$#1#{}",
|
||||
"when a {C:attention}Type Mult{} or",
|
||||
"{C:attention}Type Chips{} Joker is sold",
|
||||
"Получайте {C:money}$#2#{} в конце раунда",
|
||||
"Выплата увеличивается на {C:money}$#1#{}",
|
||||
"когда {C:attention}Тип множ.{} или",
|
||||
"{C:attention}Тип фишек{} джокер продан",
|
||||
},
|
||||
},
|
||||
j_cry_kooky = {
|
||||
name = "Kooky Joker",
|
||||
text = {
|
||||
"{C:red}+#1#{} Mult if played",
|
||||
"hand contains",
|
||||
"a {C:attention}#2#",
|
||||
"{C:red}+#1#{} множ. если сыгранная",
|
||||
"рука содержит",
|
||||
"{C:attention}#2#",
|
||||
},
|
||||
},
|
||||
j_cry_krustytheclown = {
|
||||
|
@ -1141,27 +1141,27 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_kscope = {
|
||||
name = "Kaleidoscope",
|
||||
name = "Калейдоскоп",
|
||||
text = {
|
||||
"Add {C:dark_edition}Polychrome{} to",
|
||||
"a random {C:attention}Joker{} when",
|
||||
"{C:attention}Boss Blind{} is defeated",
|
||||
"Добавляет {C:dark_edition}Полихром{} к",
|
||||
"случайному {C:attention}джокеру{} когда",
|
||||
"{C:attention}блайнд босс{} побежден",
|
||||
},
|
||||
},
|
||||
j_cry_lightupthenight = {
|
||||
name = "Light Up the Night",
|
||||
text = {
|
||||
"Each played {C:attention}7{} or {C:attention}2{}",
|
||||
"gives {X:mult,C:white}X#1#{} Mult when scored",
|
||||
"Каждая сыгранная {C:attention}7{} или {C:attention}2{}",
|
||||
"дает {X:mult,C:white}X#1#{} множ. когда подсчитана",
|
||||
},
|
||||
},
|
||||
j_cry_longboi = {
|
||||
name = "Monster",
|
||||
name = "Монстр",
|
||||
text = {
|
||||
"Give future copies of",
|
||||
"this Joker {X:mult,C:white}X#1#{} Mult",
|
||||
"at end of round",
|
||||
"{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult){}",
|
||||
"Дает будущим копиям",
|
||||
"этого джокера {X:mult,C:white}X#1#{} множ.",
|
||||
"в конце раунда",
|
||||
"{C:inactive}(Сейчас {X:mult,C:white}X#2#{C:inactive} множ.){}",
|
||||
},
|
||||
},
|
||||
j_cry_loopy = {
|
||||
|
@ -1175,34 +1175,34 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_lucky_joker = {
|
||||
name = "Lucky Joker",
|
||||
name = "Счастливый джокер",
|
||||
text = {
|
||||
"Earn {C:money}$#1#{} every time a",
|
||||
"{C:attention}Lucky{} card {C:green}successfully{}",
|
||||
"triggers",
|
||||
"Получите {C:money}$#1#{} каждый раз когда",
|
||||
"{C:attention}Счастливая{} карта {C:green}успешно{}",
|
||||
"срабатывает",
|
||||
},
|
||||
},
|
||||
j_cry_luigi = {
|
||||
name = "Luigi",
|
||||
name = "Луиджи",
|
||||
text = {
|
||||
"All Jokers give",
|
||||
"{X:chips,C:white} X#1# {} Chips",
|
||||
"Все джокеры дают",
|
||||
"{X:chips,C:white} X#1# {} фишек",
|
||||
},
|
||||
},
|
||||
j_cry_m = {
|
||||
name = "m",
|
||||
name = "м",
|
||||
text = {
|
||||
"This Joker gains {X:mult,C:white} X#1# {} Mult",
|
||||
"when {C:attention}Jolly Joker{} is sold",
|
||||
"{C:inactive}(Currently {X:mult,C:white} X#2# {C:inactive} Mult)",
|
||||
"Этот джокер получает {X:mult,C:white} X#1# {} множ.",
|
||||
"когда {C:attention}Веселый Джокер{} продан",
|
||||
"{C:inactive}(Сейчас {X:mult,C:white} X#2# {C:inactive} множ.)",
|
||||
},
|
||||
},
|
||||
j_cry_M = {
|
||||
name = "M",
|
||||
name = "М",
|
||||
text = {
|
||||
"Create a {C:dark_edition}Negative{}",
|
||||
"{C:attention}Jolly Joker{} when",
|
||||
"{C:attention}Blind{} is selected",
|
||||
"Создает {C:dark_edition}Негативного{}",
|
||||
"{C:attention}Веселого Джокера{} при",
|
||||
"выборе {C:attention}блайнда{}",
|
||||
},
|
||||
},
|
||||
j_cry_macabre = {
|
||||
|
@ -1216,11 +1216,11 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_magnet = {
|
||||
name = "Fridge Magnet",
|
||||
name = "Магнит на холодильник",
|
||||
text = {
|
||||
"Earn {C:money}$#1#{} at end of round",
|
||||
"This earns {X:money,C:white} X#2# {} if there are",
|
||||
"{C:attention}#3#{} or fewer {C:attention}Joker{} cards",
|
||||
"Получайте {C:money}$#1#{} в конце раунда",
|
||||
"Дает {X:money,C:white} X#2# {} если",
|
||||
"у вас {C:attention}#3#{} или меньше {C:attention}джокеров{}",
|
||||
},
|
||||
},
|
||||
j_cry_manic = {
|
||||
|
@ -1248,15 +1248,15 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_maze = {
|
||||
name = "Labyrinth",
|
||||
name = "Лабиринт",
|
||||
text = {
|
||||
"All hands are considered the",
|
||||
"{C:attention}first hand{} of each round,",
|
||||
"all discards are considered the",
|
||||
"{C:attention}first discard{} of each round",
|
||||
"Все руки считаются",
|
||||
"{C:attention}первыми руками{} каждого раунда,",
|
||||
"все сбросы считаются",
|
||||
"{C:attention}первыми сбросами{} каждого раунда",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Megg",
|
||||
text = {
|
||||
"Sell this card to create",
|
||||
|
@ -1270,7 +1270,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Mult for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {X:mult,C:white}X#2#{C:inactive} Mult)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1279,14 +1279,14 @@ return {
|
|||
"{C:chips}+#1#{} Chips for each member",
|
||||
"in the {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Currently {C:chips}+#2#{C:inactive} Chips)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
name = "Meteor Shower",
|
||||
name = "Метеоритный дождь",
|
||||
text = {
|
||||
"{C:dark_edition}Foil{} cards each",
|
||||
"give {C:chips}+#1#{} Chips",
|
||||
"{C:dark_edition}Фольговые{} карты",
|
||||
"дают {C:chips}+#1#{} фишек",
|
||||
},
|
||||
},
|
||||
j_cry_mneon = {
|
||||
|
@ -1319,11 +1319,11 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_morse = {
|
||||
name = "Morse Code",
|
||||
name = "Код Морзе",
|
||||
text = {
|
||||
"Earn {C:money}$#2#{} at end of round",
|
||||
"Increase payout by {C:money}$#1#{} when",
|
||||
"a card with an {C:attention}Edition{} is sold",
|
||||
"Получите {C:money}$#2#{} в конце раунда",
|
||||
"Выплата увеличивается на {C:money}$#1#{} когда",
|
||||
"когда карта с {C:attention}Выпуском{} продана",
|
||||
},
|
||||
},
|
||||
j_cry_mprime = {
|
||||
|
@ -1356,9 +1356,9 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_negative = {
|
||||
name = "Negative Joker",
|
||||
name = "Негативный джокер",
|
||||
text = {
|
||||
"{C:dark_edition}+#1#{C:attention} Joker{} slots",
|
||||
"{C:dark_edition}+#1#{}слотов для {C:attention}джокеров{}",
|
||||
},
|
||||
},
|
||||
j_cry_nice = {
|
||||
|
@ -1370,12 +1370,12 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_night = {
|
||||
name = "Night",
|
||||
name = "Ночь",
|
||||
text = {
|
||||
"{X:dark_edition,C:white}^#1#{} Mult on final",
|
||||
"hand of round",
|
||||
"{E:2,C:red}self destructs{} on",
|
||||
"final hand of round",
|
||||
"{X:dark_edition,C:white}^#1#{} множ. в последней",
|
||||
"руке раунда",
|
||||
"{E:2,C:red}самоуничтожается{} в",
|
||||
"последней руке раунда",
|
||||
},
|
||||
},
|
||||
j_cry_nosound = {
|
||||
|
@ -1386,7 +1386,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_notebook = {
|
||||
name = "Notebook",
|
||||
name = "Блокнот",
|
||||
text = {
|
||||
"{C:green} #1# in #2#{} chance to gain {C:dark_edition}+1{} Joker",
|
||||
"slot per {C:attention}reroll{} in the shop",
|
||||
|
@ -1422,13 +1422,13 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_oldblueprint = {
|
||||
name = "Old Blueprint",
|
||||
name = "Старый чертеж",
|
||||
text = {
|
||||
"Copies ability of",
|
||||
"{C:attention}Joker{} to the right",
|
||||
"{C:green}#1# in #2#{} chance this",
|
||||
"card is destroyed",
|
||||
"at end of round",
|
||||
"Копирует способность",
|
||||
"{C:attention}джокера{} справа",
|
||||
"{C:green}#1# из #2#{} шанс что",
|
||||
"эта карта уничтожена",
|
||||
"в конце раунда",
|
||||
},
|
||||
},
|
||||
j_cry_oldcandy = {
|
||||
|
@ -1450,22 +1450,22 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_panopticon = {
|
||||
name = "Panopticon",
|
||||
name = "Паноптикум",
|
||||
text = {
|
||||
"All hands are considered the",
|
||||
"{C:attention}last hand{} of each round", -- +$4
|
||||
"Все руки считаются",
|
||||
"{C:attention}последними руками{} каждого раунда", -- +$4
|
||||
},
|
||||
},
|
||||
j_cry_pickle = {
|
||||
name = "Pickle",
|
||||
name = "Огурчик",
|
||||
text = {
|
||||
"When {C:attention}Blind{} is skipped, create",
|
||||
"{C:attention}#1#{} Tags, reduced by",
|
||||
"{C:red}#2#{} when {C:attention}Blind{} is selected",
|
||||
"Когда {C:attention}блайнд{} пропущен, создает",
|
||||
"{C:attention}#1#{} тегов, уменьшается на",
|
||||
"{C:red}#2#{} когда {C:attention}блайнд{} выбран",
|
||||
},
|
||||
},
|
||||
j_cry_pirate_dagger = {
|
||||
name = "Pirate Dagger",
|
||||
name = "Пиратский кинжал",
|
||||
text = {
|
||||
"When {C:attention}Blind{} is selected,",
|
||||
"destroy Joker to the right",
|
||||
|
@ -1475,11 +1475,11 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_pot_of_jokes = {
|
||||
name = "Pot of Jokes",
|
||||
name = "Горшок шуток",
|
||||
text = {
|
||||
"{C:attention}#1#{} hand size,",
|
||||
"increases by",
|
||||
"{C:blue}#2#{} every round",
|
||||
"{C:attention}#1#{} размер руки,",
|
||||
"увеличивается на",
|
||||
"{C:blue}#2#{} каждый раунд",
|
||||
},
|
||||
},
|
||||
j_cry_primus = {
|
||||
|
@ -1570,7 +1570,7 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_sapling = {
|
||||
name = "Sapling",
|
||||
name = "Росток",
|
||||
text = {
|
||||
"After scoring {C:attention}#2#{} {C:inactive}[#1#]{} Enhanced",
|
||||
"cards, sell this card to",
|
||||
|
@ -1666,10 +1666,10 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_stardust = {
|
||||
name = "Stardust",
|
||||
name = "Звездная пыль",
|
||||
text = {
|
||||
"{C:dark_edition}Polychrome{} cards",
|
||||
"each give {X:mult,C:white}X#1#{} Mult",
|
||||
"{C:dark_edition}Полихромные{} карты",
|
||||
"дают {X:mult,C:white}X#1#{} множ.",
|
||||
},
|
||||
},
|
||||
j_cry_stella_mortis = {
|
||||
|
@ -1725,10 +1725,10 @@ return {
|
|||
},
|
||||
},
|
||||
j_cry_tenebris = {
|
||||
name = "Tenebris",
|
||||
name = "Тенебрис",
|
||||
text = {
|
||||
"{C:dark_edition}+#1#{C:attention} Joker{} slots",
|
||||
"Earn {C:money}$#2#{} at end of round",
|
||||
"{C:dark_edition}+#1#{} слотов для {C:attention}джокеров{}",
|
||||
"Получите {C:money}$#2#{} в конце раунда",
|
||||
},
|
||||
},
|
||||
j_cry_translucent = {
|
||||
|
@ -1882,18 +1882,18 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_nstar = {
|
||||
name = "Neutron Star",
|
||||
name = "Нейтронная Звезда",
|
||||
text = {
|
||||
"Upgrade a random",
|
||||
"poker hand by",
|
||||
"{C:attention}1{} level for each",
|
||||
"{C:attention}Neutron Star{} used",
|
||||
"in this run",
|
||||
"{C:inactive}(Currently{C:attention} #1#{C:inactive}){}",
|
||||
"Улучшите случайную",
|
||||
"покерную руку на",
|
||||
"{C:attention}1{} уровень за каждую",
|
||||
"{C:attention}Нейтронную Звезду{} использованную",
|
||||
"в этом забеге",
|
||||
"{C:inactive}(Сейчас{C:attention} #1#{C:inactive}){}",
|
||||
},
|
||||
},
|
||||
c_cry_planetlua = {
|
||||
name = "Planet.lua",
|
||||
name = "Планета.lua",
|
||||
text = {
|
||||
"{C:green}#1# in #2#{} chance to",
|
||||
"upgrade every",
|
||||
|
@ -2007,11 +2007,11 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_gateway = {
|
||||
name = "Gateway",
|
||||
name = "Врата",
|
||||
text = {
|
||||
"Create a random",
|
||||
"{C:cry_exotic,E:1}Exotic{C:attention} Joker{}, destroy",
|
||||
"all other Jokers",
|
||||
"Создайте случайного",
|
||||
"{C:cry_exotic,E:1}Экзотического{C:attention} джокера{}, уничтожьте",
|
||||
"всех других джокеров",
|
||||
},
|
||||
},
|
||||
c_cry_hammerspace = {
|
||||
|
@ -2023,52 +2023,52 @@ return {
|
|||
},
|
||||
},
|
||||
c_cry_lock = {
|
||||
name = "Lock",
|
||||
name = "Замок",
|
||||
text = {
|
||||
"Remove {C:red}all{} stickers",
|
||||
"from {C:red}all{} Jokers,",
|
||||
"then apply {C:purple,E:1}Eternal{}",
|
||||
"to a random {C:attention}Joker{}",
|
||||
"Уберите {C:red}все{} наклейки",
|
||||
"со {C:red}всех{} джокеров,",
|
||||
"затем добавьте {C:purple,E:1}Вечную наклейку{}",
|
||||
"случайному {C:attention}джокеру{}",
|
||||
},
|
||||
},
|
||||
c_cry_pointer = {
|
||||
name = "POINTER://",
|
||||
text = {
|
||||
"Create a card",
|
||||
"of {C:cry_code}your choice",
|
||||
"{C:inactive,s:0.8}(Exotic Jokers #1#excluded)",
|
||||
"Создает карту",
|
||||
"{C:cry_code}вашего выбора",
|
||||
"{C:inactive,s:0.8}(исключая Экзотических джокеров)",
|
||||
},
|
||||
},
|
||||
c_cry_replica = {
|
||||
name = "Replica",
|
||||
text = {
|
||||
"Convert all cards",
|
||||
"held in hand",
|
||||
"to a {C:attention}random{}",
|
||||
"card held in hand",
|
||||
"Конвертирует все",
|
||||
"карты в руке",
|
||||
"в {C:attention}случайную{}",
|
||||
"карту в вашей руке",
|
||||
},
|
||||
},
|
||||
c_cry_source = {
|
||||
name = "Source",
|
||||
name = "Исходник",
|
||||
text = {
|
||||
"Add a {C:cry_code}Green Seal{}",
|
||||
"to {C:attention}#1#{} selected",
|
||||
"card in your hand",
|
||||
"Добавьте {C:cry_code}Зеленую печать{}",
|
||||
"на {C:attention}#1#{} выбранную",
|
||||
"карту в вашей руке",
|
||||
},
|
||||
},
|
||||
c_cry_summoning = {
|
||||
name = "Summoning",
|
||||
name = "Призыв",
|
||||
text = {
|
||||
"Create a random",
|
||||
"{C:cry_epic}Epic{} {C:joker}Joker{}, destroy",
|
||||
"one random {C:joker}Joker{}",
|
||||
"Создайте случайного",
|
||||
"{C:cry_epic}Эпического{} {C:joker}джокера{}, уничтожьте",
|
||||
"одного случайного {C:joker}джокера{}",
|
||||
},
|
||||
},
|
||||
c_cry_trade = {
|
||||
name = "Trade",
|
||||
name = "Обмен",
|
||||
text = {
|
||||
"{C:attention}Lose{} a random Voucher,",
|
||||
"gain {C:attention}2{} random Vouchers",
|
||||
"{C:attention}Потеряйте{} случайный ваучер,",
|
||||
"получите {C:attention}2{} случайных ваучера",
|
||||
},
|
||||
},
|
||||
c_cry_typhoon = {
|
||||
|
@ -2079,6 +2079,14 @@ return {
|
|||
"card in your hand",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Vacuum",
|
||||
text = {
|
||||
|
@ -2099,8 +2107,8 @@ return {
|
|||
},
|
||||
Stake = {
|
||||
stake_cry_pink = {
|
||||
name = "Pink Stake",
|
||||
colour = "Pink", --this is used for auto-generated sticker localization
|
||||
name = "Розовая ставка",
|
||||
colour = "Розовая", --this is used for auto-generated sticker localization
|
||||
text = {
|
||||
"Required score scales",
|
||||
"faster for each {C:attention}Ante",
|
||||
|
@ -2108,15 +2116,15 @@ return {
|
|||
},
|
||||
stake_cry_brown = {
|
||||
name = "Brown Stake",
|
||||
colour = "Brown",
|
||||
colour = "Коричневая",
|
||||
text = {
|
||||
"All {C:attention}stickers{} are compatible",
|
||||
"with each other",
|
||||
},
|
||||
},
|
||||
stake_cry_yellow = {
|
||||
name = "Yellow Stake",
|
||||
colour = "Yellow",
|
||||
name = "Желтая ставка",
|
||||
colour = "Желтая",
|
||||
text = {
|
||||
"{C:attention}Stickers{} can appear on",
|
||||
"all purchasable items",
|
||||
|
@ -2138,22 +2146,22 @@ return {
|
|||
},
|
||||
},
|
||||
stake_cry_gray = {
|
||||
name = "Gray Stake",
|
||||
colour = "Gray",
|
||||
name = "Серая ставка",
|
||||
colour = "Серая",
|
||||
text = {
|
||||
"Rerolls increase by {C:attention}$2{} each",
|
||||
},
|
||||
},
|
||||
stake_cry_crimson = {
|
||||
name = "Crimson Stake",
|
||||
colour = "Crimson",
|
||||
name = "Багровая ставка",
|
||||
colour = "Багровая",
|
||||
text = {
|
||||
"Vouchers restock on {C:attention}even{} Antes",
|
||||
},
|
||||
},
|
||||
stake_cry_diamond = {
|
||||
name = "Diamond Stake",
|
||||
colour = "Diamond",
|
||||
name = "Алмазная ставка",
|
||||
colour = "Алмазная",
|
||||
text = {
|
||||
"Must beat Ante {C:attention}10{} to win",
|
||||
},
|
||||
|
@ -2511,14 +2519,6 @@ return {
|
|||
"into an {C:attention}Echo Card",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Meld",
|
||||
text = {
|
||||
"Select a {C:attention}Joker{} or",
|
||||
"{C:attention}playing card{} to",
|
||||
"become {C:dark_edition}Double-Sided",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
name = "The Blessing",
|
||||
text = {
|
||||
|
@ -2750,6 +2750,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "Колесо Фортуны",
|
||||
text = {
|
||||
"Шанс {C:green}#1# из #2#{} добавить",
|
||||
"{C:dark_edition}фольговый{}, {C:dark_edition}голографический{} или",
|
||||
"{C:dark_edition}полихромный{} выпуск",
|
||||
"к случайному {C:attention}джокеру",
|
||||
},
|
||||
},
|
||||
banana = {
|
||||
name = "Banana",
|
||||
text = {
|
||||
|
@ -3061,7 +3070,7 @@ return {
|
|||
cry_mus_high_score = "High Score (Final Boss [For Your Computer] by AlexZGreat)",
|
||||
|
||||
k_cry_program_pack = "Program Pack",
|
||||
k_cry_meme_pack = "Meme Pack",
|
||||
k_cry_meme_pack = "Мемный пак",
|
||||
|
||||
cry_critical_hit_ex = "Critical Hit!",
|
||||
cry_critical_miss_ex = "Critical Miss!",
|
||||
|
@ -3074,6 +3083,7 @@ return {
|
|||
cry_debuff_obsidian_orb = "Applies abilities of all defeated bosses",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "шт. фишек",
|
||||
b_code_cards = "Code Cards",
|
||||
b_pull = "PULL",
|
||||
cry_hooked_ex = "Hooked!",
|
||||
|
@ -3095,7 +3105,7 @@ return {
|
|||
b_flip = "FLIP",
|
||||
b_merge = "MERGE",
|
||||
|
||||
cry_again_q = "Again?",
|
||||
cry_again_q = "Снова?",
|
||||
cry_curse = "Curse",
|
||||
cry_curse_ex = "Curse!",
|
||||
cry_sobbing = "Help me...",
|
||||
|
@ -3106,7 +3116,7 @@ return {
|
|||
cry_m_minus = "m",
|
||||
cry_m = "M",
|
||||
cry_m_ex = "M!",
|
||||
cry_minus_round = "-1 Round",
|
||||
cry_minus_round = "-1 Раунд",
|
||||
cry_plus_cryptid = "+1 Cryptid",
|
||||
cry_no_triggers = "No triggers left!",
|
||||
cry_unredeemed = "Unredeemed...",
|
||||
|
@ -3285,22 +3295,22 @@ return {
|
|||
{ "WHY DO THEY CALL IT VOUCHER", "WHEN MULT OUT THE HOT", "IN COLD EAT EAT THE CHIP" },
|
||||
{ "SORRY", "THE VOUCHERS ARE EXPERIENCING", "VOUCHIFIA ABORTUS" },
|
||||
{ "UNFORTUNATELY", "THE VOUCHRX REWRITE UPDATE", "HAS BEEN CANCELLED" },
|
||||
{ "DEFEAT", "BOSS BLIND", "TO CHANGE NOTHING" },
|
||||
{ "ПОБЕДИ", "БОСС БЛАЙНД ЧТОБЫ", "НИЧЕГО НЕ ИЗМЕНИТЬ" },
|
||||
{ "BIRDS ARE SINGING", "FLOWERS ARE BLOOMING", "KIDS LIKE YOU..." },
|
||||
{ "WE ARE SORRY TO SAY", "ALL VOUCHERS HAVE BEEN RECALLED", "DUE TO SALMONELLA EXPOSURE" },
|
||||
{ "VOUCHERS COULDN'T ARRIVE", "DUE TO SHOP LAYOUT BEING", "200% OVERBUDGET" },
|
||||
{ "YOU LIKE", "BUYING VOUCHERS, DON'T YOU", "YOU'RE A VOUCHERBUYER" },
|
||||
{ "VOUCHERS", "!E", "VOUCHER POOL" },
|
||||
{ "THERE", "IS NO", "VOUCHER" },
|
||||
{ "ВАУЧЕРЫ", "НЕ", "РЕАЛЬНЫ" },
|
||||
{ "THERE IS", "NO SANTA", "AND THERE ARE NO VOUCHERS" },
|
||||
{ "", "VOUCHERN'T", "" },
|
||||
{ "YOU", "JUST LOST", "THE GAME" },
|
||||
{ "ТЫ", "ТОЛЬКО ЧТО", "ПРОИГРАЛ ИГРУ" },
|
||||
{ "CAN I OFFER YOU", "A NICE EGG", "IN THESE TRYING TIMES?" },
|
||||
{ "GO TOUCH GRASS", "INSTEAD OF USING", "THIS DECK" },
|
||||
{ "YOU COULD BE", "PLAYING ON BLUE DECK", "RIGHT NOW" },
|
||||
{ "FREE EXOTICS", "GET THEM BEFORE ITS", "TOO LATE (sold out)" },
|
||||
{ "PROVE THEM WRONG", "BUY BUYING AN INVISIBLE", "VOUCHER FOR $10" },
|
||||
{ "", "no vouchers?", "" },
|
||||
{ "", "без ваучеров?", "" },
|
||||
{ "see this ad?", "if you are, then it's working", "and you could have it for your own" },
|
||||
{ "YOU'RE MISSING OUT ON", "AT LEAST 5 VOUCHERS RIGHT NOW", "tonktonktonktonktonk" },
|
||||
{ "10", "20 NO VOUCHER XD", "30 GOTO 10" },
|
||||
|
@ -3309,7 +3319,7 @@ return {
|
|||
{ "ENJOYING YOUR", "VOUCHER EXPERIENCE? GIVE US A", "FIVE STAR RATING ON JESTELP" },
|
||||
{ "FREE VOUCHERS", "HOT VOUCHERS NEAR YOU", "GET VOUCHERS QUICK WITH THIS ONE TRICK" },
|
||||
{ "INTRODUCING", "THE VERY FIRST TIER 0 VOUCHER!", "(coming to Cryptid 1.0 soon)" },
|
||||
{ "A VOUCHER!", "IT'S JUST IMAGINARY", "WE IMAGINED YOU WOULD WANT IT, THAT IS" },
|
||||
{ "ВАУЧЕР!", "ОН ПРОСТО ВООБРАЖАЕМЫЙ", "WE IMAGINED YOU WOULD WANT IT, THAT IS" },
|
||||
{ "TURN OFF ADBLOCKER", "WITHOUT ADS, WE WOULDN'T", "BE ABLE TO SELL YOU VOUCHERS" },
|
||||
{ "IF YOU HAVE", "A PROBLEM WITH THIS", "EMAIL IT TO US AT NORESPONSE@JMAIL.COM" },
|
||||
{ "NOT ENOUGH MONEY", "TO BUY THIS VOUCHER", "SO WHY WOULD WE PUT IT HERE?" },
|
||||
|
|
22
Cryptid/localization/tools/find_missing.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
"""
|
||||
This Script searches for missing entries in a given localization lua-file,
|
||||
comparing its contents to en-us.lua.
|
||||
|
||||
Author: Avery (@onichama)
|
||||
"""
|
||||
|
||||
vars_en = []
|
||||
vars_other = []
|
||||
|
||||
def read_vars_from_file(filename, into_list):
|
||||
with open(filename) as file_en:
|
||||
for line in file_en:
|
||||
if " = {" in line and "text = {" not in line and "unlock = {" not in line:
|
||||
into_list.append(line.split(" = {")[0].strip())
|
||||
|
||||
read_vars_from_file("../en-us.lua", vars_en) # Take EN-US as base language
|
||||
read_vars_from_file("../de.lua", vars_other) # Change this to the language you want to compare to
|
||||
|
||||
for var in vars_en:
|
||||
if var not in vars_other:
|
||||
print(var)
|
29
Cryptid/localization/tools/find_missing_adv.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
"""
|
||||
This Script searches for missing entries in a given localization lua-file,
|
||||
comparing its contents to en-us.lua.
|
||||
This version also gives the full "path" to a given entry, and can detect
|
||||
stuff like missing unlock descriptors.
|
||||
|
||||
Author: Avery (@onichama)
|
||||
"""
|
||||
|
||||
vars_en = []
|
||||
vars_other = []
|
||||
|
||||
def read_vars_from_file(filename, into_list):
|
||||
current_var_path = []
|
||||
with open(filename) as file_en:
|
||||
for line in file_en:
|
||||
if " = {" in line:
|
||||
current_var = line.split(" = {")[0].strip()
|
||||
current_var_path.append(current_var)
|
||||
into_list.append(".".join(current_var_path))
|
||||
if ("},\n" in line or "}\n" in line) and len(current_var_path) > 0:
|
||||
current_var_path.pop(len(current_var_path)-1)
|
||||
|
||||
read_vars_from_file("../en-us.lua", vars_en) # Take EN-US as base language
|
||||
read_vars_from_file("../de.lua", vars_other) # Change this to the language you want to compare to
|
||||
|
||||
for var in vars_en:
|
||||
if var not in vars_other:
|
||||
print(var)
|
|
@ -59,8 +59,8 @@ return {
|
|||
name = "Bộ Bài Chí Mạng",
|
||||
text = {
|
||||
"Sau mỗi tay bài đã chơi,",
|
||||
"Xác suất {C:green}#1# trên 4{} cho {X:dark_edition,C:white} ^2 {} Nhân",
|
||||
"Xác suất {C:green}#1# trên 8{} cho {X:dark_edition,C:white} ^0.5 {} Nhân",
|
||||
"Xác suất {C:green}#1# trên #2#{} cho {X:dark_edition,C:white} ^2 {} Nhân",
|
||||
"Xác suất {C:green}#1# trên #3#{} cho {X:dark_edition,C:white} ^0.5 {} Nhân",
|
||||
},
|
||||
},
|
||||
b_cry_e_deck = {
|
||||
|
@ -181,7 +181,7 @@ return {
|
|||
name = "Bộ Bài Huyền Thoại",
|
||||
text = {
|
||||
"Bắt đầu với một Joker {C:legendary}Huyền Thoại",
|
||||
"Xác suất {C:green}1 trên 5{} tạo ra thêm một lá nữa",
|
||||
"Xác suất {C:green}#1# trên #2#{} tạo ra thêm một lá nữa",
|
||||
"khi Boss Blind bị đánh bại {C:inactive}(Phải có ô trống)",
|
||||
},
|
||||
},
|
||||
|
@ -639,7 +639,7 @@ return {
|
|||
set_cry_poker_hand_stuff = {
|
||||
name = "Tay Poker",
|
||||
text = {
|
||||
"Thêm 4 {C:attention}tay poker mới",
|
||||
"Thêm 5 {C:attention}tay poker mới",
|
||||
"và cho phép {C:attention}tay Thăng Thiên",
|
||||
},
|
||||
},
|
||||
|
@ -1775,7 +1775,7 @@ return {
|
|||
"{C:attention}lượt bỏ đầu tiên{} của mỗi ván",
|
||||
},
|
||||
},
|
||||
j_cry_Megg = {
|
||||
j_cry_megg = {
|
||||
name = "Mrứng",
|
||||
text = {
|
||||
"Bán lá này để tạo ra",
|
||||
|
@ -1797,7 +1797,7 @@ return {
|
|||
"{X:mult,C:white}X#1#{} Nhân cho mỗi thành viên",
|
||||
"ở trong {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Hiện tại là {X:mult,C:white}X#2#{C:inactive} Nhân)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_membershipcardtwo = {
|
||||
|
@ -1806,7 +1806,7 @@ return {
|
|||
"{C:chips}+#1#{} Chip cho mỗi thành viên",
|
||||
"ở trong {C:attention}Cryptid Discord{}",
|
||||
"{C:inactive}(Hiện tại là {C:chips}+#2#{C:inactive} Chip)",
|
||||
"{C:blue,s:0.7}https://discord.gg/cryptid{}",
|
||||
"{C:blue,s:0.7}https://discord.gg/eUf9Ur6RyB{}",
|
||||
},
|
||||
},
|
||||
j_cry_meteor = {
|
||||
|
@ -2912,6 +2912,14 @@ return {
|
|||
"trên tay",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Pha Trộn",
|
||||
text = {
|
||||
"Chọn một lá {C:attention}Joker{} hoặc",
|
||||
"{C:attention}Lá bài thường{} để",
|
||||
"trở thành {C:dark_edition}Hai Mặt",
|
||||
},
|
||||
},
|
||||
c_cry_vacuum = {
|
||||
name = "Chân Không",
|
||||
text = {
|
||||
|
@ -3352,14 +3360,6 @@ return {
|
|||
"thành một {C:attention}Lá Vang Vọng",
|
||||
},
|
||||
},
|
||||
c_cry_meld = {
|
||||
name = "Pha Trộn",
|
||||
text = {
|
||||
"Chọn một lá {C:attention}Joker{} hoặc",
|
||||
"{C:attention}Lá bài thường{} để",
|
||||
"trở thành {C:dark_edition}Hai Mặt",
|
||||
},
|
||||
},
|
||||
c_cry_theblessing = {
|
||||
name = "Phước Lành",
|
||||
text = {
|
||||
|
@ -3655,6 +3655,15 @@ return {
|
|||
},
|
||||
},
|
||||
Other = {
|
||||
alt_wheel_of_fortune = {
|
||||
name = "Bánh Xe Số Phận",
|
||||
text = {
|
||||
"Xác suất {C:green}#1# trên #2#{} để thêm",
|
||||
"ấn bản {C:dark_edition}Ánh Kim{}, {C:dark_edition}Lấp Lánh",
|
||||
"hoặc {C:dark_edition}Đa Sắc{} cho một {C:attention}Joker",
|
||||
"ngẫu nhiên",
|
||||
},
|
||||
},
|
||||
disabled = {
|
||||
name = "Vô Hiệu",
|
||||
text = {
|
||||
|
@ -4274,6 +4283,7 @@ return {
|
|||
cry_joke_placeholder = "(bội số của 8)",
|
||||
|
||||
k_code = "Code",
|
||||
k_chips = "chip",
|
||||
k_content_set = "Thiết Lập Chủ Đề",
|
||||
b_content_sets = "Thiết Lập Chủ Đề",
|
||||
--Why aren't these in vanilla?
|
||||
|
|