![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Представление о структуре игры (часть 2)
Michael Makushev © (2003-06-02 11:49:00)
Продолжая тему логичеких структур в игре поднимаю следующий вопрос: Кто и как реализует логические сценарии? И как их сделать более гибкими?
Опять выскажу свое мнение: Использование своего скриптового языка? Или может быть какие-то структуры записей?
Есть интересные решения на триггерно-семафорных структурах. То есть допустим ИО (игровой объект) совершает какое-то действие 1 и срабатывает триггер, устанавливающий семафор 1 (вообще следовало их назвать флагами, но просто так звучит лучше, хотя разница есть). Затем пытается сделать действие 2 и срабатывает другой триггер, который проверяет установлен ли семафор 1. Если нет, то действие запрещается. И к тому же в перфом тригерре есть такая же проверка (на запрет повторного действия).
Это так навскидочку...может ещё кто ...?
cyborg (2003-06-03 10:42:00) [41]
Кен ты не прав, скоро сам поймёшь.
NailMan (2003-06-03 09:45:00) [42]
Alek Aaz ©
Не совсем. Если эти переменные описаны в самом скрипте.
ИМХО. Можно сделать набор правил и им следовать
Типа IF %obj and %obj.nastroenie> 20 then %obj.say(20)
Это, фактически, тебе придется писать свой Pascal. Гемор и еще раз гемор.
Я у себя буду делать проще - как в IW2-EOC. Я уже говорил про отдельные DLL, и вот что надумал:
вся логика миссии(задания) хранится в DLL, которая обменивается с ядром через сеть флагов в составе структуры переменной или статической размерности. DLL юзает текстовый файл со строчками диалогов просто как с контейнером. Такой подход к сценарию немножко негибок, но зато избавляет от написания интерпретатора скрипт-языка и геморройной ручной связки событий и написания этого здоровенного скрипта. Тем более скорость при юзании DLL-миссий будет на порядок выше чем скрипт.
Типа это даже лучше для дальейшего юзания игры - если будет скрипт, то кто-то(пираты какие-нить) смогут легко сделать свою игру на основе твоей с вытекающими последствиями. А с использованием DLL-миссий все жестко "прошито" и придется уже с тобой контактировать, чтобы иметь SDK твоей игры для написания новых DLL-миссий. Хотя я могу на этот счет ошибаться.
Alek Aaz (2003-06-03 03:48:00) [43]
> Использование каких-либо переменных-триггеров - это однозначно жесткая привязка к коду программы.
Не совсем. Если эти переменные описаны в самом скрипте.
ИМХО. Можно сделать набор правил и им следовать
Типа IF %obj and %obj.nastroenie> 20 then %obj.say(20)
Как пока еще не придумал. Лучше(для гибкости) конечно скриптами, но боюсь тормозить будет...
Кен (2003-06-03 03:19:00) [44]
Опять эта тема поднимается. Обсуждалось же пару недель назад.
Через сумку героя можно всем управлять. Этого вполне достаточно чтобы игру написать.
Есть у него в сумке пистолет, значит может им пользоваться. Нету, значит нету.
И диалоги с персонажами игры. Чтобы получать задания и брать у них одни вещи и отдавать другие.
Тестер диалогов мой : http://www.triponavtika.narod.ru/game.zip
Если кто невидел и если кому надо.
NailMan (2003-06-02 17:20:00) [45]
Сейчас я в своей игре к самой реализации сценария не приступал, но расскажу как делал в первой своей(трагически погибшей) ДОСовской игре-РПГхе.
Там использовался некий скриптовый язык, наподобие бейсика. Комманды-функции выполняли все возможные действия над объектами и диалогом. Роль(частично) триггеров выполнял лист заданий игрока и последующая проверка файла обектов. Надо сказать для понимания моей архитектуры, следующее:
Карта была разделена на 2 файла: файл графических экранов(сама карта) и файл объектов. В последнем файле было описание всех объектов на каждой странице блока. Когда при обработке скрипта производился, скажем, поиск убитого врага, который должен быть побежден по сценарию, то функция находила "труп" в этом файле и давала "добро" для последующего кода скрипта, где игроку давались либо девайсы, либо дальнейшие задания.
Очень гибкий и легкий механизм создания сценария. Можно изменять что угодно не изменяя код программы.
Использование каких-либо переменных-триггеров - это однозначно жесткая привязка к коду программы. Хотя миссии можно выполнить в виде DLL и при сохранении в сейв будут сохраняться стейты для текущей DLL-ки(миссии). Программе в принципе можно и не занать что там в DLL делается, главное передавать туда нужные данные.
Собсно сейчас так и делают.