Skip to main content

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