Changeset - 8a8cef5d3441
[Not reviewed]
default
0 1 0
Silverwing - 6 years ago 2018-12-22 22:28:15

Chapter 1: 15 game fixed
1 file changed with 2 insertions and 2 deletions:
0 comments (0 inline, 0 general)
atlantis_dyp.lua
Show inline comments
 
--[[
 
Дипатреанотр
 
]]
 

	
 
global {
 
    dyp_quest_state = 0;
 
        -- 0 - не начат
 
        -- 1 - вождь попросил светящуюся капсулу с Атлантиды
 
        -- 2 - вождь попросил зуб акулы
 
        -- 3(1) - вождь попросил карту
 
        -- 4(2) - узнали, что карту унес Аэдиенрр в Дипатреанотр
 
        -- 5(3) - узнали, куда унес карту Аэдиенрр из Дипатреанотра
 
        -- 6(4) - Отдали оригинал КНО в Ираафаанотр
 
        -- 7(5) - Отдали жезл в Ираафаанотр
 
    dyp_stones_known = false;
 
    dyp_lib_stone_state = 0;
 
};
 

	
 
--[[
 
Дипатреанотр город
 
]]
 

	
 
dyp_entry = lcutscene("dyp_entry", "Левиафан, рубка", [[Дипатреанотр расположен всего в нескольких часах пути от Атлантиды. Как только вы прибываете на место, вашим глазам открывается картина неприглядного поселения -- небольшой деревушки, состоящей из не более чем сотни домов, сгрудившихся вокруг обелиска в центре, посреди которой возвышается каменный обелиск. Вы не замечаете никаких улиц, кроме одной, соединящей дом вождя с центральной площадью. Вы направляете Левиафан к центру и субмарина, послушная вашим указаниям, замирает рядом с обелиском. ]], "Вы прибыли в Дипатреанотр. ", leviathan_wheelhouse);
 

	
 
dyp_center = room {
 
    nam = "dyp_center";
 
    underwater = true;
 
    handwheel_room = "dyp_temple_navigation";
 
    disp = "Дипатреанотр, центр";
 
    view = [[Левиафан находится над центром Дипатреанотра -- небольшого навьярского поселения. Вокруг небольшой центральной площади неровными кругами расположены небольшие каменные дома. Явно выраженные улицы отсутствуют, за исключением широкой, выложенной камнем дороги от площади до дома вождя. В другом конце площади расположено большое здание библиотеки. ]];
 
    dsc = [[Вы находитесь на центральной площади Дипатреанотра -- небольшого навьярского поселения. Вокруг небольшой центральной площади неровными кругами расположены небольшие каменные дома. Явно выраженные улицы отсутствуют, за исключением широкой, выложенной камнем дороги от площади до дома вождя. В другом конце площади расположено большое здание библиотеки. ]];
 
    obj = {
 
        "dyp_obelisk";
 
    };
 
    entered = function(s)
 
        if atl_rep_dyp < 0 then
 
            dypatreanotrr_night_found = true;
 
            return [[Ва встречают враждебные взгляды вооруженных навьяров. ]];
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("К библиотеке", function(s)
 
            if atl_rep_dyp < 0 then
 
                pr [[Группа вооруженных навьяров преграждает вам путь. ]];
 
                return false;
 
            end;
 
            return "dyp_library_entrance";
 
        end);
 
        kh_vroom("К дому вождя", function(s)
 
            if atl_rep_dyp < 0 then
 
                pr [[Группа вооруженных навьяров преграждает вам путь. ]];
 
                return false;
 
            end;
 
            return "dyp_chief_house_entrance"
 
        end);
 
        kh_vroom("В Левиафан", function(s)
 
            if atl_rep_dyp < 0 then
 
                pr [[Группа вооруженных навьяров преграждает вам путь. ]];
 
                return false;
 
            end;
 
            return "leviathan_airlock"
 
        end);
 
        kh_vroom("К окраине", function(s)
 
            if atl_rep_dyp < 0 then
 
                pr [[Группа вооруженных навьяров преграждает вам путь. ]];
 
                return false;
 
            end;
 
            return "dyp_outskirts"
 
        end);
 
    };
 
};
 

	
 
dyp_outskirts = room {
 
    nam = "dyp_outskirts";
 
    underwater = true;
 
    disp = "Дипатреанотр, окраина";
 
    dsc = [[Вы стоите на южной окраине Дипатреанотра. К северу от вас расположены неказистые каменные дома жителей города. Отсюда прекрасно виден зависший над центральной площадью Левиафан. ]];
 
    obj = {
 
        "dyp_guardian";
 
    };
 
    way = {
 
        kh_vroom("К обелиску", "dyp_center");
 
    };
 
};
 

	
 
