Changeset - 43738f92266f
[Not reviewed]
default
0 1 0
Silverwing - 4 years ago 2020-08-30 12:06:39

Preliminary endings and full gameplay implemented
1 file changed with 623 insertions and 39 deletions:
main3.lua
623
39
0 comments (0 inline, 0 general)
main3.lua
Show inline comments
 
@@ -3,11 +3,16 @@
 
-- $Author: Khaelenmore Thaal
 
-- $Info: Игра на Паровозик 6
 

	
 
require 'noinv'
 
loadmod 'cutscene'
 

	
 
global {
 
    timestamp = -30; -- Seconds
 
    widget_status = 0; -- 0 -- not done; 1 -- late; 2 -- in time
 
    taggart_status = 0; -- 0 -- not done; 1 -- done
 
    boys_status = 0; -- 0 -- not done; 1 -- done
 
    dinner_status = 0; -- 0 -- not done; 1 -- late at all; 2 -- late 30 minutes; 3 -- a bit late; 4 -- not late
 
    makeup = 0; -- 0 -- not done, 1 -- done
 
}
 

	
 
declare {
 
@@ -28,17 +33,11 @@ function set_distance(sp, dp, di)
 
    distances[dp][sp] = di;
 
end;
 

	
 
set_distance('bedroom', 'treasury', 10 * MINUTE);
 
set_distance('bedroom', 'workshop', 15 * MINUTE);
 
set_distance('bedroom', 'dining_hall', 10 * MINUTE);
 
set_distance('bedroom', 'guard_post', 15 * MINUTE);
 
set_distance('bedroom', 'west_gate', 15 * MINUTE);
 

	
 
set_distance('treasury', 'workshop', 15 * MINUTE);
 
set_distance('treasury', 'dining_hall', 25 * MINUTE);
 
set_distance('treasury', 'guard_post', 20 * MINUTE);
 
set_distance('treasury', 'west_gate', 20 * MINUTE);
 

	
 
set_distance('workshop', 'dining_hall', 15 * MINUTE);
 
set_distance('workshop', 'guard_post', 20 * MINUTE);
 
set_distance('workshop', 'west_gate', 20 * MINUTE);
 
@@ -102,7 +101,109 @@ ppath = std.class({
 
}, std.room)
 

	
 

	
 
ppath = std.class({
 
    __path_type = true;
 
    new = function(_, t)
 
        if type(t) ~= 'table' then
 
            std.err("Wrong path argument. Use {} as path argument.", 2)
 
        end
 
        
 
        local n, s, sr, ds = t[1], t[2], t[3]
 

	
 
        if not ds then
 
            s, sr, ds = n, s, sr
 
            n = nil
 
        end
 

	
 
        local new = {
 
            before = s;
 
            src = sr;
 
            dst = ds;
 
        }
 

	
 
        for k, v in std.pairs(t) do
 
            if type(k) == 'string' then
 
                new[k] = v
 
            end
 
        end
 

	
 
        new.nam = n or new.nam
 

	
 
        return std.room(new)
 
    end;
 
    disp = function(s)
 
        local w = s.dst
 
        if disabled(w) or closed(w) then
 
            return false
 
        end
 
        if s.after ~= nil and visited(w) then
 
            return std.call(s, 'after')
 
        end
 
        return std.call(s, 'before') .. ' (' .. tostring(math.floor(distances[s.src][s.dst] / MINUTE)) ..' минут)';
 
    end;
 
    onwalk = function(s, _)
 
        local w = s.dst
 
        if not disabled(w) and not closed(w) then
 
            walk(w)
 
            if me():moved() then
 
                timestamp = timestamp + distances[s.src][s.dst];
 
            end;
 
        end
 
        return false
 
    end;
 
}, std.room)
 

	
 
dpath = std.class({
 
    __path_type = true;
 
    new = function(_, t)
 
        if type(t) ~= 'table' then
 
            std.err("Wrong path argument. Use {} as path argument.", 2)
 
        end
 

	
 
        local n, s, d, ds = t[1], t[2], t[3]
 

	
 
        if not ds then
 
            s, d, ds = n, s, d
 
            n = nil
 
        end
 

	
 
        local new = {
 
            before = s;
 
            src = sr;
 
            dst = ds;
 
        }
 

	
 
        for k, v in std.pairs(t) do
 
            if type(k) == 'string' then
 
                new[k] = v
 
            end
 
        end
 

	
 
        new.nam = n or new.nam
 

	
 
        return std.room(new)
 
    end;
 
    disp = function(s)
 
        local w = s.dst
 
        if disabled(w) or closed(w) then
 
            return false
 
        end
 
        if s.after ~= nil and visited(w) then
 
            return std.call(s, 'after')
 
        end
 
        return std.call(s, 'before') .. ' (' .. tostring(math.floor(d / MINUTE)) ..' минут)';
 
    end;
 
    onwalk = function(s, _)
 
        local w = s.dst
 
        if not disabled(w) and not closed(w) then
 
            walk(w)
 
            if me():moved() then
 
                timestamp = timestamp + d;
 
            end;
 
        end
 
        return false
 
    end;
 
}, std.room)
 

	
 
function convert_timestamp(ts)
 
    if ts == nil then
 
@@ -138,12 +239,31 @@ stat {
 
        if not here().notime then
 
            timestamp = timestamp + 30;
 
        end;
 

	
 
        if here()^'guard_post' then
 
            if timestamp >= 5 * 60 * MINUTE then
 
                local taggart = _ '#taggart'
 

	
 
                if taggart ~= nil then
 
                    remove(taggart, here());
 
                    _'#guard':enable();
 
                    
 
                    pr [[К Таггарту подходит незнакомый мне стражник и что-то говорит ему. После этого Таггарт направляется к выходу. Проходя мимо меня, он с укоризной смотрит мне в лицо и ничего не говоря удаляется. Сейчас передавать ему ключ не только бесполезно, но и может навредить. ]];
 
                end;
 
            end;
 
        elseif here()^'dining_hall' then
 
            if timestamp >= 6 * 60 * MINUTE then
 
                dinner_status = 4;
 
                walkin('ending1');
 
            end;
 
        end;
 
    end;
 
}
 

	
 
room {
 
    nam = 'main';
 
    disp = 'Сказки Тайрандела: Утро принцессы Асурьи';
 
    noinv = true;
 
    notime = true;
 
    decor = [[
 
        Асурья -- дочь императора Тайрандела, Данасиса I, законная наследница трона. 
 
@@ -162,10 +282,9 @@ room {
 
    disp = 'Спальня';
 
    dsc = 'Моя спальня. Здесь я сплю и иногда читаю. ';
 
    way = {
 
        ppath {'В сокровищницу', 'bedroom', 'treasury'};
 
        ppath {'В мастерскую', 'bedroom', 'workshop'};
 
        ppath {'В обеденный зал', 'bedroom', 'dining_hall'};
 
        ppath {'На склад', 'bedroom', 'guard_post'};
 
        ppath {'К сторожевому посту', 'bedroom', 'guard_post'};
 
        ppath {'К западным воротам', 'bedroom', 'west_gate'};
 
    };
 
}: with {
 
@@ -193,6 +312,68 @@ room {
 
            walkin('wardrobe');
 
        end;
 
    };
 
    obj {
 
        nam = '#table';
 
        dsc = 'Рядом со шкафом стоит небольшой {столик}. ';
 
        act = function(s)
 
            return walkin('table');
 
        end;
 
    };
 
}
 

	
 
room {
 
    nam = 'table';
 
    disp = 'Столик';
 
    dsc = 'Мой туалетный столик. Здесь я привожу себя в порядок, когда это необходимо. ';
 
    way = {
 
        path {'Назад', function(s) return here():from() end; };
 
    }
 
}: with {
 
    obj {
 
        nam = '#mirror';
 
        dsc = 'На столе стоит {зеркальце}. ';
 
        act = function(s)
 
            if makeup == 0 then
 
                return 'Здесь я могу {#makeup|привести себя в порядок} перед обедом. Это займет 15 минут. И лучше сделать это после всех остальных дел, чтобы не испортить макияж и прическу. ';
 
            else
 
                return 'Мне некогда с этим больше возиться. ';
 
            end;
 
        end;
 
    };
 
    obj {
 
        nam = '#makeup';
 
        act = function(s)
 
            if makeup == 0 then
 
                if have('clothes_dress') then
 
                    makeup = 1;
 
                    timestamp = timestamp + 15 * MINUTE;
 
                    return 'Я по-быстрому привожу в порядок свои волосы и лицо. Теперь я выгляжу достаточно "прилично" по меркам двора. ';
 
                else
 
                    return 'Сперва надо одеться как подобает. ';
 
                end;
 
            else
 
                return 'Я уже сделала все, что нужно. ';
 
            end;
 
        end;
 
    };
 
    obj {
 
        state = 0;
 
        nam = '#jewelbox';
 
        dsc = 'Перед зеркалом стоит {шкатулка}. ';
 
        act = function(s)
 
            if s.state == 0 then
 
                return 'В ней хранятся мои драгоценности. Посмотрим, что отсюда можно отдать друзьям. Вот это колечко подойдет. Я забираю из шкатулки серебряное колечко. ';
 
            else
 
                return 'Мне здесь больше ничего не нужно. ';
 
            end;
 
        end;
 
    };
 
}
 

	
 
obj {
 
    nam = 'trinket';
 
    disp = 'Колечко';
 
    inv = 'Серебряное колечко с резным узором в виде чешуи. Такие встречаются довольно часто, но при этом достаточно ценные. ';
 
}
 

	
 
dlg {
 
@@ -220,7 +401,12 @@ dlg {
 
            take('clothes_mech');
 
            timestamp = timestamp + 10 * MINUTE;
 
            walkout();
 
            return 'Я переодеваюсь. ';
 
            if makeup == 1 then
 
                makeup = 0;
 
                return 'Пока переодевалась, я испортила прическу и макияж. Придется делать все заново. ';
 
            else
 
                return 'Я переодеваюсь. ';
 
            end;
 
        end};
 
        {cond=function(s) return not have('clothes_travel') end, 'Походная одежда. Припрятана под шкафом. В ней меня узнают только друзья и родственники. ', function(s)
 
            remove('clothes_mech', me());
 
@@ -228,7 +414,12 @@ dlg {
 
            take('clothes_travel');
 
            timestamp = timestamp + 10 * MINUTE;
 
            walkout();
 
            return 'Я переодеваюсь. ';
 
            if makeup == 1 then
 
                makeup = 0;
 
                return 'Пока переодевалась, я испортила прическу и макияж. Придется делать все заново. ';
 
            else
 
                return 'Я переодеваюсь. ';
 
            end;
 
        end};
 
        {cond=function(s) return have('clothes_dress') or have('clothes_mech') or have('clothes_travel') end, 'Не переодеваться', function(s)
 
            walkout();
 
@@ -266,29 +457,13 @@ obj {
 
obj {
 
    nam = 'clothes_travel';
 
    disp = 'Походная одежда';
 
    inv = 'Практичный и прочный костюм. Высокие кожаные башмаки, толстые брюки из плотной ткани, названия которой я не знаю, куртка с капюшоном из такой же. Он немного велик мне, но все равно нравится мне. Здесь не так много карманов, как в моем рабочем костюме, но зато он похож на одежду, которую носят слуги, часто покидающие замок, а в капюшоне меня не узнать. ';
 
    inv = 'Практичный и прочный костюм. Высокие кожаные башмаки, толстые брюки из плотной ткани, названия которой я не знаю, куртка с капюшоном из такой же. Он немного велик мне, но все равно нравится мне. Здесь не так много карманов, как в моем рабочем костюме, но зато он похож на одежду, которую носят слуги, часто покидающие дворец, а в капюшоне меня не узнать. ';
 
}
 

	
 
room {
 
    nam = 'treasury';
 
    onenter = function(s)
 
        if have('clothes_travel', me()) then
 
            pr 'Меня не пропустят туда в таком виде.';
 
            return false;
 
        end;
 
        if not have('clothes_dress', me()) and not have('clothes_mech', me()) then
 
            pr 'Не пойду я никуда пока не оденусь!';
 
            return false;
 
        end;
 
    end;
 
    dsc = 'Личная императорская сокровищница. Мне кажется, папа сам не знает о многих вещах, хранящихся здесь. ';
 
    way = {
 
        ppath {'В спальню', 'treasury', 'bedroom'};
 
        ppath {'В мастерскую', 'treasury', 'workshop'};
 
        ppath {'В обеденный зал', 'treasury', 'dining_hall'};
 
        ppath {'На склад', 'treasury', 'guard_post'};
 
        ppath {'К западным воротам', 'treasury', 'west_gate'};
 
    };
 
obj {
 
    nam = 'key';
 
    disp = 'Ключ';
 
    inv = 'Ключ от склада. Я договорилась с Таггартом, чтобы забрать оттуда несколько очень нужных мне вещичек. Теперь мне надо вернуть его. ';
 
}
 

	
 
room {
 
@@ -311,9 +486,8 @@ room {
 
    dsc = 'Мастерская механиков. Здесь работают мои друзья Флинн и Виджет. ';
 
    way = {
 
        ppath {'В спальню', 'workshop', 'bedroom'};
 
        ppath {'В сокровищницу', 'workshop', 'treasury'};
 
        ppath {'В обеденный зал', 'workshop', 'dining_hall'};
 
        ppath {'На склад', 'workshop', 'guard_post'};
 
        ppath {'К сторожевому посту', 'workshop', 'guard_post'};
 
        ppath {'К западным воротам', 'workshop', 'west_gate'};
 
    };
 
}:with {
 
@@ -434,17 +608,48 @@ room {
 
            return false;
 
        end;
 
    end;
 
    enter = function(s)
 
        if timestamp > 6 * 60 * MINUTE then
 
            if timestamp > 8 * 60 * MINUTE then
 
                dinner_status = 1;
 
            elseif timestamp > (6 * 60 + 30) * MINUTE then
 
                dinner_status = 2;
 
            else
 
                dinner_status = 3;
 
            end;
 
            walkin('ending1');
 
        end;
 
    end;
 
    way = {
 
        ppath {'В спальню', 'dining_hall', 'bedroom'};
 
        ppath {'В сокровищницу', 'dining_hall', 'treasury'};
 
        ppath {'В мастерскую', 'dining_hall', 'workshop'};
 
        ppath {'На склад', 'dining_hall', 'guard_post'};
 
        ppath {'К сторожевому посту', 'dining_hall', 'guard_post'};
 
        ppath {'К западным воротам', 'dining_hall', 'west_gate'};
 
    };
 
}: with {
 
    obj {
 
        nam = '#tables';
 
        dsc = 'По всему залу аккуратно расставлены огромные {столы}. ';
 
        act = 'За каждым из таких мжно уместить не меньше сотни человек!';
 
    };
 
    obj {
 
        nam = '#servants';
 
        dsc = 'По залу туда сюда бегают {слуги}. ';
 
        act = 'Они заняты подготовкой зала к сегодняшнему празднеству. Не стоит их отвлекать. ';
 
    };
 
    obj {
 
        nam = '#wait';
 
        dsc = 'Я могу {подождать обеда} здесь. ';
 
        act = function(s)
 
            dinner_status = 4;
 
            walkin('ending1');
 
        end;
 
    };
 
}
 

	
 
room {
 
    nam = 'guard_post';
 
    disp = 'Сторожевой пост';
 
    onenter = function(s)
 
        if have('clothes_dress', me()) or have('clothes_mech', me()) then
 
            pr 'Я не хочу чтобы меня там видели. У меня есть походная одежда, в которой меня не узнать, лучше одеться в нее. ';
 
@@ -454,20 +659,78 @@ room {
 
            pr 'Не пойду я никуда пока не оденусь!';
 
            return false;
 
        end;
 
        
 
        if timestamp > 5 * 60 * MINUTE then
 
            local taggart = lookup('#taggart', 'guard_post');
 
            if taggart ~= nil then
 
                remove(taggart, 'guard_post');
 
                lookup('#guard', 'guard_post'):enable();
 
                p [[Я опоздала. Таггарт уже ушел. Чтоб меня темные забрали, что же теперь с ним будет...]];
 
            end;
 
        end;
 
    end;
 
    enter = function(s)
 
        if taggart_status == 0 and timestamp <= 5 * 60 * MINUTE then
 
            walkin('taggart_dlg');
 
        end;
 
    end;
 
    dsc = 'Сторожевой пост у склада. Попасть на склад можно только через это место. ';
 
    way = {
 
        ppath {'В спальню', 'guard_post', 'bedroom'};
 
        ppath {'В сокровищницу', 'guard_post', 'treasury'};
 
        ppath {'В мастерскую', 'guard_post', 'workshop'};
 
        ppath {'В обеденный зал', 'guard_post', 'dining_hall'};
 
        ppath {'К западным воротам', 'guard_post', 'west_gate'};
 
    };
 
}: with {
 
    obj {
 
        nam = '#table';
 
        dsc = 'У одной из стен стоит массивный дубовый {стол}. ';
 
        act = 'Устойчивый. Поверхность не очень ровная, правда. За таким я бы не смогла ни рисовать ни писать. Неужели нельзя было поставить нормальный?';
 
    }: with {
 
        obj {
 
            nam = '#chair';
 
            dsc = 'За столом стоит не менее массивный {стул}. ';
 
            act = 'Я как-то пробовала сидеть на таком. Спина начинает болеть уже через несколько минут! Зато он прочный и устойчивый -- даже качаться можно, не сломается. Не в пример нашим. ';
 
        }: with {
 
            obj {
 
                nam = '#taggart';
 
                dsc = 'На стуле сидит {Таггарт}.';
 
                act = function(s)
 
                    if taggart_status == 0 then
 
                        walkin('taggart_dlg');
 
                    else
 
                        return [[Я уже отдала ему ключ. Не стоит больше отвлекать его. ]];
 
                    end;
 
                end;
 
            };
 
            obj {
 
                nam = '#guard';
 
                dsc = 'На стуле сидит {Стражник}.';
 
                act = 'Не стоит его беспокоить. ';
 
            }:disable();
 
        }
 
    }
 
}
 

	
 
dlg {
 
    nam = 'taggart_dlg';
 
    enter = [[Таггарт чуть старше меня и он мой хороший друг. Увидев меня, он подходит и спрашивает тихо: "Асти? Ты принесла?"]];
 
    phr = {
 
        {cond=function(s) return have('key'); end, "[Отдать ключ] Да, конечно. ", function(s)
 
            taggart_status = 1;
 
            return [["Спасибо, Асти. Я знал, что ты не подведешь", -- с улыбкой отвечает Таггарт.]]
 
        end};
 
        {"[Уйти] Ой, забыла.", function(s)
 
            walkout();
 
            return [["Асти! Мне очень сильно попадет, если ты не принесешь ключ. Моя смена заканчивается ровно в 11. Если я не сдам его, меня накажут", -- ругается Таггарт. И я его прекрасно понимаю. Не мешкая, я убегаю искать ключ. ]]
 
        end};
 
    };
 
}
 

	
 
room {
 
    nam = 'west_gate';
 
    dsc = 'Западные ворота. Через них мне проще всего будет добраться до места встречи с Фредом и Уиллом. ';
 
    disp = 'Западные ворота дворца';
 
    dsc = 'Западные ворота дворца. Через них мне проще всего будет добраться до места встречи с Фредом и Уиллом. ';
 
    onenter = function(s)
 
        if have('clothes_dress', me()) or have('clothes_mech', me()) then
 
            pr 'Я не хочу чтобы меня там видели. У меня есть походная одежда, в которой меня не узнать, лучше одеться в нее. ';
 
@@ -480,13 +743,334 @@ room {
 
    end;
 
    way = {
 
        ppath {'В спальню', 'west_gate', 'bedroom'};
 
        ppath {'В сокровищницу', 'west_gate', 'treasury'};
 
        ppath {'В мастерскую', 'west_gate', 'workshop'};
 
        ppath {'В обеденный зал', 'west_gate', 'dining_hall'};
 
        ppath {'На склад', 'west_gate', 'guard_post'};
 
        ppath {'К сторожевому посту', 'west_gate', 'guard_post'};
 
        path {'Выйти', 'west_gate_outside'};
 
    };
 
}: with {
 
    obj {
 
        nam = '#guards';
 
        dsc = 'У ворот стоят двое {стражников}. ';
 
        act = 'Темный! Одного из них я знаю. Это Игерд. Он меня ни за что не пропустит если узнает. Но в этой одежде он меня не узнает. ';
 
    };
 
    obj {
 
        nam = '#gate';
 
        dsc = '{Ворота} открыты. ';
 
        act = 'Здесь постоянно ходят слуги, так что я могу пройти незамеченной. ';
 
    };
 
    obj {
 
        nam = '#servants';
 
        dsc = 'Время от времени кто-то из {слуг} входит или выходит из дворца. ';
 
        act = 'Издалека меня я очень похожа на них. Надеюсь, смогу пройти незамеченной. ';
 
    }
 
}
 

	
 
room {
 
    nam = 'west_gate_outside';
 
    disp = 'Снаружи западных ворот';
 
    dsc = 'Я выбралась за пределы дворца. Отсюда я за сорок минут доберусь до леса, где я договорилась встретиться с Фредом и Уиллом. ';
 
    way = {
 
        path {'Во дворец', 'west_gate'};
 
        tpath {'В лес', 40 * MINUTE, 'forest'};
 
    }
 
}: with {
 
    
 
}
 

	
 
room {
 
    nam = 'forest';
 
    disp = 'Опушка леса';
 
    dsc = 'Я стою на опушке леса. Дышится здесь легко и приятно, совсем не так как во дворце и, уж тем более, в городе. Здесь мы договорились о встрече с Фредом и Уиллом. ';
 
    way = {
 
        tpath {'Во дворец', 40 * MINUTE, 'west_gate_outside'};
 
    }
 
}: with {
 
    obj {
 
        nam = "#trees";
 
        dsc = 'Несколько {елей} стоят поблизости, ';
 
        act = 'Высокие стройные деревья, покрытые хвоей. Я читала, что они растут практически по всему Тайранделу. ';
 
    };
 
    obj {
 
        nam = "#forest";
 
        dsc = 'а чуть дальше начинается густой {лес}. ';
 
        act = 'Если я войду туда, то сама уже не выйду. ';
 
    };
 
    obj {
 
        nam = '#grass';
 
        dsc = '{Трава} здесь совершенно вытоптана. ';
 
        act = 'Большая ровная площадка хорошо подходит для самых разных активных игр, столь любимых городскими мальчишками.  ';
 
    };
 
    obj {
 
        nam = '#boys';
 
        dsc = 'Несколько стаек {мальчишек} носятся по полянке. ';
 
        act = 'Я даже немного завидую им. {#thoughts|Если бы у меня было столько свободного времени...} ';
 
    };
 
    obj {
 
        nam = '#thoughts';
 
        act = 'Я бы уже давно собрала свою счетную машинку!';
 
    };
 
    obj {
 
        nam = '#fred_and_will';
 
        dsc = '{Фред и Уилл} сидят на корочках у одного из деревьев и что-то рассматривают в траве. ';
 
        act = function(s)
 
            if _('boys_dlg').state == 0 then
 
                walkin('boys_dlg');
 
            else
 
                pr [[Мне сегодня совсем некогда с ними играть. ]];
 
            end;
 
        end;
 
    };
 
}
 

	
 
dlg {
 
    state = 0;
 
    nam = 'boys_dlg';
 
    enter = [[Фред и Уилл даже не заметили моего приближения. ]];
 
    phr = {
 
        {'Привет, ребята!', function(s)
 
            if s.state == 0 then
 
                s.state = 1;
 
                return 'Фред отвлекается от процесса и приветствует меня: "Привет, Асти!" Уилл повторяет за ним: "Привет, Асти!". ';
 
            else
 
                return 'Уилл отвечает: "Привет, Асти!"^Фред просто молча машет мне рукой.'
 
            end;
 
        end);
 
        };
 
        {'Что увидели?', function(s)
 
            if s.state == 0 then
 
                s.state = 1;
 
                return 'Фред отвлекается от процесса и смотрит на меня: "Привет, Асти! Тут жук! Красивый! Смотри!" -- Он показывает пальцем в траву^ Я смотрю и вижу переливающегося зеленого жука. Кажется я читала, что он называется "золотистая бронзовка". Действительно, очень красивый.';
 
            else
 
                return 'Фред отвлекается от процесса и смотрит на меня: "Тут жук! Красивый! Смотри!" -- Он показывает пальцем в траву^ Я смотрю и вижу переливающегося зеленого жука. Кажется я читала, что он называется "золотистая бронзовка". Действительно, очень красивый.';
 
            end;
 
        end};
 
        {cond=function(s) return have('trinket') end, '[Отдать колечко]Я принесла то, что обещала', function(s)
 
            remove('trinket', me());
 
            boys_status = 1;
 
            if s.state == 0 then
 
                s.state = 1;
 
                return [[
 
                    Фред отвлекается от процесса и смотрит на меня: "О! Асти! Привет!". ^
 
                    Уилл берет серебряное колечко из моих рук и восклицает: "Вау! Асти, где ты взяла его?!"
 
                ]];
 
            else
 
                return [[
 
                    Уилл берет серебряное колечко из моих рук и восклицает: "Вау! Асти, где ты взяла его?!"
 
                ]];
 
            end;
 
        end, 
 
            {'Из дома принесла. Только никому не говорите. ', function(s)
 
                remove(lookup('#fred_and_will', 'forest'), 'forest');
 
                walkout();
 
                return 'Уилл кивает: "Класс, спасибо тебе огромное, Асти! Нам этого колечка хватит, чтобы целый месяц в цирк ходить! "^ Радостные, ребята убегают. А мне пора во дворец. ';
 
            end}
 
        };
 
    };
 
}
 

	
 
cutscene {
 
    nam = 'ending1';
 
    decor = function(s)
 
        if dinner_status == 1 then
 
            pr [[К тому моменту, как я появляюсь, на празднике остаются лишь редкие гости. Мой отец, едва увидев меня, резким шагом направляется ко мне. ^]];
 
            pr [[
 
                [cut Продолжить]
 
            ]];
 
            pr [["Асурья! То, что ты себе позволяешь, уже ни в какие рамки не лезет!" -- он почти кричит на меня, а я могу лишь стоять, виновато опустив голову. ^]];
 
            pr [[
 
                [cut Да, я пропустила этот чертов обед, будь он неладен. ]
 
            ]];
 
            pr [[Схватив меня за руку, папа буквально тащит меня в свой кабинет. Втолкнув меня внутрь и закрыв дверь он принялся кричать, уже не сдерживаясь: "Да что ты себе позволяешь, демоница! С кем поведешься от того и наберешься! Якшаешься со всяким сбродом!"^]];
 
            pr [[
 
                [cut Я еле сдерживалась, чтобы не заплакать. ]
 
            ]];
 
            pr [[Я еле сдерживалась, чтобы не заплакать. Да, я девочка, но я будушая императрица! [cut Я должна быть сильной!]Я должна быть сильной! Все мне так говорят. [cut Я вспомнила, как учил меня Уилл]Я вспомнила, как учил меня Уилл: стиснуть зубы и молчать. ^]];
 
            pr [[
 
                Я молча выслушала бесконечную тираду отца. Наконец, подошло самое интересное...^
 
                [cut Наказание]
 
                Вот тут я уже не могла сдержаться -- на ближайший год вся моя жизнь [cut превращалась в ад]превращалась в ад -- отныне мне нельзя было общаться ни с кем, кроме моих родственников, личных слуг и придворных. Мне запретили посещать лаборатории и мастерские. Мне запретили выходить из замка, иначе как в сопровождении. И кроме того, в моем расписании теперь вдвое больше уроков этикета. Времени на занятия механикой у меня тоже пока не будет.^
 
            ]];
 
        elseif dinner_status == 2 then
 
            pr [[
 
                Я появляюсь, когда праздник находится в самом разгаре и мгновенно привлекаю к себе внимание. Да, мое опоздание еще долго будут обсуждать все во дворце, но это [cut не самое страшное].не самое страшное. Самое страшное, это [cut разгневанный взгляд отца]. 
 
            ]];
 
            pr [[
 
                разгневанный взгляд отца.^
 
                Праздник проходит как обычно -- музыканты играют замысловатые мелодии, гости сидят за столами и вкушают всевозможные яства. Я, как и положено, [cut занимаю место рядом с отцом]занимаю место рядом с отцом. ^
 
                Полтора часа глупых разговоров о погоде, причинах моего опоздания и других придворных глупостях, празднество наконец-то заканчивается. Император поднимается из-за стола и объявляет об этом. Гости начинают расходиться, а это значит что скоро меня ждет долгий и тяжелый разговор [cut в кабинете отца]в кабинете отца. ^
 
            ]];
 
            pr [[
 
                Едва я вошла в кабинет, папа принялся кричать на меня: "Да что ты себе позволяешь, демоница! С кем поведешься от того и наберешься! Якшаешься со всяким сбродом!"^]];
 
            ]];
 
            pr [[
 
                [cut Я еле сдерживалась, чтобы не заплакать. ]
 
            ]];
 
            pr [[Я еле сдерживалась, чтобы не заплакать. Да, я девочка, но я будушая императрица! [cut Я должна быть сильной!]Я должна быть сильной! Все мне так говорят. [cut Я вспомнила, как учил меня Уилл]Я вспомнила, как учил меня Уилл: стиснуть зубы и молчать. ^]];
 
            pr [[
 
                Я молча выслушала бесконечную тираду отца. Наконец, подошло самое интересное...^
 
                [cut Наказание]
 
                Вот тут я уже не могла сдержаться -- на ближайшие три месяца вся моя жизнь [cut превращалась в ад]превращалась в ад -- отныне мне нельзя было общаться ни с кем, кроме моих родственников, личных слуг и придворных. Мне запретили посещать лаборатории и мастерские. Мне запретили выходить из замка, иначе как в сопровождении. И кроме того, в моем расписании теперь вдвое больше уроков этикета. Времени на занятия механикой у меня тоже пока не будет.^
 
            ]];
 
        elseif dinner_status == 3 then
 
            pr [[
 
                Когда я вхожу в зал, многих гостей все еще нет на местах, так что на мое опоздание мало кто обратит внимание... кроме моих родителей... Недовольный взгляд отца обещает неприятный разговор после праздника, но пока я могу [cut "наслаждаться"]"наслаждаться" праздником.^
 
                Как и большинство праздников во дворце этот заключался в набивании живота изысканными блюдами и "интереснейшими" беседами о погоде, моде и прочих глупостях, на которые мне приходится из вежливости отвечать.^
 
                Когда праздник заканчивается и император поднимается из-за стола, чтобы провозгласить это, я вздыхаю с облегчением. Когда большинство гостей расходятся, папа берет меня за руку и тащит в свой кабинет. 
 
                Едва мы вошли, как он принялся ругаться: "Вот скажи мне, доченька, милая, в кого ты такая уродилась?! Почему ты не можешь просто быть как все нормальные благовоспитанные дети..."
 
                Отчитывал он меня долго, но к счастью, не особо обидно -- бывало и хуже. А потом подошло самое интересное...^
 
                [cut Наказание]
 
                Я легко отделалась. В ближайший месяц мне предстояло двойное количество занятий этикетом и полный запрет покидать замок, для этого ко мне приставили двух слуг, которые будут следить за мной. В остальном же -- все оставалось как прежде. ^
 
            ]];
 
        elseif dinner_status == 4 then
 
            pr [[
 
                Я вхожу в зал одной из первых и занимаю свое почетное место, рядом с императором -- своим отцом. Вскоре начинается обед и мы все приступаем к трапезе после вступительного слова папы. Минут десять он рассказывает о том, насколько важно это мероприятие и насколько ценна для нас эта возможность собраться, но почему-то почти не упоминает о событиях в Далагаре -- видимо это не имеет особого значения.
 
                Как и большинство праздников во дворце этот заключался в набивании живота изысканными блюдами и "интереснейшими" беседами о погоде, моде и прочих глупостях, на которые мне приходится из вежливости отвечать.^
 
                Когда праздник заканчивается и император поднимается из-за стола, чтобы провозгласить это, я вздыхаю с облегчением и выбегаю из зала -- да, сегодня мне уже не удастся позаниматься своими делами и побыть в одиночестве, но теперь хотя бы можно переодеться во что-нибудь поудобнее. ^
 
            ]];
 
        end;
 
        
 
        pr [[
 
            [cut Продолжить]
 
            [code walk('ending2');]
 
        ]];
 
    end;
 
}
 

	
 
cutscene {
 
    nam = 'ending2';
 
    decor = function(s)
 
        if widget_status == 0 then
 
            if dinner_status < 4 then
 
                pr [[
 
                    Жизнь медленно тянулась дальше. Вскоре друзья смогли передать мне [cut письмо от Виджета]письмо от Виджета: ^
 
                    "Асти, привет! Жаль, что ты не смогла прийти. 
 
                    Ты знаешь, что нам непросто организовывать для тебя такие дни. Впрочем, ты и так достаточно строго наказана. Как будешь свободна -- так и поговорим. ^^
 

	
 
                    С наилучшими пожеланиями, ^
 
                    Виджет"^
 
                    Дела плохи. Вдобавок ко всему, Виджет обиделся на меня. 
 
                ]];
 
            else
 
                pr [[
 
                    На следующий день я заглянула к Виджету в мастерскую. Гремлин был как обычно занят своими делами, так что мне пришлось окликнуть его: [cut "Виджет, это я!"]"Виджет, это я!"^
 
                    Мастер нехотя оглянулся и посмотрел на меня. 
 
                    Поскольку в мастерской больше никого не было, он называл меня по имени: "А, Асти, привет! Очень плохо, что ты не смогла прийти вчера. Ты же знаешь, что нам непросто для организовывать для тебя место -- приходится столько всего приготовить. Не знаю, как скоро теперь сможем выделить для тебя место. Стараешься для тебя..." -- Гремлин махнул рукой и вернулся к своим делам. ^
 
                    Дела плохи, похоже Виджет обиделся на меня, так что и впрямь неясно, как скоро сможем продолжить занятия. 
 
                ]];
 
            end;
 
        elseif widget_status == 1 then
 
            if dinner_status < 4 then
 
                pr [[
 
                    Жизнь медленно тянулась дальше. Вскоре друзья смогли передать мне [cut письмо от Виджета]письмо от Виджета: ^
 
                    "Асти, привет! Мы с Флинном будем скучать по тебе. Ты конечно создала нам проблем своим опозданием, но это не страшно. Я тут пораскинул мозгами и твой проект кажется мне весьма интересным. Жду не дождусь, когда сможем продолжить работу над ним.  ^^
 

	
 
                    Ждем твоего возвращения, ^
 
                    Виджет и Флинн"^
 
                    Гремлин не в обиде, что я опоздала, это уже хорошо. Но вот когда я теперь смогу продолжить занятия -- неизвестно. 
 
                ]];
 
            else
 
                pr [[
 
                    На следующий день я заглянула к Виджету в мастерскую. Гремлин был как обычно занят своими делами, так что мне пришлось окликнуть его: [cut "Виджет, это я!"]"Виджет, это я!"^
 
                    Мастер нехотя оглянулся и посмотрел на меня. 
 
                    Поскольку в мастерской больше никого не было, он называл меня по имени: "А, Асти, привет! Я щас немного занят -- вчера ты немного задержала нас, приходится наверстывать. Я теперь даже не знаю, как скоро теперь сможем выделить для тебя место. Но, знаешь, пораскинув мозгами, скажу что мне интересен твой проект, так что сделаю все что в моих силах". ^
 
                    Что же, могло быть и хуже. По-крайней мере Виджет не в обиде из-за моего опоздания. 
 
                ]];
 
            end;
 
        elseif widget_status == 2 then
 
            if dinner_status < 4 then
 
                pr [[
 
                    Жизнь медленно тянулась дальше. Вскоре друзья смогли передать мне [cut письмо от Виджета]письмо от Виджета: ^
 
                    "Асти, привет! Мы с Флинном будем скучать по тебе. Я тут пораскинул мозгами и твой проект кажется мне весьма интересным. Жду не дождусь, когда сможем продолжить работу над ним.  ^^
 

	
 
                    С наилучшими пожеланиями, ^
 
                    Виджет"^
 
                    Да, жаль что теперь мы не скоро увидимся... И мой проект откладывается на продолжительный срок.
 
                ]];
 
            else
 
                pr [[
 
                    На следующий день я заглянула к Виджету в мастерскую. Гремлин был как обычно занят своими делами, так что мне пришлось окликнуть его: [cut "Виджет, это я!"]"Виджет, это я!"^
 
                    Мастер оглянулся и посмотрел на меня. 
 
                    Поскольку в мастерской больше никого не было, он сразу назвал меня по имени: "А, Асти, привет! Рад, что ты зашла. Пораскинув мозгами, скажу что мне интересен твой проект, так что если хочешь, можем организовать тебе занятие хоть завтра". ^
 
                    Не раздумывая, я соглашаюсь -- самой не терпится посмотреть на свою счетную машинку. 
 
                ]];
 
            end;
 
        end;
 

	
 
        pr [[
 
            [cut Продолжить]
 
            [code walk('ending3');]
 
        ]];
 
    end;
 
}
 

	
 
cutscene {
 
    nam = 'ending3';
 
    decor = function(s)
 
        if taggart_status == 0 then
 
            if dinner_status < 4 then
 
                pr [[
 
                    Затем я узнала и о произошедшем с Таггартом. За потерю ключа его перевели в городскую стражу. Сам он мне не писал.
 
                ]];
 
            else
 
                pr [[
 
                    Чуть позже я узнала, что стало с Таггартом. За потерю ключа его перевели в городскую стражу. 
 
                    Вскоре у меня получилось [cut встретиться с ним]встретиться с ним. Не сказать, чтобы он был рад меня видеть. Общался со мной подчеркнуто официально и подтвердил все события. 
 
                    Очевидно, он больше не желает со мной общаться как раньше. Ушла я в расстроенных чувствах -- из-за своей нерасторопности не только потеряла друга, но и создала ему проблемы. 
 
                
 
                ]];
 
            end;
 
        elseif taggart_status == 1 then
 
            if dinner_status < 4 then
 
                pr [[
 
                    Затем я получила [cut письмо и от Таггарта]письмо и от Таггарта: ^
 
                    "Асти, привет! ^
 
                    Жаль, что нескоро увидимся, но ты хоть пиши. Может удастся тебя хоть на денек в город вытащить, а то совсем тяжело тебе. ^^
 
                    До скорых встреч, 
 
                    Таггарт"^
 
                ]];
 
            else
 
                pr [[
 
                    Вскоре у меня получилось встретиться с Таггартом. Старый друг, как всегда, был рад меня видеть. Я принесла ему несколько книг, и мы долго обсуждали прочитанное им ранее. 
 
                ]];
 
            end;
 
        end;
 

	
 
        pr [[
 
            [cut Продолжить]
 
            [code walk('ending4');]
 
        ]];
 
    end;
 
}
 

	
 
cutscene {
 
    nam = 'ending4';
 
    decor = function(s)
 
        if boys_status == 0 then
 
            if dinner_status < 3 then
 
                pr [[Встретить Уилла и Фреда мне удалось только после того, как срок моего наказания подошел к концу. Ребята уже успели забыть меня. Конечно, зря я напомнила о себе, ведь тут же получила прозвище "Асти-врунишка", которое довольно быстро разлетелось по городу. Хорошо, что они не знают, кто я на самом деле. ]];
 
            elseif dinner_status < 4 then
 
                pr [[Встретить Уилла и Фреда мне удалось только после того, как срок моего наказания подошел к концу. Теперь меня в городе называют "Асти-врунишка" и вряд ли я что-то смогу с этим сделать. Хорошо, что они не знают, кто я на самом деле. ]];
 
            else
 
                pr [[Уже через пару дней мне удалось встретиться с Фредом и Уиллом. К сожалению, цирк, куда так хотели попасть мальчишки уже уехал. Жаль, что я не смогла порадовать друзей, но я обязательно что-нибудь придумаю.  ]];
 
            end;
 
        elseif boys_status == 1 then
 
            if dinner_status < 3 then
 
                pr [[Встретить Уилла и Фреда мне удалось только после того, как срок моего наказания подошел к концу. Ребята были очень рады видеть меня. Они рассказали о том, как хорошо они тогда развлеклись, сказали. что часть оставшихся денег сохранили на будущее. Потом мы долго играли и болтали о всяком. Я рассказала им о своем проекте счетной машинки, но они, конечно же, ничего не поняли. ]];
 
            elseif dinner_status < 4 then
 
                pr [[Встретить Уилла и Фреда мне удалось только после того, как срок моего наказания подошел к концу. Ребята были очень рады видеть меня. Они рассказали о том, как хорошо они развлеклись, сказали. что часть оставшихся денег хотят сохранить на будущее. Потом мы долго играли и болтали о всяком. Я рассказала им о своем проекте счетной машинки, но они, конечно же, ничего не поняли. ]];
 
            else
 
                pr [[Уже через пару дней мне удалось встретиться с Фредом и Уиллом. Ребята были очень рады видеть меня. Они рассказали о том, как классно было в цирке. Выразили сожаление, что я не смогла сходить туда вместе с ними. Рассказали, что часть оставшихся денег хотят сохранить на будущее. Потом мы долго играли и болтали о всяком. Я рассказала им о своем проекте счетной машинки, но они, конечно же, ничего не поняли. ]];
 
            end;
 
        end;
 

	
 
        pr [[
 
            [cut КОНЕЦ]
 
            КОНЕЦ
 
        ]];
 
    end;
 
}
 

	
 
function init(load)
 
    if not load then
 
        lifeon('watch');
0 comments (0 inline, 0 general)