Edited online

oreolek 2015-08-14 11:30:08 +00:00
parent 676bfe7daa
commit 2df6c769cb

@ -0,0 +1,43 @@
## Модуль emphasis ##
Модуль позволяет отказаться от функций `txtb` и `txtem` в основном коде игры. Вместо них используется простой синтаксис выделения текста, скопированный из Markdown. Вместо сложного `pn "Привет"..txtem("Игрок")` вы можете написать просто `pn "Привет *Игрок*"`.
**Использование:**
**полужирный** или __полужирный__
*курсив* или __курсив__
Просто подключите `require "emphasis"` и пользуйтесь этими короткими сокращениями. Модуль подключает модуль `format`.
## Модуль choice ##
Наглядное использование этого модуля показано в игре ["Шестой город"](https://github.com/Oreolek/sixth_city). Он позволяет показывать фразы в диалогах на основе определённых критериев, которые различаются для каждой фразы. В результате получается сложный геймплей CYOA, основанный на множественных проверках условий.
Для начала покажу обычный диалог. Он ничем не отличается от стандартных диалогов INSTEAD, его можно сделать средствами обычного массива `phr`:
choose = choice {
nam = __('Столовая'),
dsc = __([[Передо мной стоит поднос с едой.]]),
obj = {
option(nil,'Съесть яблоко', nil, 'pl._ate = "apple"' ),
option(nil,'Съесть перец'), nil, 'pl._ate = "pepper"' ),
option(nil,'Запить водой'), nil, 'pl._drank = "water"' ),
}
}
Чем отличается этот диалог? Во-первых, он описан как объект типа `choice`. Во-вторых, его фразы находятся в массиве `obj` и описаны функциями `option`. Синтаксис функции `option` соответствует функции `phr`, только добавляется новый параметр: условие, при котором появляется фраза. Если это условие пусто (что на языке Lua описывается словом `nil`), то фраза показывается всегда. Давайте посмотрим, что можно сделать при помощи условий:
choose = choice {
nam = __('Столовая'),
dsc = __([[Передо мной стоит поднос с едой.]]),
obj = {
option(nil,'Съесть яблоко', nil, 'pl._ate = "apple"' ),
option("pl._ate ~= 'pepper'",'Съесть перец'), nil, 'pl._ate = "pepper"' ),
option("pl._ate == 'pepper'",'Запить водой'), nil, 'pl._drank = "water"' ),
}
}
Теперь третья фраза изначально не видна. Если игрок выберет вторую, то вторая тут же скроется, и появится третья. Условия могут быть также функциями, которые возвращают булево значение (`true` или `false`). Условия могут быть сколь угодно сложными, они могут проверять всё состояние игры.
Здесь также важно то, что условия проверяются при каждой отрисовке комнаты: игрок может активировать предмет в инвентаре, и у него тут же поменяется набор вариантов. Объект choice может реагировать даже на изменение настроек самого INSTEAD — всё, что придёт вам в голову. Это часто удобнее, чем выставлять показ/скрытие каждой фразы явным образом.