Changeset - 49463fad5b5b
[Not reviewed]
default
0 1 0
Silverwing - 5 years ago 2019-07-24 17:14:09

Typo
1 file changed with 1 insertions and 1 deletions:
0 comments (0 inline, 0 general)
atlantis_iyhehevjiarr.lua
Show inline comments
 
atl_lev_first_sail = room {
 
    nam = "Левиафан";
 
    hideinv = true;
 
    dsc = [[
 
        Вы поднимаетесь на борт Левиафана и ждете, когда соберется команда. Меньше, чем через пятнадцать минут все поднимаются на борт и вы можете отправляться.
 
    ]];
 
    obj = {
 
        vway("Продолжить", "{Продолжить}", "leviathan_captains_cabin");
 
    };
 
};
 
 
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;
 
    leviathan = true;
 
    entered = function(s)
 
        make_snapshot();
 
        if atl_iyh_shockfish_left then
 
            poff('wait');
 
        end;
 
 
        if (not s.visited) then
 
            atl_iyh_state = 7;
 
            return [[Вы прибываете на место. ]];
 
        end;
 
    end;
 
    dsc = function(s)
 
        if atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left then
 
            pr [[Через иллюминаторы вы видите высокую скалу, простирающуюся на многие километры в обе стороны. В скале вырезаны массивные каменные двери храма, застывшие в открытом состоянии. Над дверьми вы видите небольшой козырек, поддерживаемый массивными колоннами. Отсюда вы видите, как время от времени из дверей храма выплывает огромный скат. ]];
 
        elseif atl_iyh_entrance_destroyed then
 
            pr [[Через иллюминаторы вы видите высокую скалу, простирающуюся на многие километры в обе стороны. В одном из мест скалы недавно произошел обвал, похоронив под собой вход в древний навьярский храм. ]];
 
        else
 
            pr [[Через иллюминаторы вы видите высокую скалу, простирающуюся на многие километры в обе стороны. В скале вырезаны массивные каменные двери храма, застывшие в открытом состоянии. Над дверьми вы видите небольшой козырек, поддерживаемый массивными колоннами. ]];
 
        end;
 
 
        if (not s.visited) then
 
            s.visited = true;
 
            if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
                pr [[Леарр поднимается в рубку. При виде храма, она восклицает: "Мы должны-попасть туда!" ]];
 
            end;
 
        end;
 
    end;
 
    phr = {
 
        {tag="advance", always=true, "[Подойти ближе]", [[Послушные вашей воле, двигатели Левиафана приводят субмарину в движение и вы плавно приближаетесь ко входу в храм. ]], code [[
 
            move(submarine_leviathan, "iyh_near_temple_foot");
 
            walk('iyh_near_temple');
 
        ]]};
 
        {tag="wait", "[Ждать]", [[Вы решаете подождать до наступления ночи и это правдывает себя. Как только последние лучи солнца перестают пробиваться сквозь толщу воды, скат выбирается из своего логова и отправляется на охоту. Без сомнения, он вернется утром, но у вас есть целая ночь, чтобы сделать все, что нужно. ]], code [[
 
        {tag="wait", "[Ждать]", [[Вы решаете подождать до наступления ночи и это оправдывает себя. Как только последние лучи солнца перестают пробиваться сквозь толщу воды, скат выбирается из своего логова и отправляется на охоту. Без сомнения, он вернется утром, но у вас есть целая ночь, чтобы сделать все, что нужно. ]], code [[
 
            lifeon(iyh_far_from_entrance);
 
            atl_iyh_shockfish_away = 30;
 
        ]]};
 
        {tag="light_temple", always=true, "[Осветить вход в храм]", function(s)
 
            if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then
 
                iyh_fight.distance = 1000; walk('iyh_fight');
 
                return [[Мощный луч света падает на вход в храм. Вы видите внутри какое-то движение и изнутри выплывает огромный скат. ]];
 
            else
 
                return [[Мощный луч света падает на вход в храм. Ничего не происходит. ]];
 
            end;
 
        end};
 
        {tag="light_wall_r", "[Осветить скалы справа от храма]", [[Мощный луч света освещает скалы по правую сторону от храма. Он плавно скользит по поверхности скалы, пока вы не натыкаетесь на то, что отсюда кажется вам каким-то ущельем. Возможно следует изучить его? ]], code [[
 
            iyh_near_temple:pon('ravine');
 
            pon('ravine');
 
        ]]};
 
        {tag="light_wall_l", "[Осветить скалы слева от храма]", [[Мощный луч света освещает скалы по левую сторону от храма. Он плавно скользит по поверхности скалы, однако так и не натыкается ни на что интересное. ]]};
 
        {tag="ravine", false, always=true, "[Подойти ко входу в ущелье]", [[Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. ]], code [[
 
            move(submarine_leviathan, "iyh_ravine_entry_foot");
 
            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
 
                lifeoff(iyh_far_from_entrance);
 
                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) and not have(iyh_item_amulet) 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 and (where(pl).temple or where(pl).leviathan and where(submarine_leviathan) == iyh_near_temple_foot) then
 
                pr "Уже почти рассвело. Скат вот-вот вернется. ";
 
            elseif atl_iyh_shockfish_away < 10 and (where(pl).temple or (pl).leviathan and where(submarine_leviathan) == iyh_near_temple_foot) 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;
 
    nosave = true;
 
    noautosave = true;
 
    dsc = function(s)
 
        pr("Вы находитесь от ската на расстоянии около "..tostring(math.abs(s.distance)).." метров. ");
 
        pr("Храм находится примерно на расстоянии " .. tostring(math.abs(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 or s.distance < -1000) then
 
            if (s.shockfish_health < 20 or atl_iyh_entrance_destroyed) then
 
                pr "Скат уплывает и вы остаетесь одни. ";
 
                atl_iyh_shockfish_left = true;
 
                submarine_leviathan.hull_integrity = 100;
 
                submarine_leviathan.electric_integrity = 100;
 
                submarine_leviathan.torpedoes = 2;
 
                walk("iyh_far_from_entrance");
 
                return;
 
            else
 
                pr "Вы удаляетесь достаточно далеко и скат возвращается к себе в жилище. ";
 
                s.shockfish_health = 100;
 
                submarine_leviathan.hull_integrity = 100;
 
                submarine_leviathan.electric_integrity = 100;
 
                submarine_leviathan.torpedoes = 2;
 
                walk("iyh_far_from_entrance");
 
                return;
 
            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_temple',
 
        '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;
 
            
 
            pr [[Торпеда попадает в аккурат над храмом и вход оказывается завален тяжелыми глыбами. ]];
 
            if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
                pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь?!"^Она с неприязнью смотрит на вас и удаляется к себе в каюту. ]];
 
                rel_learr = rel_learr - 1;
 
                remove(char_learr, char_learr.home);
 
                char_learr.home = "leviathan_cabin_3";
 
                put(char_learr, "leviathan_cabin_3");
 
                leviathan_cabin_3.lock = true;
 
            end;
 
            s:disable();
 
        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 = 100;
 
                submarine_leviathan.hull_integrity = 100;
 
                submarine_leviathan.electric_integrity = 100;
 
                submarine_leviathan.torpedoes = 2;
 
 
                iyh_fight.shockfish_health = 0;
 
                atl_iyh_shockfish_dead = true;
 
                pr "Вы стреляете торпедой в ската. Торпеда взрывается достигнув цели и разрывает ската. Вода краснеет от крови, а вы теперь можете безопасно приблизиться к храму. ";
 
 
                if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
                    pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь ненавистный-a'rr?!"^После этого она убегает к себе в каюту. ]];
 
                    rel_learr = -99;
 
                    remove(char_learr, char_learr.home);
 
                    char_learr.home = "leviathan_cabin_3";
 
                    put(char_learr, "leviathan_cabin_3");
 
 
                    leviathan_cabin_3.lock = true;
 
                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
0 comments (0 inline, 0 general)