Changeset - b03c40a64562
[Not reviewed]
default
0 3 0
Silverwing - 8 years ago 2016-09-06 18:18:05

Venaedanotrr labyrinth implemented
3 files changed with 513 insertions and 4 deletions:
0 comments (0 inline, 0 general)
journey_venaedanotrr.lua
Show inline comments
 
@@ -640,7 +640,7 @@ ven_wiseman_dlg = dlg {
 
        {"[Цветокод]Нет", [[
 
            "Тогда послушай. Этой легенде больше тысячи лет. В те времена навьяры жили в огромных городах и строили машины, помогающие им во всех областях. Однажды навьяры создали Наэтвьирра - машину, способную заменить им вождей. Но, к счастью, большинство навьяров поняли, что Наэтвьирр первым же делом уничтожит навьяров, не нужных ему. Опасаясь включения опасной машины, навьяры навсегда покинули город в надежде, что никто и никогда не найдет его".
 
        ]], code [[ psub("need_to_find"); ]]};
 
        {tag="need_to_find"}
 
        {tag="need_to_find"};
 
        {"[Цветокод]Мне нужен ключ от храма", [[
 
            "Я дам тебе его в надежде, так же как дал его тем хевьярам. Надеюсь, ты примешь верное решение. Теперь уходи. Оставь меня в покое".
 
        ]], code [[
 
@@ -648,4 +648,429 @@ ven_wiseman_dlg = dlg {
 
            back();
 
        ]]};
 
    };
 
};
 

	
 
ven_near_temple = room {
 
    nam = "Ущелье, У входа в храм Венаэданотра";
 
    dsc = [[
 
        Вы стоите на дне глубокого ущелья. Вход навьярского храма, вытесанный в камне, украшен резными изображениями сцен из легенд, и покрыты древними письменами, чей смысл утрачен ныне даже для навьяров. 
 
    ]];
 
    way = {
 
        kh_vroom("К храму", "ven_temple");
 
        kh_vroom("В Левиафан", "leviathan_airlock");
 
    };
 
};
 

	
 
ven_temple_entrance = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "Храм Венаэданотра, вход";
 
    dsc = function(s)
 
        if (s.state == 3) then
 
            return [[
 
                Массивные двери храма Ведаэданотра открыты, позволяя вам пройти.
 
            ]];
 
        else
 
            return [[
 
                Вход в храм Венаэданотра закрывают массивные металлические двери. На дверях вы видите три замочных скважины. 
 
            ]];
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("В ущелье", "ven_near_temple");
 
        kh_vroom("В храм", function(s)
 
            if (ven_temple_entrance.state == 3) then
 
                return "ven_temple_l1";
 
            else
 
                pr("Двери не открываются");
 
            end;
 
        end);
 
    };
 
    obj = {
 
        'ven_temple_lock_red',
 
        'ven_temple_lock_green',
 
        'ven_temple_lock_blue'
 
    };
 
};
 

	
 
ven_temple_lock_red = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = "ven_temple_lock_red";
 
    dsc = "{Первая скважина} отмечена красным цветом.^";
 
    act = function(s)
 
        if (s.state == 1) then
 
            return "Этот замок уже открыт. ";
 
        else
 
            return "Мне нужен ключ. ";
 
        end;
 
    end;
 
    use = function(s, o)
 
        if (o == item_ven_key_chieftain) then
 
            ven_temple_entrance.state = ven_temple_entrance.state + 1;
 
            remove(o, pl);
 
            pr("Вы вставляете ключ в скважину и поворачиваете его. ");
 
            if (ven_temple_entrance == 3) then
 
                pr("Двери с грохотом раздвигаются, открывая вам проход во внутренние помещения храма. ");
 
            end;
 
            return false;
 
        else
 
            return "Это сюда не подходит. ";
 
        end;
 
    end;
 
};
 

	
 
