«Метель» — и нашим, и вашим

В рамках ЗОК-2019, Петром Косых, при участии Pakowacz, была выпущена парсерная игра «Метель», представляющая собой нечто вроде мистической рождественской истории с некоторыми аллюзиями на «Снежную королеву» Андерсена. Правда каюсь, лично у меня самая первая мысль была про «Трогательную историю» Джерома Клапки Джерома из-за несколько картонного начала, но возможно у меня было просто слишком весёлое настроение и вообще не тот настрой, так как я был подогрет обещаниями сложных пазлов и готовился к серьёзному бою с игрой, а не к вступлениям подобного рода.

Ну и давайте определимся с самого начала. Если вы ждёте от этой игры старых добрых экшен-квестов от Петра в стиле «добро должно быть с кулаками», то вынужден вас разочаровать — это совсем не про это. Лихого побивания злодеев подручными предметами здесь не будет, да и проблемы скорей внутри героев, чем снаружи.

«Старенький синий седан едет по заснеженной трассе. Внутри машины — двое.

Ведёт машину усталая женщина лет 35. На заднем сидении справа сидит её дочь — девочка-подросток.

Девочка прислонилась лбом к холодному стеклу. Мать продолжает начатый разговор…

— Вот увидишь, тебе там понравится.

Что тебя ждёт за снежной пеленой?»

(Рецензия написана по версии игры 1.2)

Сюжет

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

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

Честно говоря, описал я это не очень хорошо, но это потому, что жанрово «Метель» — это в сущности сказка, а сюжеты сказок часто в пересказе выглядят как наркотический бред. Их надо просто читать и всё, ну или играть, как в нашем случае.

Литературная составляющая

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

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

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

Игровая механика

Игра начинается очень вяло, как типичный повествовательный парсер, причём, не самый лучший. Мы заперты в единственной слабо детализированной локации, где от нас ожидается выполнение определённой последовательности действий для продвижения сюжета, а сама эта последовательность никакой объективной логики не имеет. На этом этапе игры у вас есть два крайних варианта: можно либо оперативно перепахать всю локацию вдоль и поперёк, пользуясь опытом бывалого парсерного игрока, тогда вы дёрните за все нужные триггеры, либо долго мучать игру даже просто однообразными повторяющимися командами, накручивая счётчик ходов, пока она не начнёт вам подсказывать команды буквально прямым текстом. Это самый ужасный момент игры, но я бы советовал его перетерпеть, потому что дальше будет бодрее. Вообще это вступление чем-то напоминает более безопасный вариант начала PhotopiaФотопии»), и, если кто не в курсе, для многих любителей парсеров подобное сравнение — это совсем не комплемент.

После вступления начинается основная часть игры в зеркальном мире, где прорезаются уже полноценные квестовые механики. Правда стоит отметить, что местами, действительно, как нам и анонсировали, пара пазлов реализована не очень логично, подразумевая для своего решения далеко не самые очевидные способы взаимодействия с предметами. Это, конечно, совсем не «суповые кастрюли», но тоже ничего хорошего. Данный негативный момент усугубляется ещё очень маловариативным игровым миром, представляющим собой практически коридор локаций с небольшим числом объектов в каждой. То есть модель мира «Метели» имеет малое фазовое пространство, так что когда игрок застревает с каким-то пазлом, то у него нет возможности позаниматься чем-то ещё и заняться проверкой альтернативных гипотез, и геймплей превращается просто в перебор глаголов в текущем тупике.

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

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

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

Кстати, игра собрана на версии Метапарсера, где у вас уже будут работать все традиционные сокращения и команды взаимодействия со списком объектов, типа «взять всё». Впрочем, последнее мне понадобилось только один раз для взаимодействия с бардачком, так как большого числа объектов в игре нет, но всё равно приятно, когда вводишь не задумываясь, а оно работает. В общем, как минимум, один игрок это заметил и оценил.

В итоге

Откровенно говоря, от моего личного идеала парсерной игры «Метель» довольно далека, потому что не имеет целого ряда особенностей, которые, на мой взгляд, раскрывают главные конкурентные преимущества парсеров по сравнению со всеми остальными: большое фазовое пространство логичных состояний мира, многовариативное взаимодействие с физической моделью мира, параллелизация решения пазлов и прочее. Однако она ближе к этому идеалу, чем многие другие, так что даже я в целом доволен, что в неё поиграл, а уж менее привередливые так и вообще могут оказаться в восторге.

Правда в жанровом отношении «Метель» довольно неоднозначна, начинаясь как повествовательный парсер, а потом предлагая ряд чистокровных квестовых пазлов. Поэтому это лотерея: понравится она любителям чистых реализаций этих геймплейных подходов или нет. Однако с точки зрения объективных критериев игра сделана очень аккуратно, так что боятся не стоит, и надо просто попробовать всем.

Ссылки

52 комментария

Enola
Многовато спойлеров по сюжету.
quantumcat
Плюсанул. Nikita, в целом, верно подметил позиционирование игры.

Если Марс был на 99% новеллой. То эта игра планировалась как переходный гибрид, в котором все-таки упор по прежнему делается на сюжет/линейность, но и парсерная часть представлено больше. Не так просто совместить квестовые задачи с сюжетом так, чтобы это смотрелось гармонично. В литературе такой проблемы нет. Я иногда даже думаю, а не попробовать ли просто написать рассказ вместо игры? :)

В общем, я экспериментирую, конечно. Но главное, что и в Марсе и в Метели я сделал примерно то, что хотел. Теперь можно смотреть и думать, куда двигаться дальше. :)
Nikita
> Теперь можно смотреть и думать, куда двигаться дальше. :)
Ну дальше должен быть хардкор с ортодоксальным парсерным квестом. Зачем эти переходные стадии, если перехода так и не случится? :-)

