Files @ 14fd72163e4b
Branch filter:

Location: games/Awakening/atlantis_from_the_ashes.lua

Silverwing
Progress on dlg rewrite; Mochael Wright dlg rewrite
atl_fta_is_terra_solis = room {
	nam = "Атлантида, межсекционный кодидор";
	dsc = [[
		Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение. 
	]];
	entered = function(s)
		if (s.state == 0) then
			return [[
				Вы входите в межсекционный коридор Солиса и в этот момент станцию сотрясает взрыв. Свет на мгновение моргает. Раздается звонок телефона. 
			]];
		end;
	end;
	way = {
		kh_vroom("В секцию Терра", "atl_fta_game_over_left");
		kh_vroom("В секцию Солис", function(s)
			if (atl_fta_phone.state == 1 and have(item_atl_fta_suit)) then
				return "atl_fta_solis_entry";
			else
				pr [[Вы вот так просто войдете в секцию где только что произошел взрыв?]];
				return false;
			end;
		end);
	};
	obj = {
		"atl_fta_phone",
		"item_atl_fta_suit"
	};
};

item_atl_fta_suit = suit {
	var {
		dlg = nil;
	};
	nam = "Скафандр";
	dsc = [[В углу, так же как и в других межсекционных коридорах стоит {скафандр}, который используется в случае чрезвычайной ситуации. ]];
	tak = function(e)
		if (atl_fta_phone.state == 1) then
			return "Вы одеваете скафандр", true;
		else
			return "Вам незачем это делать", false;
		end;
	end;
};

atl_fta_phone = obj {
	var {
		state = 0;
	};
	nam = "Телефон";
	dsc = function(s)
		if (s.state == 0) then
			return [[
				На стене висит звонящий {телефонный аппарат}.
			]];
		else
			return [[
				На стене висит {телефонный аппарат}.
			]];
		end;
	end;
	act = function(s)
		if (s.state == 0) then
			s.state = 1;
			walk("atl_fta_dlg_phone");
		else
			return false;
		end;
	end;
};

atl_fta_dlg_radio = dlg {
	var {
		state = 0;
	};
	nam = "Радио";
	entered = function(s)
		if (s.state == 0) then
			psub("tuning");
			return [[
				Радио не настроено
			]];
		elseif (s.state == 1) then
			psub("ok");
			return [[
				Радио настроено, вы можете говорить
			]];
		elseif (s.state == 2) then
			psub("next");
			return [[
				Радио настроено, вы можете говорить
			]];
		elseif (s.state == 3) then
			psub("more");
			return [[
				Радио настроено, вы можете говорить
			]];
		end;
	end;
	phr = {
		{tag="tuning"};
		{"[Настроить приемник]Прием, как слышите?", [[
			Через несколько минут настройки, вы слышите в динамике голос Райта: "Да, Дрейк".
		]], code [[ atl_fta_dlg_radio.state = 1; psub("ok"); ]]};
		{tag="ok"};
		{"Что мне делать?", [[
			"Что вы видите?"
		]], code [[ atl_fta_dlg_radio.state = 2; psub("what_i_see"); ]]};
		{tag="what_i_see"};
		{"К юго-востоку от меня вижу огонь, скорее всего взрыв был там. Здесь жарко. В остальном все вроде пока в порядке", [[
			"Идите по западной стороне. Ваша задача - попасть в центр секции, с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь".
		]], code [[ back(); ]]};
		{tag="next"};
		{"Что мне делать?", [[
			"Идите по западной стороне. Ваша задача - попасть в центр секции, с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь".
		]]};
		{tag="more"};
		{"Тут еще что-то взорвалось", [[
			"Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена".
		]], code [[ atl_fta_dlg_radio.state = 2; ]]};
		{"Как я выберусь отсюда?", [[
			"На юге есть шлюз, выйдете через него".
		]], code [[ atl_fta_dlg_radio.state = 2; ]]};
	};
};

atl_fta_dlg_phone = dlg {
	nam = "Телефон";
	entered = [[
		Вы снимаете трубку и слышите раздраженный голос Винсента Даркстара: "Дрейк?! Какого черта?! Немедленно возвращайтесь в свою комнату!"^ 
		Вы не успеваете и слова сказать, как в разговор вмешивается Майкл Райт: "Стойте! Дрейк, кроме вас там никого нет, поэтому одевайте скафандр и слушайте мои инструкции".
	]];
	phr = {
		{"Вас понял", code = [[ psub("back"); ]]};
	};
};

