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

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

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

Как я делал 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 генерируемой комнаты. Отключение путей при необходимости и прочее. В общем это что-то генерируемого открытого мира без ограничений. Можно написать что-нибудь рогаликопобное. Я пока думаю над стратегией в фентезийном стиле. В общем покажу что-нибудь через полгодика. Может раньше.
Читать дальше

Лифтер 1 (веб версия)

Лифтер -- веб версияУ меня есть несколько любимых игр на INSTEAD, которые я всегда показываю своим друзьям и знакомым, когда хочу познакомить их с ИЛ.

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

Возможность запускать INSTEAD игры в веб существовала, но откровенно говоря, никто этим сильно не занимался, видимо в силу особенностей предпочтений сообщества. Так что когда в недавнем времени появился @epoxa, который сделал php/lua вариант движка и стал собственноручно выкладывать некоторые игры в интернет, я воспринял это с энтузиазмом.
Читать дальше

INSTEAD 2.2.2 для Windows -- проблема с запуском

В результате выявленной проблемы при запуске INSTEAD 2.2.2 на некоторых Windows с специфическими графическими картами (видимо, со старыми картами проявляется), я обновил .exe сборки без смены версии INSTEAD. Понимаю, это не очень хорошо, но учитывая характер проблемы (редкая и неприятная!) и тот факт, что INSTEAD в остальном никак не изменился (полная идентичность версий в плане игр), думаю это самый правильный вариант.

Если вы используете INSTEAD для своих игр и распространяете вашу игру вместе с интерпретатором — имеет смысл скачать еще раз. Если у вас не работала версия 2.2.2 — тоже можно скачать и попробовать. В остальных случаях обновляться нет смысла.
Читать дальше

Интерактив в школьной тетради

Интерактивная литература… Я и не осознавал, что делаю интерактивную литературу ещё со школы. Ну или её подобие. :)

Начало...


Началось всё давно. Ещё в младших классах школы я захотел сделать свою компьютерную игру. Тогда были популярны восьми- и шестнадцатибитные консоли. Их называли приставками. Помню фанател от черепашек-ниндзя и играл в них на «восьмибитке». Но хотелось чего-то своего. И самое главное — интерактивного. Возможности писать код у меня тогда не было. Полноценные персональные компьютеры были только в офисах и стоили дорого. А про всякие «Спектрумы» и «Микроши» я даже не знал.

Что же делать? Я начал делать интерактивные вещи без компьютера. Сначала сделал настольную игру про черепашек-ниндзя. Там было игровое поле, фигурки черепашек-ниндзя и игровая кость («кубик»). Нужно было бросать «кубик» и передвигать фигурку на соответствующее число ходов. По пути встречались боссы — те самые, которые встречаются в компьютерных играх. Мне было очень интересно. И главное там был мой сюжет! Но на этом всё не остановилось.

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

Метапарсер -- недопарсер?

Почитал обзор fireton на игру Петра Косых «Краски сентября» (ссылка...).
Метапарсер (МП) для меня — идеальное сочетание удобства ввода осмысленных фраз на русском. Просто меня лично убивало во многих русских «парсерных» программах вводить «ВЗЯТЬ ЛОЖКА», и только это было верным! То есть моя основная претензия к парсерной игре на русском — ПРАВИЛЬНОСТЬ ПАДЕЖЕЙ и ФОРМ. В этом смысле МП идеален, поскольку он сам достраивает падежи и формы.
Согласен, когда играешь в игру, читаешь описание локации, видишь в нём «цветы», пытаешься их нюхать, а получаешь в ответ «здесь нет объекта ЦВЕТЫ» — это раздражает. Но это уже зависит НЕ от МП, а от автора игры. Вопрос интерактивности предметов, заложенных в игру — вопрос геймплея. Не МП!
В той же «Оружие Ли Гуана» интерактивно ДАЛЕКО НЕ ВСЁ! Понимаю поклонников ТРУЪ парсера, когда создаётся иллюзия, что возможно ВСЁ. но и в настоящих парсерах возможно лишь то, что прописано автором, ПЛЮС стандартная библиотека.
Возвращаясь к ТРУЪ парсеру, мне очень нравится ТОМ. В том, что это — РЕАЛЬНЫЙ парсер. И там «из коробки» можно то, что в МП программить замучаешься. А многие вещи и не сможешь запрограммить в МП!
Потому давайте разделять понятия — «система ввода команд» и «степень интерактивности мира». Первое зависит ТОЛЬКО от выбранного автором движка. Второе — ТОЛЬКО от автора.
Читать дальше

Обзорство: "Краски сентября", Пётр Косых

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

«Краски» — довольно незатейливая история грусти, попадании (в другой мир, в другую страну?), блужданиях по парку и войне. Загадки несложные, и их немного. Как мне кажется, автор больше стремился рассказать историю, а не представить игрокам паззлфест.
Читать дальше