Кстати, нативный интерпретатор INSTEAD для Windows (самая новая версия) периодически подвисает, прекращая принимать команды, так что он то просто не даёт какое-то время что-то вводить, либо подвисает на несколько мгновений во время ввода, так что проглатывается кусок команды, на ввод которой пришлось зависание, и ввод получается неполным. Складывается впечатление, что у него как будто переполняется буфер клавиатуры, как на старых слабых машинах, которые, если быстро ввести много символов, переставали воспринимать новый ввод, пока не переваривали предыдущий. В Метапарсере, где мы постоянно что-то вводим, это очень раздражает.

Кроме того, в некоторых играх в INSTEAD для Windows какие-то проблемы со звуком, например, в «Испытании Марсом» музыка периодически начинает заикаться, а в «Системе» звук фонового шума в начале игры воспроизводится только в левом канале, хотя если проиграть файл bgmus2.ogg напрямую, то там всё нормально. Видно какие-то баги звуковой подсистемы интерпретатора или проблемы со встроенными кодеками ogg.

В общем сказывается, что INSTEAD для Windows как неродной ребёнок, за которым никто не приглядывает. Вы бы нашли где-нибудь машину с Windows и поиграли бы там в INSTEAD, чтобы почувствовать нашу боль.
quantumcat
Да вроде у знакомых Windows пользователей проблем не было. А что за версия Windows?
Nikita
Разные машины, разные системы, разные разрядности, в частности, Windows 7 x86, Windows 10 x64. Ничего тяжёлого в эти моменты в фоне не крутится.
Я играю без кликов на подсказки и без дополнения по Tab, а целиком вводя команды и обычно довольно быстро целой серией после формулировки гипотез, так что возможно сталкиваюсь с проглатыванием ввода чаще среднестатистического игрока на Метапарсере.
Проще наверное будет воспроизвести проблему со звуком в левом канале в игре "Система". Она у меня проявляется на постоянной основе на всех конфигурациях, так что, подозреваю, мало зависит от индивидуальных особенностей. Остальные файлы там, кстати, проигрываются нормально, а проблема только на bgmus2.ogg, так что возможно есть какой-то плохо перевариваемый INSTEAD'ом вариант кодирования OGG.
Ещё есть неприятная мелочь, когда в транскрипте теряются отдельные команды при смене сцены. Например, так по-моему происходит при входе в купол в «Испытании Марсом», где команда входа в купол в лог не попадает, с диалогами, кажется, такая же проблема. В общем функция записи логов в Метапарсере сейчас местами работает неудовлетворительно. В файл должен железно попадать весь ввод и весь вывод. Ну а в консольный вариант Метапарсера надо потом ещё встроить режим запуска с указанием файла, откуда будут в качестве команд автопрохождения браться строки, начинающиеся со знака ">", чтобы туда можно было бы скармливать любой пользовательский лог в сыром виде. Правда перед этим надо будет ещё перестать отправлять в лог HTML-теги или обучить консольный Метапарсер игнорировать их в этом режиме.
quantumcat
> так что возможно сталкиваюсь с проглатыванием ввода чаще среднестатистического игрока на Метапарсере
Ок, быстрый ввод. Попробую посмотреть. Может быть, фейдинг съедает? Ну там, картинка в этот момент меняется?

> Например, так по-моему происходит при входе в купол в «Испытании Марсом», где команда входа в купол в лог не попадает, с диалогами, кажется, такая же проблема

Этот баг я точно фиксил, надо изучать с какой версией собрано испытание…
Nikita
Нет, у меня не сложилось впечатления, что в эти моменты INSTEAD всегда занят чем-то сложным. Это бывает и в момент статичного текста на экране, просто некоторые нажатия начинают игнорироваться, а в особо тяжёлых случаях ввод замораживается секунд на 5. Команды, введённые во время зависания, пропадают, то есть очереди там из них не выстраивается.
У меня такое со всеми играми на Метапарсере бывало, в том числе с очень простым оформлением.
Не сказать, чтобы прямо постоянно, но за «Метель» было штук 20 проглатываний отдельных нажатий внутри команды, и штук 5 длительных зависаний на несколько секунд. Ну и это на несколько сотен команд.
Воспроизвести специально не получается, даже если я начинаю вводить много команд очень быстро. То есть там есть какие-то факторы, возникающие лишь периодически.
В web у людей вроде тоже самое бывает и чаще, но я в web не играю, так что это с чужих слов.

А ещё я нигде не нашёл полного списка горячих клавиш интерпретатора. В doc только описательный ReadMe и документация для разработчиков игр. Что-то подсмотрел в обучающей игре, что-то подобрал методом тыка, но наверное это не всё.
quantumcat
> а в особо тяжёлых случаях ввод замораживается секунд на 5.
Вот это мне и хочется воспроизвести. В вебе, там понятно, многое может быть. А вот на настольном PC там вообще детская загрузка. 3-5% даже с анимацией. Так что мне бы конечно хотелось максимально подробную информацию…
quantumcat
Как то с тобой можно связаться и сделать несколько экспериментов?
quantumcat
В общем, прошу побробовать: dropmefiles.com/hNZEh
Я убрал там автодополнение полностью и вернул стандартное поведение сборщика мусора.
Слабо вероятно, что это оно. Но хочется хоть как то диагностировать проблему.
Попробуешь?
Nikita
> В общем, прошу побробовать: dropmefiles.com/hNZEh
> Я убрал там автодополнение полностью и вернул стандартное поведение сборщика мусора.
Я перепрошёл игру в этой комплектации. Конечно, всё в этот раз проходилось намного бодрее, так что геймплей был не совсем естественный, но в принципе было достаточное число команд, чтобы по прошлому опыту на них пришлось несколько залипаний. Однако залипаний не было. Вернее был была одна повреждённая команда, но у меня нет полной уверенности, что это не я сам описался, пропустив букву. В общем по субъективным ощущениям стало лучше.

