Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

   #1
12.08.2018 18:02

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

FireURQ Adventure System (Адвентюрная Система)

Решил открыть тему, так как интересует ваше мнение о созданном движке на FireURQ

Внешне о работе движка вы могли судить по таким проектам на FireURQ:
1. Церковь смерти
2. Клара - расхитительница варенья
3. Выкуп Короля
4. Акрон
5. Вот, дерьмо!
6. Кайлет
7. Гремлины

Из чего состоит игра на моём движке?
1. Системная часть (общая для всех игр)
2. Игровая часть

В системную часть входит:
1. Первоначальные настройки интерфейса и общих игровых сообщений
2. Движок
3. Словарная База глаголов, предлогов, существительных, местоимений, прилагательных
4. Встроенные шрифты, звуки, компас

Игровая часть состоит из
1. Настройки игры (интерфейс)
2. Данные локаций, предметов, персонажей
3. Проверки
4. Игровые сообщения (видоизменение изначальных игровых сообщений, если их нужно изменить.)
5. Экран заставки и предыстории
6. Файлы шрифтов, графики, звуков


На диске в игре (в разархивированном варианте) есть несколько папок:
1. Со шрифтами к игре (если используются шрифты не встроенные в систему)
2. С графикой (если она имеется в игре)
3. Со звуками (если они есть в игре)
4. С листингами игры
5. С системной папкой, куда входят листинги системной части, системный компас, системные шрифты, системные звучки
6. Со скином
Скин и запускающий файл

Во время разработки есть возможность посмотреть некоторые переменные движка нажав F2. При этом выведутся на экран переменные парсера (ГЛАГ, СУЩ, ПРЕДЛ, СУЩ2, ПРЕДЛ2, ПРИЛ, МЕСТ) , номер текущей локации. Повторное нажатие F2 закроет это окно. Данную возможность я в играх не блокировал, можете посмотреть. Получше она выглядит в последней разработке Гремлинов.

Что отличительного в моем движке от других известных мне?

Проверки в нём устроены построчно, как на Бэйсике. И выглядят примерно так:

IF ГЛАГ = ДВИГАТЬ AND СУЩ = КАРТИНУ AND ROOM = L_ГОСТИНАЯ AND FLAG14 = 0 THEN FLAG14 = 1 & PROC PRINT("Ты сдвинул картину и из-за неё выпало что-то.") & PROC BRIN(I_КЛЮЧ) & PROC LOOK & GOTO WAIT

Эта строчка проверит такие введённые фразы игроком:

ПОДВИНУТЬ КАРТИНУ или КАРТИНУ ПОДВИНЬ  (в строчке переменная ДВИГАТЬ имеет цифровое значение, которому соответствуют несколько разных вариантов данного слова, поэтому проверятся СДВИНУТЬ, СДВИНЬ, ДВИГАЙ, СДВИНУ, ПОДВИГАЮ и т.д.)
СДВИНЬ НЕМНОГО КАРТИНУ В ГОСТИНОЙ, В ГОСТИНОЙ НЕМНОГО СДВИНЬ КАРТИНУ (слово немного отсутствует в словаре, поэтому оно проигнорируется, а слово гостиная не учитывается в данной проверке)
СДВИНЬ ЕЁ, ЕЁ СДВИНЬ ЧУТЬ-ЧУТЬ  (если перед этим ты работал с картиной: осматривал, изучал, читал, щупал). Движок автоматом слово ЕЁ переделывает в КАРТИНУ

ГЛАГ - это переменная, содержащая номер введённого глагола. Можно было бы проверить и IF ГЛАГ = 17 ... Но цифры не так наглядны, как слова, поэтому например, константе ДВИГАТЬ можно присвоить значение 17, а константе КАРТИНУ - 145. И использовать эти константы для проверок. Константа L_ГОСТИНАЯ то же имеет свой номер и заносится он в данных локаций. Движковая процедура BRIN() - это команда, которая помещает предмет в текущую локацию. Номер предмета или имя константы предмета должно быть первым параметром. Команда PROC LOOK перепишет заново описание локации вместе с доступными предметами в ней. Это нужно для того, чтобы ключ вывелся в описании сцены.

Учебника по движку я не создавал, поэтому не предлагаю другим использовать мой движок для написания игр. Но хотелось бы услышать мнение о внешней стороне работы самих игр на данном движке.
Например, Корвин посоветовал ввести дополнение к движку в виде истории введённых фраз, что и было реализовано. (курсорными стрелками вниз и вверх)
Из инстедовского метапарсера я позаимствовал возможность осмотра объекта только по введённому существительному. Из INFORM взял идею справки, команды МЕСТА

Если кто-то захочет использовать движок и сделать подобные игры на нём, то пишите на мою почту, постараюсь ответить. Движок последней версии зашифрован. Если будете использовать, то так в шифрованном виде и используйте. Всё остальное - Словарь, Настройки и др. в открытом для программиста виде.
С чего я начинаю? У меня есть шаблон игр, листинги которого я копирую в новую папку, корректирую нужное, удаляю ненужное.  Дополнительные слова игры (глаголы и существительные) если таковых нет ещё, то дополняю в системной базе.

Вот некоторые имена процедур, которые используются в проверках:

BRIN() - создание объекта в текущей локации
GET() - взятие предмета
DROP() - бросание предмета
PRINT() - вывод сообщения
LOOK() - перерисовка описания локации (иллюстрация, описание, предметы, выходы)
DESC() - вывод строчки описания локации (без предметов и выходов)
HIDDEN() - скрыть или удалить предмет
SWAP() - поменять между собой два предмета, например Металлический брусок на готовый меч
GOTOR() - перейти игроку в другую локацию
DECR() - уменьшить счетчик на 1
INCR() - увеличить счетчик на 1
SET() - включить флаг
RESE() - выключить флаг
WEAR() - надеть предмет
UNWEAR() - снять предмет
PIC() - вывести картинку
PRESSKEY("<НАЖМИ ВВОД>") - пауза в игре
CONTAINER() - вывод содержимого контейнера

WAIT - метка выхода из проверок
EXIT - метка выхода из проверок с окончанием игры

Прикреплённый файл - это снимок окна редактора с частью листинга проверок.  Некоторые метки в листинге не являются метками процедур, а служат только для быстрого перехода на это место во время редактирования программы, кликая в редакторе на метку в левом окне.

Отредактировано Vladimir (27.08.2018 04:37)


Прикрепленные файлы:
Снимок26.PNG, Размер: 124,592 байт, Скачано: 3

Неактивен

   #2
23.08.2018 07:40

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Сегодня к движку добавил некоторые общие проверки.
1. При осмотре объекта (если конкретно нет информации по объекту) - выводится фраза, в зависимости от рода объекта- пример: "Я не вижу в нём ничего особенного.",  "Я не вижу в ней ничего особенного.",  "Здесь его нет."  и т.д.
2. При взятии объекта (если не получается взять) - выводятся фразы В ЗАВИСИМОСТИ ОТ РОДА И ЧИСЛА ОБЪЕКТА - пример: "Здесь его нет." "Взять её нельзя."  "У меня оно уже есть."
3. При выбрасывании объекта (если не получается выбросить) - выводятся фразы В ЗАВИСИМОСТИ ОТ РОДА И ЧИСЛА ОБЪЕКТА - пример:   "У меня его нет."

Для того, чтобы это работало, нужно к каждому объекту игры добавить одно местоимение: либо "он", либо "она", либо "они", либо "оно". Остальные производные (его, её, их...) движок смоделирует самостоятельно.
Если это не прописать, то движок возьмёт общее "это" и смоделирует "этом"- например: Я не вижу в этом ничего особенного. У меня этого нет. Взять это нельзя.

Отредактировано Vladimir (23.08.2018 20:58)


Прикрепленные файлы:
Снимок.PNG, Размер: 29,007 байт, Скачано: 20

Неактивен

   #3
23.08.2018 17:01

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Сделал в движке возможность брать два предмета одной фразой, например:

ВОЗЬМИ НОЖ И ЗАЖИГАЛКУ
ПОДНИМИ КЛЮЧ С ДОСКОЙ

"И" и "С" при этом обязательны и будут разделять существительные.

Отредактировано Vladimir (23.08.2018 21:06)


Прикрепленные файлы:
Снимок2.PNG, Размер: 30,058 байт, Скачано: 32

Неактивен

   #4
24.08.2018 04:03

Korwin
Гоблин, зеленый от недосыпа (+152, -9)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 780
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: FireURQ Adventure System (Адвентюрная Система)

Владимир,  изначальный движок G.A.C. вами не просто переведен, а написан с нуля на платформе FireURQ так, что фактически взята только идея.
Возникает законный вопрос: на каких условиях движок распространяется? Можно ли его использовать для создания своих игр (некоммерческих, коммерческих)? Последние маловероятны, но хочется понять правовой аспект. Поскольку есть желание написать парсерную игру на КРИЛ - 2018, и есть выбор между платформами.

Неактивен

   #5
24.08.2018 08:57

Wol4ik
Участник (+241, -75)
Зарегистрирован: 25.05.2017
Сообщений: 185
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Vladimir написал:

Сделал в движке возможность брать два предмета одной фразой, например:

ВОЗЬМИ НОЖ И ЗАЖИГАЛКУ
ПОДНИМИ КЛЮЧ С ДОСКОЙ

"И" и "С" при этом обязательны и будут разделять существительные.

Владимир, а у тебя не возникало желания выложить на https://github.com/ функциональные части движка в сборе и по отдельности в виде сырого фурк-кода (как он есть в редакторе) + код короткой показательной игры + ссылки на плеер и спец.редактор. А  вместо документации, на первое время, твои отчёты которые ты постил, возможно доку смогут составить заинтересованные пользователи, на основе кода и твоих заметок о цикле работы движка и его деталях.  Новые версии парсерного движка можно релизить там же просто новыми файлами. Многие пользуются гитхабом, тем более это способ сохранить твою работу, уверен что многие уркописатели захотят склонировать себе твою базу кода.

Отредактировано Wol4ik (24.08.2018 08:59)

Неактивен

   #6
24.08.2018 23:04

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Korwin написал:

на каких условиях движок распространяется? Можно ли его использовать для создания своих игр (некоммерческих, коммерческих)? Последние маловероятны, но хочется понять правовой аспект. Поскольку есть желание написать парсерную игру на КРИЛ - 2018, и есть выбор между платформами.

