Edited online
parent
649c5ad9b9
commit
3c94dc2e0b
44
Guide.md
Normal file
44
Guide.md
Normal file
|
@ -0,0 +1,44 @@
|
|||
# [English guide] Usage
|
||||
## emphasis module
|
||||
|
||||
This module lets you ditch `txtb` and `txtem` functions in the game main code. Вместо них используется простой синтаксис выделения текста, скопированный из Markdown. Вместо сложного `pn "Привет"..txtem("Игрок")` вы можете написать просто `pn "Привет *Игрок*"`.
|
||||
|
||||
**Usage:**
|
||||
|
||||
**bold** or __bold__
|
||||
*italic* или __italic__
|
||||
|
||||
Просто подключите `require "emphasis"` и пользуйтесь этими короткими сокращениями. Модуль подключает модуль `format`.
|
||||
|
||||
## choice module
|
||||
|
||||
Наглядное использование этого модуля показано в игре ["Шестой город"](https://github.com/Oreolek/sixth_city). Он позволяет показывать фразы в диалогах на основе определённых критериев, которые различаются для каждой фразы. В результате получается сложный геймплей CYOA, основанный на множественных проверках условий.
|
||||
|
||||
Для начала покажу обычный диалог. Он ничем не отличается от стандартных диалогов INSTEAD, его можно сделать средствами обычного массива `phr`:
|
||||
|
||||
choose = choice {
|
||||
nam = 'Diner',
|
||||
dsc = [[I see some food.]],
|
||||
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 = 'Diner',
|
||||
dsc = [[I see some food.]],
|
||||
obj = {
|
||||
option(function() return true end,'Eat an apple', nil, 'pl._ate = "apple"' ),
|
||||
option("pl._ate ~= 'pepper'",'Eat a pepper'), nil, 'pl._ate = "pepper"' ),
|
||||
option("pl._ate == 'pepper'",'Drink water'), nil, 'pl._drank = "water"' ),
|
||||
}
|
||||
}
|
||||
|
||||
Теперь третья фраза изначально не видна. Если игрок выберет вторую, то вторая тут же скроется, и появится третья. Условия могут быть также функциями, которые возвращают булево значение (`true` или `false`). Условия могут быть сколь угодно сложными, они могут проверять всё состояние игры.
|
||||
|
||||
Здесь также важно то, что условия проверяются при каждой отрисовке комнаты: игрок может активировать предмет в инвентаре, и у него тут же поменяется набор вариантов. Объект choice может реагировать даже на изменение настроек самого INSTEAD — всё, что придёт вам в голову. Это часто удобнее, чем выставлять показ/скрытие каждой фразы явным образом.
|
Loading…
Reference in a new issue