#[Accessibility/Screenreader][WIP] Black Hole

1 messages · Page 1 of 1 (latest)

queen dove
#

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 :)

#

@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 👀

long wharf
#

Oh! that'd be awesome!!

glacial plank
#

I'm not familiar with Screenreader stuff but I do know a lot about the game so I can still assist in development.

viral pelican
#

You have my permission to use a spectral as the mod name /j

queen dove
#

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

viral pelican
#

CustomFont already can do that, it’s just a matter of making it fit nicely

glacial plank
#

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.

queen dove
#

seems like a reasonable framework to base things off of as to not reinvent the wheel

glacial plank
#

Yeah something like this would work for label reading.

wide quarry
#

what will you do when you run out of spectral cards for these names

glacial plank
#

Make up new ones balatrojoker

wide quarry
#

no wrong answer

#

use tarots

queen dove
#

we already have some planets as well as jokers

#

at some point just use the modded cards of these types

queen dove
glacial plank
#

Yeah it was last touched 2 years ago.

#

Looks like it also has an even older dependancy on something called "objc"

glacial plank
queen dove
#

yeah

#

perhaps it's easier to dump strings as the UI elements are being generated?

viral pelican
#

Imagine Hammerspace mod

smoky magnet
queen dove
#

neither is familiar afaik

smoky magnet
glacial plank
#

I might also steal one for my blessings idea instead of using "Simulated Jokerverse"

smoky magnet
#

I already renamed six hundred suits Sigil it's just so fitting

sour wind
#

I’m happy to do testing, am on Steam Deck though so don’t know how feasible that’d be

glacial plank
#

It's mentioned that love2talk is dependant on already existing libraries which could be an issue for Linux systems.

queen dove
#

maybe there's a better solution? so far I haven't found one

glacial plank
#

Linux support for screenreaders itself seems super scuffed.

sour wind
#

Accessibility outside of Mac is kinda scuffed ime

glacial plank
lean condor
#

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.

queen dove
#

ideally there would not be dependencies on outside libs, but that would mean implementing full TTS in love

glacial plank
#

We'd need to provide the library ourselves yea

queen dove
#

there's a lua SAPI interface but that also isn't included by default in wine

glacial plank
#

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)

queen dove
#

i mean something like SAM should be manageable to port to lua right?

glacial plank
smoky magnet
glacial plank
#

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.

queen dove
#

to be fair it also doesn't sound great

glacial plank
#

Unfortunately yeah

viral pelican
#

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

queen dove
glacial plank
#

Oh god thats REALLY bad

queen dove
#

i mean the original is literally from 1982

#

i think we need to do better 💀

wide quarry
glacial plank
#

I only recognize it as the TTS used for ULTRAKILL meme videos

#

💀

wide quarry
#

i remember SAM from a very big genre of videosd

#

died out like a year ago but

#

was popular about 2020

lean condor
ashen grail
#

hell yea, im down for testing

queen dove
static flume
#

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!

woeful ether
queen dove
#

which is just a dead link, hooray

static flume
#

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.

woeful ether
#

Balatro does have a native macos version

static flume
#

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.

queen dove
#

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

lean condor
#

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...)

queen dove
#

So universal speech seems more promising for now

lean condor
#

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?

woeful ether
#

Only single-player, but iirc there's a multiplayer mod

queen dove
#

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

queen dove
#

okay we have some output!

static flume
#

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!

glacial plank
#

HELL YEA

#

Although it seems to make some words longer? (It says "Multiple" and not "Mult")

#

Is that intended?

queen dove
queen dove
#

the screenreader does that by itself

static flume
queen dove
#

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

glacial plank
#

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

queen dove
#

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

static flume
queen dove
#

I actually am running NVDA with a default voice, I couldn't get SAPI by itself to actually use English for some reason

glacial plank
#

I'll take a look at this in a bit.

static flume
queen dove
#

out of interest, which screen reader do you use?

static flume
glacial plank
#

Getting an error from not being able to load "Tolk" module, is there a specific setup needed for the screenreader?

