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.