«На фоне ковра» — Морлот должен быть разрушен

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

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

«Работа казалась нетрудной — доставить ковёр из одного района в другой. Если бы не маленькая «страховка», которая понадобилась работодателям. Если бы внутри ковра был бы не труп. Если бы не комендантский час и не цветовая дифференциация плащей внутри города.»
(Рецензия написана по версии игры Serial number 180513)

Сюжет

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

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

«Город делится на четыре района разных цветов. На юго-западе Чёрный Район, место обитания нищих, простолюдинов и гостей города. На северо-западе Золотой Район, где живут аристократы, богатые торговцы и знать, там же находится и Дворец Чистого Золота, настоящее чудо города. На северо-востоке известный далеко за пределами Морлота Красный Район, с кварталами развлечений, азартными играми и куртизанками. На юго-востоке расположен Белый Район, место обитания воинов, стражников и жрецов.»
Вы оказываетесь совсем неподготовленным к таким приключениям, имея лишь пропуск в Чёрный Район, да к тому же быстро обнаружив, что в ковре спрятан обнажённый женский труп. Однако действие яда уже началось, так что надо действовать и вам.

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

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

«Я протянул женщине руку, и тут же её пронзила острая боль. Вскрикнув, я обнаружил на ладони небольшой порез.

— А это маленькая страховка, — сказала женшщина. — Теперь ты отравлен страшным ядом Кульдаба, и умрёшь в страшных муках, если не доставишь ковёр Черепнакольскому до рассвета! Он даст тебе противоядие.

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

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

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

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

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

«Статуи изображают древних героев — обнажённых мужчин с огромными мечами…»
Наверняка старина Зигмунд с очень большим интересом ознакомился бы со всей этой игрой.

Правда периодически автор пытается не очень удачно натужно шутить, например, в рамках отсылки к печально известной среди хардкорных игроков игре «Ученик Некроманта». Да и местами начинает сильно повторяться:

«…
Квартал Пик
Длинные фаланги одинаковых серых домов, чисто вылизанная мостовая без единой соринки — всё здесь параллельно и перпендикулярно, а кое-где даже посыпано песком.
К западу — Ворота в Чёрный Район. К востоку — Переулок Ножа. К северу — Площадь Топора.



Улица Мечей
Длинные шеренги одинаковых серых домов, чисто вылизанная мостовая без единой соринки — всё здесь параллельно и перпендикулярно, а кое-где даже посыпано песком.
К западу — Храм Священного Плаща. К северу — Ворота в Красный Район. К югу — Площадь Топора.
…»
Также стоит отметить несколько путанную манеру описания ворот в городе. Так, например, ворота между Чёрным и Белым районами, если мы находимся в Чёрном Районе, называются в основном описании воротами в Белый, а уже чуть ниже в перечислении направлений воротами в Чёрный Район:

«…
Ворота в Белый Район
Высокая стена на востоке разделяет районы. Огромные ворота ведут в Белый Район.
К западу — Улица Тысячи Попрошаек. К востоку — Ворота в Чёрный Район
Да и в целом в описаниях локаций с воротами опять же прослеживается невнимательность автора, потому что в независимости от их местоположения в тексте фигурирует какая-то заклятая стена на востоке, хотя с точки зрения географии игрового мира эта самая стена на востоке будет лишь для некоторых из ворот, а для других она должна быть с других сторон:

«…
Ворота в Чёрный Район
Высокая стена на востоке разделяет районы. Огромные ворота ведут в Чёрный Район.
К западу — Ворота в Белый Район. К востоку — Квартал Пик.



Ворота в Золотой Район
Высокая стена на востоке разделяет районы. Огромные ворота ведут в Золотой Район.
К югу — Квартал Лавочников. К северу — Ворота в Чёрный Район.»
И так далее для всех ворот в игре.

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

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

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

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

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

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

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

Модель мира в «На фоне ковра» местами выполнена халтурно:

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

Жёлтого цвета флаг развивается над Рыночной Площадью.
>взять флаг
Ты попытался сорвать флаг, но он подвешен слишком высоко, возможно именно для того, чтоб такие как ты его руками не трогали.
>потрогать флаг
Никаких необычных ощущений нет.
…»
Моделирование хорошего мира в парсерной игре — это большая работа в том числе и над самим собой, практически аскеза. Следует учитывать все типы чувственного восприятия героя и реализовывать последовательные реакции на все действия для особых случаев, типа удалённых объектов (см. обсуждение методик разработки в комментариях к рецензии на игру «Все или ничего»).