queen dove
glacial plank
#

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.

glacial plank
#

Mostly because it happens when the mod lua file is loaded and it's still talking during then.

queen dove
#

It's playing for me, but I agree the timing is weird

glacial plank
#

Okay, got it reading badges, time for tooltips.

queen dove
#

nice, looks like I got buttons working

#

time to see if it breaks anything

glacial plank
#

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.

queen dove
glacial plank
#

Also does NVDA use the plus on numpad? It doesn't work anymore.

#

Gonna configure settings rq

static flume
#

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!

queen dove
glacial plank
#

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.

woeful ether
glacial plank
#

It works without.

queen dove
glacial plank
#

I'm using mouse and it works fine

woeful ether
#

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

glacial plank
#

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.

queen dove
#

that might not be a bad idea, but it might also inflate the length of everything

woeful ether
#

I wouldn't, as from the video it paused between them, but I'd say let the screen reader people decide

static flume
queen dove
#

26 slash 26 is a bit ugly

#

i also probably need to make the buttons look harder for text

static flume
woeful ether
#

How should it work for the tutorial?

#

Someone remind me to make a DebugPlus thing to restart and skip the tutorial

queen dove
#

hm, worth considering

queen dove
static flume
queen dove
#

alright

#

@glacial plank btw i sent you an invite for write access to the repo

glacial plank
#

Nice

#

Almost done with tooltip descs but they're being a little annoying

queen dove
#

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

glacial plank
woeful ether
#

Could maybe add an exception for the select button to read the blind info

woeful ether
queen dove
#

descriptions also need to account for DynaText, I just noticed

queen dove
#

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

glacial plank
#

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.

queen dove
#

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

glacial plank
#

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.

glacial plank
#

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.

glacial plank
#

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.

queen dove
queen dove
#

[Accessibility/Screenreader][WIP] Black Hole

static flume
#

wow, fantastic demo! I can't wait!

queen dove
queen dove
#

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

static flume
# queen dove Looks like the lag happens with SAPI only?

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.

queen dove
#

alright 👍

#

I should clean up the respeak when selecting cards

woeful ether
#

DebugPlus master branch cameo

queen dove
#

quickly runs git switch dev

woeful ether
#

The dev branch hides the DT messages

#

I plan to re-enable them as debug messages when I get log levels working proper

queen dove
#

watch me struggle playing a round completely without visuals

static flume
queen dove
#

Oops I forgot to set it to public

#

should be available for all to access now

#

I'll probably get to scoring next

static flume
#

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.

glacial plank
#

Can't figure out why the dollars condensing doesn't work but I got blinds collections working.

glacial plank
#

Also fixed tooltips not registering DynaText

static flume
#

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.

queen dove
#

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

static flume
#

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.

glacial plank
#

I was wondering how UI would be handled for the parts of the game that aren't buttons and popups.

#

Such as current Ante

static flume
#

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

queen dove
#

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

static flume
#

really awesome implementation of the scoring system! I'll go update it and test, thanks so much for everything!

queen dove
#

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

glacial plank
#

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).

queen dove
#

actually your infotip addition somehow did that

#

previously it would awkwardly read the poker hand out as a line, but not the tooltip

queen dove
#

probably reusing tts_hand_eval makes the most sense

glacial plank
#

Might have something to do with the h popup reading silencing the previous function.

static flume
#

have a fantastic night!

queen dove
#

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

lean condor
#

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!

woeful ether
#

just disabled

static flume
woeful ether
#

looks like it, but it crashed when I used it

glacial plank
woeful ether
#

possibly found the reason controller vibration is disabled on pc

#

ok disabling my rumble enabler fixed the crash

#

keybinds

static flume
woeful ether
#

I'm making a mod rn

#

it's like 2 lines of code

static flume
woeful ether
#

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

lean condor
woeful ether
#

yes

#

turns out localthunk had a keyboard controller built in for testing

#

I just found out how to turn it back on

lean condor
glacial plank
#

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.

