insteadose-3/arrival.lua

504 lines
18 KiB
Lua
Raw Permalink Normal View History

2018-08-09 12:26:42 +03:00
--$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("{".._("КОНЕЦ".."}")) }
}