lunes, 29 de marzo de 2010

[Spirit Huntress]SHEngine, Vol. 1

¡Buenas! Aquí estoy para hablaros de numeritos. Antes de que nadie se pregunte qué me pasa, decir que "Numeritos" es la forma que tengo gracias a mi novia de llamar a la programación (que estrictamente no es programación) en el maker. Ella suele preguntarme, cuando le digo que he estado liado con algún proyecto: ¿Qué has estado haciendo? ¿Dibujos? ¿Numeritos? ¿de qué juego? ¿Del winin faiter? ¿Y el de los perritos pa cuando?
Basicamente, estas entradas, que numeraré en volúmenes, tratarán sobre los engines que se involucran en el juego Spirit Huntress. Intentaré explicar con detalle, ejemplos e ilustraciones cómo funciona este proyecto, porque no son pocos los que se preguntarán cómo se hace un plataformas 2d en Rpg Maker XP.
Veréis de paso que he innaugurado una etiqueta de "Tutoriales", ya que la intención es ir publicando más entradas como esta, sobre otras cuestiones, y con carácter didáctico.

La primera entrada dedicada al motor físico de Spirit Huntress hará de introducción. El nombre real del engine no es "Numeritos", si no "SHEngine" (Spirit Huntress Engine). Decidí darle un nombre concreto para poder referirme a algo que engloba muchas cosas de un modo rápido.


¿Qué es el SHEngine?
El SHEngine es el conjunto de procesos paralelos, eventos comunes, acciones especiales, o cómo queráis llamarlos, conjugados con la disposición del mapeado, que hacen posible simular un entorno de juego sidescroll 2d en rpgmaker XP, usado en el proyecto Spirit Huntress, del que recibe el nombre.
Es el corazón del juego: cubre las habilidades, acciones y movimientos de Hibari, así como la física del juego: la gravedad, las colisiones, etc.

¿Cómo influye en el juego?
Este engine te permite saltar, moverte, crea una gravedad que te hará bajar cuando saltes o no tengas suelo debajo, detecta colisiones del protagonista más allá de las limitaciones del rpg maker, y muchas otras funciones relacionadas con este tipo de juegos.
Cada una de estas funciones, no obstante, ha sufrido cambios (a mejor) con cada versión más avanzada que editaba del engine.

¿De qué manera funciona?
El engine lleva a cabo sus funciones valiéndose de distintos recuros, que operan como un todo:
-Eventos comunes: programación made in rpgmaker pura y dura.
-Scripts: edits a los scripts default del maker, eliminando, y en algun caso agregando, funciones.
-Mapeado: pequeños trucos en el mapeado para ayudar a que el engine sea más eficiente.
Sobre los scripts, decir que no conozco el RGSS a fondo, y que todo lo que hay hecho en este aspecto, son "supresiones" de código original (como por ejemplo, el que hace al personaje andar) que me restaban libertad para programar con eventos, en lo que realmente tengo conocimiento, y algún añadido muy ocasional hecho con la ayuda de Anemus. Hasta ahora el único realizado es uno que me permite ahorrar espacio en los archivos .png de los charas.

¿En qué estado se encuentra el SHEngine?

Actualmente, el SHEngine se encuentra en su versión 4.0. El paso de una versión a otra lo marcan grandes cambios en muchos engines que me hacen tener que modificar todo el juego en sí, incluyendo mapeados xD. El último paso, de la 3.5 a la 4.0, se ha dado hace cuestión de semanas. Paso a haceros un pequeño historial de las versiones:

Versión 1.0 (original).

