Devlog #8: Improving Accessibility
I have dedicated April to adding and improving the accessibility features in the game and with the nice coincidence that Steam is adding accessibility tags to the store, I thought this was a good time for another devlog!
Accessbility Improvements
The game already had a selection of features, most prominently the TTS-mode, but there was also the experimental Open Dyslexic font support and UI scaling. Open Dyslexic was easy to implement but a problem to optimize for. The font is much larger than Kenyan Coffee, the default font of the game, leading to elements getting out of bounds and pushing the layout around. To finally get a hold on that problem -plus I wanted that feature too- I looked into font scaling in Godot.
There doesn’t seem to be a simple way to globally scale fonts like you can do with UI scaling but there are label and richtext label theme styles that you can add and those you can update. Some already existed out of the box so I added some more until I had styles for small, medium, and large headlines as well as small, medium, and large text. Then I saved the font sizes as defaults at the start of the game and set another set of constant font sizes for Open Dyslexic. Now, when switching to it, I can change the font and adjust the font size but also allow for scaling the fonts up and down by overriding all styles. I also had to add the styles for buttons, labels, and anything that displayed text to make it consistent but now you can adjust how large or small you want the game text to be! Nice!
I had to tweak a few elements to expand better when the size got too big and it is not 100% perfect on very large sizes but nothing breaks completely and that’s a win…?
Next, I tackled another thing I’ve been meaning to add: Input remapping. Being able to change bindings is not just nice for when you prefer different layouts, it’s also important for players that have physical disabilities. I used two plugins made by wonderful people: Geip by IsItLucas and Controller Icons by rsubtil.
Luckily, I’ve been using input actions already instead of listening for specific inputs and I was wiring all inputs through an input manager that handles which screens are allowed to receive inputs and which ones are on hold (for example to avoid executing a trick in battle when you are in the inventory screen). Adding the remapping screen to the settings and updating the input actions was a breeze with the plugin. The only issue I had was that the conflict detection which the plugin is supposed to have didn’t work for me so I added some code to check if there’s already an action with that button that you’re trying to remap and swapped them, if yes. Together with the controller icon plugin which allows me to add images that update according to the current input method and assigned action, it was set up and done!
Next thing I tackled was actually showing the most important settings on first startup of the game and then saving the choices there which is the recommended way of accessibility usability. In that motion, I completely refactored my settings screen which became more and more unwieldy. I was adding everything manually and connecting it with signals to make it work. Needed another slider? Had to add the line, add the text, hook up the slider to the settings script, send those new settings over to the settings script (which handles the actual application of the settings) and add the info to the TTS controller. This. Was. Terrible.
So, I created a new resource, called a Configuration, and a component called Configuration Line. The Configuration would store what type it was (button, toggle, slider, etc.), which keys it used in the settings dictionary, the category, and other details. The configurations gets pulled from project folders and instantiated as Configuration Lines dynamically when the settings screen is opened, and automatically hooked up to signals and the TTS controller. Now, adding a new volume slider for example, was as easy as creating a new Configuration resource in the audio settings folder and done!
I also added a little checkbox for which settings I wanted to include in the startup screen. So when you start the game for the first time, it’ll load a special version of the settings screen and asks you if you want to enable TTS mode. For most of you, this screen will not show because you already have game settings stored.
Tricks up the Sleeve
Refactoring the settings screen in this way inspired me to do something similar for my Trick resources (still called Techniques in the project). Up until that point, the Technique resource was very rigid, it included variables for damage, buffs, condition, and healing. The problem was there was only one variable for each feature so I couldn’t have multiple effects per category, like say, buffing attack and debuffing max shields with the same trick.
So like with settings, I created a Technique Feature resource that stores pretty much the same variables but now can be added multiple times to a trick. As many as I want actually, the code execution now iterates through each feature and applies their effect. Water Bomb, for example, was a trick that damaged both enemy and your Animon and I had to add a special target called “All” (instead of Self and Enemy) to make it work and that was fine as long as the damage was the same but if I wanted your Animon to take a different amount of damage, then it wouldn’t work. Now it does, I just add two damage features, one that targets the enemy, and one that targets your Animon, and I can adjust damages accordingly, even adding different visual effects if needed.
Of course, a lot broke because the scripts assumed there was one damage value to look for, or just one buff value, so I had to fix a bunch of things but now it works and it’s nicer than ever. I can finally add more interesting tricks with combined effects. There’s gonna be a bunch of new ones for the April update!
Dynamic Tutorials
Watching As of Yet Unnamed play the demo they pointed out that there was no explanations for any of the status conditions anywhere in the game (haha, oops!) and, well, yes, that was very true. I added dynamic tutorials for both status conditions and dice effects the first time they occur. Siobhán will briefly describe them so you understand the basics of it. Especially for the dice effects which can be a bit complicated if you don’t know how they work, it was important. You can reset all tutorials in the settings now, too!
Difficulty Options
I also implemented difficulty customizations (which was easier than i thought!). With the next update, you'll be able to use sliders to adjust incoming and outgoing damage, increase or reduce the amount of dice the enemy has, set catch rate to 100%, or enable 1-hit defeat.
Demo Updates
I also spend some time improving the demo and making sure there’s a smooth transition into the full game. I have removed the Animons that were from regions 2 and 3 (sorry!) so it’s on par with the first region of the full game so you can collect up to 25 marbles and already work on your collection which both are saved and carry over to the full game. Additionally, if you beat the demo, you will unlock a unique starter for the full game as well! (Don’t try to beat it yet, the update is not out yet…)
Your demo run will also be saved now so you can stop and continue later.
What’s Next?
I still have to implement text input for mouse and gamepad mode to round up my accessibility package but I’ve seen a plugin for on-screen keyboard which I might use. Apart from that, I’ll be adding more tricks and at least one more Animon, potentially more. Stay tuned!
Get Soulblaze
Soulblaze
a creature-collecting roguelite
Status | In development |
Author | Sword & Quill |
Genre | Strategy |
Tags | 2D, creature-collecting, Cute, Dice, Godot, Roguelike, Roguelite, Singleplayer, Tactical, Turn-based |
Languages | German, English |
Accessibility | Color-blind friendly, Blind friendly |
More posts
- Hotfix Patch 0.0.13.123 days ago
- Mystery March Update [0.0.13]24 days ago
- Devlog #7: Overcoming Design Problems36 days ago
- Tutorial: Godot Screenreader Support46 days ago
- Patch Notes [0.0.12.1]52 days ago
- Tutorial Hotfix54 days ago
- Marbleous Update - Patch 0.0.1255 days ago
- Issues with Builds on macOS62 days ago
- Patch Notes [0.0.11.2]62 days ago
Leave a comment
Log in with itch.io to leave a comment.