458 lines
16 KiB
Lua
458 lines
16 KiB
Lua
-- $Name: Подготовка к пробуждению$
|
||
-- $Version: 0.1$
|
||
instead_version "1.9.1"
|
||
require "lib"
|
||
require "para"
|
||
require "dash"
|
||
require "quotes"
|
||
require "xact"
|
||
|
||
_patterns = {};
|
||
|
||
game.use = _("Вариантов успешного завершения инструкций 0... Отмена действия.")
|
||
main = room {
|
||
nam = "...",
|
||
title = _("ПОВАР"),
|
||
num = 11,
|
||
enter = music_("daybefore",0),
|
||
act = function(s) walk("sylo") end,
|
||
dsc = _("WR021 активирован.^Я один из роботов, обслуживающих космический корабль.^Меньше слов, больше выполненных заданий из списка, как говорил наладчик моих модулей индивидуальности."),
|
||
obj = { vobj("next", '{'.._('Выехать из отсека')..'}') },
|
||
}
|
||
|
||
sylo = room {
|
||
nam = _("Технический блок №11"),
|
||
pxa = {
|
||
{ "door4", 10 },
|
||
{ "door3", 150},
|
||
{ if_("gates._acted", "door1_open", "door1"), 360 }
|
||
},
|
||
dsc = _("Один из многих технических блоков. Здесь всего две камеры с роботами WR, две стальные двери. Хорошо, что мне удалось воспользоваться модулем индивидуальности и выкрасить свою дверь в оранжевый. Хоть что-то среди этого набора из сотни зануд."),
|
||
obj = {"todo", "gates"},
|
||
exit = function (s, w)
|
||
if not todo._acted then
|
||
p (_([[И зачем мне выезжать из блока? Открытых заданий нет.]]))
|
||
return false;
|
||
end
|
||
end
|
||
}
|
||
|
||
main_deck = room {
|
||
nam = _("Главная палуба"),
|
||
pxa = {
|
||
{ "window", 90 },
|
||
{ "door2", 180 },
|
||
{ "window", 380 }
|
||
},
|
||
dsc = _("Главная палуба. Отсюда я могу добраться к любому другому отсеку."),
|
||
obj = {"button"},
|
||
way = {"elevator"},
|
||
}
|
||
|
||
organic = room {
|
||
nam = _("Камера органического синтеза"),
|
||
pxa = {
|
||
{ "door2", 10 },
|
||
{ "panel", 140 },
|
||
{ "device", 340 }
|
||
},
|
||
dsc = _("Борщ, пиво, стейк с кровью. Тут можно синтезировать всё, кроме заливной рыбы, которая была запрещена восемь циклов назад."),
|
||
act = function(s) walk("synthesizer") end,
|
||
obj = {"button", vobj("next", '{Подключиться} к синтезатору.')},
|
||
way = {"elevator"},
|
||
}
|
||
|
||
elevator = room {
|
||
nam = _("Лифт"),
|
||
pxa = {
|
||
{ "door2", 180 }
|
||
},
|
||
dsc = "Кабина лифта. Ничего необычного.",
|
||
obj = {"level_buttons"},
|
||
way = {"main_deck", "store"},
|
||
}
|
||
|
||
synthesizer = room {
|
||
nam = _("Органический синтезатор"),
|
||
pxa = {
|
||
{ "device", 177 }
|
||
},
|
||
dsc = "Органический синтезатор соединён с клеточными наполнителями. Вся синтезированная продукция поступает непосредственно на склад.",
|
||
obj = {"wishlist", "ingridients", "mixer", "separator"},
|
||
way = {"organic"},
|
||
}
|
||
|
||
virtual_store = room {
|
||
nam = _("Виртуальный склад"),
|
||
pxa = {
|
||
{ "device", 177 }
|
||
},
|
||
dsc = "Продукты из виртуального склада синтезируются из субклеточной эмульсии. После выбора синтезированные продукты автоматически будут добавлены в миксер.",
|
||
obj = {"malt", "yeast", "watermelon", "pineapple", "mayonnaise", "potato"},
|
||
way = {"synthesizer"},
|
||
}
|
||
|
||
store = room {
|
||
nam = _("Склад"),
|
||
pxa = {
|
||
{ "door2", 10 },
|
||
{ if_("exist(destructor)", "bfg"), 140 },
|
||
{ if_("exist(rat)",if_("rat._fired","rat_dead","rat")), 330 },
|
||
{ "box", 400 }
|
||
},
|
||
dsc = "Склад продуктов, которые нельзя просто так синтезировать.",
|
||
obj = {"malt", "yeast", "rat", "destructor"},
|
||
way = {"elevator"},
|
||
exit = function (s, w)
|
||
if have("destructor") then
|
||
p (_("Распылитель лучше положить на место."));
|
||
return false;
|
||
end;
|
||
end,
|
||
enter = function (s)
|
||
if not have(rat) then
|
||
place("rat", here());
|
||
rat._fired = false;
|
||
end
|
||
place("malt", here());
|
||
place("yeast", here());
|
||
end,
|
||
}:disable();
|
||
|
||
wishlist = obj {
|
||
nam = _("Список пожеланий"),
|
||
act = "Список блюд на вечеринку:^- Пиво^- Фруктовый салат^- Жареный картофель^",
|
||
dsc = "{Список пожеланий персонала}^",
|
||
}
|
||
|
||
ingridients = obj {
|
||
nam = _("Ингредиенты"),
|
||
act = function(s) walk("virtual_store"); end,
|
||
dsc = "{Выбор ингредиентов}^",
|
||
}
|
||
|
||
mixer = obj {
|
||
var {content = 0, pattern = "Позиция направлена на склад. Паттерн записан."},
|
||
act = function (s)
|
||
yeast.mix = false;
|
||
malt.mix = false;
|
||
watermelon.mix = false;
|
||
pineapple.mix = false;
|
||
potato.mix = false;
|
||
water.mix = false;
|
||
rat.mix = false;
|
||
mayonnaise.mix = false;
|
||
if s.content == 0 then
|
||
s.content = 0;
|
||
return (_("Миксер пуст."));
|
||
elseif s.content == 19 then
|
||
s.content = 0;
|
||
_patterns[0] = true;
|
||
check_conditions();
|
||
return (_("Фруктовый салат готов. "))..s.pattern;
|
||
elseif s.content == 28 then
|
||
s.content = 0;
|
||
_patterns[1] = true;
|
||
check_conditions();
|
||
return (_("Пиво готово. "))..s.pattern;
|
||
elseif s.content == 64 then
|
||
s.content = 0;
|
||
return (_("Нагревательный элемент отсутствует. Миксер очищен."));
|
||
elseif s.content == 96 then
|
||
s.content = 0;
|
||
_patterns[2] = true;
|
||
check_conditions();
|
||
return (_("Жареный картофель готов. "))..s.pattern;
|
||
else
|
||
s.content = 0;
|
||
return (_("Отвратительная смесь приготовлена и отправлена на переработку."));
|
||
end;
|
||
end,
|
||
nam = _("Миксер"),
|
||
dsc = "{Миксер}^",
|
||
}
|
||
|
||
|
||
separator = obj {
|
||
nam = _("Сепаратор"),
|
||
dsc = "{Молекулярный сепаратор}^",
|
||
act = "Сепарируй и заливай.",
|
||
}
|
||
|
||
todo = obj {
|
||
nam = "todo",
|
||
var { _acted },
|
||
act = function (s)
|
||
if not s._acted then
|
||
s._acted = true;
|
||
end
|
||
return (_("Всего один пункт:^ - Подготовка к вечеринке перед приземлением.^Что ж, это должно быть 101 из 101 по шкале интересности."));
|
||
end,
|
||
dsc = "{Список задач} доступен для чтения.",
|
||
}
|
||
|
||
button = obj {
|
||
nam = "elevator call",
|
||
act = "Никогда не понимал эти кнопки. И так ведь ясно, что я хочу куда то ехать. Зачем ещё её нажимать.",
|
||
dsc = "На стене находится {кнопка вызова лифта}.^",
|
||
}
|
||
|
||
level_buttons = obj {
|
||
nam = "level buttons",
|
||
act = function (s)
|
||
if not s._acted then
|
||
s._acted = true;
|
||
ways():add("organic");
|
||
end
|
||
return (_("Так, что у нас тут... машинный зал... отсек криокамер... о! камера органического синтеза, то, что нужно."))
|
||
end,
|
||
dsc = "Справа находятся {кнопки отсеков}.^",
|
||
}
|
||
|
||
gates = obj {
|
||
nam = _("ворота"),
|
||
var { _state = _("закрыты") },
|
||
dsc = function(s)
|
||
return (_("{Ворота}, ведущие из технического отсека "..s._state.."."));
|
||
end,
|
||
act = function (s)
|
||
if not s._acted then
|
||
s._acted = true;
|
||
s._state = _("открыты");
|
||
ways():add("main_deck");
|
||
return (_("Я приложил правую руку к считывателю и ворота открылись."));
|
||
else
|
||
return (_("Ворота на главную палубу уже открыты."));
|
||
end
|
||
end,
|
||
}
|
||
|
||
malt = obj {
|
||
var {mix = false},
|
||
nam = _("Солод"),
|
||
dsc = function (s)
|
||
if here() == "store" then
|
||
return (_("Мешки с {солодом}^"));
|
||
else
|
||
return (_("{Солод}^"));
|
||
end;
|
||
end,
|
||
act = function (s)
|
||
if here() ~= store then
|
||
store:enable();
|
||
return (_("Этот ингредиент невозможно синтезировать. Придётся идти на склад."))
|
||
else
|
||
take(malt);
|
||
return (_("Солод погружен в отсек №3."));
|
||
end;
|
||
end,
|
||
use = function (s, w)
|
||
if w == mixer then
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 4;
|
||
s.mix = true;
|
||
end;
|
||
remove(s, me());
|
||
return s.nam.." помещён в миксер."
|
||
end
|
||
end,
|
||
inv = "Зерна солода. Странно, что люди так и не научились синтезировать что-то сложнее ватных фруктовых кубиков.",
|
||
}
|
||
|
||
yeast = obj {
|
||
var {mix = false},
|
||
nam = _("Дрожжи"),
|
||
dsc = function (s)
|
||
if here() == "store" then
|
||
return (_("Пробирка с {дрожжами}^"));
|
||
else
|
||
return ("{".._('Дрожжи').."}^");
|
||
end;
|
||
end,
|
||
act = function (s)
|
||
if here() ~= store then
|
||
store:enable();
|
||
return (_("Этот ингредиент невозможно синтезировать. Придётся идти на склад."))
|
||
else
|
||
take(yeast);
|
||
return (_("Пробирка с дрожжами помещена в отсек №7"));
|
||
end;
|
||
end,
|
||
use = function (s, w)
|
||
if w == mixer then
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 8;
|
||
s.mix = true;
|
||
end;
|
||
remove(s, me());
|
||
return s.nam.." помещены в миксер."
|
||
end
|
||
end,
|
||
inv = "Штамм отличнейших дрожжей. Можно даже разглядеть отдельные клетки.",
|
||
}
|
||
|
||
watermelon = obj {
|
||
var {mix = false},
|
||
nam = _("Арбузные кубики"),
|
||
dsc = "Сухие {арбузные кубики}^",
|
||
act = function (s)
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 1;
|
||
s.mix = true;
|
||
end;
|
||
return s.nam.." добавлены в миксер.";
|
||
end,
|
||
}
|
||
|
||
pineapple = obj {
|
||
var {mix = false},
|
||
nam = _("Ананасовые кубики"),
|
||
dsc = "Сухие {ананасовые кубики}^",
|
||
act = function (s)
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 2;
|
||
s.mix = true;
|
||
end;
|
||
return s.nam.." добавлены в миксер.";
|
||
end,
|
||
}
|
||
|
||
mayonnaise = obj {
|
||
var {mix = false},
|
||
nam = _("Майонез"),
|
||
dsc = "Взбитый {концентрат жира с яйцами}^",
|
||
act = function (s)
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 128;
|
||
s.mix = true;
|
||
end;
|
||
return s.nam.." добавлен в миксер.";
|
||
end,
|
||
}
|
||
|
||
potato = obj {
|
||
var {mix = false},
|
||
nam = _("Картофельные бруски"),
|
||
dsc = "Синтезированный {картофель}^",
|
||
act = function (s)
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 64;
|
||
s.mix = true;
|
||
end;
|
||
|
||
return s.nam.." добавлены в миксер.";
|
||
end,
|
||
}
|
||
|
||
rat = obj {
|
||
var {mix = false},
|
||
var {_fired = false},
|
||
nam = _("Крыса"),
|
||
dsc = function(s)
|
||
local state = "";
|
||
if s._fired then
|
||
state = "поджарена.";
|
||
else
|
||
state = "не поджарена.";
|
||
end
|
||
return (_("В углу сидит бесстрашная {жирная тварь}. Она "..state.."^"));
|
||
end,
|
||
act = function (s)
|
||
if not have("rat") then
|
||
take(rat);
|
||
return (_("Я ловким движением правой руки поймал крысу и положил в один из внутренних отсеков."));
|
||
else
|
||
return (_("Все подходящие отсеки заполнены. Отмена операции."));
|
||
end
|
||
end,
|
||
use = function (s, w)
|
||
if w == separator then
|
||
remove(s, me());
|
||
take(water);
|
||
take(trash);
|
||
return (_("Думаю, стоит тебя немного разделить."));
|
||
elseif w == mixer then
|
||
if s._fired then
|
||
if not s.mix then
|
||
mixer.content = mixer.content + 32;
|
||
s.mix = true;
|
||
end
|
||
remove(s, me());
|
||
return (_("Крыса добавлена в миксер."));
|
||
else
|
||
return (_("Необходимость добавления органической крысы в не выявлена. Операция отменена."));
|
||
end
|
||
end;
|
||
end,
|
||
inv = function (s)
|
||
local state = "не поджарена.";
|
||
if s._fired then
|
||
state = "поджарена.";
|
||
end
|
||
return (_("Если тыкнуть крысу, она запищит. Отпускать её однозначно не стоит. Тем более, что тварь "))..state;
|
||
end,
|
||
}
|
||
|
||
water = obj {
|
||
var {mix = false},
|
||
nam = _("Вода"),
|
||
dsc = "Вода, что тут ещё сказать.",
|
||
use = function (s, w)
|
||
if w == mixer then
|
||
if not s.mix then
|
||
s.mix = true;
|
||
mixer.content = mixer.content + 16;
|
||
end
|
||
remove(s, me());
|
||
return s.nam.." добавлена в миксер.";
|
||
end;
|
||
end,
|
||
inv = "Набор молекул, заключенный в ограниченном объёме.",
|
||
}
|
||
|
||
trash = obj {
|
||
nam = _("Крысиная требуха"),
|
||
inv = "Молекулярная суспензия. Всё что осталось от крысы после отделения воды.",
|
||
}
|
||
|
||
destructor = obj {
|
||
nam = _("Термический распылитель"),
|
||
dsc = "Справа от двери висит {термический распылитель}^",
|
||
act = function (s)
|
||
take(s);
|
||
p (_("Распылитель пригодится. Мало ли каких тварей привлекают к себе заготовленные ингредиенты."));
|
||
end,
|
||
use = function (s, w)
|
||
if w == rat then
|
||
w._fired = true;
|
||
sound_("shoot_destructor")();
|
||
return (_("Один выстрел из термического распылителя в крысу превратит её в сгусток энергии при малейшей встряске. Обычно это позволяет убить чуть больше одной крысы за раз, когда они начинают бороться и убегать."));
|
||
end
|
||
end,
|
||
inv = function(s)
|
||
drop(s);
|
||
return (_("На складе распылителю самое место."));
|
||
end
|
||
}
|
||
|
||
endscreen = room {
|
||
nam = _("Конец"),
|
||
enter = function() mute_()(); complete_("cook")() end,
|
||
dsc = "Вот и подошел конец моему дежурству. Надеюсь, вечеринка по случаю прибытия удастся.^Ну а мне пора в свой отсек, на очередную гибернацию.^",
|
||
act = gamefile_("dream.lua"),
|
||
obj = { vobj("next", txtc("{Продолжение...}")) }
|
||
}
|
||
|
||
greenlight = obj {
|
||
nam = "Зелёный индикатор",
|
||
inv = function (s)
|
||
walk("endscreen");
|
||
end,
|
||
}
|
||
|
||
function check_conditions ()
|
||
if(_patterns[0] and _patterns[1] and _patterns[2]) then
|
||
take("greenlight", me());
|
||
end;
|
||
end
|