Es la primera, obviamente. La programé con 15 años a lo sumo, y acababa de dejar de usar el maker 2003 y no sabía aprovechar del todo las bondades del xp. Era rudimentario a más no poder, pero abría un campo inexplorado por entonces en el mundillo. No conservo imágenes de esta versión del juego. Han pasado casi 7 años desde entonces, y he cambiado de pc, de proyectos, de versión del programa, etc.
-Movimiento: por defecto incluido en el programa.
-Salto: engine que permitía moverte 2 tiles en vertical o diagonal y que te hacía bajar las casillas
equivalentes.
-Combates: arcano sistema action que usaba coordenadas para enemigos de máximo un tile.
-Gravedad: no existía. Había eventos que te hacían bajar unas 20 casillas hacia abajo en los extremos de las plataformas.
-Colisiones: por defecto del maker.
-Problemas: el salto era el mismo engine que te hacía caer, pero solo un determinado número de
casillas, al igual que los eventos que al tocarlos te hacían bajar. Si te caias de un sitio muy alto, aterribazas en el aire. No había forma de detectar si estabas en el suelo o en el aire. El movimiento era muy poco elástico, demasiado rudimentario. La jugabilidad era muy incómoda.

Versión 2.0 (la de la demo).

Esta versión pudisteis probarla en su momento. Una demo salió a la luz (la única hasta ahora) mostrando unos 3 o 4 niveles del juego, y unas pocas habilidades. El engine mejoraba bastante a su predecesor, pero tenía todavía muchas lacras, entre ellas una inestabilidad que causaba numerosos bugs, amablemente reportados por varios usuarios.
-Movimiento: por defecto incluido en el programa. Añadidas habilidades para correr, agacharse y trepar entre otros, aunque de un modo inestable que provocaba conflictos en la jugabilidad. Por ejemplo, se añadió la función de andar por suelo en diagonal y no llanamente horizontal.
-Salto: engine que permitía moverte 4 tiles en vertical o diagonal, y activaba la gravedad luego. Además había más tipos de salto: salto con sprint, salto doble, etc.
-Combates: arcano sistema action que usaba coordenadas para enemigos de varios tiles de tamaño, pero de un modo poco preciso y lleno de bugs. Se añadieron combos al ataque de Hibari, y alguna habilidad extrta.
-Gravedad: había una suerte de gravedad que se activaba en dos casos: al terminar de saltar, o al tocar un evento situado como antes en los bordes de las plataformas.
-Colisiones: por defecto del maker, coordenadas para enemigos y jefes, de un modo precario.
-Problemas: los mismos que en la versión anterior quitando que ahora al menos nunca te ibas a quedar en el aire, ya que la gravedad detectaba de un modo un poco "cutre" si estabas o no en el aire (en realidad detectaba si la orden de bajar un tile que te había dado era o no cumplida). El movimiento aéreo y en tierra estaba muy limitado.

Versión 2.5 (demo remasterizada no publicada).
Esta versión de la demo no llegó a ver la luz por no acabarse al 100%. Un cambio gráfico bastante brusco dió lugar a revisiones en el engine que mejoraban bastante la jugabilidad, pero no de un modo abrupto como para pasar a una versión 3.0 así, sin más.
-Movimiento: como el anterior pero más fluido gracias al incremento de la velocidad del personaje, y al aumento del tamaño del chara.
-Salto: engine que permitía moverte 5 tiles en vertical o diagonal, y activaba la gravedad luego. El movimiento aéreo era posible incluso una vez activada la gravedad, logrando una jugabilidad mejorada. El salto rebotando en paredes se mejoró bastante, y era real, no ficticio, aunque había varios bugs.
-Combates: mismo sistema de antes, obsoleto. Ciertas mejoras en pequeños detalles.
-Gravedad: el mismo sistema que en la demo anterior, pero mejorado de un modo que lo hacía aún más preciso. Evitaba un bug anterior que te hacía aterrizar con tocar una pared y pulsar una tecla de dirección que te hiciera chocar con la misma.
-Colisiones: igual que la versión anterior, mejorado muy poco.
-Problemas: los de la versión 2.0, aunque varios desaparecieron. Pero en general seguía siendo un poco injugable, aunque se empezaba a ver una mejora, un distanciamiento de lo que estamos acostumbrados a ver en el rpgmaker. Surgía un problema nuevo: el tamaño del chara era de 3 tiles y medio, y la cabeza y tronco de Hibari atravesaban plataformas bajas por las que pudieras pasar por debajo, de un modo antiestético. Ademas, si saltabas contra el techo, tu cabeza y tronco también lo atravesaban, chocando solo las rodillas.

