Changeset - 387d673c520d
[Not reviewed]
default
0 3 1
Silverwing - 8 years ago 2016-05-15 10:18:23

LFC partially implemented
4 files changed with 339 insertions and 3 deletions:
0 comments (0 inline, 0 general)
atlantis.lua
Show inline comments
 
global {
 
	atl_jack_in_party = false;
 
	
 
	atl_iof_completed = false;
 
	atl_iof_learr_dead = false;
 
	atl_iof_learr_suit = false;
 
	
 
	atl_nih_state = 0;
 
	
 
	atl_iyh_state = 0;
 
	atl_iyh_ryveerr_spoken = false;
 
	
 
	atl_lfc_state = 0;
 
	
 
	atl_rep_moreau = 0;
 
	atl_rep_darkstar = 0;
 
	atl_rep_svetlova = 0;
 
	atl_rep_wright = 0;
 
};
 
 
atl_illuminators = obj {
 
	nam = "Иллюминаторы";
 
	dsc = [[
 
		Через равные промежутки в стены встроены небольшие круглые {иллюминаторы}.
 
	]];
 
	act = [[
 
		Через иллюминаторы видны несколько других секций и коридоров. В лучах света, проникающих с поверхности вы видите массивные металлически конструкции непонятного вам назначения. На покрытом илом дне видно большое количество следов от тяжелой металлической обуви персонала станции. 
 
	]];
 
};
 
 
atl_aqua_corridor_b = room {
 
	nam = "Атлантида, Аква, коридор B";
 
	dsc = [[
 
		Широкий коридор, освещенный ярким светом электрических ламп. В одном конце коридора расположена шлюзовая дверь, ведущая, судя по надписи на ней в основной коридор секции _"Аква"_. По бокам коридора вы видите еще несколько дверей, ведущие в другие помещения секции: гостевые доки A, B и С. 
 
	]];
 
	way = {
 
		kh_vroom("В гостевой док A", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В гостевой док B", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В гостевой док C", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В главный коридор", "atl_aqua_main_corridor");
 
	};
 
	obj = {
 
		"atl_illuminators",
 
		"atl_nih_tubes_aqua_b"
 
	};
 
};
 
 
atl_aqua_leviathan_dock = room {
 
	var {
 
		visited = false;
 
	};
 
	nam = "Атлантида, Аква, гостевой док A";
 
	enter = function(s)
 
		if (not s.visited) then
 
			s.visited = true;
 
			walk(atlantis_intro_dock);
 
		end;
 
	end;
 
	dsc = [[
 
		Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен _"Левиафан"_. Под потолком, на высоте примерно в 5 метров укреплены специальные балки, по которым могут свободно перемещаться крюки подъемных кранов. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. 
 
	]];
 
	way = {
 
		kh_vroom("В коридор B", "atl_aqua_corridor_b");
 
	};
 
};
 
 
atl_aqua_corridor_a = room {
 
	nam = "Атлантида, Аква, коридор A";
 
	dsc = [[
 
		Широкий коридор, освещенный ярким светом электрических ламп. В одном конце коридора расположена шлюзовая дверь, ведущая, судя по надписи на ней в основной коридор секции _"Аква"_. По бокам коридора вы видите еще несколько дверей, ведущие к докам, закрепленным за субмаринами, приписанными к станции. 
 
	]];
 
	way = {
 
		kh_vroom("В док \"Надежды\"", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В док \"Энтерпрайза\"", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В док \"Наутилуса\"", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В главный коридор", "atl_aqua_main_corridor");
 
	};
 
	obj = {
 
		"atl_illuminators",
 
		"atl_nih_tubes_aqua_a"
 
	};
 
};
 
 
atl_aqua_main_corridor = room {
 
	nam = "Атлантида, Аква, центральный коридор";
 
	dsc = [[
 
		Широкий коридор, освещенный ярким светом электрических ламп. В одном конце коридора расположена шлюзовая дверь, ведущая, судя по надписи на ней в секцию _"Доминус"_. По бокам коридора вы видите еще несколько дверей, ведущие в другие помещения секции. Судя по всему это склады. Также две двери ведут соответственно в коридоры A и B. 
 
	]];
 
	way = {
 
		kh_vroom("На склад A", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("На склад B", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("На склад C", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("На склад D", function()
 
			pr("Люк наглухо задраен. Вы не сможете его открыть. ");
 
			return false;
 
		end);
 
		kh_vroom("В коридор A", "atl_aqua_corridor_a");
 
		kh_vroom("В коридор B", "atl_aqua_corridor_b");
 
		kh_vroom("В секцию \"Доминус\"", "atl_intersection_aqua_dom");
 
	};
 
	obj = {
 
		"atl_illuminators",
 
		"atl_nih_tubes_aqua"
 
	};
 
};
 
 
atl_intersection_aqua_dom = room {
 
	nam = "Атлантида, межсекционный коридор";
 
	dsc = [[
 
		Небольшой коридор, расположенный между секциями станции. Яркий свет электрическихз ламп освещает помещение. 
 
	]];
 
	way = {
 
		kh_vroom("В секцию \"Аква\"", "atl_aqua_main_corridor");
 
		kh_vroom("В секцию \"Доминус\"", "atl_dom_main_near_aqua");
 
	};
 
	obj = {
 
		"atl_illuminators"
 
	};
 
};
 
 
atl_dom_main_near_aqua = room {
 
	nam = "Атлантида, Доминус, центральный зал, у входа в секцию \"Аква\"";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Рядом с вами расположен шлюз, ведущий в соседнюю секцию.
 
	]];
 
	way = {
 
		kh_vroom("В секцию \"Аква\"", "atl_intersection_aqua_dom");
 
		kh_vroom("К северо-западной части", "atl_dom_main_nw");
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
		kh_vroom("К северо-восточной части", "atl_dom_main_ne");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки, табличку секции Аква
 
		"atl_nih_tubes_near_aqua"
 
	};
 
};
 
 
atl_dom_main_nw = room {
 
	nam = "Атлантида, Доминус, центральный зал, северо-запад";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в северо-западной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К секции \"Аква\"", "atl_dom_main_near_aqua");
 
		kh_vroom("К западной части", "atl_dom_main_w");
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К коридору А", "atl_dom_main_near_a");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_n = room {
 
	nam = "Атлантида, Доминус, центральный зал, север";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в северной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К секции \"Аква\"", "atl_dom_main_near_aqua");
 
		kh_vroom("К западной части", "atl_dom_main_w");
 
		kh_vroom("К северо-западной части", "atl_dom_main_nw");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К северо-восточной части", "atl_dom_main_ne");
 
		kh_vroom("К восточной части", "atl_dom_main_e");
 
	};
 
};
 
 
atl_dom_main_ne = room {
 
	nam = "Атлантида, Доминус, центральный зал, северо-восток";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в северо-восточной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К секции \"Аква\"", "atl_dom_main_near_aqua");
 
		kh_vroom("К кабинету администратора", "atl_dom_main_near_adm");
 
		kh_vroom("К восточной части", "atl_dom_main_e");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_near_a = room {
 
	nam = "Атлантида, Доминус, центральный зал, у входа в коридор А";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Рядом с вами расположен шлюз, ведущий в коридор А. 
 
	]];
 
	way = {
 
		kh_vroom("К западной части", "atl_dom_main_w");
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
		kh_vroom("К северо-западной части", "atl_dom_main_nw");
 
		kh_vroom("В коридор A", "atl_dom_corridor_a");
 
	};
 
	obj = {
 
		-- TODO добавить табличку
 
		"atl_nih_panel_near_a"
 
	};
 
};
 
 
atl_dom_main_w = room {
 
	nam = "Атлантида, Доминус, центральный зал, запад";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в западной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К северо-западной части", "atl_dom_main_nw");
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К юго-западной части", "atl_dom_main_sw");
 
		kh_vroom("К южной части", "atl_dom_main_s");
 
		kh_vroom("К коридору А", "atl_dom_main_near_a");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_c = room {
 
	nam = "Атлантида, Доминус, центральный зал, центр";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в центральной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
		kh_vroom("К северо-восточной части", "atl_dom_main_ne");
 
		kh_vroom("К восточной части", "atl_dom_main_e");
 
		kh_vroom("К юго-восточной части", "atl_dom_main_se");
 
		kh_vroom("К южной части", "atl_dom_main_s");
 
		kh_vroom("К юго-западной части", "atl_dom_main_sw");
 
		kh_vroom("К западной части", "atl_dom_main_w");
 
		kh_vroom("К северо-западной части", "atl_dom_main_nw");
 
		kh_vroom("В лифт", "atl_dom_lift");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_e = room {
 
	nam = "Атлантида, Доминус, центральный зал, восток";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в восточной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К северо-восточной части", "atl_dom_main_ne");
 
		kh_vroom("К кабинету администратора", "atl_dom_main_near_adm");
 
		kh_vroom("К юго-восточной части", "atl_dom_main_se");
 
		kh_vroom("К южной части", "atl_dom_main_s");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К северной части", "atl_dom_main_n");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_near_adm = room {
 
	nam = "Атлантида, Доминус, центральный зал, у входа в кабинет администратора";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Рядом с вами находится шлюз, ведущий в кабинет администратора. 
 
	]];
 
	way = {
 
		kh_vroom("В кабинет администратора", "atl_dom_administator_room");
 
		kh_vroom("К юго-восточной части", "atl_dom_main_se");
 
		kh_vroom("К восточной части", "atl_dom_main_e");
 
		kh_vroom("К северо-восточной части", "atl_dom_main_ne");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки, воздуховоды
 
		"atl_nih_panel_near_admin"
 
	};
 
};
 
 
atl_dom_main_sw = room {
 
	nam = "Атлантида, Доминус, центральный зал, юго-запад";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в юго-западной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К западной части", "atl_dom_main_w");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К южной части", "atl_dom_main_s");
 
		kh_vroom("К шлюзу в секцию \"Окулус\"", "atl_dom_main_near_oculus");
 
		kh_vroom("К шлюзу в секцию \"Луна\"", "atl_dom_main_near_luna");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_s = room {
 
	nam = "Атлантида, Доминус, центральный зал, юг";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в южной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К восточной части", "atl_dom_main_e");
 
		kh_vroom("К юго-восточной части", "atl_dom_main_se");
 
		kh_vroom("К юго-западной части", "atl_dom_main_sw");
 
		kh_vroom("К западной части", "atl_dom_main_w");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_se = room {
 
	nam = "Атлантида, Доминус, центральный зал, юго-восток";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Вы находитесь в юго-восточной части секции. В этой части главного зала установлено несколько массивных колонн, поддерживающих куполообразный потолок зала. 
 
	]];
 
	way = {
 
		kh_vroom("К восточной части", "atl_dom_main_e");
 
		kh_vroom("К кабинету администратора", "atl_dom_main_near_adm");
 
		kh_vroom("К южной части", "atl_dom_main_s");
 
		kh_vroom("К центральной части", "atl_dom_main_c");
 
		kh_vroom("К шлюзу в секцию \"Арктос\"", "atl_dom_main_near_arctos");
 
		kh_vroom("К шлюзу в секцию \"Терра\"", "atl_dom_main_near_terra");
 
	};
 
	obj = {
 
		-- TODO добавить скамейки
 
	};
 
};
 
 
atl_dom_main_near_luna = room {
 
	nam = "Атлантида, Доминус, центральный зал, у входа в секцию \"Луна\"";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Рядом с вами находится шлюз, ведущий в секцию "Луна". 
 
	]];
 
	way = {
 
		kh_vroom("К юго-западной части", "atl_dom_main_sw");
 
		kh_vroom("К шлюзу в секцию \"Окулус\"", "atl_dom_main_near_oculus");
 
		kh_vroom("В секцию \"Луна\"", "atl_intersection_luna_dom");
 
	};
 
	obj = {
 
		"atl_nih_panel_near_luna"
 
	};
 
};
 
 
atl_dom_main_near_oculus = room {
 
	nam = "Атлантида, Доминус, центральный зал, у входа в секцию \"Окулус\"";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Рядом с вами находится шлюз, ведущий в секцию "Окулус". 
 
	]];
 
	way = {
 
		kh_vroom("К юго-западной части", "atl_dom_main_sw");
 
		kh_vroom("В секцию \"Окулус\"", "atl_intersection_oculus_dom");
 
		kh_vroom("К шлюзу в секцию \"Луна\"", "atl_dom_main_near_luna");
 
	};
 
	obj = {
 
		"atl_nih_boxes_near_oculus"
 
	};
 
};
 
 
atl_dom_main_near_terra = room {
 
	nam = "Атлантида, Доминус, центральный зал, у входа в секцию \"Терра\"";
 
	dsc = [[
 
		Огромный круглый зал с куполообразным потолком. Потолок частично сделан из стекла, открывая прекрасный вид на водную толщу. Яркий свет электрических ламп освещает помещение. Рядом с вами находится шлюз, ведущий в секцию "Терра". 
 
	]];
 
	way = {
 
		kh_vroom("В секцию \"Терра\"", "atl_intersection_terra_dom");
 
		kh_vroom("К шлюзу в секцию \"Арктос\"", "atl_dom_main_near_arctos");
 
		kh_vroom("К юго-восточной части", "atl_dom_main_se");
 
	};
 
	obj = {
 
		"atl_nih_boxes_near_terra"
atlantis_ignis_on_fire.lua
Show inline comments
 
@@ -781,405 +781,406 @@ atl_iof_air_valves = room {
 
	dsc = function(s)
 
		if (s.selected == 0) then
 
			return [[
 
				Перед собой вы видите 6 клапанов. Каждый из них пропускает через себя воздух только в одном направлении. По показаниям манометра вы видите, что воздух продолжает поступать в Игнис. 
 
			]];
 
		else
 
			return "Перед собой вы видите 6 клапанов. Каждый из них пропускает через себя воздух только в одном направлении. По показаниям манометра вы видите, что воздух продолжает поступать в Игнис. В какую сторону вы хотите повернуть выбранный клапан (" .. tostring(s.selected) .. ")?";
 
		end;
 
	end;
 
	obj = {
 
		'atl_iof_select1';
 
		'atl_iof_select2';
 
		'atl_iof_select3';
 
		'atl_iof_select4';
 
		'atl_iof_select5';
 
		'atl_iof_select6';
 
		'atl_iof_air_ccw';
 
		'atl_iof_air_cw';
 
		'atl_iof_air_cancel';
 
	};
 
	is_solved = function(s)
 
		local current = 1;
 
		local visited = {false, false, false, false, false, false};
 
		while not visited[current] do
 
			visited[current] = true;
 
			if (s.valves[current] == 0) then
 
				if (current == 3 or current == 6) then 
 
					return false;
 
				else
 
					current = current + 1;
 
				end;
 
			elseif (s.valves[current] == 1) then
 
				current = current + 3;
 
			elseif (s.valves[current] == 2) then
 
				current = current - 1;
 
			elseif (s.valves[current] == 3) then
 
				current = current - 3;
 
			end;
 
		end;
 
		current = 4;
 
		visited = {false, false, false, false, false, false};
 
		while not visited[current] do
 
			visited[current] = true;
 
			if (s.valves[current] == 0) then
 
				if (current == 3 or current == 6) then 
 
					return false;
 
				else
 
					current = current + 1;
 
				end;
 
			elseif (s.valves[current] == 1) then
 
				current = current + 3;
 
			elseif (s.valves[current] == 2) then
 
				current = current - 1;
 
			elseif (s.valves[current] == 3) then
 
				current = current - 3;
 
			end;
 
		end;
 
		return true;
 
	end;
 
};
 
 
atl_iof_select = function(index)
 
	return obj {
 
		nam = "Клапан " .. tostring(index);
 
		dsc = "{Выбрать клапан " .. tostring(index) .. "}^";
 
		act = function(s)
 
			atl_iof_select1:disable();
 
			atl_iof_select2:disable();
 
			atl_iof_select3:disable();
 
			atl_iof_select4:disable();
 
			atl_iof_select5:disable();
 
			atl_iof_select6:disable();
 
			atl_iof_air_ccw:enable();
 
			atl_iof_air_cw:enable();
 
			atl_iof_air_cancel:enable();
 
			atl_iof_air_valves.selected = index;
 
			return "Вы беретесь за клапан " .. tostring(index);
 
		end;
 
	};
 
end;
 
 
atl_iof_select1 = atl_iof_select(1);
 
atl_iof_select2 = atl_iof_select(2);
 
atl_iof_select3 = atl_iof_select(3);
 
atl_iof_select4 = atl_iof_select(4);
 
atl_iof_select5 = atl_iof_select(5);
 
atl_iof_select6 = atl_iof_select(6);
 
 
atl_iof_air_ccw = obj {
 
	nam = "Повернуть против часовой стрелки";
 
	dsc = "{Повернуть против часовой стрелки}^";
 
	act = function(s)
 
		atl_iof_select1:enable();
 
		atl_iof_select2:enable();
 
		atl_iof_select3:enable();
 
		atl_iof_select4:enable();
 
		atl_iof_select5:enable();
 
		atl_iof_select6:enable();
 
		atl_iof_air_ccw:disable();
 
		atl_iof_air_cw:disable();
 
		atl_iof_air_cancel:disable();
 
		
 
		local t;
 
		local r = "";
 
		if (atl_iof_air_valves.valves[atl_iof_air_valves.selected] > 0) then
 
			t = atl_iof_air_valves.valves[atl_iof_air_valves.selected] - 1;
 
		else
 
			t = 3;
 
		end;
 
		
 
		if (atl_iof_air_valves.selected == 1) then
 
			if (t == 3 or t == 2 or
 
				(t == 0 and atl_iof_air_valves.valves[2] == 2) or
 
				(t == 1 and atl_iof_air_valves.valves[4] == 3)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 2) then
 
			if (t == 3 or
 
				(t == 2 and atl_iof_air_valves.valves[1] == 0) or
 
				(t == 0 and atl_iof_air_valves.valves[3] == 2) or
 
				(t == 1 and atl_iof_air_valves.valves[5] == 3)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 3) then
 
			if (t == 3 or 
 
				(t == 2 and atl_iof_air_valves.valves[2] == 0) or
 
				(t == 1 and atl_iof_air_valves.valves[6] == 3)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 4) then
 
			if (t == 1 or t == 2 or
 
				(t == 3 and atl_iof_air_valves.valves[1] == 1) or
 
				(t == 0 and atl_iof_air_valves.valves[5] == 2)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 5) then
 
			if (t == 1 or
 
				(t == 3 and atl_iof_air_valves.valves[2] == 1) or
 
				(t == 2 and atl_iof_air_valves.valves[4] == 0) or
 
				(t == 0 and atl_iof_air_valves.valves[6] == 2)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 6) then
 
			if (t == 1 or 
 
				(t == 3 and atl_iof_air_valves.valves[3] == 1) or
 
				(t == 2 and atl_iof_air_valves.valves[5] == 0)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		end;
 
		
 
		atl_iof_air_valves.valves[atl_iof_air_valves.selected] = t;
 
		
 
		atl_iof_air_valves.selected = 0;
 
		
 
		if (atl_iof_air_valves:is_solved()) then
 
			walk("atl_iof_electr_dlg");
 
		end;
 
		
 
		return r;
 
	end;
 
};
 
 
atl_iof_air_cw = obj {
 
	nam = "Повернуть по часовой стрелке";
 
	dsc = "{Повернуть по часовой стрелке}^";
 
	act = function(s)
 
		atl_iof_select1:enable();
 
		atl_iof_select2:enable();
 
		atl_iof_select3:enable();
 
		atl_iof_select4:enable();
 
		atl_iof_select5:enable();
 
		atl_iof_select6:enable();
 
		atl_iof_air_ccw:disable();
 
		atl_iof_air_cw:disable();
 
		atl_iof_air_cancel:disable();
 
		
 
		local t;
 
		local r = "";
 
		if (atl_iof_air_valves.valves[atl_iof_air_valves.selected] < 3) then
 
			t = atl_iof_air_valves.valves[atl_iof_air_valves.selected] + 1;
 
		else
 
			t = 0;
 
		end;
 
		
 
		if (atl_iof_air_valves.selected == 1) then
 
			if (t == 3 or t == 2 or
 
				(t == 0 and atl_iof_air_valves.valves[2] == 2) or
 
				(t == 1 and atl_iof_air_valves.valves[4] == 3)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 2) then
 
			if (t == 3 or
 
				(t == 2 and atl_iof_air_valves.valves[1] == 0) or
 
				(t == 0 and atl_iof_air_valves.valves[3] == 2) or
 
				(t == 1 and atl_iof_air_valves.valves[5] == 3)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 3) then
 
			if (t == 3 or 
 
				(t == 2 and atl_iof_air_valves.valves[2] == 0) or
 
				(t == 1 and atl_iof_air_valves.valves[6] == 3)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 4) then
 
			if (t == 1 or t == 2 or
 
				(t == 3 and atl_iof_air_valves.valves[1] == 1) or
 
				(t == 0 and atl_iof_air_valves.valves[5] == 2)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 5) then
 
			if (t == 1 or
 
				(t == 3 and atl_iof_air_valves.valves[2] == 1) or
 
				(t == 2 and atl_iof_air_valves.valves[4] == 0) or
 
				(t == 0 and atl_iof_air_valves.valves[6] == 2)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		elseif (atl_iof_air_valves.selected == 6) then
 
			if (t == 1 or 
 
				(t == 3 and atl_iof_air_valves.valves[3] == 1) or
 
				(t == 2 and atl_iof_air_valves.valves[5] == 0)) then
 
				t = atl_iof_air_valves.valves[atl_iof_air_valves.selected];
 
				r = "Клапан не поворачивается";
 
			end;
 
		end;
 
		
 
		atl_iof_air_valves.valves[atl_iof_air_valves.selected] = t;
 
		
 
		atl_iof_air_valves.selected = 0;
 
		
 
		if (atl_iof_air_valves:is_solved()) then
 
			walk("atl_iof_electr_dlg");
 
		end;
 
		
 
		return r;
 
	end;
 
};
 
 
atl_iof_air_cancel = obj {
 
	nam = "Выбрать другой клапан";
 
	dsc = "{Выбрать другой клапан}";
 
	act = function(s)
 
		atl_iof_select1:enable();
 
		atl_iof_select2:enable();
 
		atl_iof_select3:enable();
 
		atl_iof_select4:enable();
 
		atl_iof_select5:enable();
 
		atl_iof_select6:enable();
 
		atl_iof_air_ccw:disable();
 
		atl_iof_air_cw:disable();
 
		atl_iof_air_cancel:disable();
 
		
 
		atl_iof_air_valves.selected = 0;
 
		
 
		return "";
 
	end;
 
};
 
 
atl_iof_electr_dlg = dlg {
 
	nam = "Атлантида, Игнис";
 
	entered = [[
 
		Вы останавливаете подачу кислорода и собиратесь сообщить об этом по радио, когда из динамика радается голос Райта: "Как у вас успехи? Нужно отключить еще подачу электричества".
 
	]];
 
	phr = {
 
		{"Подача воздуха отключена. Как я смогу отключить электричество?", [[
 
			Райт продолжает: "Отлично. Там рядом должна быть панель, она подписана. Там замок хитрый, но, думаю, вы разберетесь. Затем просто дергаете рубильник и дело сделано".
 
		]], code [[ psub("next"); ]]};
 
		{tag="next"};
 
		{"Вас понял. Конец связи", [[
 
			Вы быстро находите необходимую панель и приступаете к работе.
 
		]], code [[ walk("atl_iof_electr_panel_closed"); ]]};
 
	};
 
};
 
 
atl_iof_electr_panel_closed = room {
 
	var {
 
		locks = { true, true, true, true, true, true, true, true };
 
	};
 
	nam = "Электрощит";
 
	pic = function(s)
 
		local image = 'images/electr_bg.png';
 
		for i = 1, 4 do
 
			if (s.locks[i]) then
 
				image = image .. ";images/air_3.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32);
 
			else
 
				image = image .. ";images/air_1.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32);
 
			end;
 
		end;
 
		for i = 5, 8 do
 
			if (s.locks[i]) then
 
				image = image .. ";images/air_1.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32);
 
			else
 
				image = image .. ";images/air_3.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32);
 
			end;
 
		end;
 
		return image;
 
	end;
 
	dsc = [[
 
		Перед вами расположен щиток с восемью защелками. Сейчас щиток закрыт и вы не можете его снять. 
 
	]];
 
	obj = {
 
		"atl_iof_electr_select1",
 
		"atl_iof_electr_select2",
 
		"atl_iof_electr_select3",
 
		"atl_iof_electr_select4",
 
		"atl_iof_electr_select5",
 
		"atl_iof_electr_select6",
 
		"atl_iof_electr_select7",
 
		"atl_iof_electr_select8"
 
	};
 
	is_solved = function(s)
 
		local unsolved = false;
 
		for i = 1, #locks do
 
			unsolved = unsolved or s.locks[i];
 
		end;
 
		
 
		return not unsolved;
 
	end;
 
};
 
 
atl_iof_electr_select = function(index)
 
	return obj {
 
		nam = "Защелка " .. tostring(index);
 
		dsc = "{Сдвинуть защелку " .. tostring(index) .. "}^";
 
		act = function(s)			
 
			atl_iof_electr_panel_closed.locks[index] = not atl_iof_electr_panel_closed.locks[index];
 
			if (index ~= 4 and index ~= 8) then
 
				atl_iof_electr_panel_closed.locks[index + 1] = not atl_iof_electr_panel_closed.locks[index + 1];
 
			end;
 
			if (index ~= 1 and index ~= 5) then
 
				atl_iof_electr_panel_closed.locks[index - 1] = not atl_iof_electr_panel_closed.locks[index - 1];
 
			end;
 
			if (index > 4) then
 
				atl_iof_electr_panel_closed.locks[index - 4] = not atl_iof_electr_panel_closed.locks[index - 4];
 
			end;
 
			if (index < 5) then
 
				atl_iof_electr_panel_closed.locks[index + 4] = not atl_iof_electr_panel_closed.locks[index + 4];
 
			end;
 
			
 
			if (atl_iof_electr_panel_closed.is_solved()) then
 
				walk("atl_iof_electr_panel_open");
 
			
 
				return "";
 
			end;
 
			
 
			return "Вы сдвигаете защелку " .. tostring(index);
 
		end;
 
	};
 
end;
 
 
atl_iof_electr_select1 = atl_iof_electr_select(1);
 
atl_iof_electr_select2 = atl_iof_electr_select(2);
 
atl_iof_electr_select3 = atl_iof_electr_select(3);
 
atl_iof_electr_select4 = atl_iof_electr_select(4);
 
atl_iof_electr_select5 = atl_iof_electr_select(5);
 
atl_iof_electr_select6 = atl_iof_electr_select(6);
 
atl_iof_electr_select7 = atl_iof_electr_select(7);
 
atl_iof_electr_select8 = atl_iof_electr_select(8);
 
 
atl_iof_electr_panel_open = dlg {
 
	nam = "Атлантида, Игнис";
 
	dsc = [[
 
		Вы снимаете щиток и дергаете рубильник. Судя по всему, Игнис сейчас должен быть обесточен. По радио вы сообщаете Райту о завершении работ.
 
	]];
 
	phr = {
 
		{"Подача электричества в Игнис отключена, возвращаюсь на станцию", [[
 
			В динамике вы слышите голос Райта: "Отлично, возвращайтесь".^
 
		]], code [[ walk("atl_iof_end"); ]]};
 
	};
 
};
 
 
atl_iof_end = room {
 
	nam = "Атлантида";
 
	dsc = [[
 
		Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. При выходе из дока вас встречает Моро и говорит: "Дрейк. Я понимаю, вам нужен отдых. Как сможете - посетите меня и других лидеров станции". Вы приходите в свою комнату и сразу же засыпаете...^
 
		Вы просыпаетесь утром, полностью готовый заняться новыми делами. 
 
		Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. Вы просыпаетесь утром, полностью готовый заняться новыми делами. ^
 
		Почти сразу к вам в комнату входят двое охранников. Они просят вас проследовать за ними к начальнику службы безопасности - Винсенту Даркстару. У вас нет никакого выхода, кроме как пойти с ними...
 
	]];
 
	entered = function(s)
 
		atl_lfc_state = 1;
 
		if (atl_iof_time_state.learr_safe) then
 
			atl_iof_learr_suit = true;
 
		end;
 
		if (atl_iof_time_state.carry_learr or atl_iof_time_state.learr_safe or not char_learr_iof.faint) then
 
			-- learr saved
 
			put(char_learr_atlantis, atl_oculus_lab_c);
 
		else
 
			atl_iof_learr_dead = true;
 
			put(char_aikerjarr, atl_oculus_lab_c);
 
		end;
 
		atl_iof_completed = true;
 
	end;
 
	obj = {
 
		vway("Продолжить", "{Продолжить}", "atlantis_luna_drake_room");
 
		vway("Продолжить", "{Продолжить}", "atl_lfc_darkstar_dlg");
 
	};
 
	
 
};
 
\ No newline at end of file
atlantis_looking_for_clues.lua
Show inline comments
 
new file 100644
 
atl_lfc_darkstar_dlg = dlg {
 
	var {
 
		total_limit = 3;
 
		limit = 3;
 
		q2_states = 0;
 
	};
 
	nam = "Винсент Даркстар";
 
	disp = "Винсент Даркстар";
 
	entered = function(s)
 
		psub("q1");
 
		s.limit = 3;
 
		q2_states = 0;
 
		if (atl_jack_in_party) then
 
			pon("random_lie", "wright_said");
 
			poff("random_true");
 
		else
 
			poff("random_lie", "wright_said");
 
			pon("random_true");
 
		end;
 
		return [[
 
			Винсент Даркстар сидит за столом в своем кабинете. Он приглашает вас сесть напротив, а охранников просит покинуть помещение. ^
 
			Как только они выходят, Даркстар достает из под стола папку с какими-то бумагами и начинает спрашивать вас: "Где вы были, когда начался пожар?"
 
		]];
 
	end;
 
	phr = {
 
		{tag="q1"};
 
		{"Вы меня подозреваете?", [[
 
			"Отвечайте на поставленный вопрос. Это не имеет значения".
 
		]]};
 
		{always=true,"Мы с Леарр разговаривали в зале А", [[
 
			"Хорошо. Дальше. Заметили ли вы что-то необычное в секции?"
 
		]], code [[ psub("q2"); ]]};
 
		{always=true,"Я не хочу отвечать", [[
 
			"Нет проблем. Следующий вопрос. Заметили ли вы что-то необычное в секции?"
 
		]], code [[
 
			atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1;
 
			psub("q2");
 
		]]};
 
		{tag="q2"};
 
		{always=true,"Больше ничего.", function(s)
 
			if (atl_lfc_darkstar_dlg.q2_states < 2) then
 
				atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1;
 
			end;
 
			pr [[
 
				"Хорошо, идем дальше. 
 
			]];
 
			if (atl_jack_in_party) then
 
				psub("q3_1");
 
				return [[
 
					Что делал в это время ваш друг, Джек?"
 
				]];
 
			else
 
				psub("q3_2");
 
				return [[
 
					Кроме вас кто-нибудь еще был в секции?"
 
				]];
 
			end;
 
			
 
		end};
 
		{always=true,"Двери в залы B и C не работали.", [[
 
			"Техники..."
 
		]], code [[ 
 
			atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; 
 
		]]};
 
		{always=true,"Один из электрощитов не был закрыт.", [[
 
			"Обычное дело на Атлантиде. Наши техники порой позволяют себе невероятную неаккуратность".
 
		]], code [[
 
			atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; 
 
		]]};
 
		{always=true,"В зале А не работали электроприборы.", [[
 
			"Это уже совсем ни в какие ворота не лезет".
 
		]], code [[
 
			atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; 
 
		]]};
 
		{tag="q3_1"};--Что делал в это время ваш друг, Джек?
 
		{always=true,"Он вышел в главный зал, чтобы не мешать нам", function(s)
 
			if (atl_lfc_darkstar_dlg.limit < 2) then
 
				psub("i1");
 
				return [[
 
					"Вы в Игнис с какой целью пришли?"
 
				]];
 
			else
 
				walk("atl_ifc_darkstar_interlude");
 
				return [[
 
					"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
				]];
 
			end;
 
		end};
 
		{always=true,"Он был с нами", function(s)
 
			if (atl_lfc_darkstar_dlg.limit < 2) then
 
				psub("i1");
 
				return [[
 
					"Вы в Игнис с какой целью пришли?"
 
				]];
 
			else
 
				walk("atl_ifc_darkstar_interlude");
 
				return [[
 
					"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
				]];
 
			end;
 
		end};
 
		{always=true,"Не помню", function(s)
 
			atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1;
 
			if (atl_lfc_darkstar_dlg.limit < 2) then
 
				psub("i1");
 
				return [[
 
					"Вы в Игнис с какой целью пришли?"
 
				]];
 
			else
 
				walk("atl_ifc_darkstar_interlude");
 
				return [[
 
					"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
				]];
 
			end;
 
		end};
 
		{tag="q3_2"};--Кроме вас с Леарр кто-нибудь еще был в секции?
 
		{always=true,"Я никого не видел", function(s)
 
			if (atl_lfc_darkstar_dlg.limit < 2) then
 
				psub("i1");
 
				return [[
 
					"Вы в Игнис с какой целью пришли?"
 
				]];
 
			else
 
				walk("atl_ifc_darkstar_interlude");
 
				return [[
 
					"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
				]];
 
			end;
 
		end};
 
		{always=true,"Не помню", function(s)
 
			atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1;
 
			if (atl_lfc_darkstar_dlg.limit < 2) then
 
				psub("i1");
 
				return [[
 
					"Вы в Игнис с какой целью пришли?"
 
				]];
 
			else
 
				walk("atl_ifc_darkstar_interlude");
 
				return [[
 
					"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
				]];
 
			end;
 
		end};
 
		{tag="i1"};
 
		{always=true,"Поговорить с Леарр.", function(s)
 
			if (atl_iof_learr_dead) then
 
				if (atl_lfc_darkstar_dlg.total_limit > 1) then
 
					psub("i2_1");
 
					return [[
 
						"Почему вы оставили Леарр там?"
 
					]];
 
				else
 
					psub("i3");
 
					return [[
 
						"Откуда вы узнали про скафандры?"
 
					]];
 
				end;
 
			else
 
				psub("i2_2");
 
				return [[
 
					"Почему вы спасли Леарр?"
 
				]];
 
			end;
 
		end;};
 
		{always=true,"Посмотреть Игнис.", [[
 
			"Вы знали, что Леарр там?"
 
		]], code [[ psub("i2_3"); ]]};
 
		{always=true,"Это имеет значение?", [[
 
			Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования".
 
		]], code = [[
 
			atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1;
 
			walk('atl_ifc_non_coop');
 
		]]};
 
		{tag="i2_1"};
 
		{always=true,"У меня не было выбора", [[
 
			Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Вам стоит еще подумать".
 
		]], code = [[
 
			atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1;
 
			walk('atl_ifc_non_coop');
 
		]]};
 
		{always=true,"Я рассчитывал вернуться за ней позже", [[
 
			"Вы идиот", - Даркстар встает из-за стола и начинает ходить по комнате. Вы явно вывели его из себя. Через некоторое время он успокаивается и садится на место.
 
		]], code = [[
 
			atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1;
 
			walk('atl_ifc_non_coop');
 
		]]};
 
		{always=true,"С чего я должен был думать об этом чудище?", [[
 
			_"Выкинуть бы вас за борт. Без скафандра Жаль, что мы не ,,чудища'', как вы выражаетесь"_, - Даркстар встает из-за стола и начинает ходить по комнате. Вы явно вывели его из себя. Через некоторое время он успокаивается и садится на место.
 
		]], code = [[
 
			atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 3;
 
			walk('atl_ifc_non_coop');
 
		]]};
 
		{tag="i2_2"};
 
		{always=true,"Я не мог оставить ее умирать", [[
 
			"Откуда вы узнали про скафандры?"
 
		]], code [[
 
			psub("i3");
 
		]]};
 
		{tag="i2_3"};
 
		{always=true,"Светлова говорила, что она может быть в Игнисе", [[
 
			"Откуда вы узнали про скафандры?"
 
		]], code [[
 
			psub("i3");
 
		]]};
 
		{always=true,"Нет", [[
 
			"Откуда вы узнали про скафандры?"
 
		]], code [[
 
			psub("i3");
 
		]]};
 
		{always=true,"Это имеет значение?", [[
 
			Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования".
 
		]], code [[
 
			psub("i3");
 
		]]};
 
		{tag = "i3"};
 
		{always=true,tag="wright_said", "Джек Райт сказал", [[
 
			"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
		]], code = [[
 
			walk("atl_ifc_darkstar_interlude");
 
		]]};
 
		{always=true,"Леарр сказала", [[
 
			"Она не могла этого знать", - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "А я терпеть не могу, когда мне врут".
 
		]], code = [[
 
			atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1;
 
			walk('atl_ifc_non_coop');
 
		]]};
 
		{always=true,tag="random_lie", "Я случайно наткнулся", [[
 
			Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Я думаю вам стоит еще подумать".
 
		]], code = [[
 
			atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1;
 
			walk('atl_ifc_non_coop');
 
		]]};
 
		{always=true,tag="random_true", "Я случайно наткнулся", [[
 
			"Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать".
 
		]], code = [[
 
			walk("atl_ifc_darkstar_interlude");
 
		]]};
 
		
 
	};
 
};
 
 
atl_ifc_darkstar_interlude = room {
 
	nam = "Винсент Даркстар";
 
	dsc = [[
 
		Винсент раскрывает папку лежающую на столе и раскладывает перед собой несколько бумаг: _"У нас есть основания полагать, что события в Игнисе - следствие саботажа. Мы считаем, что саботажник не рассчитывал, что в секции в момент пожара будет кто-либо - обычно в это время в Игнисе никого нет. Должен сказать, на станции уже давно некоторые выступают за сворачивание проекта и возвращение на поверхность. Вы прекрасно понимаете, что мы не можем просто так отправить их на поверхность - их слишком много, и если они начнут болтать - существование станции будет раскрыто. А нам этого не хотелось бы"_. Внезапно раздается звонок. Даркстар поднимает трубку телефона и отрывисто бросает туда: "Сейчас буду". Он встает и направляется к выходу, при этом просит вас: "Ждите здесь, я не надолго".
 
	]];
 
	obj = {
 
		vway("Продолжить", "{Продолжить}", "atl_ifc_darkstar_office");
 
	};
 
};
 
 
atl_ifc_darkstar_office = room {
 
	nam = "Атлантида, Доминус, кабинет начальника СБ";
 
	dsc = [[
 
		Кабинет начальника службы безопасности почти пуст - здесь нет ничего кроме массивного металлического стола(судя по всему - бронированного) в центре и кресла перед ним. 
 
	]];
 
	entered = function()
 
	end;
 
	life = function()
 
	end;
 
	way = {
 
		kh_vroom("В коридор", function()
 
			pr("Дверь заперта");
 
			return false;
 
		end);
 
	};
 
	obj = {
 
		'atl_darkstar_papers'
 
	};
 
};
 
 
atl_darkstar_papers = obj {
 
	nam = "atl_darkstar_papers";
 
	dsc = [[
 
		На столе лежит оставленная Винсентом {папка с бумагами}.
 
	]];
 
	act = function(s)
 
		walk("atl_ifc_darkstar_interlude_2")
 
		return [[
 
			Вы просматриваете бумаги - это список подозреваемых в саботаже. Здесь присутствует большая часть обитателей Атлантиды. На отдельном листе записаны несколько моментов: во-первых, Даркстар не подозревает никого из руководства, поскольку каждый из них напрямую заинтересован в развитии станции. Во-вторых, к вашему удивлению, он не подозревает вас, поскольку саботажник, судя по всему, был хорошо знаком с устройством системы электроснабжения Игниса. Основными подозреваемыми он считает Мишеля Леруа, Леонарда Голдмана и Чарльза Джонса. Все они сторонники закрытия проекта и обладают достаточными знаниями, чтобы устроить подобный саботаж. ^
 
			Вы слышите звук открывающегося замка и поспешно возвращаете папку в ее изначальное положение. 
 
		]];
 
	end;
 
};
 
 
atl_ifc_darkstar_interlude_2 = room {
 
	nam = "Винсент Даркстар";
 
	dsc = [[
 
		В комнату входит Винсент Даркстар и садится на свое место. Вам он говорит: "С учетом цели саботажника, я предполагаю, что следующая атака будет направлена на вывод из строя субмарин. В любом случае - я прошу вас никому не говорить о том, что я вам тут рассказал. В случае необходимости я вас вызову. Вы свободны".
 
	]];
 
	obj = {
 
		vway("Продолжить", "{Продолжить}", "atl_dom_security_office");
 
	};
 
};
 
 
atl_ifc_non_coop = room {
 
	nam = "Винсент Даркстар";
 
	dsc = [[
 
		После этого он снимает телефонную трубку и отдает туда приказ: "Заберите Дрейка". ^
 
		В комнату входят два стражника и сопровождают вас в вашу комнату.
 
	]];
 
	obj = {
 
		kh_vway("Продолжить", "{Продолжить}", function()
 
			if (atl_lfc_darkstar_dlg.total_limit < 1) then
 
				return "atl_ifc_game_over";
 
			else
 
				return "atl_lfc_waiting";
 
			end;
 
		end);
 
	};
 
};
 
 
atl_ifc_game_over = room {
 
	nam = "Игра окончена";
 
	disp = "Игра окончена";
 
	dsc = [[
 
		Охранники уходят и запирают за собой дверь. Вы остаетесь один, запертый в собственной каюте. Через некоторое время вы слышите голос Даркстара по радио: "Вы останетесь под стражей до тех пор, пока мы не найдем саботажника. После этого, мы решим, что делать с вами".^
 
		Вам ничего не остается, кроме как ждать. Через несколько дней стражники сопровождают вас на Левиафан. Там вас запирают в одной из кают. Несколько недель Левиафан полным ходом движется в неизвестном направлении. Наконец, вас выпускают из каюты. Один из охранников сообщает вам: "В нескольких милях к северу вдоль побережья находится небольшой городок. Оттуда вы сможете добраться куда вам угодно. Мы дадим вам немного еды и достаточно денег, чтобы вы могли добраться домой".^
 
		Вы забираете переданные вам вещи и через несколько мгновений Левиафан скрывается под поверхностью воды. Никаких средств для возвращения на Атлантиду у вас не остается и, скорее всего, вы никогда не узнаете что стало с вашим отцом.
 
	]];
 
};
 
 
atl_lfc_waiting = room {
 
	nam = "Атлантида, Луна, ваша комната";
 
	dsc = [[
 
		Охранники уходят и запирают за собой дверь. Вы остаетесь один, запертый в собственной каюте. Через некоторое время вы слышите голос Даркстара по радио: "Отдохните. Завтра мы попробуем поговорить еще раз".
 
	]];
 
	obj = {
 
		vway("Продолжить", "{Продолжить}", "atl_lfc_waiting");
 
	};
 
};
 
\ No newline at end of file
main.lua
Show inline comments
 
-- $Name: Пробуждение$
 
-- $Version: 1.0$
 
-- $Author: Khaelenmore Thaal$
 
 
instead_version "1.9.1"
 
require "para"
 
require "dash"
 
require "quotes"
 
require "hideinv"
 
require "kbd"
 
 
-- Код и ядро
 
dofile "utils.lua"
 
-- Общее
 
dofile "items.lua"
 
dofile "party.lua"
 
dofile "game_over.lua";
 
-- Часть 1
 
dofile "london.lua"
 
dofile "wright.lua"
 
dofile "travel.lua"
 
dofile "dock2.lua"
 
dofile "warehouse18.lua"
 
dofile "warehouse32.lua"
 
-- Часть 2
 
dofile "leviathan.lua"
 
dofile "atlantis.lua"
 
dofile "atlantis_intro.lua"
 
dofile "atlantis_ignis_on_fire.lua"
 
dofile "atlantis_looking_for_clues.lua"
 
dofile "navjiarr_settlement.lua"
 
dofile "navjiarr_hostile_settlement.lua"
 
-- Часть 3
 
-- Часть 4
 
dofile "final_scene.lua";
 
dofile "final_battle.lua";
 
dofile "first_city_inner_rim.lua"
 
dofile "first_city_middle_rim.lua"
 
dofile "first_city_outer_rim.lua"
 
 
--TODO представить все дисплеи картинками
 
--TODO описания локаций должны изменяться в зависимости от посещения их днем или ночью
 
--TODO больше Flavour-textа
 
 
global {
 
	warehouse18_found = false;
 
	warehouse32_found = false;
 
	dock_found = false;
 
	leviathan_discovered = false;
 
	atlantis_found = false;
 
	
 
	rel_phaetlarr = 0;
 
	rel_walter = 0;
 
	rel_learr = 0;
 
	rel_anna = 0;
 
	rel_jack = 0;
 
	
 
};
 
 
pl = player {
 
	nam = "player";
 
	disp = "Дэвид Дрейк";
 
	where = 'port';
 
	hitpoints = 10;
 
	obj = {'item_umbrella', 'item_charts', 'item_note_1', 'item_money', 
 
	};
 
	-- party array. Should be empty on start
 
	party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]};
 
	companion = nil;
 
	money = 200;
 
	pay = function(s, c)
 
		if (s.money >= c) then
 
			s.money = s.money - c;
 
			return true;
 
		else
 
			return false;
 
		end;
 
	end;
 
};
 
 
intro = room {
 
	nam = "intro";
 
	hideinv = true;
 
	disp = "Вступление";
 
	dsc = [[
 
		ВНИМАНИЕ: Это специальная предварительная версия игры. Ни один фрагмент игры не является финальным. ^^
 
		ВНИМАНИЕ: Данная версия игры не предназначена для какого-либо распространения, исключая прямую передачу файлов автором. Вышеуказанное ограничение на распространение данной версии игры аннулируется в момент выхода полной версии. ^^
 
		Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка - единственного сына богатого и уважаемого владельца транспортной компании "Вестхейвен Трансоушен". ^
 
		Несколько лет назад, когда Дэвиду было 10 лет, Уильям таинственным образом бесследно пропал. Полицейское расследование вскоре зашло в тупик и было прекращено. Через несколько месяцев компания, оставшаяся без своего владельца, обанкротилась, ее имущество распродается. ^
 
		После исчезновения отца Дэвид жил в Вашингтоне с бабушкой. Он пошел по стопам отца и выучился на инженера-кораблестроителя. Несколько дней назад в доме, где он жил, был обнаружен тайник, хранящий секретные документы отца - карты, указывающие по-видимому на какие-то тайники Уильяма и записка с адресом и именем.^
 
		Одержимый идеей узнать больше, Дэвид отправляется в Лондон...
 
	]];
 
	obj = {
 
		vway("Начать игру", "{Начать игру}", 'aurora_borealis');
 
	}
 
};
 
 
demo_end = room {
 
	nam = "demo_end";
 
	hideinv = true;
 
 	dsc = [[
 
		Вы встаете за штурвал "Левиафана". Уверенным движением руки вы включаете насосы. Резервуары заполняются водой и субмарина опускается вниз. Еще одним движением вы включаете двигатели. "Левиафан" плавно сдвигается с места. Через несколько часов вы выходите в открытое море. Еще раз сверившись с картой, вы направляетесь к месту, отмеченному на ней. 
 
		
 
		*** Конец предварительной демонстрации ***
 
	]];
 
};
 
 
game.nam = "Пробуждение";
 
game.dsc = [[
 
	Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка, сына владельца крупной транспортной компании "Вестхейвен Трансоушен". Несколько лет назад Уильям Дрейк, отец главного героя бесследно пропадает. Компания вскоре разваливается. Поиски ни к чему не приводят. Когда казалось бы уже все потеряно, в доме Дрейков находят тайник с документами Уильяма. Несколько схем строений, принадлежащих компании и клочок бумаги с адресом некоего Майкла Райта в Лондоне. Естественно, Дэвид как можно скорее отправляется в Великобританию...
 
	Вам предстоит отыскать подводную лодку, посетить подводную станцию, построенную Уильямом, встретить древнюю расу подводных жителей, поучаствовать в событиях, описанных древними легендами этой расы и узнать, что стало с Уильямом Дрейком.
 
]];
 
 
game_act_phrases = {
 
	"Вы не знаете, что с этим делать. ";
 
	"Вам нет смысла это трогать. ";
 
	"Вам это ничем не поможет. ";
 
	"Это бессмыссленно. ";
 
	"Незачем это трогать. ";
 
};
 
 
game_use_phrases = {
 
	"Вам это ничем не поможет. ";
 
	"Это бессмыссленно. ";
 
	"Вы не знаете, как это сделать. "
 
};
 
 
game.act = function(s)
 
	return game_act_phrases[rnd(#game_act_phrases)];
 
end;
 
 
game.use = function(s)
 
	return game_use_phrases[rnd(#game_use_phrases)];
 
end;
 
game.inv = "INV: Если вы видите это сообщение - это баг. ";
 
 
require "dbg"
 
 
function init()
 
	---modules init
 
	leviathan_init();
 
	warehouse18_init();
 
	warehouse32_init();
 
	---game init
 
	pl.where = intro;
 
	---debug
 
	atl_nih_init();
 
	pl.where = atl_dom_main_near_aqua;
 
	-- pl.where = warehouse_32;
 
	-- pl.where = w32_mgr;
 
	-- put(item_toolbox, pl);
 
	-- put(item_cogs, pl);
 
	-- put(item_pump_details, pl);
 
	-- put(item_electrodes, pl);
 
	--put(item_lamp, pl);
 
	-- pl.where = aurora_borealis;
 
	-- move(submarine_leviathan, first_city_entrance);
 
	-- move(submarine_leviathan, first_city_outer_east);
 
	-- walk(final_scene);
 
	-- walk(leviathan_wardroom);
 
	-- walk(leviathan_wardroom);
 
	-- put("char_learr", "leviathan_wardroom");
 
	-- put("char_phaetlarr", "leviathan_engines");
 
	-- put("char_radcliffe", "leviathan_engines");
 
	-- put("char_wright", "leviathan_wardroom");
 
	-- pl.where = leviathan_airlock;
 
	-- pl.where = hotel_street;
 
	-- pl.where = warehouse_32_entry;
 
	-- dock_found = true;
 
end;
 
\ No newline at end of file
0 comments (0 inline, 0 general)