woeful ether
#

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?

glacial plank
#

Playing cards already in the deck don't need either as well.

#

As for flipped cards, not sure.

glacial plank
#

Does spoil the hand as well.

queen dove
#

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

queen dove
lilac saffron
#

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

queen dove
#

I feel like hand chips and mult will often be more important, especially to new players

queen dove
#

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)

static flume
static flume
queen dove
#

Does pressing E work?

static flume
#

also thanks so much for adding the price for items in the shop and the money announcements, loving it!

static flume
# queen dove Does pressing E work?

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.

queen dove
#

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

static flume
#

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.

static flume
queen dove
static flume
#

will try it, thanks!

daring heath
#

USE IT

queen dove
#

lol

queen dove
woeful ether
queen dove
#

How's this? Been getting a lot of fake hovers in the shop, might need to add some interrupts

woeful ether
#

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

queen dove
#

i was thinking of including a remap dialogue

woeful ether
#

I didn't want to do the work

queen dove
#

well a TTS dialogue isn't that universal tbf

woeful ether
#

I was considering just having somewhere in the code that was easy to edit for the keybindd but then saw thunk had keybinds already and said good enough

queen dove
#

For reasonable defaults, Z and V could work sticking to the left side

static flume
woeful ether
#

No problem. Glad its working. I can add those keys tonight to the main repo

queen dove
#

Just updated the repo, added the keybinds without requiring debug mode and with custom config for keybinds.

static flume
#

wow, it's fantastic and quick to configure the keys using this menu, this is great!

queen dove
#

I'm glad you like it!

static flume
#

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.

glacial plank
#

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.

queen dove
#

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

static flume
queen dove
#

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

static flume
#

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

queen dove
#

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

static flume
#

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

static flume
glacial plank
#

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).

static flume
#

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.

queen dove
# glacial plank I was wondering how we would do deck select.

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

queen dove
glacial plank
#

Did I miss the vouchers?

#

I know I covered shop jokers and shop boosters but might’ve missed vouchers area.

queen dove
#

yeah

static flume
#

It's related to the volchers in the shop, just confirmed. the price being displayed is half of the right one.

queen dove
#

should be a quick fix, I'll make sure it works and push it upstream

static flume
#

awesome

queen dove
#

apparently I also forgot to properly enable keybinds on startup, that'll be fixed as well

glacial plank
queen dove
#

yeah i know, that might be easier to make accessible once we have it available

#

Thinking we go with bypassing the UI for now

queen dove
static flume
static flume
#

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

queen dove
#

truly a thunk moment haha

#

I'll change the default

glacial plank
#

Getting a crash from hovering over any cards in collections on the main menu, it's to deal with the checks for shop_areas.

queen dove
#

oops

glacial plank
#

I'll fix it, mostly because I have other stuff to push to main as well.

queen dove
#

alright I'll wait for your stuff since my working tree is mostly clean rn

glacial plank
#

It involves changing all uses of find_strings to this.

#

Mostly for convenience and less copy/pasting of it.

queen dove
#

good stuff, that looks really clean

glacial plank
#

Pushed to main

queen dove
static flume
#

great job, loved the demo! plus all these spoken stats are really useful!

queen dove
#

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

static flume
#

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

queen dove
#

iirc that text currently also doesn't read, the menu is frankly a bit awkward to make usable

glacial plank
#

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.

glacial plank
#

Bruh where the hell is this TTS getting stored

queen dove
#

I would assume it's in the tts of the tag, but the tag isn't the node being hovered?

glacial plank
#

Yea

glacial plank
#

My GOD this is buried.

queen dove
#

oh shite

#

inspectDepth won't even get to that

glacial plank
#

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).

queen dove
#

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

glacial plank
#

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.

glacial plank
#

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).

glacial plank
#

It took making a recursive function to check parents of a node for a specific UIElement, but managed to get it working.

glacial plank
#

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).

glacial plank
#

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).

queen dove
#

Almost got deck selection done, just need to make sure the stake selection actually works