dyp_guardian = npc {
 
    nam = "dyp_guardian";
 
    dsc = [[Рядом с вами неспешно прогуливается {стражник}, вооруженный копьем. Кажется, ваш вид его нисколько не удивляет и не беспокоит. ]];
 
    phrases = function(s)
 
        if language_known then
 
            return {
 
                [[Стражник не обращает на вас внимания. ]];
 
                [[По головным плавникам стражника бегут цветные полосы: "Ты говори с вождем, не со мной". ]];
 
            };
 
        else
 
            return {
 
                [[Стражник не обращает на вас внимания. ]];
 
                [[По головным плавникам стражника бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]];
 
            };
 
        end;
 
    end;
 
    dlg = function(s)
 
        if dyp_quest_state == 4 then
 
            return "dyp_guardian_dlg";
 
        end;
 
    end;
 
};
 

	
 
dyp_guardian_dlg = dlg {
 
    nam = "dyp_guardian_dlg";
 
    disp = "Стражник";
 
    entered = function(s)
 
        if language_known then
 
            psub("speak");
 
            return [[По головным плавникам стражника бегут цветные полосы: "Ты говори с вождем, не со мной". ]];
 
        else
 
            psub("no_speak");
 
            return [[По головным плавникам стражника бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]];
 
        end;
 
    end;
 
    phr = {
 
        {tag="no_speak"};
 
        {always = true; "[Уйти]", code [[ back(); ]]};
 
        {tag="speak"};
 
        {"[Кодировщик] Я ищу навьяра по имени Аэдиенрр. Он проходил здесь недавно.", [[Стражник кивает: "Аэдиенрр из Ираафаанотра ушел на восток несколько дней назад. Кажется, он направлялся к обелискам". ]], code [[ dyp_quest_state = 5; ]]};
 
        {always = true; "[Уйти]", code [[ back(); ]]};
 
    };
 
};
 

	
 
dyp_obelisk = obj {
 
    nam = "dyp_obelisk";
 
    dsc = [[В центре площади стоит большой каменный {обелиск}, с нанесенными на него символами. ]];
 
    act = function(s)
 
        if here() == dyp_center and atl_rep_dyp < 0 then
 
            return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]];
 
        end;
 
        if dyp_stones_known then
 
            p [[У самого основания обелиска вы видите небольшое изображение, вырезанное в камне. Некогда оно было разрезано на шестнадцать частей, а части перепутаны между собой. ]];
 
            walkin("dyp_obelisk_puzzle");
 
        else
 
            return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]];
 
        end;
 
    end;
 
};
 

	
 
