Как я делал web-INSTEAD, и что из этого вышло. Часть II

Как я делал web-INSTEAD
Часть I

Что из этого вышло
   В настоящий момент веб-инстед представляет собой вполне зрелую систему, неплохо проигрывающую достаточно широкий класс инстед-игр. Конечно, в аркадные, динамические игры, наподобие Miner Bold или Lode runner, играть не получится, но ведь они и не относятся к интерактивной литературе, не правда ли? Веб-инстед на ставит перед собой задачу полного, детального копирования движка INSTEAD — это вряд ли возможно, да и не имеет большого смысла. Вместо этого брались и запускались конкретные игры. Причем, как и в случае с движком-прародителем, новый функционал добавлялся в движок постепенно, по мере необходимости для той или иной игры.
   Благодаря значительному количеству уже адаптированных игр, движок развился настолько, что как правило, обычные игры, не использующие какие-то особые технические хитрости, запускаются в вебе сразу, как есть, не требуя дополнительной доработки, кроме оформления визуальной темы игры (это обычный css-файл стиля). Однако, все же попадаются и игры, которые не могут быть запущены на веб-инстеде без некоторого изменения их кода. В качестве примера можно привести игры, которые используют часто срабатывающий таймер (скажем, каждую секунду) для управления фоновым процессом проигрывания музыки.
   Или возьмем метапарсер. Это одно из последних достижений веб-инстеда, ставшее возможным благодаря тому, что @peter доработал оригинальный модуль (мы видим процесс обратного влияния веб-движка на своего прародителя — INSTEAD). И хотя игра «Клара — расхитительница варенья», работающая на метапарсере, уже перенесена в веб, я вообще решил отказался от «парсерного» стиля ввода через командную строку, напротив, используя возможность метапарсера подсказывать допустимые для ввода слова, фактически превратив тем самым игру в «менюшную», которой можно управлять выбирая нужные действия мышкой.
А вот картинка, как это выглядит

Материк 2.0

Перевод игры «Материк» достиг, наконец, стадии беты. На настоящий момент игра полностью переведена, проходима, но, возможно, частично не доделана. Была обновлена также и русская версия. Если кто-то может помочь с тестированием (особенно, англоязычного варианта), то ваше имя навеки останется в анналах русской интерактивной литературы.

Собственно, ссылка:
instead-games.ru/game.php?ID=90

Ladies and gentlemen, please test:
instead-games.ru/game.php?ID=90
Читать дальше

Как мне писалось о "неизбежных вещах"

Было это в далеком 2013, когда на форуме INSTEAD еще превалировали синие тона, а я использовал QWERTY. В воздухе витала праздность да леность, когда vorov2 выступил с инициативой третьего Инстедоза в лаконичном формате до 16 кБ. Кратко, без иллюстраций и на космическую тематику — как тут можно устоять? Я и не пытался.

Начало положено - можно и отдохнуть
Читать дальше

Как я делал web-INSTEAD, и что из этого вышло. Часть I

Как я делал web-INSTEAD
   Для тех, кто еще не знает, поясню, что веб-инстед — это паразитический игровой движок, который, собственно, не придумывает ничего нового, а пытается эмулировать INSTEAD, заимствуя из него все хорошее. Чем же тогда он отличается от оригинального инстеда? Разумеется, приставкой веб! Вся затея состоит в том, чтобы сделать инстед-игры доступными в интернете сразу, без скачивания и установки.
А дальше?

Клара - расхитительница варенья

Клара - расхитительница вареньяПредставляю вашему вниманию ремейк игры Николая Жарикова (2006, платформа 6 days) на INSTEAD метапарсере.

В игре использованы иллюстрации Максима Ганенко. За что ему большое человеческое спасибо! Если бы не эти иллюстрации, ремейка бы не было.

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

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

Надеюсь, вам понравится этот ремейк!
Читать дальше

Динамически генерируемый лабиринт на INSTEAD

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