Движок я постоянно совершенствую (что-то изменяю, что-то добавляю, что-то удаляю), поэтому если брать его для создания игр, то новые версии движка могут отличаться от предыдущих. Так, например у меня были процедуры игровых данных (локации, предметы, проверки) раньше на английском языке, сейчас они все на русском. Команды адвентюрного языка на английском, а переменные игры частично на английском (ROOM, CARR, OBJ) , а частично на русском (СУЩ ГЛАГ СУЩ2 ПРЕДЛ). Возможно, они так и останутся не измененными. Но сейчас я работаю над изменением переменных настроек (делаю их русскими), так что движок еще сырой и в стадии улучшения.

Документации к движку нет, поэтому если есть желание самому разобраться, то можете использовать в некоммерческих играх. Вопросы можно задавать в этой ветке форума. Если на моём движке игра зарабатывает деньги (на конкурсе или не на конкурсе), то желательно какой-то процент перечислить мне, как автору системы, да и Жучкову Антону было бы не плохо перечислить процент то же.

Отредактировано Vladimir (25.08.2018 01:59)

Неактивен

   #7
24.08.2018 23:06

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

К движку добавлена команда М (МЕСТА), которая выводит список посещённых локаций.


Прикрепленные файлы:
Снимок.PNG, Размер: 59,337 байт, Скачано: 16

Неактивен

   #8
25.08.2018 00:10

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Korwin написал:

Владимир,  изначальный движок G.A.C. вами не просто переведен, а написан с нуля на платформе FireURQ так, что фактически взята только идея.

За основу алгоритма работы движка был взят алгоритм работы G.A.C. Затем он немного был улучшен, чтобы можно было делать игры как у Adventure International, идея компаса заимствована из игр компании Legend Entertainment. Есть возможность делать игры со слотами для предметов.

Неактивен

   #9
25.08.2018 05:52

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

В движок добавлена возможность по нажатию на ВВОД (если ничего не вводилось в строку) менять режим иллюстрированной игры с графического режима на текстовой режим. Повторное нажатие на ВВОД меняет эти режимы. Реализовано в игре ГРЕМЛИНЫ версии 0.3

Отредактировано Vladimir (25.08.2018 05:57)


Прикрепленные файлы:
Гремлины 0.3.qsz, Размер: 5,311,630 байт, Скачано: 9

Неактивен

   #10
26.08.2018 08:52

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

В систему встроена возможность создавать справку игры по нажатию на кнопку F1. Реализовано в игре ГРЕМЛИНЫ версии 0.4


Прикрепленные файлы:
Гремлины 0.4.qsz, Размер: 5,370,581 байт, Скачано: 7

Неактивен

   #11
26.08.2018 12:48

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Обнаружен в системе недочёт: если в игре имеется несколько одинаковых предметов, например несколько дверей, то при общей команде (например, взять дверь или осмотреть дверь) этот объект может блокироваться предыдущим таким же объектом, но который находится в другой локации или блокируется первым по списку взятым предметом. Это я исправляю. Пример работы взятия с двумя одинаковыми объектами (используется одно и то же существительное)  прилагаю.

Для конкретизации предметов с одинаковыми существительными вводятся прилагательные, которые проверяются в проверках:

:пульт
if ГЛАГ = ОСМОТРЕТЬ AND СУЩ = ПУЛЬТ AND ПРИЛ = МИКШЕРНЫЙ AND ROOM = L_ГОСТИНАЯ THEN PROC PRINT("Это пульт настройки частоты и громкости звука.") & GOTO WAIT
PROC AVAI_TEST(I_ПУЛЬТ)
if ГЛАГ = ОСМОТРЕТЬ AND СУЩ = ПУЛЬТ AND (ПРИЛ = 0 OR ПРИЛ = ДИСТАНЦИОННЫЙ ) AND AVAI#I_ПУЛЬТ$ THEN PROC PRINT("Этот пульт имеет антенну и кнопки.") & GOTO WAIT

При таких двух проверках
ОСМОТРЕТЬ ПУЛЬТ - осмотр дистанционного пульта
ОСМОТРЕТЬ ДИСТАНЦИОННЫЙ ПУЛЬТ - то же самое
ОСМОТРЕТЬ ПУЛЬТ ПЕЛЬТЦЕРА - так же (так как пельтцера - синоним дистанционный)
ОСМОТРЕТЬ МИКШЕРНЫЙ ПУЛЬТ - осмотр микшерного пульта

Отредактировано Vladimir (26.08.2018 13:30)


Прикрепленные файлы:
Снимок19.PNG, Размер: 27,620 байт, Скачано: 21
Снимок20.PNG, Размер: 28,742 байт, Скачано: 23
Снимок21.PNG, Размер: 29,977 байт, Скачано: 21

Неактивен

   #12
26.08.2018 17:21

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

УРА! Я СДЕЛАЛ "РУССКИЙ" В СВОЕМ ДВИЖКЕ!

По типу ENGLISH в игре Hobbit.
Теперь моя система отлично понимает фразы и одинаково идентифицирует глаголы, существительные, прилагательные, предлоги в любом порядке. Например такие воспримутся одинаково:

УДАРЬ ГРЕМЛИНА МЕЧОМ
МЕЧОМ УДАРЬ ГРЕМЛИНА
ГРЕМЛИНА УДАРЬ МЕЧОМ

или

ВОЗЬМИ МЕЧ
МЕЧ ВОЗЬМИ

или