static flume
#

hey! that's perfect! I'll have the whole day to play the game and test everything!

queen dove
static flume
#

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!

static flume
#

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.

static flume
queen dove
#

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

static flume
queen dove
# static flume after losing a game, it still doesn't work to press the Y button to start a new ...

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

static flume
#

yay, downloading it now!

queen dove
#

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

static flume
#

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

static flume
#

it crashed when the main menu was still loading and I started a new run with the new method of using the Y button

queen dove
static flume
queen dove
#

alright I'll investigate. Could be that it's triggered by there not being a run to continue

static flume
#

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.

queen dove
#

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?

static flume
queen dove
#

From my knowledge that's not how it works though?

queen dove
#

might not be the easiest to navigate, maybe I can come up with some shortcuts

lilac saffron
#

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

queen dove
lilac saffron
#

Maybe before using the tarot the narrator could announce selected cards?

queen dove
#

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)

static flume
queen dove
#

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

static flume
#

great!

queen dove
#

Updated the repo with these changes

static flume
#

downloading right now, thanks so much

queen dove
#

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

static flume
queen dove
#

Though these elements currently still don't read, I'll need to have a closer look at how they're structured

static flume
#

I've tested the new version, really awesome feature to read the upcoming blinds! loving it!

queen dove
#

this is already shaping up much better than I could have anticipated

static flume
#

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?

glacial plank
#

Nope, not at the moment iirc

queen dove
#

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?

static flume
queen dove
#

a mod to replay the tutorial should be fairly easy to make, but surprisingly I think it doesn't exist yet

static flume
#

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

static flume
queen dove
#

I'll probably get that out there once I've made the tutorial accessible

queen dove
#

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

static flume
#

thanks, I'll update it now!

static flume
#

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?

queen dove
#

though since there are no 'official' releases of v1.0 as of yet, it's not even easily possible to grab an outdated download

static flume
queen dove
#

yeah you got the new version

static flume
#

cool! thanks!

queen dove
#

maybe it's not a bad idea to include the steamodded version in the welcome message

static flume
#

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.

queen dove
#

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

ashen grail
#

i cant seem to make this mod working 😭 , what am i doing wrong

queen dove
ashen grail
#

im also not familiar with modding, which doesnt help

queen dove
#

I think that's a regression in steamodded

queen dove
#

black hole was trying to access the config folder before it was created, so I moved the timing of creating that folder

ashen grail
queen dove
#

not like it matters, either way it should now be fixed by updating steamodded

ashen grail
#

do i need to use the command line to install the new steamodded?

queen dove
#

but simply downloading and replacing the files is also fine

ashen grail
#

it still doesnt work, 😔 and its also pretty late here, so im gonna try again tommorow

queen dove
#

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

static flume
#

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

queen dove
#

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

static flume
queen dove
#

this is great, thanks

#

I think I can add a way to change the volume without navigating those tabs

static flume
#

sounds good, will help first time users

static flume
#

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

glacial plank
#

It does seem to register a few nodes during startup.

queen dove
#

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

static flume
ashen grail
#

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

queen dove
#

Great to have people testing this, I completely forgot about the hook lmao

queen dove
#

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

ashen grail
#

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

queen dove
#

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

ashen grail
#

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

queen dove
#

this is also true of controller

#

I still need to get these working, they're a bit fiddly

static flume
#

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.

queen dove
#

I think the solution here is to force the play and discard buttons to be focusable even if the button is disabled

queen dove
#

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

static flume
queen dove
#

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

static flume
static flume
static flume
queen dove
#

I might make tab the default actually, now that you mentioned it

queen dove
#

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

static flume
#

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?

queen dove
#

like Ante 1 Small Blind - Score at least 300 etc.

static flume
static flume
#

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

queen dove
#

have you tried deleting the old files first before adding the new ones?

static flume
#

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

queen dove
#

hmm...

#

could you zip your mods folder and send it to me?

static flume
#

sure

queen dove
#

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

static flume
#

