Sobre mí

¡Hola! Soy Andrés Matías González Ros, también conocido como "MaKu". Llevo toda la vida jugando videojuegos (a los 3 años recibí mi primera Nintendo DS). Siempre estuve un poco perdido porque no sabía qué quería hacer para el futuro, hasta que, en 3º de la ESO, nos enseñaron a programar cosas básicas en C++ y me gustó tanto que desde ese momento quería convertirme en programador. Si quería ser programador y me gustan los videojuegos, ¿por qué no combinar las dos cosas?

Foto de mi cara
Yo preparado para ir a ESNE el día del traje.

Mi experiencia en el mundo de los videojuegos hasta ahora ha sido muy variada. He vivido muchas experiencias (trabajos en equipo, conflictos internos, falta de organización, estrés, ...) No me he limitado a aprender programación, ya que en la universidad en la que estudio nos enseñan todo el proceso de creación de videojuegos y todas las herramientas que nos podrán servir para el futuro, como a crear guiones y escenificarlos, dibujar y editar imágenes en Adobe Photoshop, diseñar logotipos en Adobe Illustrator, entre otras cosas.


En cuanto a experiencia de mi sector y mi conexión con el mundo real, lamentablemente no he asistido a ninguna Game Jam todavía ya que me he estado centrando en mis estudios. Soy buen programador de C++ y C# y los motores que he aprendido a usar estos años han sido Construct 3, Unity y Unreal Engine 5, el cual estoy en proceso de aprendizaje y programamos con BluePrints. También soy capaz de crear el GDD (Game Design Document), el Ten Pager, el Concept, el Pitch, el Proposal y hacer tanto la página de itch.io del juego como encuestas de satisfacción durante el beta testing, y responder adecuadamente ante semejante feedback. Por último, me gusta diseñar logotipos y editar imágenes en Adobe Photoshop y Adobe Illustrator. A continuación os muestro unos ejemplos de los logos que he hecho yo.


Maku negativo
Mi marca personal.
Alien Parapocalypse
Para un juego que he desarrollado en equipo (disponible en itch.io).
Meireki No Hikeshi
Para el juego anual del segundo curso (disponible en itch.io).
Lost Paradox
Empresa ficticia con mi grupo de trabajo del tercer curso (Lost Paradox).
Mario Kujo pfp
Mi otro personaje original.
Batman Superman Logo
Mi versión del logo de Batman vs Superman.
Logo Esports ESNE
Un logo para un equipo de Esports en el que participé.

Proyectos en los que he participado

Joaquín

Logo Joaquin

Joaquín es el primer juego que hice. Lo hice con unos compañeros de clase en Construct 3 y fue con el que nos enseñaron a hacer el GDD y el Ten Pager, además de aprender a trabajar en equipo y distribuirnos las tareas equitativamente. No tengo muy buenos recuerdos de este juego, ya que no congeniábamos muy bien algunos miembros del equipo entre nosotros, por no mencionar que hay algunos que no cumplieron sus responsabilidades hasta el día previo a la entrega final.


Como mencioné antes, yo hice la función de programador, así que a continuación pondré varias capturas de pantalla de trozos de código que escribí yo:

Contador de plumas y evento de meta
En este fragmento de código, aumenta en 1 el contador de plumas cada vez que colecciona una y, si llega a la meta, transporta al jugador al siguiente nivel. (Reinicia la escena porque, si no, en el siguiente nivel el jugador aparece en un punto más avanzado de lo normal).
Ataques del jugador
Si el jugador le lanza una bola de fuego o le salta encima a un enemigo, recoge todos los enemigos de la escena y elige el que ha sido dañado por el jugador y le resta 1 de vida. Si tiene 0 de vida o menos, se destruye.
Código de enemigos
Si el enemigo colisiona con el jugador, le hace daño.
Cuando la flecha del enemigo sale de la pantalla, desaparece.
Si están en pantalla, los enemigos que se mueven con el modificador de plataforma se activan.
Función de knockback cuando el personaje se hace daño con un enemigo.
Jefe
Gestiona las interacciones con el jefe. Cuando te acercas por primera vez, aparece su barra de vida y su nombre, empiezan a aparecer chiles que te puedes comer para lanzar bolas de fuego, él te lanza bolas que tienes que esquivar y tú puedes o lanzarle bolas de fuego si has comido chile o saltar en su cabeza. Cuando se muere, te lleva a los créditos.

