Viaje al centro de Godot
Tags: spanish, godot, gamedev, devjournal
Published: 2023-06-05 15:33:26

Antes de empezar, debo aclarar que el nombre del título hace referencia al libro [Viaje al centro de la Tierra](https://es.wikipedia.org/wiki/Viaje_al_centro_de_la_Tierra) de Julio Verne.

## Punto de inflexión
El mes pasado estuve trabajando a fondo en desarollar mis habilidades en React, Tauri, Rust, entre otros. El clicker de pre-proyecto [salió bien](https://dev.to/maxwellnewage/hice-un-clon-de-cookie-clicker-en-react-229f), pero cuando me senté a armar el proyecto real (CraftClicker) empecé a notar ciertas carencias.

La idea de progresión en mi clicker iba de la mano de construir un pueblo, consecuencia de vender recursos y crafteos y comprar edificios.

En el momento en que me puse a trabajar en el proyecto, me di cuenta de la complejidad de capas que necesitaba: generación de terrenos, tilesets, drag and drop, entre otros tantas características que me llevarían a la locura si intentaba trabajar sobre un sistema de etiquetas divs y componentes en React.

Este fue el resultado al que llegué antes de desistir de la tecnología:

![React Game](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/reytxbja8xyan7juhh0p.png)

La barra de abajo permitiría comprar edificios nuevos, mientras que arriba tendría la ciudad (o pueblo) que podría editar a mi antojo.

Luego de meditar un buen tiempo, me di cuenta que iba a luchar más por crear componentes que no fueron pensados para juegos que desarrollar el proyecto en sí. Algunos pensarán: muchos desarrolladores crearon herramientas de cero en lenguajes que no estaban pensados para eso, y les fue bien. Lo cual es cierto, pero no todos estamos dispuestos a dedicar un volumen tan alto de tiempo y energía a una tarea de esa magnitud.

Ya con la decisión tomada, ahora debía trazar el nuevo camino: no volvería a Unity porque nunca me gustó su sistema de componentes y la facilidad con que un proyecto puede terminar volviéndose muy dificil de mantener por las libertades de poner scripts en cualquier lado. Así que la ruta final sería Godot.

## Oh dios mío, no de nuevo
![Not Again meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ir2r848vv4kg6cmvtza.png)

No es la primera vez que me lanzo a los brazos de [Godot Engine](https://godotengine.org/) buscando refugio en una lluvia constante de motores que aparecen cada año. La variedad es buena, pero puede ser un infierno si queremos probar todo. Lo digo, especialmente, por experiencia propia.

[Marian](https://twitch.tv/marianorgd), uno de los dev en Godot más experimentado que conozco (al momento de la salida de esta publicación está trabajando en un emulador de NES) fue víctima de soportarme noches enteras armando prototipos de juegos que nunca vieron la luz. Recomiendo seguirlo porque nunca conocí una persona con más paciencia para enseñar y ayudar.

Por eso cuando le expliqué la semana pasada que volvía al ruedo, estoy seguro que por dentro pensó exactamente esto:

![oh shit here we go again](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3kh1f4o6cz6g4mfzepwa.png)

En este momento muchos se estarán preguntando: ¿pero por qué lo dejaste antes? La respuesta es confusa, incluso para mí: nunca me llevé bien con el apartado artístico y me desmotivaba desarrollar algo mediocre. Conozco mucha gente que le pasa, incluso tengo un amigo que contrata diseñadores que le hacen todos los assets antes de empezar incluso el prototipo, porque cuando desarrolla se motiva al ver que su forma estética sigue los lineamientos que tenía en su idea original.

Por otro lado, en el pasado no me convencía GDScript (lenguaje de programación basado en Python, oficial del motor) porque justamente no sabía nada de Python. También tenía cierto rechazo a la física y las matemáticas, lo cual fue cambiando cuando me metí con [análisis de datos](https://dev.to/maxwellnewage/python-y-datos-un-viaje-de-ida-437).

## ¿Pero qué cambió ahora?
Bueno, en principio hay un motivante financiero: compré la licencia de 100usd en Steam ($20.000ars en su momento), lo cual como argentino me duele bastante. Esto implica que si no publico un juego, habré perdido dinero.

Luego está el legendario objetivo incumplido: desde que empecé a escribir mis primeras líneas de código, quiero desarrollar juegos. Las vueltas de la vida me llevaron a estudiar y trabajar en otros ámbitos, pero como expliqué en otro [artículo](https://dev.to/maxwellnewage/creo-que-me-converti-en-un-desarrollador-en-react-y-typescript-2fkf), en cada tecnología nueva que asimilo a mi vida, intento crear uno o más videojuegos. Pero siempre tuve cierto miedo a sacar algo real: los bugs, las mejoras constantes, los consumidores que a la mínima te bajan la calificación si algo no les gusta, el marketing y la publicidad, el tiempo invertido y muchos otros factores de peso, eran suficientes razones (o excusas) para evitar publicar algo.

Y después falleció Lupe, mi chihuaha de 2 años de edad. Y fue la tragedia de lo cambió todo.

## La vida es una función rand() con seeds aleatorias
Lupe era la perra más saludable que pueden imaginar. Se dedicaba a romper prejuicios como que los chihuahas no podían subir escaleras; comía de todo y no se enfermaba; tenía un carácter amigable y nunca destrozó nada.

Pero un día, tiramos una palmera de esas enanas que vienen de Japón, y cayeron unas semillas que nunca se podían acceder, porque pertenecían a la parte de arriba, donde crecían sus nuevas hojas. Resulta que su ingestión provocaba necrosis y fallos digestivos. Y Lupe, como siempre, se llevaba cualquier cosa que pareciera un juguete a sus refugios repartidos por toda la casa.

Y, como quien tira un dado, ese evento tan fortuito, tan aleatorio, se llevó a nuestra cachorra de 2 años de edad (los chihuahas tiene una esperanza de vida de 14 años). Un martes estaba jugando con ella, y al siguiente estaba usando una pala, con una caja al lado.

En una semana, se había perdido la luz de la casa. En algún lugar, se ejecutó una función rand() y nos tocó perderlo todo.

Ahí fue cuando tuve una especie de revelación: me estoy preocupando por cosas que no puedo controlar, además de que realmente no tengo nada que perder. Cualquier asunto, incluso el trabajo, pasó a segundo lugar. El grado de importancia y prioridad de todo lo que no estaba relacionado con ese momento que estaba pasando, decrementó completamente. Porque si el universo funciona por eventos aleatorios, no existe algo como una balanza divina. No hay un sistema de castigos y recompensas; y probablemente ni siquiera exista un sistema como tal. Intentamos dar sentido a cosas que no lo tienen, y creamos nuestro propio sistema con sus reglas. Mi objetivo final fue destruir toda la estructura, y empezar de nuevo.

## Entre la planificación y la locura
Asumir que la mayoría de mis preocupaciones carecían de valor, me quitó el miedo a emprender proyectos. Quizá lance el juego y no tenga éxito; pero no importaba porque lo había lanzado. Mis logros, en realidad, se establecían bajo mi criterio: [publicar el curso de Python con Django](https://www.udemy.com/course/desarrollo-de-sitios-web-con-python-3-con-django/?referralCode=A491B0944C634BFAA48C) fue un logro en si mismo, aunque la gente no lo compre tanto. Disfruté el proceso de hacerlo sin pensar tanto en el futuro del mismo.

Por lo tanto, publicar un videojuego pasó a ser un objetivo obligatorio: otra forma de demostrarme a mi mismo que no importaban los resultados, sino el hecho de lanzar este, y quizá otros juegos más. Cerrar el ciclo del "quiero y no puedo".

Mi plan inicial mutó constantemente, a tal punto de que ya lo estoy considerando como una parte más del proceso: ahora el clicker pasó a ser un RPG de un hombre que debe ganar dinero desde cero (a tal punto de dormir en los bancos de la plaza) hasta volverse un magnate que tiene varias empresas a su cargo. Planifico como un loco porque un cambio puede significar la reconstrucción casi completa de la estructura. ¿Por qué? porque puedo, y si mañana perezco de una forma extremadamente aleatoria (algo como atragantarme con un te de burbujas en el Barrio Chino de Belgrano, CABA), todo valió la pena porque hice lo que quería desde el principio, sin restricciones.

## Etapa de aprendizaje
Creo haber entrado en esta zona más de tres o cuatro veces en lo que va del año, pero prometo que esta vez será definitivo. Para aprender Godot (ya en su versión 4), empecé con este youtuber que descubrí y no puedo dejar de ver en cada video que lanza:
{% embed https://www.youtube.com/watch?v=L3pFEk1HPCQ&list=PL5PTqiCIVoiVyA2qed1NE4uKejXEWM60e&index=1&pp=iAQB %}

Me gusta como enseña, y la verdad tiene una calidad altísima que envidio sanamente (o no) en cada uno de sus videos. 

Por otro lado, decidí armar el mismo clon de Cookie Clicker que hice en React, pero en Godot. Les dejo el [repositorio](https://github.com/maxwellnewage/godot-cookie-clicker) que armé y sigo manteniendo, pero seguramente en el próximo artículo explore más a fondo cada detalle del armado. Nuevamente, gracias Marian por despejarme las dudas de los nodos correctos para crearlo.

En paralelo, estoy siguiendo otro curso para armar un RPG tipo Zelda:
{% embed https://www.youtube.com/watch?v=0mUoRdYe0s4&list=PLMQtM2GgbPEVuTgD4Ln17ombTg6EahSLr&index=1&pp=iAQB %}

Este me sirve para complementar características fundamentales de Godot tales como Tileset, Tilemaps, animaciones, sprites, UI, controles, entre otros. Por supuesto, a medida que voy realizando el tutorial, también estoy publicando los cambios en un [repositorio de GitHub](https://github.com/maxwellnewage/godot-arpg-tutorial). No estoy copiando todo como en el curso, sino que me voy tomando atribuciones en ciertas partes por otros videos o documentación complementarios.

Otra herramienta interesante [es esta web](https://gdquest.github.io/learn-gdscript/), la cual te enseña visualmente GDScript. Todavía no me metí de lleno, pero planeo hacerlo esta semana. Si no tienen nociones en programación, es un punto de entrada excelente antes de meterse con el engine de Godot.

## Conclusiones
Espero que sepan disculpar mis cambios constantes de tecnologías, pero tengan en cuenta que es probable que les pase a ustedes también, si es que no lo están sufriendo ahora mismo. 

Una idea por si misma no tiene valor alguno, sino que su ejecución y la conversión a algo "tangible" es lo que realmente le da un significado.

Mi idea inicial del juego cambia a medida que voy aprendiendo nuevas cosas de cada tecnología, pero va tomando cierta forma final. Este proceso de iteración es natural, y si ustedes están pasando por algo similar, les aconsejo que no se frustren y continúen iterando hasta llegar al proceso final.

Hoy Godot es la solución a mi proyecto, y planeo sacarle mucho jugo en los siguientes meses. En los próximos artículos hablaremos mucho de este motor que esta conquistando devs que antes no se movían de Unity.

¡Nos vemos en el próximo artículo!