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; };