КРАСНУЮ ДВЕРЬ ОТОПРИ
ДВЕРЬ КРАСНУЮ ОТОПРИ
ОТОПРИ КРАСНУЮ ДВЕРЬ

или

ЗАЙДИ НА КУХНЮ
НА КУХНЮ ЗАЙДИ
НА КУХНЮ ПОТИХОНЬКУ ЗАЙДИ

а на такие варианты: НА ЗАЙДИ КУХНЮ, или КУХНЮ НА ЗАЙДИ, или ЗАЙДИ КУХНЮ НА система ответит выводом об ошибке в русской речи.

или можно так:

МЕЧ НА ШКАФ ПОЛОЖИ
НА ШКАФ МЕЧ ПОЛОЖИ
ПОЛОЖИ НА ШКАФ МЕЧ
ПОЛОЖИ МЕЧ НА ШКАФ
МЕЧ ПОЛОЖИ НА ШКАФ

Но варианты ниже уже не пройдут:
ПОЛОЖИ ШКАФ НА МЕЧ
ШКАФ НА МЕЧ ПОЛОЖИ
ШКАФ ПОЛОЖИ НА МЕЧ
НА МЕЧ ШКАФ ПОЛОЖИ

так как в движке есть соответствующая блокировка.



Эта новая система работает в игре ГРЕМЛИНЫ версии 0.5. Движок там зашифрован. Обновил первый пост этой темы.

Отредактировано Vladimir (06.09.2018 19:21)


Прикрепленные файлы:
Снимок23.PNG, Размер: 30,444 байт, Скачано: 19
Снимок24.PNG, Размер: 64,540 байт, Скачано: 17

Неактивен

   #13
27.08.2018 01:45

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Нововведение!
Не работала фраза в игре "ОТРУБИ МЕЧОМ ГОЛОВУ ГРЕМЛИНА", так как парсер искал всего два существительных. Пришлось дополнить парсер ещё одним существительным СУЩ3

Положение его в тексте введённой фразы - NUM_СУЩ3

Отредактировано Vladimir (27.08.2018 01:46)


Прикрепленные файлы:
Снимок25.PNG, Размер: 88,024 байт, Скачано: 10

Неактивен

   #14
05.09.2018 11:41

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Нововведение!
В движок вставлена возможность редактирования фразы в её середине. Курсорными клавишами влево - вправо перемещается курсор, DEL - удаляет символ, нажатие остальных клавиш  - вставляют символ после курсора.

Неактивен

   #15
05.09.2018 16:59

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Нововведение!
Есть в движке возможность к игре создавать встроенную в справку систему подсказок для каждой локации отдельно. Проблемные объекты просто вводятся парсером и игрок получает подсказку в зависимости от состояния этого объекта. Например, есть в локации живой враг и он может быть мертвым. При живом враге выводятся одни подсказки, а при мертвом - либо другие, либо подсказок нет.


Прикрепленные файлы:
Снимок31.PNG, Размер: 37,846 байт, Скачано: 8

Неактивен

   #16
05.09.2018 19:25

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Каждая игра содержит данные локаций. Они записываются в файле <описания локаций.qst>

Формат создания описания локаций на примере из игры ГРЕМЛИНЫ:

Код:

L_СПАЛЬНЯ = 1
proc ЛОКАЦИЯ(1,"Спальня","     Я нахожусь в своей спальне.",0,0,0,0,0,2,"спальня_1", 1)
coordx1 = 220
coordy1 = 450

В первой строке для удобства программирования вводится константа L_СПАЛЬНЯ, содержащая порядковый номер локации. Начало константы - L_ от слова LOCATION

Далее в переменные локации заносятся данные с помощью процедуры ЛОКАЦИЯ() Первый параметр - номер локации, второй параметр - краткое имя локации, третий параметр - описание, с четвёртого по девятый - номера локаций, в которые можно перейти если вводить компасные направления СЕВЕР, ЮГ, ВОСТОК, ЗАПАД, ВВЕРХ, ВНИЗ.  Десятый параметр - имя файла графики. Одиннадцатый параметр - тип графики: 0 - png, 1 - gif

coordx1 и coordy1 - это координаты локации на карте игры, которая вызывается командой КАРТА и скрывается той же командой. 


Код:

:ЛОКАЦИЯ
i = ЛОКАЦИЯ_1 & v_desc#i$_short = ЛОКАЦИЯ_2
v_desc#i$_longe = ЛОКАЦИЯ_3
f_north#i$ = ЛОКАЦИЯ_4  & f_south#i$ = ЛОКАЦИЯ_5  & f_east#i$ = ЛОКАЦИЯ_6 & f_west#i$ = ЛОКАЦИЯ_7  & f_up#i$ = ЛОКАЦИЯ_8  & f_down#i$ = ЛОКАЦИЯ_9
v_pictures#i$ = ЛОКАЦИЯ_10
type_pic#i$ = ЛОКАЦИЯ_11
end

В проверках можно использовать переменные локации для их замены. Например вам нужно сменить картинку игры. Тогда достаточно в проверках заменить переменную v_picturesX, где X - номер локации и если нужно, то сменить и тип графики (type_picX). Или заменить описание одно на другое. Это делается путём замены содержимого переменной v_descX_longe, где X - номер локации. Можно использовать и переменную текущей локации, если меняется описание именно текущей локации:  v_desc$ROOM%_longe = "новый текст"

