7.4 KiB
Turn Battle Base — общая платформа для всех боёв
Turn Battle Base — это то общее, что есть у всех пошаговых боёв в коллекции: запуск боя из сценария, боевая сцена с фоном того места, где бой начался, экраны победы и поражения, опыт и добыча, статусные эффекты вроде оглушения — и выбор боевой системы. Как именно сражается игрок, платформа не решает: это задача мода боевой системы — FF Battle (меню команд) или Card Battle (карты, которые перетаскивают на цели).
Две боевые системы, одна платформа
Один и тот же бой в RPG Plus — воин против волка в деревне — в обеих системах:
Всё вокруг боя одинаковое: фон деревни, цифры волка, кнопки скорости x1 / x4 / x8 в правом верхнем углу (они ускоряют анимации, а выбор запоминается) и то, что происходит после боя.
Свою систему игра выбирает настройкой коллекции battle.core; в RPG Plus это ff_battle. Без настройки берётся первая из установленных систем. В редакторе коллекций настройка называется «Боевая система».
Как проходит бой
scenario: battle.init / rpg.battle
|
v
battle scene: backdrop of the current place, party from the roster, enemies from their files
|
v
battle system (ff_battle or card_battle): player turn <-> enemy turn
| |
all enemies defeated party defeated
v v
Victory: experience, loot Defeat: Main menu
|
v
back to the scene the battle started from
Победа и поражение
Когда падает последний враг, экран победы показывает опыт каждого уцелевшего члена отряда и добычу:
- Опыт. Каждый побеждённый враг приносит свой
Level × Exp, который поровну делится между теми, кто остался на ногах. Волк — 2-го уровня сExp12, итого +24. - Добыча. Для каждого побеждённого врага разыгрывается его список
Loot; предметы сразу попадают в инвентарь. - Continue возвращает в сцену, откуда пришёл бой. Потерянное в бою здоровье не восстанавливается.
Если падает весь отряд, экран поражения предлагает только Main menu — без опыта и без добычи.
Запуск боя из сценария
action battle.init scene=town_entry enemies=wolf_1,wolf_2 quest_id=MeetingMurakamiQuest new_tag=wolf_battle
switch_scene Battle
end
enemies— id персонажей через запятую; один и тот же id дважды — это два врага.scene— сцена, в которую игра вернётся после победы.quest_id,new_tag(необязательные) — привязывают бой к заданию и помечают его тегом (уведомление в журнале).- Фон боя — тот, что показан в этот момент, поэтому задайте его до
battle.init.
На тайловой карте вместо этого используйте action rpg.battle enemies=rpg_wolf win_flag=rpg_wolf_dead из мода RPG: отряд вернётся в ту же клетку карты, а при победе выставится флаг.
Команда action battle.set_core core=card_battle переключает боевую систему для последующих боёв.
Враги, добыча и статусные эффекты в данных
Враги — обычные персонажи (см. Characters Engine). Добыча волка из RPG Plus:
{
"Id": "rpg_wolf",
"Loot": [
{ "ItemId": "rpg_plus/wolf_pelt", "MinCount": 2, "MaxCount": 3, "Probability": 100 },
{ "ItemId": "money/coin", "MinCount": 8, "MaxCount": 14, "Probability": 100 }
]
}
Probability — вероятность в процентах; количество — случайное число от MinCount до MaxCount включительно.
Статусные эффекты — это сущности вида status_effect. Уже в платформе есть оглушение: персонаж пропускает свои ходы:
{ "Id": "effect/physics/stun", "Icon": "characters/effects/stun", "Type": "Stun", "Duration": 3, "Actions": "basic/stun" }
Боевое действие, накладывающее эффект, может задать своё число ходов; длительность уменьшается в начале каждого хода.
Авторам модов
Боевая система — мод, регистрирующий IBattleCore (и IBattleAutoPlayable для автоматических тестов). Её действия выполняются через исполнители платформы, поэтому мод вроде Battle Formulas добавляет новые виды действий сразу всем системам. Код может узнавать о конце боя через BattleEndedEvent, а о победе — через IWingroundListener; так работает Recruiting, предлагая побеждённым врагам место в отряде.
Если что-то пошло не так
- У боя пустой фон.
battle.initвыполнился раньше, чем у сцены появился фон. - Открывается не та система. Проверьте настройку игры
battle.coreи не переключал ли её какой-нибудь сценарий черезbattle.set_core. - После победы нет опыта. Враги с
Exp0 не дают опыта; павшие члены отряда его не получают.


