Nigdy nie widziałem zbyt wielu zasobów na ten temat, ale najlepszy, jaki znalazłem, to prawdopodobnie:
Zapewnia wgląd w AI przeciwnika, takie jak to:
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
}
}
Dzięki temu możesz zobaczyć, że twoi wrogowie prawdopodobnie będą potrzebować maszyny stanów do zarządzania różnymi stanami, w których mogą się znajdować, a każdy stan będzie miał własne zachowanie do wykonania każdej tury, albo zakodowane we wrogu, albo sterowane danymi przez skrypty język.
Istnieje wiele różnic nawet między turowymi JRPG, więc nie ma zestawu reguł dla wszystkich z nich. Na przykład możesz wydać wszystkie polecenia drużyny, zanim którekolwiek z nich się wydarzy, lub mogą one nastąpić natychmiast po dokonaniu wyboru. Kolejność ataku może być losowa lub częściej określana na podstawie statystyki Prędkości.
Ale na przykład załóżmy, że masz system bitwy oparty wyłącznie na turach, w którym najpierw wydajesz wszystkie polecenia drużyny, a następnie cała akcja dzieje się na końcu tury. Możesz podejść do tego w następujący sposób:
- Przechowuj na liście wszystkie byty (gracze + wrogowie) uczestniczące w bitwie.
- Dla każdego gracza na liście uzyskaj dane wejściowe i zapisz je.
- Posortuj listę encji według atrybutu Szybkość.
- Dla każdego podmiotu na liście, jeśli jest to gracz, wykonaj zapisaną akcję, w przeciwnym razie uruchom skrypt AI dla bieżącego stanu.
- Przejdź dalej i powtórz.
Mechanika Bitwa FAQ ma również wiele przydatnych informacji, w szczególności na temat zarządzania czasem w walkach. Ale niestety ten system (znany również jako ATB lub Active Time Battle) jest opatentowany, więc nie możesz zrobić czegoś podobnego.
EDYCJA Ostatnio znalazłem też tę stronę internetową, która zawiera wiele technicznych informacji na temat implementacji FF7. Niestety sekcje modułu bitewnego nie wydają się jeszcze w pełni napisane.