ven_temple_lock_green = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = "ven_temple_lock_green";
 
    dsc = "{Вторая скважина} отмечена красным цветом.^";
 
    act = function(s)
 
        if (s.state == 1) then
 
            return "Этот замок уже открыт. ";
 
        else
 
            return "Мне нужен ключ. ";
 
        end;
 
    end;
 
    use = function(s, o)
 
        if (o == item_ven_key_library) then
 
            ven_temple_entrance.state = ven_temple_entrance.state + 1;
 
            remove(o, pl);
 
            pr("Вы вставляете ключ в скважину и поворачиваете его. ");
 
            if (ven_temple_entrance == 3) then
 
                pr("Двери с грохотом раздвигаются, открывая вам проход во внутренние помещения храма. ");
 
            end;
 
            return false;
 
        else
 
            return "Это сюда не подходит. ";
 
        end;
 
    end;
 
};
 

	
 
ven_temple_lock_blue = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = "ven_temple_lock_blue";
 
    dsc = "{Третья скважина} отмечена красным цветом.^";
 
    act = function(s)
 
        if (s.state == 1) then
 
            return "Этот замок уже открыт. ";
 
        else
 
            return "Мне нужен ключ. ";
 
        end;
 
    end;
 
    use = function(s, o)
 
        if (o == item_ven_key_tower) then
 
            s.state = 1;
 
            ven_temple_entrance.state = ven_temple_entrance.state + 1;
 
            remove(o, pl);
 
            pr("Вы вставляете ключ в скважину и поворачиваете его. ");
 
            if (ven_temple_entrance == 3) then
 
                pr("Двери с грохотом раздвигаются, открывая вам проход во внутренние помещения храма. ");
 
            end;
 
            return false;
 
        else
 
            return "Это сюда не подходит. ";
 
        end;
 
    end;
 
};
 

	
 

	
 

	
 
