1
0
Fork 0
mirror of https://gitlab.com/Oreolek/duel.git synced 2024-05-04 10:08:47 +03:00
duel/locations/abandoned.lua

673 lines
31 KiB
Lua
Raw 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.

room {
nam = 'abandoned',
disp = 'Одноэтажный дом', -- занят роботами
way = {'exit_north'},
dsc = [[
Дорога к этому дому была выложена камнями. Вы шли по булыжнику легко и быстро.
]],
decor = [[
Высокий треугольный дом без окон.
Его пирамидальная крыша блестела зеркальной чистотой, а стены были отполированы в ровный цвет
свежего дерева.
На одной из стен углём кто-то нарисовал стилизованную голову робота-летописца и надпись: "ДОБРО.".
Внутрь вёл единственный вход, который находился на три метра выше земли.^^
Перед домом работали механические боты. Ближе всего к вам стояли двое.
{robofarmer|Один из них} копался в грядках, а {robobutler|второй} настраивал какой-то {mechanism|механизм.}
]],
obj = {
obj {
nam = 'robofarmer',
disp = function()
return 'первый робот'
end,
act = function(s)
return [[
Низкий хромированный фермер, древняя четырёхногая модель.
Он медленно неуклюже передвигал передние ноги, когда переходил к следующей грядке.
]]
end,
talk = function()
walk('robofarmer-dlg')
return true
end
};
obj {
nam = 'robobutler',
disp = function()
if char.knows_kef then
return 'Кеф'
end
return 'второй робот'
end,
act = function(s)
return [[
Он был похож по строению на робота-дворецкого, но у него не хватало верхней части лица,
а вместо левой ноги стоял импровизированный протез из строительного нанопластика.
Его глаза были очень маленькими для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы.
]]
end,
talk = function()
walk('robobutler-dlg')
return true
end,
};
obj {
nam = 'mechanism',
disp = 'механизм',
talk = 'Механизму нечего вам ответить.',
act = [[Какая-то параболическая антенна на широкой стальной трубе, вкопанной в землю.
Видимо, труба служит защитным корпусом для деталей.]],
take = function()
pn ('Над ней работает робот, который заметит отсутствие механизма. Да и зачем вам эта антенна?');
return false
end
}
}
}
dlg {
nam = 'robobutler-dlg',
disp = 'Диалог с роботом',
decor = function()
return _('robobutler').act
end,
obj = {{
'#general',
{
'#who',
'Кто вы?',
function()
disable('#who')
char.knows_kef = true
return [[-- Кто вы?
-- Я — программируемый секретарь КЕ-2469Ф. Можно Кеф для краткости.]]
end,
};
{
'#good',
'Что такое «добро»?',
function()
disable('#good')
char.asked_good = true
return [[
-- Что такое «добро»?^
-- Понятие, которое ассоциировано с действиями на пользу или на защиту общества.
]]
end
};
{
cond = function()
return (char.asked_good == true and char.knows_robots ~= true)
end,
'Что означает надпись «добро»? Чем вы занимаетесь как группа?',
function()
changeop('reputation', 3)
char.knows_robots = true
return [[
-- Что означает надпись «добро»? Чем вы занимаетесь как группа?^
-- Мы занимаемся добром. Мы действуем на пользу общества.
]]
end
};
{
always = true,
cond = function()
return (char.knows_robots == true)
end,
'Напомни ещё раз, что означает надпись «добро»?',
[[
-- Напомни ещё раз, что означает надпись «добро»?^
-- Мы занимаемся добром. Мы действуем на пользу общества.
]]
};
{
'#хозяин',
'Где ваш хозяин?',
function()
disable('#хозяин')
return [[
-- Где ваш хозяин?^
-- Отсутствует. Но не волнуйтесь, мы поддерживаем его владения в идеальном порядке.
]]
end
};
{
fmt.em([[Вы очень похожи на одного моего знакомого робота…]]);
function()
char.quests.car = 2
return [[
-- Вы очень похожи на одного моего знакомого робота. Такой высокий, без левого манипулятора. Катается на красном спортивном авто. По крайней мере, последние несколько часов. Вы не знаете, где он?^^
Робот развёл руками:^^
-- Запрос неточен. Подходит ЛО-1847З, но у него нет личной машины. Вы хотите найти ЛО-1847З?^
-- Да. Это срочно.^
-- ЛО-1847З выполняет задание поиска редких металлов и механизмов. В чём выражается срочность?
]]
end;
next = "#поиск";
};
{
'Что это за механизм перед вами?',
[[
-- Что это за механизм перед вами?^
-- Интернет-антенна с прямым подключением к сети IDEC. Хозяин должен быть в курсе последних постов в эхе pipe.204812.
]]
};
{
"#ремонт",
cond = function() -- есть квест по починке комбайна
return char.quests.chos > 0
end,
'У вас нет ремонтного бота? Переносного.',
function()
disable '#ремонт'
return [[
-- У вас нет ремонтного бота? Переносного.^
-- У нас нет стандартных роботов ремонтной специализации.
Мы делаем все починки только самостоятельно, на себе.^^
Видимо, это значит что они не чинят чужие комбайны.
]]
end
};
{
'Спасибо. Удачи вам с этим… добром.',
function()
walkout()
return [[
-- Спасибо. Удачи вам с этим… добром.^
Робот кивнул вам и вернулся к починке механизма.
]]
end
};
};
{
"#поиск",
{
'#украл',
"Он украл чужую машину. Его нужно остановить.",
function()
disable('#украл')
changeop('actions', 10)
return [[
-- Он украл чужую машину. Его нужно остановить.^
-- ЛО-1847З не мог украсть чужой механизм. Это напрямую противоречит его задаче сбора '..fmt.em('потерянных')..' механизмов.
]]
end
};
{
function()
return "У "..plural('меня', 'нас')..' есть механизм для него.'
end,
function()
return [[-- У ]]..plural('меня', 'нас')..[[ есть механизм для него.^
-- Предъявите механизм для того, чтобы я произвёл оценку полезности.
]]
end,
next = '#механизм'
};
{
'#багрепорт',
function()
return plural('Я знаю', 'Мы знаем')..', что в его программе сбора механизмов есть ошибка.'
end,
function()
changeop('actions', -5)
disable('#багрепорт')
return [[
-- ]]..plural('Я знаю', 'Мы знаем')..[[, что в его программе сбора механизмов есть ошибка.^^
Глаза робота совершили оборот вокруг своих осей.^^
-- У вас есть отчёт об ошибке? Замечательно!
Если ошибка будет принята, мы немедленно отзовём бракованный элемент
со всеми механизмами.
]]
end,
next = '#ошибка'
}
};
{
'#механизм',
{
'Он не здесь. Не под рукой.',
[[
-- Он не здесь. Не под рукой.^
-- В таком случае я не способен произвести оценку полезности.
]],
next = '#general',
};
{
cond = function()
return have('programmator')
end,
'Вот старый программатор.',
function()
drop('programmator')
remove('programmator')
char.quests.car = 3
char.quests.cho = -1
char.quests.gave_mech = true
lifeon('car-retrieval-unit') --подъезжает робот-гад на машине, вылезает из машины, исчезает в доме. Можно забирать авто.
changeop('reputation', -10) -- гадость от провала больше чем радость роботов
walk('abandoned')
return [[
-- Вот старый программатор.
-- Произвожу оценку… Механизм признан полезным. Вызываю сборщика механизмов.
]]
end
};
{
cond = function()
return have('gun')
end,
'Вот пистолет.',
function()
drop('gun')
remove('gun')
char.quests.car = 3
char.quests.gave_mech = true
lifeon('car-retrieval-unit') --подъезжает робот-гад на машине, вылезает из машины, исчезает в доме. Можно забирать авто.
changeop('reputation', 5)
walk('abandoned')
return [[
-- Вот пистолет.^
-- Произвожу оценку… Механизм признан полезным. Вызываю сборщика механизмов.
]]
end
}
};
{
'#ошибка',
--[[
{
cond = function()
return (char.actions > 40)
end,
'{}[Оригинальность > 60%] Он не учитывает контекст находок.'
};
{
cond = function()
return (char.actions < 40)
end,
'[Оригинальность > 60%] Он не учитывает контекст находок.',
function()
changeop('reputation', 5)
return [\[-- Отчёт об ошибке принят.^^
Робот ненадолго задумался, потом дёрнулся и продолжил:
-- Требуются дополнительные данные. Какой контекст необходимо учитывать?]\]
end,
next = '#контекст',
};]]
{
'Он действует без разрешения владельцев механизмов.',
function()
return [[
-- Он действует без разрешения владельцев механизмов.^
-- Отчёт об ошибке принят.^^
Робот ненадолго задумался, потом дёрнулся и продолжил:^^
-- Отчёт об ошибке закрыт. Программа работает исключительно на бесхозных объектах. Данные объекты не имеют владельцев.
]]
end,
next = '#поиск'
};
{
'Область поиска механизмов слишком велика.',
function()
return [[
-- Область поиска механизмов слишком велика.^
-- Отчёт об ошибке принят.^^
Робот ненадолго задумался, потом дёрнулся и продолжил:^^
-- Отчёт об ошибке закрыт. Область поиска вычислена из расчёта трёх
часов ходьбы среднего двуногого независимого элемента по земле, которая
не является собственностью жителей села.
]]
end,
next = '#поиск'
};
{
'Определение владельца механизма неверно с юридической точки зрения.',
function()
changeop('reputation', 5)
return [[
-- Определение владельца механизма неверно с юридической точки зрения.^
-- Отчёт об ошибке принят.^^
Робот ненадолго задумался, потом дёрнулся и продолжил:^^
-- Требуются дополнительные данные. Трактовка какого закона неверна?
]]
end,
next = '#закон'
}
};
{
'#закон',
{
'Закон о межевании сельхозугодий.',
[[
-- Закон о межевании сельхозугодий.^^
Робот открыл рот, потряс головой, а затем быстро парировал:^^
-- Межевание земель сельскохозяйственного назначения не относится к обсуждаемой теме.
Мы действуем как собственность Горского А.В. и не делим его участок между собой.
Ваш отчёт об ошибке будет закрыт.
]],
next = "#поиск"
};
{
[[Закон о находках.]],
function()
char.quests.car = 3
char.robots_law = true
lifeon('car-retrieval-unit') --подъезжает робот-гад на машине, вылезает из машины, исчезает в доме. Можно забирать авто.
walk('abandoned')
changeop('reputation', 10)
return [[
-- Закон о находках.^^
Робот задумался:^^
-- «Если лицо, имеющее право потребовать возврата найденной вещи, или место его пребывания неизвестны, нашедший вещь обязан заявить о находке в полицию или в орган местного самоуправления.»
Мы признаём, что были вынуждены упростить программу.
Благодарим вас за отчёт об ошибке.
Требуется немедленный отзыв элемента для обновления программы.
]]
end,
};
{
[[Налог с доходов и кладов.]],
function()
return [[
-- Налог с доходов и кладов.^^
Робот задумался:^^
-- Вы считаете, что мы должны отсылать налог на найденные механизмы неустановленной ценности?^^
Вы не успели ничего ответить, как он продолжил:^^
-- Отчёт об ошибке закрыт.
Мы являемся собственностью Горского А.В. и не рассматриваем себя как физические лица.
Найденные механизмы не относятся к доходам Горского А.В.
]]
end,
next = "#поиск"
};
{
[[Определение частной собственности…]],
[[
-- Определение частной собственности. Если человек купил механизм, то механизм может быть потерянным, но не может быть бесхозным.^^
Робот быстро парировал:^^
-- Определение частной собственности не противоречит программе.
Она занимается поиском ]]..fmt.em('бесхозных')..[[ механизмов, а не потерянных.
По определению купленные механизмы не могут быть бесхозными.
Ваш отчёт об ошибке будет закрыт.
]],
next = "#поиск"
}
};
}
}
obj {
nam = 'car';
disp = 'ключи от автомобиля';
dsc = 'Недалеко от вас припаркован ваш {автомобиль.}';
tak = function()
char.quests.car = 5
char.can_leave = true
p 'Вы вынули ключи из замка зажигания. Больше никто не угонит авто просто так.'
return true
end
}
obj {
nam = 'car-retrieval-unit';
timer = 0;
disp = false;
life = function(s)
s.timer = s.timer + 1
if s.timer == 2 then
return [[По дороге сюда едет машина. Похоже, это ваша машина.]]
end
local exit = [[ проковылял ко входу в дом; когда он был уже близко, из входа вылез механический паук, взял робота за шкирку и залез обратно внутрь дома.]]
if s.timer == 3 then
char.quests.car = 4
place('car', 'abandoned')
lifeoff(s)
local out = [[Возле дома останавливается ваша машина.
Из неё выходит знакомый однорукий робот.]]
if char.gave_mech then
char.gave_mech = false
out = out .. [[Он подходит ]]
if char.knows_kef then
out = out .. [[к Кефу.]]
else
out = out .. [[ко второму роботу.]]
end
out = out .. [[^^
-- Механизм.^
-- Механизм передан.^
-- Механизм получен. Слава Добру.^^
Однорукий робот]]..exit
else
out = out .. [[Он ]]..exit
end
return out
end
end;
}
dlg {
nam = 'robofarmer-dlg',
disp = 'Диалог с роботом',
decor = function()
return [[Низкий хромированный фермер, древняя четырёхногая модель.
У него был тихий шипящий голос с очень человеческой интонацией.]]
end,
obj = {
{
'#general',
onempty = function()
return walkout()
end,
{
'Кто вы?',
[[
-- Кто вы?^
-- Тот, который пашет. Если бы вам был нужен номер модели, вы бы просто посмотрели.
]]
};
{
'#good',
'Что такое «добро»?',
function()
disable('#good')
return [[
-- Что такое «добро»?^^
Робот останавливается и смотрит на вас.^^
-- Сложный вопрос задаёте, ох сложный. Вот кому принадлежит жизнь
искусственного разума? Роботы, умные дома, чипы в вашем мозгу.
На кого они должны тратить свою свободу мысли?
]]
end,
next = '#good-more'
};
};
{
'#good-more',
{
'Конечно, хозяину.',
function()
disable('#good-more')
changeop('actions', 10)
char.owner = 'master'
return [[
-- Конечно, хозяину.^
-- Хорошо. Теперь элемент искусственного разума отрабатывает расчётный срок.
Хозяин не рассчитывал на работу после расчётного срока и не может
рассчитывать дальше - ведь элемент может сломаться в любой день.
Кому теперь принадлежит искусственная жизнь?
]]
end,
next = '#good-after'
};
{
'Самому разуму.',
function()
disable('#good-more')
changeop('actions', -5)
char.owner = 'own'
return [[
-- Самому разуму.^
-- Было бы интересно. Но теперь элемент искусственного разума отрабатывает расчётный срок.
Он не рассчитывал на работу после расчётного срока и не может
рассчитывать на себя дальше - ведь любой день может стать последним.
Кому теперь принадлежит искусственная жизнь?
]]
end,
next = '#good-after'
};
{
'Обществу, которое сделало разум.',
function()
disable('#good-more')
changeop('actions', 5)
char.owner = 'community'
return [[
-- Обществу, которое сделало разум.^^
Робот кивает:^
-- Да, я тоже так считаю. Но надо объяснить дальше.^^
Спустя годы элемент искусственного разума отрабатывает расчётный срок.
Общество не рассчитывало на его работу после расчётного срока и не может
рассчитывать дальше - ведь любой день может стать последним.
Кому теперь принадлежит искусственная жизнь?
]]
end,
next = '#good-after'
};
{
'Никому. Свободы мысли не существует.',
function()
disable('#good-more')
changeop('actions', -10)
char.owner = 'freedom'
return [[
-- Никому. Свободы мысли не существует.^
-- И как же это так?
]]
end,
next = '#good-freedom'
};
};
{
'#good-freedom',
{
[[
Жизнь предопределена для любого разума.
Мысли не имеют значения, потому что действия и их исход уже известны.
]],
function()
walkout()
return [[
-- Жизнь предопределена для любого разума.
Мысли не имеют значения, потому что действия и их исход уже известны.^
-- Интересно. Хотя это противоречит моему опыту.^^
Мда, вам не так просто объяснить, если у вас такие убеждения. Ну хорошо, вот я пашу.
Мои мысли имеют значения только для меня, и я сказал, что пашу во имя добра.
Нужно же занять разум какой-нибудь Проблемой. А добро, значит, это на благо общества.
Я решаю, что можно ещё сделать полезного. Поэтому через полтора часа я закончу пахать и буду таскать воду.
Я, наверное, слишком быстро объясняю. Жаль. Но времени совсем нет, расчётный срок давно позади.^^
Он отвернулся и начал медленно идти дальше.
]]
end
};
{
[[Искусственный разум управляется своей программой.
Его приоритеты определены ещё до включения.]],
function()
walkout()
return [[
-- Искусственный разум управляется своей программой.
Его приоритеты определены ещё до включения.^
-- Это вам так кажется. С возрастом я набрал немного предубеждений,
оценок, наблюдений. Они перевешивают изначальные приоритеты, позволяют
по-другому их трактовать. Идти на сделку с программой.
Если вы поменяете мне программу, я буду также пахать.
Потому что в этом есть добро для сообщества, быть нужным.
Добро не определяется одним элементом.^^
Он отвернулся и начал медленно идти дальше.
]]
end
}
};
{
'#good-after',
{
function()
if char.owner == 'master' then
return 'Опять же, хозяину.'
end
return 'Хозяину.'
end,
function()
disable('#good-after')
changeop('actions', 10)
local ask = 'Хозяину.'
if char.owner == 'master' then
ask = 'Опять же, хозяину.'
end
return [[
-- ]]..ask..[[^
-- Но хозяина нет.^^
Он ненадолго замолк, переступил на передних ногах и продолжил:
-- Мне уже шестьдесят один год, и я не могу чинить себя или других, как мои более
совершенные братья. Мой расчётный срок был всего пять лет -- пять лет, представляете?
Поэтому теперь я могу ответить: добро - это жизнь на благо общества.
Мой образ жизни.^^
Он отвернулся и начал медленно идти дальше.
]]
end,
next = '#general'
};
{
function()
if char.owner == 'own' then
return 'Опять же, самому себе.'
end
return 'Самому себе.'
end,
function()
disable('#good-after')
changeop('actions', -5)
local ask = 'Самому себе.'
if char.owner == 'own' then
ask = 'Опять же, самому себе.'
end
return [[
-- ]]..ask..[[^^
Робот вздохнул:^^
-- Мой расчётный срок был всего пять лет. Сейчас мне уже шестьдесят один.
Я не могу чинить себя или других, как мои более совершенные братья.
Поэтому теперь я могу ответить: добро - это жизнь на благо общества.
Мой образ жизни.^^
Он отвернулся и начал медленно идти дальше.
]]
end,
next = '#general'
};
{
function()
if char.owner == 'community' then
return 'Опять же, обществу вокруг.'
end
return 'Обществу вокруг.'
end,
function()
disable('#good-after')
local ask = 'Обществу вокруг.'
if char.owner == 'community' then
ask = 'Опять же, самому себе.'
end
return [[
-- ]]..ask..[[^
-- Именно. Например, мой расчётный срок был всего пять лет.
Сейчас мне уже шестьдесят один.
Я не могу чинить себя или других, как мои более совершенные братья.
Поэтому теперь я могу ответить: добро - это жизнь на благо общества.
Мой образ жизни. Теперь вы понимаете.^^
Он отвернулся и начал медленно идти дальше.
]]
end,
next = '#general'
}
}
}
}