Versión 2.6 (desafortunado cambio de concepto).
A efectos de esta entrada, no tiene mucho sentido distinguir esta versión de la anterior. Pero con carácter general, resulta interesante apartarla por el desafortunado cambio de concepto que procuré por aquel entonces (cuando empecé este blog estaba ya arrepintiéndome). Basicamente traté de convertir a Hibari en un personaje futurista, armada con equipamiento espacial (en plan samus aran) y en consecuencia tuve que modificar varios aspectos de la detección de colisiones.
-Movimiento: mismo que el anterior, pero con alguna habilidad extra.
-Salto: ligeramente mejorado con respecto al anterior, menos tiempo de reacción.
-Combates: sistema de combate futurista que incluía armas de fuego, e involucraba un sistema de detección de coordenadas de enemigos más complejo, pero aún así poco efectivo ya que solo detectaba un tile de colisión, no el espacio entero que ocupara ese enemigo.
-Gravedad: mismos de la versión anterior.
-Colisiones: menos colision default y más uso de coordenadas aunque de un modo poco eficiente, y que daba lugar a errores.
-Problemas: mismos de la versión anterior, más los de colisiones (enemigos que deberían ser golpeados no sufrían daño).

Versión 3.0 (profunda renovación).
No hace muchos meses informé de este profundo cambio: no solo a nivel gráfico, si no a nivel técnico, Spirit Huntress estaba siendo rehecho desde cero. La experiencia adquirida en el lapso de años desde la última versión del juego hasta esta, me hizo replantear los engines que componen el SHEngine de una manera más eficiente, logrando mayores éxitos.
-Movimiento: por fin, 100% personalizado. Eliminé las barreras del maker borrando un par de líneas de un script del juego, permitiéndome programar con un evento común un auténtico engine de caminar, sin usar el default, que se desactivaba a placer y que no ocasionaba ningún tipo de conflicto con otros engines del juego. Era más fluido y permitía más acciones: andar agachado, deslizarse, pasar por huecos, etc.
-Salto: muy mejorado, y además detectaba realmente si estabas o no en el aire. Más fluidez y control aéreo, y más tipos de salto, y mejora de los que ya existían.
-Combates: uso de las variables y coordenadas para absolutamente todos los aspectos del mismo. Mas habilidades y combos para Hibari que hacían los combates mas amenos.
-Gravedad: de un modo inteligente, se desactivaba cuando no era necesaria para no cargar el juego de procesos activos paralelamente. Perdía un poco de tiempo comprobando si el personaje estaba o no en el suelo, pero era fiable.
-Colisiones: 100% con variables y coordenadas. Los enemigos tenían un rango de colisiones más o menos fiel (y no solo de un tile) pero por contra, este cálculo cargaba mucho el juego y había lag cuando había un enemigo grande en pantalla.
-Problemas: A parte de varios problemas con colisiones de enemigos, surgía un problema muy jodido: para arreglar el tema de "atravesar plataformas con la parte superior del cuerpo", ocasionado por el tamaño más grande de lo normal que tenía el chara, bloqueaba con tiles invisibles zonas inferiores a plataformas por las que podías pasar por debajo, para que pareciera que tu cabeza realmente chocaba con ella. Obviamente esto era un montaje, y ocasionaba muchos problemas: esas zonas al ojo del jugador estaban libres. ¿Porqué no había enemigos ahí? ¿Porqué cuando tiro un objeto hacia esa dirección, choca con algo invisible?

