Files @ f91bbceb7275
Branch filter:

Location: games/Awakening/dock2.lua

Silverwing
Disable weird following by Radcliffes
--[[
Игрок может попасть сюда только после диалога с Майклом.
Верфь заброшена, многие механизмы придется ремонтировать.
Здесь игрок найдет подводную лодку, которую нужно будет восстановить.
]]
dock_2 = room {
	nam = "dock_2";
	disp = "Док 2, вход";   
	dsc = [[Док огражден высоким металлическим забором, изрядно проржавевшим из-за отсутствия должного ухода. Ржавая табличка с надписью "Док 2, собственность Вестхейвен Трансоушен" висит над воротами, слегка поскрипывая под сильными порывами ветра. Пространство за забором заставлено старыми металлическими грузовыми контейнерами. Вдали виднеется кран, предназначенный для погрузки и разгрузки приходящих судов. ]];
	enter = function(s)
		move(char_coachman, here());
	end;
	way = {
		vroom("В док", "dock_inside"):disable();
	};
	obj = {
		"dock_gate"
	};
};

dock_gate = obj {
	nam = "dock_gate";
	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;
	used = function(s,o)
		if (s.open) then
			return false;
		end;
		if (o == item_toolbox) then
			s.open = true;
			path("В док"):enable();
			return [[Пользуясь ломиком, найденным в ящике, вы снимаете замок с ворот. С жутким скрипом вам удается приоткрыть их. Теперь вы можете войти внутрь. ]];
		else
			return false;
		end;
	end;
};

dock_inside = room {
	nam = "dock_inside";
	disp = "Док";
    dsc = [[На территории дока повсюду раскиданы обломки дерева, железа, какие-то мешки. Ржавые ворота в заборе застыли в приоткрытом состоянии. Вдалеке, у причала, стоит старый грузовой кран. До вас доносятся завывания ветра и скрип ржавого металла. ]];
	way = {
		vroom("На улицу", "dock_2");
		vroom("К причалу", "dock_mooring");
	};
	obj = {
		"dock_boxes"
	};
};

dock_boxes = obj {
    var {
        searched = 0;
    };
	nam = "dock_boxes";
	disp = "Ящики";
	dsc = [[Ровными рядами вокруг расположены старые грузовые {контейнеры}. Краска на большинстве из них повреждена настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. ]];
	act = function(s)
		if s.searched == 0 then
			s.searched = 1;
			put(item_pump_broken, pl);
			return [[В одном из ящиков вы находите неисправный ручной насос. ]];
        elseif s.searched == 1 then
            s.searched = 2;
            pl.money = pl.money + 5;
            return [[В одном из ящиков кто-то оставил монету в пять шиллингов. ]];
		end;
	end;
};

leviathan_entry = room {
	nam = "leviathan_entry";
	disp = "В люк";
	enter = function(s)
		if (dock_leviathan.pump_state == 1) then
			walk('leviathan_airlock');
		else
			return "Отсек заполнен водой. Вы не можете туда спуститься. ", false;
		end;
	end;
};

dock_mooring = room {
	nam = "dock_inside";
	disp = "Причал";
	dsc = [[У причала пусто, не считая нескольких кучек мусора: старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. ]];
	view = [[Левиафан находится в доке. ]];
	way = {
		vroom("К воротам", "dock_inside");
		vroom("К пульту управления краном", "dock_crane_control");
		leviathan_entry:disable();
	};
	obj = {
		"dock_leviathan",
		"dock_crane",
        "money_dock"      
	};
};

