Recursos de arquitectura del sistema de batalla JRPG por turnos

9

Los últimos meses he estado ocupado programando un JRPG 2D (RPG de estilo japonés) en C ++ usando la biblioteca SDL. El modo de exploración está más o menos hecho. Ahora estoy abordando el modo de batalla.

No he podido encontrar ningún recurso sobre cómo se estructura un clásico sistema de batalla JRPG por turnos. Todo lo que encuentro son discusiones sobre la fórmula del daño. He intentado buscar en Google, buscar en el tablero de mensajes de gamedev.net y rastrear preguntas relacionadas con C ++ aquí en Stack Exchange. También he intentado leer el código fuente de los juegos de rol de código abierto existentes, pero sin una guía de algún tipo es como tratar de encontrar una aguja en un pajar.

No estoy buscando un conjunto de reglas como D&D o algo similar. Estoy hablando exclusivamente de código y diseño de estructura de objeto. Un sistema de batalla le pide al jugador que ingrese usando los menús. A continuación, el turno de batalla se ejecuta mientras los héroes y los enemigos ejecutan sus acciones.

¿Alguien puede señalarme en la dirección correcta? Gracias por adelantado.

BenoitRen
fuente
44
No hay reglas comunes establecidas. Todos los juegos tienen su propio estilo, a menos que hablemos de mazmorras y conjuntos de reglas derivados de dragones. Debo decir que no estoy muy seguro de si eso es lo que querías decir. Elaborar.
Toni
¿Qué quieres decir con JRPG exactamente?
cenizas999
2
¿Por qué no define primero lo que quiere que el jugador experimente, luego escribe una especificación de implementación basada en eso?
Tetrad
1
@ ashes999 El ejemplo clásico más influyente es probablemente la serie Ultima. Otros ejemplos más recientes y populares: la serie Baldur's Gate (BG2 a menudo se considera el mejor CRPG de todos los tiempos) o la serie The Elder Scrolls (Morrowind, Oblivion, Skyrim en particular por su fama).
David Gouveia
1
"Un sistema de batalla le pide al jugador que ingrese usando los menús. Luego, el turno de batalla se ejecuta mientras los héroes y los enemigos ejecutan sus acciones". Parece que tienes un control sobre el algoritmo. Entonces ... ¿qué estás buscando exactamente? ¿Asesoramiento sobre cómo estructurar su código? Además, ¿qué es un " sistema de batalla JRPG clásico por turnos "? Ya sabes, hay más de un JRPG clásico, y muchos de ellos tienen sistemas de batalla muy diferentes. Entonces, ¿ qué estás tratando de lograr exactamente ?
Nicol Bolas

Respuestas:

9

Nunca he visto muchos recursos sobre este tema, pero el mejor que he encontrado es probablemente el:

Proporciona información sobre la IA de los enemigos como esta:

AI: Setup
{
   TempVar:TurnsUntilGrenade = 3
   TempVar:GrenadeAmmo = 4
}
AI: Main
{
   If (Stage == 0) Then
   {
      If (TempVar:TurnsUntilGrenade == 0) Then
      {
         If (TempVar:GrenadeAmmo > 0) Then
         {
            Choose Random Opponent with Lowest HP
            Use Hand Grenade on Target
            TempVar:GrenadeAmmo = TempVar:GrenadeAmmo - 1
            TempVar:TurnsUntilGrenade = 3
         } Else {
            Choose Random Opponent with Lowest HP
            Use <Machine Gun> on Target
         }
      } Else {
         Choose Random Opponent
         Use <Machine Gun> on Target
         TempVar:TurnsUntilGrenade = TempVar:TurnsUntilGrenade - 1
      }
   } Else {
      If (TempVar:GrenadeAmmo > 0) Then
      {
         Choose Random Opponent with Lowest HP
         Use Hand Grenade on Target
         TempVar:GrenadeAmmo = TempVar:GrenadeAmmo - 1
      } Else {
         Choose Random Opponent
         Use <Machine Gun> on Target
      }
   }
}
AI: Counter - General
{
   If (Grenade Combatant's HP <= 3 * [Grenade Combatant's Max HP / 4]) Then
   {
      Stage = 1
   } Else {
      Stage = 0
   }
}

Con esto, puede ver que sus enemigos probablemente necesitarán una máquina de estado para administrar los diferentes estados en los que pueden estar, y cada estado tendrá su propio comportamiento para ejecutar cada turno, ya sea codificado en el enemigo o impulsado por datos mediante una secuencia de comandos idioma.

Hay mucha variación incluso entre JRPG basados ​​en turnos, por lo que no hay un conjunto de reglas para todos ellos. Por ejemplo, puede emitir todos los comandos de grupo antes de que cualquiera de ellos tenga lugar, o pueden tener lugar inmediatamente después de elegir. El orden de ataque puede ser aleatorio, o más a menudo determinado por la estadística de Velocidad.

Pero, por ejemplo, supongamos que tiene un sistema de batalla basado exclusivamente en turnos, en el que primero emite todos los comandos de grupo y luego toda la acción ocurre al final del turno. Podrías abordarlo como:

  • Almacene todas las entidades (jugadores + enemigos) que participan en la batalla en una lista.
  • Para cada jugador en la lista, obtenga información y guárdela.
  • Ordene la lista de entidades por el atributo Velocidad.
  • Para cada entidad de la lista, si se trata de un jugador, ejecute la acción almacenada; de lo contrario, ejecute el script AI para el estado actual.
  • Avance y repita.

Las Preguntas frecuentes sobre Battle Mechanics también tienen mucha información útil, en particular sobre la gestión del tiempo en las batallas. Pero desafortunadamente este sistema (también conocido como ATB o Active Time Battle) está patentado, por lo que no puede hacer nada similar.

EDITAR También encontré recientemente este sitio web que proporciona mucha información técnica sobre la implementación de FF7. Desafortunadamente, las secciones del módulo de batalla aún no parecen estar completamente escritas.

David Gouveia
fuente