maybe if I delete some other config file it could work? strange, all other versions worked great.

queen dove
#

it's not about the config, the game doesn't even get to load it

static flume
#

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

queen dove
static flume
#

all right, thanks so much

queen dove
#

oh I just saw, you got an outdated version when installing lovely

#

missed that completely

static flume
queen dove
#

No, I assume you just got the wrong download by accident?

static flume
#

i'm really sorry, I wasn't aware.

#

maybe. i'll check

queen dove
#

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

static flume
#

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

queen dove
#

all good

static flume
#

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

queen dove
#

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

static flume
static flume
queen dove
#

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?

static flume
queen dove
#

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

static flume
#

that's fantastic! I'll test it right now and will announce on the thread that the update is availablh! thanks so much!

queen dove
#

I'm also setting up the readme right now

static flume
#

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.

queen dove
#

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

static flume
#

that's cool!

queen dove
#

Done, pushed up together with the readme

static flume
#

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?

queen dove
#

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

static flume
#

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.

queen dove
#

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

static flume
queen dove
static flume
#

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

queen dove
#

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

static flume
#

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

queen dove
#

Please do

static flume
#

it's now updated

queen dove
#

It seems like the masked hyperlinks don't work

#

eh, that's fine

static flume
#

do you have a direct html version or something?

queen dove
#

you could just link to the readme directly

woeful ether
#

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

queen dove
#

it exposes love2talk's export as a public tts

#

tts.silence() stops all current output, tts.say('Something') speaks the given string (queued)

woeful ether
#

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?)?

queen dove
woeful ether
#

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

queen dove
#

that would be easier, but there's also still lovely

woeful ether
#

well yeah but then you don't have extra exe's lieing around and its easier to update them with mod update

queen dove
#

I don't think I ever need to update the binaries

woeful ether
#

i guess

#

but someone may want to remove them

queen dove
#

eh they just sit around

woeful ether
#

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

queen dove
#

anyways how would i go about doing that

woeful ether
#

I'm testing it rn

#

ok so the game didn't crash

#

but i don't have tts

#

might be cause linux

queen dove
#

do you get tts if you load them from the main dir?

woeful ether
#

nope

queen dove
#

tolk supports these screen readers, haven't looked too much at linux availability

woeful ether
#

well it's in wine

queen dove
#

yeah ik

woeful ether
#

I think it should just be

queen dove
#

not sure how/if NVDA will run through wine though

woeful ether
#

fair enough

woeful ether
#

also does mac support work

#

cause I can pull out my mac

queen dove
#

love2talk should support it but I haven't got anyone to test it yet

queen dove
#

I'll change it then

#

the release still distributes lovely as to keep it a "quick install"

woeful ether
#

looks like blackhole breaks some of the key registering stuff for DebugPlus

queen dove
#

I would assume so

#

I literally block the normal processing of key/controller input for some things

woeful ether
#

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

queen dove
#

oh, what is it?

woeful ether
#

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

queen dove
woeful ether
#

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

static flume
#

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.

woeful ether
#

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

#

oh you made an oopsie

#

forgot to put a ()

#

The Y key wasnt working and then it crashed

#

I gtg I can do some debuffinf later

glacial plank
#

tolk.lua returns a silence function but mac2speech.lua doesn't?

woeful ether
queen dove
#

I really haven't touched the macspeech module at all

#

but I did have to add the silence function to the Love2talk export myself

queen dove
#

I'll add it to the export though

glacial plank
#

The whole synthesizer is 💀

queen dove
#

yeah that's what i mean

woeful ether
#

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

static flume
woeful ether
#

for inturrupting should it interrupt immedatly or after it finishes the current word?

queen dove
#

rn I do either "silence right away" or "wait for all current text to finish reading"

woeful ether
#

should right away be immediatly or after the current word?

static flume
woeful ether
#

yeah I'm rewriting the mac handler to use a newer system

#

it wasn't quite working before

queen dove
#

that's what you get from abandoned projects, huh

woeful ether
#

