Initial commit.
This commit is contained in:
commit
b01676127e
2
README.md
Normal file
2
README.md
Normal 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
BIN
approach.it
Normal file
Binary file not shown.
BIN
bardtale.xm
Normal file
BIN
bardtale.xm
Normal file
Binary file not shown.
199
main.lua
Normal file
199
main.lua
Normal 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
67
objects.lua
Normal 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
summer.jpg
Normal file
BIN
summer.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 539 KiB |
BIN
winter_dusk_by_raoul_pop.jpg
Normal file
BIN
winter_dusk_by_raoul_pop.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 184 KiB |
Reference in a new issue