Theo y la Puerta de las Sombras

Logo Theo

Con este proyecto aprendimos a realizar el concept (un documento en el que escribimos más o menos la idea general que tenemos del juego), el pitch (una presentación del concept con más ideas), el proposal (un documento ya más específico con fecha de salida, competencia del mercado, modelo de negocio,...) El trabajo en equipo fue mejor, pero no el más óptimo, ya que había poca comunicación del equipo (cada uno hace su parte y luego lo juntamos todo). Hay pocas cosas que destacar del código, ya que me repartí el trabajo con otros compañeros y lo poco que programé tampoco es que sea nada del otro mundo. Pero igualmente, voy a compartir mi código:

Código WallJump
Revisa si está tocando la pared. Si la está tocando pero no pulsa el botón de salto, se desliza por la pared. Si se está deslizando por la pared o simplemente está tocando la pared y pulsa la tecla W (para saltar), salta de la pared.
Código WallJump
Se gira al hacer el salto.
Movimiento jugador
Si pulsa la tecla para ir hacia la izquierda, va hacia la izquierda orientado en esa dirección y ejecuta la animación de movimiento. Si pulsa la tecla para moverse hacia la derecha, pasa lo mismo pero mirando hacia la derecha, si no se mueve hace su animación estática. Si le da a la W, salta. Si está mirando hacia la derecha y pulsa la tecla de ir hacia la izquierda, se gira y viceversa.
Movimiento jugador
IsGrounded revisa si está en el suelo o no.
Jump ejecuta la animación de salto, le quita todas las fuerzas anteriores y le añade una fuerza de impulso hacia arriba.
ClearForces elimina todas las fuerzas que está recibiendo el RigidBody en ese momento.
Flip gira 180° el objeto si no está atacando en ese preciso instante.
Salto Bomba
Si pulsa la tecla S y no está tocando el suelo, empieza a hacer un salto bomba.
Continuación Salto Bomba
GroundPoundAttack simplemente sirve para empezar las otras dos funciones a la vez, para hacer el código más legible.
StopMidAir sirve para que el personaje se quede un rato parado en el aire, ya que se desactiva la gravedad.
DropAndSmash sirve para esperar el tiempo deseado que se quede en el aire y añadirle una fuerza de impulso hacia abajo.
CompleteGroundPound es para que le vuelva a afectar la gravedad.
ClearForces sirve para limpiar todas las fuerzas que le afectan en ese momento al rigidbody.
Cámara
Esto fue una idea descartada porque no pude acabarlo a tiempo. La idea era que hubiesen zonas en las que la cámara se congelase en un punto fijo cuando el jugador entrase en contacto con un trigger invisible y empezasen a spawnear enemigos de ambos lados de la pantalla y que no se pudiese mover hasta que no matase a todos los que aparecían, y una vez ha matado a todos, volvía a seguir al jugador como de costumbre, pero la cámara se seguía bloqueando cada vez que el jugador entraba en contacto con el trigger.
Furby Spawner
Spawner de enemigos. Cada vez que se instancia, tiene que esperar 5 segundos para poder instanciar otro. En el momento en el que se han instanciado 10 furbies, deja de hacerlo.
Creador de paredes
Este es otro código descartado, que iba ligado con el de la cámara. Cuando entraba en contacto con el trigger que bloqueaba la cámara, aparecían paredes en los bordes de la cámara para que el jugador no pudiese salirse. Cuando derrotaba a los 10 enemigos, se destruían las paredes.