Возможно причина именно в автодополнении. На ввод каждого символа Метапарсер рассчитывает новый список подходящих команд, ну и если, например, вводить 3 символа, а потом автодополнять, как принято на INSTEAD, то таких расчёта делается 3, а если вводить полную команду из 15 символов, как делаю я, то таких расчётов 15, плюс если это быстро и сразу несколько команд, то движок как раз и может захлёбываться. Также, поскольку для разных наборов символов получаются разные списки, то возможно этим объясняется, что иногда расчёты легче, а иногда тяжелее, из-за чего заморозка интерфейса имеет плавающий характер.
Ну это так, абстрактная гипотеза, высосанная из пальца. Впрочем, если есть возможность как-то профилировать INSTEAD, то будет не лишним посмотреть, наблюдается ли там эффект просадки производительности на вводе длинных команд при включённом автодополнении.
Кстати, я ещё играю с записью транскрипта, возможно это тоже значимый фактор.
quantumcat
Это очень интересно! Спасибо. Теперь, нужен еще один эксперимент.
Нужно открыть main3.lua найти autocompl = false и заменить его на = true.
Если будет тормозить — это оно. Если нет — то это сборщик мусора. Посмотришь? :)

P.S. игру я за это время значительно обновил, исправив основные косяки, но это сейчас к делу не относится. :)
Nikita
Да, судя по всему, это оно: с autocompl = true зависания вернулись. Уже спасибо, теперь знаю, где отключать тормоза Метапарсера. :-)

Кстати, на других платформах я привык возможности уточняющего ввода:

>дать деньги
Кому ты хочешь это дать?
>трактирщику
Ты протягиваешь деньги трактирщику.

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

Кроме того, привычка ввода таких неполных команд произрастает из ещё одной функциональности, характерной для других платформ, и по-моему отсутствующей в Метапарсере, а именно автодополнение команд в случае отсутствия их многозначной трактовки.
Если в зоне досягаемости в принципе есть только один объект, для которого команда «дать деньги» является валидной, то ввод «дать деньги» будет автоматически дополнен и выполнен.
Правда для этого в стандартной библиотеке должен быть механизм управления валидными командами, то есть должна быть сущность реакции-затычки и сущность функционально значимой реакции.

Ну и спасибо за «взять всё», но оно пока работает не очень хорошо, потому что нет рекурсивного обхода всех контейнеров локации, предметы из которых доступны для взаимодействия, например, надо обязательно уточнять «из бардачка». Всё-таки желательно, чтобы уточнение контейнера было опционным, а не обязательным, а без уточнения формировался список доступных объектов рекурсивным обходом по локации и всем её контейнерам.
quantumcat
Отлично. Спасибо! Я тогда сделаю какой то штатный способ включать режим эксперта — когда ничего лишнего не цепляется.

> Метапарсер же контекст предыдущей команды в случае реакции на неё уточняющим вопросом, не сохраняет

Да, знаю про это. Это все вопрос того, куда движется мп. Пока я не стал этого делать во имя простоты и предсказуемости. Я не знаю, может быть что то будет.

> Если в зоне досягаемости в принципе есть только один объект, для которого команда «дать деньги» является валидной, то ввод «дать деньги» будет автоматически дополнен и выполнен.

Да и про это я думаю фоном. Пока не определился как лучше это делать. Но, конечно, оно напрашивается. Эту вещь явно не сложно сделать. Но опять вроде как нарушается идея — сделать просто, но предсказуемо. Ну вот есть протопарсер, где это возведено в абсолют. А так -я получается я пытаюсь делать копию информа/тадса. Меня это смущает.

> Ну и спасибо за «взять всё», но оно пока работает не очень хорошо, потому что нет рекурсивного обхода всех контейнеров локации,

Да, ты верно это заметил. Я сделал пока это специально. Рекурсивный взять показался мне опасным. Если ты предложишь подходящий алгоритм на словах, я подумаю. Просто вот пример. Я в поле- есть машина. Она — контейнер. Я пишу взять все. Должен ли я пытаться взять машину? Или только зайти внутрь? Но как быть с чемоданом, например? Или если доступность есть — то надо брать изнутри? Но мне кажется тут начинаются неожиданности… И может стать так как в информе. Страшно ее использовать. Но тут, жду твоих идей.
quantumcat
С машиной пример не оч хороший. Так как она scenery. Ну пример с открытым чемоданом тогда.
fireton
Если контейнер открыт, то пытаться брать из него всё. Если закрыт — нет.
quantumcat
Вопрос не в этом, вопрос пытаться ли брать сам этот контейнер? Понимаешь, вот представь себе
A — контейнер открытый
B,C — внутри A
D — внутри B

Что брать? И в какой последовательности/
quantumcat
То есть мне нужен формализованный алгоритм.
Например — идем вглубь, во все доступные места (открытые контейнеры, и supporter). Не берем контейнеры и суппортеры, но берем их содержимое.

Вот этот приведенный мной алгоритм мне не нравится.
Nikita
> Рекурсивный взять показался мне опасным. Если ты предложишь подходящий алгоритм на словах, я подумаю.
«…
Ты видишь здесь коробку и мячик. Коробка содержит кубик.
>взять всё
коробка: Взята.
мячик: Взят.
>и
У тебя имеется:
	коробка
		кубик
	мячик
