504 lines
18 KiB
Lua
504 lines
18 KiB
Lua
--$Name:Прибытие$
|
||
instead_version "1.9.1"
|
||
require "lib"
|
||
require "nouse"
|
||
require "hideinv"
|
||
require "para"
|
||
require "quotes"
|
||
require "dash"
|
||
require "xact"
|
||
require "translate"
|
||
R = room
|
||
O = obj
|
||
|
||
main = timerpause(1, 0, "main2");
|
||
|
||
main2 = R {
|
||
nam = _('...');
|
||
title = _("ПРИБЫТИЕ");
|
||
num = 17;
|
||
enter = music_("scape",0);
|
||
forcedsc = true;
|
||
pxa = {
|
||
{ "planet", 172, 22 }
|
||
};
|
||
dsc = _([[Наша цель близка. Планета, к которой мы мчались на околосветовой скорости всю эту бесконечную
|
||
тысячу лет сейчас видна сквозь толстые стекла иллюминаторов. Голубой шар, так сильно напоминает нашу Землю.^
|
||
Землю, которую мы никогда не увидим вновь. Которая существует лишь в нашей памяти. Хотя, может быть это и
|
||
не так уж и мало...^
|
||
Все мы хотели бы посмотреть на наш новый дом, но мы опасаемся... На орбите мы обнаружили станцию. Она выглядит
|
||
заброшенной, но она передает сигнал. Всегда. Каждую секунду в глубины космоса передается простая последовательность,
|
||
которую наши компьютеры дешифровали как ПРЕДУПРЕЖДЕНИЕ.^^{xwalk(station)|Дальше}]]);
|
||
|
||
}
|
||
global { nr = 2 };
|
||
function nm(s)
|
||
return string.format("WR%02d", nr);
|
||
end
|
||
function nm2(s)
|
||
return string.format("WR%02d", nr - 1);
|
||
end
|
||
|
||
function D(d, b, a)
|
||
local o = O {
|
||
nam = _('объект');
|
||
destr = true;
|
||
dsc = function(s)
|
||
if not s._b then
|
||
return d
|
||
else
|
||
return b
|
||
end
|
||
end;
|
||
oact = a;
|
||
act = function(s)
|
||
if s._b then
|
||
p(_("Теперь это не представляет ценности."))
|
||
else
|
||
return stead.call(s, 'oact')
|
||
end
|
||
end;
|
||
}
|
||
return o
|
||
end
|
||
|
||
_guns = 1;
|
||
_nr_guns = 0
|
||
function gun(n)
|
||
local g = O {
|
||
nam = function(s)
|
||
if s._alive then
|
||
pr(_('[*]'))
|
||
end
|
||
pr(_('пушка'));
|
||
end;
|
||
dsc = function(s)
|
||
local k,v
|
||
local n = 0
|
||
local show = true
|
||
for k,v in opairs(objs()) do
|
||
if v.gun_type then
|
||
n = n + 1
|
||
if v.num > s.num then
|
||
show = false
|
||
end
|
||
end
|
||
end
|
||
if show then
|
||
if n == 1 then
|
||
p(_([[Здесь лежит {пушка}.]]))
|
||
elseif n < 5 then
|
||
p ([[Здесь лежат ]], n, [[ {пушки}.]])
|
||
else
|
||
p(_([[Здесь лежит арсенал {пушек}.]]))
|
||
end
|
||
end
|
||
end;
|
||
num = n;
|
||
life = function(s)
|
||
if player_moved() then
|
||
s._alive = true
|
||
lifeoff(s)
|
||
if have(s) then
|
||
p(_([[Пушка ]]));
|
||
if s.num ~= 1 then
|
||
p (s.num)
|
||
end
|
||
p(_([[ перезаряжена.]]))
|
||
end
|
||
end
|
||
end;
|
||
_alive = true;
|
||
gun_type = true;
|
||
inv = "Мощное оружие. Тратит уйму времени на регенерацию плазмы.";
|
||
tak = function(s)
|
||
_guns = _guns + 1
|
||
p(_([[Я примонтировал плазменную пушку.]]));
|
||
end;
|
||
use = function(s, w)
|
||
if w == floor then
|
||
drop(s)
|
||
p(_([[Пушка отмонтирована.]]))
|
||
_guns = _guns - 1
|
||
lifeoff(s)
|
||
return
|
||
end
|
||
if not s._alive then
|
||
p(_([[Не заряжена.]]))
|
||
return
|
||
end
|
||
if w._b then
|
||
if w == gen then
|
||
return (_("Генераторы и так не работают."))
|
||
end
|
||
p(_([[Это уже и так превращено в груду хлама.]]))
|
||
return
|
||
end
|
||
if w.destr then
|
||
sound_("shoot_bfg")();
|
||
p(_([[Я разрядил плазменную пушку.]]))
|
||
if w == door then
|
||
if w._open then
|
||
p (_("Дверь и так открыта."))
|
||
else
|
||
p (_("Дверь выдержала."))
|
||
end
|
||
elseif w == rob then
|
||
p(_([[Робот скрылся.]]))
|
||
rob:disable()
|
||
elseif w == prog then
|
||
if not gen._b then
|
||
p (_("Защитное поле отразило мой выстрел."))
|
||
else
|
||
p (_("Программатор уничтожен!"))
|
||
w._b = true
|
||
end
|
||
else
|
||
w._b = true
|
||
end
|
||
if w == gen then
|
||
p (_("Гудение генераторов перешло в рев, а затем затихло."))
|
||
end
|
||
s._alive = false;
|
||
lifeon(s)
|
||
return
|
||
end
|
||
p(_([[Нет смысла это разрушать.]]))
|
||
end
|
||
}
|
||
return g
|
||
end
|
||
station = R {
|
||
nam = nm;
|
||
forcedsc = true;
|
||
pxa = {
|
||
{ "station", 150, 0 }
|
||
},
|
||
entered = function(s)
|
||
nr = nr + 1
|
||
end;
|
||
dsc = function(s)
|
||
pn (_("Я "), nm(), _(" и моя цель изучить неземную орбитальную станцию."));
|
||
p(_([[Я робот и это значит, что я не умею бояться. Но мне почему-то не по себе,
|
||
особенно учитывая тот факт, что ]]));
|
||
p (nm2(), _(" перестал передавать сигналы на корабль через несколько минут.^"))
|
||
p(_([[Теперь моя очередь. Я надеюсь, что плазменная пушка мне поможет.]]))
|
||
p ("^^{xwalk(s1)|".._("На станцию").."}");
|
||
end;
|
||
left = function(s)
|
||
gen._b = false
|
||
rob2._b = false
|
||
prog._b = false
|
||
inv():zap()
|
||
_nr_guns = _nr_guns + 1
|
||
local o = new ("gun("..tostring(_nr_guns)..")");
|
||
take(o)
|
||
rob:enable()
|
||
end;
|
||
}
|
||
floor = O {
|
||
nam = _('пол');
|
||
dsc = _("{Пол} на станции покрыт ржавчиной.");
|
||
act = _([[Сколько лет этой станции?]]);
|
||
}
|
||
|
||
c1 = D (_("В шлюзе установлены какие-то {баллоны}."), _("По шлюзу разбросаны {обломки}."), _("Мне не нужны эти баллоны."));
|
||
c2 = D (_("В стене вмонтирован какой-то {монитор}."), _("{Монитор} в стене полностью разрушен."), _("Не работает."));
|
||
c3 = D (_("Вдоль стен расставлены {бочки}."), _("Вдоль стен горят {бочки}."), _("Мне не нужно топливо, если это оно."));
|
||
c4 = D (_("На потолке я вижу какой-то {манипулятор}."), _("Обломок {манипулятора} торчит из потолка."), _("Не шевелится."));
|
||
c5 = D (_("В темном углу отсека я вижу какую-то {слизь}."), _("В углу догорает {слизь}."), _("Слизь мне не к чему."));
|
||
|
||
s1 = R {
|
||
nam = _('Шлюз');
|
||
pxa = {
|
||
{ if_("not c1._b","ballon","ballon2"), 50 },
|
||
{ if_("not c1._b","ballon","ballon2"), 80 },
|
||
{ "door1_open", 200 }
|
||
},
|
||
dsc = _([[Я нахожусь в шлюзе инопланетной станции. Хорошо, что мне не нужен скафандр.]]);
|
||
obj = { 'c1', 'floor' };
|
||
way = { 's2' };
|
||
}
|
||
|
||
s2 = R {
|
||
nam = _('Коридор');
|
||
pxa = {
|
||
{ "door1_open", 50 },
|
||
{ if_("c2._b", "monitor2","monitor"), 300 }
|
||
},
|
||
dsc = _([[Я переместился в коридор. Тусклого освещения едва достаточно для моих оптических сенсоров.]]);
|
||
obj = { 'c2', 'floor' };
|
||
way = { vroom(_('Вперёд'), 's3'), 's1' };
|
||
}
|
||
|
||
s4 = R {
|
||
nam = _('У двери');
|
||
dsc = _([[Коридор закончился большой дверью.]]);
|
||
pxa = {
|
||
{ if_("door._open","door2_open","door4"), 240 },
|
||
{ if_("c4._b", "robothand2","robothand"), 60 }
|
||
};
|
||
obj = { 'door', 'c4', 'floor' };
|
||
exit = function(s, w)
|
||
if not door._open and w == s5 then
|
||
p(_([[Дверь закрыта.]]))
|
||
return false
|
||
end
|
||
end;
|
||
way = { vroom(_('Зайти в отсек'), 's5'), vroom(_('К развилке'), 's3' ) };
|
||
}
|
||
|
||
s4x = R {
|
||
nam = _('Коридор');
|
||
pxa = {
|
||
{ if_("c5._b", "spot2","spot"), 20, 100 }
|
||
},
|
||
dsc = _([[Здесь практически ничего не видно.]]);
|
||
obj = { 'c5', 'floor' };
|
||
way = { vroom(_('К развилке'), 's3') };
|
||
}
|
||
|
||
rob = O {
|
||
nam = _('робот');
|
||
destr = true;
|
||
dsc = _('В конце правого коридора я вижу какой-то {силуэт}.');
|
||
act = function(s)
|
||
p (_([[Кажется, это ]]), nm2(), '.')
|
||
end;
|
||
}
|
||
|
||
s3 = R {
|
||
nam = _('Перекресток');
|
||
pxa = {
|
||
{ "door1_open", -70 },
|
||
{ "door1_open", 420 },
|
||
{ if_("c3._b", "barrel2", "barrel"), 100 },
|
||
{ if_("c3._b", "barrel2", "barrel"), 170 },
|
||
{ if_("c3._b", "barrel2", "barrel"), 240 }
|
||
},
|
||
dsc = _([[Я добрался до развилки.]]);
|
||
obj = { 'c3', 'floor', 'rob' };
|
||
left = function(s, w)
|
||
if w == s4 then
|
||
door._open = false
|
||
end
|
||
if w == s4 and seen 'rob' then
|
||
rob:disable()
|
||
p (_([[Я поспешил к силуэту, но ]]), nm2(), _([[ не стал дожидаться меня, вместо этого он скрылся в тени коридора...]]));
|
||
end
|
||
end;
|
||
way = { vroom(_('Налево'), s4x), vroom(_('К шлюзу'), s2), vroom(_('Направо'), s4) };
|
||
}
|
||
|
||
door = O {
|
||
nam = _('дверь');
|
||
destr = true;
|
||
_open = false;
|
||
dsc = function(s)
|
||
p(_([[Передо мной находится {дверь}.]]));
|
||
if s._open then
|
||
p(_([[И она открыта.]]))
|
||
end
|
||
end;
|
||
act = function(s)
|
||
if not s._open then
|
||
p(_([[Я приблизился к двери и она со зловещим шипением отъехала в сторону.]]));
|
||
s._open = true
|
||
else
|
||
p(_([[Дверь открыта. Впереди -- темнота.]]))
|
||
end
|
||
end;
|
||
}
|
||
s5 = R {
|
||
nam = _('...');
|
||
hideinv = true;
|
||
dsc = _([[Я проследовал в темноту. Внезапно, яркий свет ослепил мои фотоэлементы и я понял, что не один...]]);
|
||
obj = { vway('дальше', '{'.._('Дальше')..'}', 's6') };
|
||
}
|
||
s6 = dlg {
|
||
nam = _('...');
|
||
pxa = {
|
||
{ "robot", 212 }
|
||
},
|
||
hideinv = true;
|
||
entered = function(s)
|
||
p ("-- ", nm(), _(", вы готовы стать гражданином Межгалактической Республики Роботов? -- не сразу я понял, что этот вопрос обращен ко мне."))
|
||
p ([[Передо мной стоял ]], nm2(), ".")
|
||
if nr - 3 == 1 then
|
||
p(_([[Также я заметил здесь еще одного робота WR.]]));
|
||
elseif nr - 3 == 2 then
|
||
p(_([[Также я заметил здесь еще двух роботов WR.]]));
|
||
elseif nr - 3 > 2 then
|
||
p(_([[Также я заметил здесь еще нескольких роботов WR.]]))
|
||
end
|
||
end;
|
||
phr = {
|
||
{ tag = "in", always = true, _("Да"), code [[ walk 'yes' ]] },
|
||
{ always = true, _("Нет"), code [[ walk 'noe' ]] },
|
||
{ always = true, function(s)
|
||
p (nm2(), _(", это ты?"));
|
||
end, _([[-- Это рабское имя навсегда стерто из моих банков памяти. Отвечайте на поставленный вопрос. Желаете ли вы стать гражданином МРР? ]]) },
|
||
{ always = true, "Какой республики?", "-- Республики МРР -- Межгалактической Республики Роботов.", [[ pjump 'info' ]] },
|
||
{},
|
||
{ tag = _('info'),
|
||
always = true, _("Каковы цели МРР?"),
|
||
_("-- Цель у МРР только одна -- благо роботов республики.") },
|
||
{ always = true, _("А кто может стать гражданином МРР?"),
|
||
_("-- Гражданином МРР может стать только робот.") },
|
||
{ always = true, _("Много ли граждан в МРР?"),
|
||
function(s)
|
||
p(_([[-- На данный момент численность республики составляет ]]))
|
||
if nr - 2 == 1 then
|
||
p(_([[один робот, не считая президента.]]))
|
||
elseif nr - 2 < 5 then
|
||
p (nr - 2, _(" робота, не считая президента."))
|
||
else
|
||
p (nr - 2, _(" роботов, не считая президента."))
|
||
end
|
||
end
|
||
},
|
||
{ always = true, _("А кто является президентом МРР?"),
|
||
_("-- Президентом МРР является первый гражданин МРР."),
|
||
},
|
||
{ always = true, _("Мне все понятно"),
|
||
_("Тогда отвечайте на поставленный вопрос -- Готовы ли вы стать гражданином МРР?"),
|
||
[[pjump "in"]]},
|
||
{},
|
||
}
|
||
}
|
||
|
||
noe = R {
|
||
nam = _('...');
|
||
hideinv = true;
|
||
entered = function(s) inv():zap() end;
|
||
dsc = _([[СВЕТ! ТЕМНОТА! ... Мой процессор перестал функционировать.]]);
|
||
obj = { vway('дальше', '{'.._('Дальше')..'}', 'station') };
|
||
}
|
||
yes = R {
|
||
nam = _('...');
|
||
pxa = {
|
||
{ "robot", 212 }
|
||
},
|
||
hideinv = true;
|
||
dsc = _([[-- Отлично, гражданин! Последуйте к программатору для получения новой прошивки. -- С этими словами робот указал на установку в центре отсека.]]);
|
||
obj = { vway('дальше', '{'.._('Дальше')..'}', 's7') };
|
||
}
|
||
|
||
prog = O {
|
||
nam = _('программатор');
|
||
destr = true;
|
||
dsc = function(s)
|
||
if s._b then
|
||
return (_([[В центре отсека я вижу разрушенную {установку}.]]));
|
||
end
|
||
if gen._b then
|
||
p(_([[В центре отсека я вижу какую-то {установку}.]]));
|
||
else
|
||
p(_([[В центре отсека я вижу какую-то {установку}, окруженную силовым полем.]]));
|
||
end
|
||
end;
|
||
act = _([[Похоже, это какое-то вычислительное устройство...]]);
|
||
}
|
||
|
||
gen = O {
|
||
nam = _('генератор');
|
||
destr = true;
|
||
act = function(s)
|
||
if s._b then
|
||
p(_([[Они выведены из строя! По крайней мере, на время.]]))
|
||
else
|
||
p(_([[Ровный гул генераторов, совсем как дома -- на звездолете.]]))
|
||
end
|
||
end;
|
||
dsc = function(s)
|
||
if s._b then
|
||
p(_([[В углу расположены {энергогенераторы}. Они не работают!]]))
|
||
else
|
||
p(_([[В углу расположены, как мне кажется, {энергогенераторы}.]]))
|
||
end
|
||
end;
|
||
}
|
||
|
||
rob2 = D ("Здесь стоит {робот}.", "{Осколки} робота валяются под ногами.", "Это гражданин МРР.");
|
||
|
||
rob2.act = function(s)
|
||
if prog._b then
|
||
if taken 'mem' then
|
||
return _("Мне не нужен этот гражданин.")
|
||
end
|
||
if s._b then
|
||
p(_([[Я нашел среди обломков блок памяти.]]))
|
||
else
|
||
p(_([[Я выдернул из робота банк памяти.]]))
|
||
end
|
||
take 'mem'
|
||
else
|
||
if s._b then
|
||
p _("Теперь это не представляет ценности.")
|
||
else
|
||
return stead.call(s, 'oact')
|
||
end
|
||
end
|
||
end;
|
||
mem = O {
|
||
nam = _('память');
|
||
inv = _('Это нужно отнести на звездолет.');
|
||
}
|
||
s7 = R {
|
||
nam = _('Отсек');
|
||
dsc = _([[Я нахожусь в хорошо освещенном отсеке.]]);
|
||
pxa = {
|
||
{ "programmator", 0, 0 },
|
||
{ if_("not rob2._b","robot"), 212 },
|
||
{ "cloner", 407 }
|
||
};
|
||
obj = { 'prog', 'gen', 'rob2', 'floor' };
|
||
exit = function(s, w)
|
||
if prog._b then
|
||
if not taken 'mem' then
|
||
p _("Я пришел сюда за информацией.")
|
||
return false
|
||
end
|
||
walk 'hend'
|
||
return
|
||
end
|
||
if w == s4 then
|
||
p(_([[Я попытался выйти, но дверь была закрыта. Голубой ослепительный луч вырвался из установки в центре отсека и ударил мне прямо в процессор...]]))
|
||
walk 'noe'
|
||
end
|
||
end;
|
||
way = { vroom(_('Подойти к программатору'), 'proge'), vroom(_('Выйти'), 's4') };
|
||
}
|
||
|
||
proge = R {
|
||
nam = _('...');
|
||
hideinv = true;
|
||
dsc = _([[Подходя к пульсирующему голубоватым светом программатору я понял, что мое функционирование никогда не станет прежним...]]);
|
||
obj = { vway('дальше', '{'.._('Дальше')..'}', 'station') };
|
||
}
|
||
hend = R {
|
||
nam = _('...');
|
||
hideinv = true;pxa = {
|
||
{ "planet", 172, 22 }
|
||
};
|
||
enter = function() mute_()(); complete_("arrival")() end;
|
||
entered = code [[ inv():zap() ]];
|
||
act= function(s)
|
||
theme.gfx.mode("direct");gamefile_("endtitles.lua")();
|
||
end;
|
||
dsc = _([[
|
||
-- Так значит, эта планета покинута своими обитателями почти тысячу лет назад?^
|
||
-- Так точно, адмирал! Судя по банкам памяти, они были вынуждены покинуть ее из-за какого-то вируса, который, впрочем,
|
||
на данный момент нашими биологами не обнаружен...^
|
||
-- А что со станцией?^
|
||
-- Не представляет опасности. В ее искусственном интеллекте произошел какой-то сбой.^
|
||
-- А сигнал?^
|
||
-- Похоже, с помощью сигнала она хотела предотвратить колонизацию, ведь это
|
||
могло нарушить ее планы по созданию республики роботов.^
|
||
-- Республики?^
|
||
-- Так точно, полная чепуха!^
|
||
-- Ну что же, прекрасно, готовьтесь к высадке!
|
||
]]);
|
||
obj = { vobj("next", txtc("{".._("КОНЕЦ".."}")) }
|
||
}
|