Kabosu - Creando cosas

Logo de la página. Gato esférico con colores verdoso.

Paella Ascent (parte 1)

Publicado: 2025-06-15 (actualizado 2025-06-16)

Etiquetas: Godot, Proyectos, Reto de la Paella


Buenos días, tardes o noches:

Actualizado el 2025-06-16 para cambiar una imágen.

Hoy voy a contar un pequeño entretenimiento que he tenido estas últimas semanas: portar un juego de código abierto de Godot 3 a 4 y de paso meterle una paella. Voy a dividirlo en dos artículos, este primero habla de la actualización a la última versión de Godot y el segundo será el Reto de la Paella en sí mismo.

Archivo de código GDScript

Desde hace un par de meses he ido recopilando poco a poco juegos de código abierto escritos en Godot. Mi intención era usarlos como ejemplo cuando tuviera dudas y así no tener que estar buscando por internet. Empecé descargando los juegos etiquetados como GDScript en Open Source Game Clones y luego seguí con Open Source Games List (OSGL). La mayoría de juegos están abandonados y a medio hacer pero hay algunos como Tanks of Freedom que están muy bien. Otro problema era que la mayoría de juegos usaban versiones antiguas de Godot y yo estoy a la última con Godot 4.4. En concreto Tanks of Freedom usa la versión 2. Intenté convertir algunos proyectos a la última versión con el conversor automático pero no funcionó nada bien.

Mi siguiente fuente de juegos fue Itch.io con las etiquetas "open source" y "Godot". Aquí sí que pude encontrar juegos algo más recientes.

Pigeon Ascent

El primer juego que me salió en la lista fue Pigeon Ascent. Me llamó la atención porque tenía cientos de comentarios, algo raro en una tienda minoritaria como Itch.io, y además la gran mayoría eran muy positivos. En la página oficial supuestamente se puede jugar a la versión 1.9.0.2 pero a mí no me funcionaba en Firefox. Esa versión no es de código abierto pero la 1.5.5 sí así que me bajé el código para poder probarlo. Se desarrolló con Godot 3 pero yo lo intenté abrir con Godot 4.4 que es lo que tenía en ese momento en el portátil. La conversión automática intentó migrar el código pero al intentar ejecutarlo daba errores. En particular con la creación de Tweens que cambió bastante de Godot 3 a 4.

Al final me bajé la versión 3.5.3 de Godot y por fin pude probar Pigeon Ascent. Es un juego que empieza siendo de batallas de palomas pero luego evolucionan a monstruos raros. El combate es automático, lo único que hay que hacer es subirle los atributos y darle de comer.

Captura de pantalla mostrando el combate

Portando el juego a Godot 4

Mis experiencias portando mis propios juegos de Godot 3 a 4 habían sido buenas. Pensaba que para cosas 2D la conversión sería casi perfecta pero me equivocaba. En particular vi cuenta de que los Tweens no se convierten. En Godot 3 eran nodos que se añadían al árbol y Godot 4 pasaron a ser objetos.

Me puse a convertir algunos Tweens a mano pero enseguida me di cuenta de que el repositorio del juego tenían montones de cosas que en realidad no se usaban. Por ejemplo, la escena en la que se desarrolla la pelea de palomas tenía 3 versiones distintas "battleScene.tscn", "battleSceneNew.tscn" y "battleSceneNewBeforeButcheringNodes.tscn".

Decidí cambiar de estrategia y arreglar los errores que fueran saliendo. Ejecutaba el juego, cuando saltaba un error lo arreglaba y volvía a ejecutar. Empecé con la escena inicial "intro.tscn" que muestra el nombre del juego y te permite elegir un nombre para la paloma. Luego pasé a "root.tscn" que es la escena en la que asignas puntos de entrenamiento a tu paloma, le das alimento y te preparas la siguiente pelea. Es la escena más compleja del juego y se subdivide en 3: "vboxRootL.tscn", "vboxRootR.tscn" y "vboxC.tscn" que definen respectivamente las columnas izquierda, derecha y central de esa pantalla.

Captura de pantalla mostrando la pantalla de cuidados

Me di cuenta de que este juego usa muchos tweens para crear efectos. Un tween para hacer los botones ligeramente más grandes al poner el cursor encima, otro tween para volverlos al tamaño normal al quitar el ratón, tweens para mover los paneles al iniciar la escena, tweens, tweens, por todas partes. Y, como ya he dicho, la conversión automática no migró nada de eso. Para cada uno me tocó analizar el código para ver qué hacía exactamente y luego actualizar la sintaxis. Lo fui haciendo poco a poco pero al final los migré todos.

A continuación un ejemplo con el código de un tween para Godot 3 y su conversión a la versión 4:

# Godot 3
var t:=Tween.new()
add_child(t)
var _v1=t.interpolate_property(self.nCurrentMusic,'volume_db',self.nCurrentMusic.volume_db,-100,4.0,Tween.TRANS_QUINT,Tween.EASE_IN)
var _v2=t.start()
await t.tween_all_completed

# Godot 4
var tween = create_tween()
tween.tween_property(self.nCurrentMusic, "volume_db", -100.0, 4.0)\
        .set_trans(Tween.TRANS_QUINT)\
        .set_ease(Tween.EASE_IN)
await tween.finished

Con las dos pantallas iniciales ya funcionando fui a encargarme de los gráficos. En mi port se veían borrosos los sprites, las letras eran muy pequeñas, los fondos estaban todos mal, entre otros problemas. Todo cosas que la autoconversión no había migrado bien. Abriendo el juego original en Godot 3 al lado del mío fui poco a poco adaptando los gráficos para que se vieran exactamente igual.

Contento con la mejora gráfica, por fin me animé a terminar la última escena: "battleSceneNew.tscn". Tenía montones de tweens que dependían unos de otros. Conseguí que funcionara más o menos aunque la paloma enemiga se va deformando poco a poco durante el combate, se hace grande y se inclina. Creo que algunos de los tweens no lo ajusté bien del todo.

Aparte de ajustar tweens, faltan efectos de partículas y algunas partes de la interfaz están movidas pero ya se puede jugar bien.

Cosas pendientes

Mi yo perfeccionista me pide seguir tocando cosas pero mi yo errático quiere ya pasar al siguiente proyecto.

Como ya he comentado, hay muchas cosas en el proyectos que no se usan realmente como escenas o trozos de código. También hay muchísimo código que si que se usa pero que se podría centralizar en un solo en vez de tenerlo copiado en decenas de sitios. Os miro a vosotros tweens. Mucha de la configuración de la interfaz se podría haber hecho con temas en vez de asignar a mano los tamaños y fuentes para cada elemento. También se podría añadir soporte para localización que ahora mismo los textos están puestos a pelo en el código. Quiero aclarar que algunas de estas cosas no parecen ser problemas de las personas que hicieron el juego, Escada Games, sino resultado de la conversión automática.


Artículo siguiente: Paella Ascent (parte 2)
Artículo anterior: Nintendo Switch 2