atl_fta_solis_entry = room {
	nam = "Атлантида, Солис, рядом со шлюзом";
	dsc = [[
		В помещении темно и жарко. Слева и справа от вас проложены трубы. Сквозь просветы в них вы видите огонь где-то вдалеке на юго-востоке.
	]];
	entered = function(s)
		item_atl_fta_suit.dlg = "atl_fta_dlg_radio";
	end;
	way = {
		vroom("На восток", "atl_fta_solis_ne");
		vroom("На запад", "atl_fta_solis_nw");
	};
};

atl_fta_solis_ne_1 = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. Сквозь просветы в них вы видите огонь где-то вдалеке на юге.
	]];
	way = {
		vroom("На запад", "atl_fta_solis_entry");
		vroom("На юг", "atl_fta_solis_e");
	};
};

atl_fta_solis_e = room {
	nam = "Атлантида, Солис";
	dsc = [[
		Здесь очень жарко. Путь на юг прегражден обломками труб, а за ними вы видите огонь. 
	]];
	way = {
		vroom("На север", "atl_fta_solis_ne");
	};
};

atl_fta_solis_nw = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
	]];
	way = {
		vroom("На восток", "atl_fta_solis_entry");
		vroom("На юг", "atl_fta_solis_w");
	};
};

atl_fta_solis_w = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
	]];
	way = {
		vroom("На север", "atl_fta_solis_nw");
		vroom("На восток", "atl_fta_solis_c1");
		vroom("На юг", "atl_fta_solis_sw");
	};
};

atl_fta_solis_c1 = room {
	nam = "Атлантида, Солис, центр";
	dsc = [[
		В помещении темно и жарко. Перед собой вы видите сложную конструкцию из труб и клапанов. Через металлическую решетку на севере вы видите вентили, о которых говорил Райт. К сожалению, вы не сможете дотянуться до них отсюда.
	]];
	way = {
		vroom("На запад", "atl_fta_solis_w");
	};
};

atl_fta_solis_sw = room {
	var {
		state = 0;
	};
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
	]];
	entered = function(s)
		if (s.state == 0) then
			s.state = 1;
			item_atl_fta_suit.dlg = nil;
			pr([[
				Позади вас раздается еще один взрыв. Вы с трудом удерживаетесь на ногах, видите, что часть секции на севере завалена и сквозь дым, пар и пыль видите начавшийся пожар.
			]]);
		end;
	end;
	way = {
		vroom("На восток", "atl_fta_solis_exit");
	};
};

atl_fta_solis_exit = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
	]];
	way = {
		vroom("На север", "atl_fta_solis_c2");
		vroom("На запад", "atl_fta_solis_sw");
		vroom("На восток", "atl_fta_solis_se");
		kh_vroom("В шлюз", function(s)
			if atl_fta_solis_c2:solved() then
				return "atl_fta_ending";
			else
				return "atl_fta_game_over_left_2";
			end;
		end);
	};
};

atl_fta_solis_c2 = room {
	var {
		valve_a = 2;
		valve_b = 90;
		broken_valve = 0;
		broken_offset = 0;
		valves = {1,1,1,1,1};
	};
	solved = function(s)
		for i =1, #s.valves do
			if (s.valves[i] == 0 and i ~= s.broken_valve or 
				s.valves[i] == 1 and i == s.broken_valve) then
				return false;
			end;
		end;
		
		return true;
	end;
	nam = "Атлантида, Солис, Центр";
	dsc = function(s)
		if (not s:solved()) then
			return [[
				В помещении темно и жарко. Где-то рядом вы слышите шипение пара, вырывающегося из труб, но не видите, где. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры:
			]];
		else
			return [[
				В помещении темно и жарко. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры:
			]];
		end;
	end;
	entered = function(s)
		if (s.broken_valve == 0) then
			s.broken_valve = rnd(5);
			s.broken_offset = rnd(9) + 10;
		end;
	end;
	way = {
		vroom("На юг", atl_fta_solis_exit);
	};
	obj = {
		"atl_fta_solis_valve1",
		"atl_fta_solis_valve2",
		"atl_fta_solis_valve3",
		"atl_fta_solis_valve4",
		"atl_fta_solis_valve5",
		"atl_fta_solis_valvea",
		"atl_fta_solis_valveb",
		"item_goldmans_clock"
	};
};

