AccessMods Hub

Welcome to the AccessMods Hub

This is the central repository for accessible game modifications. We organize projects into three categories:

  1. Game Mods: Playable mods for specific games.
  2. User Utilities: Installers and patchers.
  3. Developer Resources: Libraries and code.

Game Mods

A screen reader accessibility mod for DDLC Plus

Read More

DDLCPlusAccess

A comprehensive accessibility mod for Doki Doki Literature Club Plus that provides screen reader support for blind and visually impaired players. This MelonLoader mod intercepts game text and outputs it directly to your screen reader using speech synthesis.

Features

Complete Game Coverage

  • Character Dialogue: All character speech with localized speaker names
  • History Screen: Navigate through dialogue history with Up/Down arrows
  • Menu Navigation: Main menu, preferences, save/load screens
  • Poetry Minigame: Word selection feedback and character reactions
  • File Browser: Directory navigation with item counts and file operations
  • File Content Viewer: Line-by-line navigation of text files with Up/Down arrows
  • Side Stories: Accessible launcher navigation and story selection
  • Poems: Formatted poem content including special poems with visual descriptions
  • Gallery: Full descriptions for all CGs, wallpapers, poems, backgrounds, sketches, promotional art, and secret images
  • Mail App: Email content and navigation
  • Jukebox: Music player with track information and position announcements
  • System Messages: Game notifications, boot sequences, and status updates

Accessibility Features

  • Direct Speech Output: Text spoken immediately via UnityAccessibilityLib
  • Speaker Identification: Character names always included in dialogue
  • Duplicate Prevention: Smart filtering to avoid repeated announcements
  • Real-time Processing: Text appears immediately as displayed in game
  • Image Descriptions: Comprehensive descriptions for all gallery content
  • No Configuration Required: Works out of the box with optimal settings

Keyboard Shortcuts

Key Function
R Repeat last dialogue
C Announce data collection percentage (Settings app only)
P Announce current position in playlist (Jukebox only)
Up/Down Navigate history entries or file content lines

Installation

Prerequisites

  • Doki Doki Literature Club Plus (Steam version)
  • Windows operating system

Easy Installation (Recommended)

Use the AccessMods Installer for one-click installation:

  1. Download AccessModsInstaller.exe from the releases page
  2. Run the installer and select Doki Doki Literature Club Plus
  3. The installer will automatically:
    • Find your game installation
    • Install MelonLoader if needed
    • Download and install the latest mod files

Manual Installation

If you prefer to install manually, you'll also need MelonLoader installed in your DDLC Plus directory.

Installation Steps

  1. Download the mod ZIP from the latest release
  2. Extract the contents and copy files to your DDLC Plus installation:
    • DDLCPlusAccess.dll[DDLC Plus Install Path]\Mods\
    • UnityAccessibilityLib.dll[DDLC Plus Install Path]\
    • UniversalSpeech.dll[DDLC Plus Install Path]\
    • nvdaControllerClient.dll[DDLC Plus Install Path]\
  3. Launch DDLC Plus - MelonLoader will automatically load the mod

Verification

  • Check MelonLoader console for "DDLCPlusAccess initialized!" message
  • Start a new game or load a save - text should be spoken by your screen reader
  • Press R to repeat the last dialogue

Usage

Basic Operation

The mod works automatically once installed. All game text is spoken directly to your screen reader.

History Navigation

