Changeset - 6ed973c10053
[Not reviewed]
default
0 5 0
Silverwing - 8 years ago 2016-11-09 16:46:17

Chapter 2 complete
5 files changed with 1510 insertions and 5 deletions:
0 comments (0 inline, 0 general)
game_over.lua
Show inline comments
 
game_over_za_temple = game_over("game_over_za_temple", [[
 
    Развернув субмарину вы подставили винт под удары ваших противников. Несколько попаданий в винт выводят его из строя и Левиафан оказывается обездвижен. Теперь вы совершенно беззащитны перед атаками противника. 
 
]]);
 
 
game_over_kraken = game_over("game_over_kraken", [[
 
    От сильных ударов корпус субмарины начал расходиться по швам. В помещения хлынула вода. Озверевший кракен продолжает хлестать Левиафан своими щупальцами. Наконец, чудовище хватает подлодку и отправляется вместе с ней в бездну. К этому времени на борту уже не осталось никого живого, кроме, быть может, навьяров. 
 
]]);
 
 
game_over_za_fight = game_over("game_over_za_fight", [[
 
    Стражники навьяров - опасные противники. Очередной удар копья проделывает дыру в вашем скафандре и он наполняется водой. Вскоре вы задыхаетесь. 
 
]]);
 
 
game_over_za_learr = game_over("game_over_za_learr", [[
 
     Леарр пытается оттолкнуть вас от штурвала и остановить Левиафан. Вы делаете резкий поворот и субмарина кренится на бок. Леарр, не удержавшись на ногах, падает. Навьярка кричит в бессильной ярости, когда вы пролетаете над воротами Заисланотра. Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Еще через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку - отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет.
 
]]);
 
 
game_over_za_anna = game_over("game_over_za_learr", [[
 
     Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Вы слышите едва различимый среди шума двигателей голос Анны: "Это была плохая идея". Через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку - отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет.
 
]]);
 
items.lua
Show inline comments
 
@@ -672,27 +672,38 @@ item_deep_key = obj {
 
    dsc = [[
 
        На пьедестале вы видите небольшой блестящий {предмет}.
 
    ]];
 
    inv = [[
 
        Небольшая полупрозрачная пирамидка из неизвестного материала. Гладкая и холодная на ощупь. На гранях пирамидки нанесены непонятные символы. 
 
    ]];
 
    tak = [[
 
        Это оказалась небольшая полупрозрачная пирамидка. Вы забираете ее себе. 
 
    ]];
 
};
 
 
item_navjiarr_chart_z = obj {
 
nam = "item_navjiarr_chart_z";
 
    nam = "item_navjiarr_chart_z";
 
    disp = "Навьярская табличка";
 
    dsc = [[
 
        На пьедестале лежит небольшая металлическая {табличка}.
 
    ]];
 
    tak = function(s)
 
        
 
        return [[
 
            Вы поднимаете предмет - это небольшая металлическая табличка. Вдалеке вы слышите скрежет камней - дверь храма снова открыта. 
 
        ]];
 
    end;
 
    inv = [[
 
        Металлическая табличка, на которую нанесены странные обозначения. 
 
    ]];
 
};
 
 
item_naethvjirr_key = obj {
 
    nam = "item_naethvjirr_key";
 
    disp = "Ключ из древнего храма";
 
    dsc = [[
 
        На пьедестале лежит небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. 
 
    ]];
 
    inv = [[
 
        Небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. Пластинка с обеих сторон покрыта тонкими металлическими нитями. 
 
    ]];
 
};
 
\ No newline at end of file
journey_temple.lua
Show inline comments
 
dt_labyrinth_foot = room {
 
    nam = "dt_labyrinth_foot";
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    handwheel_room = "dt_labyrinth";
 
};
 

	
 
dt_labyrinth_bridge = room {
 
    nam = "dt_labyrinth_bridge";
 
    no_exit = [[
 
         Вы не сможете высадиться здесь. 
 
    ]];
 
    handwheel_room = "dt_labyrinth";
 
};
 

	
 
--id, dsc, directions, where, leviathan_where
 
