Visual impairment

This covers a wide range of vision issues from having no sight at all, being legally blind (may still be able to make out some things), partially sighted, having a narrow field of vision, or blurry vision (like the time I developed cataracts just as Covid kicked off).

Self voicing

Ren'Py has built-in support for self-voicing: everything that is narrated, said is by a character, or is offered as a menu option also spoken. It can be toggled on or off by pressing the V key. A more detailed set of options can be found by pressing the A key to bring up the accessibility menu. The actual voicing is handled by the operating system so support and the voice used will depend on that. You can't select different voices for different characters.

Challenges

Some of the challenges with self voicing are:

Non-vocal utterances

Self-voicing struggles with some non-vocal utterances: the noises people make that are not actual words. It made a right mess of lines like this:


    pc "Mmmm, I don't know..."

The simple solution is to provide alternate text to use when self-voicing is on using the {alt} and {noalt} tags.


    pc "{alt}I, {/alt}{noalt}Mmmm,{/noalt} I don't know..."

Menus

There's no audible indication that a menu is being displayed. The simple solution is use a menu prompt with an {alt} section to announce it.


    menu:
        "{alt}Menu. {/alt}What should I do?"
        "Go home":
            ...

Status screens

Many visual novels have status screens for things like the time of day, how much money the player has, how much energy they have and so on. These can be a challenge to spot important changes even if the self-voicing would actually read them out if the player knew to navigate to them. Instead it is better to announce these changes:


    # Wake up.
    #
    if _preferences.self_voicing:
        # Since the status screen is not voiced, announce the new day.
        #
        $ tmp = "Today is day {}, a {}, and it is {}.".format(dayNum, dayName, clockTime(hour))
        alt "[tmp]"

Here if self-voicing is enabled an additional line of narration is generated and spoken by the alt special character. The function clockTime is one of my own that converts an hour of the day into words.

Navigable maps

Navigating by clicking on hotspots on a map is a nice feature for sighted players. It is more of a challenge for non-sighted ones. Since levels of sightedness vary, you may want to make this a configuration option separate from self-voicing. One option is to fall back to a conventional menu:


    if _preferences.self_voicing:
        menu:
            "{alt}Menu. {/alt}Where should I go?"
            "Home":
                ...
    else:
        call screen mapNavScr()

Mini games

These will be a real challenge. It may be simpler to skip them, or have an alternate game that can be played audibly. Since levels of sightedness vary, you may want to make this a configuration option separate from self-voicing.