>* отступ в описании инвентаря демонстрирует уровни вложенности объектов
>о коробку
В коробке ты видишь кубик.
…»
Идея в том, что сначала мы проходимся по локации и формируем список подвижных объектов там, затем проходимся по достижимым контейнерам и дополняем список объектами в них. Затем мы начинаем брать по одному объекту списка, начиная с первого (нулевого) элемента и выполняя на каждом взятии ряд проверок: во-первых, проверяем, что достаточно место в инвентаре, а во-вторых, проверяем, что этот объект ещё не у нас в инвентаре, например, оказавшись взят ранее с каким-то подвижным объектом-контейнером.
Соответственно функция проверки нахождения объекта в инвентаре также должна быть рекурсивной, чтобы кубик в коробке также считался объектом в инвентаре, если сама коробка в инвентаре.
Если же «взять всё» вводится с уточнением, типа «из бардачка», то всё то же самое, но весь этот рекурсивный обход мы начинаем не с локации, а с уточнённого контейнера.
Комментарий отредактирован: 27 февраля 2019, 20:39
quantumcat
Вот оно ключевое. Если контейнер движимый — нам все равно, мы просто его берем. Он возьмется со всем своим содержимым. Если контейнер/суппортер не жвижимый — мы входим в него! Вроде так?

Тогда можно делать. :)
quantumcat
Сделал и вот что не нравится. Например сцена в поле. Машина — контейнер. Она открыта. Я в поле — пишу взять все — и я беру скрипку, которая в машине. Это при том, что я как бы в машине не нахожусь…
Понятно, что в случае с бардачком кажется все клево, но в общем случае — как то мощно слишком. Подумаю…
Nikita
> Если контейнер движимый — нам все равно, мы просто его берем. Он возьмется со всем своим содержимым. Если контейнер/суппортер не жвижимый — мы входим в него! Вроде так?

Да, движимость контейнера — это ключевой момент. Если объект недвижимый, то его в список для «всё» не записываем, хотя если он при этом контейнер, то внутрь заглядываем. Везде контейнеры, конечно, в широком смысле, то есть и поверхности тоже.

В движимые контейнеры вообще-то тоже можно заглядывать и сканировать объекты в них. Но это уже вопрос личного виденья логики движка: надо ли пытаться брать содержимое движимого контейнера, если сам контейнер в инвентарь не помещается в случае существования в симуляции мира веса, объёма и лимитов на вместимость. Если нет, то содержимое движимых контейнеров не сканируем, а если да, то сканируем, чтобы попытаться потом взять содержимое отдельно, если весь контейнер забрать не вышло.

> Машина — контейнер. Она открыта. Я в поле — пишу взять все — и я беру скрипку, которая в машине. Это при том, что я как бы в машине не нахожусь…
> Понятно, что в случае с бардачком кажется все клево, но в общем случае — как то мощно слишком. Подумаю…

Здесь, на мой взгляд, просто неправильно смоделирован мир. Зачем машину делать контейнером? У вас и замок контейнером, а комнаты замка контейнерами в контейнере замка?
Машина должна быть фиксированным объектом сцены, для которого просто назначен обработчик команды «залезть в машину», который перебрасывает игрока в отдельную локацию солона автомобиля.
quantumcat
Ох, не знаю. Изначально был контейнер, так как я не хотел заставлять игрока влезать в открытую машину. Можно просто взять скрипку и все. Потом, сначала она была прозрачной. Так что находясь в машине ты видел всю сцену. В общем, продумать надо. Может быть настройка для автора решит мою дилемму.
Nikita
Скрипка — это частный случай, неувязки которого проистекают из специфики реализации модели мира в конкретной ситуации. То есть я бы не трактовал это как наглядную дискредитацию всей идеи рекурсивного «взять всё».
Если возможность осмотреть скрипку внутри машины, находясь вне машины, считается логичной, то логичной можно считать и возможность взять эту скрипку, не находясь в машине, в том числе и через «взять всё».
Впрочем, возможность исключить объект из списка по «всё» в любом случае полезна.
Например, в игре одежда может быть реализована отдельным объектом, допустим, тот же скафандр в «Другом Марсе», после чего может возникнуть необходимость исключить одежду из списка объектов для команды «бросить всё». Если такой механизм будет, то с его помощью можно будет уже реализовать и исключение скрипки из списка по «всё» в нужной ситуации.
Причём, эту настройку лучше привязывать не к объекту, а к глаголу. Потому что, например, штаны, лежащие на диване, желательно забирать по «взять всё», но вот сбрасывать их по «бросить всё» уже может быть нежелательно, то есть нужен контроль за глагольным контекстом.
fireton
С одеждой всё просто — если она надета, то бросать её не надо. :)
Oreolek
quantumcat Это и сейчас мощно. Кладу скрипку в машину, стою вне машины. Пишу «осмотреть скрипку» — внезапно получаю описание. Если бы скрипка была ещё чуть-чуть глубже смоделирована (те же струны), я бы смог себя почувствовать героем Lime Ergot.
Комментарий отредактирован: 28 февраля 2019, 07:15 (2 раза)
quantumcat
Ну машина открыта. Ты можешь осмотреть машину и увидеть скрипку. Тут я как раз не вижу большого криминала. Сцена — это единица игровая. Это не значит, что все что ты на ней делаешь происходит стоя на месте.
quantumcat
У меня еще одна просьба. Я нашел проблему, которая выражалась в том, что completion вызывался после каждого нажатия на клавишу.

