Gracias por lo que comentáis de mi
![enrojecido [ayay]](/images/smilies/nuevos/sonrojado_ani1.gif)
No sé muy bien que de qué va el hilo, pero supongo que
@Señor Ventura me ha invocado cual demonio Lich por esto:
Manveru Ainu escribió:Lo que decía antes, cuando hablas de rpg parece que hablas de Skyrim y cuando hablas de beatem up hablas del primer double dragon. Eso es un debate tendencioso sin sentido que no se corresponde a la realidad. Hablamos de lo mejor en 8 y 16 bits, no de juegos simples como los hydlides o los primeros yo contra el barrio. De todas formas los hydlides son muuucho más simples aún que los rpgs que yo tenía en la cabeza de snes y md/mcd,
PD: alguien que sepa algo de programar videojuegos no llamaría dificil a hacer "tela con cada menu, inventarios, habilidades, condiciones de estado, eventos, IA, gestión de inventario, conversaciones, tablas, etc, etc.". Eso es lo más trivial en un videojuego, sobre todo la "IA" de un rpg donde no suele haber más que hacer bucle de un par de patrones.
Y el último párrafo más de lo mismo, algo que no puede ser menos cierto con poco que hayas visto y vivido el mundillo. La gente no suele acabar los rpgs porque hace los engines en poco tiempo y luego es repetición, repetición, repetición... hasta el infinito, y necesitas mucho material gráfico y no siempre es fácil obtenerlo.
"VS a lo único que tienes que hacer, es ir lanzando enemigos a medida que la pantalla avanza hacia adelante hasta llegar al boss, y poco más" Esa frase es para llevarla en la firma como epic fail jejeje, así serán los beat'em ups que has programado...
En mi caso, estoy programando un RPG y he destripado 3 en profundidad: Romancing Saga 3, Treasure Hunter G y Star Ocean... y cuando digo "destripar" me refiero a que he extraído el código fuente que maneja toda la lógica del juego y, en mi experiencia personal, estoy más de acuerdo con
@Naitguolf.La mejor manera de explicarlo es con un ejemplo del Star Ocean para construir una escena mientras se hace una transición en negro entrando a un pueblo del juego:
* La lógica del juego detecta dónde ha pisado el personaje para leer el ID de la escena donde se cambia
* Se accede a unas tablas que envían todas el tileset (las tiles comprimidas con el S-DD1) a VRAM y el tilemap (comprimido LZ) a RAM para formar el escenario completo del pruelbo; esto incluye las tiles de 4BPP para BG1 y BG2 y el efecto de sombreado que se hace con matemática de color. Esto se haría también en un beat'em up.
* Se descomprime con LZ el mapa de la zona que compone el tilemap completo del pueblo, no solo lo que se ve en pantalla, de modo que se pueda hacer scroll libremente. Esto no lo tienen por qué tener los beat'em up, ya que normalmente son lineales o al menos, mucho más limitados en libertad de movimiento.
* Se configuran las variables de cámara y márgenes de scroll y se crea el mapa de eventos, que permite saber, según las coordenadas del personaje dentro del mapa completo del pueblo si una tile se puede atravesar, dónde están las entradas y salidas de las casas, del propio pueblo, etc. Esto tampoco lo suelen tener los beat'em up, al menos no con tanta complejidad, ya que un pueblo del StarOcean está lleno de casas y paredes y un beat'em up no suele.
* Se descomprime con LZ el script de comandos, que es el que se ejecuta para decir qué personaje hace qué acciones en el pueblo en concreto. Por ejemplo, el script de comandos crea un personaje en las coordenadas (600, 1100) del pueblo y un evento asociado a él que hace que cuando hables con ese personaje, se ejecute una cut-scene. Este script suele ser bastante complejo y dependiendo del juego, el script lo hace todo (como en Romancing Saga 3) o bien hay un script principal que configura todo lo explicado en los puntos anteriores y luego apunta a un script separado para los eventos concretos del pueblo donde estás ahora (como hace THG, que tiene un script principal que configura VRAM y RAM con el mapa, un script que inserta los eventos y donde cada evento llama a otro script con el texto y las acciones concretas a ejecutar).
* Según las acciones clave que va ejecutando el personaje, se van marcando unos flags en un array que indica si el personaje ha hablado con tal o cual persona, si ha realizado tal misión, o si lleva a tal personaje en el grupo. Esto también es muy complejo porque implica un árbol de decisiones según las acciones realizadas con anterioridad (en el código fuente de Romancing Saga 3 que liberé se puede ver claramente cómo se comprueba cada flag) y no suele existir en los beat'em up.
* Según el equipo que lleve el personaje, también se lanzan acciones (como la Ocarina en Star Ocean) y además, modifica los status del personaje, lo cual en batalla complica el cálculo del daño inflingido y recibido por cada personaje. Esto además complica los menús sobremanera. En el Star Ocean, todo el banco $CA se dedica a la gestión de los menús y de cada sub-menú, y ahora que tengo extraído casi el 70% del mismo, os digo que es muy complejo. Existe una rutina por cada status del personaje que se llama cuando se quiere saber algo tan básico como el HP máximo que tiene: esta rutina comprueba el equipo que lleva y si hay algún item modificador del HP, se accede a unas tablas para saber cuánto es éste. Así que crear un inventario de objetos es complicado porque has de meter en unas tablas qué modifica cada uno, y luego en otra tabla, cuánto es este modificador. Así, en Star Ocean se almacena 1 byte con el ID del objeto y otro byte con los flags modificadores.
* Luego, los RPG suelen tener pijadillas como en el caso del Star Ocean los talentos o habilidades, que tienen una serie de rutinas con su propia lógica de funcionamiento. No es que sea complicado programarlas, pero es un trabajo extra enorme, ya que influye en las batallas (por ejemplo, según el nivel de "Golpe Fuerte", el modificador del crítico es diferente cuando golpeas)
* Y la diferencia más evidente es que las batallas son un motor completamente diferente que ocupa 2 bancos de ROM de código: las animaciones son diferentes, hay que programar los efectos mágicos y añadir IA para cada personaje jugable y, si se hace bien, IA para cada tipo de enemigo, unos má agresivos, otro menos, etc... Esto tampoco lo tiene un beat'em up.
Yo personalmente creo que un RPG es mucho más complicado de programar, y uno de los ejemplos claros son los bugs en el sistema de batalla que tiene FF6, que "olvidan" comprobar ciertos modificadores en algunos objetos, o ciertos contadores y llevan años resolviéndolos gente anónima.