Files @ 77aa01170934
Branch filter:

Location: games/Awakening/leviathan.lua

Silverwing
lseryanotrr finished
--[[
Ваша подводная лодка - Левиафан
Для начала вам придется починить ее
Имеет два двигателя - электрический и паровой
Для запуска машины потребуется починить и обеспечить энергией хотя бы один из них(уголь или батареи)
Левиафан - достаточно большая подводная лодка. Хотя она может управляться одним человеком, рассчитана она на много большее.

Имеется три доступных уровня освещения: 
Не освещено - ничего не видно, передвигаться по кораблю невозможно
Плохо освещено - Описания минимальны, большинство действий недостпны
Хорошо освещено - полные описания, все действия доступны

Скафандры придется зарабатывать на Атлантиде
]]

-- TODO добавить описание перемещений между локациями в виде нескольких локаций-кат-сцен, из которых случайным образом выбирается одна
-- TODO персонажи не должны обсуждать личные темы по телефону, только при встрече

submarine_leviathan = obj {
	nam = "submarine_leviathan";
	disp = "Левиафан";
	suits = 0;
	-- dsc = [[
	--	Вы видите огромную металлическую конструкцию, напоминающую рыбу. Большие стеклянные иллюминаторы по бортам еще больше усиливают впечатление. На бортах крупными буквами выведено "А04 Левиафан". В верхней части машины вы видите {люк}.^ 
	--]];
	dsc = [[
		Вы видите "{Левиафан}" - вашу субмарину. ^
	]];
	act = [[ Несмотря на проведенные в бездействии годы, субмарина сейчас в отличном состоянии. Из иллюминаторов льется яркий свет. На борту виднреется слегка пошарпанная, но читаемая надпись "А04 - Левиафан" ]];
	-- function()
		-- walk "leviathan_airlock";
		-- return "Оказавшись внутри, вы закрываете за собой люк";
	--end;
};

--leviathan_exit = obj {
--	nam = "leviathan_exit";
--	dsc  = [[
--		{Люк} в потолке закрыт.
--	]];
--	act = function(s)
--		walk(where(submarine_leviathan));
--		return "Оказавшись снаружи, вы закрываете за собой люк";
--	end;
--};

leviathan_airlock = room {
	nam = "leviathan_airlock";
	disp = "Левиафан, шлюз";
	leviathan = true;
	dsc = [[
		Вы находитесь в шлюзовом отсеке Левиафана. Яркий свет электрических ламп освещает помещение. 
	]];
	way = {
		vroom("Кают-компания", "leviathan_wardroom");
		vroom("Наружу", function()
			return where(submarine_leviathan);
		end);
	};
};

leviathan_captains_cabin = room {
	nam = "leviathan_captains_cabin";
	disp = "Левиафан, каюта капитана";
	leviathan = true;
	dsc = [[
		Вы находитесь в каюте, очевидно, предназначенной для капитана. Эта каюта немного больше остальных, в ней размещен стол и стул. 
		В столе несколько ящичков, хитроумно закрытых, чтобы при качке они не открывались.
	]];
	way = {
		vroom("Каюты", "leviathan_cabins");
	};
	obj = {
		"phone_cabin";
	};
};

leviathan_cabins = room {
	nam = "leviathan_cabins";
	disp = "Левиафан, каюты";
	leviathan = true;
	dsc  =[[
		Вы находитесь в длинном коридоре с множеством дверей, ведущих в каюты, расположенные по левому борту.
	]];
	way = {
		vroom("Каюта капитана", "leviathan_captains_cabin");
		vroom("Кают-компания", "leviathan_wardroom");
	};
	
};

leviathan_cargo_hold = room {
	nam = "leviathan_cargo_hold";
	disp = "Левиафан, грузовой отсек";
	leviathan = true;
	dsc = [[
		Вы находитесь в грузовом отсеке Левиафана
	]];
	way = {
		vroom("Кают-компания", "leviathan_wardroom");
	};
};