Заметьте, не слова про необходимость кастомных реакций на нелогичные действия, типа «лизать стены». Это как раз не то, к чему следует стремиться и на что следует распыляться парсерным авторам, хотя в русскоязычном сообществе любителей интерактивной литературы попадаются члены секты лизунов, которые проповедуют практику применения этого и других контекстно немотивированных действий ко всем объектам во всех играх, но это ересь и не имеет никакого отношения к парсерному канону. Эти заблудшие рано или поздно закончат на костре из книг-игр с повешенными на их грудь избранными цитатами нелогичных команд из транскриптов, так что не стоит к ним примыкать.

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

Разве что к самому концу игры заметно, что автор немного подустал и откровенно скомкал приключения в Красном Районе, где он не столько реализовывал игровую механику, сколько смаковал специфические описания блуда и разврата. К слову, если вы возмущены происходящем в Красном Районе, то это наоборот лишний повод пройти игру до конца. Почему? А вот пройдёте и узнаете.

Самым сложным местом игры является пазл с рычагами и лампочками в Панели Управления Фонарями из Золотого Района. Для многих игроков он оказался роковым, так что они не смогли из-за этого полностью пройти игру. Данная загадка, конечно, несколько абстрактна и с точки зрения вписанности в антураж игры не является самой изящной, но именно как одиночная вишенка на торте очень неплоха. Для тех, кто из-за этого пазла не смог в полной мере насладиться игрой «На фоне ковра», я привожу под спойлером общий способ его решения, как и обещал в начале рецензии.

Рецепт решения пазла с рычагами и лампочками
Механика данного пазла заключается в том, что у нас есть 9 рычагов, каждый из которых меняет состояние каких-то лампочек. Именно меняет состояние, то есть если она погашена, то он её зажжёт, а если зажжена, то погасит. У каждого рычага свой фиксированный набор лампочек, к которым он привязан. Нам надо, последовательно переключая рычаги, свисти лампочки к такой комбинации, когда они все погашены.

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

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

Код подборщика решения пазла с рычагами и лампочками

# -*- coding: utf-8 -*-
# исходное состояние лампочек ( от первой до девятой, 1 - горит, 0 - потушена)
lamps = [0, 1, 0, 0, 1, 0, 1, 0, 0]
# привязки всех рычагов к лампочкам (от первой по девятую, 1 - переключает, 0 - нейтрален)
lever1 = [1, 1, 0, 1, 1, 0, 0, 0, 0] # белый
lever2 = [1, 1, 1, 0, 0, 0, 0, 0, 0] # жёлтый
lever3 = [0, 1, 1, 0, 1, 1, 0, 0, 0] # красный
lever4 = [1, 0, 0, 1, 0, 0, 1, 0, 0] # синий
lever5 = [0, 1, 0, 1, 1, 1, 0, 1, 0] # оранжевый
lever6 = [0, 0, 1, 0, 0, 1, 0, 0, 1] # зелёный
lever7 = [0, 0, 0, 1, 1, 0, 1, 1, 0] # коричневый
lever8 = [0, 0, 0, 0, 0, 0, 1, 1, 1] # розовый
lever9 = [0, 0, 0, 0, 1, 1, 0, 1, 1] # чёрный
# ограничение попыток подбора
limit = 200

def useLever(lever):
	n = 0
	while n < 9:
		lamps[n] = abs(lamps[n] - lever[n])
		n += 1

import random

i = 1
commands = ''
rnd = tmp = 0