When viewing dialogue history (accessible via the game's history button), use Up/Down arrow keys to navigate through previous dialogue entries.

File Content Navigation

When viewing text files in the file browser, use Up/Down arrow keys to navigate line by line through the file content.

Development

Building the Mod

# Standard build
dotnet build

# Clean build
dotnet clean && dotnet build

# Release build
dotnet build --configuration Release

The build automatically copies the mod files to the game's Mods folder.

Dependencies

  • .NET Framework 4.7.2
  • UnityAccessibilityLib (NuGet package)
  • MelonLoader framework
  • Harmony patching library
  • Unity Engine APIs
  • DDLC/RenpyParser assemblies

Project Structure

  • Main.cs - Main mod entry point and initialization
  • ClipboardUtils.cs - Speech output wrapper for UnityAccessibilityLib
  • DescriptionManager.cs - Centralized image description system
  • GameTextType.cs - Text type definitions and mapping
  • TextHelper.cs - Text cleaning and formatting utilities
  • SpeakerMapping.cs - Character name resolution
  • Patches/ - Harmony patches for different game systems
  • ImageDescriptions/ - Gallery image description data

Harmony Patches

Patch File Purpose
DialoguePatches.cs Character dialogue and narrative text
HistoryPatches.cs History screen navigation
MenuPatches.cs Menu navigation and UI interactions
LauncherPatches.cs DDLC Plus launcher accessibility
FileBrowserPatches.cs File system navigation
FileContentPatches.cs File content viewing
PoetryPatches.cs Poetry minigame interactions
PoemPatches.cs Poem reading and formatting
SideStoriesPatches.cs Side story navigation
GalleryPatches.cs Gallery navigation and descriptions
ImagePatches.cs Background/CG announcements
JukeboxPatches.cs Music player accessibility
MailPatches.cs Email application
SelectorPatches.cs Generic selector UI
TextPatches.cs Fallback text capture

Compatibility

Supported Versions

  • DDLC Plus: All current versions
  • MelonLoader: Compatible with standard MelonLoader installations
  • Screen Readers: Works with NVDA, JAWS, Narrator, and other Windows screen readers via SAPI/UniversalSpeech

Known Limitations

  • Windows-only (uses Windows speech APIs)
  • Requires MelonLoader framework

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For issues or questions:

  • Check MelonLoader console for error messages
  • Verify all DLL files are in the correct locations
  • Ensure DDLC Plus and MelonLoader are properly installed
  • Report issues at the project repository

Accessibility mod for Phoenix Wright: Ace Attorney Trilogy

Read More

Phoenix Wright: Ace Attorney Trilogy Accessibility Mod

A screen reader accessibility mod for Phoenix Wright: Ace Attorney Trilogy. The mod outputs game text (dialogue, menus, UI elements) directly to screen readers via the UniversalSpeech library, with SAPI fallback for users without a screen reader.

Features

  • Full dialogue output with character name announcements
  • Menu and UI navigation feedback
  • Investigation mode with hotspot navigation
  • Court record (evidence/profiles) accessibility
  • Trial mode with life gauge announcements
  • Support for all minigames:
    • Luminol spray blood detection
    • Fingerprint dusting
    • 3D evidence examination
    • Vase puzzle
    • Dying message connect-the-dots
    • Bug sweeper
    • Video tape examination
  • Orchestra music player (game soundtrack browser)
  • Psyche-Lock sequences (GS2/GS3)
  • Mod translations available (see Translations)

Requirements

  • Phoenix Wright: Ace Attorney Trilogy (Steam version)
  • MelonLoader v0.7.1
  • UniversalSpeech.dll (32-bit) in the game directory for screen reader output
  • nvdaControllerClient.dll (32-bit) in the game directory for NVDA users (optional)

Installation

You can install this in two ways, either by using the AccessMods Installer or by downloading the release zip file and installing the mod manually.

Automatic Installation

  1. Download AccessModsInstaller.exe from the latest release of the AccessMods Installer
  2. Run the installer, select Phoenix Wright: Ace Attorney Trilogy, and follow the prompts
  3. Launch the game

Manual Installation

  1. Download the zip file from the latest release
  2. Run the included MelonLoader.Installer.exe and install MelonLoader to your game
  3. Copy AccessibilityMod.dll to the Mods folder in your game directory
  4. Copy UnityAccessibilityLib.dll, UniversalSpeech.dll and nvdaControllerClient.dll to your game directory
  5. Copy the Data folder contents to [Game Directory]/UserData/AccessibilityMod/
  6. Launch the game

Keyboard Shortcuts

Key Context Action
F5 Global Hot-reload config files
R Global Repeat last output
I Global Announce current state/context
[ / ] Navigation modes Navigate items (hotspots, evidence, targets, etc.)
U Investigation Jump to next unexamined hotspot
H Trial announce life gauge
F1 Context-sensitive Announce help hints

Configuration

Configuration files are stored in [Game Directory]/UserData/AccessibilityMod/. Press F5 in-game to hot-reload without restarting.

UserData/AccessibilityMod/
├── en/                     # English (fallback)
│   ├── strings.json        # UI strings
│   ├── GS1_Names.json      # Character name mappings
│   ├── GS2_Names.json
│   ├── GS3_Names.json
│   └── EvidenceDetails/    # Evidence descriptions
│       ├── GS1/*.txt
│       ├── GS2/*.txt
│       └── GS3/*.txt
├── pt-BR/                  # Brazilian Portuguese
└── zh-Hans/                # Chinese (Simplified)

Building from Source

cd AccessibilityMod
dotnet build -c Release

The build output is automatically copied to the game's Mods folder, along with the contents of the Data folder which are copied to UserData/AccessibilityMod.

Build Requirements

  • .NET Framework 3.5 targeting pack
  • MelonLoader installed in the game directory

Contributing

Contributions are welcome! See CONTRIBUTING.md for development setup and guidelines.

Translations

The mod supports multiple languages. Currently included translations:

  • English
  • Brazilian Portuguese
  • Chinese (Simplified)
  • Korean

Want to help translate? See TRANSLATORS.md for guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Adds keyboard accessibility for the blind to RimWorld by Ludeon Studios

Read More

RimWorld Access

Screen reader accessibility for RimWorld. Uses the Tolk library to communicate with NVDA, JAWS, and other screen readers. Falls back to Windows SAPI if no screen reader is detected.

Note: This mod is an early version. Errors may be present. This documentation is a rough overview—for detailed questions and clarifications, join the Discord server.

Bug Reports: Bug reports involving mods other than RimWorld Access are currently unsupported. Please test with only Harmony and RimWorld Access enabled before reporting issues.

Table of Contents

Installation

Step 1: Install Harmony (Required Dependency)

Steam Users:

  1. Subscribe to Harmony on Steam Workshop: https://steamcommunity.com/sharedfiles/filedetails/?id=2009463077

Non-Steam Users:

  1. Download the latest Harmony release from: https://github.com/pardeike/HarmonyRimWorld/releases/latest
  2. Extract the Harmony folder to your RimWorld Mods directory (e.g., C:\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\)

Step 2: Install RimWorld Access

  1. Download the latest RimWorld Access release
  2. Extract the RimWorldAccess folder to your RimWorld Mods directory (same location as Harmony above)

The folder structure should look like:

Mods\
├── RimWorldAccess\
│   ├── About\
│   │   └── About.xml
│   ├── Assemblies\
│   │   └── rimworld_access.dll
│   ├── Tolk.dll
│   └── nvdaControllerClient64.dll
└── Harmony\  (if installed manually)

Step 3: Enable the Mods

Since RimWorld's mod menu is not accessible until the mod is installed, you must manually edit the mods configuration file.

  1. Close RimWorld if it is running
  2. Open the ModsConfig.xml file in a text editor. The file is located at: C:\Users\[YourUsername]\AppData\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios\Config\ModsConfig.xml (You can also type %APPDATA%\..\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios\Config\ in File Explorer's address bar)
  3. Find the <activeMods> section
  4. Add the following two lines at the beginning of the list, immediately after <activeMods>:
    <li>brrainz.harmony</li>
    <li>shane12300.rimworldaccess</li>
  5. Save the file

Example ModsConfig.xml after editing:

<ModsConfigData>
  <version>1.6.4633 rev1261</version>
  <activeMods>
    <li>brrainz.harmony</li>
    <li>shane12300.rimworldaccess</li>
    <li>ludeon.rimworld</li>
    <!-- other mods and DLCs... -->
  </activeMods>
</ModsConfigData>

Step 4: Launch the Game

Launch RimWorld. The mod will automatically initialize and you should hear your screen reader announce the main menu options.

Main Menu

Key Action
Arrow Keys Navigate menu options
Enter Select menu item

Map Navigation

Key Action
Arrow Keys Move cursor one tile
T Reads time, date and weather.
I Open colony inventory
Enter Open inspect panel
Escape Open pause menu
Control + g Go to coordinates.

Tiles announce: pawns, buildings, orders (blueprints, jobs), items, plants, terrain, zone, roof status, and coordinates.

Tile Information (Keys 1-7)

Key Info
1 Items and pawns at cursor
2 Flooring details (terrain, beauty, path cost)
3 Plant information (species, growth, harvestable)
4 Brightness and temperature
5 Room statistics (role, owner, quality tiers for all stats)
6 Power information (status, network, generation/consumption)
7 Area information (home area, allowed areas)

Time Controls

Key Action
Shift+1 Normal speed
Shift+2 Fast speed (3x normal)
Shift+3 Superfast speed (6x normal)
Space Pause/unpause

Build & Zone Systems

Key Action
Tab Open architect menu (select category → tool → material → place with Space)
Type letters Typeahead search in architect menu (prioritizes name matches)
Tab Toggle shape mode for zones/orders
Space Place building or set corners shape mode / toggle tile (single mode)
Shift+Space Cancel blueprint at cursor position
R Rotate building

Building Placement Information

When placing buildings, helpful spatial information is announced:

  • Multi-tile buildings announce which direction they extend from the cursor
  • Coolers announce hot side and cold side orientation
  • Wind turbines announce the clear area requirements
  • Transport pod launchers announce fuel port location relative to the cursor
  • Enclosures Announce what is contained within the enclosure, I.E stumps, trees, etc, and alert you if gaps are present. After placing a blueprint, navigating over it announces information as if the building were complete. This allows verification of orientation before construction begins. Use Shift+Space to remove and reposition a blueprint if needed.

Shape support for architect tab

Tab will open a list of pre-defined shapes that you can use to place blueprints, orders or create zones. Space sets the corners, and enter confirms once they have been selected. From their, viewing mode is available, so you can preview the placed shape, and edit it in manual mode.
Manual mode is still an option in the shapes menu, allowing you to place items manually if you wish.

Colonist Actions

Key Action
, / . Cycle previous/next colonist
Alt+C Jump cursor to selected colonist
Enter Open inspection menu (includes job queue, logs, health, etc.)
] Open order menu (with descriptions)
R Toggle draft mode
G Open gizmos with status values and labels
Alt+M Display mood and thoughts
Alt+N Display needs
Alt+H Display health (detailed condition info)
Alt+B Quick combat log dump
alt + g Read equipped gear and apparel.
Alt+F Unforbid all items on map
F1 Work menu
F2 Schedule menu
F3 Assign menu

Inspection Menu (Enter): Access pawn details including:

  • Log category: Combat log and social log with timestamps and jump-to-target
  • Health, equipment, records, and more

Work Menu (F1)

Key Action
Up/Down Navigate work types
Tab / Shift+Tab Next/previous colonist
M Toggle simple/manual priority mode
Space Toggle work type (simple) or toggle disabled/priority 3 (manual)
0-4 Set priority directly (manual mode)
Enter Save and close
Escape Cancel and close

Schedule Menu (F2)

Key Action
Up/Down Navigate pawns
Left/Right Navigate hours
Tab Cycle assignment type (Anything/Work/Joy/Sleep/Meditate)
Space Apply selection to cell
Shift+Right Fill rest of row with selection
Ctrl+C / Ctrl+V Copy/paste pawn schedule
Enter Save and close
Escape Cancel and close

Assign Menu (F3)

Key Action
Left/Right Switch policy categories
Up/Down Navigate policies
Enter Apply policy to colonist
Tab Next colonist
alt + E Open policy editor
Escape Close

Categories: Outfit, Food Restrictions, Drug Policies, Allowed Areas, Reading Policies (Ideology DLC).

Animals Menu (F4)

Key Action
Up/Down Navigate animals
Left/Right Navigate property columns
Enter Toggle checkbox / open dropdown
alt + S Sort by current column
Escape Close

Columns include: Name, Bond, Master, Slaughter, Gender, Age, Training, Follow settings, Area, Medical Care, Food Restriction, Release to Wild.

Scanner System

Linear navigation through all map items by category. Always available during map navigation.

Key Action
Page Up/Down Navigate items in subcategory
Ctrl+Page Up/Down Switch categories
Shift+Page Up/Down Switch subcategories
Alt+Page Up/Down Navigate within bulk groups
Home Jump cursor to current item
Alt+Home Toggle auto-jump mode (cursor automatically follows scanner)
End Read distance/direction to item

Categories:

  • Colonists - All colonists
  • Tame Animals - Bonded, pets, livestock
  • Wild Animals - Wildlife by species
  • Orders - Construction, Haul, Hunt, Mine, Deconstruct, Uninstall, Cut, Harvest, Smooth, Tame, Slaughter
  • Buildings - All structures
  • Zones - Growing (with plant type), Stockpile, Fishing, Other
  • Rooms - Named rooms (e.g., "Ann's Bedroom")
  • Trees - Tree types
  • Plants - Wild plants
  • Items - All items by type
  • Mineable Tiles - Stone types, chunks

Auto-jump mode: When enabled, the map cursor automatically jumps to each item as you navigate with Page Up/Down. Distance calculations always update based on current cursor position.

World Map (F8)

Press F8 to toggle between the colony map and world map views.

Key Action
Arrow Keys Navigate tiles (Up=North, Down=South, Left=West, Right=East)
1-5 Detailed tile information
Enter Inspect tile or caravan
R Open route planner
C Form caravan (at colony)
G Open gizmos (when caravan is stopped)
] Caravan orders
, / . Cycle between caravans
Ctrl+Space Select/deselect caravan for multi-selection
Home Jump cursor to scanner selection

Roads and Rivers

The mod tracks roads and rivers on the world map. When navigating to a tile, information about any roads or paths is announced:

  • "Stone road runs north to south"
  • "Dirt path junction: west, south, and east"
  • "River flows northeast"

As a road is followed, announcements update to reflect the direction it continues.

Tile Information (Number Keys)

Press 1-5 on the world map for detailed tile information:

Key Information
1 Growing period, rainfall, forageability, animal grazing, stone types
2 Movement difficulty, winter penalty, terrain type, elevation, current road, caravan paths
3 Disease frequency, tile pollution, nearby pollution, noxious haze (DLC content)
4 Coordinates and time zone
5 Region name

World Scanner

The world map has its own scanner system. Use Ctrl+Page Up/Down to cycle through categories:

  • Settlements - Subcategories: Player settlements, Neutral, Hostile
  • Quest Sites - Active quest locations
  • Caravans - Traveling caravans
  • Biomes - Biome type and approximate size (e.g., "Temperate forest, approximately 2,260 tiles")
  • Roads - Road networks on the map

Press Home to jump the cursor to the currently selected scanner item.

Caravan Path Visibility

When a caravan is selected (using comma/period), its planned route becomes visible on the map. When the cursor is on a tile in that path, the destination direction is announced (e.g., "Bob's caravan heading east").

To view paths for multiple caravans simultaneously:

  1. Use Comma/Period to cycle to a caravan
  2. Press Ctrl+Space to select it
  3. Cycle to another caravan and press Ctrl+Space again
  4. Now both caravan paths are visible as the cursor moves across the map

This is helpful when coordinating movement of multiple caravans. Press Ctrl+Space again on selected caravans to deselect them.

Route Planner

Press R on the world map to activate the Route Planner. This allows planning travel routes and estimating journey times before committing to a caravan.

Key Action
Space Add waypoint at cursor
Shift+Space Remove waypoint at cursor
E Hear estimated travel time
Escape Exit route planner

How It Works

  1. Navigate to the starting point (usually a colony)
  2. Press Space to add the first waypoint
  3. Navigate to the destination
  4. Press Space to add another waypoint
  5. The estimated travel time is announced using average caravan speed

When the Route Planner is active, the scanner gains a Waypoints category for navigating between waypoints. Press 2 to hear directions and arrival times for each point along the path.

Tip: Starting the Route Planner with the first waypoint on an actual caravan will use that caravan's real travel speed instead of the average.

Caravans

Caravans allow colonists to travel across the world map to trade, attack settlements, complete quests, and more.

Forming a Caravan

Press C while on the world map at a colony to begin forming a caravan.

Route Selection

After pressing C, route selection mode activates:

  1. Navigate to the destination
  2. Press Space to add a waypoint
  3. Optionally add more waypoints for complex routes
  4. Press Enter to confirm and open the formation screen

Tip: For auto-provision to calculate supplies for a round trip, add a waypoint at the destination AND a waypoint back at the colony.

When using the scanner during route selection, destinations are marked as reachable or unreachable based on terrain. Some quest locations spawn in areas that can only be reached by transport pods or shuttles.

Pawns Tab

The first tab shows available colonists. Each entry displays the pawn name and currently equipped weapon with its condition.

Key Action
Space/Enter Toggle pawn selection
Alt+H Quick health overview
Alt+M Quick mood overview
Alt+N Quick needs overview
Alt+I Full inspection screen

Items Tab

Navigate here with Right Arrow from the Pawns tab.

Key Action
Space/Enter Open quantity menu
Delete Remove item from caravan
Alt+I Inspect item details

Quantity Adjustment

These quantity controls work in caravan formation, transport pod loading, and trading screens:

Key Action
= or + Increase by 1
- Decrease by 1
Shift+Up Increase by 10
Shift+Down Decrease by 10
Ctrl+Up Increase by 100
Ctrl+Down Decrease by 100
Shift+Home Set to maximum available
Shift+End Set to zero
Delete Set to zero (same as Shift+End)
Shift+Enter Set to maximum given carrying capacity
Enter Type a specific number, then press Enter to confirm

The difference between Shift+Home and Shift+Enter: Shift+Home adds the maximum quantity available regardless of weight, while Shift+Enter adds only what the caravan can carry given current mass restrictions.

Travel Supplies Tab

Navigate here with Right Arrow from the Items tab. Same controls as the Items tab.

Auto-Provision:

  • Press Alt+A to toggle auto-provisioning
  • When enabled, the game automatically selects food and medicine based on estimated travel time
  • The supplies tab is locked while auto-provision is active

Summary View

Press Tab to access the summary view showing caravan statistics:

  • Mass - Current load vs. capacity
  • Speed - Travel speed in tiles per day
  • Food - Food supplies and foraging info
  • Visibility - How visible the caravan is to enemies
  • Destination - Where the caravan is heading
  • ETA - Estimated time of arrival

Press Alt+I on any stat to see a detailed breakdown with tooltips explaining each contributing factor.

Sending the Caravan:

Press Alt+S to finalize and send the caravan.

Caravan Management

Cycling Between Caravans

On the world map, use Comma and Period to cycle between caravans. Each caravan announces its current status:

  • "Sam's Caravan - Traveling to [destination]"
  • "Northern Expedition - Resting)"
  • "Trade Group - Stopped, waiting for orders"

Press Alt+C to move the cursor to the currently selected caravan.

Commanding a Caravan to Travel

To send a caravan to a destination:

  1. Select the caravan with Comma/Period
  2. Navigate the cursor to the destination tile (not where the caravan currently is)
  3. Press ] (right bracket) to open the orders menu
  4. Choose an action like "Travel to this tile" or "Enter [settlement name]"

The right bracket key is for giving orders about a target location—where the caravan should go or what it should do when it arrives.

Caravan Gizmos (Actions at Current Location)

When at the location of a caravan, press G to open the gizmo menu for actions at its current tile:

  • Camp - Create a temporary map to mine, hunt, tame animals, or rest
  • Split this caravan - Divide into two groups
  • Settle here - Found a new colony (if enabled)
  • Other context-specific options

The gizmo menu is for what the caravan does where it currently is, while the orders menu (]) is for where it should go next.

Reforming a Caravan

When ready to leave a temporary camp or quest location:

  1. Press Shift+C to reform the caravan
  2. Use the formation screen to select pawns and items
  3. Press Alt+S to finalize

After reforming, use caravan orders (]) to set the next destination.

Splitting Caravans

To split a caravan into two groups:

  1. Stop the caravan (if moving)
  2. Press G for gizmos
  3. Select Split this caravan
  4. Choose which pawns join the new caravan
  5. Choose which items the new caravan takes
  6. In the summary view, use Left/Right to switch between viewing each caravan's stats
  7. Press Alt+S to finalize the split

Merging Caravans

To merge two caravans:

  1. Move both caravans to the same tile
  2. Use Comma/Period to find each caravan
  3. Press Ctrl+Space on each caravan to select them
  4. Press G for gizmos
  5. Select Merge caravans

Caravan Inspect Screen

Press enter while on the same tile as a caravan to open the inspect screen. This is a navigable tree view.

Key Action
Up/Down Navigate items
Right/Enter Expand section
Left Collapse section or go to parent
* (asterisk) Expand all sections
Type letters Search/filter items
Delete Drop item (Items section) or banish pawn (Pawns section)
Alt+I View stat breakdown with tooltips
Escape Close inspect screen

Sections:

  • Status - Current activity, speed, location
  • Stats - Mass, visibility, food situation (with full tooltips and breakdowns via Alt+I)
  • Pawns - Expand to inspect individual pawns (press Delete to banish a pawn from the caravan)
  • Items - All carried items (press Delete to drop)
  • Gear - Each pawn's equipment (press Enter to swap between pawns or return to inventory)

Multi-Map Navigation

When colonists are on multiple maps (e.g., main colony and a caravan camp):

Key Action
Comma/Period Cycle between pawns on the current map
Shift+Comma/Shift+Period Switch between maps

When switching maps, the map name and number of colonists there is announced. The mod remembers which pawn was selected on each map.

Transport Pods

Transport pods are powerful, rapid, one-way vehicles. A fully-fueled launcher can send a pod up to 66 tiles away, arriving in seconds. They become available in the mid-game after researching the prerequisite technologies.

Building Transport Pod Launchers

When placing a transport pod launcher, the fuel port location is announced relative to the cursor. The launcher occupies two tiles, and the fuel port determines where fuel is loaded and where the transport pod itself will sit.

Once a launcher is built:

  1. Press G on the launcher to open gizmos
  2. Select Build Transport Pod to automatically construct a pod at the fuel port location
  3. Optionally enable the Auto-build gizmo to automatically queue new pods after each launch

This approach is more efficient than manually placing transport pod buildings.

Grouping Pods

Each pod has a 150kg capacity limit. For larger payloads, multiple pods can be grouped by placing their launchers adjacent to each other.

To group pods:

  1. Press G on any pod in the group
  2. Select Group all pods to automatically group all adjacent pods, or
  3. Select Group pods manually to enter placement mode, then navigate to each desired pod, press Space to add it, and Enter when finished

Grouped pods share their combined capacity (e.g., three pods = 450kg).

Loading Pods

After grouping (or with a single pod), the loading screen opens. This works similarly to caravan formation:

Key Action
Left/Right Switch between Pawns and Items tabs
Up/Down Navigate items
Space/Enter Toggle selection or open quantity menu
Alt+I Inspect item details
Alt+H/M/N Quick pawn health/mood/needs
Alt+S Begin loading the pods

The same quantity adjustment shortcuts from caravan formation apply here (=, -, Shift+Up/Down, Ctrl+Up/Down, Shift+Home/End, Shift+Enter).

Once Alt+S is pressed, pawns will load the selected items into the pods. A notification appears when loading is complete.

Note: Occasional alerts about missing items may appear after loading—this is a known game quirk where items are briefly "lost" after being loaded into pods.

Launching Pods

Once pods are loaded:

  1. Press G on the pod
  2. Select Launch pods
  3. The cursor moves to the world map
  4. Navigate to the destination (use the scanner if needed)
  5. Press Enter to select the destination

Destination Options:

Destination Type Result
Empty tile Pods land and form a caravan
Tile with your caravan Pod contents merge with that caravan
Settlement Choose: Visit (form caravan), Gift (donate contents), or Attack (edge or center landing)
Your colony or map with your pawns Enters placement mode to choose exact landing location

Placement Mode (friendly tiles):

When launching to a tile with friendly pawns, placement mode allows choosing the exact landing spot:

  1. Navigate to the desired landing location
  2. Press Space to place, then Enter to confirm
  3. Unpause the game—pods launch after a brief delay

Warning: Pods landing on roofed areas (except mountains) will destroy the roof, potentially injuring nearby pawns. Pawns inside the pod are not harmed.

Creative Uses

Transport pods have many strategic applications:

  • Reinforcing a distant caravan quickly
  • Sending supplies to colonists on a quest
  • Dropping combat animals into enemy settlements
  • Returning captured prisoners to their faction for relationship boosts
  • Emergency medical evacuations

Colony Inventory (I)

Press I to open the colony inventory, a tree view of all items in the colony.

Key Action
Up/Down Navigate categories/items
Left/Right Collapse/expand
Enter Activate (expand or execute action)
* (asterisk) Expand all categories
Type letters Search/filter items
Escape Close

Actions per item: Jump to location, View details.

Installing Buildings from Inventory

When a building is uninstalled (via the Uninstall gizmo), it becomes a minified item stored in a stockpile. These appear in the inventory under a Buildings category.

To reinstall a building:

  1. Move the cursor to the desired installation location
  2. Press I to open inventory
  3. Navigate to the Buildings category
  4. Expand the desired building
  5. Select Install
  6. Use R to rotate if needed—orientation information is announced
  7. Press Space to place the blueprint

Once placed, a colonist will carry the building from the stockpile and install it at the designated location.

Note: Not all buildings can be uninstalled. Some structures like coolers can only be deconstructed.

Trading System

RimWorld offers multiple ways to trade: orbital traders, visiting caravans, settlements on the world map, and more. The trading interface works consistently across all methods.

Trade Screen Layout

The trade screen has two tabs initially:

  • [Trader's Name]'s Items - What the trader is selling
  • Your Items - What can be sold

When any trades are queued, a third tab appears:

  • Trade Summary - All pending buy/sell transactions

Use Left/Right to switch between tabs and Up/Down to navigate items.

Item Information

As items are navigated, the following information is announced:

  • Item name and quantity available
  • Price (with quality indicators like "great deal" or "very expensive")
  • Brief description

For items that both parties possess (shared items), additional details appear:

  • How many the trader has and their buy price
  • How many you have and your sell price

Quantity Adjustment

Key Action
= or + Buy/sell 1 more
- Buy/sell 1 less
Shift+Up Buy/sell 10 more
Shift+Down Buy/sell 10 less
Ctrl+Up Buy/sell 100 more
Ctrl+Down Buy/sell 100 less
Shift+Home Maximum buy/sell
Shift+End Reset to zero
Enter Type exact quantity, then Enter (positive = buy, negative = sell)

For shared items (owned by both parties):

  • Up/Plus directions increase buying quantity
  • Down/Minus directions increase selling quantity
  • When typing a quantity: positive numbers buy, negative numbers sell

Inspection and Price Breakdown

Key Action
Alt+I Full inspection of the selected item
Tab Price breakdown (shows trade skill effects, faction relations, etc.)

Trade Summary Tab

The Trade Summary tab appears when any items have been queued for trade. It shows:

  • All items being bought (positive quantities)
  • All items being sold (negative quantities)
  • Net balance at the bottom

Quantities can be adjusted directly in this tab using the same controls.

Completing a Trade

Key Action
Alt+B Announce current silver balance and trade outcome
Alt+R Reset current item to zero (can also use delete)
Shift+Alt+R Reset all trades
Alt+G Toggle gift mode (donate items for relationship boost)
Alt+A Accept and complete the trade
Escape Cancel and close

Note: When trading with orbital traders or visitors at a colony, purchased items drop on the ground near the trader or trade beacon. Colonists will haul them to stockpiles automatically if space is available.

Other Shortcuts

Key Action
L View alerts and letters ] key to delete letters)
F6 Research menu (with tree navigation and typeahead)
F7 Quest menu
Delete Delete save file (in save/load menu)

Mod Manager

Accessible from Main Menu → Mods. Provides full keyboard navigation for enabling, disabling, and reordering mods.

Key Action
Up/Down Navigate mods in current list
Left/Right Switch between inactive/active mod columns
Enter Toggle mod enable/disable
Ctrl+Up Move mod up in load order (active list only)
Ctrl+Down Move mod down in load order (active list only)
alt + M Open mod settings (if mod has settings)
alt + I Read full mod description and info
alt + S Save mod changes
alt + R Auto-sort mods (resolve load order issues)
alt + O Open mod folder in file explorer
alt + W Open Steam Workshop page for mod
alt + U Upload mod to Steam Workshop (requires Dev Mode)
Escape Close mod manager

Questions? Join the Discord server for support and discussion.

User Utilities

Installers, patchers, and helper tools.

A unified installer for accessibility mods for Unity-based games using MelonLoader.

Read More

AccessMods Installer

A unified installer for accessibility mods for Unity-based games using MelonLoader.

Supported Games

Game ID Repository
Phoenix Wright: Ace Attorney Trilogy pwaat AccessMods/PhoenixWrightTrilogy
Doki Doki Literature Club Plus ddlc AccessMods/DDLCPlusAccess

Usage

Interactive Mode

Simply run the installer and follow the prompts:

AccessModsInstaller.exe

Command Line Options

Usage: AccessModsInstaller [options]

Options:
  --game, -g <id>          Game to install mod for (pwaat, ddlc)
  --game-path, -p <path>   Path to the game installation directory
  --skip-melonloader, -s   Skip MelonLoader installation check
  --force, -f              Overwrite existing files without prompting
  --non-interactive, -n    Run without user prompts (for automation)
  --prerelease, -r         Include prerelease versions when downloading
  --list, -l               List supported games
  --help, -h               Show this help

Examples

# Interactive mode - choose game from menu
AccessModsInstaller.exe

# Install PWAAT mod
AccessModsInstaller.exe --game pwaat

# Install DDLC mod with custom path
AccessModsInstaller.exe --game ddlc --game-path "C:\Games\DDLC"

# Non-interactive installation (for scripting)
AccessModsInstaller.exe --game pwaat --non-interactive --force

# Install prerelease version
AccessModsInstaller.exe --game ddlc --prerelease

What It Does

  1. Finds the game - Automatically searches Steam library folders
  2. Downloads the mod - Fetches the latest release from GitHub
  3. Installs MelonLoader - If not already installed (required for mods)
  4. Installs mod files:
    • Main mod DLL to Mods/
    • UnityAccessibilityLib.dll to game root
    • UniversalSpeech.dll to game root
    • nvdaControllerClient.dll to game root
    • Localization data to UserData/ (if applicable)

Building

Requires .NET 8.0 SDK.

# Build
dotnet build -c Release

# Publish standalone executable
dotnet publish -c Release

The standalone executable will be in bin/Release/net8.0-windows/win-x64/publish/.

Adding New Games

To add support for a new game, create a new GameConfig entry in Games/GameConfigs.cs:

public static GameConfig NewGame { get; } = new GameConfig
{
    DisplayName = "Game Display Name",
    GameId = "shortid",
    SteamFolderName = "Steam Folder Name",
    ExecutableName = "Game.exe",
    GitHubOwner = "YourOrg",
    GitHubRepo = "RepoName",
    ModAssetPrefix = "ModZipPrefix",
    ModDllName = "YourMod.dll",
    HasDataFolder = false,
    UserDataSubfolder = null
};

Then add it to the All list in the same file.

License

MIT

Developer Resources

Libraries and code for mod creators.

A reusable library for adding screen reader accessibility to Unity games via MelonLoader or BepInEx mods. Provides UniversalSpeech integration with SAPI fallback, text cleaning, and speech management.

Read More

UnityAccessibilityLib

A reusable library for adding screen reader accessibility to Unity games. Works with MelonLoader, BepInEx, or any Unity mod framework.

Features

  • UniversalSpeech integration - P/Invoke wrapper for the UniversalSpeech library with SAPI fallback
  • Braille display support - Automatic output to braille displays via screen reader
  • High-level speech manager - Duplicate prevention, repeat functionality, speaker formatting
  • Text cleaning - Strips Unity rich text tags (<color>, <size>, <b>, etc.) with extensible custom replacements
  • Logging abstraction - Integrate with any logging system (MelonLoader, BepInEx, custom)
  • Multi-target support - Builds for net6.0, net472, and net35 for broad compatibility with various games

Requirements

  • UniversalSpeech.dll in the game directory
  • One of:
    • .NET 6.0 (IL2CPP games with MelonLoader 0.6+)
    • .NET Framework 4.7.2 (Mono games)
    • .NET Framework 3.5 (older Mono games, e.g. Unity 2017)

Installation

Option 1: NuGet Package (Recommended)

dotnet add package UnityAccessibilityLib

Or add to your .csproj:

<PackageReference Include="UnityAccessibilityLib" Version="2.0.0" />

Option 2: Project Reference

Add the project to your solution and reference it:

<ProjectReference Include="..\UnityAccessibilityLib\UnityAccessibilityLib.csproj" />

Option 3: DLL Reference

Build the library and reference the DLL:

<Reference Include="UnityAccessibilityLib">
  <HintPath>path\to\UnityAccessibilityLib.dll</HintPath>
</Reference>

Quick Start

MelonLoader Setup

using MelonLoader;
using UnityAccessibilityLib;

public class MelonLoggerAdapter : IAccessibilityLogger
{
    private readonly MelonLogger.Instance _logger;

    public MelonLoggerAdapter(MelonLogger.Instance logger)
    {
        _logger = logger;
    }

    public void Msg(string message) => _logger.Msg(message);
    public void Warning(string message) => _logger.Warning(message);
    public void Error(string message) => _logger.Error(message);
}

public class MyAccessibilityMod : MelonMod
{
    public override void OnInitializeMelon()
    {
        AccessibilityLog.Logger = new MelonLoggerAdapter(LoggerInstance);

        if (SpeechManager.Initialize())
        {
            LoggerInstance.Msg("Speech system ready");
        }
    }
}

BepInEx Setup

using BepInEx;
using BepInEx.Logging;
using UnityAccessibilityLib;

public class BepInExLoggerAdapter : IAccessibilityLogger
{
    private readonly ManualLogSource _logger;

    public BepInExLoggerAdapter(ManualLogSource logger)
    {
        _logger = logger;
    }

    public void Msg(string message) => _logger.LogInfo(message);
    public void Warning(string message) => _logger.LogWarning(message);
    public void Error(string message) => _logger.LogError(message);
}

[BepInPlugin("com.example.mymod", "MyAccessibilityMod", "1.0.0")]
public class MyPlugin : BaseUnityPlugin
{
    void Awake()
    {
        AccessibilityLog.Logger = new BepInExLoggerAdapter(Logger);

        if (SpeechManager.Initialize())
        {
            Logger.LogInfo("Speech system ready");
        }
    }
}

Output Speech

// Dialogue with speaker name
SpeechManager.Output("Phoenix", "Hold it!", TextType.Dialogue);
// Output: "Phoenix: Hold it!"

// Narrator text
SpeechManager.Output(null, "The court fell silent.", TextType.Narrator);
// Output: "The court fell silent."

// Menu/system announcements
SpeechManager.Announce("Save complete", TextType.System);

// Repeat last dialogue (bind to a key)
SpeechManager.RepeatLast();

API Reference

SpeechManager

Method Description
Initialize() Initialize the speech system. Returns true on success.
Output(speaker, text, textType) Speak text with optional speaker name.
Announce(text, textType) Speak text without a speaker name.
RepeatLast() Repeat the last dialogue/narrator text.
Stop() Stop current speech.
ClearRepeatBuffer() Clear stored repeat text.
Property Description
DuplicateWindowSeconds Time window for duplicate suppression (default: 0.5s)
EnableLogging Whether to log speech output (default: true)
EnableBraille Whether to output to braille displays (default: true)
FormatTextOverride Custom delegate for text formatting (see Extensibility)
ShouldStoreForRepeatPredicate Custom predicate for repeat storage (see Extensibility)
TextTypeNames Dictionary mapping text type IDs to names for logging

TextType Constants

Value Description
Dialogue Character dialogue (formatted as "Speaker: text")
Narrator Narrator/descriptive text
Menu Menu item text
MenuChoice Menu selection
System System messages
CustomBase Base value (100) for defining custom text types

UniversalSpeechWrapper

Low-level access to UniversalSpeech:

UniversalSpeechWrapper.Initialize();           // Initialize (called by SpeechManager)
UniversalSpeechWrapper.Speak("text", true);    // Speak with interrupt
UniversalSpeechWrapper.DisplayBraille("text"); // Output to braille display
UniversalSpeechWrapper.Stop();                 // Stop speech
UniversalSpeechWrapper.IsScreenReaderActive(); // Check if screen reader is running

TextCleaner

Basic usage:

string clean = TextCleaner.Clean("<color=#ff0000>Red text</color>");
// Result: "Red text"

string combined = TextCleaner.CombineLines("Line 1", "<b>Line 2</b>", "Line 3");
// Result: "Line 1 Line 2 Line 3"

Custom text replacements (applied after tag removal):

// Simple string replacement
TextCleaner.AddReplacement("♥", "heart");
TextCleaner.AddReplacement("→", "arrow");

// Regex replacement
TextCleaner.AddRegexReplacement(@"\[(\d+)\]", "footnote $1");

// Clear custom replacements
TextCleaner.ClearReplacements();      // Clear string replacements only
TextCleaner.ClearRegexReplacements(); // Clear regex replacements only
TextCleaner.ClearAllCustomReplacements(); // Clear all

AccessibilityLog

// Set your logger implementation
AccessibilityLog.Logger = new MelonLoggerAdapter(loggerInstance);
// or
AccessibilityLog.Logger = new BepInExLoggerAdapter(loggerInstance);

// Or create a simple console logger for testing
AccessibilityLog.Logger = new ConsoleLogger();

public class ConsoleLogger : IAccessibilityLogger
{
    public void Msg(string message) => Console.WriteLine(message);
    public void Warning(string message) => Console.WriteLine($"[WARN] {message}");
    public void Error(string message) => Console.WriteLine($"[ERROR] {message}");
}

.NET 3.5 Compatibility

The library includes Net35Extensions with polyfills for methods not available in .NET 3.5:

  • Net35Extensions.IsNullOrWhiteSpace(string) - Use instead of string.IsNullOrWhiteSpace

Extensibility

Custom Text Types

Define custom text types for game-specific content:

public static class MyTextTypes
{
    public const int Tutorial = TextType.CustomBase + 1;  // 101
    public const int Combat = TextType.CustomBase + 2;    // 102
    public const int Inventory = TextType.CustomBase + 3; // 103
}

// Register names for logging
SpeechManager.TextTypeNames = new Dictionary<int, string>
{
    { TextType.Dialogue, "Dialogue" },
    { TextType.Narrator, "Narrator" },
    { MyTextTypes.Tutorial, "Tutorial" },
    { MyTextTypes.Combat, "Combat" },
};

// Use custom types
SpeechManager.Announce("Press A to jump", MyTextTypes.Tutorial);

Custom Text Formatting

Override how text is formatted before output:

SpeechManager.FormatTextOverride = (speaker, text, textType) =>
{
    // Custom formatting logic
    if (textType == MyTextTypes.Combat)
        return $"Combat: {text}";
    if (!string.IsNullOrEmpty(speaker))
        return $"{speaker} says: {text}";
    return text;
};

Custom Repeat Storage

Control which text types are stored for repeat functionality:

SpeechManager.ShouldStoreForRepeatPredicate = (textType) =>
{
    // Store dialogue, narrator, and tutorial text for repeat
    return textType == TextType.Dialogue
        || textType == TextType.Narrator
        || textType == MyTextTypes.Tutorial;
};

UniversalSpeech Setup

  1. Download UniversalSpeech from GitHub
  2. Copy UniversalSpeech.dll (32-bit or 64-bit depending on the game's architecture) to the game's root directory
  3. The library will automatically use any active screen reader, or fall back to Windows SAPI

Supported screen readers:

  • NVDA
  • JAWS
  • Window-Eyes
  • System Access
  • Supernova
  • ZoomText
  • SAPI (fallback)

Migrating from MelonAccessibilityLib

If you're upgrading from the old MelonAccessibilityLib package:

  1. Update your NuGet package reference from MelonAccessibilityLib to UnityAccessibilityLib
  2. Update your using statements from using MelonAccessibilityLib; to using UnityAccessibilityLib;

No API changes - all classes and methods remain the same.

License

MIT License - see LICENSE for details.