leviathan_wardroom = room {
	nam = "leviathan_wardroom";
	disp = "Левиафан, кают-компания";
	leviathan = true;
	dsc = [[
		Вы находитесь в кают-компании Левиафана. Просторная комната, в центре которой укреплен массивный металлический стол. 
		Из машинного отсека доносится гул двигателей. Яркий свет электрических ламп освещает помещение. 
	]];
	way = {
		vroom("Рубка", "leviathan_wheelhouse");
		vroom("Шлюз", "leviathan_airlock");
		vroom("Каюты", "leviathan_cabins");
		vroom("Грузовой отсек", "leviathan_cargo_hold");
		vroom("Машинный отсек", "leviathan_engines");
	};
	obj = {
		"phone_wardroom";
	};
};

leviathan_engines = room {
	nam = "leviathan_engines";
	disp = "Левиафан, машинное отделение";
	leviathan = true;
	dsc = [[
		Вы находитесь в машинном отделении Левиафана. Равномерный гул электрических двигателей сообщает о полной готовности субмарины. 
	]];
	way = {
		vroom("Кают-компания", "leviathan_wardroom");
	};
};

phone_cabin = obj {
	nam = "phone_cabin";
	disp = "Телефон";
	dsc = [[
		На столе установлен {телефонный аппарат} для связи в пределах субмарины. ^
	]];
	act = function(s)
		walkin(phone_dlg);
	end;
};

phone_wardroom = obj {
	nam = "phone_wardroom";
	disp = "Телефон";
	dsc = [[
		На столе, рядом с креслом командира установлен {телефонный аппарат} для связи в пределах субмарины. ^
	]];
	act = function(s)
		walkin(phone_dlg);
	end;
};

phone_dlg = dlg {
	nam = "phone_dlg";
	disp = "Телефон";
	hideinv = true;
	dsc = [[
		Вы снимаете трубку и можете вызвать кого-нибудь
	]];
	entered = function(s)
		poff("phaetlarr", "learr", "radcliffe", "wright");
		for i = 1, #pl.party do
			pon(pl.party[i]);
		end;
	end;
	phr = {
		{ tag = "phaetlarr", always = true, "Фаэтларр", code = [[walkin(phaetlarr_dlg)]]},
		{ tag = "learr", always = true, "Леарр", code = [[walkin(learr_dlg)]]},
		{ tag = "radcliffe", always = true, "Рэдклифф", code = [[walkin(radcliffe_dlg)]]},
		{ tag = "wright", always = true, "Райт", code = [[walkin(wright_dlg)]]},
		{ tag = "exit", always = true, "Положить трубку", code = [[back()]]}
	}
};

leviathan_wheelhouse = room {
	nam = "leviathan_wheelhouse";
	disp = "Левиафан, Рубка";
	dsc = function (s)
		local view = "";
		if (type(where(submarine_leviathan).view) == "function") then
			view = where(submarine_leviathan).view(where(submarine_leviathan));
		else
			view = where(submarine_leviathan).view;
		end;
	
		return [[
			Вы находитесь в рулевой рубке Левиафана. Три огромных иллюминатора дают превосходный обзор. Яркий свет электрических ламп освещает помещение.  
		]] .. (view);
	end;
	way = {
		vroom("Кают-компания", "leviathan_wardroom");
	};
	obj = {
		vway("handwheel", "Перед вами расположен {штурвал}. ^", 'leviathan_dlg') 
	};
};