while i <= limit:
	if lamps == lever1:
		commands += 'повернуть белый рычаг\n'
		break
	if lamps == lever2:
		commands += 'повернуть жёлтый рычаг\n'
		break
	if lamps == lever3:
		commands += 'повернуть красный рычаг\n'
		break
	if lamps == lever4:
		commands += 'повернуть синий рычаг\n'
		break
	if lamps == lever5:
		commands += 'повернуть оранжевый рычаг\n'
		break
	if lamps == lever6:
		commands += 'повернуть зелёный рычаг\n'
		break
	if lamps == lever7:
		commands += 'повернуть коричневый рычаг\n'
		break
	if lamps == lever8:
		commands += 'повернуть розовый рычаг\n'
		break
	if lamps == lever9:
		commands += 'повернуть чёрный рычаг\n'
		break
	while rnd == tmp:
		rnd = random.randint(1, 9)
	tmp = rnd
	if rnd == 1:
		useLever(lever1)
		commands += 'повернуть белый рычаг\n'
	elif rnd == 2:
		useLever(lever2)
		commands += 'повернуть жёлтый рычаг\n'
	elif rnd == 3:
		useLever(lever3)
		commands += 'повернуть красный рычаг\n'
	elif rnd == 4:
		useLever(lever4)
		commands += 'повернуть синий рычаг\n'
	elif rnd == 5:
		useLever(lever5)
		commands += 'повернуть оранжевый рычаг\n'
	elif rnd == 6:
		useLever(lever6)
		commands += 'повернуть зелёный рычаг\n'
	elif rnd == 7:
		useLever(lever7)
		commands += 'повернуть коричневый рычаг\n'
	elif rnd == 8:
		useLever(lever8)
		commands += 'повернуть розовый рычаг\n'
	elif rnd == 9:
		useLever(lever9)
		commands += 'повернуть чёрный рычаг\n'
	i += 1

if i <= limit:
	solution = open('solution.txt', 'w')
	solution.write(commands)
	solution.close()
	print(f'Найдено решение в {i} ходов. Оно записано в solution.txt\n(Нажмите Enter)')
else:
	print(f'За {limit} итераций не удалось подобрать решение. Имеет смысл провести повторный подбор.\n(Нажмите Enter)')
input()


Я дважды перезапускал игру для проверки, и, насколько я понимаю, в ней рандомизировано только начальное состояние лампочек, а их привязка к рычагам не изменяется, поэтому, скорей всего, вам потребуется только указать свою текущую комбинацию лампочек в переменной lamps на строке 3, а привязки рычагов на строках 5-13 исследовать заново и изменять в скрипте не придётся.

Код из вышеприведённого спойлера надо скопировать и сохранить в обычном текстовом файле в кодировке UTF-8, ну и назвать его, например, «solution.py». Для запуска нужно скачать и установить на компьютер Python, после чего в командной строке запустить интерпретатор, указав ему путь к скрипту:


python solution.py
Ну или можно заменить вывод результата решения в последних 8 строках скрипта на следующие 4 строки:


if i <= limit:
	print('Найдено решение в %i ходов:\n%s' % (i, commands))
else:
	print('За %i итераций не удалось подобрать решение. Имеет смысл провести повторный подбор.' % limit)
и запустить модифицированный код скрипта в онлайн-интерпретаторе Python, чтобы ничего не скачивать и не устанавливать.

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


Вот так надо с этим пазлом, а что вы думали? Классические парсерные игры — это вам не трамвай, чтобы просто сел и поехал.

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

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

Технические аспекты

Откровенно говоря, мне очень не хотелось поднимать техническую тему парсерных платформ, так как для большинства авторов это вопрос бесконечной агрессивной рационализации собственного нерационального случайного выбора, так как мало кто выбрал платформу осознано, реально достаточно хорошо познакомившись со всеми альтернативами, но для «На фоне ковра» сделать это всё-таки придётся. На Парсерфесте-2018 есть 3 игры, написанные на платформе RInform: одна на стабильном варианте для Z-машины и две на тогда ещё бета версии для Glulx от 13 февраля 2018 года.

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

«…
>взять всё
Попробуй лучше команду «Xyzzy».
>xyzzy
Ты говоришь волшебное слово, и мгновенно берёшь ВСЁ, применяешь ВСЁ ко ВСЕМУ и с успехом проходишь игру. Ты победил. До свиданья.
…»
Ну а то, что в RInform слабая реализация функциональности составных команд, типа применения действия к группе заданных объектов, последовательное выполнение действий, задаваемых одной командой, и так далее, знает наверно меньшее число людей, но для тех, кто понимает толк в парсерах со сложной механикой, это также уже давно не секрет. Однако, несмотря на это, в «На фоне ковра» взята не версия RInform для Z-машины, где это работает хотя бы на каком-то уровне, а версия для Glulx, где данная функциональность поломана полностью, так что составными командами пользоваться в игре в принципе невозможно.