Можешь заменить mp.lua на этот: dropmefiles.com/gVKS3
Снова включить автодополнение, (начать игру заново — обязательно) и проверить?
Вообще, может удобней лично по почте?
Nikita
> Можешь заменить mp.lua на этот: dropmefiles.com/gVKS3
> Снова включить автодополнение, (начать игру заново — обязательно) и проверить?
Автодополнение там было уже включено.
Есть ощущение, что вроде не так плохо, как в первый раз, но точно периодически в такой конфигурации подвисает. То есть хуже, чем тогда, когда автодополнение отключено.
> Вообще, может удобней лично по почте?
Можно и по почте — tseikovets@rambler.ru
quantumcat
Ок! Я тогда завтра на свежую голову вышлю другой вариант. Попробую соптимизировать.
quantumcat
Я нашел! INSTEAD глотает иногда события клавиатуры. Это был workaround от какого-то бага SDL. Я тогда это исправлю в новой версии. + Сдлаю возможность отключать автодополнение и подсказки всё равно. Как сделаю — вышлю на почту.
johnbrown
Складывается впечатление, что у него как будто переполняется буфер клавиатуры, как на старых слабых машинах, которые, если быстро ввести много символов, переставали воспринимать новый ввод, пока не переваривали предыдущий.
Кстати, да. Заметил такое в «Метели». Запускал на этом интерпретаторе.
quantumcat
Ну ввод в андроиде сделан хаком, веб тоже могу понять. А на PC можешь попробовать?
johnbrown
К сожалению, сейчас нет доступа к пк. На Андроиде был ещё один баг, когда игра просто не давала ничего вводить. Приходилось только кликать по ссылкам.
quantumcat
Тоже известная проблема андроид кликента. Если свернуть в фон и вернуть приложение — фокус возвращается. Пытаемся решить.
rudeger
Объясните мне, пожалуйста, почему здесь так люто минусуют посты? Это какие-то подковерные войны? Вы же своими руками закапываете желания людей писать отзывы, рецензии на ваши игры.
fireton
Ну, так работает рейтинг. Посетители сайта плюсуют статьи, которые им нравятся и минусуют те, которые им не нравятся. Просьбы же «пояснить за дизлайк» обычно не приводят к конструктивному диалогу. :)
Nikita
Не обращайте внимание — это специфика сообщества, состоящего из не самых рациональных и интеллектуальных индивидуумов. Публично высказываемая критика игры от людей, не входящих в чей-то круг общения, априорно считается проявлением неуважения к автору и сообществу в целом, так что приводит к карательному набегу его представителей, которые считают, что их минусы обязательно кого-то расстраивают. При этом, более грубый и менее аргументированный отзыв от человека из круга общения автора считается допустимым. Регуляция же популярности материала через минусы не работает, потому что его итак все прочитают в таком маленьком сообществе (даже чем резонанснее, тем вероятнее), а вне сообщества люди делятся прямой ссылкой, игнорируя весь местный контекст и интересуясь чисто рецензией.

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

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

Если постоянно думать над необходимостью социального одобрения для всех видов активностей, то у нас получится бесконечный цикл: мотивирующие отзывы на игры, мотивирующие реакции на отзывы, мотивирующие реакции на реакции на отзывы… Где-то всё-таки надо остановиться и сказать «вот здесь мне уже всё равно». Я предлагаю всем сделать это хотя бы на втором уровне, то есть на реакциях на отзывы, хотя в идеале хобби должно игнорировать всё это на самом первом уровне, но для этого надо быть чуть меньше обезьяной, руководствующейся инстинктами, и чуть больше человеком, руководствующимся разумом, что для многих оказывается сложно.
Комментарий отредактирован: 27 февраля 2019, 17:52
crem
Одна я в белом пальто стою красивая.
fireton
Плюсы и минусы — это эмоциональная реакция читателей на прочитанное. Не стоит их воспринимать как-то иначе. Когда вместо комментария типа «согласен», «класс!» или «вот же пурга» ты просто нажимаешь маленькую кнопочку.
Nikita
> Плюсы и минусы — это эмоциональная реакция читателей на прочитанное. Не стоит их воспринимать как-то иначе. Когда вместо комментария типа «согласен», «класс!» или «вот же пурга» ты просто нажимаешь маленькую кнопочку.
Я вам советую заглянуть в правила IFhub, где есть специальное пояснение, для чего здесь плюсы и минусы. У вас и у большинства присутствующих явно понимание расходится с задуманным.
Регулирующая функция плюсов и минусов здесь поломана из-за неуравновешенных пользователей. Присутствие поста на главной странице у нас не является признаком качества и востребованности материала. Именно поэтому я сплошняком читаю RSS всех публикаций, а не RSS с главной.
Если завтра сюда придёт человек, например, проделавший большую работу по сравнению платформ, напишет подробный материал с разбором плюсов и минусов, указав на конкретные недостатки, то его дружно запинают фанаты практически всех платформ — каждый за свою, а в комментариях будет просто шабаш, хотя мало кто из этих людей будет иметь сопоставимых с ним уровень комплексных знаний по поднятому вопросу, и на главной с большой долей вероятности такого материала не будет. Это при том, что даже если у него будут ошибки, его надо плюсовать, потому что это актуальная тема, которую надо просто продолжать аргументировано обсуждать в комментариях. Нормальное обсуждение может быть ценнее материала, ставшего поводом для этого обсуждения.
Люди тут в массе своей оценивают не качество изложения точки зрения, пусть и противоположной, или же актуальность поднятой проблемы, а именно эмоциональное принятие или неприятие позиции автора. Материалы трактуются не как приглашение к дискуссии, а как личное оскорбление, если автор высказывает противоположное мнение или по иррациональным соображениям воспринимается как не имеющий право на мнение по какому-то вопросу, например, потому что не является членом какого-то чата. Бывает что люди взрываются просто от какого-то слова, например, кому-нибудь вполне может не понравиться ваше упоминание Иисуса в обзоре на «Хомяка Семёна», и он будет минусовать только по этому поводу, даже не дочитав до конца и проигнорировав весь контекст. Плюс к рейтингу привязаны какие-то дискриминационные вещи, типа запрета публикаций и комментирования, так что на IFHub, в отличие, например, от iFiction, минусы — это де-факто именно инструмент травли несогласных и гнобления неугодных, а не просто безвредное улюлюканье толпы.
Именно поэтому я, например, из принципа за всю жизнь не поставил на IFHub ни одного плюса и ни одного минуса, потому что считаю систему здесь поломанной из-за большинства пользователей с неправильным эмоциональным подходом и не хочу поддерживать этот фарс. Сходите почитайте разъяснения в правилах — с таким подходом вы один из тех, кто сломали здесь институт оценивания публикаций и вынуждают людей вычитывать весь поток самостоятельно, потому что рейтинг оценок неадекватен.
В общем, на мой взгляд, вы неправы. Пожалуй, вас надо заминусовать, чтобы вы разрыдались и больше здесь не показывались со своим неправильным мнением. :-)
fireton
Вы, Никита, пытаетесь жить в мире чистого разума и игнорируете социум. А социум, нравится вам это или нет, держится на эмоциональной связи между его членами. Эмоции это благо, а не не досадный атавизм, как вы пытаетесь их представить. Свои игры, к примеру, я пишу так, чтобы они нашли у играющего именно эмоциональный отклик.

