Changeset - 53bbcc2ec9b8
[Not reviewed]
default
0 2 0
Silverwing - 6 years ago 2018-12-23 17:08:47

Chapter 1-2: Object behaviour change
2 files changed with 2 insertions and 2 deletions:
0 comments (0 inline, 0 general)
atlantis_dyp.lua
Show inline comments
 
@@ -1624,769 +1624,769 @@ dyp_temple_lever_3_2 = obj {
 
        dyp_wall4_b:toggle();
 

	
 
        return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. ";
 
    end;
 
};
 

	
 
dyp_temple_lever_3_3 = obj {
 
    nam = "dyp_temple_lever_1_3";
 
    dsc = [[{Дернуть правый рычаг}^]];
 
    act = function(s)
 
        dyp_wall2_a:toggle();
 
        dyp_wall2_b:toggle();
 
        
 
        dyp_wall3_a:toggle();
 
        dyp_wall3_b:toggle();
 

	
 
        return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. ";
 
    end;
 
};
 

	
 
dyp_temple_lever_4 = obj {
 
    nam = "dyp_temple_lever_4";
 
    dsc = [[{Дернуть рычаг}]];
 
    act = function(s)
 
        dyp_temple_red_room.state = 1;
 
        return "Вы дергаете рычаг, но не замечаеет видимых изменений.";
 
    end;
 
}
 

	
 
dyp_temple_green_room_1 = room {
 
    nam = "dyp_temple_green_room_1";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположены три рычага. В северной стене комнаты расположен проход, ведущий к выходу. ]];
 
    obj = {
 
        "dyp_temple_lever_1_1",
 
        "dyp_temple_lever_1_2",
 
        "dyp_temple_lever_1_3",
 
        "dyp_wall1_a_obj"
 
    };
 
    way = {
 
        kh_vroom("На север", "dyp_temple_cave_green");
 
        "dyp_wall1_a"
 
    }
 
};
 

	
 
dyp_temple_green_room_2 = room {
 
    nam = "dyp_temple_green_room_2";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположены три рычага. ]];
 
    obj = {
 
        "dyp_temple_lever_2_1",
 
        "dyp_temple_lever_2_2",
 
        "dyp_temple_lever_2_3",
 
        "dyp_wall6_a_obj"
 
    };
 
    way = {
 
        "dyp_wall6_a"
 
    }
 
};
 

	
 
dyp_temple_green_room_3 = room {
 
    nam = "dyp_temple_green_room_3";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположены три рычага. ]];
 
    obj = {
 
        "dyp_temple_lever_3_1",
 
        "dyp_temple_lever_3_2",
 
        "dyp_temple_lever_3_3",
 
        "dyp_wall8_b_obj"
 
    };
 
    way = {
 
        "dyp_wall8_b"
 
    };
 
};
 

	
 
dyp_temple_green_room_4 = room {
 
    nam = "dyp_temple_green_room_4";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположен рычаг. ]];
 
    obj = {
 
        "dyp_wall7_b_obj",
 
        "dyp_temple_lever_4"
 
    };
 
    way = {
 
        "dyp_wall7_b"
 
    };
 
};
 

	
 
dyp_temple_green_room_in_1 = room {
 
    nam = "dyp_temple_green_room_in_1";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]];
 
    obj = {
 
        "dyp_wall1_b_obj",
 
        "dyp_wall2_a_obj",
 
        "dyp_wall3_a_obj",
 
    };
 
    way = {
 
        "dyp_wall1_b",
 
        "dyp_wall2_a",
 
        "dyp_wall3_a"
 
    }
 
};
 

	
 
dyp_temple_green_room_in_2 = room {
 
    nam = "dyp_temple_green_room_in_2";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]];
 
    obj = {
 
        "dyp_wall3_b_obj",
 
        "dyp_wall6_b_obj",
 
        "dyp_wall5_a_obj",
 
    };
 
    way = {
 
        "dyp_wall3_b",
 
        "dyp_wall6_b",
 
        "dyp_wall5_a"
 
    }
 
};
 

	
 
dyp_temple_green_room_in_3 = room {
 
    nam = "dyp_temple_green_room_in_3";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]];
 
    obj = {
 
        "dyp_wall2_b_obj",
 
        "dyp_wall4_a_obj",
 
        "dyp_wall8_a_obj",
 
    };
 
    way = {
 
        "dyp_wall2_b",
 
        "dyp_wall4_a",
 
        "dyp_wall8_a"
 
    }
 
};
 

	
 
dyp_temple_green_room_in_4 = room {
 
    nam = "dyp_temple_green_room_in_4";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]];
 
    obj = {
 
        "dyp_wall4_b_obj",
 
        "dyp_wall5_b_obj",
 
        "dyp_wall7_a_obj",
 
    };
 
    way = {
 
        "dyp_wall4_b",
 
        "dyp_wall5_b",
 
        "dyp_wall7_a"
 
    }
 
};
 

	
 
dyp_temple_cave_blue = room {
 
    nam = "dyp_temple_cave_blue";
 
    disp = "Храм Дипатреанотра, пещера";
 
    dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]];
 
    underwater = true;
 
    obj = {
 
        "dyp_temple_statue_blue";
 
    };
 
    entered = function(s)
 
        dyp_temple_blue_room.position = "02";
 
    end;
 
    way = {
 
        kh_vroom("В главный коридор", "dyp_temple_cave_deep");
 
        kh_vroom("В дверь", "dyp_temple_blue_room"):disable();
 
    };
 
};
 

	
 
dyp_temple_statue_blue = obj {
 
    nam = "dyp_temple_statue_blue";
 
    dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится синий камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]];
 
    used = function(s, o)
 
        if o == dyp_item_stone_blue then
 
            remove(dyp_item_stone_blue, me());
 
            path("В дверь"):enable();
 
            return [[Вы помещаете камень в отверстие на поясе статуи и массивная металлическая дверь опускается под пол, открывая проход в большое помещение.]];
 
        end;
 
    end;
 
};
 

	
 
dyp_temple_blue_lever = obj {
 
    var {
 
        state = false;
 
    };
 
    nam = "dyp_temple_blue_lever";
 
    dsc = [[Рядом с вами расположен {рычаг}. ]];
 
    act = function(s)
 
        if s.state then
 
            return [[Рычаг не поддается. ]];
 
        else
 
            -- TODO open the hidden chamber
 
            path("В скрытый проход", dyp_temple_cave_deep):enable();
 
            s.state = true;
 
            return [[Вы дергаете рычаг. Со стороны входа доносится глухой звук движущейся каменной плиты. ]];
 
        end;
 
    end;
 
};
 

	
 
