Changeset - 77aa01170934
[Not reviewed]
default
0 9 8
Silverwing - 9 years ago 2015-06-16 14:02:48

lseryanotrr finished
17 files changed with 609 insertions and 23 deletions:
0 comments (0 inline, 0 general)
engineering.lua
Show inline comments
 
new file 100644
 
first_city_engineering_door = obj {
 
	nam = "first_city_engineering_door";
 
	dsc = function(s)
 
		if (first_city_engineering.open) then
 
			return [[]];
 
		else
 
			return [[{Двери}, ведущие в зал обслуживания заблокированы. ]];
 
		end;
 
	end;
 
};
 
 
first_city_engineering_door_inside = obj {
 
	nam = "first_city_engineering_door_inside";
 
};
 
 
first_city_engineering = room {
 
	nam = "first_city_engineering";
 
	disp = "Лсэрианотр, зал обслуживания";
 
	dsc = [[
 
		Вы находитесь в одном из залов обслуживания Лсэрианотра. Двери в помещение заблокированы и разблокировать их не представляется возможным.
 
	]];
 
	entered = function(s)
 
		service_tunnels.position = "24";
 
	end;
 
	obj = {
 
		"first_city_door_control",
 
		"first_city_door_control_cardreader",
 
		"item_keys"
 
	};
 
	way = {
 
		kh_vroom("В сервиcный тоннель", "service_tunnels");
 
	};
 
};
 
 
item_keys = obj {
 
	nam = "item_keys";
 
	disp = "Ключи";
 
	dsc = "На столе лежат несколько {металлических пластин}. ";
 
	act = function(s)
 
		take(item_middle_rim_key);
 
		take(item_airlock_key);
 
		take(item_engineering_key);
 
		take(item_blank_key);
 
		disable(s);
 
		return "Вы берете пластины себе";
 
	end;
 
};
 
 
--TODO (публичная демо-версия) сделать картинки ключей
 
--TODO (приватная демо-версия) сделать случайную генерацию ключей
 
 
item_airlock_key = obj {
 
	nam = "item_airlock_key";
 
	disp = "Ключ-карта";
 
	inv = [[Небольшая металлическая пластина около 6 см в ширину и 10 см в длину. На ней нет никаких символов, кроме трех цилиндров заключенных в квадрат. ]]; 
 
};
 
 
item_middle_rim_key = obj {
 
	nam = "item_middle_rim_key";
 
	disp = "Ключ-карта с отверстиями";
 
	inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину, на ней в ряд через равные промежутки присутствуют отверстия или нарисованные круги: круг, отверстие, круг, отверстие, круг, отверстие, отверстие, круг ]]; -- 01010110 = 172 
 
};
 
 
item_engineering_key = obj {
 
	nam = "item_engineering_key";
 
	disp = "Ключ-карта с отверстиями";
 
	inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину, на ней в ряд через равные промежутки присутствуют отверстия или нарисованные круги: круг, отверстие, круг, круг, отверстие, круг, круг, круг ]]; -- 01001000 = 144
 
};
 
 
item_blank_key = obj {
 
	nam = "item_blank_key";
 
	disp = "Ключ-карта без отверстий";
 
	inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину с восемью кругами, нарисованными на ней в ряд ]]; -- 00000000 = 0
 
};
 
 
first_city_door_control_cardreader = obj {
 
	nam = "first_city_door_control_cardreader";
 
	state = 0;
 
	dsc = function(s)
 
		if (s.state == 0 or s.state == 2) then
 
			return "В терминале вы видите небольшую {щель}, около 3 сантиметров шириной.";
 
		else
 
			return "В терминале вы видите небольшую {щель}, около 3 сантиметров шириной. В ней застряла одна из ключ-карт";
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.state == 0 or s.state == 2) then
 
			return "Очевидно, сюда что-то вставляется. ";
 
		else
 
			return "Ключ-карта застряла. Вы не сможете вытащить ее руками. ";
 
		end;
 
	end;
 
	used = function(s, o)
 
		if (s.state == 0) then
 
			if (o == item_middle_rim_key) then
 
				s.state = s.state + 1;
 
				remove(item_middle_rim_key, pl);
 
				first_city_middle_south.open(first_city_middle_south);
 
				return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Вы слышите откуда-то издалека звук открывающихся огромных ворот. Карта остается в разъеме. ";
 
			elseif (o == item_engineering_key) then
 
				s.state = s.state + 1;
 
				remove(item_engineering_key, pl);
 
				return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Двери в комнату слегка приоткрываются. После чего с громким стуком захлопываются. Карта остается в разъеме. ";
 
			elseif (o == item_blank_key) then
 
				s.state = s.state + 1;
 
				remove(item_blank_key, pl);
 
				return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Карта остается в разъеме. ";
 
			else
 
				return "Это сюда не подойдет";
 
			end;
 
		elseif (s.state == 1 and o == item_umbrella) then
 
			s.state = 0;
 
			return "Острым наконечником зонта вы поддеваете ключ и вытягиваете его из разъема. К сожалению, он более непригоден к использованию - вы видите, что он погнут";
 
		else
 
			return "Прежде чем вставлять что-то еще, нужно извлечь ключ. ";
 
		end;
 
	end;
 
};
 
 
first_city_door_control = obj {
 
	nam = "first_city_door_control";
 
	dsc = "Возле одной из стен стоит терминал.";
 
};
 