and I got a syntax error from auto correct 👍

#

I should probably install an ide on here

static flume
#

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

woeful ether
#

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

static flume
woeful ether
#

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

static flume
#

no worries, thanks for all the help

queen dove
static flume
#

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?

queen dove
#

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

static flume
#

cool! I still need to beat 3 more difficulties to unlock all the decks

static flume
woeful ether
#

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

#

yeah for some reason the y key doesn't work

woeful ether
#

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

woeful ether
#

also I was able to fix the DebugPlus conflicts on my end

static flume
#

hey! the second recording sounds like it's better, more responsive as you move from one option to the next.

woeful ether
#

Yeah that's what I was thinking. Thanks

queen dove
coral phoenix
#

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. 😄

static flume
#

I believe that Sightless Kombat is also coming here to give good feedback and suggestions

queen dove
queen dove
static flume
# queen dove 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.

queen dove
#

Amazing

coral phoenix
#

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. 😛 )

woeful ether
queen dove
#

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

static flume
#

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!

rigid rain
#

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) :)

queen dove
rigid rain
#

tbh i just need to get lua and get learning

#

and trying

#

and testing

#

:D

woeful ether
#

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

woeful ether
#

does the no room popup read in tts?

#

also you should merge my pr

rigid rain
#

Ifk I'll try out thr mod tofay

#

Today*

static flume
#

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.

queen dove
#

there's a few texts I've had to add myself that aren't in the base game. These will need to be localized

static flume
#

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.

queen dove
#

huh, I'll try and investigate that. It might just be that the controller is a bit jank with high hand sizes in general

static flume
#

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.

queen dove
#

I've found the skip tags' text doesn't always read fully, I'll see what I can do about that as well

static flume
#

awesome, thanks

coral phoenix
queen dove
#

the file with the english text is in localization/en-us.lua within the mod files

coral phoenix
#

Thanks!

glacial plank
#

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).

static flume
#

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?

woeful ether
#

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

static flume
#

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.

queen dove
#

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...

▶ Play video
static flume
#

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

queen dove
#

Congrats!

woeful ether
#

I was thinking for cards jiggling to indicate something (like DNA and trading card) should there be some kind of sound queue?

queen dove
#

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
woeful ether
static flume
#

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.

woeful ether
#

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?

static flume
#

i believe it could play the notification sound every time as a reminder.

woeful ether
#

okay

#

I guess my default sound and loyalty card kinda sound the same

#

now I'm in the code so I'll check all the jokers that use that function

#

oh I remebered them all

#

nice

woeful ether
#

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

woeful ether
#

For now only triggers on first still but there it doesn't stack and works

#

made a pr @queen dove

lean otter
queen dove
sweet sky
#

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!

queen dove
#

Welcome!

glad relic
#

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.

queen dove
#

Also, which OS version do you use?

glad relic
#

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.

queen dove
#

dumb question, but NVDA is running right?

glad relic
#

yeah lol, and it's installed, not a portable version

queen dove
#

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

glad relic
#

I'll test if it works with a fresh install of NVDA

glad relic
queen dove
#

I don't have my PC with me, but I'm pretty sure it's 2024.3.1

glad relic
#

Solved! I had to move nvdaControllerClient64.dll to the same folder where the Balatro executable is located.

queen dove
#

whoops, is that still needed? Must have missed that part

brazen lagoon
#

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?

woeful ether
queen dove
#

oops sorry, pitermach also submitted one, I'll try to get everything updated asap

woeful ether
queen dove
#

fits right in with what I'm working on, I'll test it

sweet sky
# queen dove is balatro an instrument?

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. 🙂

rigid rain
queen dove
#

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

queen dove
#

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).

cursive ginkgo
#

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...

woeful ether
#

are you able to send the top of the crash log (or use ctrl + c to copy the entire crash log and send that)

rain shoal
#

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.

woeful ether
# cursive ginkgo 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

cursive ginkgo
#

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

glacial plank
#

hmm G.viewed_stake is nil when trying to handle run setup