5.6 KiB
Stat Checks — бросаем стат против сложности
Stat Checks добавляет к сценариям одну команду, check: взять стат персонажа, прибавить бросок кубика и бонус, сравнить сумму со сложностью и продолжить историю в зависимости от успеха или провала. Визуальная новелла уговаривает ею стражника, тайловая RPG выламывает ржавую дверь. Сами статы приносят Stats Engine и правила игры (в RPG Plus — Classic RPG Rules).
В игре
В прологе RPG Plus на перекрёстке сидит странница. Один из ответов сам называет свою проверку — Харизма против 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}); игра может переопределить его в своих файлах локализации.
Если что-то пошло не так
- В сумме только кубик. Id стата неверный, либо у персонажа нет такого стата.
- Результат всегда одинаковый. У игры
checks.diceравенnone, либо в строке написаноdice=none. - Каша вместо кубика. Неправильная запись
dice=не ломает сцену, а просто ничего не бросает — проверка превращается в простой порог. Пишите кости какd20,2d6,1d100.
![Перекрёсток в сумерках; вопрос «Что скажешь ей?» и два ответа: «Вежливо спросить дорогу [Харизма 10]» и «Молча пройти мимо».](/cthangover/mod_stat_checks/media/commit/91c9b6f630dfd1db4c35e4dd019171a0f3f2543b/docs/assets/seer-choice.jpg)
![Диалоговое окно со строкой «[Харизма: 11 против 10] Успех».](/cthangover/mod_stat_checks/media/commit/91c9b6f630dfd1db4c35e4dd019171a0f3f2543b/docs/assets/check-line.jpg)