dyp_obelisk_puzzle = room {
 
    var {
 
        state = {
 
             0, 1, 2, 3,
 
             4, 5, 6, 7,
 
             8, 9,10,11,
 
            12,13,14,15
 
        };
 
        set = false;
 
    };
 
    win = "";
 
    nam = "Дипатреанотр, центр";
 
    underwater = true;
 
    entered = function(s)
 
        if not s.set then
 
            s.set = true;
 
            local details = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
 
            local matches = 3;
 
            for i = 1, 16 do
 
                local item;
 
                local index;
 
                repeat
 
                    index = rnd(#details);
 
                    item = details[index];
 
                until matches > 0 or item ~= s.state[i] or i == 16;
 
                table.remove(details, index);
 
                s.state[i] = item;
 
            end;
 
            local k = 1;
 
            for i = 1, 16 do
 
                if s.state[i] == 1 then
 
                if s.state[i] ~= 12 then
 
                    for j = i + 1, 16 do
 
                        if s.state[i] > s.state[j] and s.state[j] ~= 12 then
 
                            k = k + 1;
 
                        end;
 
                    end;
 
                else
 
                    k = k + math.floor(i / 4);
 
                end;
 
            end;
 
            if k % 2 == 0 then
 
            if k % 2 == 1 then
 
                for i = 16, 1, -1 do
 
                    if s.state[i] == 14 then
 
                        s.state[i] = 15;
 
                    elseif s.state[i] == 15 then
 
                        s.state[i] = 14;
 
                    end;
 
                end;
 
            end;
 
        end;
 
    end;
 
    pic = function(s)
 
        local p = 'images/dyp15.png';
 
        for i = 1, #s.state do
 
            local f = s.state[i];
 
            p = p .. ';images/dyp15_' .. tostring(f) .. '.png@' .. tostring(math.floor((i - 1) / 4) * 40) .. ',' .. tostring((3 - (i - 1) % 4) * 40);
 
        end;
 
        return p;
 
    end;
 
    dsc = [[У самого основания обелиска вы видите небольшое изображение, вырезанное в камне. Некогда оно было разрезано на шестнадцать частей, а части перепутаны между собой. ]];
 
    click = function(s, x, y)
 
        local ty = math.floor(x / 40);
 
        local tx = 3 - math.floor(y / 40);
 
        local tile = tx + ty * 4 + 1;
 
        if (s.state[tile] ~= 15) then
 
            if (tile - 4 > 0) and s.state[tile - 4] == 15 then
 
                tx = s.state[tile];
 
                s.state[tile] = s.state[tile - 4];
 
                s.state[tile - 4] = tx;
 
            elseif tx > 0 and s.state[tile - 1] == 15 then
 
                tx = s.state[tile];
 
                s.state[tile] = s.state[tile - 1];
 
                s.state[tile - 1] = tx;
 
            elseif tx < 3 and s.state[tile + 1] == 15 then
 
                tx = s.state[tile];
 
                s.state[tile] = s.state[tile + 1];
 
                s.state[tile + 1] = tx;
 
            elseif (tile + 4) <= 16 and s.state[tile + 4] == 15 then
 
                tx = s.state[tile];
 
                s.state[tile] = s.state[tile + 4];
 
                s.state[tile + 4] = tx;
 
            end;
 
        end;
 
        local f = "";
 
        for i = 1, #s.state do
 
            f = f .. "," .. tostring(s.state[i]);
 
        end;
 
        print(f);
 
        if not s:check_win() then
 
            walkin(here());
 
        else
 
            p = [[Одна из каменных плит рядом с обелиском отодвигается. В образовавшейся выемке вы видите небольшой светящийся красным светом камень. Вы забираете камень себе. ]];
 
            put(dyp_item_stone_red, pl);
 
            walk(dyp_center);
 
        end;
 
    end;
 
    check_win = function(s)
 
        for i = 1, #s.state do
 
            if s.state[i] ~= 16 - i then
 
                return false;
 
            end;
 
        end;
 
        return true;
 
    end;
 
    way = {
 
        kh_vroom("Отойти", "dyp_center");
 
    };
 
};
 

	
 
dyp_navjiarr = npc{
 
    nam = "dyp_navjiarr";
 
    dsc = [[Немногие {навьяры}, находящиеся сейчас на площади с интересом оглядываютс на Левиафан и вас. ]];
 
    phrases = {
 
        "Не стоит их беспокоить. ",
 
        "Вряд ли они смогут сказать вам что-то полезное. "
 
    };
 
};
 

	
 
dyp_library_entrance = room {
 
    nam = "Дипатреанотр, вход в библиотеку";
 
    underwater = true;
 
    dsc = [[Двухэтажное здание библиотеки разительно отличается от большинства строений Дипатреанотра. Выстроенное из массивных каменных плит, а не из булыжников, как остальные, оно хорошо сохранилось несмотря на достаточно большой возраст. Ровные стены тщательно очищаются навьярами от ила и водорослей, сохрнаяя здание в первозданном виде. ]];
 
    way = {
 
        kh_vroom("К обелиску", "dyp_center");
 
        kh_vroom("В библиотеку", "dyp_library_floor1");
 
    };
 
};
 

	
 
dyp_library_floor1 = room {
 
    nam = "Дипатреанотр, библиотека, первый этаж";
 
    underwater = true;
 
    dsc = [[Первый этаж здания библиотеки представляет собой огромный зал. Множество колонн, установленных ровными рядами, поддерживают потолок, между ними и вдоль стен установлены массивные стеллажи, заполненные различными записями. Большинство их сделаны на каменных табличках, но изредка встречаются и древние металлические. Ваше внимание привлекает одна из полок, заполненная небольшими блестящими дисками из неизвестного материала. ]];
 
    obj = {
 
        "dyp_library_statue"
 
    };
 
    way = {
 
        kh_vroom("Наружу", "dyp_library_entrance");
 
        kh_vroom("На второй этаж", "dyp_library_floor2");
 
    };
 
};
 

	
 
dyp_library_floor2 = room {
 
    nam = "Дипатреанотр, библиотека, второй этаж";
 
    underwater = true;
 
    dsc = [[Второй этаж библиотеки мало чем отличается от первого -- точно такие же колонны, точно такие же стеллажи. Здесь гораздо больше полок содержат блестящие диски и металлические таблички. ]];
 
    obj = {
 
        "dyp_librarian";
 
    };
 
    way = {
 
        kh_vroom("На первый этаж", "dyp_library_floor1");
 
    };
 
};
 

	
 
dyp_librarian = npc {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dyp_librarian";
 
    dsc = function(s)
 
        if s.state == 0 then
 
            return [[Перед вами на полу сидит {навьяр}. Вокруг него разложены какие-то записи, которые он рассматривает, время от времени перекладывая с места на место. ]];
 
        else
 
            return [[Перед вами на полу сидит {Эйлехиарр}. Вокруг него разложены какие-то записи, которые он рассматривает, время от времени перекладывая с места на место. ]];
 
        end;
 
    end;
 
    dlg = "dyp_librarian_dlg";
 
};
 

	
 
dyp_librarian_dlg = dlg {
 
    var {
 
        lse = false;
 
    };
 
    nam = "dyp_librarian_dlg";
 
    disp = "Эйлехиарр";
 
    entered = function(s)
 
        if atl_iyh_state == 10 and not s.lse then
 
            s.lse = true;
 
            pon("lse");
 
        end;
 
    
 
        if language_known then
 
            psub("speak");
 
            if (dyp_librarian_dlg.state == 0) then
 
                dyp_librarian_dlg.state = 1;
 
                return [[Перед вами, прямо на полу сидит навьяр. Рядом с ним разложены какие-то записи, которые он внимательно рассматривает, иногда перекладывая с места на место. Заметив вас, он поднимается и приветствует вас: "Я, Эйлехиарр из Дипатреанотра, приветствую тебя хевьяр. Ты говори, зачем ты пришел". ]];
 
            else
 
                return [[Эйлехиарр сидит на полу, перекладывая какие-то записи. Заметив вас он поднимается и приветствует вас: "Ты говори, зачем ты пришел". ]];
 
            end;
 
        else
 
            psub("no_speak");
 
            return [[Перед вами, прямо на полу сидит навьяр. Рядом с ним разложены какие-то записи, которые он внимательно рассматривает, иногда перекладывая с места на место. Заметив вас, он поднимается. По плавникам на его голове начинают бежать цветные полосы, но вы не понимаете, что он хочет вам сказать. ]];
 
        end;
 
    end;
 
    phr = {
 
        {tag="no_speak"};
 
        {always=true, "[Уйти]", code [[ back(); ]]};
 
        {tag="speak"};
 
        {"[Кодировщик] Что ты делаешь?", [[Эйлехиарр отвечает: "Эти записи сильно повреждены. К счастью у нас есть несколько копий этого текста. Но мои предшественники умудрились испортить все три!" ]]};
 
        {tag="lse", false, "[Кодировщик] Я ищу карту пути в Лсэрианотр.", [[Эйлехиарр задумчиво оглядывает помещение. Делает несколько шагов в одну сторону, потом в другую. Садится рядом со своими записями, снова встает. Наконец, он берет с одной из полок металлическую табличку и сообщает: "Здесь говорится о пещере рядом с храмом. Три ключа закрывают вход". ]], code [[pon("three_keys");]]};
 
        {tag="three_keys", false, "[Кодировщик] Где найти эти ключи?", [[Эйлехиарр отвечает: "Здесь, в Дипатреанотре. Один ты можешь забрать внизу, у статуи". ]], code [[ dyp_stones_known = true; dyp_lib_stone_state = 1; ]]};
 
        {always=true, "[Кодировщик] Я пойду.", [[Эйлехиарр прощается: "Ты возвращайся". ]], code [[ back(); ]]};
 
    };
 
};
 

	
 
dyp_item_stone_blue = obj {
 
    nam = "dyp_item_stone_blue";
 
    disp = [[Синий камень]];
 
    inv = [[Небольшой круглый камень, излучающий яркий синий свет. ]];
 
};
 

	
 
dyp_item_stone_green= obj {
 
    nam = "dyp_item_stone_green";
 
    disp = [[Зеленый камень]];
 
    inv = [[Небольшой круглый камень, излучающий яркий зеленый свет. ]];
 
};
 

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

	
 
dyp_item_wand = obj {
 
    nam = "dyp_item_wand";
 
    disp = "Жезл";
 
    inv = [[Жезл из неизвестного металла, покрытый навьярскими письменами. ]];
 
};
 

	
 
dyp_library_statue = obj {
 
    nam = "dyp_library_statue";
 
    dsc =function(s)
 
        if dyp_lib_stone_state > 1 then
 
            return [[В центре зала стоит статуя навьяра. В правой руке он держит табличку, которую сосредоточенно рассматривает. Левая рука статуи выглядит так, словно в ней должен находиться какой-то небольшой предмет, однако он отсутствует. ]];
0 comments (0 inline, 0 general)