Так вот, в социуме обычно ценят доброжелательность и не любят снобизм и высокомерие. Что, обычно и отражается в оценках. Комментарии от высокомерных снобов, в результате, падают в рейтинге, а их авторы (если вовремя не одумаются) — лишаются возможности писать и комментировать. Такая вот саморегулирующаяся система. По мне, так довольно разумная.

Минусовать меня вы вольны, конечно. Особенно, если это даст вам необходимую эмоциональную разрядку. А я волен минусовать вас. Как и плюсовать, разумеется.
Nikita
Я не против эмоциональности, если она не вредит сообществу и информационным ресурсам. А вот та эмоциональность плюсов и минусов, которую вы исповедуете, IFHub'у вредит, потому что мешает агрегировать качественные актуальные материалы на главной странице. На iFiction, например, наоборот прекрасное место вместе поулюлюкать плюсами и минусами, потому что там от этого ничего не зависит, это просто коммуникационный компонент.
IFhub — это не площадка для неформального общения, это коллективный UGC-блог, где подразумевается, что мы имеем некоторый пул подготовленных публикаций, отрейтингованых по качеству освещения проблемы, а не по личному отношению сообщества к данной проблеме.
Ваш подход — это всё равно что в редакционной коллегии научного политологического журнала будут заворачивать все статьи от авторов с либеральной позицией, игнорируя качество исследования. Да, очень удобное информационное гетто, но первоначальная суть утрачивается.
Лично для меня так наоборот самые интересные материалы с оценочным компонентом — это аргументированная критика того, что я люблю, или подробное объяснение прелести того, что мне не нравится.
Неужели вам было бы не интересно прочитать статью «Почему FireURQ говно», ну, разумеется, при условии содержания, более эмоционально взвешенного, чем заголовок? Да, вы бы может не согласились, но ведь интересно, что же людям не нравится. Может это дало бы какую-то пищу для размышлений.
Я не понимаю, как можно с интересом читать исключительно повторение своих собственных взглядов и сливаться в экстазе резонирующих эмоций со всеми окружающими, а вы стремитесь именно к этому на IFHub, игнорируя первоначальную суть системы оценки, а именно маркировку востребованности поднятой темы.
О доброжелательности тоже говорить не приходится, потому что главные хамы сообщества как раз из лагеря эмоционально невоздержанных, в том числе и на IFHub.
Именно поэтому трудно относиться к местным оценкам всерьёз, потому что в интеллектуальном смысле оценивающие не вызывают уважения и ощущения глубины мысли, к которой можно было бы прислушаться, пускай это и кажется снобизмом.
Хорошо, мне-то всё равно, а вот читатели в лице rudeger'а расстраиваются. Мы же вроде для них всё это здесь делаем?
Впрочем, давайте лучше хотя бы о парсерах, если не о «Метели». Рационально переубеждать людей, руководствующихся эмоциями, и наоборот — это ведь довольно глупое занятие.
fireton
Я вас уверяю, за 10 разработки я прекрасно осведомлён о достоинствах и недостатках FireURQ. Однако, склонен всё же банить тех, кто называет её говном. Если человек пишет или говорит такое, это значит, что он или эпатирует меня, то есть он обычный тролль, или же вообще не настроен на конструктивный диалог.

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

Я убеждён, что вполне возможно обмениваться взглядами, даже противоположными, а уважительной и доброжелательной форме. Конечно, самому прилагать усилия и не считать собеседника априори глупее или ущербнее себя.
Oreolek
Это при том, что даже если у него будут ошибки, его надо плюсовать, потому что это актуальная тема, которую надо просто продолжать аргументировано обсуждать в комментариях.

Тогда выходят посты с ошибками, неточностями и упрощениями, под которыми начинается лента на несколько десятков комментариев с разбором, а ошибся ли автор. Если новые читатели не прочитают всё под статьёй, то будут писать новые комменты и указывать на те же странности.

По-моему, нейтральной оценки должно быть достаточно: количество комментариев, даже оффтопа — тоже показатель популярной темы. Соглашусь что минусовать не стоит.

А люди, которые голосуют — это не те же, которые комментируют. Например, у этой статьи уже почти вдвое больше оценок, чем комментаторов.
Комментарий отредактирован: 28 февраля 2019, 10:31
rudeger
Мда-а-а… «Приятно» было находится на вашем сайте. Лишний раз убедился, что русскоязычные токсичные сообщества не для меня.
GreyRaven
Никита, мне как человеку малоосведомленному в парсерах, хотелось бы услышать пояснения следующих моментов: "… главные конкурентные преимущества парсеров по сравнению со всеми остальными: большое фазовое пространство логичных состояний мира, многовариативное взаимодействие с физической моделью мира, параллелизация решения пазлов и прочее."

1) Что такое «большое фазовое пространство логичных состояний мира»? На примерах, если не затруднит.

