Публикации

alastochkin
Интересная мысль насчёт режиссуры игр. Основная проблема нейросетевого подхода — отсутствие точного контроля. В середине игры ваш умный суфлёр выдаст корявую фразу, словно гугл-переводчик. Как их перехватывать? Не будет это сложнее чем самому описать действия с предметом? Мне нравятся сервисы, которые помогают придумать эльфийской имена или мини-сюжеты для приключений. Текстовой игре с ИИ не получится довериться полностью
alastochkin
Тема интересная. С одной стороны все логично и должно повысить удовольствие от игры. С другой стороны, получается игра переходит из втягивающего варианта в проталкивающий. Смысл простой. Когда игра в исходном виде затягивает игрока геймплеем и сюжетом, то он работает короткими командами, а в голове у него возникают красивые сцены. Игра затягивает интересными событиями и не хочется отвлекаться на соавторство. Если игра, скажем так, скучновата, то чтобы интерес не угас, её можно проталкивать такими методами как доработкой изначального сеттинга и истории своими комментариями и длинными литературными командами. Мне кажется это будет костылями для недоработанных игр.
alastochkin
Александр, спасибо за комментарий. Я видел твой форк, но работ по нему не нашел или они есть? У тебя есть что-нибудь по красивой верстке книгр? Мне как технарю тяжело представить с чего начать дизайн страниц.
alastochkin
Как вариант могу предложить Androtads. Это мой плеер на базе Hunky Punk. Там уже готовая база игр RTADS, поддержка русской локали и автоматическое включение микрофона. Есть режимы активации в меню настроек: по кнопке, по «тряске» телефона или по таймеру. Интерфейс более простой и нет поддержки Inform, а также мультимедиа в TADS-играх.
alastochkin
Ой-ой. Небольшое уточнение — мини конкурс до 1 февраля 2019 :)
alastochkin
Ребята, я что-то не понял. А ссылка на Poof правильная (http://www.theshortgame.net/164-ifcomp-2018-pt-2/)? Она переводит куда-то на сайт IFComp, не могу найти инфу про формат для вычитки.
alastochkin
Смотри, я старался показать как минимальными средствами можно сделать автомат. У каждого движка есть сильные и слабые стороны. Иллюстрация могла быть на URQ, QSP, AXMA, главное чтобы читатели могли попробовать на чём-нибудь своём. Насчет констант соглашусь, наверное для такого проекта не очень актуально, был сделан задел под большой проект, где тексты пишутся в таблице типа word, а потом уже конвертируются в константы.
Симуляцию и логику как раз я не хотел выносить, потому что тогда теряется переносимость. Ведь весь код ink компилиться в json а ты можешь запустить в консоли, html или Lectrote. Хотя для серьезного проекта или для интеграции с unity это излишне, согласен.
alastochkin
Спасибо за рекомендации, буду учитывать в дальнейшем. Правда второй совет, наверное не применю. В финальной версии тексты вынес в переменные для более удобной вычитки.
alastochkin
По поводу командного текста, могу привести такое возможное решение — аббревиатуры команд. Будет вроде: «дик», сокращение от «дать имя комнате». Также можно сделать управление через цифровое меню, тогда будет еще быстрее. Насчет копирования предметов я не подумал, но это несложно делается. Например, сделали скамейку типичным способом, затем будет специальная команда, вида «запомнить скамейку как шаблон». Появляется объект шаблон (чтобы не пересекался с текущей реализацией скамейки), потом переходим в новую локацию и вводим «вставить шаблон», далее идёт ввод имени (новая скамейка) и готово. Насчет целого списка команд локации, то это будет скорее всего вариант тёмной комнаты — там обрабатывается весь список одинаково. Придётся делать состояние для комнаты, посложнее, согласен. Ну а голосовой ввод-вывод отдельная задача, например через подключение систем распознавания и синтеза речи для консольного приложения.
alastochkin
Это как посмотреть. Впринципе аналогия есть :)
alastochkin
Стартовая локация как таковая не задаётся, указывается, где находятся персонажи (в первой строке описания клетки). На скриншоте видно, что зонд будет стартовать в клетке А1. Если имя персонажа не указанно ни в одной клетке, то он не участвует в миссии. А, ну еще предполагается что зонд есть на всех уровнях и движок в начале всегда переключается на него.
Комментарий отредактирован: 18 июля 2018, 15:28 (2 раза)
alastochkin
Добавил ссылки в конец поста, можно смотреть
alastochkin
Я согласен с тем, что автор достаточно чётко передал идею безысходности жизни, причём получилось очень экономично в плане геймплея и текста параграфов. Не понравилось, что не было изменения героя, скучной жизни, какого-то активного посыла. Мне, как игроку, всё время хотелось позитивных выборов, которых автор не добавил. Поэтому, как образец современного искусства, могу сказать получилось здорово, а как в плане ощущения от игры — полный негатив, не хотелось бы включать подобные игры в будущем.
alastochkin
Уважаемый Борзик! Я ни в коем случае не хотел задеть чьи-то авторские чувства. Кроме своей работы и «Рыбак-рыбака», никого конкретно не имел ввиду, просто делюсь опытом и соображениями. На самом дела рад, что столько комментариев к статье. Опять же, в статье речь шла про текстовую игру, где диалог выступает не как основная механика, а как способ общения с NPC для выполнения квестов. Если делать чисто «диалоговую игру», то можно хоть самостоятельно парсить, ASK-TELL или чатбота использовать — все усилия уйдут на отладку общения.
Немного непонятно, чем сложно делать логику с контекстным меню. Строишь дерево реплик и подпираешь флагами, для активации реплик. Вот пример из игры «Фуга. Начало пути», где используется специальная диалоговая библиотека для TADS (аналогичные есть для Inform):