В проверках по локациям должна участвовать проверка на номер локации:

Код:

IF ROOM = L_СПАЛЬНЯ AND ....

Номер локации используется и в проверках объектов. Например, нужно проверить есть ли объект в локации:

Код:

IF OBJ#I_ФОНАРИК$ = L_СПАЛЬНЯ ....

если проверяется текущая локация, то можно проверить и так:


Код:

IF ROOM = L_СПАЛЬНЯ AND OBJ#I_ФОНАРИК$ = ROOM ....

Отредактировано Vladimir (05.09.2018 22:25)


Прикрепленные файлы:
Снимок32.PNG, Размер: 26,098 байт, Скачано: 3

Неактивен

   #17
05.09.2018 20:05

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Формат создания данных объектов игры. Они записываются в файле <данные предметов.qst>

Код:

I_КОКОНЫ = 1
proc ОБЪЕКТ(I_КОКОНЫ, 1, 'коконы гремлинов',0 , КОКОН, 0, 0, "", "они")

Первая строка - имя константы объекта, которое начинается с I_ (ITEM)
Вторая строка - занесение в переменные объекта данных с помощью процедуры ОБЪЕКТ(). Первый параметр - порядковый номер объекта (либо константа I_КОКОНЫ). Второй параметр - номер локации (либо имя константы L_СПАЛЬНЯ), где первоначально находится объект, третий параметр - текст объекта, который добавляется в список видимых объектов. Этот список в игре начинается со слов "Здесь я вижу". Эти же названия перечисляются по команде ИНВЕНТАРЬ (И). Четвертый параметр - вес объекта (если нужно), пятый параметр - константа из базы существительных, которое участвует в проверках по этому объекту. Если таких констант несколько, то в проверках делается так:

Код:

IF СУЩ = ЯЙЦО OR СУЩ = ОБОЛОЧКА THEN СУЩ = КОКОН

Шестой параметр - атрибут беручести (0 - нельзя взять, 1 - можно взять). Седьмой параметр - атрибут надетости (0 - не надет, 1 - надет). Восьмой параметр - текст, который добавляется к предмету в инвентаре, если объект надет. Девятый параметр - текст рода предмета (он, она, они, оно)

Количество всех предметов в игре записывается в константу c_quanity_items = 51


Код:

:ОБЪЕКТ
OBJ#ОБЪЕКТ_1$ =  ОБЪЕКТ_2
OBJ#ОБЪЕКТ_1$_name = ОБЪЕКТ_3
OBJ#ОБЪЕКТ_1$_вес = ОБЪЕКТ_4
OBJ#ОБЪЕКТ_1$_noun = ОБЪЕКТ_5
OBJ#ОБЪЕКТ_1$_carr = ОБЪЕКТ_6
OBJ#ОБЪЕКТ_1$_надето = ОБЪЕКТ_7
OBJ#ОБЪЕКТ_1$_сообщ_надето = ОБЪЕКТ_8
OBJ#ОБЪЕКТ_1$_сообщ_мест = ОБЪЕКТ_9
END

К этим переменным ещё движком добавляется переменная CARR#I_объект$, которая при взятии в инвентарь имеет 1, а при отсутствии в инвентаре имеет значение 0.

В проверках игры могут участвовать различные переменные объекта. Например, нужно проверить есть ли объект ФОНАРИК в текущей локации или в руках:

Код:

IF OBJ#I_ФОНАРИК$ = ROOM OR CARR#I_ФОНАРИК$ = 1 THEN ....

Так же в проверках можно сменить текст предмета на другой, изменив переменную OBJ#I_ФОНАРИК$_name = "горящий фонарик"


Персонажи записываются отдельно от предметов:

Код:

S_ГРЕМЛИН1 = 1 
PROC ПЕРСОНАЖ(S_ГРЕМЛИН1, " гремлин, метающий дротики", L_СПАЛЬНЯ , ГРЕМЛИН, 1, "он")

S - от английского Surface
параметры процедуры: первый - номер персонажа, второй - "текст", третий - номер локации нахождения, четвёртый - константа из словаря, атрибут здоровья (0 - нет в локации, другие - по необходимости), "род персонажа"

Количество всех персонажей в игре записывается в константу c_quanity_persona = 5

Код:

:ПЕРСОНАЖ
PERS#ПЕРСОНАЖ_1$_name = ПЕРСОНАЖ_2
PERS#ПЕРСОНАЖ_1$ = ПЕРСОНАЖ_3
PERS#ПЕРСОНАЖ_1$_noun = ПЕРСОНАЖ_4
PERS#ПЕРСОНАЖ_1$_здоровье = ПЕРСОНАЖ_5
PERS#ПЕРСОНАЖ_1$_сообщ_мест = ПЕРСОНАЖ_6
END

Отредактировано Vladimir (05.09.2018 22:23)


Прикрепленные файлы:
Снимок33.PNG, Размер: 28,839 байт, Скачано: 5
Снимок34.PNG, Размер: 25,745 байт, Скачано: 3

Неактивен

   #18
05.09.2018 20:57

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

СЛОВАРИ ДВИЖКА
Движок имеет словарь глаголов в файле <глаголы.qst>
Движок имеет словарь существительных в файле <существительные.qst>
Движок имеет словарь прилагательных в файле <прилагательные.qst>
Движок имеет словарь предлогов в файле <предлоги.qst>
Движок имеет словарь местоимений в файле <местоимения.qst>