dt_labyrinth_map = {
 
    ["01"] = {
 
        dsc = [[
 
            Вы находитесь у входа в сложный лабиринт ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "02",
 
        where = dt_labyrinth_foot
 
    };
 
    ["02"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "01",
 
        e = "03",
 
        where = dt_labyrinth_foot
 
    };
 
    ["03"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        w = "02",
 
        ne = "04",
 
        where = dt_labyrinth_foot
 
    };
 
    ["04"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "03",
 
        nw = "05",
 
        e = "07",
 
        where = dt_labyrinth_foot
 
    };
 
    ["05"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        se = "04",
 
        n = "06",
 
        where = dt_labyrinth_foot
 
    };
 
    ["06"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        s = "05",
 
        where = dt_labyrinth_foot
 
    };
 
    ["07"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        w = "04",
 
        n = "08",
 
        se = "09",
 
        where = dt_labyrinth_foot
 
    };
 
    ["08"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        s = "07",
 
        where = dt_labyrinth_foot
 
    };
 
    ["09"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        w = "33",
 
        ne = "10",
 
        nw = "07",
 
        where = dt_labyrinth_foot
 
    };
 
    ["10"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "11",
 
        sw = "09",
 
        where = dt_labyrinth_foot
 
    };
 
    ["11"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "13",
 
        se = "14",
 
        nw = "12",
 
        sw = "10",
 
        where = dt_labyrinth_foot
 
    };
 
    ["12"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами простирается глубокая расщелина. Она продолжается на северо-запад настолько далеко, насколько хватает мощности прожектора Левиафана, однако, судя по карте, вам нет смысла двигаться в том направлении.
 
        ]], 
 
        se = "11",
 
        where = dt_labyrinth_foot
 
    };
 
    ["13"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "11",
 
        where = dt_labyrinth_foot
 
    };
 
    ["14"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. На юго-востоке вы видите узкий каменный мостик, протянувшийся над бездной. Из отверстия в скале напротив моста исходит яркий свет. 
 
        ]], 
 
        nw = "11",
 
        se = "15",
 
        where = dt_labyrinth_foot
 
    };
 
    ["15"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. Прямо под Левиафаном вы видите узкий каменный мостик, из отверстия в скале напротив которого исходит яркий свет. Мостик слишком узкий и вы не можете высадиться здесь
 
        ]], 
 
        nw = "11",
 
        se = "15",
 
        where = dt_labyrinth_bridge
 
    };
 
    ["16"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "35",
 
        where = dt_labyrinth_foot
 
    };
 
    ["17"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. На северо-западе вы видите узкий каменный мостик, протянувшийся над бездной. Из отверстия в скале напротив моста исходит яркий свет. 
 
        ]], 
 
        nw = "15",
 
        where = dt_labyrinth_foot
 
    };
 
    ["18"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["19"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. на северо-востоке вы видите глубокую расщелину, простирающуюся с северо-запада на юго-восток. над расщелиной висит узкий каменный мостик. Из отверстия в скале напротив него исходит яркий свет. 
 
        ]], 
 
        ne = "15",
 
        w = "20",
 
        where = "dt_temple_ravine"
 
    };
 
    ["20"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "19",
 
        s = "20",
 
        where = dt_labyrinth_foot
 
    };
 
    ["21"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        n = "20",
 
        se = "22",
 
        where = dt_labyrinth_foot
 
    };
 
    ["22"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        nw = "21",
 
        sw = "23",
 
        where = dt_labyrinth_foot
 
    };
 
    ["23"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "22",
 
        w = "24",
 
        where = dt_labyrinth_foot
 
    };
 
    ["24"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "23",
 
        sw = "25",
 
        where = dt_labyrinth_foot
 
    };
 
    ["25"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "24",
 
        nw = "26",
 
        where = dt_labyrinth_foot
 
    };
 
    ["26"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "27",
 
        se = "25",
 
        where = dt_labyrinth_foot
 
    };
 
    ["27"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "28",
 
        sw = "26",
 
        nw = "30",
 
        where = dt_labyrinth_foot
 
    };
 
    ["28"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "27",
 
        nw = "29",
 
        where = dt_labyrinth_foot
 
    };
 
    ["29"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        se = "28",
 
        where = dt_labyrinth_foot
 
    };
 
    ["30"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        se = "27",
 
        w = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["31"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "30",
 
        n = "32",
 
        w = "34",
 
        where = dt_labyrinth_foot
 
    };
 
    ["32"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "33",
 
        s = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["33"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "9",
 
        s = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["34"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "31",
 
        w = "35",
 
        where = dt_labyrinth_foot
 
    };
 
    ["35"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "34",
 
        sw = "16",
 
        where = dt_labyrinth_foot
 
    };
 
};
 

	
 
dt_labyrinth = room {
 
    var {
 
        location = "01";
 
    };
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    nam = "Штурвал Левиафана";
 
    dsc = function(s)
 
        return dt_labyrinth_map[dt_labyrinth.location].dsc;
 
    end;
 
    entered = function(s)
 
        s:update();
 
    end;
 
    update = function(s)
 
        dt_north:disable();
 
        dt_north_east:disable();
 
        dt_east:disable();
 
        dt_south_east:disable();
 
        dt_south:disable();
 
        dt_south_west:disable();
 
        dt_west:disable();
 
        dt_north_west:disable();
 
        if (dt_labyrinth_map[dt_labyrinth.location].n) then
 
            dt_north:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].ne) then
 
            dt_north_east:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].e) then
 
            dt_east:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].se) then
 
            dt_south_east:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].s) then
 
            dt_south:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].sw) then
 
            dt_south_west:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].w) then
 
            dt_west:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].nw) then
 
            dt_north_west:enable();
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("Отойти от штурвала", "leviathan_wheelhouse");
 
    };
 
    obj = {
 
        "dt_north",
 
        "dt_north_east",
 
        "dt_east",
 
        "dt_south_east",
 
        "dt_south",
 
        "dt_south_west",
 
        "dt_west",
 
        "dt_north_west"
 
    };
 
};
 

	
 
dt_north = obj {
 
    nam = "dt_north";
 
    dsc = "{На север}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на север.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].n;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_north_east = obj {
 
    nam = "dt_north_east";
 
    dsc = "{На северо-восток}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на северо-восток.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].ne;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_east = obj {
 
    nam = "dt_east";
 
    dsc = "{На восток}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на восток.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].e;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_south_east = obj {
 
    nam = "dt_south_east";
 
    dsc = "{На юго-восток}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на юго-восток.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].se;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_south = obj {
 
    nam = "dt_south";
 
    dsc = "{На юг}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на юг.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].s;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_south_west = obj {
 
    nam = "dt_south_west";
 
    dsc = "{На юго-запад}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на юго-запад.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].sw;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_west = obj {
 
    nam = "dt_west";
 
    dsc = "{На запад}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на запад.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].w;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_north_west = obj {
 
    nam = "dt_north_west";
 
    dsc = "{На северо-запад}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на северо-запад.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].nw;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_temple_ravine = room {
 
    nam = "dt_temple_ravine";
 
    handwheel_room = "dt_labyrinth";
 
    disp = "Ущелье";
 
    dsc = [[
 
        Вы стоите на дне расщелины. К северо-востоку от вас находится глубокое ущелье. Через ущелье переброшен узкий каменный мостик, на другом конце которого вы видите в скале прямоугольное отверстие явно искусственного происхождения. Из отверстия исходит яркий свет. 
 
    ]];
 
    way = {
 
        kh_vroom("В Левиафан", "leviathan_airlock");
 
        kh_vroom("На мост", "dt_temple_bridge1");
 
    };
 
};
 

	
 
