insteadose-3/cook.lua

458 lines
16 KiB
Lua
Raw Normal View History

2018-08-09 12:26:42 +03:00
-- $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