Files

5.6 KiB
Raw Permalink Blame History

Stat Checks — бросаем стат против сложности

Stat Checks добавляет к сценариям одну команду, check: взять стат персонажа, прибавить бросок кубика и бонус, сравнить сумму со сложностью и продолжить историю в зависимости от успеха или провала. Визуальная новелла уговаривает ею стражника, тайловая RPG выламывает ржавую дверь. Сами статы приносят Stats Engine и правила игры (в RPG Plus — Classic RPG Rules).

В игре

В прологе RPG Plus на перекрёстке сидит странница. Один из ответов сам называет свою проверку — Харизма против 10:

Перекрёсток в сумерках; вопрос «Что скажешь ей?» и два ответа: «Вежливо спросить дорогу [Харизма 10]» и «Молча пройти мимо».

После ответа бросок показывается одной строкой:

Диалоговое окно со строкой «[Харизма: 11 против 10] Успех».

Герой здесь — бродяга 1-го уровня с Харизмой 8; на d20 выпало 3, поэтому в сумме 11 против 10 — успех. История идёт по ветке успеха: странница отдаёт герою оберег.

Ветка успеха: «— Вежливый. Надо же. — Она бросает тебе оберег из клевера.

С суммой меньше 10 в строке стояло бы Провал, и история ушла бы по другой ветке, где она отворачивается.

Сценарий за этим

Из rpg_plus_game/scenarios/rpg_plus/prologue.scenario (строки сокращены):

option "Вежливо спросить дорогу [Харизма 10]" -> :ask_way
option "Молча пройти мимо" -> :leave

:ask_way
check cha 10 who=rpg_hero else=snub -> :gift

:gift
text "— Вежливый. Надо же..."
action item.add id=classic/clover_charm
goto -> :leave

:snub
text "— Найдёшь сам..."

check cha 10 бросает Харизму против сложности 10. При успехе переход к метке после стрелки, при провале — к метке из else=. Без else= провал просто продолжается следующей строкой.

Команда check

check <stat> <difficulty> [who=player] [dice=d20] [bonus=2] [else=label] [quiet=1] -> :label
  • <stat> — id стата из игры, например cha или str.
  • <difficulty> — число, которое нужно достичь: проверка успешна, когда сумма не меньше него.
  • who= — id персонажа или player (по умолчанию).
  • dice= — d20, 2d6, 1d100 и так далее. none ничего не бросает: проверка превращается в простой порог — решает только стат, всегда одинаково. Удобно в новелле («достаточно ли смел»).
  • bonus= — прибавляется к сумме; может быть отрицательным.
  • else= — метка для провала.
  • quiet=1 — не показывать строку броска.

Сумма — это стат + кубик + бонус.

Кубик по умолчанию

Без dice= проверка берёт настройку игры checks.dice, иначе d20. RPG Plus задаёт её в своей коллекции:

"settings": { "checks.dice": "d20" }

Игра, которая хочет обойтись во всех проверках без случайности, ставит "checks.dice": "none".

Свой рассказ об исходе

После проверки бросок лежит в этих переменных диалога: check_stat, check_value, check_roll, check_bonus, check_total, check_dc и check_result. С quiet=1 строка ptext может рассказать о нём словами истории:

check str 14 quiet=1 else=stuck -> :open
:stuck
ptext "Ты выжимаешь все свои ${check_total}, но дверь держится."

Стандартная строка — ключ перевода checks/line ([${check_stat}: ${check_total} против ${check_dc}] ${check_result}); игра может переопределить его в своих файлах локализации.

Если что-то пошло не так

  1. В сумме только кубик. Id стата неверный, либо у персонажа нет такого стата.
  2. Результат всегда одинаковый. У игры checks.dice равен none, либо в строке написано dice=none.
  3. Каша вместо кубика. Неправильная запись dice= не ломает сцену, а просто ничего не бросает — проверка превращается в простой порог. Пишите кости как d20, 2d6, 1d100.