2) Что такое «многовариативное взаимодействие с физической моделью мира» как преимущество парсера? Если имеется в виду то, что можно по-разному взаимодействовать с объектами игрового мира, то ведь это и в менюшных играх есть (условно говоря, меч можно взять и потом использовать как оружие, а можно его продать; запертый сундук можно взломать, а можно открыть ключом, и т.д.).

3) Что за «прочие» преимущества парсеров?
Заранее предупреждаю: я не троллю, а действительно интересуюсь. Вообще я прежде всего интересуюсь книгами-играми и менюшными играми, а в парсеры играл почти только спектрумовские.
Комментарий отредактирован: 28 февраля 2019, 15:21
Nikita
>1) Что такое «большое фазовое пространство логичных состояний мира»? На примерах, если не затруднит.
Само понятие «фазовое пространство», если на пальцах, означает совокупность уникальных состояний системы. Например, у двухпозиционного выключателя фазовое пространство имеет размерность 2, а у двух спаренных двухпозиционных выключателей — 4.
У игр с глубоким моделированием мира, где можно брать всякие предметы, перекладывать их в разные места, как-то их комбинировать и прочее, фазовое пространство получается достаточно большим.
Однако просто возможность полизать стены или встать на стол в гостиной и на нём попрыгать как таковой ценности не представляет. Важно, чтобы эти состояния были логично обусловлены игровой ситуацией.
И вот если пазлы в игре логично обуславливают большое количество возможностей по совершению каких-либо действий, то это и есть большое фазовое пространство логичных состояний.
Например, вы перед расщелиной, через которую надо перебраться. Неподалёку есть лес. А ещё у вас есть верёвка.
При должной реализации, всё это позволяет создать достаточно большое фазовое пространство логичных состояний мира.
Можно пробовать перепрыгнуть. Можно пробовать закрепить верёвку, спуститься вниз и поискать прохода там. Можно сходить в лес и исследовать возможность притащить дерево для перебрасывания через расщелину. Закрепление верёвки и поиски бревна могут тянуть за собой следующие подзадачи.
Если пытаться описать всё это в интерфейсе с явным выбором действий, то либо интерфейс перегрузится десятками опций для выбора, либо выборов окажется немного, так что победные стратегии будут достаточно очевидны и не будут являться существенным вызовом логике игрока.
Парсеры же с их интерфейсом и возможностями по глубокому моделированию мира позволяют достаточно органично обыграть подобную игровую ситуацию, сделав её очень интерактивной.
Игроку надо будет выдумывать варианты решения и проверять их осуществимость, а поскольку логичных состояний мира довольно много, то это будет долгий увлекательный процесс, по крайней мере, для тех, кому нравятся пазлы.

> 2) Что такое «многовариативное взаимодействие с физической моделью мира» как преимущество парсера?
> Если имеется в виду то, что можно по-разному взаимодействовать с объектами игрового мира, то ведь это и в менюшных играх есть
Парсерный интерфейс позволяет эргономично реализовать практически любое количество возможных действий над каждым объектом, а интерфейс с явным выбором команд от этого перегрузится до неиграбельного состояния. Кстати, в том числе и в видеоиграх, а не только в текстовых, потому что информативно визуализировать возможности десятков действий с выбором невозможно, например, какими-то иконками, всплывающими по клику мышки на изображении.
При этом, парсер сосредоточен на типовых физических действиях, типа взять, бросить, залезть, сломать и так далее, поэтому речь и идёт о физической модели мира.
Скажем, дерево можно трясти, подкапывать, рубить, обламывать с него ветки, попытаться на него залезть, расковырять кору и набрать сока и так далее. В какой-нибудь игре про человека на необитаемом острове всё это может быть логичным.
Однако парсер становится мало играбельным на нетиповых действиях, выходящих за рамки простого физического взаимодействия, поэтому фразы диалогов или сложные поступки лучше выбирать из меню, чем пытаться загнать в парсер. То есть не идёт речи о том, что парсер лучше для любой текстовой игры.

> 3) Что за «прочие» преимущества парсеров?
Например, возможность построения игровой механики за счёт неявности команд управления. Допустим, у вас игра-детектив, где надо осматривать место преступления, и ключ к решению в том, что преступник попал в комнату через окно.
Если вы расписываете это через меню, то игрок уже из списка вариантов получает практически спойлер в виде команд осматривания окна, клумбы за окном, сравнения следов с клумбы с ботинками жильцов дома и прочего. В парсерном же интерфейсе ему ещё надо додуматься до нужных действий, а если вы обеспечили достаточно большое фазовое пространство логичных состояний, то игроку ещё надо будет походить и попроверять разные гипотезы, по началу представляющиеся равновероятными возможностями решения пазла.

Многие из этих вещей можно пытаться реализовать в меню, и люди регулярно этим занимаются, но лучше всего они получаются именно в парсерах, если уметь их писать.

Однако это система взглядов, которой придерживаюсь я, тогда как существуют альтернативные школы мысли.
Например, кто-то считает, что пазлы усложняют геймплей, а игрока не нужно заставлять думать; кто-то считает, что раздувание фазового пространства — это плохо, особенно если реальное решение у пазла только одно, а остальные логичные варианты тупиковы; кто-то считает, что и в парсерном интерфейсе вполне уместны сложные неочевидные команды, как в меню, просто с подсказкой их прямым текстом в тексте игры, так что надо просто прочитать с экрана и ввести.
Такие игры существуют, но, на мой взгляд, в их случае парсер никак особенно не оправдан и не имеет каких-либо конкурентных преимуществ перед другими формами: видео, аудио или текст с меню. Фактически подобные парсеры просто подражают механикам, которые лучше реализуются в другой форме.
Возвращаясь к игре «Метель», я был бы готов сказать нечто подобное и про неё, что использование парсера в ней ничем неоправданно, если бы не несколько пазлов, которые как раз используют именно преимущества парсерного интерфейса, например, в пещере или нижнем зале замка.
quantumcat
Я бы хотел добавить следующее.

