mirror of
https://gitlab.com/Oreolek/duel.git
synced 2024-05-04 10:08:47 +03:00
576 lines
25 KiB
Lua
576 lines
25 KiB
Lua
-- Вся эта локация от и до выстроена как одна большая битва с боссом.
|
||
-- В которой вы проходите через его двор, его дом, его святую мастерскую
|
||
-- перед тем, как встретиться и начать переговоры.
|
||
|
||
room {
|
||
nam = 'pavels',
|
||
disp = 'Дом на окраине',
|
||
way = {'exit_west'},
|
||
decor = [[
|
||
Вы стояли перед типовым напечатанным одноэтажным домом.
|
||
Он был раскрашен в светло-зелёный с красной крышей.
|
||
|
||
С одной стороны к стене прислонилась маленькая пристройка для дров.
|
||
С другой стороны — {suit|боевой механизированный костюм.}
|
||
|
||
Возле входной двери горела {call|кнопка домофона.}
|
||
]],
|
||
obj = {
|
||
obj {
|
||
nam = 'call';
|
||
disp = 'домофон';
|
||
act = function(s)
|
||
return 'Домофон был включён, хозяин — дома. Достаточно было только поговорить с ним.'
|
||
end;
|
||
talk = function()
|
||
if _('pavels-call').obj:empty() then
|
||
return 'Вам нечего сказать.'
|
||
end
|
||
return walk('pavels-call')
|
||
end;
|
||
take = function()
|
||
pn "Вам не был нужен домофон или какая-то его деталь."
|
||
return false
|
||
end,
|
||
open = function()
|
||
pn "Домофон не разбирался."
|
||
return false
|
||
end
|
||
};
|
||
obj {
|
||
nam = 'suit',
|
||
disp = 'боевой костюм',
|
||
talk = 'Костюм не принимал ваших команд. Если, конечно, он вообще вас слушал.',
|
||
take = function()
|
||
pn "Вам не нужна была боевая машина. Возвращаться в город на своём кабриолете было бы приятнее и быстрее."
|
||
return false
|
||
end,
|
||
act = function()
|
||
char.saw_suit = true
|
||
local out = [[
|
||
Боевой механизированный костюм высотой 2,7 метров, марка РГ-22.
|
||
Рассчитан на одного пилота.
|
||
Вооружён автоматической пушкой калибра 5мм и огнемётом.^^]]
|
||
if char.war == "earth" then
|
||
out = out .. [[
|
||
Вы чинили эти двуногие танки день и ночь.
|
||
Лунные мины становились всё изощрённее, и
|
||
приходилось срочно отлаживать программы починки, а иногда и лезть вручную.
|
||
Боты никогда не заботились о том, чтобы вычистить остатки пилота из кабины.^^
|
||
]]
|
||
end
|
||
if char.war == "moon" then
|
||
out = out .. [[
|
||
Где бы вы ни сражались, эти двуногие твари шли на вас тысячами.
|
||
Вам приходилось еженедельно изобретать новые мины, чтобы получить хоть какой-то
|
||
шанс отбиться.
|
||
Сорок восемь смертельных чертежей против главной уязвимости этой модели —
|
||
человека в кабине.^^
|
||
]]
|
||
end
|
||
out = out..[[Такие штамповались на Земле сотнями тысяч, но после войны оказалось, что большая часть потеряна на поле боя.
|
||
Конечно, по официальной версии.
|
||
]]
|
||
return out
|
||
end
|
||
}
|
||
}
|
||
}
|
||
dlg {
|
||
nam = 'pavels-call',
|
||
disp = 'Разговор с домофоном',
|
||
decor = [[Камера домофона смотрела на вас бесстрастным блеском.]],
|
||
enter = [[-- Кто там? — спросил неприветливый мужской низкий голос.]],
|
||
obj = {
|
||
{
|
||
{
|
||
'#robot',
|
||
'Здесь не проезжал такой робот…',
|
||
function()
|
||
disable('#robot')
|
||
return [[
|
||
— Вы не видели, как здесь проезжал робот на автомобиле? Он такой…^^
|
||
|
||
Домофон отключился. Видимо, нет.
|
||
]]
|
||
end
|
||
};
|
||
{
|
||
'#yours',
|
||
cond = function()
|
||
return char.saw_suit == true and not disabled('#yours')
|
||
end,
|
||
'Это ваш РГ-22?',
|
||
function()
|
||
disable('#yours')
|
||
return [[
|
||
-- Это ваш РГ-22?^
|
||
-- Не продаётся.
|
||
]]
|
||
end
|
||
};
|
||
{
|
||
'#repair',
|
||
cond = function()
|
||
return char.quests.chos > 0 and not visited('pavels-inside')
|
||
end,
|
||
function()
|
||
local out = plural('Я занимаюсь', 'Мы занимаемся')..' ремонтом для Анжелины; она сказала, что у вас есть своя мастерская и вы можете помочь.'
|
||
return fmt.em(out)
|
||
end,
|
||
function()
|
||
local ask = plural('Я занимаюсь', 'Мы занимаемся')..' ремонтом для Анжелины; она сказала, что у вас есть своя мастерская и вы можете помочь.'
|
||
disable('#repair')
|
||
return [[
|
||
-- ]]..ask..[[^
|
||
-- То есть, ]]..pronoun_2()..' '..plural('чинишь', 'чините')..[[ железяки.^
|
||
-- Скорее это программаторы, платы управления, ИскИны, роботы.^^
|
||
|
||
Голос на той стороне замолчал и начал чем-то шуршать.^^
|
||
|
||
-- В какой роте служил]]..endings()..[[?
|
||
]]
|
||
end,
|
||
next = '#war'
|
||
};
|
||
{
|
||
'#inside',
|
||
cond = function()
|
||
return visited('pavels-inside')
|
||
end,
|
||
function()
|
||
return 'Это снова '..pronoun_1()..'. Запустите?'
|
||
end,
|
||
function()
|
||
char.pavel_short = true
|
||
walk('pavels-inside')
|
||
return [[
|
||
-- Это снова ]]..pronoun_1()..[[. Запустите?^
|
||
-- Ну что ж, проходите.
|
||
]]
|
||
end
|
||
};
|
||
{
|
||
cond = function()
|
||
return live('kathy')
|
||
end,
|
||
fmt.em('<Попросить Катю поговорить с хозяином дома>'),
|
||
function()
|
||
local out = [[Здравствуйте, ]]..pronoun_1()..' — '..engineer() .. '.'
|
||
return out
|
||
end
|
||
};
|
||
};
|
||
{
|
||
'#war',
|
||
{
|
||
function()
|
||
return plural('Зампотех старший лейтенант', 'Зампотехи старшие лейтенанты')..' третьей мехастрелковой роты, Фронт Обороны Земли.'
|
||
end,
|
||
function()
|
||
char.war = "earth"
|
||
walk('pavels-inside')
|
||
return [[
|
||
-- ]]..plural('Зампотех старший лейтенант', 'Зампотехи старшие лейтенанты')..[[ третьей мехастрелковой роты, Фронт Обороны Земли.^
|
||
-- Старший лейтенант? А по голосу не скажешь. Ну хоть будет о чём поболтать.^^]]..enter_pavels()
|
||
end
|
||
};
|
||
{
|
||
function()
|
||
return plural('Майор', 'Майоры')..' первого ремонтного батальона, Армия Освобождения Луны.'
|
||
end,
|
||
function()
|
||
char.war = "moon"
|
||
walk('pavels-inside')
|
||
return [[
|
||
-- ]]..plural('Майор', 'Майоры')..[[ первого ремонтного батальона, Армия Освобождения Луны.^
|
||
-- Луны, значит… А по голосу не скажешь. Ладно, что прошло -- то не взлетело.^^]]..enter_pavels()
|
||
end
|
||
};
|
||
}
|
||
}
|
||
}
|
||
enter_pavels = function()
|
||
char.quests.chos = 2
|
||
return [[
|
||
Дверь открылась с громким щелчком.^^
|
||
Вы вошли в тёмную гостиную.^
|
||
-- Я здесь, внизу! -- раздался голос хозяина.
|
||
]];
|
||
end
|
||
|
||
room {
|
||
nam = 'pavels-inside',
|
||
disp = 'Гостиная',
|
||
way = {'pavels-under'},
|
||
enter = function()
|
||
lifeon('pavel-call')
|
||
return 'Вы разулись на сером махровом коврике с надписью «Человек человеку добр».'
|
||
end,
|
||
decor = [[
|
||
Эта комната была большой, но здесь было так мало свободного места, что
|
||
вам пришлось перепрыгивать через {table|журнальный столик,} чтобы пересечь её.
|
||
Предметы были разбросаны, как будто из окон пролилась река, внесла эти случайные вещи
|
||
и ушла, оставив их лежать на дне комнаты.^^
|
||
На полу были разбросаны {paper|какие-то бумажки.} За широким письменным столом
|
||
висели фотокарточки в рамках. На подоконнике слабо светился {aqua|аквариум.}
|
||
Со стен на вас смотрели красочные {portraits|портреты незнакомых людей.}
|
||
]],
|
||
obj = {
|
||
obj {
|
||
nam = 'aqua',
|
||
disp = 'аквариум',
|
||
talk = 'Вы ещё не готовы разговаривать с аквариумами.',
|
||
act = [[
|
||
Лазурные водоросли медленно сокращались и расслаблялись в прозрачной воде.
|
||
Они сокращались и расслаблялись, сокращались и расслаблялись, как будто
|
||
дышали чем-то ]]..fmt.em('другим.')..[[ Вы заметили мелкие фиолетовые пузырьки,
|
||
которые всплывали из переплетения водорослей к краям аквариума.
|
||
]]
|
||
};
|
||
obj {
|
||
nam = 'table',
|
||
disp = 'журнальный столик',
|
||
talk = 'Вам нечего сказать журнальному столику. Да и он немногословен.',
|
||
act = [[На столике лежал рисунок карандашом: робот-летописец тянет пишущую руку вверх.
|
||
В нижней части листа ручкой было написано: «Слава Земле»]]
|
||
};
|
||
obj {
|
||
nam = 'paper',
|
||
disp = 'бумаги на полу',
|
||
talk = 'Бумага может сказать только то, что на ней напечатано.',
|
||
act = [[
|
||
Медицинский листок: «Контузия женщина 26 лет передвигала шкаф свалилась внутрь.
|
||
Сломано два правых ребра, жалобы на боль в плече. Просит найти Хурхэнова.»^
|
||
Детским почерком: «Трудный 3-1. Прыжок влево, вправо, Круг, Квадрат, Вверх, Круг, Квадрат.»^
|
||
Страница из Горной Энциклопедии, буква Х: Халцедон, Хризолит, Хризопраз.^
|
||
Распечатка инструкции по обновлению нейронных сетей пилотов серии РГ.^
|
||
Таблица зависимости времени посадки цитрусовых от влажности воздуха.
|
||
]]
|
||
};
|
||
obj {
|
||
nam = 'portraits',
|
||
disp = 'портреты',
|
||
talk = 'Портреты молчали, отчего вам стало жутковато.',
|
||
act = [[
|
||
Угрюмый старик в деловом костюме.
|
||
Грустный мужчина в генеральском кителе.
|
||
Напряжённая женщина в полосатой блузке с двумя галстуками.
|
||
Девочка в кабине красного боевого механизированного костюма, почти втрое больше неё.^^
|
||
Как будто вы стояли в каком-то музее, куда даже не купили билет.
|
||
]]
|
||
}
|
||
}
|
||
}
|
||
|
||
obj {
|
||
nam = 'pavel-call',
|
||
timer = 0,
|
||
life = function(s)
|
||
s.timer = s.timer + 1
|
||
local response = {
|
||
'-- Спуститесь, пожалуйста.',
|
||
'-- Вы скоро?',
|
||
'-- Ничего там не трогать!',
|
||
'-- Я жду вас внизу.'
|
||
}
|
||
if s.timer % 4 == 1 then
|
||
return rndstr(response)
|
||
end
|
||
end
|
||
}
|
||
|
||
local tea = function()
|
||
local out = [[
|
||
-- Чёрт с вами. Будете чаю?^^
|
||
Стол выдвинулся вперёд и расширился.
|
||
Справа в нём открылась панель, из которой выехала табуретка.
|
||
Из-за вашей спины вылетел маленький робот с чайником и чашками.
|
||
Он быстро выставил приборы и начал подталкивать вас к табуретке.^^
|
||
]]
|
||
out = out .. '-- Про вас уже ходят слухи.'
|
||
if char.reputation > 0 then
|
||
out = out .. 'Немного, но хорошие.'
|
||
end
|
||
if char.reputation < 0 then
|
||
out = out .. 'Немного, но не очень хорошие.'
|
||
end
|
||
out = out .. 'Никто так толком и не знает, что вы такое.'
|
||
return out
|
||
end
|
||
local success = '-- Вот жук же вы. Разбирайте сами. А теперь уходите. Только чай перевожу.'
|
||
dlg {
|
||
nam = 'pavels-under',
|
||
disp = 'Подвал',
|
||
enter = function()
|
||
lifeoff('pavel-call')
|
||
if char.pavel_short then
|
||
_('pavels-under'):reset('#general')
|
||
return
|
||
end
|
||
local out = [[
|
||
Вы нашли маленькую дверцу, за которой начиналась лестница в тёмный подвал.
|
||
Где-то внизу, в конце лестницы, мигал слабый электрический свет.^^
|
||
Вы спустились в светлую холодную комнату, закрытую белыми плотными шторами.
|
||
В центре за широким круглым столом возвышалось мягкое Главное Кресло.
|
||
И в кресле сидел хозяин дома.^^
|
||
]]
|
||
if char.war == "moon" then
|
||
out = out .. '-- Добро пожаловать, '..plural('майор', 'майоры')..
|
||
'. Мне так и называть вас '..plural('Майором', 'Майорами')..'?'
|
||
end
|
||
if char.war == "earth" then
|
||
out = out .. '-- Добро пожаловать, '..plural('старший лейтенант', 'старшие лейтенанты')..
|
||
'. Мне так и называть вас по званию?'
|
||
end
|
||
return out
|
||
end,
|
||
decor = [[
|
||
Вы стояли в светлой холодной комнате с белыми стенами.
|
||
Она была похожа на какой-нибудь командный центр… только не на настоящий
|
||
военный штаб, которых вы насмотрелись на войне, а на что-то более фантастическое.^^
|
||
В центре на широком круглом столе стоят ряды приборов и датчиков, из-за
|
||
которых на вас смотрит {npcpavel|хозяин дома.}
|
||
]],
|
||
obj = {
|
||
obj {
|
||
nam = 'npcpavel',
|
||
disp = 'хозяин дома',
|
||
talk = 'Вы уже с ним говорите.',
|
||
act = [[
|
||
Он смотрел на вас хитрым прищуром заинтересованной кошки.
|
||
Кошки с пышными усами, которая никуда не спешит.
|
||
]]
|
||
}
|
||
},
|
||
phr = {
|
||
{
|
||
function()
|
||
return 'Сейчас больше подходит «'..plural('ремонтник', 'ремонтники')..'», спасибо.'
|
||
end,
|
||
function()
|
||
return '-- Сейчас больше подходит «'..plural('ремонтник', 'ремонтники')..'», спасибо.^'..tea()
|
||
end,
|
||
next = '#rumours'
|
||
};
|
||
{
|
||
function()
|
||
return 'Как хотите, '..pronoun_1()..' здесь ненадолго.'
|
||
end,
|
||
function()
|
||
return '-- Как хотите, '..pronoun_1()..' здесь ненадолго.^'..tea()
|
||
end,
|
||
next = '#rumours'
|
||
};
|
||
{
|
||
'#rumours',
|
||
{
|
||
'Просто гость из столицы. <сесть за чай>',
|
||
function()
|
||
char.tea = true
|
||
return [[
|
||
-- Просто гость из столицы.^^
|
||
|
||
Вы сели за столик и отхлебнули чай. У него был терпкий, но приятный вкус.^^
|
||
|
||
-- Ну тогда рассказывайте, зачем приехали.
|
||
]]
|
||
end,
|
||
next = '#ask'
|
||
};
|
||
{
|
||
'Сплетничаем?',
|
||
[[
|
||
-- Сплетничаем?^
|
||
-- Знакомимся.
|
||
]]
|
||
};
|
||
{
|
||
function()
|
||
return plural('Человек', 'Люди')..' с просьбой.'
|
||
end,
|
||
function()
|
||
return [[
|
||
--]]..plural('Человек', 'Люди')..[[ с просьбой.^
|
||
-- Я слушаю.
|
||
]]
|
||
end,
|
||
next = '#ask'
|
||
};
|
||
{
|
||
'Всегда есть слухи. Может, к делу?',
|
||
[[
|
||
-- Всегда есть слухи. Может, к делу?^
|
||
-- Ну, раз так, то я вас слушаю.
|
||
]],
|
||
next = '#ask'
|
||
}
|
||
};
|
||
{
|
||
'#ask',
|
||
{
|
||
function()
|
||
return plural('Мне', 'Нам')..' нужен программатор. Модель ЭУ-77. Его описывать?'
|
||
end,
|
||
function()
|
||
local out = [[
|
||
-- ]]..plural('Мне', 'Нам')..[[ нужен программатор. Модель ЭУ-77. Его описывать?^
|
||
-- Нет, я знаю что это.^^
|
||
Он отвлекается на один из мониторов.
|
||
]]
|
||
if char.tea == true then
|
||
out = out .. 'Вы делаете глоток чая. Терпкий чёрный напиток приятно расслабляет.'
|
||
end
|
||
out = out .. [[^^-- Нет такой детали.]]
|
||
return out
|
||
end,
|
||
next = '#detail',
|
||
},
|
||
{
|
||
'У Анжелины сломан комбайн, и для починки нужен программатор ЭУ-77. Модель старая, заказ идёт долго. Может, у вас есть?',
|
||
function()
|
||
local out = [[
|
||
-- У Анжелины сломан комбайн, и для починки нужен программатор ЭУ-77.
|
||
Модель старая, заказ идёт долго. Может, у вас есть?^
|
||
-- Ну, раз для соседей…^^
|
||
Он отвлекается на один из мониторов.
|
||
]]
|
||
if char.tea == true then
|
||
out = out .. 'Вы делаете глоток чая. Терпкий чёрный напиток приятно расслабляет.'
|
||
end
|
||
out = out .. [[^^-- Нет такой детали.]]
|
||
return out
|
||
end,
|
||
next = '#detail',
|
||
}
|
||
};
|
||
{
|
||
'#suit-pr',
|
||
{
|
||
'Это всего лишь на время урожая. Потом всё равно заказывать новый программатор.',
|
||
function()
|
||
walk('pavels')
|
||
char.quests.chos = 3
|
||
take('programmator')
|
||
return [[-- Это всего лишь на время урожая. Потом всё равно заказывать новый программатор.^]]..success()
|
||
end
|
||
};
|
||
{
|
||
'Вы же сможете договориться как соседи.',
|
||
function()
|
||
walk('pavels')
|
||
char.quests.chos = 3
|
||
take('programmator')
|
||
return '-- Вы же сможете договориться как соседи.^'..success()
|
||
end
|
||
}
|
||
};
|
||
{
|
||
'#detail',
|
||
{
|
||
cond = function()
|
||
return (char.saw_suit == true)
|
||
end,
|
||
[[
|
||
У вас во дворе стоит РГ-22 с тремя независимыми программаторами этого типа.
|
||
Вы на нём за хлебом ходите?
|
||
]],
|
||
function()
|
||
char.asked_suit = true
|
||
return [[
|
||
-- У вас во дворе стоит РГ-22 с тремя независимыми программаторами этого типа.
|
||
Вы на нём за хлебом ходите?^
|
||
-- А что если он мне дорог?
|
||
]]
|
||
end,
|
||
next = '#suit-pr'
|
||
},
|
||
{
|
||
[[
|
||
Знаете, даже в нашей компании нет базы данных по всем деталям.
|
||
Вам можно позавидовать.
|
||
]],
|
||
[[
|
||
-- Знаете, даже в нашей компании нет базы данных по всем деталям.
|
||
Вам можно позавидовать.^
|
||
-- Завидуйте сколько хотите. Детали нет.
|
||
]],
|
||
next = '#general'
|
||
},
|
||
},
|
||
{
|
||
'#general',
|
||
{
|
||
cond = function()
|
||
return (char.saw_suit == true and char.asked_suit ~= true)
|
||
end,
|
||
'У вас во дворе стоит РГ-22 с тремя независимыми программаторами этого типа. Вы на нём за хлебом ходите?',
|
||
function()
|
||
char.asked_suit = true
|
||
return [[
|
||
-- У вас во дворе стоит РГ-22 с тремя независимыми программаторами этого типа.
|
||
Вы на нём за хлебом ходите?^
|
||
-- А что если он мне дорог?
|
||
]]
|
||
end,
|
||
next = '#suit-pr'
|
||
};
|
||
{
|
||
'#tea',
|
||
'Вы всегда угощаете гостей чаем?',
|
||
function()
|
||
disable('#tea')
|
||
return [[
|
||
-- Вы всегда угощаете гостей чаем?^
|
||
-- Только интересных.
|
||
]]
|
||
end,
|
||
};
|
||
{
|
||
'#servants',
|
||
cond = function()
|
||
return char.actions > 50
|
||
end,
|
||
'[Традиционализм > 50%] Хороший у вас дом. А где же слуги?', -- обсуждение роботов
|
||
function()
|
||
disable('#servants')
|
||
disable('#servants2')
|
||
-- не показывать выключенный вариант, если внезапно игрок
|
||
-- опустил Традиционализм до 50% и меньше
|
||
return [[
|
||
-- Хороший у вас дом. А где же слуги?^
|
||
-- Слуги?
|
||
А, вы про роботов.
|
||
Мне больше нравятся компактные модели.
|
||
Не так быстро работают, но зато почти незаметны.
|
||
]]
|
||
end
|
||
};
|
||
{
|
||
'#servants2',
|
||
cond = function()
|
||
return char.actions <= 50
|
||
end,
|
||
'{}[Традиционализм > 50%] Хороший у вас дом. А где же слуги?',''
|
||
};
|
||
{
|
||
'Ну, спасибо за ваше ничего.',
|
||
function()
|
||
walk('pavels')
|
||
return [[
|
||
-- Ну, спасибо за ваше ничего.^
|
||
-- Заходите в любое время.
|
||
]]
|
||
end
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
obj {
|
||
nam = 'programmator',
|
||
disp = 'программатор',
|
||
mech = true,
|
||
inv = 'Плата управления передвижением искусственного интеллекта. Жутко старая, но рабочая.'
|
||
}
|