dt_temple_bridge1 = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dt_temple_bridge1";
 
    disp = "Мост над пропастью";
 
    dsc = [[
 
        Вы ступаете на хлипкий мостик. Камни ходят ходуном под вашими ногами, и кажется, что слабая конструкция вот вот рухнет, увлекая вас за собой в бездну. 
 
    ]];
 
    entered = function(s)
 
        char_radcliffe:accompany(false);
 
        char_wright:accompany(false);
 
        char_anna:accompany(false);
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (char_learr.follow) then
 
                pr [[
 
                    Леарр с сомнением смотрит на шаткую постройку и по ее головным плавникам бегут цветные полосы: "Не думаю, что мост выдержит нас обоих. Не бойся, я поплыву над ним".
 
                ]];
 
            end;
 
            if (char_phaetlarr.follow) then
 
                pr [[
 
                    Фаэтларр осматривает мост и по его головным плавникам бегут цветные полосы: "Я бы не рискнул пойти по нему, но у тебя, хевьяр, кажется нет выбора", - навьяр смотрит на вас со странной ухмылкой. 
 
                ]];
 
            end;
 
            if (char_radcliffe.follow) then
 
                pr [[
 
                    В динамиках раздается голос Уолтера Рэдклиффа: "Я не думаю, что мост выдержит нас обоих. Если тебе нужен помощник, то навьяр здесь будет полезнее. К тому же, это их святилище".
 
                ]];
 
            end;
 
            if (char_wright.follow) then
 
                pr [[
 
                    В динамиках раздается голос Джека Райта: "Нам точно стоит идти здесь? Мост не выглядит надежным. Думаю, тебе стоит взять навьяра, если тебе нужен спутник".
 
                ]];
 
            end;
 
            if (char_anna.follow) then
 
                pr [[
 
                    В динамиках раздается голос Анны Рэдклифф: "Думаю, мост без проблем выдержит одного из нас. Удачи. Мне кажется, тебе лучше было бы идти с навьяром".
 
                ]];
 
            end;
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("В ущелье", "dt_temple_ravine");
 
        kh_vroom("Дальше по мосту", "dt_temple_bridge2");
 
    };
 
};
 

	
 
dt_temple_bridge2 = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dt_temple_bridge2";
 
    disp = "Мост над пропастью";
 
    dsc = [[
 
        Вы почти дошли до проема в скале. Вам кажется, что внизу, в бездне движется что-то огромное. 
 
    ]];
 
    entered = function(s)
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (char_learr.follow) then
 
                pr [[
 
                    По головным плавникам Леарр бегут цветные полосы: "Что это? Там, внизу".
 
                ]];
 
            end;
 
            if (char_phaetlarr.follow) then
 
                pr [[
 
                    По головным плавникам Фаэтларра бегут цветные полосы: "Ты видишь это, хевьяр?".
 
                ]];
 
            end;
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("К ущелью", "dt_temple_bridge1");
 
        kh_vroom("В проем", "dt_temple_entrance");
 
    };
 
};
 

	
 
dt_temple_entrance = room {
 
    var {
 
        state = 0;
 
        open = false;
 
    };
 
    nam = "dt_temple_entrance";
 
    disp = "У входа в храм";
 
    dsc = function(s)
 
        if (dt_temple_entrance.open) then
 
            return [[
 
                Вы находитесь в небольшом помещении, ярко освещенном лампами в виде длинных трубок. Стены вокруг покрыты навьярскими письменами. Дверь во внутреннее помещение храма открыта. 
 
            ]];
 
        else
 
            return [[
 
                Вы находитесь в небольшом помещении, ярко освещенном лампами в виде длинных трубок. Стены вокруг покрыты навьярскими письменами. Тяжелая дверь во внутреннее помещение храма заблокирована.
 
            ]];
 
        end;
 
    end;
 
    entered = function(s)
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (char_learr.follow) then
 
                pr [[
 
                    Леарр с интересом рассматривает древние письмена. По ее головным плавникам бегут цветные полосы: "Потрясающе! Это слова наших предков. Тех, кто видел Лсэрианотр собственными глазами, а может даже и самих создателей Спящего в Глубинах!".
 
                ]];
 
            end;
 
            if (char_phaetlarr.follow) then
 
                pr [[
 
                    Фаэтларр бегло осматривает письмена: "Кажется, Блэк кое-что упустил. Хорошо, что мы здесь хевьяр. С этими знаниями мы победим".
 
                ]];
 
            end;
 
        end;
 
    end;
 
    obj = {
 
        "dt_terminal",
 
        "dt_wires"
 
        
 
    };
 
    way = {
 
        kh_vroom("К ущелью", "dt_temple_bridge2");
 
        kh_vroom("В храм", function(s)
 
            if (dt_temple_entrance.open) then
 
                return "dt_temple";
 
            else
 
                pr [[Дверь заперта. ]];
 
                return false;
 
            end;
 
        end);
 
    };
 
};
 

	
 
dt_terminal = obj {
 
    nam = "dt_terminal";
 
    dsc = [[
 
        Рядом с дверью расположен небольшой {пульт} с шестью кнопками и светящимся экраном. 
 
    ]];
 
    act = function(s)
 
        walkin("dt_terminal_room");
 
    end;
 
};
 

	
 
dt_wires = obj {
 
    nam = "dt_wires";
 
    dsc = [[
 
        Под пультом вы видите открытую {панель} с какими-то проводами. 
 
    ]];
 
    act = function(s)
 
        walkin("dt_wires_room");
 
    end;
 
};
 

	
 