ven_temple_l1 = labyrinth {
 
    dir1 = "На север";
 
    dir2 = "На восток";
 
    dir3 = "На юг";
 
    dir4 = "На запад";
 
    exit = "Выйти";
 
    nam = "ven_temple_l1";
 
    disp = "Венаэданотр, храм";
 
    position = "03";
 
    dsc = function(s)
 
        if true then
 
            return tostring(s.position);
 
        end;
 
        if (s.map[s.position].name) then
 
            return s.map[s.position].name;
 
        else
 
            return [[
 
                Вы стоите посреди запутанного лабиринта. Металлические стены по сторонам здесь ничем не отличаются от стен в других коридорах этого лабиринта. 
 
            ]];
 
        end;
 
    end;
 
    map = {
 
        ["00"] = {
 
            e1 = "10";
 
            e2 = "01";
 
        };
 
        ["01"] = {
 
            e4 = "00";
 
        };
 
        ["02"] = {
 
            e1 = "12";
 
            e2 = "03";
 
        };
 
        ["03"] = { 
 
            name = [[
 
                Вы стоите у входа в храм
 
            ]], 
 
            e1 = "13",
 
            e2 = "04",
 
            e4 = "02",
 
            ex = "ven_temple_entrance"
 
        };
 
        ["04"] = {
 
            e1 = "14",
 
            e2 = "05",
 
            e4 = "03"
 
        };
 
        ["05"] = {
 
            e1 = "15",
 
            e2 = "06",
 
            e4 = "04"
 
        };
 
        ["06"] = {
 
            e1 = "16",
 
            e2 = "07",
 
            e4 = "05"
 
        };
 
        ["07"] = {
 
            e4 = "06"
 
        };
 
        ["10"] = {
 
            e1 = "20",
 
            e3 = "00"
 
        };
 
        ["11"] = {
 
            e2 = "12"
 
        };
 
        ["12"] = {
 
            e3 = "02",
 
            e4 = "11"
 
        };
 
        ["13"] = {
 
            e1 = "23",
 
            e3 = "03"
 
        };
 
        ["14"] = {
 
            e1 = "24";
 
            e3 = "04";
 
        };
 
        ["15"] = {
 
            e3 = "05";
 
        };
 
        ["16"] = {
 
            e1 = "26";
 
            e3 = "06";
 
        };
 
        ["17"] = {
 
            e1 = "27";
 
        };
 
        ["20"] = {
 
            e1 = "30";
 
            e2 = "21";
 
            e3 = "10";
 
        };
 
        ["21"] = {
 
            e2 = "22";
 
            e4 = "20";
 
        };
 
        ["22"] = {
 
            e2 = "23";
 
            e4 = "21";
 
        };
 
        ["23"] = {
 
            e3 = "13";
 
            e4 = "22";
 
        };
 
        ["24"] = {
 
            e1 = "34";
 
            e3 = "14";
 
        };
 
        ["25"] = {
 
            e1 = "35";
 
            e2 = "26";
 
        };
 
        ["26"] = {
 
            e3 = "16";
 
            e4 = "25";
 
        };
 
        ["27"] = {
 
            e1 = "37";
 
            e3 = "17";
 
        };
 
        ["30"] = {
 
            e2 = "31";
 
            e3 = "20";
 
        };
 
        ["31"] = {
 
            e1 = "41";
 
            e4 = "30";
 
        };
 
        ["32"] = {
 
            e1 = "42";
 
            e2 = "33";
 
        };
 
        ["33"] = {
 
            e2 = "34";
 
            e4 = "32";
 
        };
 
        ["34"] = {
 
            e3 = "24";
 
            e4 = "33";
 
        };
 
        ["35"] = {
 
            e1 = "45";
 
            e2 = "36";
 
            e3 = "25";
 
        };
 
        ["36"] = {
 
            e2 = "37";
 
            e4 = "35";
 
        };
 
        ["37"] = {
 
            e1 = "47";
 
            e3 = "27";
 
            e4 = "36";
 
        };
 
        ["40"] = {
 
            e1 = "50";
 
            e2 = "41";
 
        };
 
        ["41"] = {
 
            e3 = "31";
 
            e4 = "40";
 
        };
 
        ["42"] = {
 
            e2 = "43";
 
            e3 = "32";
 
        };
 
        ["43"] = {
 
            e1 = "53";
 
            e2 = "44";
 
            e4 = "42";
 
        };
 
        ["44"] = {
 
            e2 = "45";
 
            e4 = "43";
 
        };
 
        ["45"] = {
 
            e3 = "35";
 
            e4 = "44";
 
        };
 
        ["46"] = {
 
            e1 = "56";
 
        };
 
        ["47"] = {
 
            e1 = "57";
 
            e3 = "37";
 
        };
 
        ["50"] = {
 
            e1 = "60";
 
            e3 = "40";
 
        };
 
        ["51"] = {
 
            e1 = "61";
 
            e2 = "52";
 
        };
 
        ["52"] = {
 
            e2 = "53";
 
            e4 = "51";
 
        };
 
        ["53"] = {
 
            e1 = "63";
 
            e3 = "43";
 
            e4 = "52";
 
        };
 
        ["54"] = {
 
            e1 = "64";
 
            e2 = "55";
 
        };
 
        ["55"] = {
 
            e2 = "56";
 
            e4 = "54";
 
        };
 
        ["56"] = {
 
            e1 = "66";
 
            e3 = "46";
 
            e4 = "55";
 
        };
 
        ["57"] = {
 
            e1 = "67";
 
            e3 = "47";
 
        };
 
        ["60"] = {
 
            e1 = "70";
 
            e2 = "61";
 
            e3 = "50";
 
        };
 
        ["61"] = {
 
            e3 = "51";
 
            e4 = "60";
 
        };
 
        ["62"] = {
 
            e1 = "72";
 
            e2 = "63";
 
        };
 
        ["63"] = {
 
            e3 = "53";
 
            e4 = "62";
 
        };
 
        ["64"] = {
 
            e1 = "74";
 
            e3 = "54";
 
        };
 
        ["65"] = {
 
            e1 = "75";
 
            e2 = "66";
 
        };
 
        ["66"] = {
 
            e3 = "56";
 
            e4 = "65";
 
        };
 
        ["67"] = {
 
            e1 = "77";
 
            e3 = "57";
 
        };
 
        ["70"] = {
 
            e2 = "71";
 
            e3 = "60";
 
        };
 
        ["71"] = {
 
            e2 = "72";
 
            e4 = "70";
 
        };
 
        ["72"] = {
 
            e3 = "62";
 
            e4 = "71";
 
        };
 
        ["73"] = {
 
            e2 = "74";
 
            ex = "ven_temple_l2";
 
        };
 
        ["74"] = {
 
            e3 = "64";
 
            e4 = "73";
 
        };
 
        ["75"] = {
 
            e2 = "76";
 
            e3 = "65";
 
        };
 
        ["76"] = {
 
            e2 = "77";
 
            e4 = "75";
 
        };
 
        ["77"] = {
 
            e3 = "67";
 
            e4 = "76";
 
        };
 
    };
 
};
 

	
 
