Начальная ревизия.

Начат первый акт, пока что надо только добавить все предметы.
This commit is contained in:
oreolek 2010-05-11 17:28:36 +07:00
commit e1d4fccda5
6 changed files with 354 additions and 0 deletions

72
debug.lua Normal file
View 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
View file

@ -0,0 +1 @@

6
functions.lua Normal file
View file

@ -0,0 +1,6 @@
function comment_time()--Волшебник комментирует, как быстро Джек решил загадку.
return '';
end
function comment_things()--Волшебник комментирует, что собрал Джек за отведённое время.
return '';
end

71
main.lua Normal file
View 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
View 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
View 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')},
}