dyp_temple_blue_room = labyrinth {
 
    var {
 
        position = "02";
 
    };
 
    nam = "Храм Дипатреанотра, пещера";
 
    --dsc = "Вы находитесь в большой комнате. Стены покрыты водорослями, източающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ";
 
    dir1 = "На север";
 
    dir2 = "На восток";
 
    dir3 = "На юг";
 
    dir4 = "На запад";
 
    ex = "На север";
 
    underwater = true;
 
    map = {
 
        ["00"] = {
 
            name = [[Вы находитесь в северо-западном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e2 = "01";
 
            e3 = "10";
 
        };
 
        ["01"] = {
 
            name = [[Вы находитесь у северной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e2 = "02";
 
            e3 = "11";
 
            e4 = "00";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 
        ["02"] = {
 
            name = [[Вы находитесь у входа в большую комнату. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e2 = "03";
 
            e3 = "12";
 
            e4 = "01";
 
            ex = "dyp_temple_cave_blue";
 
        };
 
        ["03"] = {
 
            name = [[Вы находитесь у северной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e2 = "04";
 
            e3 = "13";
 
            e4 = "02";
 
        };
 
        ["04"] = {
 
            name = [[Вы находитесь в северо-восточном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e3 = "14";
 
            e4 = "03";
 
        };
 

	
 
        ["10"] = {
 
            name = [[Вы находитесь у западной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "00";
 
            e2 = "11";
 
            e3 = "20";
 
        };
 
        ["11"] = {
 
            name = [[Вы находитесь в северо-западной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "01";
 
            e2 = "12";
 
            e3 = "21";
 
            e4 = "10";
 
        };
 
        ["12"] = {
 
            name = [[Вы находитесь в северной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "02";
 
            e2 = "13";
 
            e3 = "22";
 
            e4 = "11";
 
        };
 
        ["13"] = {
 
            name = [[Вы находитесь в северо-восточной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "03";
 
            e2 = "14";
 
            e3 = "23";
 
            e4 = "12";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 
        ["14"] = {
 
            name = [[Вы находитесь у восточной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "04";
 
            e3 = "24";
 
            e4 = "13";
 
        };
 

	
 
        ["20"] = {
 
            name = [[Вы находитесь у западной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "10";
 
            e2 = "21";
 
            e3 = "30";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 
        ["21"] = {
 
            name = [[Вы находитесь в западной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "11";
 
            e2 = "22";
 
            e3 = "31";
 
            e4 = "20";
 
        };
 
        ["22"] = {
 
            name = [[Вы находитесь в центре большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "12";
 
            e2 = "23";
 
            e3 = "32";
 
            e4 = "21";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 
        ["23"] = {
 
            name = [[Вы находитесь в восточной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "13";
 
            e2 = "24";
 
            e3 = "33";
 
            e4 = "12";
 
        };
 
        ["24"] = {
 
            name = [[Вы находитесь у восточной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "14";
 
            e3 = "34";
 
            e4 = "23";
 
        };
 

	
 
        ["30"] = {
 
            name = [[Вы находитесь у западной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "20";
 
            e2 = "31";
 
            e3 = "40";
 
        };
 
        ["31"] = {
 
            name = [[Вы находитесь в юго-западной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "21";
 
            e2 = "32";
 
            e3 = "41";
 
            e4 = "30";
 
        };
 
        ["32"] = {
 
            name = [[Вы находитесь в южной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "22";
 
            e2 = "33";
 
            e3 = "42";
 
            e4 = "31";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 
        ["33"] = {
 
            name = [[Вы находитесь в юго-восточной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "23";
 
            e2 = "34";
 
            e3 = "43";
 
            e4 = "32";
 
        };
 
        ["34"] = {
 
            name = [[Вы находитесь у восточной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "24";
 
            e3 = "44";
 
            e4 = "33";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 

	
 
        ["40"] = {
 
            name = [[Вы находитесь в юго-западном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "30";
 
            e2 = "41";
 
        };
 
        ["41"] = {
 
            name = [[Вы находитесь у южной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "31";
 
            e2 = "42";
 
            e4 = "40";
 
            enter = function(s)
 
                walk("dyp_temple_cave_dead");
 
            end;
 
        };
 
        ["42"] = {
 
            name = [[Вы находитесь у южной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "32";
 
            e2 = "43";
 
            e4 = "41";
 
            enter = function(s)
 
                move(dyp_temple_blue_lever, s);
 
            end;
 
            leave = function(s)
 
            left = function(s)
 
                remove(dyp_temple_blue_lever, s);
 
            end;
 
        };
 
        ["43"] = {
 
            name = [[Вы находитесь у южной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "33";
 
            e2 = "44";
 
            e4 = "42";
 
        };
 
        ["44"] = {
 
            name = [[Вы находитесь в юго-восточном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]];
 
            e1 = "34";
 
            e4 = "43";
 
        };
 
    };
 
}
 

	
 
dyp_crab_cave = labyrinth {
 
    var {
 
        position = "00";
 
        fight = false;
 
    };
 
    nam = "dyp_crab_cave";
 
    disp = "Пещера";
 
    dir1 = "На северо-запад";
 
    dir2 = "На северо-восток";
 
    dir3 = "На юго-запад";
 
    dir4 = "На юго-восток";
 
    ex = "Выйти";
 
    underwater = true;
 
    map = {
 
        ["00"] = {
 
            name = [[Вы стоите у входа в глубокую пещеру. Стены здесь неровные и извилистые, образую причудливые переплетения длинный коридоров. Кто знает, куда они приведут? На каменистом полу едва ли можно заметить какие-либо следы. ]];
 
            e1 = "10";
 
            e2 = "11";
 
            ex = "dyp_temple_cliff_1";
 
        };
 
        ["10"] = {
 
            e1 = "20";
 
            e2 = "21";
 
            e4 = "00";
 
        };
 
        ["11"] = {
 
            e1 = "21";
 
            e2 = "22";
 
            e3 = "00";
 
        };
 
        ["20"] = {
 
            e1 = "30";
 
            e4 = "10";
 
        };
 
        ["21"] = {
 
            e1 = "31";
 
            e2 = "32";
 
            e3 = "10";
 
            e4 = "11";
 
        };
 
        ["22"] = {
 
            e2 = "33";
 
            e3 = "11";
 
        };
 
        ["30"] = {
 
            e1 = "40";
 
            e2 = "41";
 
            e4 = "20";
 
        };
 
        ["31"] = {
 
            e2 = "42";
 
            e4 = "21";
 
        };
 
        ["32"] = {
 
            e2 = "43";
 
            e3 = "21";
 
        };
 
        ["33"] = {
 
            e3 = "22";
 
        };
 
        ["40"] = {
 
            e2 = "50";
 
            e4 = "30";
 
        };
 
        ["41"] = {
 
            e3 = "30";
 
        };
 
        ["42"] = {
 
            e1 = "51";
 
            e3 = "31";
 
        };
 
        ["43"] = {
 
            e1 = "52";
 
            e3 = "32";
 
            enter = function(s)
 
                if not s.fight then
 
                    s.fight = true;
 
                    walk("dyp_crab_fight_intro");
 
                end;
 
            end;
 
        };
 
        ["50"] = {
 
            e3 = "40";
 
            enter = function(s)
 
                if (not exist(dyp_scepter_chest, s)) then
 
                    move(dyp_scepter_chest, s);
 
                end;
 
            end;
 
            exit = function(s)
 
                remove(dyp_scepter_chest, s);
 
            end;
 
        };
 
        ["51"] = {
 
            e4 = "42";
 
        };
 
        ["52"] = {
 
            e4 = "43";
 
            enter = function(s)
 
                if (not exist(dyp_dead_navjiarr, s)) then
 
                    move(dyp_dead_navjiarr, s);
 
                end;
 
            end;
 
            exit = function(s)
 
                remove(dyp_dead_navjiarr, s);
 
            end;
 
        };
 
    };
 
};
 

	
 
dyp_temple_cave_dead = game_over("Игра окончена", [[Потолок резко опускается на вас, придавливая к полу. Стекло шлема трескается, а сочленения скафандра гнутся, сдавливая ваше тело. Холодная вода начинает наполнять скафандр... ]])
 

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

	
 
dyp_dead_navjiarr = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dyp_dead_navjiarr";
 
    dsc = [[Рядом с вами лежит мертвый навьяр. Тело изуродовано могучими клешнями крабов, однако, судя по всему лежит здесь недавно. Рядом с трупом лежит его {сумка}. ]];
 
    act = function(s)
 
        if s.state == 0 then
 
            s.state = 1;
 
            move(dyp_item_star_map, pl);
 
            move(dyp_item_aedienrr_notes, pl);
 
            return [[В сумке лежат две таблички: металлическая и обычная, каменная. Металлическая табличка сразу привлекает ваше внимание. Причудливые узоры схем никак не напоминают навьярские письмена, а символы нанесенные вокруг не говорят вам ровным счетом ни о чем. Стоит показать это Светловой, быть может она сможет что-то из этого извлечь. ]];
 
        else
 
            return "Сумка пуста. ";
 
        end;
 
    end;
 
};
 

	
 
dyp_item_aedienrr_notes = obj {
 
    nam = "dyp_item_aedienrr_notes";
 
    disp = function(s)
 
        if language_known then
 
            return "Записи Аэдиенрра";
 
        else
 
            return "Каменная табличка";
 
        end;
 
    end;
 
    inv = function(s)
 
        if language_known then
 
            return "Надписи на каменной табличке рассказывают о последнем путешествии Аэдиенрра. Молодой навьяр разгадал схемы на карте небесных огней и предположил, что они ведут в пещеру в скале к северу от Дипатреанотра. Ориентирами служат каменные обелиски-предостережения и храм, расположенный к востоку от нее. Никто из Ираафаанотра не смогу рассказать ничего о храме, поэтому исследователю пришлось долго идти наугад. Последняя запись гласит, что он почти добрался до пещеры... ";
 
        else
 
            return "Вы не понимаете языка и надписи значат для вас не больше чем ряды вертикальных цветных полосок. ";
 
        end;
 
    end;
 
};
 

	
 
dyp_item_star_map = obj {
 
    nam = "dyp_item_star_map";
 
    disp = "Карта небесных огней";
 
    inv = [[Металлическая табличка, испещренная непонятными вам линиями и символами. Письмена напоминают навьярские лишь очень отдаленно и вы даже не предполагаете, что они могут значить. ]];
 
};
 

	
 
dyp_item_star_map_copy = obj {
 
    nam = "dyp_item_star_map";
 
    disp = "Карта небесных огней(копия)";
 
    inv = [[Металлическая табличка, испещренная непонятными вам линиями и символами. Письмена напоминают навьярские лишь очень отдаленно и вы даже не предполагаете, что они могут значить. ]];
 
};
 

	
 
dyp_crab_fight_intro = cutscene("dyp_crab_fight_intro", "Пещера", [[Впереди, вы замечаете какое-то движение. Луч прожетора выхватывает огромные острые клешни гигантского краба, устремившегося к вам. Следом за ним вы видите множество крабов поменьше, также ползущих к вам на своих тонких острых ногах. ]], "dyp_crab_fight");
 

	
 
dyp_crab_fight_win = cutscene("dyp_crab_fight_win", "Пещера", [[Отбившись от крабов, вы остаетесь одни в темном лабиринте пещер. ]], "dyp_crab_cave");
 

	
 
dyp_cmbt_learr = combatant {
 
    nam = "dyp_cmbt_learr";
 
    disp2 = "Леарр";
 
    disp3 = "Леарр";
 
    x = 5;
 
    y = 7;
 
    pic = "images/learr.png";
 
    ally = "Я не буду атаковать союзника.";
 
    nohit = "Я не буду атаковать союзника.";
 
    noshoot = "Я не буду атаковать союзника.";
 
    hp = 10;
 
    hasSpear = true;
 
    make_turn = function(s)
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y);
 
                if (p) then
 
                    table.insert(enemies, {
 
                        o = obj,
 
                        p = p
 
                    });
 
                end;
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            pn("Леарр ждет. ");
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (a.p.l < b.p.l);
 
        end);
 
        local enemy = enemies[1].o;
 
        local path = enemies[1].p;
 

	
 
        -- AI Order:
 
        -- If has spear and enemy is far   - throw spear
 
        -- If has spear and enemy is close - hit with spear
 
        -- if spear is nearer than any enemy - walk towards spear
 
        -- walk towards nearest enemy
 
        -- If enemy close and enemy has spear - take spear from enemy
 
        -- If enemy close and enemy doesn't have spear - hit with claws
 

	
 
        if s.hasSpear then
 
            if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then
 
                --50%
 
                if (rnd(2) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                else
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. ");
 
                end;
 
                return;
 
            elseif  (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then
 
                --75%
 
                if (rnd(4) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                else
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. ");
 
                end;
 
                return;
 
            elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                --100%
 
                enemy.hp = enemy.hp - 2;
 
                pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                return;
 
            end;
 
        else
 
            if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                enemy.hp = enemy.hp - 1;
 
                pn("Леарр бьет " .. enemy.disp2 .. " и попадает. ");
 
                return;
 
            end;
 
        end;
 
        
 
        s.x = path.p[2][1];
 
        s.y = path.p[2][2];
 
        pn("Леарр идет к " .. enemy.disp3 .. ". ");
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Леарр} готова к бою. ]];
 
        else
 
            return [[ {Леарр} без сознания. ]];
 
        end;
 
    end;
 
};
 

	
 
dyp_cmbt_wright = combatant {
 
    nam = "za_cmbt_wright";
 
    disp2 = "Райта";
 
    disp3 = "Райту";
 
    x = 5;
 
    y = 7;
 
    pic = "images/jack.png";
 
    ally = "Я не буду атаковать союзника.";
 
    nohit = "Я не буду атаковать союзника.";
 
    noshoot = "Я не буду атаковать союзника.";
 
    hp = 10;
 
    hasHarpoon = true;
 
    make_turn = function(s)
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y);
 
                if (p) then
 
                    table.insert(enemies, {
 
                        o = obj,
 
                        p = p
 
                    });
 
                end;
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            pn("Райт ждет. ");
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (a.p.l < b.p.l);
 
        end);
 
        local enemy = enemies[1].o;
 
        local path = enemies[1].p;
 
        
 
        if (s.x ~= 6 or s.y ~=3) then
 
            local ppath = here():getWalkDistance(s.x, s.y, 6, 3);
 
            if (ppath.l < path.l) then
 
                s.x = ppath.p[2][1];
 
                s.y = ppath.p[2][2];
 
                pn("Райт идет к укрытию");
 
            end;
 
        end;
 
        
 
        -- AI Order:
 
        -- If has harpoon and enemy is far - shoot
 
        -- If has harpoon and enemy is close - hit with harpoon
 
        -- walk towards nearest enemy
 
        
 
        if (s.hasHarpoon) then
 
            if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then
 
                --50%
 
                if (rnd(2) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif  (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then
 
                --75%
 
                if (rnd(4) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                --100%
 
                enemy.hp = enemy.hp - 2;
 
                pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                return;
 
            else
 
                local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y);
 
                if (rnd(4) > dist - 2) then
 
                    s.hasSpear = false;
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            end;
 
        else
 
            s.hasHarpoon = true;
 
            pn("Райт перезаряжает ружье. ");
 
        end;
journey_venaedanotrr.lua
Show inline comments
 
@@ -1037,679 +1037,679 @@ ven_ravine_learr_dlg_2 = dlg {
 
                end;
 
            end;
 
            remove(char_learr, where(char_learr));
 
            back();
 
        ]]};
 
    };
 
}
 

	
 
ven_ravine_4 = room {
 
    nam = 'Ущелье';
 
    dsc = [[Здесь ущелье сужается до такой степени, что вам, в скафандре туда не пройти. ]];
 
    obj = {
 
        'ven_ravine_door',
 
        'ven_ravine_gratings',
 
        'ven_item_phanearr_unconscious'
 
    };
 
    way = {
 
        kh_vroom('Назад', 'ven_ravine_3');
 
        kh_vroom('В дверь', function(s)
 
            if ven_ravine_door.state == 0 then
 
                pr [[Вы не знаете, как открыть эту дверь. ]];
 
                return false;
 
            else
 
                return 'ven_ravine_crypt_entrance';
 
            end;
 
        end);
 
        kh_vroom('Глубже в ущелье', function(s)
 
            pr [[Вы не сможете туда протиснуться. ]];
 
            return false;
 
        end);
 
    };
 
}
 

	
 
ven_ravine_door = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_ravine_door';
 
    dsc = function(s)
 
        if s.state == 0 then
 
            return [[В скале слева от вас вы видите массивную металлическую {дверь}, испещренную черными линиями странных едва заметных узоров. ]];
 
        else
 
            return [[В скале слева от вас вы видите массивную металлическую {дверь}, испещренную светящимися ярким зеленоватым светом линиями странных узоров. ]];
 
        end;
 
    end;
 
    act = function(s)
 
        if s.state == 0 then
 
            return [[При внимательном осмотре вы замечаете в центре двери небольшую квадратную выемку -- около пяти сантиметров. ]];
 
        else
 
            return [[При вашем приближении дверь начинает медленно открываться, но стоит вам отойти, она возвращается на прежнее место. ]];
 
        end;
 
    end;
 
    used = function(s, o)
 
        if o == ven_item_key and s.state == 0 then
 
            s.state = 1;
 
            remove(ven_item_key, pl);
 
            return [[Кубик входит внутрь ниши. Линии узоров на двери, еще недавно бывшие черными, начинают светиться ярким зеленоватым светом. ]];
 
        end;
 
    end;
 
}
 

	
 
ven_ravine_crypt_entrance = room {
 
    nam = 'Ущелье, тайное хранилище';
 
    dsc = [[В мутной воде вы с трудом различаете очертания металлических стен, покрытых узорами светящихся зеленоватых линий. Из-под решетчатого пола грязным зеленым дымом поднимается ирфирр. Навьяры никогда не смогли бы войти сюда. В дальнем конце помещения вы видите очертания небольшой двери. ]];
 
    obj = {
 
        'ven_towers_machine';
 
    };
 
    way = {
 
        kh_vroom('Выйти в ущелье', 'ven_ravine_4');
 
        kh_vroom('В дверь', function(s)
 
            if ven_towers_machine_look.solved then
 
                return 'ven_ravine_crypt';
 
            else
 
                pr [[Дверь не открывается. ]];
 
                return false;
 
            end;
 
        end)
 
    };
 
}
 

	
 
ven_ravine_crypt = room {
 
    nam = 'Ущелье, тайное хранилище';
 
    dsc = [[Вода здесь существенно чище, чем в предыдущем помещении. Лишь из вентиляционных решеток сочится небольшое количество Ирфирра. Стены здесь покрыты черными стеклянными панелями, под которыми слабо светятся все время меняющиеся изображения и цветные символы древнего, давно забытого, языка навьяров. Пол и потолок покрыты концентрическими кругами светящихся ровным белым светом линий. ]];
 
    obj = {
 
        'item_raybox';
 
    };
 
    way = {
 
        kh_vroom('К выходу', 'ven_ravine_crypt_entrance');
 
    };
 
}
 

	
 
ven_ravine_gratings = obj {
 
    nam = 'ven_ravine_gratings';
 
    dsc = [[В дно ущелья вмонтировано несколько {решеток}, через которые просачивается темнозеленая жидкость, медленно растворяющаяся в окружающей воде. ]];
 
}
 

	
 
ven_item_phanearr_unconscious = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_item_phanearr_unconscious';
 
    disp = 'Навьяр';
 
    dsc = [[Рядом с дверью неподвижно лежит {навьяр}.]];
 
    act = function(s)
 
        if s.state == 0 then
 
            s.state = 1;
 
            return [[Присмотревшись, вы понимаете, что навьяр еще жив. ]];
 
        else
 
            if have(ven_item_learr_unconscious) then
 
                return [[Вы не сможете унести двоих навьяров. Вам придется вернуться за ним позже. ]];
 
            else
 
                remove(ven_item_phanearr_unconscious, here());
 
                put(ven_item_phanearr_unconscious, pl);
 
                return [[Вы поднимаете неподвижного навьяра на руки. ]];
 
            end;
 
        end;
 
    end;
 
    inv = [[Навьяр без сознания. Он едва дышит. ]];
 
}
 

	
 
ven_item_learr_unconscious = obj {
 
    nam = 'ven_item_learr_unconscious';
 
    disp = 'Леарр';
 
    dsc = [[Прямо посередине ущелья лежит {Леарр}. Она без сознания. ]];
 
    tak = function(s)
 
        if have(ven_item_phanearr_unconscious, pl) then
 
            pr [[Вы не сможете унести двоих навьяров. Вам придется вернуться за Леарр позже. ]];
 
            return false;
 
        end;
 
        return [[Вы поднимаете Леарр на руки. ]];
 
    end;
 
    inv = [[Леарр без сознания. Она едва дышит. ]];
 
}
 

	
 
ven_cutscene_learr_ill = cutscene('ven_cutscene_learr_ill', 'Левиафан', function(s)
 
    if ven_quest_status < 5 then
 
        return [[Вы возвращаетесь на Левиафан. Состояние Леарр остается прежним -- навьяресса остается без сознания и не подает никаких признаков улучшения. Вы оставляете ее в одной из кают, а сами возвращаетесь завершить задание. ]]
 
    else
 
        return [[Вы возвращаетесь на Левиафан. Состояние навьяров остается прежним. Вы полным ходом спешите в Венаэданотр в надежде найти способ вылечить их. ]];
 
    end;
 
end, function(s)
 
    ven_learr_has_returned = true;
 
    remove(ven_item_learr_unconscious, pl);
 
    remove(ven_item_phanearr_unconscious, pl);
 
    if ven_quest_status == 5 then
 
        -- Return to venaedanotrr, put learr and phanearr to healer's house
 
        move(submarine_leviathan, "ven_center");
 
        put(ven_char_phanearr_ill, "ven_healer_house_room");
 
        put(ven_char_learr_ill, "ven_healer_house_room");
 
        return 'ven_cutscene_return_to_city';
 
    end;
 
    return 'ven_ravine_entrance';
 
end);
 

	
 
ven_cutscene_phanearr_returned = cutscene('ven_cutscene_phanearr_returned', 'Левиафан', function(s)
 
    if ven_learr_has_returned or ven_learr_met then
 
        return [[Вы возвращаетесь на Левиафан вместе с телом исследователя. Состояние Леарр за время вашего отсутствия не изменилось.  Вы полным ходом спешите в Венаэданотр в надежде найти способ вылечить навьяров. ]];
 
    elseif not ven_learr_ill_heavy then
 
        return [[Вы возвращаетесь на Левиафан вместе с телом исследователя. Вы полным ходом спешите в Венаэданотр в надежде найти способ вылечить навьярa. ]];
 
    else
 
        return [[Вы возвращаетесь на Левиафан вместе с телом исследователя. Вы оставляете его в одной из кают, а сами возвращаетесь за Леарр. ]];
 
    end;
 
end, function(s)
 
    ven_quest_status = 5;
 
    put(ven_char_phanearr_ill, "ven_healer_house_room");
 
    remove(ven_item_learr_unconscious, pl);
 
    remove(ven_item_phanearr_unconscious, pl);
 
    if ven_learr_has_returned or ven_learr_met then
 
        move(submarine_leviathan, "ven_center");
 
        put(ven_char_learr_ill, "ven_healer_house_room");
 
        return "ven_cutscene_return_to_city";
 
    elseif not ven_learr_ill_heavy then
 
        move(submarine_leviathan, "ven_center");
 
        return "ven_cutscene_return_to_city";
 
    else
 
        return "ven_ravine_entrance";
 
    end;
 
end)
 

	
 
ven_char_phanearr_ill = obj {
 
    nam = 'ven_char_phanearr_ill';
 
    dsc = [[{Фанеарр} лежит без сознания на одной из кроватей. ]];
 
    act = [[Вам нужно найти способ вылечить его. ]];
 
}
 

	
 
ven_char_learr_ill = obj {
 
    nam = 'ven_char_learr_ill';
 
    dsc = [[{Леарр} лежит без сознания на другой. ]];
 
    act = [[Вам нужно найти способ вылечить ее. ]];
 
}
 

	
 
ven_cutscene_return_to_city = cutscene('ven_cutscene_return_to_city', 'Венаэданотр', function(s)
 
    if ven_learr_ill_heavy then
 
        return [[Вернувшись в Венаэданотр, вы передаете находящихся в тяжелом состоянии навьяров в руки местного лекаря. ]]
 
    else
 
        return [[Вернувшись в Венаэданотр, вы передаете находящегося в тяжелом состоянии исследователя в руки местного лекаря. ]]
 
    end;
 
end, 'ven_center');
 

	
 
ven_cutscene_healing = cutscene('ven_cutscene_healing', 'Венаэданотр', function(s)
 
    if ven_learr_ill_heavy then
 
        return [[Вы передаете ингредиенты лекарства Хисорру и возвращаетесь на Левиафан, в ожидании, пока он закончит лечение навьяров. Несколько дней спустя, Леарр возвращается на Левиафан полностью здоровой. Она сообщает вам, что Фанеарр так же оправился от болезни и ждет вас в гильдии исследователей. ]];
 
    else
 
        return [[Вы передаете ингредиенты лекарства Хисорру и возвращаетесь на Левиафан, в ожидании, пока он закончит лечение исследователя. Несколько дней спустя, к вам приходит посланник от Хисорра. Он сообщает вам, что Фанеарр оправился от болезни и ждет вас в гильдии исследователей. ]];
 
    end;
 
end, ven_center);
 

	
 
ven_item_searing_leaf = obj {
 
    nam = 'ven_item_searing_leaf';
 
    disp = 'Жгучий лист';
 
    inv = [[Огненно-красный лист растения. Не стоит трогать его голыми руками. ]];
 
    dsc = [[Из плодородного ила пробивается длинный огненно-красный {лист} какого-то растения.]];
 
    tak = [[Вы забираете лист. Хорошо, что вы в перчатках -- по словам Хиарирра, эта трава обжигает. ]];
 
}
 

	
 
ven_item_poison_weed = obj {
 
    nam = 'ven_item_poison_weed';
 
    disp ='Ядовитые водоросли';
 
    inv = [[Здесь растут обычные с виду водоросли зеленого цвета. Однако, по словам Хиарирра они крайне ядовиты. По-крайней мере для навьяров. ]];
 
    dsc = [[Здесь, по словам Хиарирра, растут {ядовитые водоросли}.]];
 
    tak = [[Вы собираете водоросли, подходящие под описание, данное Хиарирром. ]];
 
}
 

	
 
ven_item_rock_stalk = obj {
 
    nam = 'ven_item_rock_stalk';
 
    disp = 'Каменный стебель';
 
    inv = [[Толстый крепкий стебель серого цвета. Действительно, очень похож на камень. ]];
 
    dsc = [[Из трещины в камнях пробивается {стебель} серого цвета. ]];
 
    tak = [[Стебель на удивление легко отламывается. ]];
 
}
 

	
 
ven_item_searing_leaf:disable();
 
ven_item_poison_weed:disable();
 
ven_item_rock_stalk:disable();
 

	
 
ven_char_phanearr = npc {
 
    nam = 'ven_char_phanearr';
 
    dsc = [[{Фанеарр} висит напротив него. ]];
 
    dlg = 'ven_char_phanearr_dlg';
 
}
 

	
 
ven_char_phanearr_dlg = dlg {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_char_phanearr_dlg';
 
    disp = 'Фанеарр';
 
    entered = function(s)
 
        if s.state == 0 then
 
            s.state = 1;
 
            take(ven_item_tablet);
 
            return [[Фанеарр обращается к вам, по его головным плавникам бегут цветные полосы: "Почтенный хевьяр, благодарю тебя за помощь. В благодарность, я дам тебе кое-что, что было найдено мной некогда в том самом ущелье", -- с этими словами он протягивает вам металлическую табличку. ]];
 
        else
 
            return [[Фанеарр обращается к вам. По его головным плавникам бегут цветные полосы: "Ты говори". ]];
 
        end;
 
    end;
 
    phr = {
 
        {"[Кодировщик]Что вы искали в ущелье?", [[Фанеарр отвечает: "В данной части ущелья мы были впервые. Хиарирр откопал в библиотеке старые записи о некоем артефакте -- ,,коробке лучей''. По словам Хиарирра, с ее помощью мы сможем расшифровать светодиски, хранящиеся в библиотеке в больших количествах. К сожалению, мы не ожидали найти там источник ирфирра. Сам по себе этот яд очень коварный -- не всегда можно понять, что уже нужно срочное лечение. А здесь мы нашли его источник -- место, где вещество вырывается из земли. Мы не успели ничего понять, как большая часть из нас свалилась без сознания". ]], code [[
 
            pon("ray_box");
 
        ]]};
 
        {tag="ray_box", false, "[Кодировщик]Как мне найти коробочку лучей?", [[Фанеарр дает вам маленький металлический кубик. На его гранях высечены глубокие бороздки, предназначения которых вы не понимаете. Навьяр сообщает вам: "Мы были почти у цели. Если бы не ирфирр, мы открыли бы вход". ]], code [[
 
            ven_box_of_light_known = true;
 
            take('ven_item_key');
 
        ]]};
 
        {always=true, "[Кодировщик]Я пойду.", [[Фанееарр отвечает: "Ты возвращайся". ]], code [[
 
            back();
 
        ]]};
 
    };
 
}
 

	
 
ven_item_key = obj {
 
    nam = 'ven_item_key';
 
    disp = 'Навьярский ключ';
 
    inv = [[Металлический кубик со стороной около пяти сантиметров. На его гранях высечены глубокие бороздки, предназначения которых вы не понимаете. ]];
 
}
 

	
 
ven_item_green_key = obj {
 
    nam = 'ven_item_green_key';
 
    disp ='Зеленый ключ от храма Венаэданотра';
 
    inv = [[Зеленый полупрозрачный додекаэдр из неизвестного материала. Грани его абсолютно гладкие. ]];
 
}
 

	
 
ven_item_red_key = obj {
 
    nam = 'ven_item_red_key';
 
    disp = 'Красный ключ от храма Венаэданотра';
 
    inv = [[Красный полупрозрачный додекаэдр из неизвестного материала. Грани его абсолютно гладкие.]];
 
}
 

	
 
ven_item_potion = obj {
 
    nam = 'ven_item_potion';
 
    disp = 'Снотворное';
 
    inv = [[Сильнодействующее снотворное, действующее на навьяров. Нужно придумать, как заставить хранителя храма выпить или вдохнуть его. ]];
 
}
 

	
 
--[[
 
-- Temple
 
 ]]
 

	
 
ven_temple_intro = lcutscene('ven_ravine_intro', 'Левиафан, рубка', [[Храм лежит лишь в нескольких десятках километров от города. Вырезанные в толще скалы громадные двери, украшенные богатой резьбой издали привлекают внимание. ]], 'Вы прибыли в храм Венаэданотра', leviathan_wheelhouse);
 

	
 
ven_temple_entrance = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_temple_entrance';
 
    disp = 'Храм Венаэданотра, вход';
 
    dsc = [[Пред ваши взором предстают массивные двери высеченного в скале храма, покрытые резными орнаментами. Широкие металлические ступени сохранились в идеальном состоянии. Скала тянется в обе стороны от храма. Чуть поодаль стоит небольшой каменный домик, в котором живет хранитель храма. ]];
 
    view = [[Через иллюминаторы вы видите массивные двери высеченного в скале храма, покрытые резными орнаментами. Широкие металлические ступени сохранились в идеальном состоянии. Скала тянется в обе стороны от храма. Чуть поодаль стоит небольшой каменный домик, в котором живет хранитель храма.]];
 
    obj = {
 
        'ven_temple_doors';
 
    };
 
    way = {
 
        kh_vroom('В Левиафан', "leviathan_airlock");
 
        kh_vroom('В храм', function(s)
 
            if ven_temple_entrance.state == 3 then
 
                return 'ven_temple_hall_1';
 
            else
 
                p [[Двери храма не откроются для вас. ]];
 
                return false;
 
            end;
 
        end);
 
        kh_vroom('К дому хранителя', "ven_temple_keeper_house");
 
    };
 
};
 

	
 
ven_temple_doors = obj {
 
    nam = 'ven_temple_doors';
 
    dsc = function(s)
 
        if ven_temple_entrance.state == 0 then
 
            return [[В нижней части дверей храма есть два небольших многогранных {углубления}. ]];
 
        elseif ven_temple_entrance.state == 1 then
 
            return [[В нижней части дверей храма есть два небольших многогранных {углубления}. В одно из них помещен небольшой зеленый додекаэдр. ]];
 
        elseif ven_temple_entrance.state == 2 then
 
            return [[В нижней части дверей храма есть два небольших многогранных {углубления}. В одно из них помещен небольшой красный додекаэдр. ]];
 
        else
 
            return [[В нижней части дверей храма есть два небольших многогранных {углубления}, в которых сейчас расположены небольшие камни -- красный и зеленый. ]];
 
        end;
 
    end;
 
    used = function(s, o)
 
        if o == ven_item_green_key then
 
            ven_temple_entrance.state = ven_temple_entrance.state + 1;
 
            remove(ven_item_green_key, pl);
 
            p [[Додекаэдр легко входит в отверстие и накрепко закрепляется там. Где-то изнутри двери вы слышите тяжелый скрежет. ]];
 
        elseif o == ven_item_red_key then
 
            ven_temple_entrance.state = ven_temple_entrance.state + 2;
 
            remove(ven_item_red_key, pl);
 
            p [[Додекаэдр легко входит в отверстие и накрепко закрепляется там. Где-то изнутри двери вы слышите тяжелый скрежет. ]];
 
        end;
 
        if ven_temple_entrance.state == 3 then
 
            p [[Двери храма теперь открыты. ]];
 
        else
 
            p [[]];
 
        end;
 
    end;
 
}
 

	
 
ven_temple_keeper_house = room {
 
    nam = 'ven_temple_keeper_house';
 
    disp = 'Храм Венаэданотра, у дома хранителя';
 
    dsc = [[Небольшое каменное строение, напоминающее дома жителей города расположено неподалеку от входа в храм высеченного в скале. ]];
 
    way = {
 
        kh_vroom('В дом', "ven_temple_keeper_house_inside");
 
        kh_vroom('К храму', "ven_temple_entrance");
 
    }
 
};
 

	
 
ven_temple_keeper_house_inside = room {
 
    nam = 'ven_temple_keeper_house_inside';
 
    disp = 'Храм Венаэданотра, дом хранителя';
 
    dsc = [[Небольшая комната практически пуста, не считая стола, стоящего в центре и кровати стоящей в углу. Светящиеся водоросли покрывают потолок комнаты. В другом углу комнаты расположен люк, ведущий в подвал. ]];
 
    obj = {
 
        'ven_char_temple_keeper',
 
        'ven_keeper_shelf'
 
    };
 
    way = {
 
        kh_vroom('Наружу', "ven_temple_keeper_house");
 
        kh_vroom('В люк', function(s)
 
            if ven_keeper_asleep then
 

	
 
            end;
 
            pr [[Хранитель не позволит вам сделать это. ]];
 
            return false;
 
        end);
 
    };
 
    leave = function(s)
 
    left = function(s)
 
        if ven_keeper_shelf.state == 1 then
 
            ven_keeper_asleep = true;
 
            remove('ven_char_temple_keeper', ven_temple_keeper_house_inside);
 
            put('ven_char_temple_keeper_asleep', ven_temple_keeper_house_inside);
 
        end;
 
    end;
 
}
 

	
 
ven_keeper_shelf = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_keeper_shelf';
 
    dsc = 'Рядом со входом расположена небольшая полка, на которой лежат несколько пучков {водорослей}. ';
 
    act = function(s)
 
        if s.state == 0 then
 
            return [[Немного водорослей, обычно употребляемых навьярами в пищу. ]];
 
        else
 
            return [[Немного водорослей, обычно употребляемых навьярами в пищу. Эти водоросли пропитаны снотворным. ]];
 
        end;
 
    end;
 
    used = function(s, o)
 
        if o == ven_item_potion then
 
            remove(ven_item_potion, pl);
 
            s.state = 1;
 
            return [[Вы аккуратно открываете флакон со снотворным. Небольшая часть темной жидкости растворвяется в окружающей воде, но этой концентрации недостаточно. Вы берете немного водорослей и опускаете их во флакон. Водоросли впитывают снадобье как губка. ]];
 
        end;
 
    end;
 
}
 

	
 
ven_temple_keeper_house_cellar = darkroom {
 
    nam = 'ven_temple_keeper_house_cellar';
 
    disp = 'Храм Венаэданотра, дом хранителя, подвал';
 
    dsc = [[Небольшой подвал дома хранителя. В темноте вы с трудом различаете очертания предметов. ]];
 
    obj = {
 
        'ven_keeper_chest'
 
    };
 
    way = {
 
        kh_vroom('Наверх', "ven_temple_keeper_house_inside");
 
    };
 
}
 

	
 
ven_keeper_chest = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_keeper_chest';
 
    seen_level = 1;
 
    dsc = 'В углу комнаты стоит массивный каменный {сундук}. ';
 
    act = function(s)
 
        if s.state == 0 then
 
            walkin(ven_temple_lock);
 
        else
 
            pr [[Вы уже сделали здесь все необходимое. ]];
 
            return false;
 
        end;
 
    end;
 
}
 

	
 
ven_char_temple_keeper_asleep = obj {
 
    nam = 'ven_char_temple_keeper';
 
    dsc = [[{Хранитель} храма мирно спит на кровати. ]];
 
    act = [[Не стоит его тревожить. ]];
 

	
 
}
 

	
 
ven_char_temple_keeper = npc {
 
    nam = 'ven_char_temple_keeper';
 
    dsc = [[На кровати сидит старый {навьяр}. Чешуя его почти белая, серые глаза с неприязнью смотрят на вас. ]];
 
    dlg = 'ven_char_temple_keeper_dlg';
 
}
 

	
 
ven_char_temple_keeper_dlg = dlg {
 
    nam = 'ven_char_temple_keeper_dlg';
 
    disp = 'Хранитель храма';
 
    entered = function(s)
 
        if ven_quest_status == 7 then
 
            pon("key");
 
        end;
 
        return [[Сидящий на кровати навьяр с неприязнью смотрит на вас. По его плавникам пробегают цветные полосы: "Уходите. Я ничего вам не скажу". ]];
 
    end;
 
    phr = {
 
        {tag='key', false, '[Кодировщик]Эйлираорр сказал, что вы можете дать мне ключ от храма.', [[Хранитель говорит: "Я не дам вам ключ. Уходите". ]], code [[ ven_quest_status = 8; pon("why", "drake"); ]]};
 
        {tag="why", false, '[Кодировщик]Почему вы не дадите нам ключ?', [[Хранитель отвечает: "Это не ваше дело. Уходите". ]]};
 
        {tag="drake", false, '[Кодировщик]Другие хевьяры были в храме?', [[Хранитель отвечает: "Это не ваше дело. Уходите". ]]};
 
        {always=true, "[Кодировщик]Я пойду.", [[Хранитель отворачивается от вас. ]], code [[back();]]};
 
    };
 
};
 

	
 
ven_temple_lock = room {
 
    values = {
 
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
    };
 
    nam = 'Сундук';
 
    not_follow = true;
 
    pic = function(s)
 
        local p = "blank:120x120";
 
        for v = 1, #s.values do
 
            local tx = (v - 1) % 4;
 
            local ty = math.floor((v - 1) / 4);
 

	
 
            local lstate = '';
 
            if s.values[v] == 1 then
 
                lstate = 'pressed';
 
            else
 
                lstate = 'unpressed';
 
            end;
 

	
 
            p = p .. ';images/tile_' .. lstate .. '.png@' .. tostring(tx * 30) .. ',' .. tostring(ty * 30);
 
        end;
 
        return p;
 
    end;
 
    click = function(s, x, y)
 
        local t = 1 + math.floor(x / 30) + math.floor(y / 30) * 4;
 
        local tup = t - 4;
 
        local tlt = t - 1;
 
        local trt = t + 1;
 
        local tdn = t + 4;
 

	
 
        if s.values[t] == 1 then
 
            s.values[t] = 0;
 
        else
 
            s.values[t] = 1;
 
        end;
 

	
 
        if tup > 0 then
 
            if s.values[tup] == 1 then
 
                s.values[tup] = 0;
 
            else
 
                s.values[tup] = 1;
 
            end;
 
        end;
 

	
 
        if tdn < 17 then
 
            if s.values[tdn] == 1 then
 
                s.values[tdn] = 0;
 
            else
 
                s.values[tdn] = 1;
 
            end;
 
        end;
 

	
 
        if tlt % 4 ~= 0 then
 
            if s.values[tlt] == 1 then
 
                s.values[tlt] = 0;
 
            else
 
                s.values[tlt] = 1;
 
            end;
 
        end;
 

	
 
        if trt % 4 ~= 1 then
 
            if s.values[trt] == 1 then
 
                s.values[trt] = 0;
 
            else
 
                s.values[trt] = 1;
 
            end;
 
        end;
 

	
 
        for v = 1, #s.values do
 
            if s.values[v] == 0 then
 
                walk(here());
 
                return;
 
            end;
 
        end;
 

	
 
        p("С легким скрежетом сундук открывается. Внутри вы обнаруживаете огромное количество каменных и металлических табличек в разном состоянии, огромную стопку светодисков и искомый вами красный камень. ");
 
        take(ven_item_red_key);
 
        walk(ven_temple_keeper_house_cellar);
 
    end;
 
}
 

	
 
ven_temple_hall_1 = room {
 
    nam = 'Храм Венаэданотра, главный зал';
 
    dsc = [[Вы находитесь в главном зале храма Венаэданотра, у входа. Внутреннее убранство этого храма отличается аскетичностью -- местные жители не стремятся выставлять свои реликвии напоказ, а в этом храме регулярно проводятся массовые службы. Многочисленные полки пусты, стены, как и везде густо покрыты светящимися водорослями. ]];
 
    way = {
 
        kh_vroom('Наружу', 'ven_temple_entrance');
 
        kh_vroom('К центру зала', 'ven_temple_hall_2');
 
    };
 
}
 

	
 
ven_temple_pedestal = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_temple_pedestal';
 
    dsc = [[С одной из сторон пьедестала вашему взору открывается потайная ниша, внутри которой спрятан {рычаг}. ]];
 
    act = function(s)
 
        if s.state == 0 then
 
            ven_temple_pedestal.state = 1;
 
            ven_temple_qhall.state = 1;
 
            path("Наверх", ven_temple_qhall):enable();
 
            return [[Рычаг легко поддается. Из зала вопроса доносится гул, который вскоре оканчивается глухим ударом. ]];
 
        else
 
            return [[Вам здесь больше нечего делать. ]];
 
        end;
 
    end;
 
}
 

	
 
ven_temple_hall_2 = room {
 
    nam = 'Храм Венаэданотра, главный зал';
 
    dsc = [[В центре храма расположен пьедестал. На нем лежат несколько металлических табличек с древними письменами. ]];
 
    way = {
 
        kh_vroom('Ко входу', 'ven_temple_hall_1');
 
        kh_vroom('В конец зала', 'ven_temple_hall_3');
 
        kh_vroom('В зал вопроса', 'ven_temple_qhall');
 
        kh_vroom('В зал ответа', 'ven_temple_ahall');
 
    };
 
    obj = {
 
        ven_temple_pedestal:disable()
 
    }
 
}
 

	
 
ven_temple_hall_3 = room {
 
    nam = 'Храм Венаэданотра, главный зал';
 
    dsc = [[В этой части главного зала расположена небольшая неприметная дверца, ведущая в служебные помещения храма. ]];
 
    way = {
 
        kh_vroom('К центру зала', 'ven_temple_hall_2');
 
    };
 
}
 

	
 
ven_temple_qhall = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'Храм Венаэданотра, зал вопроса';
 
    dsc = function(s)
 
        if s.state == 0 then
 
            return [[Небольшое помещение сбоку от основного храмового зала. Напротив входа на стену нанесено изображение главного зала. ]];
 
        else
 
            return [[Небольшое помещение сбоку от основного храмового зала. Напротив входа на стену нанесено изображение главного зала. Одна из боковых стен зала отсутствует, открывая проход на широкую лестницу, ведущую наверх. ]];
 
        end;
 
    end;
 
    obj = {
 
        'ven_qhall_altar'
 
    };
 
    way = {
 
        kh_vroom('В главный зал', 'ven_temple_hall_2');
 
        kh_vroom('Наверх', 'ven_temple_labyrinth_l1'):disable();
 
    };
 
};
 

	
 
ven_temple_ahall = room {
 
    nam = 'Храм Венаэданотра, зал ответа';
 
    dsc = [[Небольшое помещение сбоку от основного храмового зала. Напротив входа на стене выгравировано изображение навьяра, плывущего наверх. ]];
 
    entered = function(s)
 
        ven_temple_labyrinth_l1.position = '03';
 
    end;
 
    obj = {
 
        'ven_ahall_altar'
 
    };
 
    way = {
 
        kh_vroom('В главный зал', 'ven_temple_hall_2');
 
    };
 
};
 

	
 
ven_qhall_altar = obj {
 
    nam = 'ven_qhall_altar';
 
    dsc = [[В центре помещения установлен массивный каменный {алтарь}. ]];
 
    act = [[Серый каменный алтарь. Навьяры тщательно очищают его от светящихся водорослей, покрывающих остальные поверхности храма. Ничего примечательного если не считать того, что это почти идеально ровный параллелепипед. ]];
 
}
 

	
 
ven_ahall_altar = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = 'ven_qhall_altar';
 
    dsc = function(s)
 
        if s.state == 0 then
 
            return [[В центре помещения установлен массивный каменный {алтарь}. ]];
 
        else
 
            return [[В центре помещения установлен массивный каменный алтарь. В нижней его части расположено едва заметное {углубление}. ]];
 
        end;
 
    end;
 
    act = function(s)
 
        if s.state == 0 then
 
            s.state = 1;
 
            return [[Серый каменный алтарь. Навьяры тщательно очищают его от светящихся водорослей, покрывающих остальные поверхности храма. Ничего примечательного если не считать того, что это почти идеально ровный параллелепипед. В нижней части алтаря расположено едва заметное углубление. ]];
 
        elseif s.state == 1 then
 
            s.state = 2;
 
            ven_temple_pedestal:enable();
 
            return [[Вы протискиваете в углубление руку и сдвигаете там что-то. Слышите скрежет, доносящийся из главного зала. ]];
 
        else
 
            return [[Вам здесь больше нечего делать. ]];
 
        end;
 
    end;
 
}
 

	
 
ven_item_tablet = obj {
 
    nam = "ven_item_tablet";
 
    disp = "Табличка";
 
    inv = [[Металлическая табличка с рисунком, изображающим навьяра и человека, пожимающих друг другу руки. Человек изображен без скафандра. Навьяр изображен одетым в черный облегающий костюм, человек же одет как простой средневековый рыбак. Вдоль верхнего и нижнего края таблички расположены ровными рядами небольшие круглые отверстия. ]];
 
    tak = [[Вы забираете табличку. ]];
 
};
 

	
 
ven_raybox_cutscene = cutscene('Левиафан, кают-компания', 'Левиафан, кают-компания', [[В кают-компании вас встречает Уолтер Рэдклифф, завершающий установку на стол той самой коробочки лучей. Закончив работу, он оборачивается к вам и говорит: "Все готово, прибор работает. Я думаю, здесь для него наилучшее место". ]], 'leviathan_wardroom');
0 comments (0 inline, 0 general)