Alien Parapocalypse

Alien Parapocalypse

Este juego es en el que más horas he invertido, la verdad. Es un juego arcade interminable en el que tienes que matar al mayor número de alienígenas posible (sin límite de tiempo, sólo estás limitado por la vida del personaje). Aquí sí que voy a meterme mucho en código:

Ataque de tierra
Un IEnumerator en el que recibe la longitud de la animación de ataque, activa la hitbox de ataque y al acabar la animación la desactiva.
Eliminar enemigos
Revisa todos los enemigos en escena, ya sean enemigos de tipo 1 (que se mueven por el suelo) o de tipo 2 (aéreos que se mueven a puntos aleatorios del cielo). Si le pega con el ataque de tierra, ese enemigo en específico empieza la animación de muerte.
Bala2
La bala del enemigo 2 se vuelve estática (deja de afectarle la gravedad), si colisiona con el jugador le resta vida, empieza la animación de explosión y le pasa la duración al IEnumerator, el cual espera a que se deje de reproducir la animación para destruir la bala.
FixedUpdate bala 3
Si la bala se destruye, se queda en el sitio. Tuve que poner esto porque al colisionar con una bala del jugador, salía disparada hacia arriba mientras ejecutaba la animación, cosa que no tendría que pasar.
Código bala 3
Si se sale de la pantalla, se destruye sin más. Si toca al jugador una vez, le resta una vida al jugador y empieza la animación de daño del jugador y la de explosión de la bala. La bala al explotar empieza la animación y no desaparece hasta que no ha dejado de ejecutarse la animación de destrucción de la bala.

Super Fruit Slasher

Super Fruit Slasher logo

Alien Parapocalypse y Super Fruit Slasher son dos juegos con aproximadamente 2 semanas de desarrollo, y por eso son tan pequeños. En Super Fruit Slasher tienes que cortar un trozo de fruta presente en medio de la pantalla, y el que más rápido lo corte gana un punto, hasta llegar a 10. Hay veces que lo que aparece no es una fruta y no hay que intentar cortarlo, porque si lo haces, serás penalizado, siendo restado un punto a tu puntuación total. Solo debes esperar a que desaparezca.

Código jugador 1
En esta imagen se pueden apreciar los controles del jugador 1. Si le da a la tecla A y la fruta todavía no está cortada, cambia su estado de idle a ataque, espera los segundos especificados de la animación y regresa a su posición original. Para el jugador 2 lo único que cambia es que la tecla pulsada es la L, no la A.
Código fruta
En el array de imágenes, los objetos que no son fruta están del 0 al 5, entonces todo lo que sea más de 5 es fruta. Si la fruta ha sido cortada por cualquiera de los dos jugadores (o simplemente lo que hay ahí no es una fruta), espera los segundos de la animación, asigna los booleanos de las espadas a falso para que puedan volverse a mover y se autodestruye para que el GameController pueda volver a instanciar otra fruta.
FixedUpdate GameController
Este es el FixedUpdate del GameController. Aquí, si no hay ninguna fruta instanciada, lo hace y cambia el booleano a verdadero para no instanciar varias veces frutas distintas. Actualiza los textos de puntuación de los jugadores, y revisa si alguno de los dos jugadores ha ganado cada vez que se corta una fruta.
Condición de victoria.
Si alguna de las puntuaciones de los jugadores es 10, se detiene el tiempo, se activa el texto de "Ha ganado el jugador 1!" (o el 2, o es un empate) en el respectivo color (azul para jugador 1, rojo para jugador 2, gris para empate) y se reproduce un sonido.
Código para la mitad que cae.
En este código, la mitad que cae revisa si ha colisionado con el jugador 1 o con el jugador 2 y le suma puntuación a quien lo haya hecho. Se activa el trigger para la animación y se reproduce un sonido. Si no es una fruta, dependiendo del jugador que le da, reduce en 1 la puntuación de ese jugador y reduce la velocidad de animación a la que se reproduce la vuelta.