Versión 3.5 (actualización gráfica y técnica).
Mejorando el aspecto gráfico de escenarios y personajes, tuve que remodelar ciertos aspectos de la jugabilidad. No de manera crítica, pero si añadiendo cosas interesantes que marcaban una versión nueva del engine.
-Movimiento: 100% personalizado pero con algunas funciones extra.
-Salto: ampliamente mejorado en eficiencia, lo cual lo hacía mucho más fluído. La inclusión de una línea de script como condición me ayudaba a detectar si un tile era sólido o no, por lo que las colisiones con los escenarios mejoraron en cierta medida e hicieron posible saltos en paredes espectacularmente eficientes.
-Combates: nuevas acciones ofensivas (patadas, shurikeins) y defensivas (defensa y contra). Mejora en las preexistentes, gracias al rango de colisiones avanzado que usaba.
-Gravedad: la misma que antes pero más rápida y por lo tanto más fluída.
-Colisiones: por fin, podía detectar las colisiones con eventos y enemigos de una manera más precisa (con rangos) sin sobrecargar al juego (usando unas pocas variables y punto). Esto me permitió elaborar combates contra enemigos muy grandes, más que el protagonista, que gozaban de gran realismo en este aspecto. Además, gracias a las mejoras en la animación y en la ejecución técnica realizada en los combates, ahora podía calcular en tiempo real los rangos de ataque de Hibari cuando daba espadazos.
-Problemas: Casi ninguno, salvando que persistía el problema anterior de las colisiones con techos y plataformas bajas. Tenía que seguir usando ese estúpido truco de los tiles bloqueadores invisibles. Además, el nuevo tamaño del chara de Hibari hacía que el espacio de visibilidad quedara muy reducido. Algunos movimientos (salto sprint) terminaban en puntos que, al ejecutar el mismo pulsando la tecla, no habías visto aún, con la consecuente peligrosidad de realizarlo "a ciegas".

Versión 4.0 (versión actual).
Y este punto es en el que me hallo. Una idea que no se porqué no había tenido antes, me hizo replantear las bases de la jugabilidad del proyecto en materia de colisiones con el escenario, dando lugar a un modo de hacer el juego mucho más sencillo que tiene como resultado algo más jugable y realista.
-Movimiento: 100% personalizado, y gracias a esto, detectando si el tile inmediatamente posterior a tí (al que te diriges al ordenar el movimiento) es pasable. Aplicando esta detección a las coordenadas del personaje x e y, x e y+1, x e y+2, x e y+3, x e y+4, y x e y+5, podría por fín librarme de la lacra del maker: usar personajes con un solo tile de colisión. Ahora hibari se choca con todo, con todas las partes de su cuerpo, de manera real, sin usar estúpidos tiles invisibles para simular efecto de choque contra el techo. Aplicando esto he logrado hacer que pases por túneles solo al agacharte de manera natural, sin tener que hacer un armatoste de eventos como anteriormente. Por si fuera poco, añadí un engine para solucionar el problema de la falta de campo de visión, que modificaba el enfoque de la cámara: la pantalla muestra más hacia la izuierda o hacia la derecha según a donde mires, de manera gradual y muy natural y rápida, para evitar que los enemigos te sorprendan, y poder ver mejor hacia donde te dirije tu salto.
-Salto: mismo que antes pero con la función mencionada en el apartado movimiento para evitar atravesar plataformas y partes del decorado.
-Combates: en este punto, las mejoras halladas no suponen un cambio.
-Gravedad: alterada para detectar de la misma manera que los movimientos y los saltos, para lograr más realismo.
-Colisiones: se mantienen en lo que respecta a los enemigos, pero mejoran totalmente en lo relativo a los escenarios.
-Problemas: Y por fín pude solucionar el problema de los malditos tiles transparentes bloqueadores, que provocaban problemas feos. A día de hoy, no encuentro ningún problema en esta versión del engine.
-Notas: a nivel gráfico, he añadido la opción, mediante una modificación del script "Spriteset_map" de mostrar 3 panoramas en vez de uno, que se mueven de manera gradual, y que dan un impresionante efecto de profundidad.

