Parte: 11 — Móvil, consolas y plataformas · Fuente: Documentación de Steam Deck (Valve) y GodotSteam ⏱️ Duración estimada: 80 min · Nivel: Intermedio
Preparar un juego de Godot 4 para la Steam Deck, la consola portátil de Valve que ejecuta un Linux (SteamOS) y corre juegos de Windows mediante la capa de compatibilidad Proton. Steam otorga a los juegos el sello Steam Deck Verified cuando cumplen criterios de entrada (controles por defecto configurados), legibilidad del texto, compatibilidad general (funciona sin dependencias externas) y rendimiento aceptable en el hardware de la Deck.
También veremos la compatibilidad PC en general: soportar a la vez teclado+ratón y gamepad, y adaptarse a distintas resoluciones. Para la capa Steam (logros, nube, overlay) se usa GodotSteam, una GDExtension que integra la Steamworks API en Godot 4. Al terminar tendrás una checklist de verificación de Steam Deck y habrás ajustado un juego (control por defecto y tamaño de texto) para acercarlo a superarla.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Steam Deck, SteamOS y Proton | Definen cómo corre tu juego en el dispositivo. |
| 2 | Steam Deck Verified | Sello que mejora visibilidad y confianza. |
| 3 | Control por defecto | La Deck es primero un gamepad; debe jugarse sin teclado. |
| 4 | Legibilidad del texto | Pantalla pequeña: texto minúsculo suspende la verificación. |
| 5 | Teclado + gamepad simultáneos | El jugador alterna entre ambos sin fricción. |
| 6 | Resoluciones y escalado | La Deck es 1280×800; el juego debe adaptarse. |
| 7 | GodotSteam (GDExtension) | Integra logros, nube y overlay de Steam. |
| 8 | Rendimiento en hardware modesto | La Deck no es una torre gaming. |
Necesitas Godot 4.x y una cuenta de Steamworks (registro de partner con coste por app) si quieres integrar la API real. Para la capa Steam, instala GodotSteam como GDExtension en res://addons/. Lo ideal es probar en una Steam Deck física, pero muchos criterios (control por defecto, tamaño de texto, teclado+gamepad, resolución) se pueden validar en PC redimensionando la ventana a 1280×800.
Documentación: Steam Deck para desarrolladores https://partner.steamgames.com/doc/steamdeck y GodotSteam https://godotsteam.com. Revisa también el sistema de input de Godot para el soporte simultáneo de dispositivos.
Crearemos una checklist de verificación y ajustaremos el juego: control por defecto y tamaño de texto para la Deck.
Simula la pantalla de la Deck: en Project → Project Settings → Display → Window, prueba una resolución base 1280×800 y un Stretch Mode: canvas_items con Aspect: keep para escalar la UI.
Redacta la checklist de verificación de Steam Deck:
ENTRADA
[ ] El juego es jugable de principio a fin solo con el gamepad
[ ] Existe una configuración de controles por defecto (no hay que mapear a mano)
[ ] Se muestran glifos de botones (no solo teclas de teclado)
[ ] Aparece el teclado en pantalla cuando se necesita texto
LEGIBILIDAD
[ ] El texto es legible a la distancia de uso de la Deck (>= ~9px equivalentes)
[ ] La UI no se recorta a 1280x800
COMPATIBILIDAD
[ ] Funciona bajo Proton sin dependencias externas ni instaladores extra
[ ] No requiere permisos de administrador ni pasos manuales
RENDIMIENTO
[ ] Framerate estable en el hardware de la Deck
[ ] Consumo/temperatura razonables (no full 3D innecesario)
func _physics_process(_delta: float) -> void:
var dir := Input.get_axis("mover_izq", "mover_der") # tecla o stick
velocity.x = dir * VELOCIDAD
if Input.is_action_just_pressed("saltar"): # espacio o botón sur
_saltar()
move_and_slide()
Theme con una fuente de tamaño cómodo y escálalo con la resolución:extends Label
# Garantiza un tamaño mínimo legible en la pantalla de la Deck.
const TAMANO_MINIMO := 22
func _ready() -> void:
var actual: int = get_theme_font_size("font_size")
if actual < TAMANO_MINIMO:
add_theme_font_size_override("font_size", TAMANO_MINIMO)
Glifos de la clase 211), y detecta el mando con:func _ready() -> void:
if not Input.get_connected_joypads().is_empty():
var nombre := Input.get_joy_name(Input.get_connected_joypads()[0])
print("Mando detectado: ", nombre) # p. ej. en la Deck aparece su gamepad
func _ready() -> void:
if Engine.has_singleton("Steam"):
Steam.steamInit()
# Ejemplo de logro y guardado en nube tras iniciar Steamworks.
# Steam.setAchievement("PRIMER_NIVEL")
# Steam.storeStats()
Theme global con tamaños de fuente escalables y aplícalo a toda la UI.Elabora la checklist de verificación de Steam Deck (entrada, legibilidad, compatibilidad, rendimiento) y ajusta tu juego para acercarlo al sello: configura controles por defecto de gamepad de modo que sea jugable sin teclado, y garantiza un tamaño de texto legible a 1280×800 sin recortes de UI. Auto-evalúa el juego marcando cada criterio.
Criterio de aceptación: a resolución 1280×800, el juego se completa usando solo el gamepad, todo el texto es legible y ninguna pantalla de UI queda recortada; la checklist entregada refleja el estado real de cada criterio.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| No se puede jugar sin teclado | Faltan controles por defecto de gamepad. Asigna botones a todas las acciones. |
| El texto es ilegible en la Deck | Fuentes demasiado pequeñas. Usa un Theme con tamaño mínimo y escalado. |
| La UI se recorta a 1280×800 | Layout fijo en píxeles. Usa contenedores, anclas y Stretch Mode adecuado. |
| Solo se ven teclas de teclado en los tips | No detectas el mando ni muestras glifos. Usa get_joy_name() y un set de iconos. |
| Steam no inicializa | Falta GodotSteam o el steam_appid.txt/registro de app. Revisa la instalación. |
❓ ¿Necesito una Steam Deck física para verificar? Ayuda mucho, pero gran parte de los criterios (control por defecto, texto legible, teclado+gamepad, resolución) se validan en PC a 1280×800.
❓ ¿Godot corre nativo en la Deck? Corre bien bajo Proton con tu build de Windows; también puedes exportar un build Linux nativo. Ambos suelen funcionar.
❓ ¿Qué es GodotSteam? Una GDExtension que integra la Steamworks API en Godot 4: logros, Steam Cloud, overlay y datos del usuario. No viene con el motor.
❓ ¿Qué diferencia hay entre "Verified" y "Playable"? "Verified" cumple todos los criterios; "Playable" funciona pero con alguna fricción (texto pequeño, requiere tocar el touchpad, etc.).
Clase 211 - Input de consola, logros y guardado en nube
Clase 213 - Capstone Parte 11: exportar y pulir para una plataforma