Seen as this has not been done yet by anyone, I want to take initiative in getting a screenreader mod out there to make Balatro playable for the visually impaired. Unfortunately I have no experience with screenreaders whatsoever, but I have all the knowledge of the game's code to make it work - I'm grateful for any insights on the matter :)
#[Accessibility/Screenreader][WIP] Black Hole
1 messages · Page 1 of 1 (latest)
@static flume @little island @molten bane @lean condor @long wharf @ashen grail @sour wind @wide slate @twilit gorge seen y'all in the suggestion threads relating to this, I'd love to hear from you and have you as testers as we make this happen
flowwey i see you 👀
Oh! that'd be awesome!!
I was spotted 😭
I'm not familiar with Screenreader stuff but I do know a lot about the game so I can still assist in development.
You have my permission to use a spectral as the mod name /j
xD
I've read about using the clipboard to funnel things to a screenreader, but that seems so improper
One thing that should be fairly easy is a setting for larger text size
CustomFont already can do that, it’s just a matter of making it fit nicely
Assuming that the screenreader is set up in the mod already, we can probably use the selector controllers use to get the highlighted button and parse through the UIBox for UIElements that contain text and then read it.
Bit too far to hypthesize but
That would probably cover reading selected objects.
https://github.com/pitermach/Love2talk found this on github, not sure how useful
seems like a reasonable framework to base things off of as to not reinvent the wheel
Yeah something like this would work for label reading.
what will you do when you run out of spectral cards for these names
Make up new ones 
we already have some planets as well as jokers
at some point just use the modded cards of these types
annoyingly it's another long abandoned project
Yeah it was last touched 2 years ago.
Looks like it also has an even older dependancy on something called "objc"
We'd basically have to go for something like this too since the say function depends on strings.
I’m gonna start using Cryptid spectrals 
Imagine Hammerspace mod
is sigil or grim taken yet?
I'm probably going to take both
I might also steal one for my blessings idea instead of using "Simulated Jokerverse"
I already renamed six hundred suits Sigil it's just so fitting
I’m happy to do testing, am on Steam Deck though so don’t know how feasible that’d be
It's mentioned that love2talk is dependant on already existing libraries which could be an issue for Linux systems.
maybe there's a better solution? so far I haven't found one
Linux support for screenreaders itself seems super scuffed.
Accessibility outside of Mac is kinda scuffed ime
It seems dependant on distro which is pretty bad w/o some way of registering the library of choice.
Hello! I... saw I was mentioned here. Just wanted to say that, I may not know the technical side of things, but I can do testing to see if it works.
ideally there would not be dependencies on outside libs, but that would mean implementing full TTS in love
We'd need to provide the library ourselves yea
https://github.com/espeak-ng/espeak-ng something like this could pre-generate sound files, but lacks mod support and would just end up being huge in file size
there's a lua SAPI interface but that also isn't included by default in wine
The others ones I found weren't built with lua so they're probably off the table.
(Although it would be funny if we used SAM TTS)
i mean something like SAM should be manageable to port to lua right?
I did find one made with JS os it might be doable? https://github.com/discordier/sam
might use this instead of grim, it fits the concept I have more
SAM itself is extremely small so even if we had to change a lot of the code to work for lua it would be more advantageous than other TTS libraries.
to be fair it also doesn't sound great
Unfortunately yeah
i think here are the ones in use and available
Familiar - ???
Grim - ???
Incantation - consumable stacking
Talisman - animation remover + large numbers
Aura - animated jokers
Wraith - ???
Sigil - 600 suits
Ouija - ???
Ectoplasm - ???
Immolate - seed searcher
Ankh - speedrunning, security, replays
Deja Vu - ??? (I use this name in the backend of Ankh for replays)
Hex - ???
Trance - color changer
Medium - ???
Cryptid - massive Balatro content mod
The Soul - online seed analyzer
Black Hole - this
like
Oh god thats REALLY bad
sounds like a cheese grater put through a woodchipper
i remember SAM from a very big genre of videosd
died out like a year ago but
was popular about 2020
So, I made a comment here earlier today, but don't know if it was seen. I have heard a lot of good things about this game, and while I am only really proficient in playing, and contributing feedback through how usable/easy/good whatever it is ends up being, I would love to help test! Don't know if there is something I need to do, or if my written announcing of this is enough...
hell yea, im down for testing
I did see your message, and I very much appreciate it. While I don't have anything to test yet, I'll be making it available here once I do
hey everyone! this is so awesome to know that you're trying to find ways to make the game fully playable for blind players! I'm loving to read all the messages and will be also ready to test if you need any help! I'm so thankful for all your effort to make it a reality, when the mod is in a usable state i'd love to contribute with donations for your hard work as well. also thanks for adding me to this discussion, this is so exciting!
maybe nice to get a keyboard controls mod too
shite this is probably useless, it says it relies on Tolk on windows (another abandoned project) and that the official downloads seem broken, so there's another distribution
which is just a dead link, hooray
another thing I found is this which isn't fully abandoned, but only supports windows: https://github.com/qtnc/UniversalSpeech
Hey! I know that you want to support as many operating systems as possible with the mod, but most players are using windows. there are many more screen readers and games for the system. for the players that are using either linux or mac, they are playing games either by using Wine or some virtual machine, because the choices for these platforms are very limited indeed.
Balatro does have a native macos version
yeah, but as far as I'm aware, Steam isn't accessible on Mac for blind users. so unless there's another way of purchasing it, for example on itch.io or gog, it won't help much with the Steam version.
that's good to know, I can focus on a windows-compatible version and wine will probably do the rest for linux
in that case I'll start testing with universal speech
awesome!
So, not sure how helpful it is, but I know the person (Pitermach), as he worked on some things for Slay The Spire! (Again...not sure how much this helps...)
Also good to know, maybe I'll try to get in touch if universal speech doesn't work out like I want it. Though the project in question is abandoned and if the description is accurate, I don't have access to a working copy of a library they require.
So universal speech seems more promising for now
All right! Definitely looking forward to trying out what you can come up with! Wish there was a demo to try the game out with the mod when it is available. Also, a little off topic, but is the game only single player, or is it multiplayer?
Only single-player, but iirc there's a multiplayer mod
unfortunately I'm not much of a C expert, so I might need some assistance here. I tried to load the DLL from the 2015 release to no avail, it errors out saying it's not a valid win32 application. I think that means I need to build it from source as a 64-bit dll, which I've tried to no avail. I don't understand the errors it's throwing at me, and it's worked for others according to a github issue. So I can only assume I might be missing some dependencies? There doesn't seem to be any documentation
I have just managed to find a distribution of tolk from the STS project, so I'll experiment with that in the meantime
okay we have some output!
keep up the fantastic work, that's so great, I'm really hopeful that I'll be able to play this masterpiece in the future, all thanks to your dedication and help!
HELL YEA
Although it seems to make some words longer? (It says "Multiple" and not "Mult")
Is that intended?
First preview, actual mp4 this time
I can change that for myself and myself only
the screenreader does that by itself
this is so impressive! i'm so hyped! I'll buy the game right now! do you know if it will still take a few weeks for a first test version?
I think I can do better than that
What I have so far isn't workable at all since it doesn't read out buttons and other game info, but it shouldn't take too much fiddling with UI elements to figure these out too
Something else I've also though about: there should be a way to skip parts of the speech (e.x. you have a joker with an edition and want it read out but you'd have to wait a bit for the desc of the joker to be read out, regardless of if the effect is known).
I assume it's already assembled in parts, so shouldn't be too hard to set this up
it's highly in parts - each differently colored text element and each line are separate nodes
I do convert the whole description into one string first, currently
github link btw, https://github.com/Aurelius7309/BlackHole
I believe it can all be skipped. probably the demo was made with a sapi voice, which is used if you don't have a screen reader running. if you have the screen reader turned on, it will use it instead, and it should work faster, plus it's more flexible to configure voice and speech rate
I actually am running NVDA with a default voice, I couldn't get SAPI by itself to actually use English for some reason
I'll take a look at this in a bit.
cool, thanks for the info. I always prefer to use the screen reader when possible. also thanks for the github link, i've added it to the favorites and will follow
out of interest, which screen reader do you use?
I use NVDA, it's definitely the most used, because it's being updated often and it's free and open source.
Getting an error from not being able to load "Tolk" module, is there a specific setup needed for the screenreader?
yeah, you need the DLLs in the bin folder in your game directory
oh ok
Can't seem to get it to say it's on Black Hole at the start but I did end up getting it working.
Mostly because it happens when the mod lua file is loaded and it's still talking during then.
It's playing for me, but I agree the timing is weird
Okay, got it reading badges, time for tooltips.
Only issue is that I think I have to structure it so it's badges then tooltip instead of badge + associated tooltip.
Not that bad if it's short.
i knew I forgot something, gotta support multiline
Also does NVDA use the plus on numpad? It doesn't work anymore.
Gonna configure settings rq
wow, this is epic, you are the best! at least I've already bought and installed the game to be prepared to when this big release becomes available!
looks like it wants insert, num insert or (if you enable it) caps lock
Ok yeah it has a few other buttons under input gestures.
Additional note: should silence TTS if an error occurs so the user doesn't have to do it themselves. Not sure how that's work exactly, but iirc you can hook the crash handler functions.
So probably add tts.silence() there.
Do you need a controller to do this?
It works without.
no, works without
I'm using mouse and it works fine
Oh nice
I might make a mod that lets you use the keyboard like a controller, which might go good with this
I don't think it will be that hard but i haven't looked at how the system works
Another question: should we indicate which part we're speaking? Like say, announce "Card description" if we're reading card desc, announce "Badges" when reading badges, etc.
that might not be a bad idea, but it might also inflate the length of everything
I wouldn't, as from the video it paused between them, but I'd say let the screen reader people decide
I don't think it would be needed, because after playing for a while you would have to hear the same announcement over and over before the description. unless it could be either enabled or disabled, so it could help new players, but have a brief mode to hide these announcements. but i believe things will be easy to figure out what's being read.
Buttons preview feat. some modded content and a crash from enhanced cards
26 slash 26 is a bit ugly
i also probably need to make the buttons look harder for text
it's perfectly understandable, it says that you've unlocked all of the 26 cards
How should it work for the tutorial?
Someone remind me to make a DebugPlus thing to restart and skip the tutorial
hm, worth considering
I was thinking 26 of 26 would be nice, but I don't think the game's dictionary will let me localize that properly
no worries, I believe it's fine the way it is.
buttons do work a bit better now, but some things behave a bit weird. Notably tab selectors read all tabs if the outer container is hovered, this always happens on controller
poker hand info reads like l v l 1 Pair ten x two number
page selectors don't read anything at all, arrows read less/greater
Blinds will need some extra work as well, their main boxes aren't hoverable
Could maybe add an exception for the select button to read the blind info
DebugPlus Cameo
descriptions also need to account for DynaText, I just noticed
dollar dollar dollar dollar dollar plus
imagine showdown blinds like dollar dollar dollar dollar dollar dollar dollar dollar plus
that is not okay
I'll keep working on this tomorrow, gn
Oh god there's giant lag spikes going from menu to menu
Dragging my mouse over the menus seems to be causing it.
Performance might be a problem.
I'll have another look at that
delegating to an event might be good enough, it's too expensive of an operation to search UI nodes for strings to have to do in one frame
Also moving the button hovering stuff into a separate .toml file since it's not related to card UI
Lemme try an event
Doesn't seem to have made much of a difference, might just be where the check is places doesn't work well with mouse.
Not sure on how this would be implemented but might be useful in some edgecases, but I got an idea that might help with reading UI nodes.
What if we added an ID very early on into the nodes's UIBox return values that gets checked before we recursively check them for text?
Then, since we now know what UIBox we're hovering over, we can target specific values to add to the string.
Like, if we know that we're looking at a collections UIBox, we can check the exact position the label and count text is instead of recursive calling to find it.
Thinking about it now IDs would only be completely useful on things other than collections UIBoxes (due to modded ones) but we can probably just check for something else.
weird, it's running smooth for me even with mouse
wow, fantastic demo! I can't wait!
Refined blind choices some more
Looks like the lag happens with SAPI only?
I didn't really consider using it since I couldn't get it to stop pronouncing everything with a german voice
maybe we can use a thread
I always recommend everyone to use the screen reader instead of a sapi voice, because it's much more responsive. sapi lags when trying to move fast in a list, starting and stopping speech, etc. I only use it in games that don't support the screen readers, plus the user will already have the screen reader running to launch the game. so no worries.
DebugPlus master branch cameo
quickly runs git switch dev
The dev branch hides the DT messages
I plan to re-enable them as debug messages when I get log levels working proper
I'm trying to listen, it says i need permission to do it. i've sent the request
Oops I forgot to set it to public
should be available for all to access now
I'll probably get to scoring next
Thanks so much, I've listened to it, it's so great that you're even playing without the visuals to have the same experience as someone completely blind, it's perfect! I can't even find words to express my gratitude.
Can't figure out why the dollars condensing doesn't work but I got blinds collections working.
Also fixed tooltips not registering DynaText
hey! I was so curious and tried to install the mod, and guess what? it works! I installed lovely, steamodded and downloaded everything from the black hole repo. I was able to play the tutorial, using NVDA's OCR to read the tutorial messages, and although the text got a bit confusing at times because of the OCR itself, it works, i was able to win three blinds, up to 1200. I'm still figuring out what each button in the xbox controller is used for, but will make a google search and find out. I know that this is still experimental and won't be recommending it to other users yet, but I guess that in its current state I can already tell I'll be spending the whole weekend playing it.
Amazing to hear it works! I'll definitely make sure to make the tutorial screen reader accessible as well as adding some controller instructions.
The main A/B buttons should get you most places in the game loop. I'd say X/Y need not be used at all (they're shortcuts to playing/discarding, but poker hand information is given when these buttons are hovered). The shop needs some more work for reading out prices, but generally the right shoulder buttons are used for buying while the left ones are used for selling
Here's another demo (once again I played fully blind) showcasing information about your score
I've managed to score much better in the second game, I've lost to the blind which needed a score of almost 17000. I'm still not sure how to check how many times I can still discard or play in a round. it usualy says: discard 5 x 1 every time. also in the shop I don't know how much each card, joker, pack, etc cost, and how much money I have left. if these messages or my feedback is anoying just say and I'll play quietly, lol. I don't want to slow you down.
I was wondering how UI would be handled for the parts of the game that aren't buttons and popups.
Such as current Ante
also i'm still figuring out the controls, haven't managed to find the default config, but it seems that using the xbox layout: a confirms and selects cards, x play the selected card, rb buy cards in the shop, lb sells them. not sure for the rest
oops, sorry for the spam, I've missed your last messages and explanations, I'll listen to this last demo and keep playing and discovering. it's even working in other languages, I've now switched to portuguese to test
Thanks for the feedback, I appreciate it. You'll hear in the demo I sent above that I added the amount of hands/discards left to the output as well as removed some redudant information on discards. The shop does still need some work, we'll get to that.
no worries
I did also push the version I used in that demo to github, so feel free to pull it down and try it
Localization is a given for any text the game itself provides, there's some external lines I provide that will have to be localized later, like the welcome message and score report
really awesome implementation of the scoring system! I'll go update it and test, thanks so much for everything!
I really appreciate the early testing :) it's getting late so I'll go to sleep now, expect more tomorrow
Note to self: implement shops/money and run setup next
not to say I'm reserving those for myself
I'm gonna continue tackling menu weirdness. Next target: poker hand list (it does not tell you the poker hand, current level, or use count. Only the popup info containing conditions to meet it).
actually your infotip addition somehow did that
previously it would awkwardly read the poker hand out as a line, but not the tooltip
this
probably reusing tts_hand_eval makes the most sense
Might have something to do with the h popup reading silencing the previous function.
have a fantastic night!
IT IS THE PROBLEM
still I think we should special case the poker hand list (by id or something?) to use the same info text as the play hand info
gn
Hey, been catching up on the messages here, and really excited for the chance to check this out! Am going to try and give the game a buy next week, and the mod a test when I have it! Thank you so completely for the hard work on making this!!! It is incredible to have someone so dedicated to spreading the games' name to a whole community! I am also looking forward to potentially being able to play this with the keyboard. I don't have a controller, nor do I have a mouse(I only have a trackpad...which is meh at best, haha!) But it is incredible to hear about! Thank you, again!
it appears the game has this functionality built in
just disabled
cool! and is it easy to enable it?
looks like it, but it crashed when I used it
Got it working (please note that the "to the power of" text is only due to Talisman, should just say the number normally without it).
possibly found the reason controller vibration is disabled on pc
ok disabling my rumble enabler fixed the crash
keybinds
really interesting, thanks for the keys! but how to enable it? is it a special file or mod?
thats perfect, thanks!
https://github.com/WilsontheWolf/balatro-mods/blob/master/steamodded/KeyboardController/keyboard.lua
Also I guess putting the keybinds into text might be easier to use with the screen reader shift: b q: triggerleft c: y x: x esc: start s: dpdown w: dpup d: dpright a: dpleft space: a e: triggerright
This mod is complete? (Sorry for the potentially dumb question... just wanna make sure I am following correctly.)
yes
turns out localthunk had a keyboard controller built in for testing
I just found out how to turn it back on
Perfect! Thanks!
I'll need to do some more configuring to make sure the info is displayed when when the info is needed, but the base for communicating cost/sell works.
I wouldn't say sell price in the shop cause under normal circumstances, you can't see that infp
oh also how's the mod work with flipped cards?
Playing cards already in the deck don't need either as well.
As for flipped cards, not sure.
There we go.
Is either unresponsive or says "face down card"
Does spoil the hand as well.
I'll replace 'face down card' for the deck pile i guess
not spoiling the hand type is also something I should do, I might just need to add the info after play hand is pressed
good enough for talisman compat, I reckon
Also no more 'ten to the power of zero', but trailing decimal zeros instead 💀
just a thought, but maybe for the purposes of supernova, played X times this run could be read after hand level? 🤔 so before hand chips and mult
I feel like hand chips and mult will often be more important, especially to new players
Still not sure about tab shoulders - I ended up with something that sort of works with mouse (in that hovering the outer container doesn't read out all the labels but only the current one) and partially works with controller (controller snaps to the outer container, which stays selected when changing tabs, so no output unless you're using shoulder buttons while focused somewhere else)
the tabs you mean in the settings for example when changing between game, graphics, audio, etc? if yes, it's not a big issue, we can explain how the screen works in the readme file and it should be easy to understand. it works the same for the deck view. at least when moving down and up again it will say the name of the tab, so works pretty well
i've tested the keyboard mod, it works as espected, however I can't find a way to purchase stuff from the shop, because I believe the right bumper is used, or to sell stuff with the left bumper. is there an alternative way to do it? because pressing space doesn't work, and pressing x i believe is used for reroll. if i press c it goes to the next round.
Does pressing E work?
also thanks so much for adding the price for items in the shop and the money announcements, loving it!
don't think so. because e is mapped to the right trigger instead of bumper. so it opens the deck view. i can play with the controller just fine, i was just testing the keyboard mod to recommend to other players in the future.
I'll probably add the keyboard mod into black hole itself for ease of access, maybe there can be a keybind to toggle it
I should be able to modify it so the bumpers are also supported
good idea. I also added the achievement enabler and more speed, although I haven't found a way to find the extra speeds, maybe it's not supported, but I was just testing. it might be good to have the most useful mods packaged together, so it would be easier to install for a first time user in the future.
really cool! I believe many people will prefer to play with the keyboard.
More speed is deprecated, we have Nopeus instead -> https://github.com/jenwalter666/nopeus
You'll be able to toggle into the new options by pressing 2 if it's enabled
will try it, thanks!
USE IT
lol
Cashout screen things, thinking about changing the required score text for end of round
It should be as simple as doing G.keybind_mapping["key"] = "leftshoulder" and G.keybind_mapping["key"] = "rightshoulder"
How's this? Been getting a lot of fake hovers in the shop, might need to add some interrupts
Let me know what keys you end-up mapping and I'll add them to mine as well
Also if you just copy my mod as is, it should work if it's loaded multiple times
i was thinking of including a remap dialogue
I didn't want to do the work
well a TTS dialogue isn't that universal tbf
I was considering just having somewhere in the code that was easy to edit for the keybindd but then saw
had keybinds already and said good enough
For reasonable defaults, Z and V could work sticking to the left side
thanks so much for the instructions, I added the two lines to the file and now the keyboard is fully working!
No problem. Glad its working. I can add those keys tonight to the main repo
Just updated the repo, added the keybinds without requiring debug mode and with custom config for keybinds.
Here's a demo:
wow, it's fantastic and quick to configure the keys using this menu, this is great!
I'm glad you like it!
feedback after losing a game: it looks like I've unlocked some new things, because there were different sounds playing after pressing the space bar to continue, but it seems that the screen reader always stops talking after the game over screen. it kinda gets stuck in the menu.
Achievements aren’t handled as they’re not hovered over, but instead pop up on the sides. Not sure how they’ll work.
But unlocks might be something overlooked.
We can just delegate the TTS on achievements to when they pop up - but I'm not sure we it can be done completely cleanly concerning timing
the achievements are accessible from steam itself, there's some kind of notification sound to tell that you've got a new one, at least on windows 11. i was just wondering if the menu changes after the game over screen, because the last two games I've lost I had to restart it to go back to the main menu
I've actually thought about unlocks earlier but haven't gotten to adding them yet, good to know the game over screen needs some work as well though
I was wondering if some decks only have two suits? because it seems that in the last game I was drawing only spade and hearts during the whole game. could it have been pure luck? I was scoring flush every time, scored almost 20.
or maybe I chose a different deck, not sure if this screen is already accessible, so just curious
The deck select screen is next on my to do list, it is not yet accessible
You're right, it is a deck's effect. Namely Checkered Deck - Start with 26 hearts and 26 spades in your deck
because after going to new run, I can move left and right but am not getting feedback from the screen reader, but I guess it's the deck selection screen
a, thanks for confirming it, no worries, take your time.
I was wondering how we would do deck select.
Maybe speak the deck info after switching which one is selected?
Additional note: some options in the options menu need to be fiddled with to speak correctly (namely checkmark boxes).
I noticed something in the shop: the leftmost item in the second column is showing the wrong price. example: it says the balance, and instead of saying buy, it says sell: 5 dollars, but I didn't buy it. the item in this case is: reroll boss blind 1 time per ant, 10 dollars per roll. i think that items in this position in the shops always cost double the ammount being shown.
For deck select, there's two things worth trying imo. Either we use the tab shoulder buttons (inconsistent between controller and mouse) and option cycles for deck and stake to speak the info we need, or we bypass the UI entirely and make it another interactive dialogue
That looks like an oversight concerning the shop areas that should have the buy price
Did I miss the vouchers?
I know I covered shop jokers and shop boosters but might’ve missed vouchers area.
yeah
It's related to the volchers in the shop, just confirmed. the price being displayed is half of the right one.
should be a quick fix, I'll make sure it works and push it upstream
awesome
apparently I also forgot to properly enable keybinds on startup, that'll be fixed as well
There is currently an in-the-works rework for the deck UI but this isn’t finished yet and is also prob gonna be a part of Steamodded (AKA no injections available) but does make this less of a pain.
yeah i know, that might be easier to make accessible once we have it available
Thinking we go with bypassing the UI for now
it's up
thanks, will update right now!
I believe I've found the reason why I was being stuck in the game over screen. it's because even though the b button is mapped to shift, it doesn't do anything. it acts like the button is disabled. after remapping it to lshift after testing with the controller, it's now working perfectly, so I suggest changing the initial config to lshift
Getting a crash from hovering over any cards in collections on the main menu, it's to deal with the checks for shop_areas.
oops
I'll fix it, mostly because I have other stuff to push to main as well.
alright I'll wait for your stuff since my working tree is mostly clean rn
It involves changing all uses of find_strings to this.
Mostly for convenience and less copy/pasting of it.
good stuff, that looks really clean
Pushed to main
Partial progress on run setup, though contnuing runs is admittedly the easier part
great job, loved the demo! plus all these spoken stats are really useful!
they're the same ones that are displayed on screen when continuing a run
For some reason I haven't been able to capture the first input after starting the game, might have something to do with the controller not being focused? I'll see what I can do about that, right now pressing Y will first send you to the play button
oops, I never noticed that because I'm playing the games until I lose, then I restart to bipass the game over screen and start again. but will pay more atention to these stats next time
iirc that text currently also doesn't read, the menu is frankly a bit awkward to make usable
Something I'm also noticing is that when hovering over the skip blind it's not reading the tag, but it seems like tts is processing it.
It clearly does go through card_h_popup but TTS says nothing, and it's not processed by process_hover. Weird.
OHH probably because this is checking if the skip blind has TTS but this is stored inside it.
Bruh where the hell is this TTS getting stored
I would assume it's in the tts of the tag, but the tag isn't the node being hovered?
Yea
My GOD this is buried.
I could try to narrow it down since this is still within another spot with an ID I could check ("tag_<blind type>") but this still works and it only cuts one children[2]
And also varies depending on the blind in question (so more complicated).
I'd say it's good enough
Might need to pre-generate the tts if we want it to be included in the blind select text instead of just saying 'or skip blind' since it doesn't generate the tag infotip
God Thunk why is it stored in the tag's sprite and not just the tag?
Bleh, guess I just have to recreate game's generation of UI but just ignore all of it.
Well maybe not the UI but at least the TTS stuff for it.
Ok, managed to get it to slightly work, but it's only speaking when hovering the UIBox behind the buttons. Button themselves ignore it (probably because they're a child of the node that has the tag_container).
It took making a recursive function to check parents of a node for a specific UIElement, but managed to get it working.
Only problem is since they're not indexing the info created by card_h_popup the badge check will have to be reworked to fit with tags (although this is mostly meaningless if you're using the screen reader for base Balatro, as Steamodded is the one creating mod badges for tags).
Pushing to main, als fixes a bug with BlackHole.find_strings (if you returned nil from search function it will error fron concentrating a nil value).
Almost got deck selection done, just need to make sure the stake selection actually works
hey! that's perfect! I'll have the whole day to play the game and test everything!
Here's a demo, I'll push everything upstream in a moment once I've confirmed it's all working right
the demo is fantastic, it's so intuitive and guides a new player with the menu, giving every detail, and it's so easy to start a new game, I really loved it!
All done, pushing to main
great job as always! everything working perfectly! even the tags are reading before skipping the blind.
the initial welcome message of the mod should wait a bit for the game load to play if possible, because it's only able to tell you to press the Y button to start a new game once the game is fully loaded and you're in the main menu.
after losing a game, it still doesn't work to press the Y button to start a new game with this awesome new menu. probably because it takes you to a different screen indeed.
never mind, you can ignore this message, I'm sorry. after launching the game again, it told me the first time that I could press Y to start the game, I guess It didn't happen at first because I was running the updated version for the first time
the game should be able to process the run setup at the time the message plays, seems like I messed up the conditions a little bit? Right now pressing Y should work once you return to the main menu, but I'll change that
yeah, it's all good. just happened the first time I updated the game with the new files. when running the game a second time, the initial welcome message already told me I could press Y to start a run. I didn't have to press 1 to repeate it and learn about it.
I just pushed another small update - you can now start your run as soon as the welcome message starts reading, even when the game is still on the splash screen. The main menu is skipped in that case. I also extended the menu to work whenever the game is paused. This means you can now start a new run in the middle of your current run by pressing start (escape), then Y (holding R on the keyboard also works if you don't have it mapped, but this option allows you to change the deck and stake), or press Y on the game over screen
yay, downloading it now!
also added the information that you can press start to back out of the run setup, should you need to, since it does disable all other controller input
feedback on the latest update: after losing a game, it's indeed possible to press Y to open the new run menu, however after pressing A on a deck to start a new game, the screen reader doesn't speak anything. it still seems like it's stuck in the game over screen. I can still hear the sounds from the new game started, can move left and right, but there's no speech
it crashed when the main menu was still loading and I started a new run with the new method of using the Y button
I specifically tested that - did you try to start a run before the welcome message started reading? If so I'll have to disable it until then
no, it was after the welcome message. but doesn't crash every time. happened two times so far, but i'm not sure if there are other factors involved or if it happens only with the right timing. i'll keep testing
alright I'll investigate. Could be that it's triggered by there not being a run to continue
question regarding the taroth card death: it says I can drag to rearrange the order, but I'm not exactly sure how to determine if a card is at the left or right. i'm playing a build with fibonacci, so it would be useful to know if possible.
maybe the left card is considered the first I select and the right one is the second? will see if that's the case
sorry for the stupid question, just confirmed that it works as espected. first card selected is the one on the left.
That is not the case
I'm not actually sure how rearranging works with controller since I mainly use the mouse
I would assume you can rearrange by holding onto the A button and using left/right?
hmm, haven't tried it, but there's no need to rearrange it, I just figured that the first card selected is the left one and the second is the right, so it doesn't matter where it's located.
From my knowledge that's not how it works though?
This is correct
might not be the easiest to navigate, maybe I can come up with some shortcuts
More often than not, you would want to turn lower card into a higher card, so it is useful to rearrange cards. If I remember correctly, once you hit rightmost card, clicking "right" will send you to the leftmost card, which is also important to keep in mind (in such case, the second card you select will be the left one). If you do not sort, nor rearrange the cards, you can only tell by the ranks and suits
I only just figured out why this was happening... Turns out when I suppress the output of hovering UI elements while a played hand is being processed, the event that's meant to get rid of the suppression never gets executed before the game over screen hits. So this suppression stays active indefinitely, which is also why there would be no output on the game over screen
Maybe before using the tarot the narrator could announce selected cards?
actually I don't think I need to, there's already two options
the D-pad will move the card left/right one if possible, the left stick drags it freely ( can be used to send way right/left)
good catch! I just noticed that the crash that i sent earlier when launching the game seem to happen right after closing the game after losing it, so maybe it will solve this issue at the same time as well
I've been unable to reproduce the crash, do let me know if it comes up again though
I'm also overriding any 'new run' text to instead tell you to press Y
Clean enough, surely
great!
Updated the repo with these changes
downloading right now, thanks so much
One thing I noticed is that there's no way to hover the upcoming blind selection with controller to see what boss blind is next - I must have missed that in testing with mouse initially
you're right, the only way to see what the boss blind is is when you get there
I found a way to enable it, i just pushed it up. Also fixed a crash when trying to read descriptions with special UI elements (notably this affected The Fool tarot and Blueprint/Brainstorm jokers)
Though these elements currently still don't read, I'll need to have a closer look at how they're structured
I've tested the new version, really awesome feature to read the upcoming blinds! loving it!
this is already shaping up much better than I could have anticipated
yeah, it's a dream come true. I thought it would take months to reach the current state. the current version is so good, It solved all crashes!
questions: is there a way to replay the tutorial? I created a new profile but it was skipped. also, is it accessible to start a seeded run?
Nope, not at the moment iirc
I've skipped over seeded runs in my initial implementation of run setup, I need to think some more about how to best add it. The way I set things up means there's no underlying UI elements to the menu, so I can't easily add a text input. Would it be sufficient to read seeds from clipboard?
sure, it's even better. this way we can just use the seeds from the game over screen from a previous game or copy a seed from another place.
a mod to replay the tutorial should be fairly easy to make, but surprisingly I think it doesn't exist yet
i've managed to rename my profile with the built in keyboard, which is cool, but using the clipboard for seeds is the perfect solution
yeah, I was searching ways to replay it, but the only option is to delete the whole balatro folder and disabling steam cloud saves, so obviously I won't do it, lol.
I'll probably get that out there once I've made the tutorial accessible
i guess i'll put this in here as well, I just updated steamodded to have much faster load times - i really recommend getting this newer version
thanks, I'll update it now!
I've downloaded the zip for steamodded and replaced the files, but I'm not sure if I downloaded the same old version or the updated one. if i go to releases and click on the alpha, it's the latest?
Should be alright. Can you send a screenshot of the main menu so I can confirm?
though since there are no 'official' releases of v1.0 as of yet, it's not even easily possible to grab an outdated download
yeah you got the new version
cool! thanks!
maybe it's not a bad idea to include the steamodded version in the welcome message
yeah, It should be useful to know.
I've noticed something when playing the mod in a different language, the tags aren't read, it just says skip blind for. and nothing else. I don't mind it, because I'll be playing in English anyway, but am just reporting it.
alright good to know
Also added the game version, please let me know if you think that makes the message too long
Changes are up
i cant seem to make this mod working 😭 , what am i doing wrong
huh, that's weird...
im also not familiar with modding, which doesnt help
I think that's a regression in steamodded
Just pushed something to steamodded, that should fix it
black hole was trying to access the config folder before it was created, so I moved the timing of creating that folder
not like it matters, either way it should now be fixed by updating steamodded
do i need to use the command line to install the new steamodded?
you can use either method. if you used the command line the first time, you just need to run git pull to update
but simply downloading and replacing the files is also fine
it still doesnt work, 😔 and its also pretty late here, so im gonna try again tommorow
I really need to get install instructions up if I want to get this tested more
you need to put the DLL files from the bin folder in BlackHole alongside Balatro's executable
looks like you need to move the contents from the bin folder to the balatro steam folder
i was working on the readme a few hours ago, I wanted to put a zip file with all these mods on google drive and always keep it up to date, not sure if you think it would be allowed to do it, but it would make things easier for new users
here's the readme
I think I'd rather use github releases to package things
Just as to have things in one place relative to where it's being developed
this is great, thanks
I think I can add a way to change the volume without navigating those tabs
sounds good, will help first time users
yay! I've won my first game on the base difficulty with flush level 10, am so happy but I know it's only the beginning, lol
oops, managed to crash the game again. it happens when the main menu is still loading, it's in the splash screen. I was in the new run menu, browsing the difficulty levels, will post the crash
It does seem to register a few nodes during startup.
oh it's that crash again
I don't fully get that one, since the value is set on the previous button press. I can only assume it gets reset at some point early in the splash screen phase
maybe what I should be doing instead is autoskip the splash screen when pressing Y instead of waiting until starting the game
yeah, auto skipping the splash screen might fix it. pretty sure that the crash always happens before the main menu is fully loaded
Took off my glasses and managed to win on red deck white stake with full house/4oak, the mod Seems to be working quite well
but i cant seem to find any way to know which ante im on,
and The TTS doesnt tell which card the hook discarded which is kinda annoying, but its not a big deal, just qol stuff
Great to have people testing this, I completely forgot about the hook lmao
I guess there's other blind effects that might apply to - you can find out what joker crimson heart debuffed if you just go through your jokers, but it might be more convenient if it just told you
Also about the wiggle jokers, loyalty card, invis joker, and to lesser extent DNA and trading card, does the TTS need to add a line to tell that those jokers are online?
Matador isnt a wiggle joker, they will suffer as we do
I think that's a good addition, I'll have to see where to add the TTS so it doesn't get in the way of anything else
oh this might be only for mouse, but the TTS also doesnt say which slider corresponds to which audio
this is true for any slider option with mouse
this is also true of controller
I still need to get these working, they're a bit fiddly
suggestion: add a shortcut to open the run info with the left trigger, since the right one opens your deck view. because the run info is only accessible while in the shop or before choosing or skipping a blind. the button is available if you use the mouse, that's why I'm suggesting it.
also if you're using the keyboard, it would also help much if there was a special key to report number of discards and hands left, because when using the mouse, this info is available at all times, even if you haven't selected any card. right now, I need to select at least one card and move down to find the info. it's not much, but would be a good quality of life improvement.
Run info is also available during rounds, you can navigate left from the play hand button to options, then up to run info. But I do think that's confusing. It's actually also mapped to the 'back' controller button, I'll add it to the mapping.
I think the solution here is to force the play and discard buttons to be focusable even if the button is disabled
testing some more, I find the navigation is jankier than I thought - it is possible to navigate to run info only if the leftmost card in hand is selected??
I'm adding a configurable keybind for the keyboard controller's back button, it will be set to backspace by default but it won't integrate into existing config - so you'll have to set it yourself for it to work
yep, that's what it seems. but if you can just remap either the left trigger to open the run info, or the B button it would be good. it would make more sense if the left trigger was used, because the right trigger opens the deck
all right
there's a slight issue in that being the left trigger isn't actually unused - it brings up the deck preview, which is inaccessible as of yet
so the back button should be fine?
B is also taken, it has the same functionality as the right mouse button, i.e., deselecting all cards
yes, it'll work great!
i'll probably remap the back button to the tab key, because it's close to the other ones, but if you're adding it to the button mapping menu, everyone can choose.
I wasn't aware that B deselects all cards, thanks for the info.
I might make tab the default actually, now that you mentioned it
Pushed the new version upstream just now. The play and discard are now focusable regardless of state, added the back button (you still need to configure the keybind) and added a message to indicate which cards The Hook discarded
I also replayed the tutorial to see what I'm dealing with - I'm not sure I can make a good accessible experience out of it, the UI with the next buttons is a bit weird.
Maybe I'll just add a hotkey to read the entire tutorial text on demand
I'd love to hear some thoughts on that
I'll download the new version in 30 minutes and give feedback as fast as possible. If you can make the screen reader give the tutorial info in the main menu by pressing a key it would be fantastic!
just curious, did you find a way to announce the ante level? also, does the latest update skips the splash screen when it's being loaded?
didn't add it yet, just need to figure out where to best put it. Maybe I should add it to the message on blind selection?
like Ante 1 Small Blind - Score at least 300 etc.
yeah, that's perfect
Ive downloaded the latest update but am getting a crash when running the game, it doesn't load.
Oops! The game crashed:
Syntax error: functions/UI_definitions.lua:1012: '}' expected near 'force_focus'
Failed to get additional context :/
Stack Traceback
(3) C function 'function: 0x1977d4a0'
(4) global C function 'require'
(5) main chunk of file 'main.lua' at line 809
(6) global C function 'require'
(7) Love2D function at file 'boot.lua:323' (best guess)
Local variables:
c = table: 0x1977a328 {identity:false, version:11.5, accelerometerjoystick:true, modules:table: 0x1977a378 (more...)}
openedconsole = boolean: false
confok = boolean: true
conferr = nil
(8) global C function 'xpcall'
(9) Love2D function at file 'boot.lua:362' (best guess)
Local variables:
result = boolean: true
(10) global C function 'xpcall'
(11) Love2D function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '(Love2D Function)' (defined at line 355 of chunk [love "boot.lua"])
inerror = boolean: true
deferErrhand = Lua function '(Love2D Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(Love2D Function)' (defined at line 355 of chunk [love "boot.lua"])
I've tried to update steamodded again and download all files one more time, but no luck
odd, I can't reproduce that crash
have you tried deleting the old files first before adding the new ones?
hmm, i'll try again
I've deleted the old folder, downloaded everything again to a new one, but am still getting the crash. if I delete the folder the game runs fine without speech. I've even deleted the BlackHole.jkr config file
I tried your mods folder, and I'm still not getting the crash. I did see in the dumps what went wrong, though I don't understand why
A lovely patch seems to be inserted in the middle of the matched pattern for some reason
maybe if I delete some other config file it could work? strange, all other versions worked great.
it's not about the config, the game doesn't even get to load it
yeah, it crashes so fast, like one second after pressing enter on the shortcut. i'll wait for a new version then. i have a copy of the old files, will keep playing with them for now
okay i changed it to a different patch type, hopefully lovely can't screw that one up. I'll report it forward
all right, thanks so much
oh I just saw, you got an outdated version when installing lovely
missed that completely
a, so that's probably the issue! I got a version from last week, it was updated recently?
No, I assume you just got the wrong download by accident?
I can just send you a direct download link to the latest build
the issue causing the crash was fixed in that version, the other patch I pushed should work fine regardless
yay, it's working! windows defender was flagging the dll as a virus, so I had to disable this shit, but it's all good now
sorry for the trouble
all good
I actually had to start including a section about antivirus in the steamodded instruction because it's coming up so often: https://github.com/Steamopollys/Steamodded/wiki/01.-Getting-started#about-anti-virus-issues
this latest update is so awesome! being able to check the number of discards, playing hands, and easily check the run info is so helpful!
just 2 minor things: the back button wasn't set, so I had to manualy set it to tab, and if I press the y button in the splash screen the game still crashes when the menu is almost loaded
i think i remarked this earlier, steamodded config works in a way where new config values inside another table aren't automatically added to existing saved config files. This won't be an issue for anyone freshly installing the mod and can be mitigated by removing the existing config
all right, thanks for the info
hey! I finaly posted the topic with all the instructions to download and use all mods, I'm trying to help every player. I've used Github links for everything, I'm not hosting any files. the topic can be found here: https://forum.audiogames.net/topic/54143/balatro-accessibility-mod-available/
Balatro accessibility mod available! (Page 1) — New releases room — AudioGames.net Forum — Discuss audio games!
Amazing, I'll work on getting the readme set up as well
I saw some confusion in the thread about the keyboard controller being disabled by default. Should I change it to be on by default?
yep, if it's turned on by default it would be better.
Just pushed another update up to github. The tutorial can now be read out, I also enabled the keyboard controller by default and made the game skip to the main menu as soon as you press Y. It has some visual glitches if you do it too early, but it fixes itself once you've started the run or if you wait for it, so it's not a big deal imo
that's fantastic! I'll test it right now and will announce on the thread that the update is availablh! thanks so much!
I'm also setting up the readme right now
still getting the crash when I hear the first announcement of the Balatro and mods version, I press Y and start to move left and right to choose the deck, but this time it looks like the crash is happnening faster.
I still haven't been able to trigger this crash myself so I'm not exactly sure what's causing it, but I think I can now understand better what's going on with it. I'm confident I have a fix for it. It looks to be unrelated to the splash screen timer and should work regardless, so I think I'll revert that other change
that's cool!
Done, pushed up together with the readme
a friend is asking in the forum if he is allowed to create a script to download everything from the github pages and move it to the right place for the instalation of all the mods. do you think it's a good idea or not?
I'm concerned it would also run into issues with antivirus. There's already an update script that requires git, using a mod_urls.txt file, but it doesn't take care of the DLL files. I don't think it's in this server, but I can send it here
thanks for the script and the info, I understand what you mean. do you think that in the future perhaps the game will have official mods support with the use of the workshop? it would be so great! maybe it'll be one of the announcements for the future from the three of a kind update.
Workshop would probably not be compatible with Steamodded/Lovely as it stands due to the kinds of code injections it uses. It might come at some point down the line, but it's becoming more unlikely for the modding community to adopt it if it does, and I am sure thunk would have reached out to the modding community by now to see what we would need, if this were coming very soon.
PSA nopeus was moved to this new location, the old link won't work anymore
thanks, just updated the post with the new link for the mod.
Added a release with the script and instructions to use it: https://github.com/Aurelius7309/BlackHole/releases/latest
the guy that was interested in making the scripts told me he would be using powershell to create it, and that he can disable the antivirus before moving the dll and all required files, and when it's all downloaded and moved to the right place the script enables it again. he said that it would even be able to detect if there's a new version and replace the files
Disabling antivirus is nice and all, but an exclusion for the balatro directory is still needed, it's checked for each time the game is run
So creating the exclusion is absolutely necessary, I also linked some instructions on how to do it in the new readme/release instructions
wow, the latest release is great! it completely fixed the crash at startup and the readme is also awesome! can I use it in the main post of the forum? it's much better than the one I wrote
Please do
it's now updated
do you have a direct html version or something?
you could just link to the readme directly
does blackhole provide methods for other mods to use it's tts engine?
was thinking i might make DebugPlus's console (at least somewhat) accessible
it exposes love2talk's export as a public tts
tts.silence() stops all current output, tts.say('Something') speaks the given string (queued)
nice
also for the screen reader people, how would you expect the console to behave? Does it talk when you type a character? Does it talk when you use the up key to use last command? Does it talk when it opens the console (should I make a chime instead of it talking?)?
also made a reddit post for this
oh also I was looking and I think we can laod the dll's from the mod directory instead of putting them with the game's exe
that would be easier, but there's also still lovely
well yeah but then you don't have extra exe's lieing around and its easier to update them with mod update
I don't think I ever need to update the binaries
eh they just sit around
also they might get nuked if the game is reinstalled but the main mod stuff won't
but also just simpler to install is nice
anyways how would i go about doing that
I'm testing it rn
ok so the game didn't crash
but i don't have tts
might be cause linux
do you get tts if you load them from the main dir?
nope
tolk supports these screen readers, haven't looked too much at linux availability
well it's in wine
yeah ik
I think it should just be
not sure how/if NVDA will run through wine though
fair enough
can you test if this works
also does mac support work
cause I can pull out my mac
love2talk should support it but I haven't got anyone to test it yet
yeah it works
I'll change it then
the release still distributes lovely as to keep it a "quick install"
looks like blackhole breaks some of the key registering stuff for DebugPlus
I would assume so
I literally block the normal processing of key/controller input for some things
I also block the handling of key inputs for when the console is open but I guess you block them harder
oh also I might have got a super jank hack to get tts to work on linux
oh, what is it?
I can copy the env function to somewhere as env.exe and then I can use it to run linux commands from wine so I can run killall espeak and then run espeak text
also I don't belive this has a way to see if it is currentl speaking
looks like I can't autoamtically setup the thing
well
ok well I got it working but it also prints an alert box sayign not found
screen readers don't have this either, so I don't rely on it to begin with
okay
also this doesn't seem to work on proton
doesn't throw error or speak
ok I got a log running
looks like I don't have a path
ok, so i bought the game to a friend and he made this script in powershell. if you run it as admin, it's going to download all files from the Github repos, extract everything to the appropriate folders, but it will disable windows defender and add all appropriate folders to the exception and enable again in the end
he's going to make an executable now. i've tested it and it's fully working, it moves the version.dll to the game folder, as well as the contents from the bin folder in the BlackHole mod.
it also installs the Nopeus mod and achievement enabler. and when there's a new version, you just run it again and the mods should update.
we found a way to make it work without copying the bin folder to the game folder
it's pushed now so it should just work
thats not a great sign
oh you made an oopsie
forgot to put a ()
Doesn't quite work
The Y key wasnt working and then it crashed
I gtg I can do some debuffinf later
tolk.lua returns a silence function but mac2speech.lua doesn't?
Looks like it can though https://developer.apple.com/documentation/appkit/nsspeechsynthesizer/1448392-stopspeaking?language=objc
I really haven't touched the macspeech module at all
but I did have to add the silence function to the Love2talk export myself
oh gosh it's deprecated
I'll add it to the export though
The whole synthesizer is 💀
yeah that's what i mean
not only depricated but removed from newer macos versions
also depricated in 14.0 and I'm running 13.x
looks like with the new api we also get the ability to not inturupt
for inturrupting should it interrupt immedatly or after it finishes the current word?
rn I do either "silence right away" or "wait for all current text to finish reading"
should right away be immediatly or after the current word?
for the MAC OS you mean? I believe it's better to do it after the current word. the windows version is working perfectly as it is, but unfortunately I don't have a MAC to test.
yeah I'm rewriting the mac handler to use a newer system
it wasn't quite working before
that's what you get from abandoned projects, huh
and I got a syntax error from auto correct 👍
I should probably install an ide on here
my dream would be to be able to play it on ios at some point in the future, but I'm almost sure it isn't going to be possible with this mod
I mean the api I'm using is in iOS
but we don't have lovely on iOS
also per the modding rules we can't talk about porting to other platforms
also I segmentation faulted it
oops, i'm sorry for breaking the rules then, never mind, i'll wait for an official announcement in the future, but if there's no way to use lovely it's probably not going to be possible
I mean you didn't break any rules just saying you want it, but we can't really do anything to make it possible
I'm getting car sick so I will have to stop working on this
no worries, thanks for all the help
I also made a separate mod that includes just the keyboard controller and a GUI menu to configure it. It's incompatible with Black Hole, so you should not be using both. https://canary.discord.com/channels/1116389027176787968/1271227371911118848
OMG, I've just discovered the challenges by accident, looks like I'll play the game for hundreds of hours. to unlock the next challenges you just need to unlock more cards?
Once you've unlocked challenges (by beating 5 decks), you unlock more challenges by beating the previous ones
I am also planning to add the challenges to the interactive run setup, just haven't gotten around to it yet
cool! I still need to beat 3 more difficulties to unlock all the decks
awesome, no worries, take your time, I'm managing to understand how they work, just takes some more time to find where everything is in the menu, but it's doable
good news I figured out the segfault
it now just works™️
trying to setup OBS but it seems to have froze
ok well back to phone recording
Which of these 2 feel better?
yeah for some reason the y key doesn't work
pressing the c key seems to work
but it still says press the y key
oh I was thinking I should see if love2talk would take a pr and someone already made the same changes and made a pr for it
also I was able to fix the DebugPlus conflicts on my end
hey! the second recording sounds like it's better, more responsive as you move from one option to the next.
Yeah that's what I was thinking. Thanks
it's the Y controller button
Hi! First of all thank you for making Balatro accessible! @queen dove @woeful ether @glacial plank. 🙂 Similarly to @static flume I am also working with game modders and devs on improving accessibility for totally blind. I worked on games like Hades 1 (Currently Hades II) or other stuff @static flume is more in to deck-builders. 😄
hey and welcome bro! Lirin is working with developers for more than 10 years. thanks to him we had the first fighting game fully working with the screen readers thanks to the tolk dll, it was Skullgirls, back in 2013. now thanks to him, Brok the investigator is also accessible, and there's work going for the crosscode rpg.
I believe that Sightless Kombat is also coming here to give good feedback and suggestions
Welcome and thanks for your service for the blind community!
Yes indeed, I saw his post on Reddit and reached out to him
yes, I saw his post as well before going to sleep yesterday and was so happy. it's the best feeling when I can have the same experience as someone sighted with the same game, so now I'll probably interact with other players as well. I've also sent the mod to another friend, suggesting making a video to help people get started with navigating around and more tips for beginners with the mod.
Amazing
Thanks guys for the warm welcome! 🙂 I've played the game for a bit and loving it a LOT! No idea if I understand the shop and jokers fully as I've defeated the first blind and got something from the shop for 5 bucks (?) but no idea how to use it during the run. 😄 (I am still learning and I played the game for once. 😛 )
Why are other keys read as keyboard ones but this as controller?
the number keys are for setup-related things
you're meant to be able to play the game itself with just a controller
but you might be right, maybe I should clarify it's the Y button
the startup message is already plenty long though
I've posted the mod to the Games subreddit and it's getting awesome comments and interest, almost 200 upvotes. also just won my first challenge, yay!
ooh do you all copy balatro and past it into lua and change thigns then?
or how'd u do this?
(am learning from scratch) :)
we have some quite advanced tools that allow us to make all these amazing mods and distribute them. Namely Lovely allows patching the game's source code at runtime without a manual injection step, and Steamodded is our mod loader / modding API of choice (i'm actually Steamodded's top contributor xD)
i already made my balatro mod ready
tbh i just need to get lua and get learning
and trying
and testing
:D
The issue with modifying the game files yourself is that it's harder to share with others and load multiple mods at the same time. If your just making little twekss to the game, lovely is super good for that. If your adding new content, chances are steamodded is what you want
i got both :)
oh, I've just received an email regarding localization of the mod to other languages. the only thing that wasn't working as espected is announcing the blind tags. if it was set to another language, it just says: skip tag for, and doesn't read it.
there's a few texts I've had to add myself that aren't in the base game. These will need to be localized
a, thanks for the info, so that's why. I think I'll start translating to Portuguese today, if I manage to stop playing, lol
I'm curious about one more thing: if you have many cards in your hand, usualy more than 8, sometimes with cards that are face down, the screen reader doesn't say anything when you move to them. it only seem to happen with big hands. this way sometimes is a bit hard to know what's currently selected, so you have to deselect everything a few times to make sure you're discarding everything you don't want.
huh, I'll try and investigate that. It might just be that the controller is a bit jank with high hand sizes in general
thanks so much! as far as I've tested it only happens with the big hands and with at least one card turned down.
I'm checking the en-us.lua file, it's really easy to translate, however the blind tags are probably located in another file. I mean, all other text used by the mod is there.
I've found the skip tags' text doesn't always read fully, I'll see what I can do about that as well
awesome, thanks
Let me know where I can find the mod text so I can translate it to Polish if possible of course. 🙂
the file with the english text is in localization/en-us.lua within the mod files
Thanks!
Skip tag tooltip reading depends on the return featuring specific text (in order to stop it being read when hovering over the back of the blind UIBox) so it's probably something with that check.
Spaghetti solution to a spaghetti problem.
Maybe the function to search for a parent with the UIE child can have a capped depth.
(If it even is from searching too far).
question: if I choose a taroth card in the shop and my hand is set to suit, it's hard to know what card is to the left in order to rearrange. if it's set to rank, it's easier because cards with a higher value always start to the left. but there's no way to change to the rank in this screen to use a consumable. would it be possible to have a shortcut key to change it in the future, or some other method?
You can drag cards around if that helps
I feel like the controller might have a bind for that but I don't know what it is if it dkes
ok never mind my last message. I just confirmed that if i drag it all the way to the left it stays there, I thought it would not stop in one place in this case, but it does, sorry for bothering you.
I'll get to brushing up some of the pending problems / feedback soon, for now here's a full run I played today with the mod: https://www.youtube.com/watch?v=MlIA7otmLaQ
Demo of a full run with my new Balatro mod "Black Hole". It provides a screen reader integration to make the game accessible to blind / visually impaired players.
I am not blind myself, but this run was played from start to finish with my monitor turned off, as to better reflect the intended experience.
If you would like to try the mod yoursel...
good one, congrats for completing it! can't wait to try the update!
yesterday I was able to beat the black and blue difficulty levels with the checkered deck, now only orange remaining to unlock all decks and the gold one to finish the easiest deck
Congrats!
I was thinking for cards jiggling to indicate something (like DNA and trading card) should there be some kind of sound queue?
perhaps, but I wouldn't want it to be too annoying either
Some other things to note:
- In the run I played today, I had gros michel getting destroyed - the only way to catch this currently is listening for a popping noise you might have never been introduced to. This could be improved by adding an alert when jokers are destroyed. It's a bit tricky and might have to rely on special casing though?
- I should add some way to easily tell the amount of card area slots (jokers / consumables / hand size) you currently have. Not sure yet what the best way to go about that would be
- Also in that run, I had vagabond for some time but kept forgetting about it. Maybe an alert for card generation could also be useful
Yeah I was thinking about that. It could just be a noise just when it starts. Maybe some kind if soft glowing kind of noise would sound okay if it kept going
hey! I haven't played much with DNA and trading card builds, but will see if I can try them today to see if I can come up with any ideas as well. what other audio games are currently doing is having an option in the main menu to learn the sounds, but I'm not sure if it would be needed here. as for the joker and consumable slots and hand size, you could report the current position at the end. example: 2 of spades, card 1 of 7.
same for the jokers and consumables. so if the player wants to listen to the info, they just wait to understand what's the position, otherwise you just skip it.
Well I was mentioning that Becuase in game, these cards do a kinda pulse wiggle thing to remind you they can be used. There's no audio equivalent to this at all, so you wont get reminded whithout visuak queues.
I'm not sure what you would think is better
- no audio queue, you'll have to remember yourself
- some kind of ding or other sound when you get control to remind you
- some kind if constant soind (maybe like a pulsing noise) to constantly remind you to use your card (might get annoying as it won't stop until you actually play the hand)
Oh alos I think loyalty card should get the same treatment
Although it seems weird to me to think loyalty card should pulse
Actually it might be best to have all the cards have different sounds so you can tell what's happening
That would be more work and also wouldnt work well with modded cards
OK the more I think about it the more I think just using a single sound is best
so if something stays active for a while (trading card when your playing hands, loyalty card when disacarding, inviisble joker) shoudl it play its sound at the beginning of every hand (or even when going in shop/pick blind/ start round in ivisible's case) or just the first time?
i believe it could play the notification sound every time as a reminder.
okay
I did some messing around with JSFXR and made some sound effects we could use for the card. They don't really match the balatro style but hopefully won't stick out like a sore thumb
I guess my default sound and loyalty card kinda sound the same
heres a more disitinct default sound
now I'm in the code so I'll check all the jokers that use that function
oh I remebered them all
nice
no TTS cause linux but sound
right now if multiple it just plays them all at once
will have to fix that
oh it also deosn't replay when state changes
For now only triggers on first still but there it doesn't stack and works
made a pr @queen dove
I'm extremely late to replying but wouldn't the best way to implement keyboard controls be to just make the game handle it like a controller or no
yeah that is indeed how it works now
it exists as part of black hole but I also made it a standalone/example mod: #1271227371911118848
Hey all, just dropping in as I've been a part of the accessibility discussions more recently and am still learning the game - I can get several antes deep before I get short changed by draws/hands etc.
Ahh well, I'm loving this mod nonetheless!
Welcome!
Hi! First of all, thank you so much for creating this mod. I’ll soon be submitting a PR that adds an Italian translation. However, I’m encountering an issue with the mod. The README states that it’s compatible with NVDA, but I can’t get it to work, it Always falls back to SAPI. I tried replacing the "nvdaControllerClient64.dll" with the one for my NVDA version (2024.3.1), but nothing changes. Is there a way to fix this? I'm using BlackHole 0.3.1 and Steamodded 1.0.0-alpha-0909a.
Did you move the DLL files anywhere? For the latest version they should just stay where they are initally
Also, which OS version do you use?
No, I didn't move the DLLs. I just replaced the "nvdaControllerClient64.dll" file present in /bin with a new one downloaded from the official NVAccess website. I use Windows 11 with the latest updates.
dumb question, but NVDA is running right?
yeah lol, and it's installed, not a portable version
not so sure what's going on then
I can't test rn because I'm on vacation, though it's been working for me with NVDA on win 11
I'll test if it works with a fresh install of NVDA
what version of NVDA are you using?
I don't have my PC with me, but I'm pretty sure it's 2024.3.1
Solved! I had to move nvdaControllerClient64.dll to the same folder where the Balatro executable is located.
whoops, is that still needed? Must have missed that part
I have a suggestion for the next version, could there be a toggle to enable a sound for your position in the UI, i.e: if you're on the far left joker it beeps when dragging it, either at different pitches, or different stereo positionings depending on what'e easier to implement, this way you know where abouts you are in the chain and also useful for dragging cards too. Perhaps either number 7 or 8 key on keyboard to enable or disable, with the other option being that it only happens if you go into dragging mode, with it playing a looping sound perhaps?
reminder @queen dove
oops sorry, pitermach also submitted one, I'll try to get everything updated asap
is balatro an instrument?
Since your working on this again thought on #6 (#1267576138687840438 message)
fits right in with what I'm working on, I'll test it
That's funny! 🙂 I might suggest removing the lower bass tone from the file given you're changing the pitch and making that bass frequency more audible, but that tone could be very useful for telling where you are when browsing. 🙂
Someone is gonna learn how to play that and play the most random meme songs
just got some work done on challenges. I'd love to hear some thoughts on what information to include and how. For now I've made it speak all the text on the rules tab, i.e. custom rules and starting modifiers. I'm thinking I still need to add restrictions to that (banned jokers, vouchers, consumables etc.) but starting deck, jokers, consumables, vouchers might be unnecessary and confusing as you can just check what you have once you start the run
New version: v0.4.1
Fixed an issue where card names would no longer get read due to a change in UI structure in Steamodded.
Fixed a crash when reading cards with badges that have changing text (e.g. mod badges with credits).
Hello,
Is any one else having issue when starting or continuing a run ?
When I tried, the game crash and I get this :
Any suggestion ?
I tried reinstalling mods, games, removing balatro folder in appdata, but nothing works, the game continue to crash...
are you able to send the top of the crash log (or use ctrl + c to copy the entire crash log and send that)
Hello, i read something of the chat and documentation about this and I'm quite impressed by the work he already has on hand.
im aware this is a huge QoL mod, can i add this to #1407865124454273054 ?
i will probably add this has Better UI
If you think differently, it's all up to you to change it, I won't oppose to it.
yeah sure thing
Oh, yes sorry, here it is :
Sorry for the delay I've been busy at work. This seems like a bug caused by loading a save from an older SMODS build, but if you're also having it with new runs im not too sure. It might be worth disabling nopeus becuase I believe it's an older mod and may be conflicting somehow
No worries at all 😉
Ok, I removed the mod you said and manage to start a new game.
By trying to restart a new run, I discovered a new crash :
Using a controler, on the main screen I press Y then it tells me to press A for a new game, B to continue or what ever to start a challange.
When pressing A for a new game, it tells me to choose a deck using D-pad right and left, and what ever to choose a stack,
But when pressing D-pad right or left, the game is crashing :
Oops! The game crashed:
[SMODS BlackHole "BlackHole.lua"]:720: bad argument #1 to 'min' (number expected, got nil)
Development version of Steamodded detected! If you are not actively developing a mod, please try using the latest release instead.
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0826d-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.8.0
Platform: Windows
Steamodded Mods:
1: Black Hole by Aure [ID: BlackHole, Version: 0.4.2a, Uses Lovely]
Lovely Mods:
Stack Traceback
(3) field C function 'min'
(4) Lua field 'run_setup_controller' at file 'BlackHole.lua:720' (from mod with id BlackHole)
Local variables:
button = string: "dpleft"
n = number: 4
new_idx = number: 15
max_stake = number: 0
(*temporary) = table: 0x0b403b48 {F_GUIDE:false, F_CRASH_REPORTS:false, F_QUIT_BUTTON:true, F_ENGLISH_ONLY:false, sort_id:254, F_DISCORD:true, STAGE:1, F_MOBILE_UI:false, F_NO_SAVING:false (more...)}
(5) Lua function '?' at file 'main.lua:1059' (best guess)
Local variables:
joystick = Joystick: 0x01760d400f40
button = string: "dpleft"
(6) Lua function '?' at file 'main.lua:930' (best guess)
Local variables:
_n = nil
_a = nil
_b = nil
_c = nil
_d = nil
_e = nil
_f = nil
touched = nil
(for generator) = C function: 0x0b2b9da0
(for state) = nil
(for control) = string: "gamepadpressed"
name = string: "gamepadpressed"
a = Joystick: 0x01760d400f40
b = string: "dpleft"
c = nil
d = nil
e = nil
f = nil
(7) global C function 'xpcall'
(8) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '?' (defined at line 913 of chunk main.lua)
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
Not a big issue I guess since I managed to start a new game by a different path
hmm G.viewed_stake is nil when trying to handle run setup