ven_temple_l2 = room {
 
    nam = "Венаэданотр, храм, второй этаж";
 
};
 
\ No newline at end of file
main.lua
Show inline comments
 
@@ -222,7 +222,7 @@ function init()
 
	move(submarine_leviathan, "atl_aqua_leviathan_dock");
 
    submarine_leviathan:enable();   
 
	   
 
	pl.where = "ven_center";
 
	pl.where = "ven_temple_l1";
 
    move(submarine_leviathan, "ven_center");   
 
	--put(item_suit, pl);
 
	
utils.lua
Show inline comments
 
@@ -77,9 +77,16 @@ end;
 
--[[
 
	vroom with additional functionality
 
]]
 
function kh_vroom(disp, target, seen_level)
 
function kh_vroom(disp, target, nam, seen_level)
 
    if (type(nam) == "number") then
 
        seen_level = nam;
 
        nam = disp;
 
    end;
 
    if (not nam) then
 
        nam = disp;
 
    end;
 
	return room {
 
		nam = disp;
 
		nam = nam;
 
		disp = disp;
 
		where = target;
 
		enter = _kh.vroom_enter;
 
@@ -367,4 +374,81 @@ suit = function(tab)
 
	end;
 
	
 
	return obj(tab);
 
end;
 
 
labyrinth = function(tab)
 
    local position = "0";
 
    if (tab.position) then
 
        position = tab.position;
 
    end;
 
    local lab;
 
    lab = room {
 
        var {
 
            position = position;
 
        };
 
        nam = tab.nam;
 
        disp = tab.disp;
 
        map = tab.map;
 
        entered = function(s)
 
            print(s.position);
 
            path('e1'):disable();
 
            path('e2'):disable();
 
            path('e3'):disable();
 
            path('e4'):disable();
 
            path('ex'):disable();
 
            if (s.map[s.position].e1) then
 
                path('e1'):enable();
 
            end;
 
            if (s.map[s.position].e2) then
 
                path('e2'):enable();
 
            end;
 
            if (s.map[s.position].e3) then
 
                path('e3'):enable();
 
            end;
 
            if (s.map[s.position].e4) then
 
                path('e4'):enable();
 
            end;
 
            if (s.map[s.position].ex) then
 
                path('ex'):enable();
 
            end;
 
            if (type(tab.entered) == 'function') then
 
                tab.entered(s);
 
            end;
 
            if (type(s.map[s.position].entered) == 'function') then
 
                s.map[s.position].entered(s);
 
            end;
 
        end;
 
        dsc = function(s)
 
            if (type(tab.dsc) == "function") then
 
                return tab.dsc(s);
 
            else
 
                return tab.dsc .. s.map[s.position].name;
 
            end;
 
        end;
 
        way = {
 
            kh_vroom(tab.dir1, function()
 
                if (type(lab.position) == "function") then
 
                    lab.map[lab.position].left(lab);
 
                end;
 
                lab.position = lab.map[lab.position].e1;
 
                return lab;
 
            end, "e1");
 
            kh_vroom(tab.dir2, function()
 
                lab.position = lab.map[lab.position].e2;
 
                return lab;
 
            end, "e2");
 
            kh_vroom(tab.dir3, function()
 
                lab.position = lab.map[lab.position].e3;
 
                return lab;
 
            end, "e3");
 
            kh_vroom(tab.dir4, function()
 
                lab.position = lab.map[lab.position].e4;
 
                return lab;
 
            end, "e4");
 
            kh_vroom(tab.exit, function()
 
                return lab.map[lab.position].ex;
 
            end, "ex");
 
        };
 
    };
 
    return lab;
 
end;
 
\ No newline at end of file
0 comments (0 inline, 0 general)