#The Soul - An online seed analyzer for Balatro
530 messages · Page 1 of 1 (latest)
Huh, neat.
the shop queue gets skipped if it's already owned and you don't have showman, right?
very nice! i was having trouble with immolate on linux
if we notice a bug, should we tell you, or would you rather people just wait for you to get to things yourself?
👍
Please tell me, that way I can fix it!
it looks like it's not showing the guaranteed buffoon back on the new patch
What’s happening is that it appears to go to 1.0.0 whenever you try and change the version. Let me fix that quickly
Actually it just appears to happen on subsequent executions… let me fix that
@sturdy finch should be fixed now once the website updates
thanks! really appreciate you making this
yw
starting to work on new UI for The Soul
That looks good! This tool is really cool, thanks for making it :)
You’re welcome!
will update this tonight for 1.0.1e
ay this is cooking
also please tell me its visible to see the entire txt
i kinda dont wanna download a bunch of files
scroll bar
n i c e
The Soul should work with 1.0.1e now
nice
new UI looks very cool
Saving these for when the upgraded UI drops
my ideas with that will allow you to hover over a card to see the description and internal information, search for when a specific item appears, view reroll queues and joker-specific queues, etc.
Wanted to note, soul doesn't seem to be accurate with the bugged seeds. WDLP9XTR shows a normal shop but is all planet/spectral in-game.
Bruh ctrl-F hit so hard
I was putting random seeds in and just ctrlfing brainstorm, blueprint, burnt, etc
Also it's probably not possible, but erratic spawn deck 🥺
it's possible
deck view is planned
that also helps for things like viewing what cards you'll draw in packs, hand, etc.
probably not right away though
This is part of why I made this
And I’ll probably release a C++ version of Immolate that shouldn’t have any incompatibilities
but yeah, these aren't NAN-ing... weird
it looks like it's able to save it somehow
when it's greater than 1 it should become NAN
@honest vortex should be fixed now
It feels like code just doesn't work when I use it
Idk why
Coding fits me but It hasn't clicked yet 😭
Immolate in particular is not designed to be easy to use imo
And hardware incompatibilities just make it worse
Lmao
Fair enough
I wonder how much space it would take to have all the seeds datas collected in like 1 file
That you can reference for like a website immolate
Terabytes to Petabytes depending on how much info you want
Checks out
https://syzygy-tables.info
For reference this website has like an 18 terabyte database of chess positions
@livid herald gave some good calcs into what it would actually take to store realistic amounts of data about each seed
the first message links image is assuming only 2 bits are stored per seed
the second assumes 40 kilabytes are stored per seed
Yeah ik, I meant all the data within the seeds (so immolate and soul could be conjoined twins)
mb i read it wrong
but its still kinda related
also i think it is mybe not the best as you might end up storing loads of data about seeds that arent that good
so are never used
also they are already sort of twins as they run the same rng algorithm to work out the items that occur in a seed
but i am probably not understanding your question right
Immolate and The Soul use the same backend pretty much
Yeah I'd think so
Seeing a bug in the newest version where it seems to be interpreting a ton of jokers as being holographic when they aren't
Looks like it's just assuming every joker is holo
What seed is this happening for? My change to allow bugged seeds to work must have backfired
ty
There’s another all 10s seed with all holographic so my guess is that this one gets close enough to trigger my bugfix
i didn't realize there were "bugged" seeds, though i guess there has to be because otherwise it's wildly improbable to get that many 10s lmao
Yeah, there are a few others like that, all cause by the same core bug
For some reason those bugs weren’t triggering for some bugged seeds so I tried to do a manual fix
interesting, i assumed it was an intentional easter egg
It’s late for me here so I’ll fix it tomorrow, but thanks for reporting it
np, thanks as always for making and maintaining it
that would be cool; afaik the only time the game forces things in a seed is when playing the tutorial, where things will be different if you play the TUTORIAL seed
the first joker in that seed is 10-4, which felt a little too perfect
That seed was found in a 10-4 search lol
ahhhh
I wonder how much longer it would’ve taken for the bug to surface if not
Probably not until someone got it unseeded
has the entire seed space been searched? there's what, 36^8 possible seeds, which is 2.8e12
that's what, three million million? which feels like a lot to brute force
I think about 10-20% of it has been
wow
https://discord.com/channels/1116389027176787968/1225961482349445241
Denk got all the way up to 3XXXXXXX with an exhaustive search
@honest vortex also did a search for seeds like this, but ones where the effects rippled across to things like holographic on jokers
That one was exhaustive but seeds with “just” the erratic bug wouldn’t be found
https://discord.com/channels/1116389027176787968/1221134148601778287
That seed is here
The internal RNG state for an event type is calculated in such a way that causes an error and sets its value to NaN
This causes all RNG calls for that event to return the same value, which for cards happens to be a 10 of Spades
Yes
alr I think I figured it out
I have a much less hacky fix
https://mathisfun0.github.io/The-Soul/?seed=7LB2WVPK
https://mathisfun0.github.io/The-Soul/?seed=XEQH7CP9
The first link shouldn't be all holo and the second link should
Do you mean like bugging before the prefix? I believe my program should have found all of those, the only ones it would miss are more specific bugs inside the prefix, without the multiple bugs.
Yeah, this is what I mean. So things like seeds that have the glitched erratic deck but not the all holographic bug
oh OK I misread. Considering that Denk searched so little and found 2 means theres probably a lot of those.
Yeah, it’s only about 10% of the seed space and there’s 2 seeds
Seed with only negatives when
Because like, if you had hone, doesn't that make all the holos poly?
And then with glow up
Oh yeah, if we do a search separate from erratic bug we could probably find a bugged editions seed with hone.
Negative chances are not affected by hone
It’s per ante though
oh yeah, forgot about that
added a new button to my WIP UI
working on getting cards to appear now
pretty happy with this for now
Thought they were
My dementia ig
You should make a easier egg with the art
mybe its something to do with the garunteed buffoon if its on the beta
No I probably just didn’t check to do one less round in Ante 1
or it just treats ante 1 as other antes
lol
o
I fixed this just now when pushing out 1.0.1f to The Soul
Math is it possible to see what tags have
Like what rare specifically spawns from a rare tah
I’ll add these features pretty soon
oh god not the 7 piece ending game, i remember seeing that and just thinking what in the fuck who has that cpu time to run something like that
i know im late for the convo but idc anyways this is just crazy
take your time tbh
just bug math to make filters, thats what i do
yeah and im doing it for world record filters
now that the update is live i told him to help me with an improved and sorted version of this filter
are you eventually going to add an option that simulates what the queues would look like if the merchant vouchers are applied?
Yeah, but that’ll probably be saved for the new GUI. You can sort of see this now on Zodiac Deck
has anyone looked into reverse searching (determining a seed from characteristics of the run)?
naively i would assume that kind of thing would be very hard given how one-way hashing/randomization tends to be, but somehow the minecrafters have found a way to do it with their seeds, so maybe it's possible here?
That would be cool
Do you think there are enough variables to be able to guess the seed though
Like if you had one shop is there even enough info to guess it
Probably very hard, especially now that you only see 1 generated pack in first shop in 1.0.1 as first pack is forced to be buffoon
But idk too much of reverse engineering seeds
You would probably need two shops usually
And also, with the way the seed logic works this might end up just requiring brute force
I don’t think it’ll ever be reasonable to say, watch a streamer’s run and reverse engineer their seed before they win
yh also for a run your not just engineering a seed really
your engineering all the seeds including the resamples and all of that
that could occur on one seed but not another
v tough
I was also wondering if you could do it with card draw RNG
You could probably get a long output of the card draw queue of the game for as long as you want then you might be able to get the string (seed) from it
But idk how to do that or if it's even possible
Yes, but I want to do it with the UI so it’s easier to interact with
Because tarots exist
Ah I meant for reverse searching, but sick that you're adding it to the soul as well
Immolate already has a moderate amount of card draw support
Math are bits lost in the bit shift process of the RNG stuff or is it call just shifted?
I think that would be the determining factor on it being reversible
Like if it regularly overflowed stuff as lost bits it's not really possible right
I think bits are lost
And there’s so many possibilities that it would be hard to reverse
🥲🥲
yh i was interested and looked into the bits of the state numbers when going through the rng step
the left shift and right shift basically lose most the bits so its not really possible to recover the original number
this is the rng logic step by step
the left shift in step one and the right shift in step 3 basically wipe most of the bits
for reference (k - s) in step 3 is equal to 45, 30, 48 or 39 respective to the which state index your working with
i get zany and traboua in game for seed A
but mystic summit and trabour on soul
not sure whats happened cuz i looked through the new patch games code and it dosent seem like anything has changed
this is for the first buffoon pack
red deck white stake
do you have mystic in the shop?
nvm
reproduced this and it looks like a bug, will investigate
buffoons use their own seed but like... it's normal
my guess is that this is some math.random emulation issue
but I need to look deeper into it later
he did say in the patch notes he updated love
mybe it got a new luajit version
with new math random
most recent stable love release updated luajit
might be a cause
thats if thats the version he updated to
maybe, but I don't think that really changed the RNG alg
these occassional RNG errors were noticed before this version too in The Soul/Immolate
yh i looked through 11.4 and 11.5 version of love
and the luajit files seem good
but its a bit of a cluster fuck of code
so i dont think i would have caught anything anyway
@frozen ocean pretty sure its some changing of the rarities on some jokers
makeing the pools a bit different
i know you have probably already changed the rarities so it might not be that
i have not been able to replicate it fully with my own thing
but i noticed if I change my round digits function to floor i get zany
but if i use the normal round method it gets trabour
this function gets zany
but not trabour
this function gets trabour
but not zany
this RoundDigits function is the one used to round to 13 decimal places in the node id function
It definitely COULD be that
im not sure how to build web assembly so i didnt change and test the soul at all
You could build the C++ code if you want to test, since it’s equivalent
this appears to be the erroneous RNG value, let's see what happens when I do this in-game
this time, the in-game result is different
looks like it's caused by a floating point eror here
sure enough, if we pass in the game's float value it works
yes
I think it's one
cache.nodes[ID] = round(fract(cache.nodes[ID]*(double)1.72431234+(double)2.134453429141)*(double)1e13)/(double)1e13;
this must return the wrong value sometimes
i thought it my be the precision of math.pi
since in the immolate version im running
the math.pi value is not as precise as luajits
I narrowed this down though
but probably not
and the error is in this line
yeah
ok cool
it rounds to a different 0.00000000000001 here
so this appears to the issue
it is round 3499... up to 4000
m
I made a new function to round that num that returns from pseudohashchar that floors instead of round and get the right value now
but i must have messed up cuz i dont get zany
nvm i do
get zany but no trabou
i tried making a custom round
nice
did it work?
ive managed to get zany to appear but trabou is still off by one
bit wierd
i think my rarity logic is a bit fucked
it's again not getting troub now
is your hashed_seed correct for A
cuz forgot i am having to manually set it in my test
10/1 had lots of fun
cuz it dosent get it right
I'm doing this in The Soul
ah, it fails here
ye it's still not a good rounding function
let me see how LuaJIT does this
it looks like Balatro does string.format and then casts it back to an int
I think I may have figured it out
I literally had to use output streams to round it like what Balatro does
let me just play a run to make sure it's working well and then I'll commit
ok cool
ty for potentially finding that issue
ive just been staring at 25 point precision doubles for ages
and my eyes cant take it anymore
so do you check for rounding for more than 13 digits or smthing
no, I just print it out and convert it back to a double
nice one
pushed the change out now, so it should be fixed in a minute or two
idk
I didn't even look at LuaJIT, I just saw Balatro used string.format and gave it a shot
huge
good chance for me to catch since I plan on overhauling the C++ version soon
going to use enums instead of strings for a speed boost
im glad it was solved pretty quickly
i think i fixed it on mine
it might have topped the fucked methods
saw the rounding method on this question: https://stackoverflow.com/questions/497018/is-there-a-function-to-round-a-float-in-c-or-do-i-need-to-write-my-own
Hmm let me try that
i only have the one test case so might not be general
it looks like both methods return different things occassionally, let me see which is better
yours looks like it fails sometimes:
ECTOPLAS, opening both buffoon packs, the Zany Joker isn't Perishable although your algorithm predicts it is
is that due to it not rounding enough?
🤷♂️
haha nws
im doing some other stuff now but will check some more options when im back at it
ty for testing it
yw
Just had an idea, the soul could potentially have the toggle for fresh profile?
or different/custom presets in the future, if the community decides on adding profiles with specific stuff unlocked for speedruns/etc.
that is a cool idea
and would be a nicer way of setting up if a filter wants certain things locked
Unlock manip is definitely something that I can add
Could definately also add that to our tool, iirc it wouldn’t take me long at all for the mod to unlock specific jokers etc automatically on a fresh profile
Yep and Immolate already has support for that
For The Soul I would just need a good GUI for it
perfect
Hi, I was look at the last commit of The Soul and I think the fix should be
round13(fract(cache.nodes[ID]*1.72431234+2.134453429141))
instead of
std::fmod(round13(cache.nodes[ID]*1.72431234+2.134453429141),1)
because in Balatro the order is mod first and round second, that is, % 1 is inside format, not outside.
In theory order of those operations shouldn't matter, but I noticed a small difference in the numbers that caused errors in deck shuffling with nr1 at round 2 in seed 9. I don't know much of C++ but this is what I tried:
std::vector<std::string> shuffle(std::string ID, std::vector<std::string> deck)
{
rng = LuaRandom(get_node(ID));
for (int i = deck.size() - 1; i >= 1; i--)
{
int x = rng.randint(1, i + 1) - 1;
std::string temp = deck[i];
deck[i] = deck[x];
deck[x] = temp;
}
return deck;
}
I haven't had the time to test it thoroughly but round13(fract(...)) works fine with this shuffle function, and I guess also Zany Joker in Buffoon Pack with seed A should be fixed.
tysm, I'll fix that in the next commit
might try fmod instead of fract though since it was also causing issues iirc
great! Yeah fmod should work as well
I'd been getting some slight errors with fract which prompted the change, so I'll try that when I work on The Soul next
oh I see what you mean, I used fract but it's just a wrapper for fmod(n, 1) so it's fine. The one giving issues was n - (long)n I guess.
So I was watching spectred cola sipping attempt, decided to check the seed with the soul (CCWMC2BS), and noticed that a lot of the stuff is completely off, which I'm not sure what is going on exactly? does overstock somehow mess with the shop queue, other than the refill? (it shouldnt really affect the order, right?)
like Idk how does any of this make sense
somehow is normal around here
next one
the next roll is weirder
Editions are diff because of glow up btw
It looks like it got the shop type RNG messed up at some point in the ante
The Soul? Or you think the game
The Soul
Tbh I thought something is wrong with rng in game, but could be the soul ye
Don’t blame the game, blame the tool 
Also I wonder when the video was recorded, 1.0.0 or 1.0.1c could explain some of the differences
I mean because some rolls are 1-1 spot on, it feels like the game does smth that skips a bunch of items
It's from tonight
Oh this could also be tarot/planet merchant
Give the length of the run wouldn’t be surprised if drspectred bought one of more of those vouchers
Ok but some jokers are completely out of order
He didn't buy, he has shown vouchers around ante 13-15
Then something bigger definitely went wrong
He bought overstock+ this ante which could've caused this?
That shouldn’t change the rates though
I can try to see previous ante shops and match them to the soul output
Well, not right now because we have electricity outage
It isn't the rates tho
Or it doesn't look like rates
My guess is that in this ante the joker rarity pool and card type pool became desynced
Since you’ve watched the whole vod do you know if those stay inaccurate or are they just occasionally slightly off?
.
It looks like it breaks around #140, which likely means its an error like that
since if the predicted RNG state is even a single bit off it will become completely inaccurate
How do you explain this tho
It’s not normal though (no spectral)
Common Joker queue remains fine and it predicted four common jokers
Yes spectral was in next roll but like
Likely by chance
Some jokers get completely skipped, but the queue does not get completely off
I doubt there's so many coincidences
Burnt Joker could be the reroll of Blueprint
I’ll investigate more into this later, but thanks for alerting me
Alright, np
It’s probably tied to this issue
Since that is what gets the next RNG state
OrangeNote’s idea likely fixes it
I might try it later
Ive also encountered issues like that
OrangeNote's idea fixes your issue @frail plinth
going to hope that this works 100% of the time, but it looks good with other fringe issues
I'm going to commit it to main for now since I think it's good, but lmk if you find other similar issues
Later today when I get more time I may also update the analyzer to be more like Immolate’s
Nice, good to know
is it possible to pin the soul site link to the thread. I know I could bookmark it but i find myself often coming back and scrolling up the whole thread to the link. nws if not though
Just ask a Discord mod
<@&1133519078540185692> Hi!! Would it be possible for you to pin the link at the top of this thread. thank you
hopefully i dont get done for pinging
which link
ty
banned for pinging a mod
idk i have been in servers where that happens
I can't speak for the other mods, but if you see me online feel free to shoot me a DM. That way you avoid having a handful of people getting pinged. Here to help!
Same
sounds fun xd
i dont mean to put a bad name on you guys cuz i dont know any of you. sorry if it came off that way. Thank you for being friendly
it's all good!
Also same. Feel free to also just @rocky vapor directly
I don't mind being pinged even for non-moderator reasons
I added the ability to check what a seed will give with different unlocked items
https://mathisfun0.github.io/The-Soul/?unlocks=AAAAAAAAAAAA
Here's a link that already disables all unlocks if you want to have that set up
cavendish missing
unless that's intended?
cuz it does have unlock requirement, it's just per run
Maybe a button to toggle all? if that's not already planned
Lucky cat and Steel joker as well I guess
For now I only included profile-based locks
This is a good idea, I’ll get to it tonight
Really nit picky but you could build up the ui of the game (like what deck creator does) just so it'll fit with the shop queue ui
That’s what I’m doing long-term
^^^
Checks out
Okay really dumb question, but are you planning to add the seeds that come from the extra seeds mod
I kinda forgot who even made that mod though
was it you math?
It was math
The backend works properly for those, I just don’t think it makes sense to include in The Soul right now
Each pack doesn't have its own unique preassigned contents, it pulls from an associated pack queue, right?
So if you have two arcana packs, regardless of which order you open them, it doesn't matter what order you open them, the first one will match the earlier one in The Soul, and the second the later one
yep!
when a consumable is deduped (ie, you're carrying a tarot card that would've been in the pack) does it just pull from deeper in the queue, or is there another queue for that?
it uses another queue
there’s a reroll queue, and then a reroll queue within that, and so on…
I will probably add the option to show the first layer or two, but it should be easier to represent when there’s a better UI
yes

