1
0
Fork 0
mirror of https://gitlab.com/Oreolek/duel.git synced 2024-06-30 22:05:07 +03:00
duel/main3.lua

601 lines
26 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.

--$Author:Alexander Yakolev, 2017
--$Version:1.0
require "fmt"
require "proxymenu"
require "noinv"
declare "isdebug" (true)
if isdebug then
require "dbg"
require "dbg-ru"
include("transcript")
end
include 'ui'
include 'tools'
include 'intro'
fmt.dash = true
fmt.quotes = true
fmt.para = true
-- https://www.google.ru/maps/place/%D0%9C%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%B0/@22.8355052,-105.0808555,16z/data=!4m5!3m4!1s0x84043a3b88685353:0xed64b4be6b099811!8m2!3d23.634501!4d-102.552784
-- Необходимые правки стиля перед релизом:
-- 1. Убрать курсив от ответов на диалоги, чтобы они просто слились с основным текстом
-- 2. Убрать вывод текста ответов на первый из диалогов (выбор обращения)
room {
nam = 'exit_west',
disp = 'Дорога на запад',
way = {'intersection', 'pavels', 'houseclosed'},
decor = [[
Вы стоите на окраине Жестианы.
Прямая автодорога идёт на запад, где начинается лес.
В лесу она тут же делает крутой поворот.^^
Отсюда видны два здания в стороне.
]]
}
room {
nam = 'houseclosed',
disp = 'Запертый дом',
decor = [[Типовой одноэтажный дом. Окна занавешены, а вход заперт.]],
way = {'exit_west'},
}
room {
nam = 'abandoned',
disp = 'Одноэтажный дом', -- занят роботами
way = {'exit_north'},
dsc = [[
Дорога к этому дому выложена камнями. Идти по булыжнику легко и просто.
]],
decor = [[
Это высокий треугольный дом без окон.
Его пирамидальная крыша блестит зеркальной чистотой, а стены отполированы в ровный цвет
свежего дерева.
На одной из стен углём нарисована стилизованная голова робота-летописца и надпись: "ДОБРО.".
Внутрь ведёт единственный вход, который находится на три метра выше земли.^^
Перед домом работают механические боты. Ближе всего к вам стоят двое.
{robofarmer|Один из них} копается в грядках, а {robobutler|второй} настраивает какой-то {mechanism|механизм.}
]],
obj = {
obj {
nam = 'robofarmer',
act = [[Низкий хромированный фермер. Четырёхногая модель примерно десяти лет от роду.
Он медленно неуклюже передвигает передние ноги, когда переходит к следующей грядке.]]
};
obj {
nam = 'robobutler',
act = [[
Он похож по строению на робота-дворецкого, но у него не хватает верхней части лица,
а вместо левой ноги - импровизированный протез из строительного нанопластика.
Его глаза очень маленькие для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы.
]]
};
obj {
nam = 'mechanism',
act = [[Какая-то параболическая антенна на широкой стальной трубе, вкопанной в землю.
Видимо, труба служит защитным корпусом для деталей.]]
}
}
}
room {
nam = 'pavels',
disp = 'Дом на окраине',
way = {'exit_west'},
decor = [[
Вы стоите перед типовым напечатанным одноэтажным домом.
С одной стороны к стене прислонилась маленькая пристройка для дров.
С другой стороны — {suit|боевой механизированный костюм.}
]],
obj = {
obj {
nam = 'suit',
act = function()
out = [[
Боевой механизированный костюм высотой 2,7 метров, марка РГ-22.
Рассчитан на одного пилота.
Вооружён автоматической пушкой калибра 5мм и огнемётом.^^]]
if char.war == "earth" then
out = out .. [[
Вы чинили эти двуногие танки день и ночь.
Лунные мины становились всё изощрённее, и
приходилось срочно отлаживать программы починки, а иногда и лезть вручную.
Боты никогда не заботились о том, чтобы вычистить остатки пилота из кабины.^^
]]
end
if char.war == "moon" then
out = out .. [[
Где бы вы ни сражались, эти двуногие твари шли на вас тысячами.
Вам приходилось еженедельно изобретать новые мины, чтобы получить хоть какой-то
шанс отбиться.
Сорок восемь смертельных чертежей против главной уязвимости этой модели —
человека в кабине.^^
]]
end
out = out..[[Такие штамповались на Земле сотнями тысяч, но после войны оказалось, что большая часть потеряна на поле боя.
Конечно, по официальной версии.
]]
end
}
}
}
room {
nam = 'exit_north',
disp = 'Дорога на север',
way = {'town', 'abandoned'},
decor = [[
Вы стоите на окраине Жестианы.
Прямая автодорога идёт на север.
Здесь от неё на запад отходит небольшой заезд из булыжника.
]]
}
room {
nam = 'chos',
disp = 'Дом Чо',
way = {'intersection'},
decor = [[
Вы стоите перед большим {chos_house|напечатанным домом.}
Отсюда начинается большая пашня, по которой ходят фермерские роботы.
]],
obj = {
obj {
nam = 'chos_house',
act = [[К типовому двухэтажному дому из нанотрубок со временем допечатывали несколько модулей.
Часть второго этажа выглядит совсем новой — возможно, её недавно расширили.]],
}
}
}
room {
nam = 'intersection',
disp = 'Перекрёсток',
decor = [[Просто три просёлочные дороги, которые соединяются вместе.]],
way = {'exit_west', 'chos', 'town'},
exit = function()
end
}
room {
nam = 'town',
disp = 'Жестиана',
way = {'exit_north', 'intersection', 'factory'},
decor = [[
Жестиана - это маленькая деревня, которая отмечена одной табличкой: «ЖЕСТИА--» на кривом столбе возле дороги.
На этом же столбе висит расписание автобусов.
Если бы не он, здесь были бы просто два типовых дома, которые стоят рядом, и
просёлочная дорога между ними.
Но столб - это остановка, а остановка обозначает деревню.^^
Дом на западной стороне украшен надписью, которая была когда-то яркой:
«Добро Пожаловать». Вход заперт.^^
Дом напротив повёрнут входом в сторону от дороги. Окна зашторены. Двери закрыты.
]]
}
room {
nam = 'factory',
disp = [[Здание на горе]],
way = {'town', 'cathedral'},
dsc = [[
Вы забираетесь на склон горы.
Отсюда хорошо видна вся Жестиана.
Напротив вы видите ярко-розовый двухэтажный дом с высокой пристройкой.
Вход в пристройку открыт, а над ним растянут длинный зелёный плакат с коротким сообщением:^^
«КАЖДЫЙ СТАНЕТ ХТОНИЧЕСКОЙ ПИЩЕЙ»
]]
}
room {
nam = 'cathedral',
disp = [[Внутри здания]],
way = {'factory'},
enter = [[
Вы входите в чистый просторный зал.
]],
decor = [[
Здесь тихо и пахнет можжевельником.
Три ряда скамей стоят перед импровизированной трибуной.^^
В ряду справа сидит {lfactory-man|одинокий мужчина в комбинезоне.}
Вокруг зала ходит {lfactory-servant|мужчина в кожаной куртке} и протирает мебель от пыли.
]],
obj = {
obj {
nam = 'lfactory-man',
disp = 'сидячий мужчина',
exam = [[
Он одет в спортивный костюм с двумя галстуками на шее.
Рядом с ним лежит серый заплечный мешок.
Он сидит на скамье, опустив голову, погружённый в свои мысли.
]],
act = function(self)
return self.exam
end,
talk = function() walk('factory-man') end
},
obj {
nam = 'lfactory-servant',
disp = 'мужчина за работой',
exam = '',
act = function(self)
return self.exam
end,
talk = function() walk('factory-servant') end
}
}
}
-- пчёёёёёлы
quest_factory_man_1 = function()
return [[
Вы были на треугольной ферме за городом?
Немного на север, вдали от дороги.
Там жил старик Демидов, но он умер.
А после него остались… эти.
]];
end
dlg {
nam = 'factory-man',
disp = 'Одинокий мужчина',
decor = [[
Он одет в спортивный костюм с двумя галстуками на шее.
Рядом с ним лежит серый заплечный мешок.
Он сидит на скамье, опустив голову, погружённый в свои мысли.
]],
enter = function(s)
if char.talked_abandoned then
s:reset '#разговор'
end
end,
obj = {
{{
'Что это за место?',
function() return [[
-- Шшш. — он поднимает голову. — Говорите шёпотом.
Это - наш клуб, здесь должно быть тихо.
Мы называем его Клубом Памяти.
А вы же ]]..that()..' '..engineer()..[[ из города, да?
]]; end,
next = '#кто'
};
};
{ '#кто',
{
function() return 'Да, '..pronoun_1()..''..engineer(); end,
[[-- Хорошо. Вы у нас — новость дня. Осторожнее, а то про вас случайно сочинят народную легенду или песню.
Хотя в Жестиане не любят петь.]],
next = '#разговор'
};
{
'Откуда вы знаете?',
function()
local out = [[-- У нас маленькая деревня. Вы — новость этого дня.
Я даже знаю, что вы вроде как отличились на войне. ]];
if char.war == "moon" then
out = out .. 'Но не мне судить, по какую сторону. ';
end;
out = out .. [[Осторожнее, а то про вас случайно сочинят народную легенду или песню.
Хотя в Жестиане не любят петь.^^
Кстати. Не можете помочь мне с одной проблемой? Это как раз по вашему профилю.]];
return out;
end,
next = '#квест'
}
};
{ '#квест',
{
'Что у вас за проблема?',
function() return quest_factory_man_1(); end,
next = '#квест2'
};
{
'В моих краях любят невмешательство.',
function()
return [[И это очень хорошо вам послужило на войне.
Давайте я просто расскажу, а вы уже решите.]]..quest_factory_man_1();
end,
next = '#квест2'
};
{
'Широкий профиль и длинный ценник.',
function()
return 'Значит, мы легко договоримся. Итак.'..quest_factory_man_1();
end,
next = '#квест2'
}
};
{ '#квест2',
{
'Кто?',
[[Роботы. Небольшой строй металлоголовых, у которых умер хозяин.
Они ждут приказов, но приказов нет.
Они не выполняют приказов незнакомого голоса.
]],
next = '#квест3'
};
{
'Да, там живут роботы.',
cond = function()
return visited('abandoned');
end,
[[И вы видели, как они себя ведут? Кошмарно.
Металлоголовые без хозяина.
Они ждут приказов, но приказов нет.
Они не выполняют приказов незнакомого голоса.
]],
next = '#квест3'
}
};
{ '#квест3',
{
'И что с того?',
[[
-- Приведите их ко мне.
Настройте их на мой голос.
Я буду хорошим хозяином.
]],
next = "#квест4"
},
{
'А что, разве роботы не могут быть свободными?',
[[Мужчина закидывает колено на скамью и откидывается назад.^^
-- Роботы - не люди.
У них нет желаний, есть только программы.
Я думал, вы должны это понимать.
Им не нужна свобода.^^
Приведите их ко мне.
Настройте их на мой голос.
Я буду хорошим хозяином.]],
next = "#квест4"
},
{
'(с сарказмом) А вы добры, не хотите оставлять чужое без присмотра.',
[[
-- У всех свой интерес.
Это же программы, они не выживут без человека.
У них нет цели, желаний, документов в конце концов.^^
Приведите их ко мне.
Настройте их на мой голос.
Я буду хорошим хозяином.
]]
}
};
{ '#квест4',
{
function()
return 'Хорошо. '..pronoun_1()..' '..plural('могу', 'можем')..' привести роботов.'
end,
function()
char.quests.abandoned = 1
char.talked_abandoned = true
return 'Вот запись с моим голосом. — он даёт вам микрочип. — Я буду ждать.'
end,
next = "#разговор"
};
{
function()
return plural('Посмотрю', 'Посмотрим')..'. Но без обещаний.'
end,
function()
char.quests.abandoned = 1
char.talked_abandoned = true
return 'Вот запись с моим голосом. — он даёт вам микрочип. — Я надеюсь на вас.'
end,
next = "#разговор"
};
{
function()
return 'Нет. '..pronoun_1()..' не '..plural('могу', 'можем')..' делать подобное. Ищите кого-нибудь другого для своих махинаций.'
end,
function()
char.quests.abandoned = 0
char.talked_abandoned = true
return 'Он пожимает плечами. — Я буду здесь, если вы передумаете.'
end,
next = "#разговор"
}
};
{ '#разговор',
{
'Что интересного в Жестиане?',
'Ничего.'
};
{
always = true,
'Чем занимается ваш клуб?',
'Как обычно - собираемся раз в неделю, делимся новостями.'
};
{
'Что это за здание?',
function()
enable("#здание-нап")
return 'Просто дом Джексонов. Надо же где-то собираться.'
end,
};
{
always = true,
'Что означает надпись над входом?',
[[Её меняют каждую неделю, но смысл всегда одинаков. Чтобы не расслаблялись.]]
};
{
hidden = true,
always = true,
cond = function()
return char.talked_abandoned == true
end,
'Насчёт тех роботов…',
'Что такое?',
next = '#robots'
};
{
hidden = true,
always = true,
"#здание-нап",
'Напомните, а что это за здание?',
function()
enable("#здание-нап")
return 'Всё ещё дом Джексонов, где мы собираемся.'
end
};
{
always = true,
'До свидания. Приятно было поговорить.',
function()
walk('cathedral')
return 'Все там будем, говори - не говори…'
end,
};
};
{ '#robots',
{
always = true,
cond = function()
return char.quests.abandoned > 0
end,
function()
return plural('Я', 'Мы') .. ' ' .. plural('работаю','работаем') .. ' над этим.'
end,
function()
return 'Хорошо, я подожду ещё.'
end,
next = '#разговор'
};
{
always = true,
cond = function()
return char.quests.abandoned > 0
end,
function()
return plural('Я', 'Мы')..' передумал'..endings()..'. Это гадко и бесчеловечно.'
end,
function()
char.quests.abandoned = 0
return 'Жаль. Но если вы подумаете ещё немного, то предложение ещё в силе.'
end,
next = '#разговор'
};
{
always = true,
cond = function()
return (char.quests.abandoned == 0)
end,
function()
return plural('Я', 'Мы')..' '..plural('возьмусь','возьмёмся')..' за это.'
end,
function()
char.quests.abandoned = 1
return 'Прекрасно! Вот образец моего голоса. Я буду ждать.'
end,
next = '#разговор'
};
}
}
}
dlg {
nam = 'factory-servant';
disp = 'Мужчина за работой';
decor = [[
Он одет в кожаную куртку, а на шее он носит длинный розовый плащ, который свисает до колен.
]]
}
-- Диалог с Анжелиной Чо
dlg {
nam = 'start3',
disp = false,
dsc = [[
(курсивом) Сюда, пожалуйста.^^
Она провела вас в большой сарай, где пылился высокий автоматический сельхозкомбайн.
-- Вот и наш больной. Мы прогрели его весной, а он и не едет.
Вы же ]]..engineer()..[[, вы сможете его починить?
А то мы потеряем урожай.
]],
decor = [[
Старушка Чо внимательно смотрит на вас.
В её глазах вы читаете, что от починки этого комбайна зависит несколько жизней.
]],
obj = {{
onempty = function()
walk('start4')
end,
{
'Зачем вы заводили комбайн весной?',
'-- Он замёрз! После зимы у мужа обычная машина не заводится, не то что роботы.'
},
{
'У вас же столько роботов. Неужели вы не справитесь без комбайна?',
[[-- Всего семеро, и они обычно упаковывают и складывают.
Если они будут ещё и косить, мы не управимся до осени.
Урожай сгниёт под дождями.]]
},
{
'Да, '..pronoun_1()..' -- '..engineer()..[[.
Но я могу только определить проблему, у вас же нет мастерской или инструментов.]],
'-- Вы знаете, я могу попросить соседей. У Павла в подвале во время войны была мастерская.'
},
{
'Давно он у вас?',
[[-- Ну, лет двадцать уже, наверное.
То есть, я хотела сказать, девятнадцать.
Гарантия же ещё действует, правда?]]
}
}}
}
-- Починка комбайна
dlg {
nam = 'start4',
disp = false,
dsc = function()
return [[
Комбайн оказался ещё довоенным.
Вы копались не меньше часа, пока не нашли износившийся программаторный блок.^^
-- Ну что же, надо чинить. Случай гарантийный, всё за счёт фирмы. Но придётся забрать в город, в мастерскую.^^
-- А нельзя прямо здесь? У нас же урожай скоро!^^
-- Нет, это…^^
-- Послушайте. У меня сестра работает в Берёзовке, я знаю что нужно.
Вас устроит… десять тысяч?^^
-- В смысле?^^
-- Подождите, не отказывайтесь. Десять новых кусков. Золотом. И вы почините это здесь.^^
Вы задумались. На десять кусков можно было бы купить новый комбайн - конечно, не такой мощный, но если продать золото на Луну… Был один хитрый выход.^^
-- Давайте так: ]]..pronoun_1()..[[ здесь на три дня. Если за эти три дня что-то получится… Но после урожая -- сразу в мастерскую, нужен основательный ремонт. У кого, вы говорили, здесь мастерская?^^
-- Спасибо! -- она улыбнулась. -- Я скажу внучке, чтобы вас проводила. Сейчас.^^
Вы вернулись к дому. Старушка исчезла за дверью, а затем быстро вернулась с чумазой девушкой лет семнадцати.
-- Это Катя, она вас проводит. Катя, до Павла и обратно, хорошо?^^
Девушка хотела что-то возразить, но передумала, опустила голову и тихо ответила:^^
-- Хорошо, бабушка.
]]
end,
decor = [[
Вы стояли и смотрели на Катю. А Катя смотрела на вас.^^
Между вами - тишина.
]],
obj = {{
onempty = function()
char.quests.main = 1
char.quests.kathy = 0
p "Она отворачивается. Видимо, разговор закончен."
walk('chos')
end,
{'Привет.', 'Привет.'}
}}
}