Y esta es más o menos una historia de las versiones que ha atravesado el SHEngine. Una larga historia, ¿eh?

¿Cual es el estado de desarrollo?
Actualmente podriamos hablar de un 70%, aunque como el SHEngine depende de muchas funciones del juego, hasta el día en que complete la última habilidad que adquiera Hibari, estariamos hablando de un engine inacabado.

¿Lo llevas a cabo tú solo?
Sí, aunque me ayudan muchas personas a llevarlo a cabo de manera puntual: Anemus con ayudas para entender lo que mi torpe mente alcanza de RGSS; Alien con la detección de errores (incluso antes de jugarlo xD) y con la planificación de habilidades, Lampard opinando del guión, y mi novia por estar ahí siempre, que aunque no lo creais, se involucra mucho en mis proyectos, y bastantes de las ideas que plasmo, las inspira ella. En definitiva hay una larga lista de agradecimientos que podreis ver en la versión final del juego.



Y bueno, hasta aquí el Volumen 1 de explicaciones de SHEngine. Más adelante trataré de contaros como estan programados los eventos comunes que hay en el juego, para que si alguien se anima, pueda hacer su propio juego de plataformas 2d en RpgMaker XP.

Un saludo y gracias por leerme otra vez más. ¡Hasta pronto!

12 comentarios:

Ribbu dijo...

Jojojo me encanta lo que estás consiguiendo con este proyecto.

He visto las distintas versiones y... ¡VAYA CAMBIO!

En especial me gustó la idea de la última screen.

Una screen atractiva y con varios panoramas que hacen que el resultado sea excelente.

Sigue con ese curro que vas por buen camino.

P.D: Y gracias a tu novia por inspirarte en el proyecto xDD

Ribbu dijo...

Jojojo me encanta lo que estás consiguiendo con este proyecto.

He visto las distintas versiones y... ¡VAYA CAMBIO!

Sobretodo me gustó la idea de la última screen.

Una screen atractiva y con varios panoramas que hacen que el resultado sea excelente.

Sigue con ese curro que vas por muy buen camino.

P.D: Y gracias a tu novia por inspirarte en el proyecto xDD

Alien dijo...

Me fascina la evolución de los gráficos casi tanto como en el engine.

No sabía que habías ideado un modo para que las colisiones afecten a todas las casillas que ocupa Hibari, aunque ahora que lo mencionas suena bastante obvio que era necesario...

Lo que más me ha gustado de lo que has dicho es sin duda lo de la cámara. Yo intuía que sería un problema enorme no tener una visión más amplia del escenario, sobre todo siendo ahora el gráfico de Hibari tan grande, pero no se me ocurrió una solución tan evidente y sencilla como esa.

Y también me intriga ese escenario de las islas flotantes. No lo habías enseñado antes, ni en la demo ni en screen ni en video. No he podido evitar acordarme de otro escenario de la demo en el que avanzar era casi como hacerlo entre islas flotantes, o al menos igual de peligroso. Sabes a cuál me refiero, ¿no? XDDD

Has hecho una vez más un trabajo enorme y buenísimo, y estoy seguro de que se verá recompensado en el resultado final del juego. Sigue así.

Ito dijo...

Gracias a los dos por los comentarios!

Alien, la idea de la cámara móvil la tomé de un juego de GBA que probé hace poco, el Lady Xia. Es un plataformas 2d normalito, pero me recuerda a SH porque tiene una tia por protagonista. Aunque su desarrollo es mucho más "clásico", solo hay que avanzar y completar niveles lineales, tiene toques de aventura como volver a otros escenarios, conseguir algunos poderes, etc.
El juego en sí no es gran cosa, pero entretiene, y me inspiró esa idea de mover la cámara.
Te dejo un vídeo por si lo quieres ver: http://www.youtube.com/watch?v=KBboBfTe9nA. La música es penosa, pero el estilo gráfico mola.

