Também nunca vi muitos recursos sobre esse assunto, mas o melhor que encontrei é provavelmente o:
Ele fornece informações sobre a IA do inimigo, 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
}
}
Com isso, você pode ver que seus inimigos provavelmente precisarão de uma máquina de estado para gerenciar os diferentes estados em que estão, e cada estado terá seu próprio comportamento para executar cada turno, codificado no inimigo ou orientado a dados por um script língua.
Existe muita variação mesmo entre JRPGs baseados em turnos, portanto, não há um conjunto de regras para todos eles. Por exemplo, você pode emitir todos os comandos de terceiros antes que algum deles ocorra ou eles podem ocorrer imediatamente após a escolha. A ordem de ataque pode ser aleatória ou, mais frequentemente, determinada pela estatística Speed.
Mas, por exemplo, digamos que você tenha um sistema de batalha puramente baseado em turnos, onde você emite todos os comandos do grupo primeiro e, em seguida, toda a ação acontece no final do turno. Você pode abordá-lo como:
- Armazene todas as entidades (jogadores + inimigos) que participam da batalha em uma lista.
- Para cada jogador da lista, insira e armazene.
- Classifique a lista de entidades pelo atributo Velocidade.
- Para cada entidade da lista, se for um jogador, execute a ação armazenada, caso contrário, execute o script AI para o estado atual.
- Avance a curva e repita.
As Perguntas frequentes sobre mecânica de batalha também contêm muitas informações úteis, principalmente sobre gerenciamento de tempo nas batalhas. Infelizmente, esse sistema (também conhecido como ATB ou Active Time Battle) é patenteado, portanto você não pode fazer nada parecido.
EDIT Também encontrei recentemente este site, que fornece muitas informações técnicas sobre a implementação do FF7. Infelizmente, as seções do módulo de batalha ainda não parecem completamente escritas.