atl_fta_solis_valvea = obj {
	nam = "Вентиль";
	dsc = "Под ними расположены еще два вентиля. Тот, что {слева} отмечен буквой A,";
	act = function(s)
		if (atl_fta_solis_c2.valve_a == 2) then
			atl_fta_solis_c2.valve_a = 3;
		elseif (atl_fta_solis_c2.valve_a == 3) then
			atl_fta_solis_c2.valve_a = 4;
		elseif (atl_fta_solis_c2.valve_a == 4) then
			atl_fta_solis_c2.valve_a = 6;
		elseif (atl_fta_solis_c2.valve_a == 6) then
			atl_fta_solis_c2.valve_a = 2;
		end;
	end;
};

atl_fta_solis_valveb = obj {
	nam = "Вентиль";
	dsc = " а тот, что {справа} - буквой B.";
	act = function(s)
		if (atl_fta_solis_c2.valve_b == 90) then
			atl_fta_solis_c2.valve_b = 60;
		elseif (atl_fta_solis_c2.valve_b == 60) then
			atl_fta_solis_c2.valve_b = 45;
		elseif (atl_fta_solis_c2.valve_b == 45) then
			atl_fta_solis_c2.valve_b = 30;
		elseif (atl_fta_solis_c2.valve_b == 30) then
			atl_fta_solis_c2.valve_b = 90;
		end;
	end;
};

atl_fta_solis_valve = function(index)
	return obj {
		nam = "Вентиль";
		dsc = function(s)
			local value = atl_fta_solis_c2.valve_a * index + math.floor(atl_fta_solis_c2.valve_b / index);
			if (atl_fta_solis_c2.broken_valve == index) then
				value = value + atl_fta_solis_c2.broken_offset;
			end;
			if (atl_fta_solis_c2.valves[index] == 0) then
				value = 0;
			end;
			return "{Вентиль №"..tostring(index).."}. Манометр показывает " .. tostring(value) .. "^";
		end;
		act = function(s)
			if (atl_fta_solis_c2.valves[index] == 0) then
				atl_fta_solis_c2.valves[index] = 1;
			else
				atl_fta_solis_c2.valves[index] = 0;
			end;
			
			if (atl_fta_solis_c2:solved()) then
				return "Шипение пара прекращается. Вы сделали все, что нужно. ";
			else
				return false;
			end;
		end;
	};
end;

atl_fta_solis_valve1 = atl_fta_solis_valve(1);
atl_fta_solis_valve2 = atl_fta_solis_valve(2);
atl_fta_solis_valve3 = atl_fta_solis_valve(3);
atl_fta_solis_valve4 = atl_fta_solis_valve(4);
atl_fta_solis_valve5 = atl_fta_solis_valve(5);

atl_fta_game_over_left = room {
	nam = "Игра окончена";
	dsc = [[
		Как только вы выходите из межсекционного коридора, раздается еще один взрыв и свет на станции гаснет. Взрыв повреждает межсекционный коридор и его начинает заполнять вода. Вы начинаете задраивать люк, но третий взрыв сбивает вас с ног. Вы падаете и теряете сознание. Через несколько мгновений вы утонете, но вас это уже не заботит. 
	]];
};

atl_fta_game_over_left_2 = room {
	nam = "Игра окончена";
	dsc = [[
		Как только вы входите в шлюз, взрыв сокрушительной силы сотрясает станцию. Шлюзовую дверь выбивает и вас отбрасывает в противоположный угол комнаты. Вы видите, как секцию начинает заполнять вода. По радио не слышно ничего кроме помех и скорее всего никто не придет к вам на помощь...
	]];
};

atl_fta_ending = room {
	nam = "Атлантида";
	dsc = [[
		Через шлюз вы выбираетесь из Солиса и оказываетесь снаружи. Через некоторое время вас подбирает Наутилус, чтобы вернуть на станцию. От экипажа вы узнаете, что потребление энергии на станции сокращено до восстановления Солиса. ^
		Вернувшись на станцию, вы сразу же отправляетесь в свою каюту, чтобы отдохнуть. 
	]];
	entered = function(s)
		atl_fta_state = 2;
		remove(item_atl_fta_suit);
	end;
	obj = {
		vway('continue', '{Продолжить}', 'atl_luna_drake_room');
	};
};