thedivergentai/godot-platform-console
Expert blueprint for console platforms (PlayStation, Xbox, Nintendo Switch) covering controller-first UI, certification requirements (TRCs/TCRs), platform services (achievements, cloud saves), and performance compliance. Use when targeting console releases or implementing gamepad-only interfaces. Keywords console, PlayStation, Xbox, Switch, TRC, TCR, certification, controller, gamepad, achievements.
npx skills add https://github.com/thedivergentai/GD-Agentic-Skills --skill godot-platform-console
Controller-first design, certification compliance, and locked frame rates define console development.
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN).NOTIFICATION_APPLICATION_FOCUS_OUT and force a pause.Engine.max_fps and enable VSync.controller_prompt_mapper.gd), not "Press A".Input.get_connected_joypads().get_vector() / get_action_strength().Input.start_joy_vibration() + accessibility toggle.DisplayServer.window_set_mode() is ignored/fails.ui_accept, ui_cancel, custom actions).NOTIFICATION_WM_CLOSE_REQUEST for termination — Consoles suspend; handle focus/suspend paths.Input.flush_buffered_events() before critical checks.== / != on analog trigger axes — Use is_equal_approx().queue_free() and break cycles.res:// at runtime — Use user:// only..tmp then rename.InputEvent.DEVICE_ID_* constants — never assume device 0 is mouse/keyboard.> MANDATORY: Read the appropriate script before implementing the corresponding pattern.
Expert TRC/TCR compliance (focus loss, controller disconnects).
Dynamic Resolution Scaling and FSR 2.2 management for console performance.
Direct RenderingServer/PhysicsServer bypass for high-frequency objects.
Atomic, corruption-resistant threaded save system.
GUID-based button prompt detection (PlayStation/Xbox/Switch).
Strict RAM monitoring for platform-specific hardware budgets.
Native OS dialog and virtual keyboard abstraction.
Asset pre-fetching using WorkerThreadPool to avoid level-load stutters.
Achievement/Trophy caching with offline persistence.
Hardware-aware hardware initialization and rendering overrides.
Run this checklist in order for a console-ready vertical slice. Do NOT Load optional scripts unless the row below says optional.
| Step | MANDATORY script | Do NOT Load (unless needed) |
| :--- | :--- | :--- |
| 1. Boot | console_boot_config.gd | server_side_projectile.gd — RID bypass, not cert |
| 2. Focus / disconnect | certification_manager.gd | — |
| 3. Save atomicity | async_save_manager.gd | — |
| 4. FPS / scaler / RAM | performance_scaler_fsr.gd + memory_budget_guard.gd | Switch: set ram_limit_mb ≈ 3072 (retail) / warn at 3584; PS/Xbox: 4096–5120 per SKU — see script @export |
| 5. Prompts | controller_prompt_mapper.gd | — |
Optional only: achievement_offline_queue.gd, platform_dialog_invoker.gd, background_data_prefetcher.gd. Do NOT Load these during steps 1–5 unless achievements, system dialogs, or prefetch are in scope.
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_accept"):
on_confirm()
elif event.is_action_pressed("ui_cancel"):
on_cancel()
# Prompts: MANDATORY controller_prompt_mapper.gd for face-button glyphs
| Symptom | Fix script | Doc |
| :--- | :--- | :--- |
| Mouse pointer visible in game UI | Hide via Input Map flow + Input.MOUSE_MODE_HIDDEN in boot | Custom mouse cursor |
| Game runs when dashboard/home pressed | certification_manager.gd focus-out pause | Handling quit requests |
| "Press A" hardcoded on Switch | controller_prompt_mapper.gd GUID glyphs | Controllers, gamepads, and joysticks |
| Save corruption on power loss | async_save_manager.gd .tmp rename | Saving games |
| Frame time spikes / TRC perf fail | performance_scaler_fsr.gd + RAM guard | Resolution scaling |
Prefer platform_dialog_invoker.gd / platform_overlay_manager.gd / DisplayServer.dialog_show() for TRC system messages over custom modal stacks.
Enable shader/pipeline cache on fixed console GPUs; see console_shader_manager.gd and Official Docs pipeline compilation guidance in Reference.
Use Input.joy_connection_changed + Input.get_joy_info() via controller_telemetry.gd; battery level often needs a platform GDExtension under NDA.
> Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
Take thedivergentai/godot-platform-console from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.