Changeset - c5df9d0afc69
[Not reviewed]
default
0 2 0
Silverwing - 6 years ago 2019-01-27 13:06:03

remove unavailable in preview notices
2 files changed with 2 insertions and 11 deletions:
0 comments (0 inline, 0 general)
atlantis_iyhehevjiarr.lua
Show inline comments
 
atl_lev_first_sail = room {
 
	nam = "Левиафан";
 
	hideinv = true;
 
	dsc = [[
 
		Вы поднимаетесь на борт Левиафана и ждете, когда соберется команда. Меньше, чем через пятнадцать минут все поднимаются на борт и вы можете отправляться. 
 
	]];
 
	obj = {
 
		vway("Продолжить", "{Продолжить}", "leviathan_captains_cabin");
 
	};
 
};
 
 
char_aikerjarr_lev = obj {
 
	var {
 
		follow = true;
 
	};
 
	nam = "aikerjarr";
 
	disp = "Аикерьярр";
 
	dsc = function(s)
 
		if (stead.nameof(where(s)) == s.home) then
 
			return [[{Аикерьярр} стоит перед иллюминатором. ]];
 
		else
 
			return [[{Аикерьярр} смотрит на вас. ]];
 
		end;
 
	end;
 
	home = "leviathan_wheelhouse";
 
	accompany = function(s, value)
 
		s.follow = value;
 
		if (value) then
 
			lifeon(s);
 
		else
 
			move(s, s.home, where(s));
 
			lifeoff(s);
 
		end;
 
	end;
 
	life = function(s)
 
		if (where(pl).leviathan) then
 
			if (stead.nameof(where(s)) ~= s.home) then
 
				move(s, s.home, where(s));
 
			end;
 
		else
 
			move(s, where(pl), where(s));
 
		end;
 
	end;
 
	act = function(s)
 
		if (not where(pl).leviathan) then
 
			return [[Вы не можете говорить с ним сейчас.]];
 
		end;
 
		if (atl_iyh_shockfish_dead) then
 
			return [[Аикерьярр молчит. ]];
 
		else
 
			return [[Аикерьярр недовольно рычит: "Ты-хевьяр что-нужно-делай". ]];
 
		end;
 
	end;
 
};
 
 
iyh_far_from_entrance_foot = room {
 
	nam = "Океан";
 
	handwheel_room = "iyh_far_from_entrance";
 
	underwater = true;
 
	no_exit = [[
 
		Нет смысла покидать Левиафан здесь. 
 
	]];
 
	dsc = [[
 
		Вы видите вдалеке высокую скалу, простирающуюся на многие километры в обе стороны. Прямо перед вами, в скале вы видите массивные каменные двери храма, застывшие в открытом состоянии. Над дверьми вы видите небольшой козырек, поддерживаемый массивными колоннами. 
 
	]];
 
	view = [[Через иллюминаторы вы видите вдалеке высокую скалу, простирающуюся на многие километры в обе стороны. Прямо перед вами, в скале вы видите массивные каменные двери храма, застывшие в открытом состоянии. Над дверьми вы видите небольшой козырек, поддерживаемый массивными колоннами. ]];
 
	way = {
 
        kh_vroom("В Левиафан", "leviathan_airlock");
 
	};
 
};
 
 
iyh_far_from_entrance = dlg {
 
	var {
 
		visited = false;
 
	};
 
	no_exit = [[
 
		Нет смысла покидать Левиафан здесь. 
 
	]];
 
	nam = "Левиафан, рубка";
 
	hideinv = true;
 
    leviathan = true;
 
	entered = function(s)
 
		if (not s.visited) then
 
            atl_iyh_state = 7;
 
			return [[Вы прибываете на место. ]];
 
		end;
 
	end;
 
	dsc = function(s)
 
		pr [[Через иллюминаторы вы видите высокую скалу, простирающуюся на многие километры в обе стороны. В скале вырезаны массивные каменные двери храма, застывшие в открытом состоянии. Над дверьми вы видите небольшой козырек, поддерживаемый массивными колоннами. ]];
 
		
 
		if (not s.visited) then
 
			s.visited = true;
 
			if (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then
 
				return [[
 
					Аиверьярр молча рассматривает храм через иллюминаторы. ]];
 
			elseif (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
				return [[Леарр поднимается в рубку. При виде храма, она восклицает: "Мы должны-попасть туда!" ]];
 
			end;
 
		end;
 
	end;
 
	phr = {
 
		{tag="advance", always=true, "[Подойти ближе]", [[Послушные вашей воле, двигатели Левиафана приводят субмарину в движение и вы плавно приближаетесь ко входу в храм. ]], code [[
 
            move(submarine_leviathan, "iyh_near_temple_foot");
 
            walk('iyh_near_temple');
 
        ]]};
 
		{tag="wait", "[Ждать]", [[Вы решаете подождать до наступления ночи и это правдывает себя. Как только последние лучи солнца перестают пробиваться сквозь толщу воды, скат выбирается из своего логова и отправляется на охоту. ]], code [[ 
 
			lifeon(iyh_far_from_entrance);
 
			atl_iyh_shockfish_away = 30;
 
		]]};
 
		{tag="light_temple", always=true, "[Осветить вход в храм]", function(s)
 
            if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then
 
                iyh_fight.distance = 1000; walk('iyh_fight');
 
                return [[Мощный луч света падает на вход в храм. Вы видите внутри какое-то движение и изнутри выплывает огромный скат. ]];
 
            else
 
                return [[Мощный луч света падает на вход в храм. Ничего не происходит. ]];
 
            end;
 
        end};
 
		{tag="light_wall_r", "[Осветить скалы справа от храма]", [[Мощный луч света освещает скалы по правую сторону от храма. Он плавно скользит по поверхности скалы, пока вы не натыкаетесь на то, что отсюда кажется вам каким-то ущельем. Возможно следует изучить его? ]], code [[ 
 
			iyh_near_temple:pon('ravine');
 
			pon('ravine'); 
 
		]]};
 
		{tag="light_wall_l", "[Осветить скалы слева от храма]", [[Мощный луч света освещает скалы по левую сторону от храма. Он плавно скользит по поверхности скалы, однако так и не натыкается ни на что интересное. ]]};
 
		{tag="ravine", false, always=true, "[Подойти ко входу в ущелье]", [[Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. ]], code [[ 
 
            move(submarine_leviathan, "iyh_ravine_entry_foot");
 
            walk('iyh_ravine_entry'); 
 
        ]]};
 
		{tag="away", always=true, "[Отойти от штурвала]", code = [[
 
			walk('leviathan_wheelhouse');
 
		]]};
 
		{tag="return", always=true, "[Покинуть храм]", code = [[
 
			walk('leviathan_dlg');
 
		]]};
 
	};
 
	life = function(s)
 
		if (not atl_iyh_shockfish_left) then
 
			atl_iyh_shockfish_away = atl_iyh_shockfish_away - 1;
 
			if (atl_iyh_shockfish_away == 0) then
 
				if (where(pl) == iyh_temple_main_hall_entry or where(pl) == iyh_temple_main_hall_middle or where(pl) == iyh_temple_main_hall_end or where(pl) == iyh_near_temple_foot) then
 
					walk("game_over_shockfish");
 
				elseif (where(pl).leviathan == true and (where(submarine_leviathan) == "iyh_near_temple_foot")) then
 
					pr [[Скат возвращается и, заметив Левиафан, тут же нападает на субмарину. Вы поднимаетесь на мостик, чтобы принять управление. ]];
 
					walk("iyh_fight");
 
				end;
 
			elseif (atl_iyh_shockfish_away < 5) then
 
				pr "Приближается рассвет. Скат скоро вернется. ";
 
			end;
 
		end;
 
	end;
 
};
 
 
iyh_fight = room {
 
	var {
 
		temple_distance = 0;
 
		distance = 0;
 
		shockfish_health = 100;
 
		timing = 0;
 
	};
 
	nam = "Штурвал Левиафана";
 
	entered = function(s)
 
		s.temple_distance = s.distance;
 
		s.shockfish_health = 100;
 
	end;
 
	hideinv = true;
 
	forcedsc = true;
 
	leviathan = true;
 
	dsc = function(s)
 
		pr("Вы находитесь от ската на расстоянии около "..tostring(s.distance).." метров. ");
 
		pr("Храм находится примерно на расстоянии " .. tostring(s.temple_distance) .. " метров. ");
 
		pr("На приборной панели вы видите, что ");
 
		iyh_fight_torpedo:enable();
 
		iyh_fight_recharge:disable();
 
		if (submarine_leviathan.torpedoes == 2) then
 
			pr "оба торпедных аппапата заряжены и готовы к бою. ";
 
		elseif (submarine_leviathan.torpedoes == 1) then
 
			pr "только один из торпедных аппаратов заряжен. ";
 
		else
 
			iyh_fight_recharge:enable();
 
			iyh_fight_torpedo:disable();
 
			pr "у вас не осталось заряженных торпед. ";
 
		end;
 
		if (submarine_leviathan.electric_integrity < 30) then
 
			pr "Свет в рубке периодически моргает, чувствуется запах горелой проводки, часть проводов искрит. ";
 
		elseif (submarine_leviathan.electric_integrity < 70) then	
 
			pr "Свет в рубке периодически моргает. ";
 
		end;
 
		if (submarine_leviathan.hull_integrity < 30) then
 
			pr "Обшивка Левиафана сильно повреждена. ";
 
		elseif (submarine_leviathan.hull_integrity < 70) then	
 
			pr "Обшивка Левиафана повреждена. ";
 
		end;
 
	end;
 
	maketurn = function(s)
 
		if (s.distance > 1000) then
 
			if (s.shockfish_health < 20 or atl_iyh_entrance_destroyed) then
 
				pr "Скат уплывает и вы остаетесь одни. ";
 
				atl_iyh_shockfish_left = true;
 
				walk("iyh_far_from_entrance");
 
			else
 
				pr "Вы удаляетесь достаточно далеко и скат возвращается к себе в жилище. ";
 
				walk("iyh_far_from_entrance");
 
			end;
 
		end;
 
		if (s.shockfish_health < 20 or (atl_iyh_entrance_destroyed and s.shockfish_health < 70)) then
 
			if (s.distance < 0) then
 
				s.distance = s.distance - 75;
 
			else
 
				s.distance = s.distance + 75;
 
			end;
 
			pr "Скат пытается сбежать от вас. ";
 
		else
 
			if (math.abs(s.distance) <= 75) then
 
				if (math.abs(s.distance) > 0) then
 
					s.distance = 0;
 
					pr "Скат приближается к вам. ";
 
				end;
 
				
 
				if (s.timing <= 0) then
 
					s.timing = 5;
 
					pr "Скат атакует Левиафан электрическим разрядом. ";
 
					submarine_leviathan.electric_integrity = submarine_leviathan.electric_integrity - 10;
 
					if (submarine_leviathan.electric_integrity > 50) then
 
						pr "Атака не оказывает видимого эффекта на субмарину. ";
 
					elseif (submarine_leviathan.electric_integrity > 0) then
 
						pr "Свет моргает, проводка искрит. ";
 
						if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then
 
							pr "По телефону вы слышите встревоженный голос Райта: \"Мы так долго не протянем\". ";
 
						elseif (ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then
 
							pr "По телефону вы слышите встревоженный голос Рэдклиффа: \"Мы так долго не протянем\". ";
 
						end;
 
					else
 
						walk('game_over_powerless');
 
					end;
 
				else
 
					s.timing = s.timing - 1;
 
					pr "Скат пытается пробить обшивку Левиафана хвостовым шипом. ";
 
					submarine_leviathan.hull_integrity = submarine_leviathan.hull_integrity - 5;
 
					if (submarine_leviathan.hull_integrity > 50) then
 
						pr ", но не наосит ощитимого ущерба. ";
 
					elseif (submarine_leviathan.hull_integrity > 0) then
 
						pr ". Сильный удар повреждает внешнюю обшивку, в резервуары проникает вода. ";
 
					else
 
						walk('game_over_sunk');
 
					end;
 
				end;
 
			else
 
				pr "Скат приближается к вам. ";
 
				if (s.distance < 0) then
 
				s.distance = s.distance + 75;
 
			else
 
				s.distance = s.distance - 75;
 
			end;
 
			end;
 
		end;
 
	end;
 
	obj = {
 
		"iyh_fight_torpedo",
 
		"iyh_fight_sonic",
 
		"iyh_fight_recharge",
 
		"iyh_advance_full",
 
		"iyh_advance_half",
 
		"iyh_advance_quarter",
 
		"iyh_retreat_full",
 
		"iyh_retreat_half",
 
		"iyh_retreat_quarter"
 
	};
 
};
 
 
iyh_fight_torpedo_temple = obj {
 
	nam = "iyh_fight_torpedo_temple";
 
	dsc = "{Выстрелить торпедой в храм}^";
 
	act = function(s)
 
		if (math.abs(iyh_fight.temple_distance) < 50) then
 
			return [[Цель слишком близко. ]];
 
		elseif (math.abs(iyh_fight.temple_distance) > 200) then
 
			return [[Цель слишком далеко. ]];
 
		else
 
			atl_iyh_entrance_destroyed = true;
 
            
 
			pr [[Торпеда попадает в аккурат над храмом и вход оказывается завален тяжелыми глыбами. ]];
 
            if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
                pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь?!"^Она с неприязнью смотрит на вас и удаляется к себе в каюту. ]];
 
                rel_learr = rel_learr - 1;
 
                char_learr.home = "leviathan_cabin_3";
 
                leviathan_cabin_3.lock = true;
 
            elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then
 
                pr [[Аикерьярр отворачивается от иллюминатора и со злобой смотрит на вас: "Ты за-это-ответишь he'rr". ]];
 
                atl_rep_iraa = atl_rep_iraa - 1;
 
                atl_rep_dyp = atl_rep_dyp - 1;
 
            end;
 
		end;
 
	end;
 
};
 
 
iyh_fight_torpedo = obj {
 
	nam = "iyh_fight_torpedo";
 
	dsc = "{Выстрелить торпедой в ската}^";
 
	act = function(s)
 
		if (math.abs(iyh_fight.distance) < 50) then
 
			return [[Цель слишком близко. ]];
 
		elseif (math.abs(iyh_fight.distance) > 200) then
 
			return [[Цель слишком далеко. ]];
 
		else
 
			if (iyh_fight.shockfish_health > 70) then
 
				local meters = 25 * rnd(3) + 25;
 
				iyh_fight.shockfish_health = iyh_fight.shockfish_health - 70;
 
				if (iyh_fight.distance >= 0) then
 
					iyh_fight.distance = iyh_fight.distance + meters;
 
				else
 
					iyh_fight.distance = iyh_fight.distance - meters;
 
				end;
 
				pr("Вы стреляете торпедой в ската. Торпеда достигает цели. Ската отбрасывает назад на ".. tostring(meters) .. " метров. ");
 
			else
 
				iyh_fight.shockfish_health = 0;
 
				atl_iyh_shockfish_dead = true;
 
				pr "Вы стреляете торпедой в ската. Торпеда взрывается достигнув цели и разрывает ската. Вода краснеет от крови, а вы теперь можете безопасно приблизиться к храму. ";
 
				
 
				if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
					pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь ненавистный-a'rr?!"^Она с неприязнью смотрит на вас и удаляется к себе в каюту. ]];
 
                    rel_learr = -99;
 
                    atl_rep_iraa = atl_rep_iraa - 1;
 
                    atl_rep_dyp = atl_rep_dyp - 1;
 
                    char_learr.home = "leviathan_cabin_3";
 
                    leviathan_cabin_3.lock = true;
 
				elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then
 
					pr [[Аикерьярр отворачивается от иллюминатора и со злобой смотрит на вас: "Ты за-это-ответишь he'rr". ]];
 
				end;
 
				walk("preview_unavailable_rayfish");
 
				--[[if (math.abs(iyh_fight.temple_distance) < 100) then
 
				if (math.abs(iyh_fight.temple_distance) < 100) then
 
					walk("iyh_near_temple");
 
				else
 
					walk("iyh_far_from_entrance");
 
				end;
 
				
 
				return;]]
 
				return;
 
			end;
 
			return iyh_fight:maketurn();
 
		end;
 
	end;
 
};
 
 
iyh_fight_sonic = obj {
 
	nam = "iyh_fight_sonic";
 
	dsc = "{Выстрелить из звуковой пушки}^";
 
	act = function(s)
 
		if (math.abs(iyh_fight.distance) > 200) then
 
			return [[
 
				Цель слишком далеко
 
			]];
 
		else
 
			if (iyh_fight.shockfish_health > 50) then
 
				iyh_fight.shockfish_health = iyh_fight.shockfish_health - 10;
 
				pr "Вы стреляете в ската из звуковой пушки. Это лишь слегка ранит его. ";
 
			else
 
				pr "Вы стреляете в ската из звуковой пушки. Это не наносит ему серьезного ущерба. ";
 
			end;
 
			return iyh_fight:maketurn();
 
		end;
 
	end;
 
};
 
 
iyh_fight_recharge = obj {
 
	nam = "iyh_fight_torpedo";
 
	dsc = "{Перезарядить торпеды}^";
 
	act = function(s)
 
		--Если в партии нет никого кроме Леарр/Аикерьярра, то игрок перезаряжает торопеды сам, иначе -- отдает приказ
 
		if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0 or ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then
 
			pr "Вы отдаете по телефону приказ перезарядить торпедные аппараты. ";
 
		else
 
			pr "Вы спускаетесь вниз, чтобы перезарядить торпедные аппараты. ";
 
			iyh_fight:maketurn();
 
			iyh_fight:maketurn();
 
			pr "Вы возвращаетесь в рубку, чтобы продолжить бой. "
 
		end;
 
	end;
 
};
 
 
iyh_advance_full = obj {
 
	nam = "iyh_advance_full";
 
	dsc = "{Полный вперед}^";
 
	act = function(s)
 
		pr "Вы включаете двигатели на полную мощность. ";
 
		if (iyh_fight.distance >= 0) then
 
			iyh_fight.distance = iyh_fight.distance - 100;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance - 100;
 
			if (iyh_fight.distance < 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		else
 
			iyh_fight.distance = iyh_fight.distance + 100;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance + 100;
 
			if (iyh_fight.distance >= 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		end;
 
		iyh_fight:maketurn();
 
	end;
 
};
 
 
iyh_advance_half = obj {
 
	nam = "iyh_advance_half";
 
	dsc = "{1/2 вперед}^";
 
	act = function(s)
 
		pr "Вы включаете двигатели на половину мощности. ";
 
		if (iyh_fight.distance >= 0) then
 
			iyh_fight.distance = iyh_fight.distance - 50;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance - 50;
 
			if (iyh_fight.distance < 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		else
 
			iyh_fight.distance = iyh_fight.distance + 50;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance + 50;
 
			if (iyh_fight.distance >= 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		end;
 
		iyh_fight:maketurn();
 
	end;
 
};
 
 
iyh_advance_quarter = obj {
 
	nam = "iyh_advance_quarter";
 
	dsc = "{1/4 вперед}^";
 
	act = function(s)
 
		pr "Вы включаете двигатели на четверть мощности. ";
 
		if (iyh_fight.distance >= 0) then
 
			iyh_fight.distance = iyh_fight.distance - 25;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance - 25;
 
			if (iyh_fight.distance < 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		else
 
			iyh_fight.distance = iyh_fight.distance + 25;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance + 25;
 
			if (iyh_fight.distance >= 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		end;
 
		iyh_fight:maketurn();
 
	end;
 
};
 
 
iyh_retreat_full = obj {
 
	nam = "iyh_retreat_full";
 
	dsc = "{Полный назад}^";
 
	act = function(s)
 
		pr "Вы включаете двигатели на полную мощность. ";
 
		if (iyh_fight.distance >= 0) then
 
			iyh_fight.distance = iyh_fight.distance + 100;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance + 100;
 
			if (iyh_fight.distance < 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		else
 
			iyh_fight.distance = iyh_fight.distance - 100;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance - 100;
 
			if (iyh_fight.distance >= 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		end;
 
		iyh_fight:maketurn();
 
	end;
 
};
 
 
iyh_retreat_half = obj {
 
	nam = "iyh_retreat_half";
 
	dsc = "{1/2 назад}^";
 
	act = function(s)
 
		pr "Вы включаете двигатели на половину мощности. ";
 
		if (iyh_fight.distance >= 0) then
 
			iyh_fight.distance = iyh_fight.distance + 50;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance + 50;
 
			if (iyh_fight.distance < 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		else
 
			iyh_fight.distance = iyh_fight.distance - 50;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance - 50;
 
			if (iyh_fight.distance >= 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		end;
 
		iyh_fight:maketurn();
 
	end;
 
};
 
 
iyh_retreat_quarter = obj {
 
	nam = "iyh_retreat_quarter";
 
	dsc = "{1/4 назад}^";
 
	act = function(s)
 
		pr "Вы включаете двигатели на четверть мощности. ";
 
		if (iyh_fight.distance >= 0) then
 
			iyh_fight.distance = iyh_fight.distance + 25;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance + 25;
 
			if (iyh_fight.distance < 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		else
 
			iyh_fight.distance = iyh_fight.distance - 25;
 
			iyh_fight.temple_distance = iyh_fight.temple_distance - 25;
 
			if (iyh_fight.distance >= 0) then
 
				pr "Вы проплываете мимо противника и разворачиваете субмарину. "
 
			end;
 
		end;
 
		iyh_fight:maketurn();
 
	end;
 
};
 
 
iyh_ravine_entry = room {
 
	nam = "Штурвал Левиафана";
 
	no_exit = [[Нет смысла покидать Левиафан здесь. ]];
 
	dsc = [[Левиафан находится у входа в ущелье. Вдалеке по левому борту, на юго-западе, вы видите вход в навьярский храм. ]];
 
	hideinv = true;
 
    leviathan = true;
 
	way = {
 
		kh_vroom("[Отойти от штурвала]", function(s)
 
			return "leviathan_wheelhouse";
 
		end);
 
		kh_vroom("[Направить Левиафан в ущелье]", function(s)
 
			iyh_labyrinth.position = 1;
 
			iyh_labyrinth.direction = 1;
 
			return "iyh_labyrinth";
 
		end);
 
		kh_vroom("[Подвести Левиафан ко входу в храм]", function(s)
 
            move(submarine_leviathan, "iyh_near_temple_foot");
 
            return "iyh_near_temple";
 
        end);
 
		kh_vroom("[Отвести Левиафан назад]", function(s)
 
            move(submarine_leviathan, "iyh_far_from_entrance_foot");
 
            return "iyh_far_from_entrance";
 
        end);
 
	};
 
    entered = function(s)
 
        move(submarine_leviathan, iyh_ravine_entry_foot);
 
    end;   
 
};
 
 
iyh_ravine_entry_foot = room {
 
    nam = "Ущелье";
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    view = [[Левиафан находится у входа в ущелье. Вдалеке по левому борту, на юго-западе, вы видите вход в навьярский храм. ]];
 
};
 
 
--[[
 
	Описание структуры лабиринта. Каждый узел описан в двух направлениях
 
	1 - прямое
 
	2 - обратное
 
	направления обозначены как 
 
	l - налево
 
	r - направо
 
	f - прямо
 
	выход описывается одной строкой, невыходы описываются парой "узел+направление"
 
]]
 
iyh_labyrinth_template = {
 
	[1]= {[1]={l={32, 1}, r={2, 1}}, 			[2]={f="iyh_ravine_entry"}};
 
	[2]= {[1]={f={3, 1}}, 						[2]={f={1,2}}};
 
	[3]= {[1]={l={5, 1}, f={4,1}},				[2]={f={2,2}}};
 
	[4]= {[1]={}, 								[2]={f={3,2}}};
 
	[5]= {[1]={l={37, 1}, f={6,1} },			[2]={f={3,2}}};
 
	[6]= {[1]={l={33, 1}, r={7,1}},  			[2]={f={5,2}}};
 
	[7]= {[1]={l={12,1}, f={11,1}, r={8,1}},	[2]={f={6,2}}};
 
	[8]= {[1]={l={10,1}, r={9,1}}, 				[2]={f={7,2}}};
 
	[9]= {[1]={}, 								[2]={f={8,2}}};
 
	[10]={[1]={}, 								[2]={f={8,2}, r={11,2}}};
 
	[11]={[1]={f={10,1}}, 						[2]={f={7,2}}};
 
	[12]={[1]={l={14,1}, f={13,1}}, 			[2]={f={7,2}}};
 
	[13]={[1]={}, 								[2]={f={12,2}}};
 
	[14]={[1]={f={15,1}, l={20,1}}, 			[2]={f={12,2}}};
 
	[15]={[1]={l={17,1}, r={16,1}}, 			[2]={f={14,2}}};
 
	[16]={[1]={}, 								[2]={f={15,2}}};
 
	[17]={[1]={l={19,1}, r={18,1}}, 			[2]={f={15,2}}};
 
	[18]={[1]={}, 								[2]={f={17,2}}};
 
	[19]={[1]={}, 								[2]={f={17,2}}};
 
	[20]={[1]={l={22,1}, f={21,1}}, 			[2]={f={14,2}}};
 
	[21]={[1]={}, 								[2]={f={20,2}}};
 
	[22]={[1]={l={25,1}, r={23,1}}, 			[2]={f={20,2}}};
 
	[23]={[1]={l="iyh_rear_entrance", r={24,1}},[2]={f={22,2}}};
 
	[24]={[1]={}, 								[2]={f={23,2}}};
 
	[25]={[1]={l={27,1},r={26,1}}, 				[2]={f={22,2}}};
 
	[26]={[1]={}, 								[2]={f={25,2}}};
 
	[27]={[1]={l={30,2}, f={29,1}, r={28,1}}, 	[2]={f={25,2}}};
 
	[28]={[1]={}, 								[2]={f={27,2}}};
 
	[29]={[1]={}, 								[2]={f={27,2}}};
 
	[30]={[1]={l={27,2}, r={36,1}}, 			[2]={f={31,2}}};
 
	[31]={[1]={l={30,1}, r={35,1}}, 			[2]={f={32,2}}};
 
	[32]={[1]={l={31,1}, r={34,1}}, 			[2]={f={1,2}}};
 
	[33]={[1]={}, 								[2]={l={6,2}, r={37,2}}};
 
	[34]={[1]={}, 								[2]={f={32,2}}};
 
	[35]={[1]={}, 								[2]={f={31,2}}};
 
	[36]={[1]={}, 								[2]={f={30,2}}};
 
	[37]={[1]={f={33,1}}, 						[2]={f={5,2}}};
 
};
 
 
iyh_labyrinth = room {
 
	var {
 
		position = 1;
 
		direction = 1;
 
	};
 
	no_exit = [[Нет смысла покидать Левиафан здесь. ]];
 
	nam = "Штурвал Левиафана";
 
    leviathan = true;
 
    forcedsc = true;
 
    entered = function(s)
 
        s:update();
 
    end;   
 
	dsc = function(s)
 
		pr [[Вы находитесь в глубоком и узком ущелье. ]];
 
		if (iyh_labyrinth_template[s.position][s.direction]["f"]) then    
 
			pr [[Ущелье продолжается вперед. ]];
 
		end;
 
		if (iyh_labyrinth_template[s.position][s.direction]["l"] and iyh_labyrinth_template[s.position][s.direction]["r"]) then
 
			pr [[Влево и вправо уходят ответвления. ]];
 
		elseif (iyh_labyrinth_template[s.position][s.direction]["l"]) then
 
			pr [[Влево уходит ответвление. ]];
 
		elseif (iyh_labyrinth_template[s.position][s.direction]["r"]) then
 
			pr [[Вправо уходит ответвление. ]];
 
		elseif (not iyh_labyrinth_template[s.position][s.direction]["f"]) then
 
			pr [[Дальше пути нет. ]];
 
		end;
 
	end;
 
	update = function(s)
 
        iyh_lab_forward:disable();
 
        iyh_lab_left:disable();
 
        iyh_lab_right:disable();
 
        if (iyh_labyrinth_template[s.position][s.direction]["f"]) then    
 
            iyh_lab_forward:enable();
 
        end;
 
        if (iyh_labyrinth_template[s.position][s.direction]["l"]) then    
 
            iyh_lab_left:enable();
 
        end;
 
        if (iyh_labyrinth_template[s.position][s.direction]["r"]) then    
 
            iyh_lab_right:enable();
 
        end;
 
	end;
 
	obj = {
 
        "iyh_lab_left",
 
		"iyh_lab_forward",
 
		"iyh_lab_right",
 
		"iyh_lab_turn"
 
	};
 
};
 
 
iyh_lab_forward = obj {
 
	nam = "iyh_lab_forward";
 
	dsc = "{Вперед}^";
 
	act = function(s)
 
		pr [[Вы продолжаете движение. ]];
 
		local p = iyh_labyrinth.position;
 
		local d = iyh_labyrinth.direction;
 
		
 
		if (type(iyh_labyrinth_template[p][d]["f"]) == 'string') then
 
			walk(iyh_labyrinth_template[p][d]["f"]);
 
		else
 
			iyh_labyrinth.position = iyh_labyrinth_template[p][d]["f"][1];
 
			iyh_labyrinth.direction = iyh_labyrinth_template[p][d]["f"][2];
 
		end;
 
		
 
		iyh_labyrinth:update();
 
	end;
 
};
 
 
iyh_lab_left = obj {
 
	nam = "iyh_lab_left";
 
	dsc = "{Налево}^";
 
	act = function(s)
 
		pr [[Вы сворачиваете налево. ]];
 
		local p = iyh_labyrinth.position;
 
		local d = iyh_labyrinth.direction;
 
		
 
		if (type(iyh_labyrinth_template[p][d]["l"]) == 'string') then
 
			walk(iyh_labyrinth_template[p][d]["l"]);
 
		else
 
			iyh_labyrinth.position = iyh_labyrinth_template[p][d]["l"][1];
 
			iyh_labyrinth.direction = iyh_labyrinth_template[p][d]["l"][2];
 
		end;
 
		
 
		iyh_labyrinth:update();
 
	end;
 
};
 
 
iyh_lab_right = obj {
 
	nam = "iyh_lab_right";
 
	dsc = "{Направо}^";
 
	act = function(s)
 
		pr [[Вы сворачиваете направо. ]];
 
		local p = iyh_labyrinth.position;
 
		local d = iyh_labyrinth.direction;
 
		
 
		if (type(iyh_labyrinth_template[p][d]["r"]) == 'string') then
 
			walk(iyh_labyrinth_template[p][d]["r"]);
 
		else
 
			iyh_labyrinth.position = iyh_labyrinth_template[p][d]["r"][1];
 
			iyh_labyrinth.direction = iyh_labyrinth_template[p][d]["r"][2];
 
		end;
 
		
 
		iyh_labyrinth:update();
 
	end;
 
};
 
 
iyh_lab_turn = obj {
 
	nam = "iyh_lab_turn";
 
	dsc = "{Развернуться}^";
 
	act = function(s)
 
		pr [[Вы разворачиваете субмарину. ]];
 
		if (iyh_labyrinth.direction == 1) then
 
			iyh_labyrinth.direction = 2;
 
		else
 
			iyh_labyrinth.direction = 1;
 
		end;
 
		
 
		iyh_labyrinth:update();
 
	end;
 
};
 
 
iyh_rear_entrance = room {
 
	nam = "Левиафан";
startup.lua
Show inline comments
 
global {
 
    warehouse18_found = false;
 
    warehouse32_found = false;
 
    warehouse32_visited = false;
 
    dock_found = false;
 
    leviathan_discovered = false;
 

	
 
    atlantis_found = false;
 
    temple_found = false;
 

	
 
    iraaphaanotrr_found = false;
 
    iraaphaanotrr_temple_found = false;
 

	
 
    dypatreanotrr_found = false;
 
    dypatreanotrr_night_found = false;
 
    dypatreanotrr_temple_found = false;
 

	
 
    venaedanotrr_found = false;
 
    venaedanotrr_ravine_found = false;
 
    venaedanotrr_temple_found = false;
 

	
 
    nleyyslanotrr_found = false;
 

	
 
    deep_temple_found = false;
 
    lseryanotrr_found = false;
 

	
 
    rel_phaetlarr = 0;
 
    rel_walter = 0;
 
    rel_learr = 0;
 
    rel_anna = 0;
 
    rel_jack = 0;
 
    language_known = false;
 
    cart_known = false;
 
    
 
    dt_code = {};
 
    dt_buttons = {};
 

	
 
    raybox_task = false;
 
    raybox_task_finished = false;
 

	
 
    --Глобальные состояния(для концовок)
 
    mtr_outcome = 0; -- 1 - leroy accused, 2 - jones accused, 3 - failed to prove
 

	
 
    conflict_resolved = false; -- Решен ли конфликт между навьярами
 
    artifacts_returned = false; -- Вернили ли артефакты из храма навьярам?
 
    wright_state = 0; -- был взят Райт на борт или нет
 
    goldman_state = 0; -- 0 - Голдман не раскрыт, 1 - Голдман казнен, 2 - Голдман задержан, 3 - Голдман изгнан
 
    leroy_state = 0; -- 0 - Леруа не раскрыт, 1 - Леруа казнен, 2 - Леруа задержан, 3 - Леруа изгнан
 
    iraa_scepter = false; -- был ли возвращен скипетр в Ираафаанотр
 
    iraa_map = false; -- был ли возвращен оригинал карты в Ираафаанотр
 
    dyp_map = false; -- Передана ли карта(оригинал или копия в Дипатреанотр)
 
    svetlova_help = 0; -- Дополнительная помощь, оказанная Светловой в исследовании навьяров --увеличивается, если показать ей КНО и скипетр
 
};
 

	
 
game.enable_save = function ()
 
    if here().nosave then
 
        return false;
 
    end;
 
    return true;
 
end;
 

	
 
game.enable_autosave = function ()
 
    if here().noautosave then
 
        return false;
 
    end;
 
    return true;
 
end;
 

	
 

	
 
player_drake = player {
 
    var {
 
        hp = 10;
 
        has_light = false;
 
        party = {};
 
        companion = nil;
 
        money = 200;
 
    };
 
    nam = "player";
 
    disp = "Дэвид Дрейк";
 
    disp2 = "Дрейка";
 
    disp3 = "Дрейку";
 
    where = 'port';
 
    
 
    obj = {'hp_indicator', 'item_umbrella', 'item_charts', 'item_note_1', 'item_money'};
 
    
 
    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');
 
    }
 
};
 

	
 
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: Если вы видите это сообщение -- это баг. ";
 

	
 
preview_unavailable_learr = game_over("preview_unavailable_learr", [[Спасти Леарр у обитателей Атлантиды не получилось. Гибель навьярессы поставила под угрозу многое, чего удалось добиться персоналу станции за долгие годы под водой. ^^Узнать, что произошло дальше, вы сможете в полной версии игры.^^Вы можете загрузить игру и попробовать спасти Леарр самостоятельно. ^^Мы ждем ваших отзывов на почту: inbox@silverwing.one^Следите за выходом новых версий на нашем сайте: awakening.silverwing.one]]);
 

	
 
preview_unavailable_rayfish = game_over("preview_unavailable_rayfish", [[Убив ската, вы восстанавливаете против себя всех навьяров из Дипатреанотра и Ираафаанотра. В ваших дальнейших поисках вам придется рассчитывать только на себя.^^Узнать, что произошло дальше, вы сможете в полной версии игры.^^Вы можете загрузить игру и попробовать обойтись без убийства ската. ^^Мы ждем ваших отзывов на почту: inbox@silverwing.one^Следите за выходом новых версий на нашем сайте: awakening.silverwing.one]]);
 

	
 
preview_unavailable_venaedanotrr = cutscene("preview_unavailable_venaedanotrr", "Предварительная версия", [[Левиафан полным ходом несется вдаль, к невиданным доселе навьярским поселениям. Кто знает, какие приключения ждут вас и остальных членов экипажа субмарины?^^Узнать, что произошло дальше, вы сможете в полной версии игры. Если вы не собрали оба фрагмента карты, то вы можете продолжить игру. ^^Мы ждем ваших отзывов на почту: inbox@silverwing.one^Следите за выходом новых версий на нашем сайте: awakening.silverwing.one]], "leviathan_wheelhouse");
 

	
 
preview_unavailable_dypatreanotrr = cutscene("preview_unavailable_dypatreanotrr", "Предварительная версия", [[Вы входите в пещеру в поисках очередного фрагмента карты. Какие испытания предстоит вам преодолеть, прежде, чем вы найдете его? Вы узнаете это в полной версии игры. Если вы не собрали оба фрагмента карты, то вы можете продолжить игру. ^^Мы ждем ваших отзывов на почту: inbox@silverwing.one^Следите за выходом новых версий на нашем сайте: awakening.silverwing.one]], "dyp_temple_cave_entrance");
 

	
 
function init()
 
    ---modules init
 
    pl = player_drake;
 
    --putf("debug_tool", stead.me())
 
    atlantis_init();
 
    leviathan_init();
 
    warehouse18_init();
 
    warehouse32_init();
 

	
 
    if prefs.language then
 
        language = prefs.language;
 
    else
 
        prefs.language = language;
 
    end;
 
    
 
    local nums = {1,2,3,4,5,6};
 
    if #dt_code == 0 then
 
        for i = 1, 4 do
 
            local index = rnd(#nums);
 
            table.insert(dt_code, nums[index]);
 
        end;
 
    end;
 
    nums = {1,2,3,4,5,6};
 
    for i = 1, 3 do 
 
        local index = rnd(#nums);
 
        table.insert(dt_buttons, nums[index]);
 
        table.remove(nums, index);
 
    end;
 
    ---game init
 
    pl.where = intro;
 
    ---debug
 
    --[[pl.where = "lse_final_battle";
 
    lse_pylon1.hp = 0;
 
    pl.obj[2] = item_harpoon;
 
    pl.obj[3] = item_colt;]]
 
end; 
0 comments (0 inline, 0 general)