From e1d4fccda5ae14d92d80f447125fd696b4096e6f Mon Sep 17 00:00:00 2001 From: oreolek <> Date: Tue, 11 May 2010 17:28:36 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B5=D0=B2=D0=B8=D0=B7=D0=B8=D1=8F.=20?= =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D1=82=20=D0=BF=D0=B5=D1=80=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=B0=D0=BA=D1=82,=20=D0=BF=D0=BE=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE=20=D0=BD=D0=B0=D0=B4=D0=BE=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B2=D1=81=D0=B5=20=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debug.lua | 72 ++++++++++++++++++++++++++++++++ dialogues.lua | 1 + functions.lua | 6 +++ main.lua | 71 +++++++++++++++++++++++++++++++ objects.lua | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++ rooms.lua | 91 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 354 insertions(+) create mode 100644 debug.lua create mode 100644 dialogues.lua create mode 100644 functions.lua create mode 100644 main.lua create mode 100644 objects.lua create mode 100644 rooms.lua diff --git a/debug.lua b/debug.lua new file mode 100644 index 0000000..e413b6a --- /dev/null +++ b/debug.lua @@ -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'); diff --git a/dialogues.lua b/dialogues.lua new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dialogues.lua @@ -0,0 +1 @@ + diff --git a/functions.lua b/functions.lua new file mode 100644 index 0000000..c072dee --- /dev/null +++ b/functions.lua @@ -0,0 +1,6 @@ +function comment_time()--Волшебник комментирует, как быстро Джек решил загадку. + return ''; +end +function comment_things()--Волшебник комментирует, что собрал Джек за отведённое время. + return ''; +end diff --git a/main.lua b/main.lua new file mode 100644 index 0000000..e4331f3 --- /dev/null +++ b/main.lua @@ -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"); diff --git a/objects.lua b/objects.lua new file mode 100644 index 0000000..7d9ab54 --- /dev/null +++ b/objects.lua @@ -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 = 'В маленьком глиняном горшочке, доверху заполненном водой, лежит топор. Наверное, это будущая каша.', +} diff --git a/rooms.lua b/rooms.lua new file mode 100644 index 0000000..a4aee3f --- /dev/null +++ b/rooms.lua @@ -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')}, +}