Формат словаря глаголов
Вначале записывается константа слова, ей присваивается порядковый номер глагола в списке.
Затем константе ГЛАГX, где X - номер глагола или константа, записанная между #$ присваивается число производных этого глагола
Далее записываются производные в текстовые переменные, которые имеют свой порядковый номер на конце переменной.


Код:

СЕСТЬ = 37
ГЛАГ#СЕСТЬ$ = 5
ГЛАГ#СЕСТЬ$_1 = "СЕСТЬ"
ГЛАГ#СЕСТЬ$_2 = "СЯДУ"
ГЛАГ#СЕСТЬ$_3 = "СЯДЬ"
ГЛАГ#СЕСТЬ$_4 = "САДИСЬ"
ГЛАГ#СЕСТЬ$_5 = "САЖУСЬ"

Формат словаря существительных
Вначале записывается константа слова, ей присваивается порядковый номер существительного в списке.
Затем константе СУX, где X - номер существительного или константа слова, записанная между #$ присваивается число синонимов этого существительного
Далее записываются эти синонимы в текстовые переменные, которые имеют свой порядковый номер на конце переменной.


Код:

ФОТОКАМЕРА =  286
СУ#ФОТОКАМЕРА$ = 2
СУЩ#ФОТОКАМЕРА$_1 = "ФОТОКАМЕР*"
СУЩ#ФОТОКАМЕРА$_2 = "ФОТОАППАРАТ*"

Формат словаря предлогов
Вначале записывается константа слова, ей присваивается порядковый номер предлога в списке.
Затем константе ПРЕДX, где X - номер предлога или константа слова, записанная между #$ присваивается число синонимов этого предлога
Далее записываются эти синонимы в текстовые переменные, которые имеют свой порядковый номер на конце переменной.


Код:

СО =7
ПРЕД7 = 2
ПРЕДЛ7_1 = "С"
ПРЕДЛ7_2 = "СО"

В проверках участвуют только константы! Например:

Код:

IF ГЛАГ = СЕСТЬ AND ПРЕДЛ = НА AND СУЩ = ФОТОКАМЕРА THEN .....

Перед тем, как ввести строку проверок, убедитесь в наличии словарей необходимых слов и размещайте в коде константы нужных слов.



Парсировка фразы распределяет слова по таким переменным:
ГЛАГ - номер найденного первого глагола
ГЛАГ2 - номер второго найденного глагола
СУЩ - номер первого найденного существительного
СУЩ2 - номер второго найденного существительного
СУЩ3 - номер третьего найденного существительного
ПРЕДЛ - номер первого найденного предлога
ПРЕДЛ2 - номер второго найденного предлога
ПРИЛ - номер найденного прилагательного
МЕСТ - номер найденного местоимения

Эти переменные выводятся в движке по нажатию на F2

Положение этих слов в строке введённой фразы можно узнать из таких переменных:
NUM_ГЛАГ
NUM_ГЛАГ2
NUM_СУЩ
NUM_СУЩ2
NUM_СУЩ3
NUM_ПРЕДЛ
NUM_ПРЕДЛ2
NUM_ПРИЛ
NUM_МЕСТ

Они могут использоваться для определения местонахождения предлога в фразе для блокировки ненужной комбинации, например: блокировка фразы ШКАФ НА МЕЧ ПОЛОЖИ, но разрешение МЕЧ НА ШКАФ ПОЛОЖИ

Отредактировано Vladimir (05.09.2018 22:21)


Прикрепленные файлы:
Снимок35.PNG, Размер: 44,465 байт, Скачано: 10
Снимок36.PNG, Размер: 25,031 байт, Скачано: 2
Снимок37.PNG, Размер: 29,386 байт, Скачано: 3

Неактивен

   #19
05.09.2018 21:56

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

СТАНДАРТНЫЕ СООБЩЕНИЯ

В движке используются некоторые стандартные сообщения, которые находятся в файле <настройки.qst> и настраиваются при запуске. Но их под свою игру можно переопределить в игровом файле <сообщения игры.qst>. Вот начало изменённых фраз.


Код:

:СООБЩЕНИЯ_ИГРЫ
MESS253 = "Здесь я вижу " ; начало перед перечислением предметов
MESS254 = "O.K."
MESS269 = "У меня ничего нет с собой."
MESS239 = "Я имею"
MESS240 = "ЧТО ДАЛЬШЕ?"
MESS241 = "Нет смысла это делать..." ;- выдается каждый раз, когда игрок пытается совершить действие, не предусмотренное условиями игры.

Отредактировано Vladimir (05.09.2018 21:58)


Прикрепленные файлы:
Снимок38.PNG, Размер: 18,702 байт, Скачано: 6

Неактивен

   #20
05.09.2018 22:17

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

ПРОВЕРКИ ИГРЫ

В файле <проверки.qst> содержатся процедуры проверок. Они разделяются на проверки ДО и ПОСЛЕ ввода команды:


1. ДО

:ПРОВЕРКИ_НОВЫХ_ЛОКАЦИЙ ; в этой процедуре проходят проверки при первом входе в локацию
:ПРОВЕРКИ_ОПИСАНИЙ ; в этой процедуре можно изменять описания локаций
:ПРОВЕРКИ_ДО_ВВОДА ; в этой процедуре можно устраивать различные события, сообщения которых выведутся до парсерного ввода