Memory Madness

Logo Memory Madness

Un juego de memoria que hice en solitario para una asignatura, haciendo tanto el diseño de las cartas en Adobe Illustrator así como la programación en Unity.

Código para crear cartas
Se crea un array de cartas de filas*columnas y se instancian automáticamnete en su lugar correspondiente.
Renderer
El primer if sirve para guardar x números aleatorios en un array para agarrar de ahí parejas. Si no está ya en el array, lo añade. Si está en el array, busca otro número hasta que haya uno que no esté presente. Luego, se elige un número aleatorio de ese array y se instancian por parejas. Mientras que no hayan 2 parejas instanciadas de esa pareja y que todas las parejas no hayan sido instanciadas 2 veces, sigue el bucle instanciando carta por carta hasta que estén todas. En el momento en el que todas están presentes, puede comenzar el juego.
Si hace click en la carta, el tiempo no está pausado y hay menos de 2 cartas volteadas, empieza la animación de volteo de la carta. Si no hay ninguna carta volteada, se mete en la variable card1. Si hay una carta volteada y no hay una segunda carta volteada, se mete en card2. En el IEnumerator, se espera a que se dé la vuelta por completo para resetear el trigger y asignarle el booleano de que está dada la vuelta a verdadero.
GameManager primera parte
Si dos cartas están dadas la vuelta, revisa si un contador auxiliar es menor o igual a 0. Si se cumple esta condición, aumenta el número de movimientos y aumenta en uno el contador para ponerlo en 1 y que no vuelva a contar otro punto. Recibe los animadores de las cartas que están dadas la vuelta y la duración de la animación que están reproduciendo en ese instante. Si las cartas son iguales, aumenta la puntuación, el número de cartas dadas la vuelta se vuelve 0 y las cartas almacenadas se vuelven nulas.
GameManager segunda parte
Si ha conseguido 8 puntos (hay 16 cartas en total, eso es fijo), significa que ha ganado. Si ha ganado, el botón de reseteo se desactiva. De las animaciones que recibió antes, si la animación de la carta 1 tarda más que la de la carta 2, se usa ese tiempo. Si no, se usa el otro. El booleano de que hay un proceso inacabado se vuelve verdadero.
GameManager parte 3
Si las dos cartas no son iguales y se ha acabado la animación de darse la vuelta, empieza otra corutina para darles la vuelta otra vez y ponerlas boca abajo.
GameManager parte 4
Este código sirve para poner las cartas boca abajo si no son iguales mediante una animación.

Meireki no Hikeshi

Logo Meireki

El juego anual que mencioné en la sección anterior. Va sobre un bombero en Japón del siglo 16, yendo de casa en casa apagando incendios. Las mecánicas son muy simples: moverse, saltar, rescatar personas, subir escaleras, recoger agua, soltar agua, variar la velocidad de movimiento y el impulso de salto dependiendo del nivel de agua que tengas actualmente.