leviathan_dlg = dlg {
	nam = "leviathan_dlg";
	disp = "Штурвал Левиафана";
	dsc = function()
		local view = "";
		if (type(where(submarine_leviathan).view) == "function") then
			view = where(submarine_leviathan).view(where(submarine_leviathan));
		else
			view = where(submarine_leviathan).view;
		end;
		
		return [[
			Вы находитесь в рубке Левиафана перед штурвалом. 
			Отсюда вы можете направиться куда-нибудь. 
			Яркий свет электрических ламп освещает помещение. ^
		]] .. (view);
	end;
	update_options = function()
		leviathan_dlg:poff(10,11,12,13,14);
		if (where(submarine_leviathan).navigatable) then 
			leviathan_dlg:poff(1,2,3,4,5);
			if (where(submarine_leviathan).south) then 
				pon(10);
			end;
			if (where(submarine_leviathan).north) then 
				pon(11);
			end;
			if (where(submarine_leviathan).east) then 
				pon(12);
			end;
			if (where(submarine_leviathan).west) then 
				pon(13);
			end;
			if (where(submarine_leviathan).gate) then 
				pon(14);
			end;
		else
			leviathan_dlg:pon(1, 2, 3, 4);
			leviathan_dlg:poff(5);
			if (where(submarine_leviathan) == atlantis_dock) then	
				leviathan_dlg:poff(1);
			end;
			if (where(submarine_leviathan) == navjiarr_settlement) then
				leviathan_dlg:poff(2);
			end;
			if (where(submarine_leviathan) == navjiarr_hostile_settlement) then
				leviathan_dlg:poff(3);
			end;
			if (where(submarine_leviathan) == first_city_entrance) then
				leviathan_dlg:poff(4);
				leviathan_dlg:pon(5);
			end;
		end;
	end;
	enter = function(s)
		s.update_options();
	end;
	phr = {
		{1, always = "true", "Атлантида", function()
			return "Вы прибыли в Атлантиду";
		end, function()
			move(submarine_leviathan, "atlantis_dock");
			leviathan_dlg:update_options();
		end},
		{2, always = "true", "Поселение Навьяр", function()
			return "Вы прибыли в Атлантиду";
		end, function()
			move(submarine_leviathan, "navjiarr_settlement");
			leviathan_dlg:update_options();
		end},
		{3, always = "true", "Враждебное поселение Навьяр", function()
			return "Вы прибыли в Атлантиду";
		end, function()
			move(submarine_leviathan, "navjiarr_hostile_settlement");
			leviathan_dlg:update_options();
		end},
		{4, always = "true", "Лсэрианотр, древний город Навьяр", function()
			return "Вы прибыли в Лсэрианотр";
		end, function()
			move(submarine_leviathan, "first_city_entrance");
			leviathan_dlg:update_options();
		end},
		{5, always = "true", "Вперед, в город", function()
			if (first_city_entrance.open) then
				return [[
					Движимый вашей рукой, Левиафан вплывает в ворота. Оказавшись среди светящихся стен древнего города, вы отключаете прожектор.
				]];
			else
				return [[
					Вы не рискуете протаранить ворота, простоявшие не одно тысячелетие.
				]];
			end;
		end,
		function()
			if (first_city_entrance.open) then
				move(submarine_leviathan, "first_city_outer_south");
				leviathan_dlg:update_options();
			end;
		end;
		},
		{10, always = "true", "На юг", "", function()
			move(submarine_leviathan, where(submarine_leviathan).south);
			leviathan_dlg:update_options();
			return where(submarine_leviathan).view;
		end;};
		{11, always = "true", "На север", "", function()
			move(submarine_leviathan, where(submarine_leviathan).north);
			leviathan_dlg:update_options();
			return where(submarine_leviathan).view;
		end;};
		{12, always = "true", "На восток", "", function()
			move(submarine_leviathan, where(submarine_leviathan).east);
			leviathan_dlg:update_options();
			return where(submarine_leviathan).view;
		end;};
		{13, always = "true", "На запад", "", function()
			move(submarine_leviathan, where(submarine_leviathan).west);
			leviathan_dlg:update_options();
			return where(submarine_leviathan).view;
		end;};
		{14, always = "true", "В ворота", "", function()
			move(submarine_leviathan, where(submarine_leviathan).gate);
			leviathan_dlg:update_options();
			return where(submarine_leviathan).view;
		end;};
		{255, always = "true", "Назад", "", function()
			back();
		end}
	};
};