mainMaster: TalkActor
       isAskedStudy = nil
       //Диалоговая часть
	choices = [
		['Спросить про обучение.', &askStudyFirst, (self.isAskedStudy==nil) ]
		['Спросить про обучение.', &askStudy, self.isAskedStudy ]
		['Еще раз спросить про испытания.', &askTask, self.isAskedStudy ]
		['Спросить про фугу.', &askFuga , self.isAskedStudy ]
		['Закончить.', &sayGoodbye]
	]
	askStudyFirst = {
	   "— Должен тебе сказать, мой юный ученик, что время твоего обучения закончилось. Твой долг - спасти нашу Долину от тирании. Надо отыскать провидца, который сможет тебе помочь. Я слишком стар чтобы выходить из кельи и буду помогать тебе через особую духовную связь. Сейчас я разрушу барьер и ты сможешь войти в комнаты испытаний, пройдя которые, ты завершишь подготовку. Испытания должны быть тебе посильны. Используй свою силу, хитрость, а в особых случаях фугу. ";
       self.isAskedStudy = true;
       barier.moveInto(nil);
       barierAh.solve;
	}
	askStudy = {
	   "— Ты уже окончил обучение, можешь отправляться во внешний мир в поисках спасения для нашей Долины.";
	}
	askTask = {
		"— Испытания должны быть тебе посильны. Самое главное - не используй фугу, когда встретишь первые препятствия! Ты должен пройти их самостоятельно, пользуясь только своей хитростью и ловкость. ";
	}
	askFuga = {
		"— Как я уже много раз говорил, фуга, есть путешествие в прошлое усилием одного лишь сознания. Увеличение концентрации приводит к более глубокому погружению, совершённые же физические действия выводят тебя ближе к точке отправления. Твои действия во время фуги, приводят к возникновению темпоральных копий, они остаются в том мгновении когда ты совершил действие и продолжают его до твоего ухода в прошлое или до конца фуги. Ты можешь увидеть их, и даже взаимодействовать с ними если снова вернёшься в то мгновение. Работа с копиями есть основа мастерства фуги. Не забывай, все действия совершённые тобой и копиями в прошлом оказывают влияние на настоящее. Но хватит слов. К испытаниям!";
	}
	sayGoodbye = {
		"- Спасибо, я о вас не забуду. \b";
		self.stopTalk;
		Me.travelTo(startroom);
	}
Комментарий отредактирован: 7 июня 2018, 16:02
alastochkin
Как по мне, аналогия некорректная. Киберпанк — отдельный жанр литературы, нельзя сказать, что жанр не стоящий, а диалоги — игровая механика, которую авторы стараются реализовать в каждой игре, где есть NPC. Хорошо, я понял твою точку зрения, спорить дальше не буду, посмотрю как сделана Galatea и, если напишешь в комментах, другие игры с хорошим диалогом, тогда может изменю своё мнение.
alastochkin
Смотри, я не видел хороших примеров ASK-TELL в русскоязычных играх. Если во время работы с объектами на локации в квестах идёт «угадай глагол», потом «угадай глагол + объект», то с NPC «угадай спросить/рассказать/показать (описанные объекты в локации+невидимые объекты+абстрактные понятия)». Комбинаций становится очень много и большая вероятность что человек не построит правильно фразу. Может быть для любителей хардкорных парсеров это не большая проблема, для то попсового направления более критично. Тяжело сделать NPC по такой системе, чтобы он выполнял много функций и был удобен в общении.
alastochkin
Выглядит очень симпатично. Хотелось бы, чтобы авторы могли сделать удобный «скин» для своей игры, чтобы подобные вещи делались вне парсера, а чисто скриптами индикаторов.