\ No newline at end of file
first_city_inner_rim.lua
Show inline comments
 
-- TODO (приват) добавить описание шлюза
 
-- TODO (приват) картинка с дисплея терминала
 
-- TODO (приват) вменяемое описание цели данного паззла, тексты на навьярском или реалистичное объяснение их понятности персонажу
 
first_city_airlock_control = room {
 
	nam = "first_city_airlock";
 
	disp = "Комната управления шлюзом центрального зала";
 
	dsc = function (s)
 
		return "Вы находитесь в небольшой комнате. Перед вами расположен дисплей, на котором расположены три вертикальные полосы разной длины. " .. tostring(s.tanks[1]) .. "/" .. tostring(s.tanks[2]) .. "/" .. tostring(s.tanks[3]);
 
	end;
 
	tanks = {10, 0, 0};
 
	tanks_capacity = {10, 7, 3};
 
	selected_source = nil;
 
	selected_target = nil;
 
	detect = function(s)	
 
		if (tanks[2] == 5) then
 
			return true;
 
		else
 
			return false;
 
		end;
 
	end;
 
	obj = {
 
		"first_city_transfer",
 
		"first_city_select_s",
 
		"first_city_select_p",
 
		"first_city_select_a"
 
	};
 
};
 
 
first_city_transfer = obj {
 
	nam = "first_city_transfer";
 
	dsc = "{Выполнить} ^";
 
	act = function(s)
 
		if (first_city_airlock_control.selected_source and first_city_airlock_control.selected_target) then
 
			local tmp = math.min(first_city_airlock_control.tanks[first_city_airlock_control.selected_source], first_city_airlock_control.tanks_capacity[first_city_airlock_control.selected_target] - first_city_airlock_control.tanks[first_city_airlock_control.selected_target]);
 
			first_city_airlock_control.tanks[first_city_airlock_control.selected_source] = first_city_airlock_control.tanks[first_city_airlock_control.selected_source] - tmp;
 
			first_city_airlock_control.tanks[first_city_airlock_control.selected_target] = first_city_airlock_control.tanks[first_city_airlock_control.selected_target] + tmp;
 
			first_city_airlock_control.selected_source = nil;
 
			first_city_airlock_control.selected_target = nil;
 
			return "Выполнено";
 
		else
 
			return "Невозможно выполнить";
 
		end;
 
	end;
 
};
 
 
first_city_select_s = obj {
 
	nam = "first_city_select_s";
 
	dsc = "{Выбрать первый баллон} ^";
 
	act = function(s)
 
		if (not first_city_airlock_control.selected_source) then
 
			first_city_airlock_control.selected_source = 1;
 
		else
 
			first_city_airlock_control.selected_target = 1;
 
		end;
 
		
 
		return "";
 
	end;
 
};
 
 
first_city_select_p = obj {
 
	nam = "first_city_select_p";
 
	dsc = "{Выбрать второй баллон} ^";
 
	act = function(s)
 
		if (not first_city_airlock_control.selected_source) then
 
			first_city_airlock_control.selected_source = 2;
 
		else
 
			first_city_airlock_control.selected_target = 2;
 
		end;
 
		
 
		return "";
 
	end;
 
};
 
 
first_city_select_a = obj {
 
	nam = "first_city_select_a";
 
	dsc = "{Выбрать третий баллон} ^";
 
	act = function(s)
 
		if (not first_city_airlock_control.selected_source) then
 
			first_city_airlock_control.selected_source = 3;
 
		else
 
			first_city_airlock_control.selected_target = 3;
 
		end;
 
		
 
		return "";
 
	end;
 
};
 
 
first_city_inner_south = room {
 
	nam = "first_city_inner_south";
 
	disp = "Лсэрианотр, внутреннее кольцо, юг";
 
@@ -47,6 +134,11 @@ first_city_inner_north = room {
 
	east = "first_city_inner_east";
 
	west = "first_city_inner_west";
 
	navigatable = true;
 
	entered = function(s)
 
		if (first_city_airlock_control.detect(first_city_airlock_control)) then
 
			path("first_city_to_center"):enable();
 
		end;
 
	end;
 
	dsc = [[
 
		Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. 
 
	]];
 
@@ -54,8 +146,8 @@ first_city_inner_north = room {
 
		Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. 
 
	]];
 
	way = {
 
		vroom("Центр города", "first_city_central_room_entrance");
 
		vroom("Левиафан", "leviathan_airlock");
 
		kh_vroom("Центр города", "first_city_central_room_entrance", "first_city_to_center"):disable();
 
		kh_vroom("Левиафан", "leviathan_airlock");
 
	};
 
};
 
 
@@ -63,8 +155,7 @@ first_city_central_room_entrance = room 
 
	nam = "first_city_central_room_entrance";
 
	disp = "Лсэрианотр, Вход в центральный зал";
 
	dsc = [[
 
		Вы находитесь у входа в центральный зал Лсэрианотра. Входная дверь закрывается и вода быстро откачивается из помещения. Вы снимаете скафандр и готовитесь к встрече с Уильямом.
 
		Отсюда пути назад уже нет.
 
		Вы находитесь у входа в центральный зал Лсэрианотра. Входная дверь закрывается и вода быстро откачивается из помещения. Вы снимаете скафандр и готовитесь к встрече с Уильямом. Отсюда пути назад уже нет.
 
	]];
 
	obj = {
 
		vway("Центральный зал", "{Вперед}", "final_scene_before_battle");
first_city_middle_rim.lua
Show inline comments
 
-- dependencies
 
dofile "powerplant.lua";
 
dofile "engineering.lua";
 
 
-- TODO (приватная бета-версия) добавить описания ворот открытых и закрытых
 
-- TODO (приватная бета-версия) пометить описание инженерного зала в западный сектор
 
 
first_city_middle_south = room {
 
	nam = "first_city_middle_south";
 
	disp = "Лсэрианотр, среднее кольцо, юг";
 
	gate = "first_city_inner_south";
 
	east = "first_city_middle_east";
 
	west = "first_city_middle_west";
 
	navigatable = true;
 
	open = function(s)
 
		s.gate = "first_city_inner_south";
 
	end;
 
	dsc = [[
 
		Вы находитесь в южной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. 
 
	]];
 
@@ -21,10 +30,15 @@ first_city_middle_east = room {
 
	navigatable = true;
 
	dsc = [[
 
		Вы находитесь в восточной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. 
 
		Вы видите огромное здание, стоящее поодаль от других. Над огромными двойными дверями расположен символ, недвусмысленно намекающий на назначение этого здания даже незнакомым с языком Навьяр - три молнии, исходящие из круга в центре. Вы чувствуете слабую вибрацию, исходящую из этого здания.
 
	]];
 
	view = [[
 
		Вы находитесь в восточной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. 
 
		Вы видите огромное здание, стоящее поодаль от других. Над огромными двойными дверями расположен символ, недвусмысленно намекающий на назначение этого здания даже незнакомым с языком Навьяр - три молнии, исходящие из круга в центре. Вы чувствуете слабую вибрацию, исходящую из этого здания.
 
	]];
 
	way = {
 
		kh_vroom("В здание", "first_city_powerplant", "to_powerplant"):disable();
 
	};
 
};
 
 
first_city_middle_west = room {
first_city_outer_rim.lua
Show inline comments
 
--dependencies
 
dofile "service_tunnels.lua";
 
dofile "hope.lua";
 
dofile "hope_cutscene.lua";
 
 
-- TODO (приватная бета-версия) добавить описания ворот открытых и закрытых
 
 
char_first_city_guardian = obj {
 
	nam = "first_city_guardian";
 
	disp = "Страж";
 
@@ -46,7 +53,6 @@ first_city_entrance = room {
 
	};
 
	way = {
 
		vroom("Левиафан", "leviathan_airlock");
 
		vroom("В здание", "first_city_library");
 
	};
 
};
 
 
@@ -109,6 +115,7 @@ first_city_outer_west = room {
 
	]];
 
	way = {
 
		vroom("Левиафан", "leviathan_airlock");
 
		vroom("В здание", "first_city_library");
 
	};
 
};
 
 
@@ -134,9 +141,14 @@ first_city_outer_north = room {
 
	};
 
};
 
 
path_first_city_tunnel = vroom("В сервисный тоннель", "service_tunnels");
 
 
first_city_factory = room {
 
	nam = "first_city_factory";
 
	disp = "Лсэрианотр, внешнее кольцо, завод";
 
	entered = function(s)
 
		service_tunnels.position = "3";
 
	end;
 
	dsc = [[
 
		Помещение, в котором вы находитесь, очевидно, некогда было заводом. Конвейеры, странные механизмы, разбросанные инструменты, долгие тысячелетия лежавшие без движения. 
 
	]];
 
@@ -144,23 +156,36 @@ first_city_factory = room {
 
		"item_pickaxe",
 
		"first_city_crack"
 
	};
 
	way = {
 
		disable(path_first_city_tunnel);
 
	};
 
};
 
 
first_city_crack = obj {
 
	nam = "first_city_crack";
 
	dsc = "В дальней стене вы видите {трещину}. Сквозь нее пробивается слабый свет, очевидно там какое-то помещение.";
 
	act = [[
 
		Нужно чем-то расширить эту щель, если вы хотите туда попасть
 
	]];
 
	act = function(s)
 
		if (s.wide) then
 
			return [[
 
				Вы видите за щелью какие-то тоннели. Вы сможете пролезть туда.
 
			]];
 
		else
 
			return [[
 
				Нужно чем-то расширить эту щель, если вы хотите туда попасть
 
			]];
 
		end;
 
	end;
 
	canhit = true;
 
	onhit = function(s)
 
		if (s.wide) then
 
			return "Трещина уже достаточно большая для вас, нет смысла еще что-то с ней делать."
 
		else
 
			s.wide = true;
 
			enable(path_first_city_tunnel);
 
			return "Несколькими осторожными ударами кирки вы расширяете трещину достаточно, чтобы пролезть внутрь."
 
		end;
 
	end;
 
	
 
};
 
 
first_city_library = room {
hope.lua
Show inline comments
 
@@ -48,7 +48,7 @@ hope_cargo_door = obj {
 
				pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Леарр мягко отодвигает вас от смотрового отверстия. тем же способом, она что-то говорит навьяру, находящемуся по ту сторону люка. Через несколько минут подобного общения Леарр кивает вам, показывая на дверь. ]]);
 
				s.state = 1;
 
			else
 
				pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Вы с трудом переводите цвета в символы: "Eyle'yhe'he'vji'a'rr vee'nn vtre'e'ran'rr" - он просит вас уйти ]]);
 
				pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Вы с трудом переводите цвета в символы: "Eyle'yhe'he'vji'a'rr vee'nn vtre'e'ran'rr" ]]);
 
			end;
 
		elseif (s.state == 1) then
 
			pn([[Вы начинаете открывать люк и огромное количество пузырей воздуха просачивается через образовавшуюся щель. Леарр жестом показывает вам, чтобы вы продолжали. Вы ждете, когда вода заполнит отсек, после чего открываете люк до конца. ]]);
 
