Flukz — open-source shmup community resource open-source GPL devlog  ·  about
// indie shmup & game-dev resource

Accessibility · July 6, 2026

Screen Reader and Menu Accessibility for Shmups: Beyond Colorblind Modes

Most accessibility effort in the genre goes toward the parts of gameplay that are hardest to solve — bullet visibility, reaction time — while the menus surrounding that gameplay, which are comparatively easy to make accessible, often get none of that same attention.

A menu built entirely from custom-rendered UI elements, drawn directly by the game engine rather than through the operating system's native UI toolkit, is invisible to a screen reader by default. Nothing about a game-drawn rectangle with text baked into a texture communicates "this is a selectable menu item" to assistive technology, no matter how visually clear the highlight state looks to a sighted player. This is the single biggest accessibility gap in menu design for engines that render everything as custom graphics rather than accessible UI, and it's rarely caused by neglect — it's usually just that nobody on a small team has a screen reader running during playtesting to notice the gap exists.

Screen reader support usually means an explicit accessibility API integration

Most engines that support screen readers at all do it through a platform-specific accessibility API — UI Automation on Windows, NSAccessibility on macOS, AT-SPI on Linux — that requires deliberately tagging each interactive UI element with a role, a label, and a state (selected, focused, disabled) rather than getting it automatically from custom-rendered graphics. This is real implementation work, not a settings toggle, and it needs to be planned into a menu system's architecture rather than retrofitted after the fact, because retrofitting means re-touching every single menu screen in the game individually. Godot, Unity, and most major engines have some level of built-in support for this by now, but the level of completeness varies a lot by engine version, and it's worth checking current documentation directly rather than assuming a given engine handles it out of the box.

Audio narration of menu state is a lower-effort partial substitute

For a small team that can't justify full platform accessibility API integration, a simpler and still meaningful step is playing a short text-to-speech or pre-recorded audio cue announcing the currently focused menu item as the cursor moves — "Difficulty: Normal," "Start Game," "Options." This doesn't give a screen reader user full navigation independence the way real API integration does, and it won't satisfy the more rigorous bar set by the W3C's Web Content Accessibility Guidelines, but it's a meaningful improvement over nothing at a fraction of the engineering cost, and it can usually be built by hooking into the same focus-change event that already drives the visual highlight animation.

Consistent, predictable navigation order matters independent of screen readers

A menu where tab or D-pad navigation order jumps unpredictably between visually adjacent elements — skipping an item, looping in an unexpected direction, or landing on an element that isn't visually where the cursor last was — creates friction for every keyboard and gamepad user, not just those using assistive technology. Screen reader users depend on this predictability even more heavily, since they can't visually verify where focus landed and have to trust that navigation behaves consistently. Explicitly defining navigation order per menu, rather than relying on an engine's automatic spatial-navigation heuristics, removes an entire category of confusing edge cases and pairs naturally with the broader accessibility work described in accessibility features in indie shmups.

Text size and contrast settings are a cheaper, high-value addition

Not every accessibility gap requires deep API integration work. A separate text scaling option for menu labels, independent of the game's overall UI scale setting, and a high-contrast palette option for menu text against its background serve players with low vision who don't use a screen reader at all but still struggle to read small, low-contrast UI text at normal settings — a much larger group than screen reader users specifically, and one that's comparatively cheap to support. These settings are also useful well beyond any specific accessibility need, since a player on an older television at a normal couch distance benefits from the exact same larger, higher-contrast text a low-vision player needs, which makes this one of the rare accessibility features that pays off for a large fraction of the entire player base.

Test with the actual tool, not an assumption of how it works

Running an actual screen reader — NVDA on Windows is free and widely used for exactly this kind of testing — through a game's full menu flow for even twenty minutes surfaces problems that are nearly impossible to predict from documentation alone. Missing labels, elements read in the wrong order, and states that never get announced are all common findings on a first real pass, and they're far cheaper to fix while the menu system is still small than after a dozen more screens have been built on the same unlabeled foundation.