Menú
Menú principal para cargar el nivel, volver y salir.
Pause-1
Menú de pausa. Empieza con ambos canvas desactivados. Si el número de NPCs rescatados es igual al número total de NPCs, carga directamente la escena de "Nivel Completado". Si pulsa la tecla Escape, activa el canvas de pausa. El canvas de pausa contiene un texto diciendo "Pausa", y tres botones con "Continuar", "Menú Principal" y "Salir".
Pause-2
Si pulsa el botón de reanudar, se reanuda el juego. Si pulsa o el botón de Menú Principal o el de Salir, aparece el canvas de "Estás seguro?" con opciones "Sí" y "No".
Pause-3
Carga la escena. Si el jugador ha pulsado el botón "Main Menu", le lleva al menú principal. Si por el contrario le da al de "Salir", se cierra la aplicación.
Player-1
Si la velocidad en el eje y es negativa, significa que se está cayendo, entonces reproduce la animación de caída. Si no está tirando agua, se puede mover, saltar y escalar.
Player-2
Si se acaba la animación y el tanque de agua no es igual a cero, resta un nivel al tanque de agua, resetea el trigger y los booleanos respectivos. La función Water() convierte el booleano a verdadero.
Player-3
La función de escalar tira un rayo hacia arriba y si detecta una escalera y el jugador pulsa la tecla "W", empieza a escalar. Sólo puede escalar si el nivel de agua no está en 4. Se anula la gravedad para que pueda escalar.
Water-1
Recarga el agua.
Si la capacidad del tanque es menor de 3 y lo que está tocando el jugador es agua, empieza el temporizador. Si el temporizador es mayor o igual que el tiempo que tiene que pasar, aumenta en 1 el nivel de agua. Si pulsa la tecla para lanzar agua, la lanza.
Water-2
Switch para cambiar la velocidad de movimiento, el impulso del salto y la velocidad de las animaciones. ReFuel para recargar agua.
Waterdrop
Si el agua cae en el fuego, el fuego se apaga.
NPC
Si el jugador colisiona con el NPC, cambia la animación a "Salvado".
Water-1
Menú principal para cargar el nivel, volver y salir.
Fire
Si el agua toca el fuego, este se vuelve invisible. Al volverse invisible, empieza un temporizador. Al acabar el temporizador, vuelve a ser visible.
Door
En el hub, si está en frente de la puerta de una casa (la entrada a un nivel), le aparece un sprite de la tecla "W". Si la pulsa entonces, entra en el nivel.
Complete-1
Cambia el texto que aparece en la escena de "Nivel Completado" y aumenta en uno el número de niveles totales completados (solo suma uno la primera vez que completas un nivel).
Complete-2
Si los niveles completados son 3, añade un texto diciendo que el nivel final ya está disponible.
Final
Tiene el mismo código que la puerta, con la diferencia de que a este sólo se puede acceder cuando has completado ya los 3 niveles anteriores.
Platform
Es una mecánica desechada. Si tienes nivel 4 de agua y te pones sobre esta plataforma, se rompe.

The Nerfir Protocol

Logo Nerfir Protocol

Proyecto en desarrollo por mi equipo de trabajo Lost Paradox, un equipo de 6 personas, los mismos con los que he hecho Alien Parapocalypse, Super Fruit Slasher y Theo y la Puerta de las Sombras. Es un proyecto que estamos haciendo al completo: estudio de mercado previo hasta para el naming, lista de tareas inicial para saber quién hace qué, la creación de una IP única con lore que iremos expandiendo a través de productos transmedia (novelas, juegos de mesa, series y películas, merchandising, ...). El proyecto se está llevando a cabo en Unreal Engine 5.

Mis hobbies

Pen Spinning

Pen Spinning es una disciplina en la que, con un bolígrafo modificado para que sea más largo, más pesado y tenga el peso más repartido, giras el bolígrafo alrededor de tus dedos. Llevo 4 años practicando, y aquí está uno de mis vídeos:

Gym

Llevo 1 año entrenando desde casa (tengo una barra, dos mancuernas y suficientes discos como para poder cargar 47kg al mismo tiempo), 1 año en el Holiday Gym al lado de UDIT, y actualmente estoy yendo al Basic-Fit con mi novia. No busco nada específico, sólo ser más saludable y estar más fuerte.

Jugar Videojuegos

Últimamente lo estoy dejando mucho de lado, pero de vez en cuando me gusta viciarme a un juego en específico y jugarlo hasta completarlo al 100% o jugar hasta cansarme. Juego mayormente juegos del género plataforma, de carreras, de deporte, de peleas, cualquier juego competitivo que no sea shooter. A veces, también hago streams en Twitch, link aquí.