Dash me to the moon

Los creadores de Celeste publican parte de su código como «recurso para el aprendizaje»

Noel Berry y Matt Thorson han publicado en GitHub el código de la clase Player de Celeste, el extraordinario juego de plataformas que publicaron en enero de este año. Se puede consultar aquí.

Este código, publicado como «recurso para el aprendizaje y por interés general», es el que está detrás de la protagonista del juego, de su movimiento y otras peculiaridades. Es precisamente el movimiento uno de los puntos más fuertes de Celeste, que con un salto, un dash y poquito más da forma a uno de los juegos más rotundos y gustosos de los últimos años; de ahí el interés en examinar este código.

Es un vistazo detrás de las cámaras muy interesante para cualquiera con interés en el desarrollo de juegos y algún conocimiento de programación. Siguiendo el ejemplo, por cierto, Fernando Ramallo ha publicado «equivalente a la clase Player de Panoramical»: es «el código que se encarga de cada cambio en cada objeto y es el componente central de todo».

Volviendo a Celeste, a mí me parece una auténtica obra maestra de la que, por citarme a mí mismo, lo mejor que se puede decir (porque no se puede decir de casi ningún juego) es que «todo está en su sitio»: 

Cada nivel, compuesto por una colección de pantallas conectadas entre sí, tiene ritmo y crea una narración de manera orgánica; hay zonas más lineales, como las introducciones o las persecuciones, y otras que animan a explorar cada rincón siguiendo el objetivo principal pero también en busca de secretos, a menudo llevando al límite las habilidades de la protagonista. Hay una musicalidad especial en esta manera de diseñar niveles, y por eso encajan tan bien las caras B y C de cada nivel, básicamente versiones (mucho) más difíciles que exprimen al máximo las mecánicas alrededor de las que giran los originales.