«…
Несмотря на название, Тупик Гробокопателей довольно глухое и мрачное место — отвесные кирпичные стены, покрытые ядовитым плющом, окружают пустырь, где-то вдалеке воют собаки, а если неосторожно ступать по перекопанной земле в кочках и ямах, то можно и ногу себе свернуть к чёртовой матери.
К северу — Улица Угольщиков.
Прямо на земле лежит большой ковёр. Он свёрнут.
>о стены. о плющ. о землю. о ямы. о кочки. о ковёр. о себя. и
Глухие стены, покрытые ядовитым плющом, окружают Тупик Гробокопателей со всех сторон.
Этот глагол непонятен.
…»
Впрочем, автор «На фоне ковра» пошёл ещё дальше и ко всем общим багам стандартной библиотеки RInform добавил и эксклюзивные, например, поломав обработку комментариев:

«…
>* комментарий
Этот глагол непонятен.
…»
Сломанные комментарии — это, конечно, не очень критично для геймплея, но просто противно. Ещё в начале двухтысячных в русскоязычном парсерном сообществе было принято решение, что мы, в отличие от англоязычной сцены, берём поддержку комментариев сразу в стандартную библиотеку, потому что у нас выше культура и богаче духовность, так что нам всегда есть, что написать помимо команд: либо для автора, либо даже просто как заметку для себя, чтобы потом что-то уточнять по транскрипту. Ну а чуть позже в качестве основного символа комментария был закреплён знак звёздочки «*», потому что в отличие от первоначально использовавшегося знака больше «>», звёздочку можно вводить со стандартной русской клавиатуры без переключения раскладки. И вот теперь появляются какие-то ревизионисты, которые пытаются расшатывать скрепы русского парсера и убирать функциональность комментариев. Это ужасно, потому что у парсерных игроков при виде сообщения об ошибке распознавания команды всегда дёргается глаз, ну и особым шиком считается пройти игру, ни разу не увидев такие сообщения.

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

В итоге

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

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

Ссылки

6 комментариев

Irremann
Ценность команды «взять все» явно переоценена (вписал в последнюю свою игру практически такую же шутку, как у горафа, лол). А комментарий очевидно пишется в лог, который в онлайн-версиях популярных платформ все равно недоступен. Да еще и отдельную команду для этого придумали, лол. В общем традиции загнивающего «парсерного лобби» нам, «новой волне», совсем не указ. А лучшей парсерной игрой 2018 очевидно является «Другой Марс».
Nikita
> Ценность команды «взять все» явно переоценена (вписал в последнюю свою игру практически такую же шутку, как у горафа, лол).

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

> А комментарий очевидно пишется в лог, который в онлайн-версиях популярных платформ все равно недоступен.

Даже в онлайне, если автор целенаправленно не очищает экран, транскрипт с командами и реакциями обычно остаётся на странице, так что по нему можно сделать поиск. То есть в нужных местах, мы оставляем комментарий с ключевым символом, и потом можем быстро найти все эти заметки, например, в начале второго уровня фигурировала какая-то важная информация (ну или кажущаяся таковой), мы это отметили, а потом из конца третьего уровня сможем быстро найти. Опять же оценить это могут только те, кто играет в парсеры со сложными квестовыми механиками, ну или авторы, которым посчастливится напасть на игрока, дающего сильную обратную связь при прохождении. Здесь игрок может просто скопировать текст со страницы и прислать автору. Разумеется, если онлайн-плеер в принципе поддерживает выделение со страницы, но реально популярные платформы это поддерживают. Некоторые из них поддерживают даже автологирование на сервере.
И здесь опять же речь была о том, что автор игры не отказался что-то делать, а сломал то, что уже было и работало.

> А лучшей парсерной игрой 2018 очевидно является «Другой Марс».

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

P.S. Вы слишком часто используете слова «очевидно» и «явно», в том числе в вопросах, в которых очевидно обратное, например, как с записью логов с комментариями, — это плохой признак, выдающий неспособность оппонировать на уровне аргументов и корректно обмениваться мнениями.
Oreolek
Я вот не совсем понимаю, эти отступления про ересь и скрепы русского парсера — это в шутку или всерьёз, так что спрятал их под спойлер. Злой Гораф уже пересобрал игру с новой версией библиотеки RInform, так что комментарии работают. Прежде чем ругать весь RInform, хоть бы на демках баги проверили. Я вот проверил, несколько команд через точку он понимает.

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

Мне даже не интересно спрашивать, так что же будет, если в шутку, и что, если всерьёз.
Либо удаляйте статьи полностью, если считаете, что они нарушают правила ресурса, либо не трогайте. У меня нет ни времени ни желания отслеживать несанкционированные правки моих текстов со стороны администратора. Довольно странно, что приходится пояснять эти элементарные нормы приличия UGC блога. Здесь всё-таки не wiki.
Человек, объясняющий собственные шутки и иронию (тем более самоиронию), выглядит не менее глупо, чем человек, их не понимающий, так что эту тему я даже обсуждать не буду.

