Files @ 320aac2d01fa
Branch filter:

Location: games/Awakening/atlantis_iyhehevjiarr.lua - annotation

Silverwing
iyh2 fight
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
f75538f0cc0b
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
320aac2d01fa
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;
};