Код под спойлером
-- $Name:Нанотест$
-- $Version:0.01$
-- $Name(ru):Нанотест$
instead_version "1.8.0"

require "xact"			-- подключаем модуль xact
require "hideinv"		-- подключаем модуль hideinv
require "para"			-- догадайтесь, что мы подключили в этот раз ;)
require "dash"			-- подключаем dash
require "quotes"		-- подключаем quotes

game.codepage="UTF-8";

game.act = 'Не получается.';
game.inv = 'Хм, странная штука.';
game.use = 'Не сработает.';

global {
x = 0;
y = 0;
z = 0;
roomname = 'room0_0_0';
myrooms = {};
};

function myconstructor()
	local v = {};
	v.nam = roomname;
--в dsc выводится номер текущей комнаты, но также можно генерировать сюда любое описание.
	v.dsc = roomname;
        v.disp = 'Название';
	v.way = {vroom('Север', north), vroom('Восток', east), vroom('Юг', south), vroom('Запад', west), vroom('Вверх', up), vroom('Вниз', down)};
	v.exit = function(s, t)
		if t == north then
			y = y + 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == east then
			x = x + 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == south then
			y = y - 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == west then
			x = x - 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == up then
			z = z + 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		elseif t == down then
			z = z - 1;
			roomname = 'room'..x..'_'..y..'_'..z;
			if myrooms[roomname] then
				p 'Все гут';
			else
				myrooms[roomname] = new('myconstructor()');
			end;
			walk(myrooms[roomname]);
		end;
	end;
	return room(v);
end;

---Начало---------------------------------------------------------------------------------------------------------------

main = room {
	forcedsc = true;
	nam = 'Начало';
	enter = function()
		myrooms['room0_0_0'] = new('myconstructor()');
		start = myrooms['room0_0_0'];
		take 'stone';
	end;
--	pic = 'gfx/01.jpg';
	dsc = '';
	way = {vroom('Играть', 'start')};
};

--пачка комнат-заглушек, т.к. vroom надо ссылаться на реальную комнату.

north = room {
	nam = 'Заглушка';
};

east = room {
	nam = 'Заглушка';
};

south = room {
	nam = 'Заглушка';
};

west = room {
	nam = 'Заглушка';
};

up = room {
	nam = 'Заглушка';
};

down = room {
	nam = 'Заглушка';
};


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

Как выбрать книгу-игру

Если хочется что-нибудь прочитать, но сложно выбрать, можно попробовать воспользоваться этой схемой :)



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

За Façade: модель диалогов в играх

Это перевод статьи Эмили Шорт от 12 мая 2009 года

В прошлом году Брент Эллисон опубликовал статью о системах построения диалогов на сайте Gamasutra. Чуть позже Джонатан Блоу открыл в своем блоге дискуссию о создании диалогов между персонажами в играх. Затем в феврале Кристиан Мажевски написал о диалогах в Emerald City Confidential, размышляя о трудностях представления казуальным игрокам диалогов со множеством решений.

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

В частности, большинство существующих анализов объединяют в одно пользовательский интерфейс (как представлены пункты диалога? как они появляются на экране? предлагается ли игроку полный текст его реплики или же ее обрезанная версия?) и лежащую в его основе модель (как игра решает, какие реплики будут доступны в следующий момент? как ограничить варианты для игрока или наоборот сделать их доступными? что влияет на то, когда и что NPC [неигровые персонажи] говорят сами по себе?)

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

Однако лежащая в основе модель значит очень много.
Читать дальше

Мир из слов: интерактивные текстовые приключения

Предлагаю вашему вниманию… нет, не совсем перевод. Это слегка сокращенный пересказ выступления Джона Ингольда “Мир из слов: интерактивные текстовые приключения” на конференции Independent Games Summit. Джон — один из создателей компании inkle, создающей текстовые приключения для мобильных платформ. В журнале IFprint было несколько статей, посвященных играм этой компании.

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

Читать дальше

Интерактивное повествование: Использование разумных систем

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

http://tinyurl.com/qjqtqcc
Читать дальше