the soul ui soon tm?
currently a javascript thing that gets pasted in console to achieve this, i've provided the source to OP.
Will get this up soon; have finals coming up so can’t promise it by a date rn
once we get the reworked cpu searcher this will truly be stonks
i'd share the UI stuff here if the images were hosted on the git so it could access them
gl
ty
Aquila's UI also has searching, although it's a little scuffed rn
highlightedItem.scrollIntoView({ behavior: 'smooth', block: 'center' });
Wait this function is actually goated
why does it look so clean
got it to scroll to the center now too
should be live now!
now we need the cpu rework to start running god seed filters
btw i think i should say it so @hearty current thanks for the ui work it looks sick
i sort of figured if people were planning out the run it'd be best to highlight all the matches for whatever a person might be interested in. Part of the reason I didn't implement something that would scroll you to it.
I ended up making it an enter press so you could view the first one easily at least before using Ctrl+F
It’s actually already “out”, only reason I haven’t posted a download is that the filter system requires compiling it yourself
But I know some ppl like PacManMVC and Fudge are already using it to find seeds
the improved speed rework? idk if its what youve been telling me about
As well as no command line arguments right now (but I’ve just been distracted by other things to add that)
Oh that thing
Not yet
yeah thats what im waiting for
But I’d expect it to be maybe like a X2 boost at most compared to that rounding change which already made it X4 better than the GPU searcher
like for me to use my gpu to get trash speeds and high electricity bills it just aint worth it yet
i mean a x2 ontop of a x4 is still worth the wait
balatro aint running away so i can wait
and with talisman you can actually see what score youre gonna get
could this somehow handle modded content as well?
that'd be hilarious
Only seed-related tool that will likely be able to handle this is Brainstorm when I get to adding more features to its auto reroll
Plan is to integrate immolate into brainstorm.
Yep, and since Brainstorm can run with other mods it should work for that
merged a quick UI update that added boss sprites, but I also wanted to make the filtering a bit better
even something like "holo photo" would work
okay math i dont know why, but why do i have to manually put it in the numbers when i set the ante to 39 😭
I should probably change that
To just copy the last value when you increase the ante
@frozen ocean would it be possible for you to remove the ante 39 cap?
talisman runs?
Yep
very nice
btw just warning you there might be a few issues with hand leveling
yeah I’ll set this up tonight
ok it's done, fair warning that too large of an ante will cause it to break
but like ante 100 should be safe
amazing, thanks
Hey. If I understand everything correctly, having a (negative) showman should enable the shop to appear exactly as it is shown in the soul. As my results wildly differ, I would like to know after which action(s), the results become unreliable.
the negative showman could be from a reroll if The Soul is trying to spawn a joker that can't appear
ex. gros michel/cavendish, and a few jokers tied to having an enhancement in the deck
Ok.
But if I already have a negative showman (in my hand), an odd todd should always appear in the shop when the soul tells me to right?
Yes
Just to be sure
Does judgement mess with the shop queue or are they independent
theyre independent since february demo
OK then how can it be influenced?
Because I do not understand the behavior I experienced.
I played a seeded run (2K9H9HN) on Anaglyph white stake.
In the shop of the second blind in Ante 19, I should have gotten a negative Bull (,which was negative erosion for me(https://youtu.be/6QsfmT2T3EE?list=PLSNkeaao_ChnQke0iyxU8W40cgxYVvfIT&t=4291)), a negative Raised Fist, where I should have gotten a neg Photograph (https://youtu.be/6QsfmT2T3EE?list=PLSNkeaao_ChnQke0iyxU8W40cgxYVvfIT&t=4755) , and a negative Drunkard, where I should have gotten a neg Credit card (https://youtu.be/6QsfmT2T3EE?list=PLSNkeaao_ChnQke0iyxU8W40cgxYVvfIT&t=4896); just to name a few.
The video includes the full ante 19. I also have tons of savestates flying around on my pc from this ante. I did not play modded at the time. The run was started in August I believe.
and I did have a neg showman in my hand
@frozen ocean
Hey, could you a feature with which the output.txt only displays certain card types
I am sure you are aware of my post holiday plans and a feature like „display (only) jokers“ would help a lot for resolving the negative tags
But to prevent any bugs; please keep the number in front true to the shop number
Display only tarot cards is also really nice
Sure, I can try to implement that within the next few days
Btw. The soul output is unfortunately still not accurate
There must still be a bug
No idea what causes it though
The editions of the jokers are afaik correct. just not the joker it shows
are all of the jokers incorrect, or just occasional ones?
forget about the one above. All the instances I thought I had as definitive proof were wrong. Mostly, it was just a large quantity of stuff that cannot spawn despite shown close together. That can happen when you go 10000+ into shops.
I think I was simply dumb again.
however, could you answer please the following
is stuff that appears in the shop 100% independent of the stuff from judgement?
In my game I use to of judgements. And when I see that a negative is a uncommon joker, I sometimes would hold this exact joker to force it to spawn something different. I would then reroll there quickly to see what it will be. However, very frequently (I assume because of judgement) when I then play it out with judgement the joker is something different. I just want to know what could influence this.
It doesn’t depend on Judgements, but it does depend on jokers you hold
There’s resample queues it goes through to determine what joker to give if it’s not The Soul’s prediction
Ok thx a lot.
is there a way to get the soul to simulate planet merchant/tycoon, tarot merchant/tycoon, hone up/glow up and/or magic trick/illusion?
What happened to the site https://mathisfun0.github.io/The-Soul/ , why it got deleted?
Thank you a lot!
@rocky vapor Hello, sorry to bother, can you please update the pinned message to this
ty!