Files @ 320aac2d01fa
Branch filter:

Location: games/Awakening/atlantis_iyhehevjiarr.lua

Silverwing
iyh2 fight
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 (stead.nameof(where(s)) == s.home) then
			walkin(wright_home_dlg);
		else
			walkin(wright_dlg);
		end;
	end;
};

iyh_far_from_entrance = dlg {
	var {
		visited = false;
	};
	nam = "Заброшенный храм";
	entered = 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="crew", always=true, "[Использовать телефон]Просьба экипажу собраться в кают-компании", [[
			Вы спускаетесь в кают-компанию. 
		]], code [[ walk('iyh_wardroom_meeting'); ]]};
		{tag="advance", always=true, "[Подойти ближе]", [[
			Послушные вашей воле, двигатели Левиафана приводят субмарину в движение и вы плавно приближаетесь ко входу в храм. 
		]], code [[ walk('iyh_near_entrance'); ]]};
		{tag="light_temple", always=true, "[Осветить вход в храм]", [[
			Мощный луч света падает на вход в храм. Вы видите внутри какое-то движение и изнутри выплывает огромный скат. 
		]], code [[ iyh_fight.distance = 1000; walk('iyh_fight'); ]]};
		{tag="light_wall_r", "[Осветить скалы справа от храма]", [[ 
			Мощный луч света освещает скалы по правую сторону от храма. Он плавно скользит по поверхности скалы, пока вы не натыкаетесь на то, что отсюда кажется вам каким-то ущельем. Возможно следует изучить его?
		]], code [[ pon('ravine'); ]]};
		{tag="light_wall_l", "[Осветить скалы слева от храма]", [[
			Мощный луч света освещает скалы по левую сторону от храма. Он плавно скользит по поверхности скалы, однако так и не натыкается ни на что интересное. 
		]]};
		{tag="ravine", false, always=true, "[Подойти ко входу в ущелье]", [[
			Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье.
		]], code [[ walk('iyh_ravine_entry'); ]]};
	};	
};

iyh_fight = room {
	var {
		temple_distance = 0;
		distance = 0;
		shockfish_health = 100;
		timing = 0;
	};
	entered = function(s)
		s.temple_distance = distance;
		s.shockfish_health = 100;
	end;
	hideinv = true;
	forcedsc = 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;
	end;
	maketurn = function(s)
		if (s.distance <= 75) then
			if (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 "Скат приближается к вам. ";
		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 = obj {
	nam = "iyh_fight_torpedo";
	dsc = "{Выстрелить торпедой}^";
	act = function(s)
		if (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;
				pr "Вы стреляете торпедой в ската. Торпеда взрывается достигнув цели и разрывает ската. Вода краснеет от крови, а вы теперь можете безопасно приблизиться к храму. ";
			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;
};