Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/dolphin-emu/dolphin/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Dynamic Input Textures allow texture packs to automatically display correct button prompts based on the user’s actual input device - showing keyboard keys, Xbox buttons, PlayStation buttons, or other controller types as appropriate.

How It Works

The system replaces rectangular regions in game textures with input-specific button images. When you press ‘A’ on a Wiimote mapped to ‘X’ on an Xbox controller, the game will display an Xbox ‘X’ button instead of a generic ‘A’ prompt.

Setup

Directory Structure

Dolphin User Directory/
  └── Load/
      └── DynamicInputTextures/
          └── GAMEID/
              ├── config.json
              ├── base_texture.png
              ├── keyboard/
              │   ├── a.png
              │   └── b.png
              └── gamepad/
                  ├── a.png
                  └── b.png

Game ID Naming

Folder names can be:
  • Complete Game ID: SMNE01 (New Super Mario Bros. Wii NTSC)
  • Region-agnostic ID: SMN (New Super Mario Bros. Wii, all regions)
  • Any name with empty GAMEID.txt file underneath

Enable Custom Textures

Enable “Load Custom Textures” in Graphics Settings > Advanced tab for dynamic input textures to work.

JSON Configuration

Required Fields

image
string
required
Base texture PNG file containing regions to replace
emulated_controls
object
required
Map of emulated devices to button regions
host_controls
object
Map of host devices to button images (required if default_host_controls not set)

Global Fields

generated_folder_name
string
Output folder name (default: <gameid>_Generated)
preserve_aspect_ratio
boolean
Maintain button image aspect ratios (default: true)
default_host_controls
object
Default device-to-image mappings applied to all textures

Complete Examples

Basic Configuration

{
  "generated_folder_name": "MyDynamicTexturePack",
  "preserve_aspect_ratio": false,
  "output_textures": {
    "tex1_128x128_02870c3b015d8b40_5.png": {
      "image": "icons.png",
      "emulated_controls": {
        "Wiimote1": {
          "Buttons/A": [
            [0, 0, 30, 30],
            [500, 550, 530, 580]
          ],
          "Buttons/B": [
            [100, 342, 132, 374]
          ]
        }
      },
      "host_controls": {
        "DInput/0/Keyboard Mouse": {
          "A": "keyboard/a.png",
          "B": "keyboard/b.png"
        },
        "XInput/0/Gamepad": {
          "`Button A`": "gamepad/a.png",
          "`Button B`": "gamepad/b.png"
        }
      }
    }
  }
}

Understanding Regions

Regions define rectangular areas in the base image to replace with button icons. Each region is an array of four coordinates:
[left, top, right, bottom]

Multiple Regions

One button can replace multiple regions in the same texture:
"Buttons/A": [
  [0, 0, 30, 30],      // Top-left corner
  [500, 550, 530, 580], // Bottom-right area
  [250, 100, 280, 130]  // Center area
]
Coordinates are pixel offsets into the base image. Ensure they don’t exceed image dimensions.

Emulated Device Names

GameCube Controllers

  • GCPad1, GCPad2, GCPad3, GCPad4

Wiimotes

  • Wiimote1, Wiimote2, Wiimote3, Wiimote4

Button Path Examples

Buttons/A
Buttons/B
Buttons/1
Buttons/2
Buttons/+
Buttons/-
Buttons/Home
Buttons/A
Buttons/B
Buttons/X
Buttons/Y
Buttons/Z
Buttons/Start
D-Pad/Up
D-Pad/Down
D-Pad/Left
D-Pad/Right
Main Stick/Up
Main Stick/Down
C-Stick/Up
C-Stick/Down

Host Device Strings

Keyboard

"DInput/0/Keyboard Mouse": {
  "A": "keyboard/a.png",
  "SPACE": "keyboard/space.png",
  "RETURN": "keyboard/enter.png"
}

Xbox Controllers

"XInput/0/Gamepad": {
  "`Button A`": "xbox/a.png",
  "`Button B`": "xbox/b.png",
  "`Button X`": "xbox/x.png",
  "`Button Y`": "xbox/y.png"
}

Wildcard (Any Device)

"": {
  "`Button A`": "generic/a.png"
}
Gamepad button names use backticks: `Button A`, `Button X`, etc.

Image Requirements

Base Texture

  • PNG format required
  • Should be the game texture you’re modifying
  • Can be upscaled or redrawn versions

Button Images

  • PNG format required
  • Transparent backgrounds recommended
  • Will be scaled to fit regions (unless preserve_aspect_ratio: true)

Creating a Pack

1

Dump Game Textures

Enable “Dump Textures” in Graphics Settings and play the game to capture textures with button prompts
2

Create Button Assets

Design PNG images for each button on each input device type you want to support
3

Identify Regions

Open base textures in an image editor and note the pixel coordinates of button prompt locations
4

Write Configuration

Create JSON file mapping emulated controls to regions and host controls to images
5

Test

Load the game with different controller types and verify correct button images appear

Troubleshooting

  • Verify “Load Custom Textures” is enabled
  • Check folder is named correctly (matching Game ID)
  • Ensure JSON has no syntax errors
  • Verify output_textures keys match actual game texture filenames
  • Check host device string matches your controller type
  • Verify button name mapping is correct
  • Use wildcard "" device if specific device detection fails
  • Set "preserve_aspect_ratio": true
  • Adjust region dimensions to match button image aspect ratios
  • Ensure button PNGs are the correct resolution

Resource Packs

Package custom textures for distribution

Graphics Mods

Modify rendering behavior and effects