Sobre el escenario flotante, ya te comentaré más en privado, porque necesito ayuda para justificarlo xD

PsY dijo...

Ya desde la versión más antigua el proyecto se podía jugar perfectamente y los movimientos respondían de forma más que potable... pero ahora con tantas y tan buenas mejoras la experiencia de juego debe ser impecable, como jugar un Metroid de GBA (no se si llegará a tanto pero confío en tí xD).

En fin señor Ito, pues nada más, que hace mucho que no te digo nada de tus avances.

Un saludo y a esperar la versión definitiva.

lampard dijo...

Cuando me comentaste lo del libre movimiento gracias al script me dejaste estupefacto, pero no me imaginaba que siguieses con eventos para detectar la gravedad, ¿Has probado algo que no implique eventos en el mapa? lo digo pq en el vídeo que subiste matando al bicho feote se veía bastante bien la gravedad, y tb en el la "demo técnica".

PD: tp he opinado tanto como para darme mención :p.

Ito dijo...

Lampard, tanto a tí como a Alien, mereceis mencion, y cualquiera que os haga es poca, porque no tiene precio que ambos aguanteis y opineis las parrafadas que os suelto por msn.

FUFU dijo...

TE AMO MI VIDA, ojala nunca dejes de hacer esto, lo haces muy bien :D

Alien dijo...

Eh, me encanta leer tus parrafadas por el msn, Ito.

D90 dijo...

¡Dios mio! Me he quedado flipado con el entramado del juego. A mi lo que realmente me gusta del maker son los engines: estrujarte la cabeza para, con las herramientas que tienes, conseguir lo que realmente quieres que pase en una situación u otra... quizás ese "amor" por la programación y la poca práctica que tengo con el apartado gráfico es lo que produce que mi juego tenga tantos periodos de parón, porque programo el menú, y cuando tengo que dedicarme al juego en si, me aburro; programo el sistema de batalla, y cuando vuelvo al juego, me burro...

Te felicito tío, has sabido ser constante e innovar en el maker, tanto en los gráficos como en la programación, un monumento te deberían hacer los de Enterbrain por haber hecho tan grande su limitado programa.

Anónimo dijo...

Es increíble como has progresado desde la versión 2.0, la verdad que me impresiona tu paciencia y experiencia.

Los trailers (¡Por Dios!) que son una maravilla. Yo también opté por dejar el RTP, así que Caelestis ya no lo usará.

Trata de no variar mucho en el estilo puesto que como estan sus animaciones son casi perfectas ^^.

Saludos y sigué así.

chaleeman dijo...

que bien que hay personas que si saben aprovechar muy bien el maker. Se ve bastante bien lo que describes de tu engine, aunque desde hace tiempo se veia asi, tengo tiempo viendo el proyecto, screens y videos que publicas.

Parece que llegaste a un punto de tener un engine casi completo y queda dedicarle tiempo a la jugabilidad.

Yo espero poder jugarlo, el momento que salga.

Creative Commons License
Olympos by Ito is licensed under a Creative Commons Reconocimiento-No comercial-Sin obras derivadas 2.5 España License.
Based on a work at ito-rpgmaker.blogspot.com.

Creative Commons License
Project 4 by Ito is licensed under a Creative Commons Reconocimiento-No comercial-Sin obras derivadas 2.5 España License.
Based on a work at ito-rpgmaker.blogspot.com.

Creative Commons License
Spirit Huntress by Ito is licensed under a Creative Commons Reconocimiento-No comercial-Sin obras derivadas 2.5 España License.
Based on a work at ito-rpgmaker.blogspot.com.