2. ПОСЛЕ

:ПРОВЕРКИ_НАПРАВЛЯЮЩИХ ; в этой процедуре проверяются команды, связанные с перемещениями по компасным направлениям
:ПРОВЕРКИ_В_ЛОКАЦИЯХ ; в этой процедуре проверяются команды, связанные с определёнными локациями
:ПРОВЕРКИ_ВЕЗДЕ ; в этой процедуре проверяются команды, которые не зависят от локаций. Обычно они связаны с предметами, которые можно взять.
:ПОДСКАЗКИ_ИГРЫ ; в этой процедуре устраиваются проверки системы подсказок


Прикрепленные файлы:
Снимок39.PNG, Размер: 119,200 байт, Скачано: 3

Неактивен

   #21
05.09.2018 22:58

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

ФЛАГИ И СЧЁТЧИКИ

В играх часто используют флаги и счетчики. Флаг - это переменная, имеющая обычно два разных состояния: 0 и 1. Счетчик - это переменная, которую можно увеличивать или уменьшать.
Флаги игры начинаются с имени FLAG
Счётчики игры начинаются с имени CTR
За этими началами имён идёт номер флага или счётчика. Например, FLAG12 или CTR6

В движке используются один счетчик CTR0 в качестве счетчика заработанных очков. В проверках этот счетчик можно увеличивать на 1 с помощью процедуры PROC INCR(0).
Также есть в движке два системных флага, которые можно изменять в проверках. Они влияют на освещение в локациях.
FLAG1 = 1 ; в комнате светло 1 или темно 0
FLAG2 = 0 ; у игрока нет освещения 0 или есть 1

Остальные флаги и счётчики автор может создавать и использовать по необходимости. Для удобства цифры флагов и счётчиков можно заменить константами, например:
У вас в игре есть дверь, которая может быть открытой или закрытой. Пусть закрытое её положение = 0, а открытое = 1. Для этого создаём флаг.
F_ДВЕРЬ = 25
FLAG#F_ДВЕРЬ$ = 0 что равнозначно FLAG25 = 0

Теперь в проверках при осмотре двери можно использовать этот флаг для вывода разных сообщений

Код:

IF ГЛАГ = ОСМОТРЕТЬ AND СУЩ = ДВЕРЬ AND FLAG#F_ДВЕРЬ$ = 0 THEN PROC PRINT("Эта дверь закрыта.") & GOTO WAIT
IF ГЛАГ = ОСМОТРЕТЬ AND СУЩ = ДВЕРЬ AND FLAG#F_ДВЕРЬ$ = 1 THEN PROC PRINT("Эта дверь открыта.") & GOTO WAIT

Точно так же можно цифры счетчиков заменить именами констант, помещённых между #$.
R_НАЖАЛ_ПУЛЬТ = 6
CTR#R_НАЖАЛ_ПУЛЬТ$ = 0 что равнозначно CTR6 = 0

Теперь в проверках можно использовать эту константу:

Код:

IF ГЛАГ = НАЖАТЬ AND СУЩ = КНОПКА THEN PROC INCR(R_НАЖАЛ_ПУЛЬТ) ;... что равнозначно
IF ГЛАГ = НАЖАТЬ AND СУЩ = КНОПКА THEN PROC INCR(6)

Неактивен

   #22
06.09.2018 04:39

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

ОФОРМЛЕНИЕ СЛОЖНЫХ ПРОВЕРОК

Иногда в игре встречаются разные сочетания слов с одним и тем же результатом, например в игре ГРЕМЛИНЫ:
врага можно уничтожить с помощью таких команд: УБИТЬ ГРЕМЛИНА, УДАРИТЬ МЕЧОМ ГРЕМЛИНА, РЕЗАНУТЬ ГРЕМЛИНА МЕЧОМ, ОТРУБИТЬ ГОЛОВУ ГРЕМЛИНА МЕЧОМ и всё это с одним и тем же результатом. Если все эти проверки уместить в одну строку, то будет сложный и нечитабельный текст. На FireURQ есть возможность оформлять строку более читабельно:

Код:

 if ROOM = L_ГОСТИНАЯ AND 
_ ( ГЛАГ = УБИТЬ OR ГЛАГ = РЕЗАТЬ OR ГЛАГ = РУБИТЬ OR ГЛАГ = УДАРИТЬ)
_ AND (
_    (СУЩ = ГРЕМЛИН AND СУЩ2 = 0) ; убить гремлина 
_ OR (СУЩ = МЕЧ AND СУЩ2 = ГРЕМЛИН) ; убить мечом гремлина
_ OR (СУЩ = ГРЕМЛИН AND СУЩ2 = МЕЧ) ; убить гремлина мечом
_ OR (СУЩ = ГОЛОВА AND СУЩ2 = ГРЕМЛИН AND (СУЩ3 = МЕЧ OR СУЩ3 = 0)) ; отрубить голову гремлину мечом или отрубить голову гремлину
_ OR (СУЩ = ГРЕМЛИН AND СУЩ2 = ГОЛОВА AND (СУЩ3 = МЕЧ OR СУЩ3 = 0)) ; отрубить гремлину голову мечом или отрубить гремлину голову
_     ) 
_ AND CARR#I_МЕЧ$ THEN v_pictures#ROOM$ = "гостиная_3" & PROC PRINT("О.К. Я мечом ударил гремлина так, что его голова отлетела в огонь камина.") & PROC INCR(0) & PERS2_name = " обезглавленный гремлин" & PERS2_здоровье = 2 & PROC BRIN(I_ГОЛОВА) & PROC LOOK & GOTO WAIT

