insteadose-3/cook.lua

458 lines
16 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: Подготовка к пробуждению$
-- $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