@@ -133,7 +133,6 @@ phaetlarr_hope_dlg = dlg {
 
	phr = {
 
		{"Указать на навьяра левой рукой, правой указать на себя, затем на дверь", "Навьяр кивает головой. \"I'rr vee'nn\"", function()
 
			-- Все втроем вы возвращаетесь на Левиафан
 
			print "fuck";
 
			walk("cutscene_hope");
 
			return false;
 
		end;};
images/power_0.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
images/power_1.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
images/power_2.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
images/power_3.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
images/power_bcg.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
images/power_lock.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
items.lua
Show inline comments
 
@@ -109,4 +109,10 @@ item_service_info = obj {
 
		Tei'Elt	 
 
		Tei'Tei  
 
	]];
 
};
 
 
item_umbrella = obj {
 
	nam = "umbrella";
 
	disp = "Зонт";
 
	inv = [[Совершенно новый зонт производства "Винсент и сыновья". ]];
 
};
 
\ No newline at end of file
leviathan.lua
Show inline comments
 
@@ -12,6 +12,10 @@
 
 
Скафандры придется зарабатывать на Атлантиде
 
]]
 
 
-- TODO добавить описание перемещений между локациями в виде нескольких локаций-кат-сцен, из которых случайным образом выбирается одна
 
-- TODO персонажи не должны обсуждать личные темы по телефону, только при встрече
 
 
submarine_leviathan = obj {
 
	nam = "submarine_leviathan";
 
	disp = "Левиафан";
main.lua
Show inline comments
 
@@ -2,6 +2,7 @@
 
-- $Version: 1.0$
 
-- $Author: Khaelenmore Thaal$
 
 
--TODO представить все дисплеи картинками
 
instead_version "1.9.1"
 
require "para"
 
require "dash"
 
@@ -31,8 +32,6 @@ dofile "final_battle.lua";
 
dofile "first_city_inner_rim.lua"
 
dofile "first_city_middle_rim.lua"
 
dofile "first_city_outer_rim.lua"
 
dofile "hope.lua";
 
dofile "hope_cutscene.lua";
 
 
item_note_1 = obj {
 
	nam = "note1";
 
@@ -66,12 +65,6 @@ item_documents = obj {
 
	end;
 
};
 
 
item_umbrella = obj {
 
	nam = "umbrella";
 
	disp = "Зонт";
 
	inv = [[Совершенно новый зонт производства "Винсент и сыновья". ]];
 
};
 
 
item_toolbox = obj {
 
	nam = "toolbox";
 
	disp = "Ящик с инструментами";
 
@@ -86,7 +79,7 @@ pl = player {
 
	where = 'port';
 
	hitpoints = 10;
 
	obj = {'item_umbrella', "item_documents", "item_note_1", "item_first_city_key", "item_colt"};
 
	-- party flags. Should be false on start
 
	-- party array. Should be empty on start
 
	party = {"learr", "radcliffe", --[["phaetlarr", ]]"wright"};
 
	companion = nil;
 
};
 
@@ -147,8 +140,8 @@ function init()
 
	put(submarine_leviathan, shipyard_inside);
 
	---debug
 
	--pl.where = submarine_leviathan;
 
	--move(submarine_leviathan, first_city_entrance);
 
	move(submarine_leviathan, first_city_outer_north);
 
	move(submarine_leviathan, first_city_entrance);
 
	--move(submarine_leviathan, first_city_outer_east);
 
	--walk(final_scene);
 
	--walk(leviathan_wardroom);
 
	walk(leviathan_wardroom);
powerplant.lua
Show inline comments
 
new file 100644
 
first_city_powerplant_door = obj {
 
	nam = "first_city_powerplant_door";
 
	disp = "Двери энергостанции";
 
	dsc = function(s)
 
		if (s.open) then
 
			return [[
 
				Двери энергостанции открыты
 
			]];
 
		else 
 
			return [[
 
				Двери здания заперты
 
			]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.open) then
 
			return [[Вы можете войти]];
 
		else
 
			return [[Судя по всему, вход заблокирован изнутри. Вы не сможете открыть его отсюда. ]];
 
		end;
 
	end;
 
};
 
 
first_city_powerplant_door_inside = obj {
 
	nam = "first_city_powerplant_door";
 
	dsc = function(s)
 
		if(first_city_powerplant_door.open) then 
 
			return "{Входные двери} открыты. ";
 
		else
 
			return "{Входные двери} закрыты. ";
 
		end;
 
	end;
 
	act = function(s)
 
		if(first_city_powerplant_door.open) then 
 
			return "Двери уже открыты";
 
		else
 
			return "У вас не получается открыть двери. Возможно, это делается в другом месте";
 
		end;
 
	end;
 
};
 
 
first_city_powerplant = room {
 
	nam = "first_city_powerplant";
 
	disp = "Лсэрианотр, энергостанция";
 
	dsc = [[
 
		Вы находитесь в комнате управления энергоснабжением Лсэрианотра. Сквозь скафандр вы ощущаете слабую вибрацию, исходяющую от работающих неподалеку генераторов.
 
	]];
 
	entered = function(s)
 
		service_tunnels.position = "35";
 
	end;
 
	obj = {
 
		"powerplant_control",
 
		"first_city_powerplant_door_inside"
 
	};
 
	way = {
 
		kh_vroom("Выйти из здания", "first_city_middle_east", "powerplant_out"):disable();
 
		kh_vroom("В сервиcный тоннель", "service_tunnels");
 
	};
 
};
 
 
powerplant_control = obj {
 
	nam = "powerplant_control";
 
	disp = "Терминал управления энергоснабжением";
 
	dsc = "У одной из стен расположен {огромный экран}, на котором, судя по всему, отмечены линии энергоснабжения и ключевые источники потребления энергии. ^";
 
	act = function(s)
 
		walkin(powerplant_control_dlg);
 
	end;
 
};
 
 
powerplant_control_dlg = dlg {
 
	nam = "powerplant_control_dlg";
 
	disp = "Терминал управления энергоснабжением";
 
	dsc = "На экране вы видите подробную схему энергосетей города. Несколько иконок внизу экрана показывают вам, что нужно нажимать, чтобы перейти в различные режимы управления. ";
 
	entered = function()
 
		if (first_city_powerplant_door.open) then
 
			poff(3);
 
			pon(4);
 
		else
 
			poff(4);
 
			pon(3);
 
		end;
 
	end;
 
	phr = {
 
		{1, always = true, "Перейти в режим управления системами защиты", function(s)
 
			walkin(powerplant_defence_control_dlg);
 
			return false;
 
		end; };
 
		{3, "Разблокировать вход в здание", function(s)
 
			pon(4);
 
			first_city_powerplant_door.open = true;
 
			path("powerplant_out", "first_city_powerplant"):enable();
 
			path("to_powerplant", "first_city_middle_east"):enable();
 
			return "Входные двери открываются";
 
		end; };
 
		{4, "Заблокировать вход в здание", function(s)
 
			pon(3);
 
			first_city_powerplant_door.open = false;
 
			path("powerplant_out", "first_city_powerplant"):disable();
 
			path("to_powerplant", "first_city_middle_east"):disable();
 
			return "Входные двери закрываются";
 
		end; };
 
		{5, always = true, "Внимательно осмотреть схему города", "На схеме изображены все три кольца города, эта энергостанция и еще две других, расположенные во внешнем и внутреннем кольце. Ворота, соединяющие внешнее и среднее кольцо отмечены открытыми, ворота, соединяющие среднее и внутреннее кольцо закрыты. "};
 
		{255, always = true, "Отойти от терминала",function(s)
 
			back();
 
		end; };
 
	};
 
};
 
 
powerplant_defence_control_dlg = dlg {
 
	nam = "powerplant_defence_control_dlg";
 
	disp = "Терминал управления энергоснабжением систем защиты";
 
	states = {0, 1, 0, 1};
 
	locked = 1;
 
	pic = function(s)
 
		local image = 'images/power_bcg.png';
 
		if (s.locked == 1) then
 
			image = image .. ";images/power_lock.png@62,31";
 
		elseif (s.locked == 2) then
 
			image = image .. ";images/power_lock.png@62,93";
 
		elseif (s.locked == 3) then
 
			image = image .. ";images/power_lock.png@31,62";
 
		elseif (s.locked == 4) then
 
			image = image .. ";images/power_lock.png@93,62";
 
		end;
 
		
 
		image = image .. ";images/power_" .. tostring(s.states[1]) .. ".png@62,31";
 
		image = image .. ";images/power_" .. tostring(s.states[2]) .. ".png@62,93";
 
		image = image .. ";images/power_" .. tostring(s.states[3]) .. ".png@31,62";
 
		image = image .. ";images/power_" .. tostring(s.states[4]) .. ".png@93,62";
 
		return image;
 
	end;
 
	detect = function(s)
 
		return (s.states[1] == 1 and s.states[2] == 3 
 
			and s.states[3] == 0 and s.states[4] == 2) or 
 
			(s.states[1] == 3 and s.states[2] == 1 
 
			and s.states[3] == 2 and s.states[4] == 0)
 
	end;
 
	dsc = "На экране видна схема питания систем защиты. Иконки внизу экрана подсказывают, что нажимать при отключении";
 
	phr = {
 
		{1, always = true, "блокировать верхний переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 1;
 
		end;},
 
		{2, always = true, "блокировать нижний переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 2;
 
		end;},
 
		{3, always = true, "блокировать левый переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 3;
 
		end;}, 
 
		{4, always = true, "блокировать правый переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 4;
 
		end;}, 
 
		{5, always = true, "поворот по часовой", "Изображение на экране изменилось.", function(s)
 
			for i = 1, 4 do
 
				if (i ~= powerplant_defence_control_dlg.locked) then
 
					powerplant_defence_control_dlg.states[i] = powerplant_defence_control_dlg.states[i] + 1;
 
					if (powerplant_defence_control_dlg.states[i] > 3) then
 
						powerplant_defence_control_dlg.states[i] = 0;
 
					end;
 
				end;
 
			end;
 
			if (powerplant_defence_control_dlg.detect(powerplant_defence_control_dlg)) then
 
				p("Защитные системы отключены"); --TODO сделать нормальный фидбэк
 
			end;
 
		end;},
 
		{6, always = true, "поворот против часовой", "Изображение на экране изменилось.", function(s)
 
			for i = 1, 4 do
 
				if (i ~= powerplant_defence_control_dlg.locked) then
 
					powerplant_defence_control_dlg.states[i] = powerplant_defence_control_dlg.states[i] - 1;
 
					if (powerplant_defence_control_dlg.states[i] < 0) then
 
						powerplant_defence_control_dlg.states[i] = 3;
 
					end;
 
				end;
 
			end;
 
			if (powerplant_defence_control_dlg.detect(powerplant_defence_control_dlg)) then
 
				p("Защитные системы отключены"); --TODO сделать нормальный фидбэк
 
			end;
 
		end;}, 
 
		{255, always = true, "выход", function(s)
 
			back();
 
		end},
 
	};
 
};
 
\ No newline at end of file
service_tunnels.lua
Show inline comments
 
service_tunnels_definitions = {
 
	--	       name			     #        O        ^        |
 
	["0"]  = { name="nol'nol"  , e1= "1" };
 
	["1"]  = { name="nol'lse"  , e1= "0", e2= "7", e3= "2" };
 
	["2"]  = { name="nol'dyle" , e1= "3",          e3= "1", e4= "8" };
 
	["3"]  = { name="nol'vlye" , e1= "2", e2= "4" 				   , ex = "first_city_factory"};
 
	["4"]  = { name="nol'elt"  ,          e2= "3", e3="10" };
 
	["5"]  = { name="nol'tei"  , e1="11" };
 
	--	       name			     #        O        ^        |
 
	["6"]  = { name="lse'nol"  ,          e2="12", e3= "7" };
 
	["7"]  = { name="lse'lse"  ,          e2= "1", e3= "6", e4="13" };
 
	["8"]  = { name="lse'dyle" , e1="14",          e3= "9", e4="02" };
 
	["9"]  = { name="lse'vlye" ,          e2="15", e3= "8" };
 
	["10"] = { name="lse'elt"  ,          e2="11", e3= "4" };
 
	["11"] = { name="lse'tei"  , e1= "5", e2="10", e3="17" };
 
	--	       name			     #        O        ^        |
 
	["12"] = { name="dyle'nol" ,          e2= "6", e3="18" };
 
	["13"] = { name="dyle'lse" , e1="19", e2="14",        e4= "7" };
 
	["14"] = { name="dyle'dyle", e1= "8", e2="13" };
 
	["15"] = { name="dyle'vlye", e1="16", e2= "9", e3="21" };
 
	["16"] = { name="dyle'elt" , e1="15",          e3="22", e4="17" };
 
	["17"] = { name="dyle'tei" ,                   e3="11", e4="16" };
 
	--	       name			     #        O        ^        |
 
	["18"] = { name="vlye'nol" ,                   e3="12", e4="24" };
 
	["19"] = { name="vlye'lse" , e1="13", e2="20" };
 
	["20"] = { name="vlye'dyle",          e2="19",          e4="21" };
 
	["21"] = { name="vlye'vlye",                   e3="15", e4="20" };
 
	["22"] = { name="vlye'elt" , e1="28", e2="23", e3="16" };
 
	["23"] = { name="vlye'tei" ,          e2="22" };
 
	--	       name			     #        O        ^        |
 
	["24"] = { name="elt'nol"  , e1="30", e2="25",          e4="18", ex = "first_city_engineering"};
 
	["25"] = { name="elt'lse"  ,          e2="24", e3="26" };
 
	["26"] = { name="elt'dyle" ,                   e3="25" };
 
	["27"] = { name="elt'vlye" , e1="33", e2="28" };
 
	["28"] = { name="elt'elt"  , e1="22", e2="27", e3="34", e4="29" };
 
	["29"] = { name="elt'tei"  , e1="35",                   e4="28" };
 
	--	       name			     #        O        ^        |
 
	["30"] = { name="tei'nol"  , e1="24", e2="31" };
 
	["31"] = { name="tei'lse"  ,          e2="30", e3="32" };
 
	["32"] = { name="tei'dyle" ,                   e3="31", e4="33" };
 
	["33"] = { name="tei'vlye" , e1="27",                   e4="32" };
 
	["34"] = { name="tei'elt"  ,                   e3="28" };
 
	["35"] = { name="tei'tei"  , e1="29"                           , ex = "first_city_powerplant"};
 
};
 
 
service_tunnels = room {
 
	nam = "service_tunnels";
 
	disp = "Сервисные тоннели";
 
	position = "0";
 
	position = "0";
 
	definitions = service_tunnels_definitions;
 
	entered = function(s)
 
		path('e1'):disable();
 
		path('e2'):disable();
 
		path('e3'):disable();
 
		path('e4'):disable();
 
		path('ex'):disable();
 
		if (s.definitions[s.position].e1) then
 
			path('e1'):enable();
 
		end;
 
		if (s.definitions[s.position].e2) then
 
			path('e2'):enable();
 
		end;
 
		if (s.definitions[s.position].e3) then
 
			path('e3'):enable();
 
		end;
 
		if (s.definitions[s.position].e4) then
 
			path('e4'):enable();
 
		end;
 
		if (s.definitions[s.position].ex) then
 
			path('ex'):enable();
 
		end;
 
	end;
 
	dsc = function(s)
 
		return "Вы находитесь в сервисном тоннеле Лсэрианотра. Табличка сообщает вам, что вы находитесь в секции " .. s.definitions[s.position].name .. ". ";
 
	end;
 
	way = {
 
		kh_vroom('В направлении #', function()
 
			service_tunnels.position = service_tunnels.definitions[service_tunnels.position].e1;
 
			return service_tunnels;
 
		end, "e1");
 
		kh_vroom('В направлении O', function()
 
			service_tunnels.position = service_tunnels.definitions[service_tunnels.position].e2;
 
			return service_tunnels;
 
		end, "e2");
 
		kh_vroom('В направлении \\^', function()
 
			service_tunnels.position = service_tunnels.definitions[service_tunnels.position].e3;
 
			return service_tunnels;
 
		end, "e3");
 
		kh_vroom('В направлении |', function()
 
			service_tunnels.position = service_tunnels.definitions[service_tunnels.position].e4;
 
			return service_tunnels;
 
		end, "e4");
 
		kh_vroom("Выход", function()
 
			return service_tunnels.definitions[service_tunnels.position].ex;
 
		end, "ex");
 
	};
 
}
 
\ No newline at end of file
utils.lua
Show inline comments
 
@@ -27,4 +27,55 @@ PartyUtils = {
 
			end;
 
		end;
 
	end;
 
};
 
\ No newline at end of file
 
};
 
 
--[[
 
	functions, design to simplify some typical actions while developing Instead game
 
]]
 
EngineUtils = {
 
	getValue = function(source, param)
 
		local value = "";
 
		if (type(source) == "function") then
 
			value = source(param);
 
		else
 
			value = source;
 
		end;
 
		
 
		return value;
 
	end;
 
};
 
 
--[[
 
	internal space
 
]]
 
_kh = {
 
	vroom_enter = function(s)  
 
		walk(EngineUtils.getValue(s.where));
 
	end;
 
	vroom_save = function(s)
 
		if need then
 
			local t = stead.string.format("%s = kh_vroom(%s, %q, %s);\n",
 
				name, stead.tostring(self.disp), 
 
					stead.deref(self.where), stead.deref(self.nam));
 
			h:write(t);
 
		end
 
		stead.savemembers(h, self, name,false);
 
	end;
 
};
 
 
--[[
 
	vroom with additional functionality
 
]]
 
function kh_vroom(disp, target, nam)
 
	if (not nam) then
 
		nam = disp;
 
	end;
 
	return room {
 
		nam = nam;
 
		disp = disp;
 
		where = target;
 
		enter = _kh.vroom_enter;
 
		--enter = _kh.vroom_enter;
 
		--save = _kh.vroom_save;
 
	};
 
end;
 
\ No newline at end of file
0 comments (0 inline, 0 general)