1
0
Fork 0

Initial commit.

This commit is contained in:
Alexander Yakovlev 2011-08-22 14:20:09 +07:00
commit b01676127e
11 changed files with 269 additions and 0 deletions

BIN
1p.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

2
README.md Normal file
View file

@ -0,0 +1,2 @@
A short introduction to Steed game engine.
Steed game engine is a fork of INSTEAD.

BIN
approach.it Normal file

Binary file not shown.

BIN
bardtale.xm Normal file

Binary file not shown.

199
main.lua Normal file
View file

@ -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 [[Предметы в вашем инвентаре находятся всегда с вами. Чтобы осмотреть их, достаточно дважды щёлкнуть на названии предмета. Если вы предпочитаете управление с клавиатуры, вы можете нажать <<Tab>>, чтобы переключиться на панель инвентаря, выбрать нужный предмет стрелками курсора и нажать <<Ввод>> (Enter) дважды. Чтобы вернуться к описанию сцены, нажмите <<Tab>> ещё раз.^^
Попробуйте опустить монеты в автомат. Для этого щёлкните сначала на монете, а потом -- на автомате.]] 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 <game.lua> [encoded.lua] - закодировать исходный текст lua (используйте doencfile для загрузки такого файла);^
-mode [ШИРИНАxВЫСОТА] - установить разрешение.
]],
obj = { vway('keys', 'Посмотреть {список клавиш}.', 'help')},
};

67
objects.lua Normal file
View file

@ -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 = [[Тропинка уходит куда-то в сторону гор.]]
}

BIN
river.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

BIN
summer.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

1
theme.ini Normal file
View file

@ -0,0 +1 @@
include = steed

BIN
w-mh.it Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB