Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #26
06.08.2011 15:17

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Что делать с контейнерами объекта, который может быть в нескольких экземплярах?

Есть объект "Река", который находится ("протекает") в нескольких локациях (этот пример мы обсуждали с Чеширом на канале #ifrus). Почему есть смысл сделать реку одним объектом? Да чтобы модули ("осмотреть", "посмотреться", "попить", "набрать воды") не дублировать — надо всего лишь один раз прописать взаимодействие с одним объектом "Река". Однако тут есть нюанс — а что, если нужно что-то положить в реку?

Можно реализовать это так — при перемещении каких-нибудь объектов в "Реку" на самом деле размещать их в специально выделенном для этой цели контейнере "ДноРеки", но принадлежащем не объекту "Река", а текущей локации:

Код:

GS 'ДобавитьВзаимодействие', 'Пистолет', 'Река', 'Бросить пистолет в реку', $ico['положить'], {
        Result = IIF(func('Местонахождение', ИГРОК, $ОБЪЕКТ1, '$ЛОКАЦИЯ:ДноРеки'), Пропускать, Использовать)
    }, 0, {
        if func('Переместить', ИГРОК, $ОБЪЕКТ1, 0, '$ЛОКАЦИЯ:ДноРеки') = Продолжить:
            GS 'ТекстНаЭкран', 'п. Вы бросили ((пистолет|$ОБЪЕКТ1)) в ((реку|$ОБЪЕКТ2)).'
        end
    }

При попытке взаимодействия "Пистолета" и "Реки" (при условии, что Пистолет уже не находится в контейнере "ДноРеки" текущей локации) "Пистолет" перемещается в контейнер "ДноРеки" текущей локации.

Соответственно, при выполнении осмотра дна "Реки" (что-то типа действия "Пошарить по дну реки") нужно просто дополнительно вывести содержимое контейнера "ДноРеки" текущей локации.

Наверное, стоит пока остановиться на этом обходном манёвре…

Неактивен

0    0    #27
10.08.2011 08:44

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Из-за введения понятия "Экземпляр объекта" (Объект + Местонахождение — пока это значит именно это) пришлось переделать большую часть модулей. Однако результатом доволен.

Неактивен

0    0    #28
10.08.2011 09:14

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Кстати, раз уж последнее, что я переделывал — это обработчик "ПриОпределенииМестонахождения", то расскажу немного о нём.
Обработчик "ПриОпределенииМестонахождения" относится к системным обработчикам, то есть вызывается фреймворком автоматически при отработке тех или иных ситуаций, связанных с определением местонахождения объекта.

Синтаксис обработчика пока следующий:

Код:

GS 'ПриОпределенииМестонахождения', <Инициатор>, <Объект>, <Местонахождение>, <Модуль>

Инициатор — кто определяет местонахождение.
Объект — местонахождение чего определяется.
Местонахождение — где именно определяется местонахождение объекта.

Вызов данного обработчика происходит во всех возможных комбинациях параметров, включая пустые, что позволяет обрабатывать такие ситуации, как, например, определение игроком (Инициатор="ИГРОК") местонахождения чего угодно (Объект=0) в локации "Зал" (Местонахождение="Зал").

Попробую проиллюстрировать как задаётся и используется данный обработчик на примере. Допустим, игрок должен вынести из помещения статуэтку. На выходе стоит сканер, который срабатывает в случае, если обнаруживает что-нибудь у игрока при выходе из помещения. Однако, если у сканера отключить питание, то ничего обнаруживать он не должен. В этом случае как раз и пригодится обработчик "ПриОпределенииМестонахождения":

Код:

GS 'ПриОпределенииМестонахождения', 'Сканер', 0, ИГРОК, {
    if func('Свойство', 0, 'Сканер', 'Питание'):
        ARGS['Результат']=ДА
    else
        ARGS['Результат']=НЕТ
    end
}

Данный обработчик вызывается при определении объектом "Сканер" наличия какого угодно объекта у текущего персонажа. Если свойство "Питание" объекта "Сканер" в этот момент равно 0, то в результате определения местонахождения вернётся НЕТ вне зависимости от наличия искомого объекта у персонажа "Игрок".

Неактивен

0    0    #29
08.09.2011 10:43

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Столкнулся с явлением перехода количества в качество: регулярность возникновения некоторых проблем перевела их из категории исключений в категорию "нереализованного общего подхода". Пришлось кое-что переписать, в том числе и модуль контейнеров. И параллельно нашлось, над чем подумать…

В общем, у меня у любого объекта (локация, персонаж, предмет) может быть произвольное число контейнеров. Само-собой, объекты можно размещать в контейнерах (локации нельзя, но это искусственное ограничение). Так вот, если запихнуть игрока в контейнер какого-либо предмета, то что тогда выводить в качестве описания "локации"? Самое простое — ограничить размещение персонажей только контейнерами локаций — в этом случае можно просто выводить соответствующий вариант описания (у варианта описания прописать условие, что оно выводится, только если персонаж находится в таком-то контейнере)…

Неактивен

0    0    #30
11.09.2011 00:07

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Хм… Иногда моя работа над Адским Движком™ напоминает мне это:

http://comicsia.ru/i/7e/ad-32429.png

Неактивен

1    0    #31
11.09.2011 17:52

fireton
некто с бородой (+285, -78)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1078
Вебсайт

Тон

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Olegus t.Gl. написал:

Хм… Иногда моя работа над Адским Движком™ напоминает мне это:

Не, ну ты сам того добился. smile
Делал бы себе игру и движок молча... Теперь терпи. smile

Неактивен

0    0    #32
11.09.2011 18:06

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

fireton написал:

Не, ну ты сам того добился. smile
Делал бы себе игру и движок молча... Теперь терпи. smile

Да я как-то не жалуюсь. Даже наоборот.

Неактивен

0    0    #33
13.09.2011 20:55

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Хм… Сколько останется, если из "Бесконечности" вычесть "Всё что есть"?

Неактивен

0    0    #34
13.09.2011 22:13

uux
Участник (+837, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1583

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Olegus t.Gl. написал:

Хм… Сколько останется, если из "Бесконечности" вычесть "Всё что есть"?

 спойлер…

Отредактировано uux (13.09.2011 22:14)

Неактивен

0    0    #35
14.09.2011 10:19

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Раз у нас такие лингвистические шутники водятся, то я, пожалуй, переименую константу "ЧЛ" ("ЧисЛо"), обозначающую числовой тип аргумента, в "ЧС".

Неактивен

0    0    #36
17.09.2011 14:27

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

В правильном ролике "Алфавит по хардкору", глаз зацепился за кадр с буквой Q, из чего родилось настроение логотипа для Адского движка:

https://ifiction.ru/i/qsp-az-logo.png

Неактивен

0    0    #37
10.10.2011 21:48

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

А между тем работа, хоть и медленно, но идёт.

Кстати, сегодня ввиду плохого самочувствия и настроения пришла мысль, как сделать синтаксис команд Адского движка ещё кошмарнее:

Например, команда добавления действия с объектом:

Код:

GS 'УстановитьДействие', <Объект>, <Название пункта меню>, <Иконка>, <Условие>, <Обработчик>, <Модуль>

Её можно записать так (текущий работающий вариант):

Код:

GS 'УстановитьДействие', 'Портсигар', 'Осмотреть/Осмотреть портсигар', 'осмотреть', '', '', {
    GS 'ОписаниеНаЭкран', 'Портсигар'
}

а если порядок аргументов забыли (как я сегодня), то можно ведь сделать и так:

Код:

GS 'УстановитьДействие', $ПС + '
    Объект: Портсигар
    ПунктМеню: Осмотреть
    Действие: Осмотреть портсигар
    Иконка: осмотреть
    Модуль: "
        GS 'ОписаниеНаЭкран', 'Портсигар'
    "
'

$ПС в данном случае — это просто системный префикс, чтобы отловить такой вот изврат.

Что это добавляет кроме монументальности? Хороший вопрос!.. Наверное, в основном возможность произвольного расположения параметров и пропуска ненужных. Кроме того легче добавлять множество различных параметров, которые вроде как особо не нужны, но если их указать, то в некоторых случаях они могут изрядно сократить код.

Для альтернативно одарённых: советовать мне переходить на INSTEAD не надо.

Неактивен

0    0    #38
03.11.2011 15:08

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

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

Однако, добавление в описание объектов только для антуража делает текст слишком "пёстрым". Так может для подобных объектов добавить свойство "Не выделять ссылку", при установке которого ссылка на этот объект и будет маскироваться под обычный текст?

P.S. Хотя со временем, идея маскировать ссылки мне кажется всё более привлекательной.

Неактивен

0    0    #39
03.11.2011 22:52

gloomy
Модератор (+231, -56)
Зарегистрирован: 21.02.2009
Сообщений: 395

http://instead.syscall.ru

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Идея делать ссылки невидимыми имеет интересный эффект. В первых версиях INSTEAD ссылки как раз были не видимыми, но курсор при наведении менял свою форму. Идея была в том, чтобы максимально приблизить игровой процесс к парсеру. Грубо говоря, предотвратить бездумное прохождение по рельсам ( что еще ярче выражено в CYOA играх). Игровой процесс еще больше похож на исследование (что я в основном и ценю в IF-играх).

Лично мне результат очень нравился wink, но большинство людей выбрали ссылки, это делает игge более казуальной. В итоге я поддался, и кот уже был на видимых ссылках.

Но лично мне нравится идея. Правда при ее реализации желательно увеличить количество ссылок до состояния, когда КАЖДОЕ слово, обозначающее один предмет, можно кликнуть, а не только в определенном предложении. При выполнении такого условия игра становится честнее и менее напрягающей.

Неактивен

0    0    #40
03.11.2011 23:38

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Ну так я с этой идеи — максимально маскировать ссылки — и начинал, потому как основная цель была в достижении как раз того эффекта, который ты описываешь. Так что потестирую, пожалуй, ещё. Или выведу маскировку ссылок в настройки — типа как уровень сложности.

Неактивен

0    0    #41
04.11.2011 09:27

Cheshire
Участник (+127, -23)
Зарегистрирован: 01.07.2009
Сообщений: 331
Вебсайт

«Ловко орудуя топором, вы разрубили все ваши монеты пополам. Теперь у вас в два раза больше золота».
Морыч

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Как вариант — делать текст и ссылки одного цвета, но разных тонов. Например, текст серым, а ссылки чёрным. «Пёстрота» текста уменьшается значительно, ссылки при этом остаются различимыми (при должном усердии).
Впрочем, такое автору можно уже и сейчас делать.

Отредактировано Cheshire (04.11.2011 09:28)

Неактивен

0    0    #42
04.11.2011 10:29

WladySpb
Участник (+2)
Зарегистрирован: 21.12.2008
Сообщений: 33

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Я обычно так и делаю, на мой взгляд самая удобная реализация ссылок. В один цвет нежелательно - начинается пиксельхантинг

Неактивен

0    0    #43
04.11.2011 11:31

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

WladySpb написал:

Я обычно так и делаю, на мой взгляд самая удобная реализация ссылок. В один цвет нежелательно - начинается пиксельхантинг

Я думал насчёт пиксельхантинга. В принципе сравнение тут не особо корректное — изменение курсора над ссылкой и ограниченный размер текста делают процесс не столь утомительным. Зато потенциально возможна как раз та отдача, о которой упоминал gloomy.

Неактивен

0    0    #44
04.11.2011 11:37

Oreolek
Модератор (+419, -168)
Откуда: Кемерово
Зарегистрирован: 02.11.2009
Сообщений: 621
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Офигенная тема, хочу обсудить, но сообщение не скрывается :-(

По-моему, идея скрывать ссылки в играх плоха по трём причинам.

Во-первых, её труднее объяснить.

Во-вторых, на планшетах и телефонах такого события, как наведение курсора мыши, вообще не существует.

В-третьих, в чём должен заключаться сам процесс игры? Вот вывалилось на игрока два экрана текста. Либо он внимательно прочитает, пролистает, затем проверит мышкой каждое слово, затем начнёт думать, либо просто внимательно прочитает и начнёт думать. Зачем мешать ему думать над игрой, заставляя проверять каждое слово на двойное дно?

Отредактировано Oreolek (04.11.2011 11:37)

Неактивен

0    0    #45
04.11.2011 11:47

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Oreolek написал:

Во-вторых, на планшетах и телефонах такого события, как наведение курсора мыши, вообще не существует.
В-третьих, в чём должен заключаться сам процесс игры? Вот вывалилось на игрока два экрана текста. Либо он внимательно прочитает, пролистает, затем проверит мышкой каждое слово, затем начнёт думать, либо просто внимательно прочитает и начнёт думать. Зачем мешать ему думать над игрой, заставляя проверять каждое слово на двойное дно?

Насчёт планшетов и телефонов — резонно.

А зачем вываливать на игрока два экрана текста в самом игровом процессе (т.е. не во вступлении или текстовых вставках, а именно в описании локаций, объектов и т.п.)? Это пагубная привычка.

Неактивен

0    0    #46
04.11.2011 15:22

fireton
некто с бородой (+285, -78)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1078
Вебсайт

Тон

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Мне очень нравится идея подсветки всех существительных в тексте с последующим интерактивом. Две трудности:
1. Дофига работы над описанием. Но это решаемо.
2. Удобная разметка текста. При достаточной насыщенности текста существительными код игры быстро превратится в нечитаемый треш. Тут простого решения нет. Либо идём путём инстеда и собираем описание из кусочков, либо надо как-то извращаться.

Неактивен

0    0    #47
04.11.2011 15:43

Oreolek
Модератор (+419, -168)
Откуда: Кемерово
Зарегистрирован: 02.11.2009
Сообщений: 621
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

А зачем вываливать на игрока два экрана текста в самом игровом процессе (т.е. не во вступлении или текстовых вставках, а именно в описании локаций, объектов и т.п.)? Это пагубная привычка.

Объекты могут очень красиво выглядеть... или экран может быть маленьким.

Неактивен

0    0    #48
04.11.2011 15:58

Серый Волк
Модератор (+1194, -92)
Откуда: Тверь
Зарегистрирован: 22.02.2008
Сообщений: 1096
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Хороший пример реализации - игра "Цветохимия (Ajenta; QSP), в которой предусмотрено два режима сложности. На одном ссылки подсвечены, на другом, соответственно, скрыты.
Ссылка на игру: http://qsp.su/index.php?option=com_sobi … p;Itemid=0

Отредактировано Серый Волк (08.11.2011 16:40)

Неактивен

0    0    #49
12.03.2012 14:37

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Что-то совсем забросил тему, хотя работа некоторое время назад возобновилась.

Поскольку текст у меня идёт сплошняком (textflow — модное слово!), добавил автоматический вывод на экран маркера, который помечает с какого места появился новый текст для игрока. Выглядит это примерно так:
https://ifiction.ru/i/scr/qsp_scr_text_001.png
Вот та чёткая пунктирная линия — и есть чёткий такой маркер. Само собой, при появлении новой порции текста старый маркер исчезает.
Пока проверяю на себе — очень удобно.

Неактивен

0    0    #50
12.03.2012 14:51

Olegus t.Gl.
Участник (+986, -234)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2821
Вебсайт

Re: Заметки по работе над "Адским движком" (фреймворком для QSP)

Да, и пришлось обломаться с порционным выводом текста. То есть была задумка добавить в функцию вывода текста:

Код:

…ТекстНаЭкран, 'Привет мир!'

тег "<-далее->", чтобы команда:

Код:

…ТекстНаЭкран, 'Привет мир!<-далее->Я всех ненавижу!'

выводила сначала "Привет мир!", а потом (после нажатия на пробел или маленькую ссылочку "продолжить") — "Я всех ненавижу!". Это позволило бы нагнетать атмосферу и выводить неожиданные обороты. Драматическая пауза на заданное время — это выход, но я не люблю решения с фиксированными паузами (и недолюбливаю людей, которые этим приёмом злоупотребляют). Поэтому отложил это до лучших времён.

P.S. Почему не получилось? Потому что в QSP-Classic невозможно остановить выполнение кода в отдельной точке (если это не input или msg, конечно же), подождать действия игрока, а потом продолжить далее.

Неактивен

Powered by PunBB
© copyright 2001–2020 iFiction.Ru