dt_terminal_room = room {
 
    var {
 
        code = {};
 
    };
 
    nam = "dt_terminal_room";
 
    disp = "У входа в храм, пульт";
 
    forcedsc = true;
 
    dsc = function(s)
 
        local r = "";
 
        if (#s.code == 0) then
 
            r = "Вы стоите перед небольшим пультом. На экране пусто. ";
 
        else
 
            r = "Вы стоите перед небольшим пультом. На экране вы видите следующую последовательность цветов: ";
 
            for i = 1, #s.code - 1 do
 
                r = r .. dt_wire_colors[s.code[i]] .. ", ";
 
            end;
 
            r = r .. dt_wire_colors[s.code[#s.code]] .. ". ";
 
        end;
 
        r = r .. "Под экраном расположены шесть кнопок. "
 
        return r;
 
    end;
 
    way = {
 
        kh_vroom("Отойти от терминала", "dt_temple_entrance");
 
    };
 
    obj = {
 
        "dt_term1",
 
        "dt_term2",
 
        "dt_term3",
 
        "dt_term4",
 
        "dt_term5",
 
        "dt_term6"
 
    };
 
    check = function(s)
 
        if (#s.code == 4) then
 
            local test = true;
 
            for i = 1, #s.code do
 
                test = test and (s.code[i] == dt_code[i]);
 
            end;
 
            s.code = {};
 
            if (test) then
 
                dt_temple_entrance.open = true;
 
                pr [[ Через несколько мгновений дисплей гаснет. Дверь открывается почти бесшумно, открывая вам доступ к внутреннему залу древнего святилища. ]];
 
            else
 
                pr [[ Через несколько мгновений дисплей гаснет. ]];
 
            end;
 
        end;
 
    end;
 
};
 

	
 
dt_term1 = obj {
 
    nam = "dt_term1";
 
    dsc = "{Нажать фиолетовую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 1) ~= 0 or not dt_wires_room.connections[1]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[1]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term2 = obj {
 
    nam = "dt_term2";
 
    dsc = "{Нажать синюю кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 2) ~= 0 or not dt_wires_room.connections[2]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[2]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term3 = obj {
 
    nam = "dt_term3";
 
    dsc = "{Нажать зеленую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 3) ~= 0 or not dt_wires_room.connections[3]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[3]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term4 = obj {
 
    nam = "dt_term4";
 
    dsc = "{Нажать желтую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 4) ~= 0 or not dt_wires_room.connections[4]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[4]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term5 = obj {
 
    nam = "dt_term5";
 
    dsc = "{Нажать оранжевую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 5) ~= 0 or not dt_wires_room.connections[5]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[5]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term6 = obj {
 
    nam = "dt_term6";
 
    dsc = "{Нажать красную кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 6) ~= 0 or not dt_wires_room.connections[6]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[6]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_wire_colors = {
 
    "фиолетовый",
 
    "синий",
 
    "зеленый",
 
    "желтый",
 
    "оранжевый",
 
    "красный"
 
};
 

	
 
dt_wires_room = dlg {
 
    var {
 
        connections = {
 
            1,
 
            2,
 
            3,
 
            4,
 
            5,
 
            6
 
        };
 
        selected = nil;
 
    };
 
    nam = "dt_wires_room";
 
    disp = "У входа в храм, панель";
 
    dsc = [[
 
        Перед вами открытая панель, за которой находятся шесть проводов, подключенные к своим разъемам. Провода отличаются цветами. 
 
    ]]; 
 
    choose_socket = function(s)
 
        pon("s0");
 
        pon("s1");
 
        pon("s2");
 
        pon("s3");
 
        pon("s4");
 
        pon("s5");
 
        for conn = 1, #dt_wires_room.connections do
 
            if (dt_wires_room.connections[conn] == 1) then
 
                poff("s0");
 
            elseif (dt_wires_room.connections[conn] == 2) then
 
                poff("s1");
 
            elseif (dt_wires_room.connections[conn] == 3) then
 
                poff("s2");
 
            elseif (dt_wires_room.connections[conn] == 4) then
 
                poff("s3");
 
            elseif (dt_wires_room.connections[conn] == 5) then
 
                poff("s4");
 
            elseif (dt_wires_room.connections[conn] == 6) then
 
                poff("s5");
 
            end;
 
        end;
 
        psub("socket");
 
    end;
 
    phr = { 
 
        {tag="wire"};
 
        {
 
            tag = "w0", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[1] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[1]] .. " разъем";
 
                    return "Отсоединить фиолетовый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать фиолетовый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[1] ~= nil) then
 
                    dt_wires_room.connections[1] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 1;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w1", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[2] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[2]] .. " разъем";
 
                    return "Отсоединить синий провод (".. connect .. ")";
 
                else
 
                    return "Выбрать синий провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[2] ~= nil) then
 
                    dt_wires_room.connections[2] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 2;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w2", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[3] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[3]] .. " разъем";
 
                    return "Отсоединить зеленый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать зеленый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[3] ~= nil) then
 
                    dt_wires_room.connections[3] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 3;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w3", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[4] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[4]] .. " разъем";
 
                    return "Отсоединить желтый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать желтый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[4] ~= nil) then
 
                    dt_wires_room.connections[4] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 4;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w4", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[5] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[5]] .. " разъем";
 
                    return "Отсоединить оранжевый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать оранжевый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[5] ~= nil) then
 
                    dt_wires_room.connections[5] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 5;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w5", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[6] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[6]] .. " разъем";
 
                    return "Отсоединить красный провод (".. connect .. ")";
 
                else
 
                    return "Выбрать красный провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[6] ~= nil) then
 
                    dt_wires_room.connections[6] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 6;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "leave", always = true, "Отойти от панели", code = [[ walk("dt_temple_entrance"); ]]
 
        };
 
        {tag="socket"};
 
        {
 
            tag = "s0", always = true,
 
            "В фиолетовый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 1;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s1", always = true,
 
            "В синий разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 2;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s2", always = true,
 
            "В зеленый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 3;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s3", always = true,
 
            "В желтый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 4;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s4", always = true,
 
            "В оранжевый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 5;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s5", always = true,
 
            "В красный разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 6;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
    };   
 
};
 

	
 
dt_wire0 = obj {
 
    nam = "dt_wire0";
 
    dsc = function(s)
 
        local connect = "не подключен";
 
        if (dt_wires_room.connections[1] ~= nil) then
 
            connect = dt_wire_colors[dt_wires_room.connections[1]] .. "разъем";
 
        end;
 
        return "Выбрать фиолетовый провод (".. connect .. ")^";
 
    end;
 
};
 

	
 
dt_temple = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dt_temple";
 
    disp = "Древний храм";
 
    dsc = [[
 
        Вы находитесь в огромном зале, высеченном в скале древними навьярами. 
 
    ]];
 
    obj = {
 
        "dt_walls",
 
        "dt_pedestal",
 
        "dt_screens",
 
        "item_naethvjirr_key"
 
    };
 
    way = {
 
        kh_vroom("Выйти", "dt_temple_entrance");
 
    };
 
};
 

	
 
dt_walls = obj {
 
    nam = "dt_walls";
 
    dsc = [[
 
        Стены зала, освещенные такими же лампами, как и внешнее помещение, украшены множеством предостерегающих рисунков и символов. 
 
    ]];
 
};
 

	
 
dt_pedestal = obj {
 
    nam = "dt_pedestal";
 
    dsc = [[
 
        В центре зала установлен массивный металлический пьедестал.
 
    ]];
 
};
 

	
 
dt_screens = obj {
 
    nam = "dt_screens";
 
    dsc = [[
 
        Вокруг пьедестала расположено множество экранов, на которых цветными полосами навьярского языка горят предупреждения об опасности использования предмета, хранящегося в этом зале. 
 
    ]];
 
}
 

	
 
dt_fight = room {
 
    var {
 
        state = 0;
 
        has_shot = false;
 
        rotation = 90;
 
        dir = 0;
 
        tentacles = {
 
            {hp=200, dir=0, away = 0 };
 
            {hp=200, dir=1, away = 0 };
 
            {hp=200, dir=2, away = 0 };
 
            {hp=200, dir=3, away = 0 };
 
            {hp=200, dir=4, away = 0 };
 
        };
 
    };
 
    nam = "dt_fight";
 
    disp = "Левиафан, рубка";
 
    forcedsc = true;
 
    entered = function(s)
 
        s:maketurn();
 
        if (s.state == 0) then
 
            s.state = 1;
 
            local dirs = {0,1,2,3,4,5,6,7};
 
            for i = 1, #s.tentacles do
 
                local cd = rnd(#dirs);
 
                s.tentacles[i].dir = dirs[cd];
 
                table.remove(dirs, cd);
 
                print(#dirs);
 
            end;
 
        end;
 
    end;
 
    eval_tentacle = function(s, tentacle)
 
        if (tentacle.hp <= 70) then
 
            return [[Серьезно раненое щупальце ]];
 
        elseif (tentacle.hp <= 140) then
 
            return [[Раненое щупальце ]];
 
        elseif (tentacle.hp < 200) then
 
            return [[Легко раненое щупальце ]];
 
        else
 
            return [[Щупальце ]];
 
        end;
 
    end;
 
    dsc = function(s)
 
        local fr = s.dir + 1;
 
        local r = s.dir + 2;
 
        local br = s.dir + 3;
 
        local b = s.dir + 4;
 
        local fl = s.dir - 1;
 
        local l = s.dir - 2;
 
        local bl = s.dir - 3;
 
        if (fr > 7) then
 
            fr = fr - 8;
 
        end;
 
        if (r > 7) then
 
            r = r - 8;
 
        end;
 
        if (br > 7) then
 
            br = br - 8;
 
        end;
 
        if (b > 7) then
 
            b = b - 8;
 
        end;
 
        if (fl < 0) then
 
            fl = fl + 8;
 
        end;
 
        if (l < 0) then
 
            l = l + 8;
 
        end;
 
        if (bl < 0) then
 
            bl = bl + 8;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            pr(s.tentacles[i].hp .. " ");
 
        end;
 
        pr("^");
 
        pr [[Щупальца кракена тянутся к Левиафану. ]];
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == s.dir and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится прямо перед субмариной. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == fr and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится спереди и справа от субмарины. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == fl and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится спереди и слева от субмарины. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == r and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится справа по борту. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == l and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится слева по борту. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == b and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == bl and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади и слева. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == br and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади и справа. ]]);
 
            end;
 
        end;
 
    end;
 
    maketurn = function(s)
 
        local dcnt = 0;
 
        if (s.has_shot) then
 
            local fr = s.dir + 1;
 
            local r = s.dir + 2;
 
            local br = s.dir + 3;
 
            local b = s.dir + 4;
 
            local fl = s.dir - 1;
 
            local l = s.dir - 2;
 
            local bl = s.dir - 3;
 
            if (fr > 7) then
 
                fr = fr - 8;
 
            end;
 
            if (r > 7) then
 
                r = r - 8;
 
            end;
 
            if (br > 7) then
 
                br = br - 8;
 
            end;
 
            if (b > 7) then
 
                b = b - 8;
 
            end;
 
            if (fl < 0) then
 
                fl = fl + 8;
 
            end;
 
            if (l < 0) then
 
                l = l + 8;
 
            end;
 
            if (bl < 0) then
 
                bl = bl + 8;
 
            end;
 
            s.has_shot = false;
 
            s.rotation = 90;
 
            for i = 1, #s.tentacles do 
 
                if (s.tentacles[i].hp > 0) then
 
                    if (s.tentacles[i].away > 0) then
 
                        s.tentacles[i].away = s.tentacles[i].away - 1;
 
                        if (s.tentacles[i].away == 0) then
 
                            --TODO show up somewhere
 
                            local dirs = {};
 
                            for j = 1, #s.tentacles do 
 
                                if (s.tentacles[j].hp > 0 and s.tentacles[j].away == 0) then
 
                                    table.insert(dirs, s.tentacles[j].dir);
 
                                end;
 
                            end;
 
                            local newdir;
 
                            repeat 
 
                                newdir = rnd(8) - 1;
 
                            until ArrayUtils.indexOf(dirs, newdir) == 0;
 
                            print(newdir);
 
                            s.tentacles[i].dir = newdir;
 
                            
 
                            if (s.tentacles[i].hp <= 70) then
 
                                pr [[Серьезно раненое щупальце ]];
 
                            elseif (s.tentacles[i].hp <= 140) then
 
                                pr [[Раненое щупальце ]];
 
                            elseif (s.tentacles[i].hp < 200) then
 
                                pr [[Легко раненое щупальце ]];
 
                            end;
 
                            if (newdir == f) then
 
                                pr [[подтягивается спереди. ]];
 
                            elseif (newdir == fr) then
 
                                pr [[подтягивается спереди справа. ]];
 
                            elseif (newdir == fl) then
 
                                pr [[подтягивается спереди слева. ]];
 
                            elseif (newdir == r) then
 
                                pr [[подтягивается справа. ]];
 
                            elseif (newdir == l) then
 
                                pr [[подтягивается слева. ]];
 
                            elseif (newdir == br) then
 
                                pr [[подтягивается сзади справа. ]];
 
                            elseif (newdir == bl) then
 
                                pr [[подтягивается сзади слева. ]];
 
                            elseif (newdir == b) then
 
                                pr [[подтягивается сзади. ]];
 
                            end;
 
                        end;
 
                    else
 
                        --TODO hit leviathan or hide up
 
                        if (rnd(8) > 1) then
 
                            submarine_leviathan.hull_integrity = submarine_leviathan.hull_integrity - 5;
 
                            pr [[Кракен ударяет Левиафан щупальцем. ]];
 
                        else
 
                            s.tentacles[i].away = 1;
 
                            pr [[Кракен отдергивает одно из щупалец. ]];
 
                        end;
 
                    end;
 
                else
 
                    dcnt = dcnt + 1;
 
                end;
 
            end;
 
        end;
 
        if (dcnt > 2) then
 
            walk("dt_kraken_victory");
 
        end;
 
        
 
        dt_f_rotate_ccw45:enable();
 
        dt_f_rotate_cw45:enable();
 
        dt_f_sonic:enable();
 
        if (submarine_leviathan.torpedoes == 0) then
 
            dt_f_torpedo:disable();
 
        else
 
            dt_f_torpedo:enable();
 
        end;
 
        if (submarine_leviathan.torpedoes == 2) then
 
            dt_f_recharge:disable();
 
        else
 
            dt_f_recharge:enable();
 
        end;
 
        if (s.rotation < 45) then
 
            dt_f_rotate_ccw45:disable();
 
            dt_f_rotate_cw45:disable();
 
        end;
 
        if (s.has_shot) then
 
            dt_f_torpedo:disable();
 
            dt_f_sonic:disable();
 
        end;
 
        
 
        if (submarine_leviathan.hull_integrity <= 0) then
 
            walk("game_over_kraken");
 
        end;
 
    end;
 
    obj = {
 
        "dt_f_rotate_ccw45",
 
        "dt_f_rotate_cw45",
 
        "dt_f_torpedo",
 
        "dt_f_sonic",
 
        "dt_f_recharge",
 
        "dt_f_wait"
 
    };
 
};
 

	
 
dt_f_rotate_ccw45 = obj {
 
    nam = "dt_f_rotate_ccw45";
 
    dsc = "{Повернуть на 45 градусов против часовой стрелки}^";
 
    act = function(s)
 
        dt_fight.dir = dt_fight.dir - 1;
 
        if (dt_fight.dir < 0) then
 
            dt_fight.dir = dt_fight.dir + 8;
 
        end;
 
        dt_fight.rotation = dt_fight.rotation - 45;
 
        pr "Субмарина поворачивает против часовой стрелки. ";
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_rotate_cw45 = obj {
 
    nam = "dt_f_rotate_cw45";
 
    dsc = "{Повернуть на 45 градусов по часовой стрелке}^";
 
    act = function(s)
 
        dt_fight.dir = dt_fight.dir + 1;
 
        if (dt_fight.dir > 7) then
 
            dt_fight.dir = dt_fight.dir - 8;
 
        end;
 
        dt_fight.rotation = dt_fight.rotation - 45;
 
        pr  "Субмарина поворачивает по часовой стрелке. ";
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_torpedo = obj {
 
    nam = "dt_f_torpedo";
 
    dsc = "{Выстрелить торпедой}^";
 
    act = function(s)
 
        pr "Вы выпускаете торпеду. ";
 
        dt_fight.has_shot = true;
 
        submarine_leviathan.torpedoes = submarine_leviathan.torpedoes - 1;
 
        for i=1, #dt_fight.tentacles do
 
            if dt_fight.tentacles[i].dir == dt_fight.dir and dt_fight.tentacles[i].hp > 0 and dt_fight.tentacles[i].away == 0 then
 
                dt_fight.tentacles[i].hp = dt_fight.tentacles[i].hp - 70;
 
                dt_fight.tentacles[i].away = 2;
 
                if (dt_fight.tentacles[i].hp > 0) then
 
                    pr "Торпеда попадает в одно из щупалец, нанеся ему существенный урон. Кракен резко отдергивает его. ";
 
                else
 
                    pr "Щупальце отрывает взрывом. Кракен бьется в конвульсиях. ";
 
                end;
 
            end;
 
        end;    
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_sonic = obj {
 
    nam = "dt_f_sonic";
 
    dsc = "{Выстрелить из звуковой пушки}^";
 
    act = function(s)
 
        dt_fight.has_shot = true;
 
        pr [[Вы стреляете из звуковой пушки. ]];
 
        local fr = dt_fight.dir + 1;
 
        local fl = dt_fight.dir - 1;
 
        if (fr > 7) then
 
            fr = fr - 8;
 
        end;
 
        if (fl < 0) then
 
            fl = fl + 8;
 
        end;
 
        local hit = false;
 
        for i=1, #dt_fight.tentacles do
 
            if (dt_fight.tentacles[i].dir == dt_fight.dir or dt_fight.tentacles[i].dir == fr or dt_fight.tentacles[i].dir == fl) and dt_fight.tentacles[i].hp > 0 and dt_fight.tentacles[i].away == 0 then
 
                hit = true;
 
                dt_fight.tentacles[i].hp = dt_fight.tentacles[i].hp - 20;
 
                dt_fight.tentacles[i].away = 3;
 
                if (dt_fight.tentacles[i].hp <= 0) then
 
                    pr "Одно из щупалец выведено из строя. ";
 
                end;
 
            end;
 
        end;    
 
        if (hit) then
 
            pr [[
 
                Кракен резко отдергивает щупальца, попавшие в область действия звуковой пушки. 
 
            ]];
 
        end;
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_recharge = obj {
 
    nam = "dt_f_recharge";
 
    dsc = "{Перезарядить торпедные аппараты}^";
 
    act = function(s)
 
        submarine_leviathan.torpedoes = 2;
 
        if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0 or ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then
 
            pr "Вы отдаете по телефону приказ перезарядить торпедные аппараты. ";
 
            dt_fight:maketurn();
 
        else
 
            pr "Вы спускаетесь вниз, чтобы перезарядить торпедные аппараты. ";
 
            dt_fight.has_shot = true;
 
            dt_fight:maketurn();
 
            dt_fight.has_shot = true;
 
            dt_fight:maketurn();
 
            pr "Вы возвращаетесь в рубку, чтобы продолжить бой. "
 
        end;
 
    end;
 
};
 

	
 

	
 
dt_f_wait = obj {
 
    nam = "dt_f_wait";
 
    dsc = "{Ждать}^";
 
    act = function(s)
 
        pr "";
 
        dt_fight.has_shot = true;
 
        dt_fight.rotation = 0;
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_kraken_victory = cutscene("dt_kraken_victory", "Левиафан, рубка", [[
 
    После очередного выстрела Левиафана, кракен исчезает в глубинах, оставив вас в покое. 
 
]], "leviathan_wheelhouse");
 
\ No newline at end of file
journey_zayslanotrr.lua
Show inline comments
 
global {
 
    za_convoy_gone = false;
 
};
 

	
 
za_gate_foot = room {
 
    nam = "Вход в Заисланотр";
 
    handwheel_room = "za_gate";
 
    underwater = true;
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    view = [[
 
        Через иллюминаторы вы видите перед собой высокие металлические ворота Заисланотра. С обеих сторон от них стоят две смотровые башни, на вершинах которых горят красные огоньки. 
 
    ]];
 
};
 

	
 
@@ -132,25 +136,25 @@ za_convoy = {
 
    position = null;
 
    direction = 'za_cross_6';
 
    index = 1;
 
    life = function(s)
 
        local loc = stead.deref(here());
 
        for i = 1, #za_convoy_messages do
 
            if (za_convoy_messages[i][1] == loc and za_convoy_messages[i][2] == za_convoy.position) then
 
                pr(za_convoy_messages[i][3]);
 
            end;
 
        end;
 
        if (za_convoy.index > #za_convoy_route) then
 
            --TODO Конвой ушол
 
            print("Konvoy left");
 
            za_convoy_gone = true;
 
            timer:stop();
 
            game.timer = null;
 
            lifeoff(za_convoy);
 
        else
 
            za_convoy.direction  = za_convoy_route[za_convoy.index];
 
            if (loc == za_convoy.position) then
 
                --TODO Бой начинается
 
                timer:stop();
 
                game.timer = null;
 
                lifeoff(za_convoy);
 
                enter(za_phaetlarr_fight_intro);
 
            end;
 
@@ -926,31 +930,66 @@ za_deadend_5 = za_deadend {
 

	
 
za_street_32 = za_street {
 
    nam = "za_street_32";
 
    way = {
 
        kh_vroom("На запад", "za_cross_18");
 
        kh_vroom("На восток", "za_cross_17");
 
    };
 
};
 

	
 
za_cross_18 = za_cross {
 
    nam = "za_cross_18";
 
    dsc = [[
 
        Вы находитесь посреди перекрестка рядом с тюрьмой Заисланотра. Рядом с собой в стене здания вы видите небольшой зарешеченное окошко. 
 
        Вы находитесь посреди перекрестка рядом с тюрьмой Заисланотра. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", "za_deadend_6");
 
        kh_vroom("На запад", "za_street_33");
 
        kh_vroom("На восток", "za_street_32");
 
    };
 
    obj = {
 
        "za_prison_window";
 
    };
 
};
 

	
 
za_prison_window = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = "za_prison_window";
 
    dsc = [[
 
        Рядом с собой в стене здания вы видите небольшой зарешеченное {окошко}. 
 
    ]];
 
    act = function(s)
 
        if (s.state == 0) then
 
            if (za_convoy_gone) then    
 
                return [[
 
                    В камере по ту сторону окна находится тот самый навьяр, которого вы видели в сопровождении конвоя. 
 
                ]];
 
            else 
 
                return [[
 
                    Здесь нет ничего интересного. 
 
                ]];
 
            end;
 
        else
 
            return [[
 
                Вам здесь больше нечего делать. 
 
            ]];
 
        end;
 
    end;
 
    used = function (s, o)
 
        if (o == item_toolbox) then
 
            walk("za_phaetlarr_free");
 
        end;
 
    end;
 
};
 

	
 
za_deadend_6 = za_deadend {
 
    nam = "za_deadend_6";
 
    way = {
 
        kh_vroom("На север", "za_cross_18");
 
    };
 
};
 

	
 
za_street_33 = za_street {
 
    nam = "za_street_33";
 
    way = {
 
@@ -1794,13 +1833,37 @@ za_phaetlarr_dlg = dlg {
 
za_char_phaetlarr = npc {
 
    nam = "za_char_phaetlarr";
 
    dsc = [[
 
        {Фаэтларр} стоит рядом и ждет ваших действий. 
 
    ]];
 
    phrases = {
 
        "Фаэтларр ждет ваших действий. "
 
    };
 
};
 

	
 
za_phaetlarr_final = cutscene("za_phaetlarr_final", "Левиафан, Кают-компания", [[
 
    Вы возвращаетесь на Левиафан, где уже собрался весь экипаж. Фаэтларр рассказывает вам как попасть в храм
 
]], "leviathan_wardroom");
 
\ No newline at end of file
 
]], "leviathan_wardroom");
 

	
 
za_phaetlarr_free = cutscene("za_phaetlarr_free", "Заисланотр, улица", function(s)
 
    if (char_learr.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" Глядя на Леарр он немного успокаивается и внимательно следит за ее словами: "Они что-хотели?"
 
        ]];
 
    elseif (char_anna.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Анны: "Он явно не расположен к нам. Но у нас мало выбора. Спроси его, знает ли он где храм"?
 
        ]];
 
    elseif (char_wright.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Джека: "Я думаю, пора возвращаться на корабль. Я надеюсь, он даст нам всю необходимую информацию".
 
        ]];
 
    elseif (char_radcliffe.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Уолтера: "Здесь слишком опасно оставаться. Надо доставить его на Левиафан и там решить, что делать дальше".
 
        ]];
 
    else
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?"
 
        ]];
 
    end;
 
end, za_phaetlarr_dlg);
 
\ No newline at end of file
main.lua
Show inline comments
 
@@ -58,26 +58,31 @@ global {
 
	iraaphaanotrr_temple_found = false;
 
	dypatreanotrr_temple_found = false;
 
    venaedanotrr_temple_found = false;
 
    zayslanotrr_temple_found = false;
 
    deep_temple_found = false;
 
    lseryanotrr_found = false;
 
	
 
	rel_phaetlarr = 0;
 
	rel_walter = 0;
 
	rel_learr = 0;
 
	rel_anna = 0;
 
	rel_jack = 0;
 
    
 
    dt_code = {};
 
    dt_buttons = {};
 
};
 
 
 
 
pl = player {
 
	nam = "player";
 
	disp = "Дэвид Дрейк";
 
    disp2 = "Дрейка";
 
    disp3 = "Дрейку";
 
	where = 'port';
 
	hp = 10;
 
	obj = {'item_umbrella', 'item_charts', 'item_note_1', 'item_money', 
 
	};
 
	-- party array. Should be empty on start
 
	party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]};
 
	companion = nil;
 
@@ -136,24 +141,37 @@ end;
 
game.use = function(s)
 
	return game_use_phrases[rnd(#game_use_phrases)];
 
end;
 
game.inv = "INV: Если вы видите это сообщение - это баг. ";
 
 
require "dbg"
 
 
function init()
 
	---modules init
 
	leviathan_init();
 
	warehouse18_init();
 
	warehouse32_init();
 
    
 
    local nums = {1,2,3,4,5,6};
 
    for i = 1, 4 do 
 
        local index = rnd(#nums);
 
        table.insert(dt_code, nums[index]);
 
        table.remove(nums, index);
 
    end;
 
    nums = {1,2,3,4,5,6};
 
    for i = 1, 3 do 
 
        local index = rnd(#nums);
 
        table.insert(dt_buttons, nums[index]);
 
        table.remove(nums, index);
 
    end;
 
	---game init
 
	pl.where = intro;
 
	---debug	
 
	--[[
 
	---IYH
 
	lifeon(char_learr);
 
	lifeon(char_wright);
 
	lifeon(char_radcliffe);
 
	lifeon(char_anna);
 
	lifeon(char_aikerjarr_lev);
 
	pl.party = {'learr', 'wright', 'radcliffe', 'anna'};
 
	atlantis_found = true;
 
@@ -212,25 +230,25 @@ function init()
 
	put(item_ducttape, pl);
 
	pl.where = "leviathan_airlock";
 
	atlantis_found = true;
 
	move(submarine_leviathan, "atl_aqua_leviathan_dock");
 
    submarine_leviathan:enable();   
 
    	   
 
    --ven_temple_l1.position = "66";   
 
    put(item_ven_tablet, pl);
 
    put(item_harpoon, pl);
 
    put(item_colt, pl);
 
    --ven_shark.position = "55";
 
	--pl.where = "za_plaetlarr_fight";
 
    pl.where = "za_temple_back_entrance";
 
    pl.where = "dt_fight";
 
    move(submarine_leviathan, "za_temple_back_entrance_foot");
 
    char_anna.follow = true;
 
    --pl.where = "ven_chest_look";
 
    --move(ven_shark, "ven_temple_l1");
 
    
 
	--put(item_suit, pl);
 
	
 
	-- pl.where = warehouse_32;
 
	-- pl.where = w32_mgr;
 
	
 
	-- put(item_cogs, pl);
 
	-- put(item_pump_details, pl);
0 comments (0 inline, 0 general)