> Злой Гораф уже пересобрал игру с новой версией библиотеки RInform, так что комментарии работают.

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

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

Я явно отметил версию RInform, которую ругал за конкретные баги. До недавнего времени игра была собрана на ней, так что все эти баги там присутствовали в полный рост, о чём и была речь. Я даже явно отметил, что на версии для Z-машины определённых багов не было, то есть вопросы были только к определённой редакции платформы.
Если кто-то воспринимает разговор на примере конкретной игры как обзор всей платформы (в т.ч. всех следующих её релизов) и тем более злонамеренные нападки на неё — это его личные проблемы плохих навыков функционального чтения и общей мнительности.
Oreolek
Нормы приличия UGC статей всё-таки подразумевают правки администратора, потому что администрация первой отвечает за публикацию (в том числе и репосты) контента. Причём мы говорим о косметических правках, с явной пометкой «скрыто модератором», без изменений текста.

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

Элементарные нормы приличия при обнаружении бага — это в первую очередь информировать ответственного. Автор игры не отвечает за стандартную библиотеку, поэтому разнос «слабой реализации функциональности составных команд» в обзоре выглядит издёвкой не к месту, особенно когда вы сами признали, что выцепили виновным Горафа только потому, что у него в игре используется классическая квестовая механика, а остальным это «простительно».

Перед КРИЛом исправление багов особенно важно, потому что авторы RInform должны будут ещё успеть скачать новую версию библиотеки и пересобрать свои игры. А то вдруг через полгода им будут указывать на что-то, что исправлено в Glulx, но сломано в Z-версии.
Nikita
> Нормы приличия UGC статей всё-таки подразумевают правки администратора, потому что администрация первой отвечает за публикацию (в том числе и репосты) контента.

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

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

> И нет, вы не отметили версию библиотеки, а только версию (она же дата сборки) игры.

Вот цитата из рецензии:

«На Парсерфесте-2018 есть 3 игры, написанные на платформе RInform: одна на стабильном варианте для Z-машины и две на тогда ещё бета версии для Glulx от 13 февраля 2018 года.»

Хотя «Откуда в Пустоши появились монстры», судя по косвенным признакам, была собрана на какой-то промежуточной редакции кода между 0.9.0 бета и 0.9.0, но тут уже трудно выяснить.

Кроме того, вы пишите:

> RInform вообще не имеет версий, игра может сообщить только дату сборки и версию компилятора.

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

«…
>версия

Release 1 / Serial number 180513 / Inform v6.34 Library 6/11 SD
Interpreter version 0.5.4 / VM 3.1.2 / Library serial number 040227
«Информ»: Русская версия Glulx v0.9.0 (бета), 2018-02-13
…»

Также вы пишите:

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

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

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

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

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

> Автор игры не отвечает за стандартную библиотеку, поэтому разнос «слабой реализации функциональности составных команд» в обзоре выглядит издёвкой не к месту, особенно когда вы сами признали, что выцепили виновным Горафа только потому, что у него в игре используется классическая квестовая механика, а остальным это «простительно».

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

> Элементарные нормы приличия при обнаружении бага — это в первую очередь информировать ответственного.

Возможно, хотя с проблемой «взять всё» ситуация известна годами, да к тому же я играл в «На фоне ковра» совсем не полгода назад, а сравнительно недавно, да и в любом случае, это всё не имеет никакого отношения к тому, о чём мы здесь говорим, так что не размывайте предмет спора. К вашему администраторскому произволу и прямой лжи про мой текст это всё не относится. Если вам просто трудно остановиться, то я могу помочь, перестав отвечать на всю эту вашу истерику, благо с вышеприведёнными цитатами всё уже итак понятно кто здесь лжёт и у кого какой уровень знания предмета.
Я достаточно хорошо знаю все основные русскоязычные парсерные платформы, и если бы действительно ставил себе цель разнести конкретную платформу, то мог бы это сделать намного более подробно с выворачиванием всех потрохов. Причём, для любой из платформ, включая ту, к сторонником которой меня относит массовое сознание. Только, боюсь, в сообществе слишком мало людей, в принципе готовых к техническому разговору на такие темы, что регулярно доказывается истериками фанатов отдельных платформ по каждому поводу и даже без повода.
Комментарий отредактирован: 25 ноября 2018, 15:35