Неактивен

   #23
06.09.2018 14:26

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Нововведение!
В движок встроена проверка, облегчающая программирование игры. Теперь при работе с ПРЕДМЕТОМ НА ПЕРСОНАЖ (ДАТЬ МОНЕТУ ОГЕРОНУ или КИНУТЬ НОЖ В ГРМЛИНА) при другом раскладе существительных (ДАТЬ ОГЕРОНУ МЕЧ или КИНУТЬ В ГРЕМЛИНА НОЖ) переменные СУЩ и СУЩ2 приводятся в единый формат, где в СУЩ всегда ПРЕДМЕТ, а в СУЩ2 всегда ПЕРСОНАЖ.

Это нововведение позволяет сократить проверки игры. Например, проверка из выше приведённого поста теперь выглядит так:

Код:

if ROOM = L_ГОСТИНАЯ AND 
_ ( ГЛАГ = УБИТЬ OR ГЛАГ = РЕЗАТЬ OR ГЛАГ = РУБИТЬ OR ГЛАГ = УДАРИТЬ)
_ AND (
_    (СУЩ = ГРЕМЛИН AND СУЩ2 = 0) ; убить гремлина 
_ OR (СУЩ = МЕЧ AND СУЩ2 = ГРЕМЛИН) ; убить мечом гремлина [или убить гремлина мечом]
_ OR (СУЩ = ГОЛОВА AND СУЩ2 = ГРЕМЛИН AND (СУЩ3 = МЕЧ OR СУЩ3 = 0)) ; отрубить голову гремлину мечом или отрубить голову гремлину
_ OR (СУЩ = ГРЕМЛИН AND СУЩ2 = ГОЛОВА AND (СУЩ3 = МЕЧ OR СУЩ3 = 0)) ; отрубить гремлину голову мечом или отрубить гремлину голову
_     ) 
_ AND CARR#I_МЕЧ$ THEN v_pictures#ROOM$ = "гостиная_3" & PROC PRINT("О.К. Я мечом ударил гремлина так, что его голова отлетела в огонь камина.") & PROC INCR(0) & PERS2_name = " обезглавленный гремлин" & PERS2_здоровье = 2 & PROC BRIN(I_ГОЛОВА) & PROC LOOK & GOTO WAIT

В движке вариант УДАРИТЬ ГРЕМЛИНА МЕЧОМ автоматом переводится в УДАРИТЬ МЕЧОМ ГРЕМЛИНА (ПЕРЕДМЕТОМ НА ПЕРСОНАЖ)

Отредактировано Vladimir (06.09.2018 14:33)

Неактивен

   #24
07.09.2018 14:21

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

Нововведение!
В движок встроены ещё некоторые дополнения.

1. Вставил возможность переходить в другие локации без глагола, например так: НА КУХНЮ, В ДВЕРЬ, НА СТАНЦИЮ. При этом предлоги НА, В (ВНУТРЬ), ЗА - обязательны. Движок эту форму записи проверяет и добавляет сам глагол ИДТИ. Остальное - дело рук автора. То есть в проверках необходимо проверять полный общий формат:

Код:

IF ГЛАГ = ИДТИ AND ПРЕДЛ = В AND СУЩ= ДВЕРЬ ...

. Если в игре есть похожий переход НА ДЕРЕВО, то необходимо проверку делать не только на глагол ЛЕЗТЬ (ПОДНЯТЬСЯ), но и ИДТИ:

Код:

IF (ГЛАГ = ЛЕЗТЬ OR ГЛАГ = ИДТИ) AND ПРЕДЛ = НА AND СУЩ = ДЕРЕВО ...

2. Встроил в движок проверки на любые действия с берущемся предметом и не берущемся объектом, например ФОНАРИК и ЯЩИК. Фонарик - берущийся объект, Ящик - не берущийся объект. Эти атрибуты устанавливаются в данных объектов. Форма ввода: ГЛАГОЛ ЯЩИК ПРЕДЛОГ ФОНАРИК будет блокирована. Возможно, нужно будет сделать исключение для глагола ОПРОКИНУТЬ (ТОЛКАТЬ), так как можно ОПРОКИНУТЬ ГЛЫБУ НА КОНТЕЙНЕР.  Объект ГЛЫБА не берётся в инвентарь, но её можно СВАЛИТЬ на что-либо берущееся.

Неактивен

   #25
16.09.2018 05:52

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: FireURQ Adventure System (Адвентюрная Система)

УЛУЧШЕНИЕ ДВИЖКА

Сделал правильный РУССКИЙ вывод заработанных очков игры и количество сделанных ходов за игру. То есть при разных числах выводится соответствующее окончание слов: очков, очка, очко, ходов, ход, хода.
Выводится по команде СЧЕТ (СЧЁТ), ВЫВЕСТИ СЧЕТ, ОСМОТРЕТЬ СЧЕТ

Отредактировано Vladimir (16.09.2018 05:53)


Прикрепленные файлы:
Снимок40.PNG, Размер: 62,303 байт, Скачано: 13

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru