insteadose-3/arrival.lua

504 lines
18 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--$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("{".._("КОНЕЦ".."}")) }
}