commit b01676127e47ac7a4a6d74e0a59fba65766f2456 Author: Oreolek Date: Mon Aug 22 14:20:09 2011 +0700 Initial commit. diff --git a/1p.png b/1p.png new file mode 100644 index 0000000..e10367a Binary files /dev/null and b/1p.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..ebd01ba --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +A short introduction to Steed game engine. +Steed game engine is a fork of INSTEAD. diff --git a/approach.it b/approach.it new file mode 100644 index 0000000..bff5280 Binary files /dev/null and b/approach.it differ diff --git a/bardtale.xm b/bardtale.xm new file mode 100644 index 0000000..8083da3 Binary files /dev/null and b/bardtale.xm differ diff --git a/main.lua b/main.lua new file mode 100644 index 0000000..39089fd --- /dev/null +++ b/main.lua @@ -0,0 +1,199 @@ +-- $Name:Введение$ + +instead_version "1.3.1" + +require "dash" -- '--' replace :) +require "para" -- be more "Russian" +require "quotes" +require "theme" +require "dbg" + +game.use = 'В приключенческих играх принято обдумывать поступки. Беспорядочное щёлканье по всем ссылкам и набор бессмысленных фраз ни к чему хорошему вас не приведут.'; + +set_music('bardtale.xm'); +dofile('objects.lua'); + +main = room { + nam = 'Добро пожаловать', + act = function() -- only one vobj, no check, just goto + goto('act1r1'); + end, + dsc = txtc("Эта игра поможет вам ориентироваться в Steed.")..[[^^ + Steed -- это движок для создания игр. Он основан на коде другого движка, INSTEAD. По сравнению с INSTEAD Steed предлагает несколько новых возможностей; все игры от INSTEAD запускаются здесь без изменений.^^ + Прежде всего надо сказать, что возможности Steed уходят далеко за пределы того, что будет показано в этой игре. Кроме текстовых приключений (управляемых мышкой или командами), на нём возможно создавать аркады, головоломки и даже чисто графические квесты.^^ + Каждая игра состоит из сцен. Сейчас вы читаете описание такой сцены. ^^ + Слова <<Добро пожаловать>>, подсвеченные красным цветом -- это заголовок сцены. Каждая сцена должна иметь заголовок, но не обязательно должна показывать его. ^^ + Сцена может содержать несколько объектов, с которыми может действовать игрок. В этой сцене находится только один объект -- ссылка <<Дальше>>. Нажмите на неё, чтобы продолжить.]], + obj = { + vobj('continue', '{Дальше}'), + }, +}; + +act1r1 = room { + nam = 'Действие первое. Гипертекстовое приключение.', + enter = function() + lifeon('act1r1'); + theme.gfx.bg("summer.jpg"); + theme.inv.geom(1100, 10, 180, 730); + theme.win.geom(60, 10, 1000, 730); + theme.inv.color(nil, "#800000", "#800000"); + end, + life = function() + if (arcade._spent == true) then + lifeoff('act1r1'); + return (act1r1.obj:add(vway('continue', [[^^Это было просто, не правда ли? Но это была всего лишь одна сцена. Сейчас вы узнаете, как вести себя в более просторном окружении. Пожалуйста, пройдите {дальше.}]], 'act1r2'))); + end; + if have('ruble') and have('penny') then return [[Предметы в вашем инвентаре находятся всегда с вами. Чтобы осмотреть их, достаточно дважды щёлкнуть на названии предмета. Если вы предпочитаете управление с клавиатуры, вы можете нажать <>, чтобы переключиться на панель инвентаря, выбрать нужный предмет стрелками курсора и нажать <<Ввод>> (Enter) дважды. Чтобы вернуться к описанию сцены, нажмите <> ещё раз.^^ + Попробуйте опустить монеты в автомат. Для этого щёлкните сначала на монете, а потом -- на автомате.]] end; + end, + dsc = [[Сейчас вы находитесь в имитации приключенческой игры. Для наглядности вам будет показано несколько примеров игр. Вы оцените их управление и получите понятие о возможностях движка.^^ + Объекты в сцене -- это чаще всего какие-нибудь предметы. В этой сцене находится три предмета. Два из них вы можете положить в свой инвентарь. Попробуйте щёлкнуть по всем ссылкам.]], + obj = { 'penny', 'ruble', 'arcade'}, +}; + +act1r2 = room{ + nam = 'Действие первое, сцена вторая.', + enter = function() + inv():zap(); + set_music('w-mh.it'); + return [[Сейчас вам предстоит самостоятельно найти выход из этой мини-игры. Чтобы перейти в соседнюю комнату, используйте ссылки перехода, расположенные под заголовком сцены.^^ + Когда вы совершаете какое-то действие в сцене, её описание исчезает. Если вы хотите ещё раз прочитать описание сцены, нажмите F5 или щёлкните на заголовке, выделенным красным цветом.]]; + end, + dsc = [[Поле. Ржаное поле. Дует лёгкий ветерок. Ярко светит тёплое солнце. В голубом небе поют птицы.]], + obj = {'obj_hill','mountains','obj_river'}, + way = {'hill','river'} +} + +hill = room{ + nam = 'Холм', + enter = code[[lifeon('hill')]], + exit = code[[lifeoff('hill')]], + life = function() + local reaction = { + 'У ваших ног пробегает полевая мышка. Вы осторожно переступаете, чтобы не задавить её.', + 'На берёзу садится воробей и заинтересованно начинает разглядывать вас, крутя головой. Прежде чем вы делаете малейшее движение, он снимается с ветки и улетает прочь.'}; + if (rnd(5) > 2) then return reaction[rnd(#reaction)]; end; + end, + dsc = [[]], + obj = {'tree','boy'}, + way = {'field'}, +} + +river = room{ + nam = 'Река', + pic = 'river.jpg', + dsc = [[Неторопливо течёт река мимо ржаного поля. В зелёной прохладной воде отражается голубое небо.]], + way = {'field'} +} + +field = room{ + nam = 'Поле', + enter = code[[lifeon('field')]], + exit = code[[lifeoff('field')]], + life = function() + local reaction = {'Над вами пролетает стриж.','Ветер доносит до вас тихие звуки флейты.'}; + if (rnd(5) > 2) then return reaction[rnd(#reaction)]; end; + end, + dsc = [[Поле. Ржаное поле. Дует лёгкий ветерок. Ярко светит тёплое солнце. В голубом небе поют птицы.]], + obj = {'obj_hill','mountains','obj_river'}, + way = {'hill','river'} +} + +dlg_boy = dlg{ + nam = 'Диалог с мальчиком', + dsc = [[На вас выжидающе смотрит маленький блондинчик в клетчатой рубашке и простых коричневых шортах. Он лежит в тени и играется с флейтой.]], + obj = { + phr('Привет. Как ты сюда попал?',[[--Привет. Как ты сюда попал?^^--А вот она -- тропинка.]],code[[hill.obj:add('obj_wayout');hill.way:add('out');]]), + _phr('Слушай, а что это за венок висит?', [[--Слушай, а что это за венок висит?^^--Не трогай. Висит и висит, тебе-то что?]]) + } +} + +out = room{ + nam = 'По тропинке', + dsc = [[Вы благополучно выходите из полей.]], + enter = code[[set_music('approach.it');]], + act = function() + goto('act2'); + end, + obj = {vobj('continue', '{Продолжить}'),} +} + +act2 = room { + nam = 'Действие второе. Текстовое приключение.', + enter = function() + theme.gfx.bg("winter_dusk_by_raoul_pop.jpg"); + theme.inv.reset(); + theme.win.reset(); + me().panel:add 'parser'; + --theme.win.color("#ffd0c0", "#a060f0", "#a060f0"); + end, + dsc = [[Чтобы не превращать короткое введение в долгую прогулку на несколько часов, это действие было сокращено до минимума.^^ +Здесь вам предстоит ознакомиться с управлением в обычном текстовом квесте. В классических текстовых приключениях вы должны набирать команды на клавиатуре, чтобы взаимодействовать с игрой. Здесь нет ссылок.^^ +Для простоты это поле принимает только одну команду -- <<Продолжить>>. Наберите команду, нажмите <<ВВОД>> (или Enter) и игра отреагирует на то, что вы набрали.^^ +Эта памятка не исчезнет при выполнении любого действия, как в предыдущих сценах.^^ +Чтобы вызвать меню Steed, нажмите на кнопке меню (в этой игре она выглядит как силуэт лошади). В меню вам доступны многие функции управления играми, например, можно сохранить игру и позже -- вернуться к ней.]], + next = code [[ goto 'act3' ]], + obj = {parser} +}; + +act3 = room { + nam = 'Действие третье. Мини-игра.', + enter = function() + --theme.gfx.bg("winter_dusk_by_raoul_pop.jpg"); + theme.inv.reset(); + theme.win.reset(); + --theme.win.color("#ffd0c0", "#a060f0", "#a060f0"); + end, + dsc = [[Здесь будет Очень Простая Мини-Игра как пример того, что можно сделать на Steed.]], +}; + +help = room { + nam = 'Список клавиш', + dsc = [[ + Esc - Вызов меню;^ + Alt+Q - Выход;^ + Alt+Enter - Полноэкранный/оконный режим;^ + F5 - Обновление сцены;^ + Пробел/Backspace - Прокрутка описания сцены;^ + Tab/Shift+Tab - Переключение между активными зонами;^ + PgUp/PgDn - Прокрутка активной зоны;^ + Стрелки влево/вправо - Выбор ссылок в активной зоне;^ + F2 - Сохранение игры;^ + F3 - Загрузка игры;^ + F8 - Быстрое сохранение игры;^ + F9 - Быстрая загрузка игры.^^ + + Клавиши, поведение которых зависит от выбранного режима клавиатуры + (см. Меню -> Настройки -> Режим клавиатуры):^^ + + Стрелки вверх/вниз:^ +  - В режиме "Прокрутка": прокрутка активной зоны;^ +  - В режиме "Ссылки": выбор ссылок в активной зоне;^ +  - В режиме "Умный": одновременно выбор ссылок и прокрутка активной зоны.^^ + + Стрелки вверх/вниз + Shift или Alt:^ +  - В режиме "Прокрутка": выбор ссылок в активной зоне;^ +  - В режиме "Ссылки": прокрутка активной зоны;^ +  - В режиме "Умный": прокрутка активной зоны. + ]], + obj = { vway('cmdline', 'Посмотреть {параметры командной строки}.', 'help2')}, +}; + +help2 = room { + nam = 'Параметры командной строки', + dsc = [[ + -nosound - запуск без звука;^ + -alsa - принудительное использование alsa (только для Linux);^ + -debug - отладочный режим для разработчика игр;^ + -theme <тема> - выбор темы;^ + -game <игра> - выбор игры;^ + -themespath <путь> - дополнительный путь к темам;^ + -gamespath <путь> - дополнительный путь к играм;^ + -windows - оконный режим;^ + -fullscreen - полноэкранный режим;^ + -noautosave - отключить автосохранение/автозагрузку;^ + -encode [encoded.lua] - закодировать исходный текст lua (используйте doencfile для загрузки такого файла);^ + -mode [ШИРИНАxВЫСОТА] - установить разрешение. + ]], + obj = { vway('keys', 'Посмотреть {список клавиш}.', 'help')}, +}; diff --git a/objects.lua b/objects.lua new file mode 100644 index 0000000..ca0d5b4 --- /dev/null +++ b/objects.lua @@ -0,0 +1,67 @@ +penny = obj { + nam = 'пенни', + dsc = 'На полу валяется пыльная медная {монета.}', + tak = 'Вы поднимаете монету и читаете надпись: <<Один пенни>>', + inv = img('1p.png')..' Медная монета в один пенни.' +} +ruble = obj { + nam = 'рубль', + dsc = 'На панели лежит кем-то забытый {рубль.}', + tak = 'Вы поднимаете монету и читаете надпись: <<Один рубль>>', + inv = 'Никелевый российский рубль. С оборота монеты на вас смотрят два глаза с двух голов орла.' +} +arcade = obj { + nam = 'игровой автомат', + dsc = 'Перед вами стоит игровой {автомат.} На его панели есть узкая щель для монет.', + act = '<<Космические пришельцы из космоса>>. Автомат бы, несомненно, украсил ваш карман, но он слишком велик чтобы поместиться туда.', + _spent = false, + used = function(this, that) + if (that == ruble) then + arcade._spent = true; + inv():del('ruble'); + return [[Рубль исчезает в автомате. Автомат не оживает.]] + end + if (that == penny) then + inv():del('penny'); + return [[Пенни проваливается в щель для монет. Игровой автомат не спешит отреагировать.]] + end + end +} +obj_hill = obj{ + nam = 'холм (объект)', + dsc = [[На {холме} можно различить одинокую берёзу.]], + act = [[Посреди поля возвышается небольшой холмик, на котором растёт одинокая берёза. Она кажется такой маленькой.. наверное, это из-за одиночества.]] +} +mountains = obj{ + nam = 'горы', + dsc = [[Вдалеке стоят высокие синие {горы}.]], + act = [[Синие горы растут на горизонте. Где-то за ними, в гигантской колыбели, отдыхает по ночам солнце.]] +} +obj_river = obj{ + nam = 'река', + dsc = [[Невдалеке медленно течёт {река}.]], + act = [[Отсюда трудно увидеть реку, но хорошо слышен шум воды.]] +} +tree = obj{ + nam = 'берёза', + dsc = [[Над полем возвышается невысокий холм, на котором растёт одинокая {берёза.} ]], + act = function() + dlg_boy:pon(2); + return [[Берёза уходит в небо так высоко, что кажется, будто солнце отдыхает на её ветвях. В тени прохладно и спокойно. Изредка дунет ветер, и ветки негромко зашуршат, тряхнув листьями.^^ + На одной из нижних веток висит венок из одуванчиков.]] + end, +} +boy = obj{ + nam = 'мальчик', + dsc = [[В тени берёзы сидит {мальчик} и держит в руках флейту; верно, он играл на ней до вашего появления.]], + act = function() + if dlg_boy:empty() then return [[Вам не о чем заговорить с мальчиком.]] end; + goto('dlg_boy'); + end, +} + +obj_wayout = obj{ + nam = 'тропинка', + dsc = [[С холма идёт незаметная {тропинка}.]], + act = [[Тропинка уходит куда-то в сторону гор.]] +} \ No newline at end of file diff --git a/river.jpg b/river.jpg new file mode 100644 index 0000000..cd49da9 Binary files /dev/null and b/river.jpg differ diff --git a/summer.jpg b/summer.jpg new file mode 100644 index 0000000..903083a Binary files /dev/null and b/summer.jpg differ diff --git a/theme.ini b/theme.ini new file mode 100644 index 0000000..7ae81a4 --- /dev/null +++ b/theme.ini @@ -0,0 +1 @@ +include = steed diff --git a/w-mh.it b/w-mh.it new file mode 100644 index 0000000..7a9712c Binary files /dev/null and b/w-mh.it differ diff --git a/winter_dusk_by_raoul_pop.jpg b/winter_dusk_by_raoul_pop.jpg new file mode 100644 index 0000000..ffc6686 Binary files /dev/null and b/winter_dusk_by_raoul_pop.jpg differ