Начальная ревизия.
Начат первый акт, пока что надо только добавить все предметы.
This commit is contained in:
commit
e1d4fccda5
72
debug.lua
Normal file
72
debug.lua
Normal file
|
@ -0,0 +1,72 @@
|
|||
choose_location = dlg {
|
||||
debug = true,
|
||||
nam = 'Выберите локацию',
|
||||
dsc = 'Нажмите на имя локации, в которую хотите переместиться.',
|
||||
gen = function(s)
|
||||
local k,v
|
||||
objs(s):zap();
|
||||
for k,v in pairs(_G) do
|
||||
if isRoom(v) and not v.debug then
|
||||
local n = call(v, 'nam');
|
||||
put(phr(n, '', [[return goto("]]..k..[[")]]), s);
|
||||
end
|
||||
end
|
||||
put (phr('Назад','','back()'), s)
|
||||
end
|
||||
}
|
||||
|
||||
choose_object = dlg {
|
||||
debug = true,
|
||||
nam = 'Выберите объект',
|
||||
dsc = 'Нажмите на имя объекта, который вы хотите взять.',
|
||||
gen = function(s)
|
||||
local k,v
|
||||
objs(s):zap();
|
||||
for k,v in pairs(_G) do
|
||||
if isObject(v) and not isRoom(v) and not isPlayer(v) and not v.debug and not have(v) then
|
||||
local n = call(v, 'nam');
|
||||
put(phr(n, '', [[return take("]]..k..[[")]]), s);
|
||||
end
|
||||
end
|
||||
put (phr('Назад','','back()'), s)
|
||||
end
|
||||
}
|
||||
|
||||
drop_object = dlg {
|
||||
debug = true,
|
||||
nam = 'Выберите объект',
|
||||
dsc = 'Нажмите на имя объекта, который вы хотите добавить в текущую сцену.',
|
||||
gen = function(s)
|
||||
local k,v
|
||||
objs(s):zap();
|
||||
for k,v in pairs(_G) do
|
||||
if isObject(v) and not isRoom(v) and not isPlayer(v) and not v.debug and have(v) then
|
||||
local n = call(v, 'nam');
|
||||
put (phr(k,'','drop("'..k..'","'..deref(from())..'")'), s)
|
||||
end
|
||||
end
|
||||
put (phr('Назад','','back()'), s)
|
||||
end
|
||||
}
|
||||
|
||||
debug_dlg = dlg {
|
||||
debug = true,
|
||||
nam = 'Инструмент Разработчика',
|
||||
dsc = 'Выберите действие.',
|
||||
obj = {
|
||||
[1]=phr('Переход на локацию', nil ,[[pon(1); choose_location:gen(); return goto('choose_location')]]),
|
||||
[2]=phr('Взять предмет', nil , [[pon(2); choose_object:gen(); return goto('choose_object')]]),
|
||||
[3]=phr('Положить предмет', nil , [[pon(3); drop_object:gen(); return goto('drop_object')]]),
|
||||
[4]=phr('Выход', nil , [[pon(4); back()]]),
|
||||
},
|
||||
};
|
||||
|
||||
debug_tool = obj {
|
||||
debug = true,
|
||||
nam = 'отладка',
|
||||
inv = function(s)
|
||||
return goto('debug_dlg');
|
||||
end
|
||||
};
|
||||
|
||||
inv():add('debug_tool');
|
1
dialogues.lua
Normal file
1
dialogues.lua
Normal file
|
@ -0,0 +1 @@
|
|||
|
6
functions.lua
Normal file
6
functions.lua
Normal file
|
@ -0,0 +1,6 @@
|
|||
function comment_time()--Волшебник комментирует, как быстро Джек решил загадку.
|
||||
return '';
|
||||
end
|
||||
function comment_things()--Волшебник комментирует, что собрал Джек за отведённое время.
|
||||
return '';
|
||||
end
|
71
main.lua
Normal file
71
main.lua
Normal file
|
@ -0,0 +1,71 @@
|
|||
-- $Name: Жак: Начало$
|
||||
-- $Version: 0.1$
|
||||
game.act = function()
|
||||
local a = rnd(12);
|
||||
local reaction = {
|
||||
[1] = 'Нет реакции.',
|
||||
[2] = 'Нет ответа.',
|
||||
[3] = 'Ничего не происходит.',
|
||||
[4] = 'Что-то идёт не так...',
|
||||
[5] = 'Ничего не случилось. Это неспроста.',
|
||||
[6] = 'Это мираж.Лучше с ним не возиться.',
|
||||
[7] = 'Непонятно.',
|
||||
[8] = 'Лучше уйти отсюда, не обращая ни на что внимания.',
|
||||
[9] = 'Я пока лучше не буду этого делать.',
|
||||
[10] = 'По-моему, это чревато.',
|
||||
[11] = 'Зачем обращать внимание на такую ерунду?',
|
||||
[12] = 'Это ошибка в Матрице. Необходимо срочно вызвать Архитектора.',
|
||||
};
|
||||
return reaction[a];
|
||||
end;
|
||||
game.inv = function()
|
||||
local a = rnd(9);
|
||||
local reaction = {
|
||||
[1] = 'Либо я ошибся карманом, либо мне нужна какая-нибудь другая хрень.',
|
||||
[2] = 'Откуда у меня в кармане ЭТО?!',
|
||||
[3] = 'Сам не понял,что достал. Положу обратно.',
|
||||
[4] = 'Это что-то неправильное.',
|
||||
[5] = 'В моих карманах что только не залёживается...',
|
||||
[6] = 'Я не представляю, как я могу тащить ЭТО с собою.',
|
||||
[7] = 'Мне показалось или оно на меня смотрит?',
|
||||
[8] = 'Существование этого предмета у меня в кармане подвергается сомнению. Проще говоря, я не верю,что ношу его с собой.',
|
||||
[9] = 'Я бы скорее предпочёл иметь в кармане что-нибудь другое, но раз выбора нет...',
|
||||
};
|
||||
return reaction[a];
|
||||
end;
|
||||
game.forcedsc = true;
|
||||
|
||||
game.use = function()
|
||||
local a = rnd(20);
|
||||
local reaction = {
|
||||
[1] = 'По-моему, оно плохо сочетается.',
|
||||
[2] = 'Если соединить одно с другим, по-моему, не получится ничего хорошего.',
|
||||
[3] = 'Да ни за какие коврижки!',
|
||||
[4] = 'Чёрта с два.',
|
||||
[5] = 'Ну и планы у вас!',
|
||||
[6] = 'Нет, это исключено.',
|
||||
[7] = 'Ни за что!',
|
||||
[8] = 'Никогда!',
|
||||
[9] = 'Я пока лучше не буду этого делать.',
|
||||
[10] = 'По-моему, это чревато.',
|
||||
[11] = 'По-моему, это уже диагноз.',
|
||||
[12] = 'Такие мысли надо гнать. Взашей.',
|
||||
[13] = 'Может, вам ещё попрыгать после этого?',
|
||||
[14] = 'Если делать случайные вещи долго-долго, на вас не снизойдёт просветление, и не пытайтесь.',
|
||||
[15] = 'Не буду.',
|
||||
[16] = 'Не хочу.',
|
||||
[17] = 'Не понял.',
|
||||
[18] = 'Я против этого.',
|
||||
[19] = 'Точно нет.',
|
||||
[20] = 'У меня не настолько хорошее настроение.',
|
||||
};
|
||||
return reaction[a];
|
||||
end;
|
||||
pl.Points = 0;
|
||||
|
||||
game.codepage="UTF-8";
|
||||
dofile("objects.lua");
|
||||
dofile("dialogues.lua");
|
||||
dofile("functions.lua");
|
||||
dofile("rooms.lua"); --здесь находится точка входа, так что загружать последним
|
||||
dofile("debug.lua");
|
113
objects.lua
Normal file
113
objects.lua
Normal file
|
@ -0,0 +1,113 @@
|
|||
door1_obj = obj{
|
||||
nam = 'дверь 1',
|
||||
dsc = 'Здесь есть {дверь 1}, ',
|
||||
act = 'Табличка на двери гласит: "За этой дверью находится смерть."',
|
||||
}
|
||||
door2_obj = obj{
|
||||
nam = 'дверь 2',
|
||||
dsc = '{дверь 2} и ',
|
||||
act = 'Табличка на двери гласит: "Это - безопасная дверь"',
|
||||
}
|
||||
door3_obj = obj{
|
||||
nam = 'дверь 3',
|
||||
dsc = '{дверь 3}.',
|
||||
act = 'Табличка на двери гласит: "Смерть за дверью 2"',
|
||||
}
|
||||
-- === Испытание 2 ===
|
||||
cobj = function(v)
|
||||
v.use = function(this,that)
|
||||
if (here() == end_fall) then return 'Нет, вы уже пропустили свой шанс.' end;
|
||||
return call(this, 'fuse', that);
|
||||
end;
|
||||
v.used = v.use;
|
||||
return obj(v);
|
||||
end
|
||||
--Палка+верёвка+амбарный замок=цепная булава
|
||||
--Тряпка+мех с водой+лист подорожника=лечебный компресс
|
||||
--Складная лодка+палка+плащ=парусная лодка
|
||||
rope = cobj{
|
||||
nam = 'верёвка',
|
||||
inv = 'Длинная крепкая пеньковая верёвка.',
|
||||
}
|
||||
pot = cobj{
|
||||
nam = 'горшок',
|
||||
inv = 'Пустой глиняный коричневый горшочек.',
|
||||
fuse = function(this, that)
|
||||
if (that == 'waterskin') then
|
||||
inv():del('pot');
|
||||
inv():del('waterskin');
|
||||
inv():add('pot_with_water');
|
||||
return 'Вы заполняете горшок водой.';
|
||||
elseif(that == 'rope') then
|
||||
inv():del('pot');
|
||||
inv():del('rope');
|
||||
inv():add('pot_with_rope');
|
||||
return 'Вы кладёте в горшок верёвку.';
|
||||
elseif(that == 'black_powder') then
|
||||
inv():del('pot');
|
||||
inv():del('black_powder');
|
||||
inv():add('pot_with_powder');
|
||||
return 'Вы заполняете горшок чёрным порохом.';
|
||||
end;
|
||||
end,
|
||||
}
|
||||
pot_with_powder = cobj{
|
||||
nam = 'горшочек с порохом',
|
||||
inv = 'Горшок из коричневой глины, заполненный чёрным порохом. Не переворачивать.',
|
||||
fuse = function(this, that)
|
||||
if (that == 'rope') then
|
||||
inv():del('pot_with_powder');
|
||||
inv():del('rope');
|
||||
inv():add('bomb');
|
||||
return 'Вы кладёте в порох верёвку как фитиль. У вас получилась самодельная бомба.';
|
||||
end;
|
||||
end,
|
||||
}
|
||||
pot_with_rope = cobj{
|
||||
nam = 'горшок с верёвкой',
|
||||
inv = 'Горшок из коричневой глины, в котором лежит верёвка.',
|
||||
fuse = function(this, that)
|
||||
if (that == 'black_powder') then
|
||||
inv():del('pot_with_rope');
|
||||
inv():del('black_powder');
|
||||
inv():add('bomb');
|
||||
return 'Вы заполняете горшок чёрным порохом и вытаскиваете верёвку как фитиль. У вас получилась самодельная бомба.';
|
||||
end;
|
||||
end,
|
||||
}
|
||||
black_powder = cobj{
|
||||
nam = 'чёрный порох',
|
||||
inv = 'Небольшой мешочек с чёрным порохом. Хранить в сухом и холодном месте. Вблизи лучше не чихать.',
|
||||
}
|
||||
bomb = cobj{
|
||||
nam = 'бомба',
|
||||
inv = 'Горшок, доверху наполненный чёрным порохом, из которого высовывается отрезок верёвки. Настоящая самодельная бомба. Если порох будет сухим, такая сможет взорвать небольшое каменное здание.'
|
||||
}
|
||||
waterskin = cobj{
|
||||
nam = 'мех с водой',
|
||||
inv = 'Мех с водой.',
|
||||
}
|
||||
knife = cobj{
|
||||
nam = 'нож',
|
||||
inv = 'Охотничий нож с резной рукоятью.',
|
||||
}
|
||||
axe = cobj{
|
||||
nam = 'топор',
|
||||
inv = 'Большой железный топор для рубки деревьев...может быть, и для чего другого сгодится.',
|
||||
}
|
||||
pot_with_water = cobj{
|
||||
nam = 'горшок с водою',
|
||||
inv = 'Глиняный коричневый горшочек, заполненный водой.',
|
||||
fuse = function(this, that)
|
||||
if (that == 'axe') then
|
||||
inv():del('pot_with_water');
|
||||
inv():del('axe');
|
||||
inv():add('axe_porridge');
|
||||
return 'Вы кладёте в горшок топор. Часть воды выливается.';
|
||||
end;
|
||||
end,
|
||||
}
|
||||
axe_porridge = cobj{
|
||||
nam = 'каша из топора',
|
||||
inv = 'В маленьком глиняном горшочке, доверху заполненном водой, лежит топор. Наверное, это будущая каша.',
|
||||
}
|
91
rooms.lua
Normal file
91
rooms.lua
Normal file
|
@ -0,0 +1,91 @@
|
|||
main = room {
|
||||
nam = "Около 300 лет назад. Континент Рубинов.",
|
||||
dsc = [[
|
||||
Крепко сжимая верный меч, Джек прокрался по траве и подбежал к стене замка. Оглянувшись, он снял с плеча крюк, ещё раз проверил, выдержит ли узел канат на нём, и бросил крюк наверх. Тот полетел на крышу, унося за собой верёвку. Раздалось громкое "клац" и Джек понял, что свободный конец каната качается примерно в метре над его головой.^^
|
||||
|
||||
Чертыхнувшись, он разбежался, прыгнул как можно выше, схватился за верёвку и больно ударился о каменную стену. Качаясь на конце каната, он начал забираться.^^
|
||||
|
||||
Лимзогнок сидел в бархатном кресле спиной от окна. Он смотрел в огромный стеклянный шар, следя за каким-нибудь очередным несчастным.^^
|
||||
|
||||
Джек бесшумно раскрыл окно, встал на подоконник и прыгнул, занеся меч над головой...^^]]..txtem('Клетка Силы!')..
|
||||
|
||||
[[^^
|
||||
Казалось, волшебник даже не двинул пальцем. Джек обнаружил себя в ровной тесной клетке с белыми прутьями. Он попытался сломать прутья мечом - но на белых прутьях, словно созданных из лунного света, не было видно даже царапин.^^
|
||||
|
||||
Оторвавшись от просмотра, Лимзогнок встал из кресла и посмотрел на Джека. Джек почувствовал острую смесь разочарования, злобы и отчаяния. Он понял, что все усилия были напрасны.
|
||||
|
||||
"Какая ирония. Ровно на сотом месяце эксперимента на меня было совершено первое покушение." ^^
|
||||
|
||||
Джек смотрел на колдуна так, словно хотел его прожечь взглядом.
|
||||
|
||||
"Кстати о колдунах, " - гад явно читал мысли - "что бы на моём месте сделал какой-нибудь колдун? Хмм... наверное, он бы сделал тебя своим гладиатором. Представь: ты и озеро кислоты - или нет, озеро лавы! Да, и ещё хищные кондоры, и акулы, и оборотни. И я буду делать ставки, выживешь ли ты или нет. Да, этого хотят все колдуны. Они говорят,что это весело. Весело? Быть может, но это тупо. Акулы в лаве! Что может быть хуже?"^^
|
||||
|
||||
Волшебник ходил взад и вперёд по комнате, хитро поглядывая на Джека.
|
||||
|
||||
"Но с другой стороны, я не могу тебя отпустить. Ты сам пришёл ко мне, в конце концов. Наверное, это был подарок судьбы. Хорош ли он? Посмотрим..."
|
||||
|
||||
В ту же секунджу Джек выронил меч и скорчился на полу клетки от боли, разрывающей его мозг. Перед ним ничего не было: ни колду...волшебника, ни комнаты, ни замка - только боль. И единственным его желанием было прекратить её.
|
||||
|
||||
"Как хочешь."
|
||||
|
||||
Боль исчезла, и Джек снова смог видеть.
|
||||
|
||||
"Вообще-то, я разочарован. Это было всего лишь слабое воздействие, а ты уже показал себя несостоятельным. Похоже, что ты не умнее обычных людей - конечно, это довольно много для воина, но явно недостаточно для того, кто хотел убить меня в моей же спальне. Нет, так дело не пойдёт. Ты знаешь, я хочу тебе помочь. Да, я помогу тебе. Я натренирую твой мозг и сделаю тебя умнее. Для этого мы немного поиграем...]]..txtem('Сон.'),
|
||||
obj = {vway('дальше', '{Начать игру}.', 'three_doors') },
|
||||
}
|
||||
three_doors = room {
|
||||
nam = 'Светлая комната',
|
||||
enter = [[Джек проснулся в светлой комнате с каменными стенами. В его голове раздался голос:^^
|
||||
"Сообщаю тебе, что первая загадка - это детская забава. Всего одна из табличек на дверях правдива, за двумя дверями тебя ждёт смерть. Постарайся не проиграть, пожалуйста. Мне будет обидно закончить, не успев ничего начать."]],
|
||||
dsc = [[Светлая пустая комната с каменными стенами. Откуда идёт свет, вам непонятно.]],
|
||||
obj = {'door1_obj','door2_obj','door3_obj'},
|
||||
way = {vroom('Дверь 1', 'falling'),'door2_room','door3_room'}
|
||||
}
|
||||
door2_room = room{
|
||||
nam = "Дверь 2",
|
||||
dsc = [[Как только Джек открывает дверь, на него набрасывается разъярённый тигр и разрывает его в клочья.^^]]..txtc(txtb('КОНЕЦ ИГРЫ')),
|
||||
obj = {vway('повтор','{Повторить?}','three_doors')},
|
||||
}
|
||||
door3_room = room{
|
||||
nam = "Дверь 3",
|
||||
dsc = [[Как только Джек открывает дверь, его поражает сноп серебряных молний.^^]]..txtc(txtb('КОНЕЦ ИГРЫ')),
|
||||
obj = {vway('повтор','{Повторить?}','three_doors')},
|
||||
}
|
||||
falling = room{
|
||||
steps = 0,
|
||||
Times = 0;--количество попыток
|
||||
nam = "В воздухе",
|
||||
enter = function()
|
||||
inv():zap();
|
||||
falling.steps = 0;
|
||||
falling.Times = falling.Times+1;
|
||||
inv():add('rope');
|
||||
inv():add('pot');
|
||||
inv():add('waterskin');
|
||||
inv():add('knife');
|
||||
inv():add('axe');
|
||||
inv():add('black_powder');
|
||||
lifeon('falling');
|
||||
return [[Как только Джек открыл дверь, свет в комнате погас.Знакомый голос сказал:^^
|
||||
"Да, ты выбрал верно. Продолжаем игру. Второй раунд! ]]..txtem('Телепорт."');
|
||||
end,
|
||||
life = function()
|
||||
falling.steps=falling.steps+1;
|
||||
if (falling.steps == 0) then return 'Над вами - только звёзды. Они быстро удаляются.';
|
||||
elseif (falling.steps==1) then return 'Вы различаете крыши домов внизу.';
|
||||
elseif (falling.steps == 2) then return 'Вы пролетаете мимо орла.';
|
||||
elseif (falling.steps == 3) then return 'Вы видите транспаранты и плакаты на стенах города: "Песчаное королевство - наш друг и помощник в борьбе против эльфийской дряни!", "Поднимем знамя Войны за дело Мира!", "Сагиттир - наместник Звёздных Королей!"';
|
||||
elseif (falling.steps == 4) then return 'Вы можете увидеть людей, идущих по улицам.';
|
||||
elseif (falling.steps > 4) then
|
||||
ACTION_TEXT = nil;
|
||||
return goto('end_fall'),true;
|
||||
end;
|
||||
end,
|
||||
dsc = "Вы находитесь в свободном полёте. На вас быстро падает земля...или вы на неё падаете, что для вас одно и то же. Похоже, что внизу лежит какой-то большой город."
|
||||
}
|
||||
end_fall = room{
|
||||
nam = 'Земля',
|
||||
enter = function() lifeoff('falling'); end,
|
||||
dsc = txtem("Полёт Пера.")..[[^^В самый последний момент, когда до земли остаётся несколько метров, Джек останавливает полёт и начинает плавно спускаться.Голос в голове Джека возмущается: ^^]]..comment_things(),
|
||||
obj = {vway('повтор','{Повторить?}','falling')},
|
||||
}
|
Loading…
Reference in a new issue