Edited online
parent
676bfe7daa
commit
2df6c769cb
43
Использование.md
Normal file
43
Использование.md
Normal file
|
@ -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 — всё, что придёт вам в голову. Это часто удобнее, чем выставлять показ/скрытие каждой фразы явным образом.
|
Loading…
Reference in a new issue