dock_leviathan = obj {
    var {
        submerged = true;
        pump_state = 0; -- 0 в отсеке вода; 1 в отсеке нет воды
        open = false;
    };
	nam = "dock_leviathan";
	disp = "Левиафан";
	dsc = function(s)
		if (s.submerged) then
			return "Под поверхностью воды виден какой-то большой металлический {объект}. ";
		else
			if (s.open) then
				return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен открытый {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 -- Левиафан". ]];
			else
				return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен наглухо задраенный {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 -- Левиафан". ]];
			end;
		end;
	end;
	act = function(s)
		if (s.submerged) then
			return "Какой-то большой объект. В мутной воде вы не можете понять, что это, но похоже на перевернутое судно. ";
		elseif (s.open) then
			--TODO
			s.open = false;
			leviathan_entry:disable();
			return "Вы задраиваете люк.";
		else
			--TODO
			s.open = true;
			leviathan_entry:enable();
			if (s.pump_state == 0) then
				return "Вы отдраиваете люк. Отсек внутри заполнен водой. ";
			else
				return "Вы отдраиваете люк. ";
			end;
		end;	
	end;
	used = function(s, o)
		if (o == item_pump) then
			dock_leviathan.pump_state = 1;
			remove(item_pump, pl);
			return [[Вы откачиваете воду из отсека и теперь можете спуститься в него. ]];
		end;
	end;
};

dock_crane = obj {
    var {
        state = 0;
        broken = true;
    };
	nam = "dock_crane";
	disp = "Подъемник";
	dsc = function(s)
		if (s.state == 0) then
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
		elseif (s.state == 1) then
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно -- они почти полностью погружены в грязную воду. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
		elseif (s.state == 2) then
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
		else
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. ";
		end;
	end;
	act = function(s)
		if (s.state == 0) then
			return "Тросы слишком высоко";
		elseif (s.state == 1) then
			s.state = 2;
			return "Вы подцепляете тросы к скрывающемуся под водой предмету. ";
		elseif (s.state == 2) then
			s.state = 1;
			return "Вы отцепляете тросы от скрывающегося под водой предмета. ";
		elseif (s.state == 3) then
			return "Вы больше ничего не можете сделать здесь";
		end;
	end;
};

dock_crane_control = room {
	nam = "dock_crane_control";
	disp = "Панель управления краном";
	dsc = [[Вы стоите на небольшой огороженной площадке перед панелью управления подъемником. На ней расположено два рычага. ]];
	obj = {
		"crane_lever_vertical",
		"crane_lever_rail",
		"crane_service_access_panel"
	};
	way = {
		vroom("Назад", "dock_mooring");
	};
};

crane_lever_vertical = obj {
	nam = "crane_lever_vertical";
	dsc = "{Один из них} установлен вертикально и имеет несколько промежуточных положений. Сбоку от него нарисованы стрелки вверх и вниз. ";
	act = function(s)
		if (dock_crane.broken) then
			return "Вы двигаете рычаг, но ничего не происходит";
		else
			if (dock_crane.state == 0) then
				dock_crane.state = 1;
				return [[Вы сдвигаете рычаг в крайнее нижнее положение. С громким скрежетом тросы опускаются. ]];
			elseif (dock_crane.state == 3) then
				dock_crane.state = 2;
				dock_leviathan.submerged = true;
				return [[Вы сдвигаете рычаг в крайнее нижнее положение. С громким скрежетом тросы опускаются и поднятый предмет скрывается под водой. ]];
			elseif (dock_crane.state == 2) then
				dock_crane.state = 3
				dock_leviathan.submerged = false;
				leviathan_discovered = true;
				return [[Вы сдвигаете рычаг в крайнее верхнее положение. С громким скрежетом тросы поднимаются вместе с подцепленным к ним предметом. ]];
			elseif (dock_crane.state == 1) then
				dock_crane.state = 0;
				return [[Вы сдвигаете рычаг в крайнее верхнее положение. С громким скрежетом тросы поднимаются. ]];
			end;
		end;
	end;
};

crane_lever_rail = obj {
	nam = "crane_level_rail";
	dsc = "{Второй рычаг} установлен горизотельно и имеет три положения. Над ним нарисованы стрелки влево и вправо.";
	act = "Рычаг не поддается. ";
};

crane_service_access_panel = obj {
	nam = "crane_service_access_panel";
	state = 0;
	dsc = function(s)
		if (s.state == 0) then
			return [[Под панелью управления прикреплена на винтах металлическая {пластина}, закрывающая механизм. ]];
		else
			return [[Под панелью управления расположен {механизм} управления. Металлическая пластина, закрывавшая его, лежит рядом. ]];
		end;
	end;
	act = function(s)
		if (s.state == 0) then
			return [[
				Вы не сможете открыть это руками. 
			]];
		else
			if (dock_crane.broken) then
				return [[Вы заглядываете внутрь механизма. Часть шестерней сильно изношена. ]];
			else
				return [[Вы заглядываете внутрь механизма. Все шестерни исправны и находятся на своих местах. ]];
			end;
		end;
	end;
	used = function(s,o)
		if (o == item_toolbox) then
			if (s.state == 0) then
				s.state = 1;
				return [[При помощи отвертки из ящика вы снимаете защитную панель, открывая доступ к внутренностям механизма. ]];
			else
				s.state = 0;
				return [[Вы возвращаете панель на место и закрепляете ее винтами. ]];
			end;
		else
			return false;
		end;
	end;
};