Одна из любимых игр — Лидия. Написана на метапарсере 2. Фактически, это как раз вариант «прочитай» и введи сложное действие. И в теории — ложится на меню идеально.

Так вот, парсер и тут тоже даёт дополнительную степень погружения. Никита с этим не согласен. Любители CYOA тоже. Но для меня — это так.

Почему? Наверное потому, что в таком случае игра напоминает 3-д книжку раскладушку. Открыл — а там целый мир из декораций. Сам факт, что я могу читать текст и писать хотя бы даже осмотреть что то. Или поговорить с кем-то, это совсем не то же самое, что повесить на эти объекты ссылки. Формально-логическое сравнение тут не прокатывает. Формально — да, можно все сделать ссылками. Или меню из глаголов (чем и был в сущности метапарсер2). Но по факту, воздействие совсем другое. Сужу по собственному опыту. Поэтому я все-таки не согласен с тем, что парсер это только олдскульное моделирование. :)

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

Мне нужен интерактивный текст, но без ссылок! Как, кроме парсера этого достичь? Да, Никита пишет связанно и логично, но эта логика работает не для всех. Она все-равно преломляется через какие-то индивидуальные вещи. Так что стори-дривен парсер должен жить. У меня все :)
GreyRaven
Никита и Петр, спасибо.

Первые два пункта по сути описывают одно и то же — сложные операции с миром игры и многовариантность результата таких операций. В играх с меню такое тоже встречается (например, «Домовой поможет» с КРИЛ-2018) и, на мой взгляд, в этих ситуациях меню как раз больше поможет игроку. Насчет перегруженности «менюшного» интерфейса в таких случаях — по-моему, тут уместнее говорить о перегруженности ИГРОКА информацией о состоянии мира и доступных действиях. И если меню еще как-то помогает игроку (показывает инвентарь, наличие ключевых слов, доступные действия), то парсер в тех же условиях заставляет игрока держать все в голове или вести записи самостоятельно.

А вот третий пункт (неоткрытость доступных действий) и то, что добавил Петр (минимум интерфейса на экране), — да, уже преимущества. То, что игрок должен сам догадаться, что ему делать и КАК делать, — делает интригой даже простые цепочки действий. «Туман войны» в текстовом виде. А минимум интерфейса на экране помогает атмосферности игры, и вдобавок дает очарование минимализма.
Nikita
> В играх с меню такое тоже встречается
В играх с меню много чего встречается, но, как я уже писал, с определённого момента интерфейс перестаёт справляться с явным отображением всех способов взаимодействия в достаточно информативном и удобном виде.
В меню есть несколько подходов, которые позволяют ещё долго бороться с комбинаторным взрывом возможных команд, когда команда собирается в два клика: либо выводится список действий, по клику на которые выпадает список объектов, к которым можно применить данное действие, либо же наоборот — выводится список объектов (или они помечаются ссылками в тексте), по клику на которые выпадает список возможных действий.
Однако когда счёт действий и объектов начинает идти на десятки, и подход с глагольным меню перестаёт выглядеть удобно.
> Парсер же продолжает с этим справляться, причём, одинаково и для 20 и для 100 возможных команд, просто предъявляя некоторые требования к игроку по пониманию синтаксиса и принципов вводимых игровых инструкций.

> Насчет перегруженности «менюшного» интерфейса в таких случаях — по-моему, тут уместнее говорить о перегруженности ИГРОКА информацией о состоянии мира и доступных действиях.
> И если меню еще как-то помогает игроку (показывает инвентарь, наличие ключевых слов, доступные действия), то парсер в тех же условиях заставляет игрока держать все в голове или вести записи самостоятельно.
Нет, конечно же никто в голове ничего не держит и ничего не записывает. Состояние мира описывается игрой при помощи процедурной генерации текста: положили в игре книгу на стол, и теперь игра автоматически изменит описание, выводя информацию, что на столе находится книга. Все описания динамически подстраиваются для соответствия любому возможному состоянию мира. Эта та работа, для которой и нужна хорошая парсерная платформа, а также прямые руки разработчика игры. Можно пройти половину игры, сохраниться, загрузить через пол года и без проблем продолжать. Впрочем, это не столько свойство парсерных игр, сколько игр с моделированием мира, то есть гипертекстовый point-and-click на классическом INSTEAD также работает с процедурной генерацией описаний состояний мира.
Опытный игрок в парсеры разве что в голове имеет некий стандартный словарь команд из нескольких десятков типовых действий, которые и без того достаточно очевидны. У многих из нас этот словарь образовался естественным образом, то есть мы начинали с нуля и просто играли, поэтому это вполне самостоятельно осваиваемый навык. Я освоился в первой парсерной игре минут за 15. Да и сейчас уже можно найти справку по типовым глаголам, в том числе прямо внутри игры, так что за пару минут можно нивелировать всю разницу в предварительных знаниях, отличающих опытных игроков от начинающих. В том же Метапарсере такой справочник так и вообще может быть частью интерфейса, хотя это иногда работает как спойлер, потому что может подсказать нетипичную команду, до которой так надо было бы доходить логически, исходя из игровой ситуации, например, «сверлить». За эту спойлерность подсказки Метапарсера многие как раз и не любят.
Вообще научиться играть в парсеры намного проще, чем, например, в шахматы, но почему-то никто не считает, что на шахматной доске надо написать список возможных ходов и комбинаций. :-)
quantumcat
Кстати, в МП есть один из режимов, когда он показывает глаголы/существительные только после того, как n букв слова были введены. А также, ограничивать список m вариантами.

С одной стороны это удобство (и компромисс), с другой — это все-таки немного нарушает кристальную простоту интерфейса парсера.