1
0
Fork 0
mirror of https://gitlab.com/Oreolek/duel.git synced 2024-07-02 14:55:15 +03:00
duel/main3.lua

502 lines
21 KiB
Lua
Raw Normal View History

--$Author:Alexander Yakolev, 2017
--$Version:1.0
require "fmt"
2017-03-05 19:34:59 +02:00
require "proxymenu"
2017-02-26 13:24:21 +02:00
declare "isdebug" (true)
2017-03-06 12:32:34 +02:00
if isdebug then
require "dbg"
require "dbg-ru"
2017-03-06 12:50:29 +02:00
include("transcript")
2017-03-06 12:32:34 +02:00
end
2017-03-06 13:28:14 +02:00
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 = 'Дорога на запад',
2017-03-05 15:35:49 +02:00
way = {'intersection', 'pavels', 'houseclosed'},
decor = [[
Вы стоите на окраине Жестианы.
Прямая автодорога идёт на запад, где начинается лес.
В лесу она тут же делает крутой поворот.^^
Отсюда видны два здания в стороне.
]]
}
2017-03-05 15:35:49 +02:00
room {
nam = 'houseclosed',
disp = 'Запертый дом',
decor = [[Типовой одноэтажный дом. Окна занавешены, а вход заперт.]],
way = {'exit_west'},
}
room {
nam = 'abandoned',
2017-02-26 13:24:21 +02:00
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 = 'Дом на окраине',
2017-03-05 15:35:49 +02:00
way = {'exit_west'},
decor = [[
2017-02-26 13:24:21 +02:00
Вы стоите перед типовым напечатанным одноэтажным домом.
С одной стороны к стене прислонилась маленькая пристройка для дров.
С другой стороны {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 = 'Дорога на север',
2017-02-26 13:24:21 +02:00
way = {'town', 'abandoned'},
decor = [[
Вы стоите на окраине Жестианы.
Прямая автодорога идёт на север.
Здесь от неё на запад отходит небольшой заезд из булыжника.
]]
}
room {
nam = 'chos',
disp = 'Дом Чо',
2017-03-05 15:35:49 +02:00
way = {'intersection'},
decor = [[
Вы стоите перед большим {chos_house|напечатанным домом.}
Отсюда начинается большая пашня, по которой ходят фермерские роботы.
]],
obj = {
obj {
nam = 'chos_house',
act = [[К типовому двухэтажному дому из нанотрубок со временем допечатывали несколько модулей.
2017-03-05 08:13:15 +02:00
Часть второго этажа выглядит совсем новой возможно, её недавно расширили.]],
}
}
}
room {
nam = 'intersection',
disp = 'Перекрёсток',
decor = [[Просто три просёлочные дороги, которые соединяются вместе.]],
way = {'exit_west', 'chos', 'town'},
exit = function()
end
}
room {
nam = 'town',
disp = 'Жестиана',
2017-03-05 15:35:49 +02:00
way = {'exit_north', 'intersection', 'factory'},
decor = [[
Жестиана - это маленькая деревня, которая отмечена одной табличкой: «ЖЕСТИА--» на кривом столбе возле дороги.
На этом же столбе висит расписание автобусов.
Если бы не он, здесь были бы просто два типовых дома, которые стоят рядом, и
просёлочная дорога между ними.
Но столб - это остановка, а остановка обозначает деревню.^^
Дом на западной стороне украшен надписью, которая была когда-то яркой:
«Добро Пожаловать». Вход заперт.^^
Дом напротив повёрнут входом в сторону от дороги. Окна зашторены. Двери закрыты.
]]
}
room {
nam = 'factory',
disp = [[Здание на горе]],
way = {'town', 'cathedral'},
dsc = [[
Вы забираетесь на склон горы.
Отсюда хорошо видна вся Жестиана.
Напротив вы видите ярко-розовый двухэтажный дом с высокой пристройкой.
Вход в пристройку открыт, а над ним растянут длинный зелёный плакат с коротким сообщением:^^
«КАЖДЫЙ СТАНЕТ ХТОНИЧЕСКОЙ ПИЩЕЙ»
]]
}
room {
nam = 'cathedral',
disp = [[Внутри здания]],
way = {'factory'},
2017-03-05 19:45:50 +02:00
enter = [[
Вы входите в чистый просторный зал.
]],
decor = [[
Здесь тихо и пахнет можжевельником.
Три ряда скамей стоят перед импровизированной трибуной.^^
2017-03-05 15:35:49 +02:00
В ряду справа сидит {lfactory-man|одинокий мужчина в комбинезоне.}
Вокруг зала ходит {lfactory-servant|мужчина в кожаной куртке} и протирает мебель от пыли.
]],
obj = {
obj {
nam = 'lfactory-man',
2017-03-05 19:45:50 +02:00
disp = 'сидячий мужчина',
exam = [[
Он одет в спортивный костюм с двумя галстуками на шее.
Рядом с ним лежит серый заплечный мешок.
Он сидит на скамье, опустив голову, погружённый в свои мысли.
]],
act = function(self)
return self.exam
end,
talk = function() walk('factory-man') end
},
obj {
nam = 'lfactory-servant',
disp = 'мужчина за работой',
2017-03-05 19:45:50 +02:00
exam = '',
act = function(self)
return self.exam
end,
talk = function() walk('factory-servant') end
}
}
}
-- пчёёёёёлы
quest_factory_man_1 = function()
return [[
Вы были на треугольной ферме за городом?
Немного на север, вдали от дороги.
Там жил старик Демидов, но он умер.
А после него остались эти.
]];
end
dlg {
2017-03-05 15:35:49 +02:00
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,
'Чем занимается ваш клуб?',
'Как обычно - собираемся раз в неделю, делимся новостями.'
};
{
'Что это за здание?',
2017-03-03 09:08:24 +02:00
function()
enable("#здание-нап")
return 'Просто дом Джексонов. Надо же где-то собираться.'
end,
};
{
always = true,
'Что означает надпись над входом?',
[[Её меняют каждую неделю, но смысл всегда одинаков. Чтобы не расслаблялись.]]
};
{
2017-03-03 09:08:24 +02:00
hidden = true,
always = true,
cond = function()
return char.talked_abandoned == true
end,
'Насчёт тех роботов…',
'Что такое?',
next = '#robots'
};
{
hidden = true,
always = true,
2017-03-03 09:08:24 +02:00
"#здание-нап",
'Напомните, а что это за здание?',
2017-03-03 09:08:24 +02:00
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 = [[
Он одет в кожаную куртку, а на шее он носит длинный розовый плащ, который свисает до колен.
]]
}