Las clases explican cómo se hace; estos laboratorios son proyectos reales que se abren y se juegan. Cada uno viene en dos versiones:
inicio/ — proyecto de partida: assets, escenas e infraestructura listas, con los scripts de gameplay marcados con TODO. Es donde trabajas tú.solucion/ — implementación de referencia completa y jugable. Compárala cuando te atasques (o cuando termines).Ambas versiones se verifican en CI con Godot headless en cada push: se importan, compilan y arrancan. Si el badge está verde, el código de estos labs funciona de verdad.
| Lab | Parte | Qué construyes |
|---|---|---|
| Plataformas 2D | Parte 1 (clases 026–045) | Un plataformas completo: controlador con game feel, monedas, enemigos, HUD, audio y récord persistente. |
| 3D en tercera persona | Parte 2 (clases 046–067) | Un nivel 3D explorable: control relativo a la cámara, cámara orbital con SpringArm3D, cristales y portal de salida. |
| Shaders | Parte 4 (clases 086–107) | Una galería de siete shaders con sus uniforms editables en vivo: UV, ondas, disolución, contorno, agua, cel shading y post-procesado CRT. |
| Multijugador | Parte 7 (clases 138–155) | Una arena en red con servidor autoritativo: predicción, reconciliación, interpolación de remotos y validación anti-cheat, sobre ENet puro. |
| IA de enemigos | Parte 5 (clases 108–125) | Un enemigo con behavior tree, cono de visión, memoria y pathfinding A*: patrulla, te ve, te persigue, te pierde y va a buscarte. |
| UI accesible | Parte 10 (clases 188–199) | Menú, HUD y opciones que cambian de idioma en marcha, aguantan el texto al 200 % y se navegan enteros con el teclado. |
Porque un laboratorio solo tiene sentido cuando la parte termina en algo que se ejecuta, y no todas terminan en eso — ni deberían.
project.godot no enseñaría nada — su reto verificable está en la propia clase, y ahí se queda.Y hay un tercer caso, más sutil: partes cuyo reto no se puede verificar aunque el código corra. El capstone de audio (Parte 6) pide un "ducking audible", que los sonidos "suenen distintos" y que una transición no tenga "corte perceptible": cuatro de sus ocho criterios son juicios de oído, el driver headless no mezcla y AudioStreamRandomizer no dice qué eligió. Un lab de audio en CI verificaría que existe un bus llamado "Musica" — la contabilidad del sistema, no el sistema. La CI es sorda, y prometer un badge verde sobre audio adaptativo sería justo lo que aquí no se hace. Lo mismo con el capstone de física (Parte 3), cuyo criterio incluye un playtest humano.
Las que faltan y sí tendrían sentido —física (Parte 3, con integradores propios en vez del solver), audio (Parte 6, la parte estructural) y tooling (Parte 15)— están en el roadmap.
Conviene ser exacto, porque es la diferencia entre "está escrito" y "funciona":
Dicho de otra forma: el badge cubre los labs, no las 292 clases. Preferimos decirlo a que te lo encuentres.
project.godot del lab (por ejemplo labs/plataformas-2d/inicio/project.godot).Nota sobre Git LFS. Los assets binarios (
.png,.wav) se versionan con Git LFS — justamente lo que enseña la clase 015. Si al clonar ves archivos de texto raros en lugar de imágenes, instala LFS y ejecutagit lfs pull.
Todos los assets (sprites, texturas y sonidos) son obra original generada por código con scripts/generar_assets.py y están en dominio público (CC0): puedes usarlos para lo que quieras, sin atribución y sin arrastrar licencias de terceros.
Cada lab declara ahí qué assets necesita, y hay bastante menos de lo que parece: el lab 3D no trae ni una malla (todo son primitivas de Godot montadas por código) y el de shaders solo necesita dos texturas.
¿Quieres cambiarlos? Edita el generador y vuelve a ejecutarlo:
python -m pip install pillow
python scripts/generar_assets.py # todos los labs
python scripts/generar_assets.py shaders # solo uno
La CI comprueba que el generador es determinista (que regenerar produce exactamente los assets versionados, en los dos proyectos de cada lab).