| name | godot-platform-console |
| description | 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. |
Platform: Console
Controller-first design, certification compliance, and locked frame rates define console development.
NEVER Do
- NEVER show a mouse cursor โ Certification (TRC/TCR) failure. Hide with
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN).
- NEVER skip pausing on focus loss โ Monitor
NOTIFICATION_APPLICATION_FOCUS_OUT and force a pause.
- NEVER let a controller disconnect go unhandled โ Force pause and show reconnect UI.
- NEVER use an unlocked frame rate โ Lock 30 or 60 FPS via
Engine.max_fps and enable VSync.
- NEVER forget D-Pad navigation โ Analog-only menus fail accessibility/TRC. Support D-Pad for all menus.
- NEVER hardcode button labels โ Use GUID-based prompt mapping (
controller_prompt_mapper.gd), not "Press A".
- NEVER exceed hardware memory limits โ Profile RAM; Switch budgets are rigid.
- NEVER assume Joypad 0 is always Player 1 โ Query
Input.get_connected_joypads().
- NEVER distribute console export templates or SDKs publicly โ NDA-bound.
- NEVER handle continuous analog sticks with boolean checks โ Use
get_vector() / get_action_strength().
- NEVER vibrate continuously without a disable option โ Finite
Input.start_joy_vibration() + accessibility toggle.
- NEVER expect OS window APIs on consoles โ
DisplayServer.window_set_mode() is ignored/fails.
- NEVER map UI to raw button indices โ Use Project Input Map (
ui_accept, ui_cancel, custom actions).
- NEVER rely on
NOTIFICATION_WM_CLOSE_REQUEST for termination โ Consoles suspend; handle focus/suspend paths.
- NEVER query inputs without flushing when frame-perfect โ
Input.flush_buffered_events() before critical checks.
- NEVER use
== / != on analog trigger axes โ Use is_equal_approx().
- NEVER leave orphaned nodes across scene transitions โ Strict RAM;
queue_free() and break cycles.
- NEVER write to
res:// at runtime โ Use user:// only.
- NEVER save synchronously on the main thread โ Offload; atomic
.tmp then rename.
Available Scripts
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.
Certification Golden Path (MANDATORY scripts)
Run this checklist in order for a console-ready vertical slice. Do NOT Load optional scripts unless the row below says optional.
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.
Input Handling (Input Map โ not raw indices)
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
Expert Techniques
TRC failure โ fix (symptom โ script โ doc)
1. Platform-Overlay-Manager (Native UI Dialogs)
Prefer platform_dialog_invoker.gd / platform_overlay_manager.gd / DisplayServer.dialog_show() for TRC system messages over custom modal stacks.
2. Shader-Binary-Caching (RenderingDevice)
Enable shader/pipeline cache on fixed console GPUs; see console_shader_manager.gd and Official Docs pipeline compilation guidance in Reference.
3. Controller-Battery-Telemetry Hook
Use Input.joy_connection_changed + Input.get_joy_info() via controller_telemetry.gd; battery level often needs a platform GDExtension under NDA.
Deep dives (on demand)
Reference
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.
Official Documentation
- Controllers, gamepads, and joysticks โ Joypad indexing, deadzones, get_vector/get_connected_joypads, and why device 0 is never assumed Player 1 on consoles.
- Controller number and vibration โ Finite start_joy_vibration durations, connection signals, and haptic accessibility toggles required by TRC/TCR.
- Using InputEvent โ Event flow for InputEventJoypadButton/Motion, Input Map actions, and buffered flush before frame-critical checks.
- Custom mouse cursor โ Input.set_mouse_mode / hidden cursor so a visible pointer does not fail console certification.
- Handling quit requests โ Focus-out / suspend paths versus NOTIFICATION_WM_CLOSE_REQUEST, which consoles often never emit.
- Keyboard, mouse, and controller UI navigation โ Focus neighbors and D-Pad/gamepad UI traversal required when analog-only menus fail accessibility/TRC.
- Resolution scaling โ Viewport FSR2 / scaling_3d_scale profiles used to hold locked 30/60 FPS on weak SKUs.
- Saving games โ user:// persistence, save indicators, and why res:// writes are invalid on exported console builds.
- Background loading โ Threaded ResourceLoader prefetch so slow console storage does not hitch level transitions.
- Using multiple threads โ WorkerThreadPool offload for atomic saves and prefetch without main-thread TCR frame spikes.
- Feature tags โ OS.has_feature / export tags that gate console boot overrides (VSync, max FPS, low-end GI).
- Reducing stutter from shader/pipeline compilations โ Shader/pipeline caching on fixed console GPUs to avoid first-use hitch rejections.
Related Skills
Prerequisites
- godot-project-foundations โ Project layout, Input Map, and export/user paths before certification hooks and console boot overrides.
- godot-input-handling โ Joypad actions, deadzones, and device remapping that controller-first UI and prompt mappers build on.
- godot-gdscript-mastery โ Typed notifications, signals, and thread-safe call patterns used by compliance and async save managers.
Complements
Downstream / consumers
- godot-platform-desktop โ Dual-ship PC builds that must share Input Map/actions while keeping console mouse-hidden and FPS-locked paths.
- godot-platform-mobile โ Shared focus-loss / suspend pause patterns when the same title also targets handhelds.
- godot-multiplayer-networking โ Online matchmaking/friends hooks that sit beside achievement queues and platform overlays.
- godot-genre-party โ Multi-pad local play that consumes dynamic joypad slot discovery and prompt mapping.
Master
- godot-master โ Library router and mirrored module entry for cross-skill discovery.