lse_pre_fb_learr = cutscene('Лсэрианотр, зал Наэтвьирра', 'Лсэрианотр, зал Наэтвьирра', [[Леарр втыкает копье в один из генераторов и тот затихает. Наэтвьирр испускает мощную волну, отбрасывая Леарр к стене. Она остается неподвижно лежать там, где упала. ]], function(s) lse_gen_05.broken = true; if ArrayUtils.indexOf(pl.party, 'wright') ~= 0 then return 'lse_pre_fb_jack'; elseif ArrayUtils.indexOf(pl.party, 'anna') ~= 0 then return 'lse_pre_fb_anna'; else return 'lse_pre_fb_walter'; end; end); lse_pre_fb_jack = cutscene('Лсэрианотр, зал Наэтвьирра', 'Лсэрианотр, зал Наэтвьирра', [[Джек Райт стреляет в один из проводов, соединяющих трон в центре зала с генераторами. Сноп искр вырывается из поврежденного места. Наэтвьирр испускает в Райта мощный электрический разряд из своей руки. Джек падает на пол и остается неподвижно лежать. ]], function(s) lse_throne.rechargeThrow = 5; if ArrayUtils.indexOf(pl.party, 'anna') ~= 0 then return 'lse_pre_fb_anna'; else return 'lse_pre_fb_walter'; end; end); lse_pre_fb_anna = cutscene('Лсэрианотр, зал Наэтвьирра', 'Лсэрианотр, зал Наэтвьирра', [[Анна Рэдклифф достает револьвер и стреляет в один из экранов. Экран разбивается в дребезги, глаза Наэтвьирра моргают. Мощная волна воздуха отбрасывает Анну к стене. Она остается неподвижно лежать там, где упала. ]], function(s) lse_generators_chAwake = 80; return 'lse_pre_fb_walter'; end); lse_pre_fb_walter = cutscene('Лсэрианотр, зал Наэтвьирра', 'Лсэрианотр, зал Наэтвьирра', [[Уолтер Рэдклифф подходит к ближайшему генератору и что-то делает с ним. Сияющий щит вокруг Наэтвьирра пропадает. Мощный электрический разряд вырывается из руки машины и попадает в Уолтера. Рэдклифф падает на пол и остается неподвижно лежать. ]], function() player_drake.hp = 10; lse_generators_chShield = 2; return 'lse_final_battle'; end); lse_final_battle = battlefield { nam = "lse_final_battle"; disp = "Лсэрианотр, центральный зал"; lose = "game_over_final_battle"; win = "final_battle_over"; map = { {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, }; player_pic = 'images/player_no_outfit.png'; dsc = [[Стены древнего зала излучают яркий свет. Сверху над залом нависает прозрачный купол, сквозь который вы можете видеть океанскую толщу над вами. ]]; var { plX = 4; plY = 7; }; check_win = function(s) local cnt = 0; for i = 1, 10 do if (i < 10) then a = "lse_gen_0" .. tostring(i); else a = "lse_gen_" .. tostring(i); end; if not stead.ref(a).broken then cnt = cnt + 1; end; end; if cnt == 0 then walk(s.win); end; end; make_turn = function(s) lse_generator_update(); end; entered = function(s) local s = rnd(10); local t = rnd(10); while (t == s) do t = rnd(10); end; local c = rnd(10); while (c == t or c == s) do c = rnd(10); end; local p = rnd(10); while (p == c or p == t or p == s) do p = rnd(10); end; if (s < 10) then s = "0" .. tostring(s); else s = tostring(s); end; if (t < 10) then t = "0" .. tostring(t); else t = tostring(t); end; if (c < 10) then c = "0" .. tostring(c); else c = tostring(c); end; if (p < 10) then p = "0" .. tostring(p); else p = tostring(p); end; lse_generators_shield = "lse_gen_" .. s; lse_generators_throw = "lse_gen_" .. t; lse_generators_charge = "lse_gen_" .. c; lse_generators_pylon = "lse_gen_" .. p; stead.ref(lse_generators_shield).role = "s"; stead.ref(lse_generators_throw).role = "t"; stead.ref(lse_generators_charge).role = "c"; stead.ref(lse_generators_pylon).role = "p"; end; obj = { "lse_gen_01", "lse_gen_02", "lse_gen_03", "lse_gen_04", "lse_gen_05", "lse_gen_06", "lse_gen_07", "lse_gen_08", "lse_gen_09", "lse_gen_10", "lse_drake", "lse_aedhyarr", "lse_pylon1", "lse_pylon2", "lse_naethvjirr" }; }; global { lse_generators_shield = false; lse_generators_throw = false; lse_generators_charge = false; lse_generators_pylon = false; lse_generators_chPylon = 5; lse_generators_chThrow = 5; lse_generators_chCharge = 3; lse_generators_chShield = 0; lse_generators_chAwake = 60; } lse_generator_update = function() local cnt = 0; local c; for i = 1, 10 do local a; if (i < 10) then a = "lse_gen_0" .. tostring(i); else a = "lse_gen_" .. tostring(i); end; if not stead.ref(a).broken then cnt = cnt + 1; end; end; if (cnt == 0) then return; end; if (cnt < 4 or lse_naethvjirr.hp <= 0) then if (stead.ref(lse_generators_shield) and not stead.ref(lse_generators_shield).broken) then stead.ref(lse_generators_shield).role = false; end; lse_generators_shield = false; end; if (cnt < 3 or lse_naethvjirr.hp <= 0) then if (stead.ref(lse_generators_throw) and not stead.ref(lse_generators_throw).broken) then stead.ref(lse_generators_throw).role = false; end; lse_generators_throw = false; end; if (cnt < 2 or lse_naethvjirr.hp <= 0) then if (stead.ref(lse_generators_charge) and not stead.ref(lse_generators_charge).broken) then stead.ref(lse_generators_charge).role = false; end; lse_generators_charge = false; end; if (lse_pylon1.hp <= 0 and lse_pylon2.hp <= 0) then if (stead.ref(lse_generators_pylon) and not stead.ref(lse_generators_pylon).broken) then stead.ref(lse_generators_pylon).role = false; end; lse_generators_pylon = false; end; if (lse_generators_pylon and stead.ref(lse_generators_pylon).broken) then c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; while (stead.ref(c).broken or stead.ref(c).role) do c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; end; lse_generators_pylon = c; stead.ref(lse_generators_pylon).role = "p"; end; if (lse_generators_shield and stead.ref(lse_generators_shield).broken) then c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; while (stead.ref(c).broken or stead.ref(c).role) do c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; end; lse_generators_shield = c; stead.ref(lse_generators_shield).role = "s"; end; if (lse_generators_throw and stead.ref(lse_generators_throw).broken) then c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; while (stead.ref(c).broken or stead.ref(c).role) do c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; end; lse_generators_throw = c; stead.ref(lse_generators_throw).role = "t"; end; if (lse_generators_charge and stead.ref(lse_generators_charge).broken) then c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; while (stead.ref(c).broken or stead.ref(c).role) do c = rnd(10); if (c < 10) then c = "lse_gen_0" .. tostring(c); else c = "lse_gen_" .. tostring(c); end; end; lse_generators_charge = c; stead.ref(lse_generators_charge).role = "c"; end; end; lse_generator = function(nam, x, y, index) return combatant { nam = nam; var { x = x; y = y; hp = 2; broken = false; role = false; }; state = function(s) if s.hp == 2 then return ""; elseif s.hp == 1 then return "Он поврежден, но работает. "; end; end; pic = function(s) layers = { 'images/fb_generator' .. tostring(index) .. '.png' } if not s.broken then if (s.role == "s") then layers[2] = 'images/fb_generator_shield.png'; elseif (s.role == "c") then layers[2] = 'images/fb_generator_charge.png'; elseif (s.role == "t") then layers[2] = 'images/fb_generator_throw.png'; elseif (s.role == "p") then layers[2] = 'images/fb_generator_pylon.png'; else layers[2] = 'images/fb_generator_awake.png'; end; end; return layers; end; enemy = true; disp = "генератор " .. tostring(index); disp2 = "генератор " .. tostring(index); disp3 = "генератор " .. tostring(index); dsc = function(s) if (not s.broken) then return [[{Генератор ]] .. tostring(index) .. [[} издает равномерный гул. ]]; else return [[{Генератор ]] .. tostring(index) .. [[} сломан. ]]; end; end; onshoot = function(s) local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY)); if (rnd(4) > dist - 3) then s.broken = true; if (s.role == "s") then lse_generators_chShield = 2; elseif (s.role == "c") then lse_generators_chCharge = math.min(lse_generators_chCharge + 1, 4); elseif (s.role == "t") then lse_generators_chThrow = math.min(lse_generators_chThrow + 1, 5); elseif (s.role == "p") then lse_generators_chPylon = math.min(lse_generators_chPylon + 4, 10); end; p [[Вы попадаете в генератор и он затихает. ]]; else p [[Вы стреляете в генератор, но промахиваетесь. ]]; end; here():make_turn(); end; canthrust = function(s) return math.abs(s.x - here().plX) + math.abs(s.y - here().plY) <= 2 and not s.ally and not s.broken; end; onthrust = function(s) s.broken = true; if (s.role == "s") then lse_generators_chShield = 2; elseif (s.role == "c") then lse_generators_chCharge = math.min(lse_generators_chCharge + 1, 4); elseif (s.role == "t") then lse_generators_chThrow = math.min(lse_generators_chThrow + 1, 5); elseif (s.role == "p") then lse_generators_chPylon = math.min(lse_generators_chPylon + 4, 10); end; p [[После нескольких сильных ударов, генератор затихает. ]]; here():make_turn(); end; onhit = function(s) s.broken = true; p [[После нескольких сильных ударов, генератор затихает. ]]; here():make_turn(); end; act = function(s) return [[Так я не нанесу ему никакого вреда. ]]; end; make_turn = function(s) if not s.broken then if (s.role == "s") then if (lse_generators_chShield ~= 0) then lse_generators_chShield = lse_generators_chShield - 1; end; elseif (s.role == "c") then if (lse_generators_chCharge ~= 0) then lse_generators_chCharge = lse_generators_chCharge - 1; end; elseif (s.role == "t") then if (lse_generators_chThrow ~= 0) then lse_generators_chThrow = lse_generators_chThrow - 1; end; elseif (s.role == "p") then if (lse_generators_chPylon ~= 0) then lse_generators_chPylon = lse_generators_chPylon - 1; end; else lse_generators_chAwake = lse_generators_chAwake - 1; end; end; end; }; end; lse_gen_01 = lse_generator("lse_gen_01", 1, 7, 1); lse_gen_02 = lse_generator("lse_gen_02", 1, 5, 2); lse_gen_03 = lse_generator("lse_gen_03", 1, 3, 3); lse_gen_04 = lse_generator("lse_gen_04", 1, 1, 4); lse_gen_05 = lse_generator("lse_gen_05", 3, 1, 5); lse_gen_06 = lse_generator("lse_gen_06", 5, 1, 6); lse_gen_07 = lse_generator("lse_gen_07", 7, 1, 7); lse_gen_08 = lse_generator("lse_gen_08", 7, 3, 8); lse_gen_09 = lse_generator("lse_gen_09", 7, 5, 9); lse_gen_10 = lse_generator("lse_gen_10", 7, 7, 10); lse_pylon = function(nam, x, y, index) return combatant { nam = nam; disp = "пилон " .. tostring(index); disp2 = "пилон " .. tostring(index); disp3 = "пилон " .. tostring(index); pic = "images/fb_pylon.png"; var { hp = 1; x = x; y = y; }; shootHit = "Каким-то чудом, вы попадаете в пилон и выводите его из строя. "; shootMiss = "Вы промахиваетесь мимо пилона, являющегося достаточно сложной целью. "; shootKill = "Каким-то чудом, вы попадаете в пилон и выводите его из строя. "; enemy = true; state = ""; dsc = function(s) if (s.hp > 0) then return [[{Пилон ]] .. tostring(index) .. "} излучает слабое свечение. "; else return false; end; end; onshoot = function(s) local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY)); if (rnd(4) > dist) then if (dist == 0) then s.hp = s.hp - 2; end; s.hp = s.hp - 1; if (s.hp > 0) then p(s.shootHit); else p(s.shootKill); end; else p(s.shootMiss); end; here():make_turn(); end; make_turn = function(s) if (lse_generators_chPylon <= 0 and pl.hp > 0) then walk("game_over_pylon"); end; end; }; end; lse_pylon1 = lse_pylon("lse_pylon1", 3, 5, 1); lse_pylon2 = lse_pylon("lse_pylon2", 5, 5, 2); lse_throne = combatant { nam = "lse_throne"; var { x = 4; y = 4; hp = 1; }; pic = "images/fb_naethvjirr.png"; obst = 1; disp = "трон"; enemy = false; ally = false; state = ""; dsc = [[В центре комнаты установлен металлический трон. Рядом с ним валяется выведенный из строя автоматон-навьяр. ]]; }; lse_naethvjirr = combatant { nam = "lse_naethvjirr"; disp = "Наэтвьирр"; disp2 = "Наэтвьирра"; disp3 = "Наэтвьирру"; var { x = 4; y = 4; hp = 5; rechargeThrow = 4; }; pic = "images/fb_naethvjirr.png"; enemy = true; shootHit = "Вы попадаете в Наэтвьирра. "; shootMiss = "Вы промахиваетесь мимо Наэтвьирра. "; shootKill = "Вы попадаете в Наэтвьирра. Глаза автоматона гаснут и он с грохотом падает на пол. "; thrustHit = "Вы попадаете в Наэтвьирра. "; thrustMiss = "Вы промахиваетесь мимо Наэтвьирра. "; thrustKill = "Вы попадаете в Наэтвьирра. Глаза автоматона гаснут и он с грохотом падает на пол. "; wpnHit = "Вы попадаете в Наэтвьирра. "; wpnMiss = "Вы промахиваетесь мимо Наэтвьирра. "; wpnKill = "Вы попадаете в Наэтвьирра. Глаза автоматона гаснут и он с грохотом падает на пол. "; handHit = "Вы попадаете в Наэтвьирра. "; handMiss = "Вы промахиваетесь мимо Наэтвьирра. "; handKill = "Вы попадаете в Наэтвьирра. Глаза автоматона гаснут и он с грохотом падает на пол. "; state = function(s) if s.hp == 5 then return ""; elseif s.hp >= 3 then return "Он поврежден. "; else return "Он сильно поврежден. "; end; end; dsc = function(s) local p = [[В центре комнаты установлен металлический трон. Рядом с ним стоит {автоматон-навьяр}, готовый к бою. ]]; if (lse_generators_chShield <= 0) then p = p .. [[Вокруг него видно едва заметное сияние энергетического щита - сейчас никакая атака не повредит ему. ]]; end; return p; end; make_turn = function(s) if here() ~= lse_final_battle then return end; if (lse_generators_chCharge <= 0) then lse_generators_chCharge = 3; p("Наэтвьирр отправляет в вас электрический разряд. "); if (rnd(4) < 2) then local plX = here().plX; local plY = here().plY; if math.abs(here().plX - 4) > math.abs(here().plY - 4) then if here().plX > 4 then plX = here().plX + 1; else plX = here().plX - 1; end; elseif math.abs(here().plX - 4) < math.abs(here().plY - 4) then if here().plY > 4 then plY = here().plY + 1; else plY = here().plY - 1; end; else if rnd(2) > 1 then if here().plX > 4 then plX = here().plX + 1; else plX = here().plX - 1; end; else if here().plY > 4 then plY = here().plY + 1; else plY = here().plY - 1; end; end; end; if (here():isPassable(plX, plY)) then p("Разряд отбрасывает вас в сторону"); here().plX = plX; here().plY = plY; end; end; if (rnd(4) < 5) then p("Вы чувствуете, что атака не прошла для вас бесследно. "); pl.hp = pl.hp - 1; end; elseif (lse_generators_chThrow <= 0) then lse_generators_chThrow = s.rechargeThrow; p("Наэтвьирр отправляет в вас мощную волну воздуха, которая отбрасывает вас в сторону. "); local plX = here().plX; local plY = here().plY; if math.abs(here().plX - 4) > math.abs(here().plY - 4) then if here().plX > 4 then plX = here().plX + 1; else plX = here().plX - 1; end; elseif math.abs(here().plX - 4) < math.abs(here().plY - 4) then if here().plY > 4 then plY = here().plY + 1; else plY = here().plY - 1; end; else if rnd(2) > 1 then if here().plX > 4 then plX = here().plX + 1; else plX = here().plX - 1; end; else if here().plY > 4 then plY = here().plY + 1; else plY = here().plY - 1; end; end; end; if (here():isPassable(plX, plY)) then p("Волна отбрасывает вас в сторону. "); here().plX = plX; here().plY = plY; if (rnd(4) > 1) then -- 75% pl.hp = pl.hp - 1; p("Вы чувствуете, что атака не прошла для вас бесследно. "); end; else pl.hp = pl.hp - 1; p("Вы больно ударяетесь. "); end; end; p [[]]; end; onkill = function(s) s:disable(); table.insert(lse_final_battle.obj, #lse_final_battle.obj - 4, lse_throne); end; canshoot = function(s) local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY)); return dist < 6 and not s.ally and lse_generators_chShield > 0; end; canthrust = function(s) return math.abs(s.x - here().plX) + math.abs(s.y - here().plY) <= 2 and not s.ally and lse_generators_chShield > 0; end; canhit = function(s) return (math.abs(s.x - here().plX) == 1 and s.y == here().plY or s.x == here().plX and math.abs(s.y - here().plY) == 1) and not s.ally and lse_generators_chShield > 0; end; }; lse_drake = combatant { nam = "lse_drake"; disp = "Уильям Дрейк"; disp2 = "Уильяма Дрейка"; disp3 = "Уильяму Дрейку"; shootHit = "Вы стреляете в Уильяма и попадаете в него. "; shootMiss = "Вы стреляете в Уильяма, но не попадаете в него. "; shootKill = "Вы стреляете в Уильяма и он падает замертво. "; handHit = "Вы ударяете Уильяма. "; handKill = "После вашего удара Уильям падает. "; handFar = "Слишком далеко. "; var { x = 4; y = 3; hp = 1; gun = 6; }; pic = "images/fb_drake.png"; state = ""; dsc = function(s) if s.hp > 0 then return [[{Уильям Дрейк} готов к бою. ]]; else return false; end; end; make_turn = function(s) if here() ~= lse_final_battle then return end; local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY)); if (dist < 6) then if (dist < 4) then -- try to run away local x = s.x; local y = s.y; if (math.abs(x - pl.x) > math.abs(y - pl.y)) then if (x > pl.x) then x = x + 1; else x = x - 1; end; elseif (math.abs(x - pl.x) < math.abs(y - pl.y)) then if (y > pl.y) then y = y + 1; else y = y - 1; end; else if (rnd(2) > 1) then if (here():isPassable(x, y + 1)) then y = y + 1; else x = x + 1; end; else if (here():isPassable(x + 1, y)) then x = x + 1; else y = y + 1; end; end; end; if (here():isPassable(x, y)) then s.x = x; s.y = y; p("Уильям Дрейк отступает. "); else p("Уильям Дрейк ждет. "); end; else p("Уильям Дрейк ждет. "); end; else p("Уильям Дрейк ждет. "); end; end; }; lse_aedhyarr = combatant { nam = "lse_aedhyarr"; var { x = 5; y = 3; hp = 1; gun = 6; }; disp = "Аэдхиарр"; disp2 = "Аэдхиарра"; disp3 = "Аэдхиарру"; pic = "images/aedhyarr.png"; shootHit = "Вы стреляете в Аэдхиарра и попадаете в него. "; shootMiss = "Вы стреляете в Аэдхиарра, но не попадаете в него. "; shootKill = "Вы стреляете в Аэдхиарра и он падает замертво. "; handHit = "Вы ударяете Аэдхиарра. "; handKill = "После вашего удара Аэдхиарр падает. "; handFar = "Слишком далеко. "; state = ""; dsc = function(s) if s.hp > 0 then return [[{Аэдхиарр} готов к бою. ]]; else return false; end; end; make_turn = function(s) if here() ~= lse_final_battle then return end; local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY)); if (dist < 6) then if (dist < 4) then -- try to run away local x = s.x; local y = s.y; if (math.abs(x - pl.x) > math.abs(y - pl.y)) then if (x > pl.x) then x = x + 1; else x = x - 1; end; elseif (math.abs(x - pl.x) < math.abs(y - pl.y)) then if (y > pl.y) then y = y + 1; else y = y - 1; end; else if (rnd(2) > 1) then if (here():isPassable(x, y + 1)) then y = y + 1; else x = x + 1; end; else if (here():isPassable(x + 1, y)) then x = x + 1; else y = y + 1; end; end; end; if (here():isPassable(x, y)) then s.x = x; s.y = y; p("Аэдхиарр отступает. "); else p("Аэдхиарр ждет. "); end; else p("Аэдхиарр ждет. "); end; else p("Аэдхиарр ждет. "); end; end; }; final_battle_over = cutscene('Лсэрианотр, зал Наэтвьирра', 'Лсэрианотр, зал Наэтвьирра', function(s) if lse_naethvjirr.hp > 0 then pr [[Как только последний генератор затихает, металлический навьяр застывает. Наэтвьирра больше нет. ]]; else pr [[Последний генератор затихает и вы облегченно вздыхаете. Наэтвьирра больше нет. ]]; end; if lse_drake.hp > 0 then pr [[Ошеломленный Уильям Дрейк произносит: "Не ждал я от тебя такого, сынок". Дрожащей рукой он подносит к виску револьвер. ]]; end; if lse_aedhyarr.hp > 0 then pr [[Аэдхиарр опускается на пол с криком: "Не стреляйте!" ]]; else pr [[Пришедший в себя Аэдхиарр испуганно озирается и остается лежать. ]]; end; if #pl.party == 1 then pr [[Фаэтларр приходит в себя. ]]; elseif #pl.party > 1 then pr [[Ваши спутники начинают приходить в себя. ]]; end; end, 'final_battle_over_2'); final_battle_over_2 = room { var { frames = 3; -- Player must have 2 tacts to do something. 2 is enough to stop drake }; nam = 'final_battle_over_2'; disp = 'Лсэрианотр, зал Наэтвьирра'; dsc = [[Центральный зал ярко освещен исходящим из стен светом. По периметру зала установлены массивные металлические шкафы. По полу протянуты толстые провода, соединяющие их со статуей в центре зала. Металлическая статуя изображает навьяра, сидящего на троне. Рядом с троном стоят два пилона высотой около метра. ]]; entered = function(s) lifeon(s); end; left = function(s) lifeoff(s); end; life = function(s) s.frames = s.frames - 1; if s.frames == 0 then drake_saved = false; walk('final_drake_not_saved'); end; end; obj = { 'final_naethvjirr'; 'final_pylons'; 'final_drake'; 'final_aedhyarr'; }; } final_naethvjirr = obj { nam = 'final_naethvjirr'; dsc = function(s) if lse_naethvjirr.hp <= 0 then return [[В центре зала установлен массивный металлический трон, рядом с которым лежит искореженный металлический автоматон-{навьяр}. ]]; else return [[В центре зала установлен массивный металлический трон, перед которым навеки застыл металлический {навьяр}. ]]; end; end; act = function(s) if lse_naethvjirr.hp <= 0 then return [[Развороченные остатки древней машины. Чудесное творение великих мудрецов прошлого приведено в совершенную негодность. ]]; else return [[Механический навьяр застыл, навеки обращенный в статую. Лишенный источника энергии, он уже никогда не оживет. ]]; end; end; }; final_pylons = obj { nam = 'final_pylons'; dsc = function(s) if lse_pylon1.hp > 0 and lse_pylon2.hp > 0 then return [[Рядом с троном высятся два {стеклянных} пилона. ]]; elseif lse_pylon1.hp <= 0 and lse_pylon2.hp <= 0 then return [[По всему залу разбросаны {обломки стекла}, оставшиеся от двух пилонов, стоявших перед троном. ]]; else return [[Рядом с троном высится стеклянный {пилон}. Обломки еще одного разбросаны по всему залу. ]]; end; end; act = "Древнее защитное устройство уже никому не причинит вреда. "; } final_drake = obj { nam = 'final_drake'; dsc = [[Уильям Дрейк стоит с поднесенным к виску {револьвером}.]]; act = [[Он вот-вот выстрелит!]]; noshootmsg = ''; used = function(s, o) if o == item_colt and item_colt.bullets > 0 then lifeoff(final_battle_over_2); drake_saved = true; walkin('final_drake_saved'); return [[Вы прицеливаетесь и делаете выстрел, выбивая револьвер из руки Уильяма. Он ошеломленно смотрит на вас. ^Некоторое время спустя Уильям приходит в себя и спрашивает: "Что будем делать дальше, Дэвид?"]]; end; end; }; final_aedhyarr = obj { nam = 'final_aedhyarr'; dsc = '{Аэдхиарр} почти не двигаясь лежит на полу. '; act = 'Навьяр жив, но напуган. Лучше оставить его в покое.'; }; final_drake_saved = dlg { nam = 'final_drake_saved'; disp = 'Лсэрианотр, зал Наэтвьирра'; entered = [[Уильям приходит в себя и смотрит на вас: "Что будем делать дальше, Дэвид?"^]]; phr = { {'Город все еще в нашем распоряжении. Нам нужно вернуться на Атлантиду, но кто-то должен остаться здесь.', function(s) walk('final_choose_ruler'); return 'Уильям соглашается: "Да. Пора домой. Кого ты оставишь здесь? Аэдхиарр, я думаю, вполне справится". ^Позади вас раздается решительный голос Фаэтларра: "Я останусь". ' end}; {'Понятия не имею. ', function(s) walk('final_choose_ruler'); return 'Уильям задумчиво чешет подбородок и сообщает: "Думаю, нам пора домой, на Атлантиду. Но нужно оставить кого-нибудь здесь... Аэдхиарр, я думаю, вполне справится". ^Позади вас раздается решительный голос Фаэтларра: "Я останусь". ' end}; }; }; final_drake_not_saved = dlg { nam = 'final_drake_not_saved'; disp = 'Лсэрианотр, зал Наэтвьирра'; entered = [[Вы не успеваете помешать Уильяму сделать выстрел. Его тело падает на пол. Некоторое время вы стоите посреди затихшего зала, размышляя о произошедшем. Тихий голос Фаэтларра прорезает тишину: "Что будем делать дальше?" ]]; phr = { {'Город все еще в нашем распоряжении. Нам нужно вернуться на Атлантиду, но кто-то должен остаться здесь.', function(s) walk('final_choose_ruler'); return 'Фаэтларр соглашается: "Да. Вам пора домой. Я готов остаться и присмотреть здесь за всем, но решение за тобой". ^Аэдхиарр поднимается с пола и отряхивается со словами: "Мы хорошо знаем этот город и сможем присмотреть за ним. Я готов остаться вместе с моими помощниками". ' end}; {'Понятия не имею. ', function(s) walk('final_choose_ruler'); return 'Вы слышите позади себя голос Уолтера Рэдклиффа: "Нам пора на Атлантиду, но кто-то должен остаться здесь, присмотреть за городом. Я бы предложил кандидатуры Аэдхиарра, хорошо знакомого с Лсэрианотром, или Фаэтларра". ^Фаэтларр кивает: "Я готов". ^Аэдхиарр поднимается с пола и отряхивается со словами: "Это будет большая честь для меня". ' end} }; }; final_choose_ruler = dlg { nam = 'final_choose_ruler'; disp = 'Лсэрианотр, зал Наэтвьирра'; entered = function(s) if drake_saved then pon('drake'); return [[Ваши спутники, Уильям и Аэдхиарр молча ждут вашего решения. ]]; else poff('drake'); return [[Ваши спутники и Аэдхиарр молча ждут вашего решения. ]]; end; end; phr = { {tag="drake", 'За главного остается мой отец, Уильям Дрейк.', function(s) walkin(prepare_ending(6)); end}; {tag="aedhyarr", 'За главного остается Аэдхиарр.', function(s) walkin(prepare_ending(3)); end}; {tag="phaetlarr", 'За главного остается Фаэтларр.', function(s) walkin(prepare_ending(4)); end}; }; };