Это старая версия документа!
Для начала повторим основное правило.
Игрок всегда находится в какой-нибудь одной активной комнате. Если он выходит из этой комнаты, он попадает в другую.
Вы всегда можете получить объект комнаты, в которой находится игрок, при помощи функцииsalet.here()
Комнаты как куски текста
Комнаты всегда объявляются одинаковым образом. В самом простом виде это выглядит так:
room "pirate", dsc: """ Капитан Блад улыбается и быстро вытаскивает саблю. Резким движением капитан срезает кошелёк с ничего не подозревающего прохожего, рассыпая монеты, а затем делает шаг в сторону, превращаясь обратно в обычного зеваку. * [Вмешаться](intervene) * [Наблюдать дальше](watch) """
Давайте разберём это объявление.
room
- это название функции room(), которая объявляет собственно комнату. Вы можете написать свою функцию, которая будет называться по-другому и делать объекты другого типа.
"pirate"
- это ID комнаты. По этой строке вы можете обратиться к этой комнате. По умолчанию ID должен содержать только латинские буквы, символы _-
и цифры. (Это меняется в ядре Salet через параметр salet.linkRe
)
Например, кодsalet.getRoom("pirate")
вернёт объект комнаты, кодsalet.goTo("pirate")
перенесёт в неё игрока, а кодsalet.isVisited("pirate")
расскажет, посещал ли уже игрок эту комнату.
dsc
- это свойство комнаты. Вы можете объявить сколько угодно свойств; конкретно свойство dsc
задаёт описание комнаты. Это тот текст, который видит игрок каждый раз, когда входит в комнату. Текст задан внутри тройных кавычек """
и обрабатывается в формате Markdown.
Текст dsc
содержит ссылки, которые ведут на другие комнаты.
Если после клика на ссылку игрок переходит в другую комнату, то весь текст предыдущей комнаты стирается - игрок уже ушёл оттуда.
Вы можете запретить стирать текст предыдущей комнаты, указав у комнаты свойство clear: false
Если вы запретите стирать, то текст останется, но все ссылки в нём исчезнут - станут обычным текстом, потому что игрок больше не может действовать в прошлом. Это поведение тоже можно изменить при помощи "клейких" ссылок.
Также см. главу Действия, в которой описываются ссылки, действующие внутри текущей комнаты.
Классы ссылок
Ссылка не обрабатывается Salet, если у неё есть класс raw
, например: <a href="out" class="raw">Наружу</a>
.
Она не стирается при переходе в другую комнату, если у неё есть класс sticky
.
Ссылка стирается после первого клика, если у неё есть класс once
.
Вместо того, чтобы вручную писать HTML код каждый раз, когда вам нужна особая ссылка, вы можете сделать функцию CoffeeScript и вставлять её прямо в текст:
textlink = (content, ref) -> return "<a href='./_writer_#{ref}' class='once'>#{content}</a>" ... dsc = "Привет #{textlink('всем', 'all')}"
Комнаты как локации
room "milkroom", dsc: """ ### Мраморный зал Вы находитесь в просторной комнате, выточенной внутри огромной горы молочного камня. Пол и стены замусорены подписями и знаками от предыдущих посетителей. """
С другой стороны, в Salet есть модель мира. И по этой модели, комната уже похожа на реальное строение из стен, пола и потолка.
Комнаты связываются между собой путями и могут содержать элементы. Они следят за тем, когда игрок выходит и входит в них.
Элементы
Элементы задаются в свойстве units
. Подробнее см. отдельную главу.
Пути
Пути - это особый вид ссылок, который введён для упрощения навигации. Вместо того, чтобы объявлять объект или делать ссылку, которая при нажатии будет вести в другую комнату, достаточно объявить свойство ways
и добавить туда ID комнаты, в которую возможно выйти:
ways: ["plaza"] title: "Мраморный зал"
Salet автоматически проходит по массиву ways
и выводит ссылки на каждую комнату при помощи их свойств title
. Так, если в комнате plaza
задано свойство title: "Площадь"
, то вместо ID plaza
будет выведено именно "Площадь". Названия комнат могут быть функцией, т.е. зависеть от текущего состояния игры.