This skill should be used when the user asks about "accessibility", "a11y", "colorblind", "remapping controls", "difficulty options", or mentions making the game playable for more people.
Guide implementation of accessibility features to make your game playable by more people.
Facts:
Business Case:
Implementation:
# Store mappings
var input_map = {
"attack": "X",
"dodge": "Space",
"interact": "E"
}
# Allow remapping
func remap_action(action: String, event: InputEvent):
InputMap.action_erase_events(action)
InputMap.action_add_event(action, event)
save_input_config()
UI Flow:
Requirements:
Implementation:
# Subtitle display
func show_subtitle(speaker: String, text: String, duration: float):
subtitle_label.text = "[%s]: %s" % [speaker, text]
subtitle_container.show()
await get_tree().create_timer(duration).timeout
subtitle_container.hide()
Minimum:
Recommended:
var text_scale_options = [0.75, 1.0, 1.25, 1.5, 2.0]
var current_text_scale = 1.0
func apply_text_scale():
# Apply to all UI text
for label in get_tree().get_nodes_in_group("scalable_text"):
label.add_theme_font_size_override("font_size",
base_font_size * current_text_scale)
Types to Support:
| Type | Population | Color Confusion |
|---|---|---|
| Protanopia | 1% men | Red-green |
| Deuteranopia | 6% men | Red-green |
| Tritanopia | 0.01% | Blue-yellow |
Implementation Approaches:
Option 1: Shader-Based
# Apply colorblind shader to viewport
shader_type canvas_item;
uniform int mode = 0; // 0=normal, 1=protanopia, 2=deuteranopia, 3=tritanopia
void fragment() {
vec4 color = texture(TEXTURE, UV);
// Apply color matrix transformation based on mode
COLOR = apply_colorblind_matrix(color, mode);
}
Option 2: Alternate Color Palettes Create alternate sprite sets or palette swaps.
Option 3: Symbols + Color Don't rely on color alone. Add shapes/icons.
Red enemy = Red + Triangle icon
Blue enemy = Blue + Circle icon
Approaches:
Preset Difficulties:
| Setting | Enemy HP | Enemy Damage | Player Damage |
|---|---|---|---|
| Easy | 70% | 70% | 130% |
| Normal | 100% | 100% | 100% |
| Hard | 130% | 130% | 100% |
Granular Options (Better):
Assist Mode Features:
# Settings
var screen_shake_intensity = 1.0 # 0.0 to 1.0
func shake(base_intensity):
var actual_intensity = base_intensity * screen_shake_intensity
# Apply shake
Options:
var reduce_flashing = false
func flash_effect():
if reduce_flashing:
# Gentler alternative (fade or skip)
return
# Normal flash
Important: Flashing >3Hz can trigger seizures. Always provide option to reduce.
var sprint_toggle = false
func handle_sprint():
if sprint_toggle:
if Input.is_action_just_pressed("sprint"):
is_sprinting = !is_sprinting
else:
is_sprinting = Input.is_action_pressed("sprint")
Apply to:
SETTINGS
├── Audio
│ ├── Master Volume
│ ├── Music Volume
│ ├── SFX Volume
│ └── Mono Audio [toggle]
├── Display
│ ├── Screen Shake [slider/off]
│ ├── Flash Effects [slider/off]
│ └── High Contrast [toggle]
├── Accessibility
│ ├── Text Size [slider]
│ ├── Colorblind Mode [none/protanopia/deuteranopia/tritanopia]
│ ├── Subtitles [on/off]
│ └── Subtitle Size [slider]
├── Controls
│ ├── Remap Controls
│ ├── Sprint Toggle [toggle/hold]
│ ├── Auto-Aim [toggle]
│ └── Controller Vibration [slider/off]
└── Gameplay
├── Difficulty [presets or custom]
├── Game Speed [50%-100%]
└── Assist Mode [toggle]
Include in your game/store page:
## Accessibility Features
**Visual:**
- Colorblind modes (Protanopia, Deuteranopia, Tritanopia)
- Adjustable text size
- Screen shake can be reduced or disabled
- Flashing effects can be disabled
**Audio:**
- Full subtitles for all dialogue
- Separate volume sliders for music, SFX
- Visual indicators for important sounds
**Motor:**
- Fully remappable controls
- Toggle options for all hold actions
- Assist mode available
**Cognitive:**
- Multiple difficulty settings
- Clear objective markers
- Save at any checkpoint
references/colorblind-safe-palettes.md - Safe color combinationsreferences/accessibility-guidelines.md - Detailed guidelinesexamples/accessibility-settings.gd - Settings managerexamples/colorblind-shader.gdshader - Colorblind shader