Я часто подумывал о том, как бы замутить квест (уж больно нравилась Кирандия). Могу высказать некоторые соображения. Если брать совсем грубо, то есть локации, в которых есть некоторые объекты. Игрок может воздействовать на эти объекты либо сам, либо с помощью других объектов. Он может помещать эти объекты в свой инвентарь и носить их с локации на локацию, и может класть их на землю. В результате воздействия на объекты могут происходить следующие вещи:
- объекты могут уничтожаться
- могут появляться новые объекты
- могут меняться свойства объектов
- могут изменять свои значения некоторые глобальные флаги и/или локальные флаги локации
- могут меняться качества персонажа
- может меняться отображение локации (описание и/или картинка)
- ...
В идеале хотелось бы сделать своего рода скриптовый язык, который бы все это описывал вот примерно так:
Код
Location Room1 {
Event OnEnter {
if Room1.Visited = 0
Room1.Visited = 1
Room1.DoorOpen = 0
AddItem(Room1,"Key1","Ключ","Большой ржавый ключ")
AddExit(Room1,"Door1","Дверь","Тяжелая дубовая дверь")
Text "Эта комната вам незнакома."
else
Text "В этой комнате вы уже бывали."
endif
Text "В северной стене видна дверь."
if Room1.DoorOpen = 1
Text "Она открыта."
else
Text "Она закрыта."
endif
ListAllItems
}
Event OnUse(Item1,Item2) {
if Item1 = "Key1"
if Item2 = "Door1"
if Room1.DoorOpen = 0
Room1.DoorOpen = 1
Text "Вы отперли дверь"
else
Room1.DoorOpen = 0
Text "Вы заперли дверь"
endif
else
Text "Ключ для этого не предназначен"
endif
else
Text "Ничего не происходит"
endif
}
...
}
Это просто набросок. Поэтому для начала нужно было бы спроектировать одну локацию с парой-тройкой предметов и описать ее на подобном псевдокоде, стремясь к тому, чтобы минимизировать число ключевых слов. На основе этого разработать язык скриптов. А потом писать его интерпретатор.
С другой стороны нужна еще система обработки команд пользователя. Опять-таки, вначале нужно составить перечень допустимых команд и написать их интерпретатор. А потом разработать систему формирования команд - либо через консольный ввод, либо через GUI. Все это было бы интересно... я могу принимать участие в обсуждении. А писать что-то всерьез не хочу - и так есть чем заняться.