Sobre el diseño de los niveles, por cierto, hay una charla de Noel Berry en la GDC del año pasado que podéis ver aquí abajo. ¡Cuánto conocimiento de golpe, la Virgen!


  1. truenoacero

    Cuanto conocimiento, y que bueno para los que queremos meternos en este mundo.

  2. Joker73R

    Las mejores personas y el mejor juego, honesto, humilde y enorme. Que compartan parte de su trabajo les honra, un lujo de profesores y de lección para quien utilice esos recursos, desde luego.

  3. ese_broncas

    Ojala hubiera más propuestas así, de liberar código de juegos para que haya gente que pueda echarle un vistazo y aprender y avanzar 🙂

  4. dani

    Es un código muy sencillito. Se puede aprender más de diseño de mecánicas con ese código que de programación. Es interesante, gracias!

  5. kamelot666

    @dani dijo:
    Es un código muy sencillito. Se puede aprender más de diseño de mecánicas con ese código que de programación. Es interesante, gracias!

    Este tipo de iniciativas es para ver como, no para aprender como. Con lo pulido que tiene el control el juego hay que echarle un ojo si o si.

  6. Reisor

    En su tumbl también dejaron las herramientas que usaron para hacerlo y creo que sería interesante en la noticia @chiconuclear.
    http://celestegame.tumblr.com/tools

  7. KZhar

    Pues está genial.
    Me lo estudiaré con la profundidad que me permitan mis conocimientos de aficionado.
    Me encanta profundizar un poco en el desarrollo de estas pequeñas joyas independientes diseñadas con tanto cuidado y ver las herramientas que utilizan.
    Siempre da otra perspectiva de los videojuegos entender un poco como funcionan y se aprecia mucho mas el trabajo en su diseño y programación además de los valores artísticos que saltan a la vista (y al oído).
    Desde luego poder ver el código de la clase Player de este juegazo, con lo bien medido y trabajado que está su control y comportamiento, es todo un lujo.

  8. Ausonio

    El juego puede estar muy bien y el código ser una puta mierda (una opción que veo que por aquí ni se ha planteado).

    Me preguntó por qué este juego pide 2GB de RAM

  9. Yurinka

    @ausonio dijo:
    El juego puede estar muy bien y el código ser una puta mierda (una opción que veo que por aquí ni se ha planteado).

    Me preguntó por qué este juego pide 2GB de RAM

    Por lo que he visto en un vistazo rápido no está documentado ni tampoco parece que se hayan preocupado mucho en optimizar mucho, algo normal en un pequeño juego de pixel art porque en las plataformas actuales tampoco hace falta. De todas formas, en esta clase del código viene a estar la lógica del personaje protagonista.

    La carga de los gráficos del juego en general (que es lo que típicamente se suele llevar la chicha) y su gestión en memoria en particular no debería estar en este trozo de código. Supongo que esa cifra de 2GB la habrán puesto un poco al azar generosamente, para asegurarse de que no se quedan cortos ya que mucha gente ejecuta los juegos con Windows y bastantes otras cosas que deben chupar lo suyo.

    Seguramente, debe ser un equipo pequeño con poco presupuesto por lo que no deben tener muchos ordenas donde haber probado el juego para saber exactamente los requerimientos mínimos, por lo que apostaría a que los han puesto a ojo.

    Pregúntales por Twitter o envíales un mail, seguro que te lo dicen.

  10. Ausonio

    @yurinka dijo:

    @ausonio dijo:
    El juego puede estar muy bien y el código ser una puta mierda (una opción que veo que por aquí ni se ha planteado).

    Me preguntó por qué este juego pide 2GB de RAM

    Por lo que he visto en un vistazo rápido no está documentado ni tampoco parece que se hayan preocupado mucho en optimizar mucho, algo normal en un pequeño juego de pixel art porque en las plataformas actuales tampoco hace falta. De todas formas, en esta clase del código viene a estar la lógica del personaje protagonista.

    La carga de los gráficos del juego en general (que es lo que típicamente se suele llevar la chica) y su gestión en memoria en particular no debería estar en este trozo de código. Supongo que esa cifra de 2GB la habrán puesto un poco al azar, para asegurarse de que no se quedan cortos ya que mucha gente ejecuta los juegos con Windows y bastantes otras cosas que deben chupar lo suyo.

    Seguramente, debe ser un equipo pequeño con poco presupuesto, seguramente sin muchos ordenas donde haber probado el juego para saber exactamente los requerimientos mínimos, por lo que apostaría a que los han puesto a ojo.

    Pregúntales por Twitter o envíales un mail, seguro que te lo dicen.

    Imagino que tienen sus motivos, lo que me hace coña es que aquí la gente se lo toma como DIOSMIO, SON ÁNGELES Y BEST CODE EVER sin tener ni idea solo porque el juego les ha gustado.

  11. CapitanAndor

    No son grandes, son enormes!! Gran gesto que denota humildad y generosidad por los cuatro costados.

  12. zazito

    Las mejores personas.

  13. berberecho

    Pues una clase de 5471 líneas no dice nada bueno de la calidad del código…

    Por cierto, veo que usan XNA, que juraría que estaba bastante muerto. Me llama la atención porque en teoría es sólo para plataformas Microsoft. La versión de Switch y PS4 por tanto no ha tenido que ser un port sencillo.

  14. KZhar

    @berberecho dijo:
    Pues una clase de 5471 líneas no dice nada bueno de la calidad del código…

    Por cierto, veo que usan XNA, que juraría que estaba bastante muerto. Me llama la atención porque en teoría es sólo para plataformas Microsoft. La versión de Switch y PS4 por tanto no ha tenido que ser un port sencillo.

    Parece que usan Monogame que es de código abierto e implementa XNA dándole continuidad y sigue vivo gracias a la comunidad. Además, creo que se basa en mono y no en .NET por lo que es multiplataforma.
    Parece un framework bastante interesante.

  15. DarthRoman

    Pues les honra mucho haberlo publicado, pero también os digo que ese código es el ejemplo de como NO programar. El diseño de ese código es horrible en todos los aspectos, aunque ya me lo imaginaba cuando he leído que era una clase de 5200 líneas…

  16. Morax

    No he probado el juego pero el código es de risa…

  17. berberecho

    @kzhar
    Interesante, no lo conocía y tiene soporte para casi todas las plataformas. Parece una buena alernativa a Unity, al menos para juegos 2D.

  18. Rocks

    Muy buena iniciaitiva, fuera de que el código sea mejor o peor siempre ayuda a ver cómo cada proyecto se busca la vida.

    En cuestiones de aprendizaje y calidad de código el YouTube de Jonathan Blow es súper recomendable, está subiendo infinidad de vídeos sobre su propio compilador, su propio motor de juegos y el desarrollo de Sokoban y pocos desarrolladores están tan obsesionados con la calidad de código y optimización como Blow 🙂