# Stat Checks — бросаем стат против сложности Stat Checks добавляет к сценариям одну команду, `check`: взять стат персонажа, прибавить бросок кубика и бонус, сравнить сумму со сложностью и продолжить историю в зависимости от успеха или провала. Визуальная новелла уговаривает ею стражника, тайловая RPG выламывает ржавую дверь. Сами статы приносят Stats Engine и правила игры (в RPG Plus — Classic RPG Rules). ## В игре В прологе RPG Plus на перекрёстке сидит странница. Один из ответов сам называет свою проверку — Харизма против 10: ![Перекрёсток в сумерках; вопрос «Что скажешь ей?» и два ответа: «Вежливо спросить дорогу [Харизма 10]» и «Молча пройти мимо».](assets/seer-choice.jpg) После ответа бросок показывается одной строкой: ![Диалоговое окно со строкой «[Харизма: 11 против 10] Успех».](assets/check-line.jpg) Герой здесь — бродяга 1-го уровня с Харизмой 8; на d20 выпало 3, поэтому в сумме 11 против 10 — успех. История идёт по ветке успеха: странница отдаёт герою оберег. ![Ветка успеха: «— Вежливый. Надо же. — Она бросает тебе оберег из клевера.](assets/check-branch.jpg) С суммой меньше 10 в строке стояло бы *Провал*, и история ушла бы по другой ветке, где она отворачивается. ## Сценарий за этим Из `rpg_plus_game/scenarios/rpg_plus/prologue.scenario` (строки сокращены): ```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 ```scenario check [who=player] [dice=d20] [bonus=2] [else=label] [quiet=1] -> :label ``` - `` — id стата из игры, например `cha` или `str`. - `` — число, которое нужно достичь: проверка успешна, когда сумма не меньше него. - `who=` — id персонажа или `player` (по умолчанию). - `dice=` — `d20`, `2d6`, `1d100` и так далее. `none` ничего не бросает: проверка превращается в простой порог — решает только стат, всегда одинаково. Удобно в новелле («достаточно ли смел»). - `bonus=` — прибавляется к сумме; может быть отрицательным. - `else=` — метка для провала. - `quiet=1` — не показывать строку броска. Сумма — это **стат + кубик + бонус**. ### Кубик по умолчанию Без `dice=` проверка берёт настройку игры `checks.dice`, иначе `d20`. RPG Plus задаёт её в своей коллекции: ```json "settings": { "checks.dice": "d20" } ``` Игра, которая хочет обойтись во всех проверках без случайности, ставит `"checks.dice": "none"`. ### Свой рассказ об исходе После проверки бросок лежит в этих переменных диалога: `check_stat`, `check_value`, `check_roll`, `check_bonus`, `check_total`, `check_dc` и `check_result`. С `quiet=1` строка `ptext` может рассказать о нём словами истории: ```scenario 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`.