Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
e4defed
Support ascending Bunco's spectrum hands
Ardub23 Jul 7, 2025
3cb6fc4
CN: fix some wrong expressions in zh_CN
linsaiya Jul 8, 2025
8f77705
Update art and credits for Tropical Smoothy, Waluigi, Error, and Expo…
MarioFan597 Jul 11, 2025
cb21e8e
Revert "jolly-bot: auto-format Lua files using Stylua"
lord-ruby Jul 11, 2025
d165bf4
Revert "Merge branch 'balance-things' into probability-stuff"
lord-ruby Jul 11, 2025
c54f291
fix none bug for real this time but on main
lord-ruby Jul 11, 2025
25912fe
jolly-bot: auto-format Lua files using Stylua
Jul 11, 2025
68a470e
Merge pull request #752 from MarioFan597/main
lord-ruby Jul 11, 2025
40d570d
equilibrium log fix
lord-ruby Jul 11, 2025
2973f86
jolly-bot: auto-format Lua files using Stylua
Jul 11, 2025
c7f1a38
remove useless statement
lord-ruby Jul 11, 2025
975a7aa
fix duplicate context call
lord-ruby Jul 11, 2025
a52c222
jolly-bot: auto-format Lua files using Stylua
Jul 11, 2025
96ee5a9
Update none.toml
lord-ruby Jul 11, 2025
f555d25
Merge branch 'main' into probability-stuff
lord-ruby Jul 11, 2025
8d761c9
Merge pull request #755 from SpectralPack/probability-stuff
lord-ruby Jul 11, 2025
8371c94
Revert "Merge pull request #755 from SpectralPack/probability-stuff"
lord-ruby Jul 11, 2025
86bb740
update to new probability api
lord-ruby Jul 11, 2025
828bce2
jolly-bot: auto-format Lua files using Stylua
Jul 11, 2025
641c3ed
Change shaders
Jevonnissocoolman Jul 12, 2025
cdb9f8f
ccd indicator cardsleeves fix
lord-ruby Jul 12, 2025
0e949a0
pointer fix
lord-ruby Jul 12, 2025
c48d829
fix softlock related to beating a round with none
lord-ruby Jul 12, 2025
b0af2e5
jolly-bot: auto-format Lua files using Stylua
Jul 12, 2025
0cf8a8f
update boredom to use SMODS probability
InvalidOS Jul 12, 2025
14b4977
Fixed probability overrides breaking a bunch of things
InvalidOS Jul 12, 2025
c9eb993
Merge pull request #757 from InvalidOS/patch-4
Jevonnissocoolman Jul 12, 2025
294127f
jolly-bot: auto-format Lua files using Stylua
Jul 12, 2025
7e82107
Merge pull request #744 from linsaiya/main
Jevonnissocoolman Jul 12, 2025
b16314e
jolly-bot: auto-format Lua files using Stylua
Jul 12, 2025
e4b8760
Merge pull request #742 from Ardub23/patch-1
Jevonnissocoolman Jul 12, 2025
e250659
Merge pull request #756 from InvalidOS/patch-3
Jevonnissocoolman Jul 12, 2025
dee6648
jolly-bot: auto-format Lua files using Stylua
Jul 12, 2025
a13917d
fix code ui stuff
lord-ruby Jul 12, 2025
ec88988
jolly-bot: auto-format Lua files using Stylua
Jul 12, 2025
5f33978
remove some redundant stuff
lord-ruby Jul 12, 2025
119c927
none fix for real
lord-ruby Jul 12, 2025
8dbc3e5
jolly-bot: auto-format Lua files using Stylua
Jul 12, 2025
dd1ce69
nil check for clockwork joker
lord-ruby Jul 13, 2025
bd49351
ascended hands api
lord-ruby Jul 13, 2025
be5a735
jolly-bot: auto-format Lua files using Stylua
Jul 13, 2025
ffdee1d
Merge branch 'balance-things' into temp
lord-ruby Jul 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions Cryptid.lua
Original file line number Diff line number Diff line change
Expand Up @@ -238,23 +238,13 @@ function SMODS.injectItems(...)
Cryptid.inject_pointer_aliases()

--this has to be here because the colors dont exist earlier then this
Cryptid.circus_rarities = Cryptid.circus_rarities or {}
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()
local keys = {}
local a_keys = {}
for i, v in pairs(SMODS.calculation_keys) do
if not keys[v] then
a_keys[#a_keys + 1] = v
end
keys[v] = true
end
SMODS.calculation_keys = a_keys
end

local old_repitions = SMODS.calculate_repetitions
Expand Down
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
# Cryptid
An unbalanced Balatro mod.

Note: Cryptid requires [Steamodded](https://github.com/Steamopollys/Steamodded/archive/refs/heads/main.zip)
[Talisman](https://github.com/SpectralPack/Talisman/archive/refs/heads/main.zip) may be used to increase the score cap but isnt required.

Note: Cryptid requires [Steamodded](https://github.com/Steamopollys/Steamodded/archive/refs/heads/main.zip) and [Talisman](https://github.com/SpectralPack/Talisman/archive/refs/heads/main.zip).

Cryptid currently adds:

Expand All @@ -19,13 +17,13 @@ Cryptid currently adds:

### Frequently asked questions
* Credit to @jenwalter666 for creating this FAQ (forwarded from Cryptid Discord)
* Edits to reflect some changed made by @lord.ruby

## General

> *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.
Expand All @@ -45,7 +43,7 @@ If they show up red, that means there's a problem. Hover over the mod icon (whic
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 "naneinf"/"Infinity" very often, is there any way to raise the limit of the scoring system?*
> *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 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)!

Expand Down
Binary file modified assets/1x/atlasepic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/1x/atlasexotic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/1x/atlastwo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/1x/stake_cry.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/2x/atlasepic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/2x/atlasexotic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/2x/atlastwo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/2x/stake_cry.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
282 changes: 282 additions & 0 deletions assets/shaders/glitched_b.fs
Original file line number Diff line number Diff line change
@@ -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(int 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(int 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
Binary file removed assets/sounds/ExponentialChips.wav
Binary file not shown.
Binary file removed assets/sounds/ExponentialMult.wav
Binary file not shown.
Binary file removed assets/sounds/MultiplicativeChips.wav
Binary file not shown.
16 changes: 15 additions & 1 deletion items/achievement.lua
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,19 @@ local haxxor = {
end,
}

--order 4 was googol play pass
local googol_play_pass = {
object_type = "Achievement",
key = "googol_play_pass",
order = 4,
bypass_all_unlocked = true,
atlas = "cry_achievements",
--reset_on_startup = true,
unlock_condition = function(self, args)
if args.type == "googol_play_rigged" then
return true
end
end,
}

local bullet_hell = {
object_type = "Achievement",
Expand Down Expand Up @@ -454,6 +466,7 @@ local technically_positive = {
-- Break Infinity: Score more than 1.57e308 in one hand
-- H4xx0r: Use a cheat code
-- We Told You Not To: Use ://CRASH
-- Googol Play Pass: Rig a Googol Play Card
-- Bullet Hell: Have 15 copies of AP Joker
-- !niW uoY: Reach Ante -8
-- Now the Fun Begins: Obtain Canvas
Expand Down Expand Up @@ -484,6 +497,7 @@ local achievement_objects = {
what_have_you_done,
used_crash,
haxxor,
googol_play_pass,
pull_request,
niw_uoy,
jokes_on_you,
Expand Down
Loading