Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage Godot input action mappings in project.godot. Use when adding input actions, changing key bindings, setting up controls for a new genre, or validating that all referenced actions exist. Called by project-scaffold (initial setup), workers (new mechanics), and the dispatching role (GDD changes requiring new inputs).
.claude/skills/randallliuxin-input-mapper/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -29% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 107% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-10 | ✓→✗ | ▼ Worse | 4% | 0% |
$ARGUMENTS
Read the GDD or user request, determine which input actions are needed, and write the correct [input] section entries into project.godot.
Source actions from one of:
(e.g., "Player can jump" → jump action).
For each action, determine: action name (snake_case), bound keys/buttons.
For Object() serialization format, templates (keyboard, mouse, gamepad button, gamepad axis), and key code table, read references/serialization.md.
Use these as starting points. Add gamepad bindings if the GDD mentions controller support.
| Action | Keys | |--------|------| | move_left | A, Left Arrow | | move_right | D, Right Arrow | | jump | Space, W, Up Arrow |
| Action | Keys | |--------|------| | move_up | W, Up Arrow | | move_down | S, Down Arrow | | move_left | A, Left Arrow | | move_right | D, Right Arrow |
| Action | Keys / Buttons | |--------|---------------| | move_up | W, Up Arrow | | move_down | S, Down Arrow | | move_left | A, Left Arrow | | move_right | D, Right Arrow | | shoot | LMB (mouse button 1) | | reload | R |
| Action | Keys | |--------|------| | pause | Escape |
Note: ui_accept, ui_cancel, ui_left, ui_right, ui_up, ui_down are built-in Godot actions — do NOT redefine them in [input] unless overriding defaults.
Check that every Input.is_action_*("action_name") and event.is_action("action_name") call in .gd files has a matching entry in project.godot [input] or is a built-in Godot action (prefixed with ui_).
To validate:
.gd files for is_action\w*\("([^"]+)"\) — extract action names.project.godot [input] section for defined actions.ui_accept, ui_cancel, ui_select,ui_left, ui_right, ui_up, ui_down, ui_focus_next, ui_focus_prev, ui_page_up, ui_page_down, ui_home, ui_end, ui_text_*, ui_filedialog_*, ui_graph_*, ui_copy, ui_cut, ui_paste, ui_undo, ui_redo.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | pass→pass | 8,991 | 7,325 | -19% | 1 | 1 | 0% | 1,523 | 2,055 | +35% | 0 | 0 | — |
case-01 | fail→pass | 20,213 | 10,517 | -48% | 1 | 1 | 0% | 4,283 | 3,058 | -29% | 0 | 0 | — |
case-02 | pass→pass | 14,664 | 12,312 | -16% | 1 | 1 | 0% | 3,059 | 3,374 | +10% | 0 | 0 | — |
case-03 | pass→pass | 52,400 | 36,150 | -31% | 1 | 1 | 0% | 5,887 | 4,361 | -26% | 0 | 0 | — |
case-04 | fail→fail | 17,437 | 23,816 | +37% | 1 | 1 | 0% | 3,173 | 1,962 | -38% | 0 | 0 | — |
case-05 | pass→pass | 5,604 | 3,209 | -43% | 1 | 1 | 0% | 1,018 | 1,417 | +39% | 0 | 0 | — |
case-06 | pass→pass | 8,808 | 3,380 | -62% | 1 | 1 | 0% | 1,516 | 1,432 | -6% | 0 | 0 | — |
case-07 | fail→pass | 21,741 | 11,775 | -46% | 1 | 1 | 0% | 1,602 | 3,189 | +99% | 0 | 0 | — |
case-08 | pass→pass | 27,209 | 12,571 | -54% | 1 | 1 | 0% | 6,177 | 3,810 | -38% | 0 | 0 | — |
case-09 | pass→pass | 36,452 | 16,201 | -56% | 1 | 1 | 0% | 3,376 | 4,493 | +33% | 0 | 0 | — |
case-10 | pass→fail | 10,687 | 26,296 | +146% | 1 | 1 | 0% | 1,921 | 1,999 | +4% | 0 | 0 | — |
case-11 | fail→pass | 45,151 | 28,126 | -38% | 1 | 1 | 0% | 2,004 | 4,144 | +107% | 0 | 0 | — |
case-12 | pass→pass | 7,434 | 4,392 | -41% | 1 | 1 | 0% | 1,306 | 1,593 | +22% | 0 | 0 | — |
case-13 | pass→pass | 9,690 | 4,466 | -54% | 1 | 1 | 0% | 1,586 | 1,548 | -2% | 0 | 0 | — |
case-14 | pass→pass | 3,161 | 2,109 | -33% | 1 | 1 | 0% | 485 | 1,120 | +131% | 0 | 0 | — |
case-15 | pass→pass | 6,823 | 10,290 | +51% | 1 | 1 | 0% | 1,156 | 3,022 | +161% | 0 | 0 | — |
case-16 | pass→pass | 15,818 | 16,198 | +2% | 1 | 1 | 0% | 2,855 | 4,309 | +51% | 0 | 0 | — |
case-17 | pass→fail | 3,089 | 10,993 | +256% | 1 | 1 | 0% | 541 | 1,088 | +101% | 0 | 0 | — |
case-18 | pass→pass | 4,539 | 5,814 | +28% | 1 | 1 | 0% | 756 | 1,784 | +136% | 0 | 0 | — |
case-19 | fail→pass | 32,923 | 10,368 | -69% | 1 | 1 | 0% | 1,562 | 3,028 | +94% | 0 | 0 | — |
case-21 | pass→pass | 7,527 | 4,304 | -43% | 1 | 1 | 0% | 1,379 | 1,537 | +11% | 0 | 0 | — |
case-22 | pass→pass | 16,747 | 16,326 | -3% | 1 | 1 | 0% | 2,453 | 3,384 | +38% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 16 counted toward the lift figure. The other 6 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 16 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.