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; entered = function(s) atl_iyh_state = 7; if (not s.visited) then 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 [[ walk('iyh_near_temple'); ]]}; {tag="wait", "[Ждать]", [[ Вы решаете подождать до наступления ночи и это правдывает себя. Как только последние лучи солнца перестают пробиваться сквозь толщу воды, скат выбирается из своего логова и отправляется на охоту. ]], code [[ lifeon(iyh_far_from_entrance); atl_iyh_shockfish_away = 30; ]]}; {tag="light_temple", always=true, "[Осветить вход в храм]", [[ Мощный луч света падает на вход в храм. Вы видите внутри какое-то движение и изнутри выплывает огромный скат. ]], code [[ iyh_fight.distance = 1000; walk('iyh_fight'); ]]}; {tag="light_wall_r", "[Осветить скалы справа от храма]", [[ Мощный луч света освещает скалы по правую сторону от храма. Он плавно скользит по поверхности скалы, пока вы не натыкаетесь на то, что отсюда кажется вам каким-то ущельем. Возможно следует изучить его? ]], code [[ iyh_near_temple:pon('ravine'); pon('ravine'); ]]}; {tag="light_wall_l", "[Осветить скалы слева от храма]", [[ Мощный луч света освещает скалы по левую сторону от храма. Он плавно скользит по поверхности скалы, однако так и не натыкается ни на что интересное. ]]}; {tag="ravine", false, always=true, "[Подойти ко входу в ущелье]", [[ Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. ]], code [[ 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 -- TODO если игрок в храме - ему хана 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; return [[ Торпеда попадает в аккурат над храмом и вход оказывается завален тяжелыми глыбами. ]]; 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?!" ]]; elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then pr [[ Аикерьярр отворачивается от иллюминатора и со злобой смотрит на вас: "Ты за-это-ответишь he'rr". ]]; end; if (math.abs(iyh_fight.temple_distance) < 100) then walk("iyh_near_temple"); else walk("iyh_far_from_entrance"); end; 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; way = { kh_vway("Отойти от штурвала", function(s) return "leviathan_wheelhouse"; end); kh_vway("Войти в ущелье", function(s) iyh_labyrinth.position = 1; iyh_labyrinth.direction = 1; return "iyh_labyrinth"; end); kh_vway("Ко входу в храм", "iyh_near_temple"); kh_vway("Отойти назад", "iyh_far_from_entrance"); }; }; --[[ Описание структуры лабиринта. Каждый узел описан в двух направлениях 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={7,1}, r={33, 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 { location = 1; direction = 1; }; no_exit = [[ Нет смысла покидать Левиафан здесь. ]]; nam = "Штурвал Левиафана"; dsc = function(s) pr [[ Вы находитесь у дна глубокого ущелья. ]]; if (iyh_labyrinth_template[s.location]["f"]) then pr [[ Ущелье продолжается вперед. ]]; end; if (iyh_labyrinth_template[s.location]["l"] and iyh_labyrinth_template[s.location]["r"]) then pr [[ Влево и вправо уходят ответвления. ]]; elseif (iyh_labyrinth_template[s.location]["l"]) then pr [[ Влево уходит ответвление. ]]; elseif (iyh_labyrinth_template[s.location]["r"]) then pr [[ Вправо уходит ответвление. ]]; elseif (not iyh_labyrinth_template[s.location]["f"]) then pr [[ Дальше пути нет. ]]; end; end; update = function(s) end; obj = { "iyh_lab_forward", "iyh_lab_left", "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]) == 'string') then walk(iyh_labyrinth_template[p][d]); 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]) == 'string') then walk(iyh_labyrinth_template[p][d]); 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]) == 'string') then walk(iyh_labyrinth_template[p][d]); 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 = "Левиафан"; dsc = [[ Вы находитесь в конце ущелья. Луч прожектора освещает небольшой проход в скале. ]]; way = { kh_vway("Отойти от штурвала", "iyh_rear_entrance_foot"); kh_vway("В ущелье", function(s) iyh_labyrinth.position = 23; iyh_labyrinth.direction = 2; return "iyh_labyrinth"; end); }; entered = function(s) move(submarine_leviathan, iyh_rear_entrance_foot); end; }; iyh_rear_entrance_foot = room { nam = "Ущелье"; dsc = [[ Узкое глубокое ущелье. Вы находитесь в одном из его концов. В скале вы видите небольшой проход явно искусственного происхождения. ]]; way = { kh_vway("В Левиафан", "leviathan_airlock"); kh_vway("Внутрь", "iyh_temple_rear_corridor_entry"); }; entered = function(s) if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0 and not char_learr.accompany) then pr [[ Леарр входит в шлюз вслед за вами: "Я вместе-с-тобой-пойду". ]]; char_learr:accompany(true); char_radcliffe:accompany(false); char_wright:accompany(false); char_anna:accompany(false); elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0 and not char_aikerjarr_lev.accompany) then pr [[ Аикерьярр входит в шлюз вслед за вами: "Я вместе-с-тобой-пойду". ]]; char_aikerjarr_lev:accompany(true); char_radcliffe:accompany(false); char_wright:accompany(false); char_anna:accompany(false); end; way("В Левиафан"):disable(); if (where(submarine_leviathan) == here()) then way("В Левиафан"):enable(); end; end; }; iyh_temple_rear_corridor_entry = room { nam = "Коридор"; dsc = [[ Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. ]]; way = { kh_vway("Выйти", "iyh_rear_entrance_foot"); kh_vway("В левую комнату", "iyh_left_room_1"); kh_vway("В правую комнату", "iyh_right_room_1"); kh_vway("Пройти дальше", "iyh_temple_rear_corridor_middle"); }; }; iyh_temple_rear_corridor_middle = room { nam = "Коридор"; dsc = [[ Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. ]]; way = { kh_vway("К выходу", "iyh_temple_rear_corridor_entry"); kh_vway("В левую комнату", "iyh_left_room_2"); kh_vway("В правую комнату", "iyh_right_room_2"); kh_vway("Пройти дальше", "iyh_temple_rear_corridor_end"); }; }; iyh_temple_rear_corridor_end = room { nam = "Коридор"; dsc = [[ Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. ]]; way = { kh_vway("К выходу", "iyh_temple_rear_corridor_entry"); kh_vway("В левую комнату", "iyh_left_room_3"); kh_vway("В правую комнату", "iyh_right_room_3"); kh_vway("В главный зал", "iyh_temple_main_hall_end"):disable(); }; }; iyh_left_room_1 = room { nam = "Комната"; dsc = [[ Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. ]]; way = { vway("В коридор", "iyh_temple_rear_corridor_entry"); }; obj = { "item_navjiarr_chart_2" }; }; iyh_right_room_1 = room { nam = "Комната"; dsc = [[ Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось. Единственный дверной проем ведет в коридор. ]]; way = { vway("В коридор", "iyh_temple_rear_corridor_entry"); }; obj = { "item_legend_of_hunter" }; }; iyh_left_room_2 = room { nam = "Комната"; dsc = [[ Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. ]]; way = { vway("В коридор", "iyh_temple_rear_corridor_middle"); }; obj = { "item_navjiarr_chart_3" }; }; iyh_right_room_2 = room { nam = "Комната"; dsc = [[ Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось. Единственный дверной проем ведет в коридор. ]]; way = { vway("В коридор", "iyh_temple_rear_corridor_middle"); }; obj = { "item_legend_of_first_city" }; }; iyh_left_room_3 = room { nam = "Комната"; dsc = [[ Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. ]]; way = { vway("В коридор", "iyh_temple_rear_corridor_end"); }; obj = { "item_navjiarr_chart_1" }; }; iyh_right_room_3 = room { nam = "Комната"; dsc = [[ Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось. Единственный дверной проем ведет в коридор. ]]; way = { vway("В коридор", "iyh_temple_rear_corridor_end"); }; obj = { "item_legend_of_temple" }; }; iyh_temple_main_hall_end = room { nam = "Храм"; dsc = [[ Главный зал древнего навьярского святилища. В стенах слева и справа вырезаны небольшие углубления, на которых некогда покоились ценные реликвии. Сейчас большинство из них пусты. Потолок находится на высоте нескольких десятков метров, но ни лестниц, ни уступов нет. Вы находитесь в дальнем конце зала. ]]; enter = function(s) if (atl_iyh_shockfish_away == 0 and atl_iyh_shockfish_away and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then walk("game_over_shockfish_2"); end; end; entered = function(s) if (iyh_back_door.open) then path("В заднюю зверь"):enable(); end; end; way = { kh_vway("В центр зала", "iyh_temple_main_hall_middle"); kh_vway("В заднюю дверь", "iyh_temple_rear_corridor_end"):disable(); }; }; iyh_back_door = obj { var { open = false; }; nam = "iyh_back_door"; dsc = function(s) if (s.open) then return [[ В конце зала находится открытая {дверь}. ]]; else return [[ В конце зала находится массивная {дверь}, закрытая на засов. ]]; end; end; act = function(s) if (s.open) then return [[ Дверь уже открыта. ]]; else path("В главный зал"):enable(); return [[ Вы отодвигаете засов и открываете дверь. ]]; end; end; }; iyh_back_door_main = obj { nam = "iyh_back_door_main"; dsc = function(s) if (iyh_back_door.open) then return [[ В конце зала находится открытая {дверь}. ]]; else return [[ В конце зала находится закрытая {дверь}. ]]; end; end; act = [[ Не удается открыть дверь. Она заперта с другой стороны. ]]; }; iyh_temple_main_hall_middle = room { nam = "Храм"; dsc = [[ Главный зал древнего навьярского святилища. В стенах слева и справа вырезаны небольшие углубления, на которых некогда покоились ценные реликвии. Сейчас большинство из них пусты. Потолок находится на высоте нескольких десятков метров, но ни лестниц, ни уступов нет. Слева и справа от вас вы видите небольшие проемы, ведущие в боковые помещения. ]]; obj = { "iyh_pedestal" }; enter = function(s) if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then walk("game_over_shockfish_2"); end; end; way = { kh_vway("К выходу", "iyh_temple_main_hall_entry"); kh_vway("В конец зала", "iyh_temple_main_hall_end"); kh_vway("Налево", "iyh_temple_left_hall"); kh_vway("Направо", "iyh_temple_right_hall"); }; }; iyh_temple_main_hall_entry = room { nam = "Храм"; dsc = [[ Главный зал древнего навьярского святилища. В стенах слева и справа вырезаны небольшие углубления, на которых некогда покоились ценные реликвии. Сейчас большинство из них пусты. Потолок находится на высоте нескольких десятков метров, но ни лестниц, ни уступов нет. Вы находитесь у входа в зал. ]]; enter = function(s) if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then walk("game_over_shockfish_2"); end; end; entered = function(s) if (atl_iyh_entrance_destroyed) then path("Выйти"):disable(); end; end; way = { kh_vway("Выйти", "iyh_near_temple_foot"); kh_vway("Пройти дальше", "iyh_temple_main_hall_middle"); }; obj = { "item_temple_disk" }; }; iyh_temple_left_hall = room { nam = "Храм"; dsc = [[ Вы находитесь в одной из боковых комнат храма. Небольшое помещение - не более десятка метров в ширину. ]]; way = { kh_vway("В главный зал", "iyh_temple_main_hall_middle"); }; obj = { "iyh_temple_rubble_left", "iyh_temple_niche_left" }; }; iyh_temple_right_hall = room { nam = "Храм"; dsc = [[ Вы находитесь в одной из боковых комнат храма. Небольшое помещение - не более десятка метров в ширину. ]]; way = { kh_vway("В главный зал", "iyh_temple_main_hall_middle"); }; obj = { "iyh_temple_rubble_right", "iyh_temple_niche_right" }; }; iyh_temple_rubble_left = obj { nam = "iyh_temple_rubble"; dsc = [[ В углу валяется {груда обломков}. ]]; act = [[ Здесь ничего нет. ]]; }; iyh_temple_niche_left = obj { var { taken = false; }; nam = "iyh_temple_deep_niche_left"; dsc = [[ В одной из стен вы замечаете глубокую {нишу}. ]]; act = function(s) if (s.taken) then return [[ Здесь ничего нет. ]]; else s.taken = true; take(item_statuette); return [[ Внутри вы находите металлическую статуэтку, изображающую навьяра. ]]; end; end; }; iyh_temple_rubble_right = obj { var { taken = false; }; nam = "iyh_temple_rubble"; dsc = [[ В углу валяется {груда обломков}. ]]; act = function(s) if (s.taken) then return [[ Здесь ничего нет. ]]; else s.taken = true; take(item_legend_of_dark_source); return [[ В куче обломков вы находите металлическую табличку. ]]; end; end; }; iyh_temple_niche_right = obj { nam = "iyh_temple_deep_niche_left"; dsc = [[ В одной из стен вы замечаете глубокую {нишу}. ]]; act = [[ Здесь ничего нет. ]]; }; iyh_pedestal = obj { var { taken = false; }; nam = "iyh_pedestal"; dsc = function(s) if (s.taken) then return [[ В центре комнаты расположен пустой {пьедестал}. ]]; else return [[ В центре комнаты расположен {пьедестал}, на котором покоится какой-то блестящий предмет. ]]; end; end; act = function(s) if (s.taken) then return [[ Здесь ничего нет. ]]; else s.taken = true; atl_iyh_state = 8; if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then return [[ Вы подходите к кубу, чтобы взять его, но Леарр вас опережает - она прячет куб к себе в сумку. По ее плавникам бегут цветные полосы: [Это наша-реликвия]. ]]; elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then return [[ Вы подходите к кубу, чтобы взять его, но Аикерьярр вас опережает - он прячет куб к себе в сумку. По его плавникам бегут цветные полосы: [Не трогай! Это наша-реликвия]. ]]; else take(item_navjiarr_cube); return [[ Вы поднимаете небольшой светящийся кубик. ]]; end; end; end; }; iyh_near_temple = dlg { nam = "Штурвал Левиафана"; dsc = [[ Через иллюминаторы вы видите прямо перед собой массивные каменные двери, вытесанные в скале, возвышающейся далеко над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. ]]; enter = function(s) if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then pr [[ Как только вы приближаетесь, скат выплывает из свого жилища, чтобы прогнать посмевших приблизиться к нему. ]]; iyh_fight.temple_distance = 50; iyh_fight.distance = 50; walk(iyh_fight); end; end; entered = function(s) move(submarine_leviathan, iyh_near_temple_foot); end; phr = { {tag="ravine", false, always=true, "[Ко входу в ущелье]", [[ Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. ]], code [[ walk('iyh_ravine_entry'); ]]}; {tag="away", always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {tag="back", always=true, "[Вернуться к исходной позиции]", code = [[ walk('iyh_far_from_entrance'); ]]}; }; }; iyh_near_temple_foot = dlg { nam = "Вход в храм"; dsc = [[ Прямо перед собой вы видите массивные каменные двери, вытесанные в скале, возвышающейся далеко над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. ]]; way = { kh_vway("В Левиафан", "leviathan_airlock"); }; }; iyh_outro_svetlova = room { nam = "Атлантида, док Левиафана"; dsc = function(s) pr [[ При выходе из Левиафана, вас встречает Екатерина Светлова. Вы рассказываете ей обо всем произошедшем. ]]; if (atl_iyh_shockfish_dead) then pr [[ Она забирает у вас артефакты для изучения, но крайне недовольна убийством ската: "Артефакты, конечно будут полезны, но то что вы сделали ставит под угрозу дальнейшее существование станции. Хвала небесам, что рыбни об этом не знают и может быть, не узнают о произошедшем".^ ]]; elseif (atl_iyh_entrance_destroyed) then pr [[ Она забирает у вас артефакты для изучения, но огорчена разрушением святилища: "Очень жаль, что пришлось разрушить храм - там наверняка было еще много интересного".^ ]]; else pr [[ Она забирает у вас артефакты для изучения и благодарит вас: "Отлично, вы оказали нам неоценимую услугу. Скоро я верну реликвию в Дипатреанотр и ситуация будет исчерпана".^ ]]; end; --[[pr [ [ Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, к вам входит Екатерина и отдает часть табличек, найденных вами: "Это вам понадобится в поисках отца. Эти таблички помогут вам проследовать путем Уильяма. Я уже говорила, что он отправился на поиски древнего навьярского города, Лсэрианотра. Должно быть, он сделал копии этих диаграмм. Но здесь не все просто - это лишь фрагменты карт и чтобы воспользоваться ими, вам придется найти недостающие части. К сожалению, я не знаю, где их можно найти. Но, скорее всего, знают навьяры. ] ]; if (not atl_iof_learr_dead) then pr [ [ Вам следует начать с Ираафаанотра - родного города Леарр. Наверняка, она согласится отправиться туда с вами". ] ]; else pr [ [ Рядом с нами расположено два города - Дипатреанотр и Ираафаанотр, и я советую вам их посетить". ] ]; end;]] pr [[ Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое что для вас". ]]; end; entered = function(s) atl_iyh_artifacts_on_atlantis = true; remove(item_statuette); remove(item_temple_disk); remove(item_legend_of_temple); remove(item_legend_of_dark_source); remove(item_legend_of_first_city); remove(item_legend_of_hunter); remove(item_navjiarr_chart_1); remove(item_navjiarr_chart_2); remove(item_navjiarr_chart_3); end; obj = { vroom("Продолжить", "atl_luna_drake_room"); }; }; iyh_outro_aikerrjarr = room { nam = "Атлантида, док Левиафана"; dsc = function(s) pr [[ При выходе из Левиафана, вас встречает Екатерина Светлова. Аикерьярр сразу же требует: "Ты мне-отдашь взятое-тобой-в-храме-все". На что Светлова просит его: "Позвольте кратко взглянуть на все". Аикерьярр с явным недовольством соглашается. Пока Екатерина осматривает реликвии, вы рассказываете ей обо всем произошедшем. Как только вы заканчиваете рассказ, ]]; if (atl_iyh_shockfish_dead) then pr [[ она недовольно восклицает: "Зачем вы это сделали?!", - После чего, уже спокойнее добавляет: "Впрочем, можете не отвечать. Что сделано то сделано".^ ]]; elseif (atl_iyh_entrance_destroyed) then pr [[ она огорченно комментирует: "Очень жаль, что пришлось разрушить храм - там наверняка было еще много интересного".^ ]]; else pr [[ она благодарит вас: "Отлично, вы оказали нам неоценимую услугу. Скоро я верну реликвию в Дипатреанотр и ситуация будет исчерпана".^ ]]; end; pr [[ Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое что для вас". ]]; end; hideinv = true; entered = function(s) remove(item_statuette); remove(item_temple_disk); remove(item_legend_of_temple); remove(item_legend_of_dark_source); remove(item_legend_of_first_city); remove(item_legend_of_hunter); remove(item_navjiarr_chart_1); remove(item_navjiarr_chart_2); remove(item_navjiarr_chart_3); end; obj = { vroom("Продолжить", "atl_luna_drake_room"); }; }; iyh_outro_learr = dlg { nam = "Атлантида, док Левиафана"; entered = function(s) if (rel_learr > 0) then psub('rel_ok'); return [[ При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр сразу же просит: "Ты мне-отдашь взятое-в-храме".^ На что Светлова просит ее: "Может вы разрешите нам оставить реликвии на некоторое время?"^ Леарр не слишком уверенно отвечает: "Старейшина это-не-одобрит. Другой-выход есть?" ]]; else psub('rel_not_ok'); return [[ При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр сразу же просит: "Ты мне-отдашь взятое-в-храме".^ На что Светлова просит ее: "Может вы разрешите нам оставить реликвии на некоторое время?"^ Леарр не слишком уверенно отвечает: "Старейшина это-не-одобрит. Другой-выход есть?" ]]; end; end; phr = { {tag="rel_ok"}; {"Это очень поможет нам в поисках Уильяма", [[ Леарр все еще неуверенно: "Я что-смогу-сделаю. Вы пока-все-оставьте". ]], code [[ atl_iyh_artifacts_on_atlantis = true; atl_rep_svetlova = atl_rep_svetlova + 1; walk("iyh_outro_learr_2"); ]]}; {"Хорошо, забирайте реликвии", [[ Леарр благодарит вас: "Вы можете-наш-город-посетить и реликвии-смотреть". ]], code [[ rel_learr = rel_learr + 1; remove(item_statuette); remove(item_temple_disk); remove(item_legend_of_temple); remove(item_legend_of_dark_source); remove(item_legend_of_first_city); remove(item_legend_of_hunter); remove(item_navjiarr_chart_1); remove(item_navjiarr_chart_2); remove(item_navjiarr_chart_3); walk("iyh_outro_learr_2"); ]]}; {tag="rel_not_ok"}; {"Это очень поможет нам в поисках Уильяма", [[ Леарр отвечает: "Я с-вами-не-говорю. Не позволю-реликвии-оставить. Вы можете-наш-город-посетить и реликвии-смотреть". ]], code [[ remove(item_statuette); remove(item_temple_disk); remove(item_legend_of_temple); remove(item_legend_of_dark_source); remove(item_legend_of_first_city); remove(item_legend_of_hunter); remove(item_navjiarr_chart_1); remove(item_navjiarr_chart_2); remove(item_navjiarr_chart_3); walk("iyh_outro_learr_2"); ]]}; {"Хорошо, забирайте реликвии", [[ Леарр отвечает: "Я с-вами-не-говорю. Не позволю-реликвии-оставить. Вы можете-наш-город-посетить и реликвии-смотреть". ]], code [[ rel_learr = rel_learr + 1; remove(item_statuette); remove(item_temple_disk); remove(item_legend_of_temple); remove(item_legend_of_dark_source); remove(item_legend_of_first_city); remove(item_legend_of_hunter); remove(item_navjiarr_chart_1); remove(item_navjiarr_chart_2); remove(item_navjiarr_chart_3); walk("iyh_outro_learr_2"); ]]}; }; }; iyh_outro_learr_2 = room { nam = "Атлантида"; dsc = [[ Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое что для вас". ]]; obj = { vroom("Продолжить", "atl_luna_drake_room"); }; };