Помогите сделать движок квеста (2D, со звуком)
Привет всем.
Я делаю свой юморной квест и уже подошел к моменту написания движка. Сам я программировал пару приложений на делфи, но это было очень давно. Короче уже почти все забыл. Поэтому и нужна помощь практикующего программиста.
Игру никто не финансирует, делаю для себя и на удачу - вдруг стрельнет, поэтому много денег дать не могу (2000-4000 руб.). Хотелось бы найти программиста готового в основном делать на энтузиазме.
В качестве бонуса, в игре созданной на данном движке будет написано, что программировал такой-то (можно e-mail указать). Также можем договориться о дополнительной выплате, в случае если от игры каким-либо образом в будущем будет получена прибыль.
Если у вас есть свои соображения и предложения - напишите. Поправьте меня если что :-)
Ниже привожу первую версию ТЗ (писал сам, специфика Delphi скорей всего не соблюдена):
Код:
ТРЕБОВАНИЯ К ДВИЖКУ 2D-КВЕСТА
(редакция 1.0 от 12 августа 2012)
СРЕДА РАЗРАБОТКИ
|__ Delphi (желательно Lazarus)
|__ Желательно кроссплатформенная (Windows, Mac, и др.)
|__ На выходе исполняемое в ОС приложение (типа exe)
СИСТЕМНЫЕ ТРЕБОВАНИЯ
|__ Мышь
|__ Звуковая плата
|__ ОС (Windows обязательно, желательно Mac и др.)
ТИПЫ ДАННЫХ И ФУНКЦИИ К НИМ
|
|__ Location - локации (id, name, imagefile, walking_area, fg_start, алгоритм отображения локации)
| |__ Location_change() - вызов смены локации
| |__ Location_show() - включение отображения локации
| |__ Location_hide() - выключение отображения локации
|
|__ Area - фрагмент локации (id, id_location, name, hint, imagefile, x, y, cursor=default|arrow_left|right|top|bottom)
| |__ Area_show() - включение отображения фрагмента локации
| |__ Area_hide() - выключение отображения фрагмента локации
| |__ Area_click() - обработчик нажатия на фрагмент локации
| |__ Area_hint_show() - включение отображения всплывающей при наведении подсказки
| |__ Area_hint_hide()
|
|__ Item - предметы в игре (id, name, hint, imagefile, imagefile_icon, imagefile_face, x, y)
| |__ Item_show() - включение отображения предмета
| |__ Item_hide() - выключение отображения предмета
| |__ Item_take() - взять предмет
| |__ Item_talk() - вывод окна с лицом говорящего и текста сообщения (текст появляется буква за буквой, при нажатии текст сразу полностью рисуется)
| |__ Item_click() - обработчик нажатия на предмет
| |__ Item_hint_show() - включение отображения всплывающей при наведении подсказки
| |__ Item_hint_hide()
|
|__ Character - персонажи в игре (id, name, hint, imagefile, imagefile_face, id_location, x, y, view=left|right|top|bottom|...)
| |__ Character_show() - включение отображения персонажа
| |__ Character_hide() - выключение отображения персонажа
| |__ Character_talk() - вывод окна с лицом говорящего и текста сообщения (текст появляется буква за буквой, при нажатии текст сразу полностью рисуется)
| |__ Character_move() - определние конечной точки пути перемещения, расчета траектории движения к ней и запуск анимации движения персонажа
| |__ Character_click() - обработчик нажатия на персонажа
| |__ Character_hint_show() - включение отображения всплывающей при наведении подсказки
| |__ Character_hint_hide()
|
|__ Pocket - карман для предметов, взятых главным персонажем (id)
| |__ Pocket_show() - включение отображения панели кармана
| |__ Pocket_hide() - выключение отображения панели кармана
| |__ Pocket_item_add() - добавление предмета в конец списка взятых предметов (со скрытием предмета на локации и показом иконки предмета)
| |__ Pocket_item_delete() - удаление предмета из списка взятых предемтов (со скрытием иконки)
| |__ Pocket_item_click() - обработчик нажатия на предмет из списка (при повторном нажатии выбор снимается)
| |__ Pocket_item_select() - выбор предмета (иконка предмета заменяет указатель мыши)
| |__ Pocket_item_unselect() - снятие выбора предмета (указатель мыши становится стандартным)
| |__ Pocket_button_prev_click() - перемотка предметов в кармане
| |__ Pocket_button_next_click() - перемотка предметов в кармане
| |__ Pocket_item_hint_show() - включение отображения всплывающей при наведении подсказки
| |__ Pocket_item_hint_hide()
|
|__ Organizer - памятка для текущей игры (id_text, type)
| |__ Organizer_button_show() - включение отображения кнопки открытия памятки в модальном окне
| |__ Organizer_button_hide() - выключение отображения кнопки открытия памятки в модальном окне
| |__ Organizer_add() - добавление текстовой записи в конец списка памятки
| |__ Organizer_delete() - удаление текстовой записи из списка памятки
| |__ Organizer_type_set() - пометка записи как 1) запись-памятка 2) цель 3) выполненная цель (напротив каждой записи соответствующая иконка)
|
|__ Text - тексты (id, text)
| |__ Text_get() - получение строки текста
|
|__ Music - музыка (id, musicfile)
| |__ Music_change() - вызов смены музыки (секундное снижение громкости текущей композиции и смена на новую композицию)
| |__ Music_play() - включение проигрывания музыкальной композиции (одновременно может играть только одна композиция)
| |__ Music_stop() - выключение проигрывания музыкальной композиции
|
|__ Sound - звуки (id, soundfile)
| |__ Sound_play() - включение проигрывания звука
| |__ Sound_stop() - выключение проигрывания звука
|
|__ Savegame - сохраненная игра (бинарные или текстовые файлы с уникальными именами)
| |__ Savegame_save() - сохранить игру
| |__ Savegame_load() - загрузить игру
| |__ Savegame_list_get() - получить список всех сохраненных игр
|
|__ Animation - алгоритмы анимации (id)
| |__ Animation_play() - включение проигрывания алгоритма "ролика" анимации (указатель мыши становится в виде значка перемотки >>)
| |__ Animation_stop() - выключение проигрывания алгоритма "ролика" анимации
| |__ Animation_rewind() - перемотка к концу алгоритма "ролика" анимации
| |__ Animation_background_play() - включение проигрывания алгоритма "фоновой" анимации (указатель мыши не меняется)
| |__ Animation_background_stop() - выключение проигрывания алгоритма "фоновой" анимации
|
|__ Image - изображение (id, imagefile, id_location, x, y)
| |__ Image_show() - включение отображения изображения
| |__ Image_hide() - выключение отображения изображения
|
|__ Файлы изображений локаций (png, gif, jpg, bmp)
|__ Файлы изображений фрагменты локаций (png, gif, jpg, bmp)
|__ Файлы изображений предметов (png, gif, jpg, bmp)
|__ Файлы изображений персонажей в разных ракурсах и движении (png, gif, jpg, bmp)
|__ Файлы иконок и других изображений (png, gif, jpg, bmp)
| |__ Иконка success
| |__ Иконка denied
| |__ Иконка information
|__ Файлы музыки (mp3, wav)
|__ Файлы звуков (mp3, wav)
ГРАФИЧЕСКИЙ ИНТЕРФЕЙС
|
|__ Стартовое окно
| |__ Отображение заставочного изображения на фоне
| |__ Отображение графических кнопок (при наведении подсветка): Начать, Загрузить, Выйти
| |__ Проигрывание музыкальной композиции (с повторением)
|
|__ Основное окно
| |__ Отображение изображения локации на фоне
| |__ Отображение изображений (фрагментов локации, персонажей, предметов)
| |__ Проигрывание музыкальной композиции (с повторением)
| |__ Отображение главной панели управления
| |__ Отображение панели кармана предметов (рамка, контейнеры для предметов, иконки предметов, кнопки перемотки: Предыдущий, Следующий)
| |__ Отображение графических кнопок (при наведении подсветка): Сохранить, Загрузить, Настройки, Выйти, О программе, Памятка
| |__ Отображение счетчика набранных очков в игре (трехзначный)
| |__ Отображение текстового индикатора времени суток (День, Ночь)
|
|__ Модальные окна
| |__ Сохранение игры (список, поле имени, кнопки Сохранить, Отменить)
| |__ Загрузка игры (список, кнопки Загрузить, Отменить)
| |__ Настройки игры (громкость музыки, громкость звука, скорость анимации, кнопки Сохранить, Отменить)
| |__ Памятка (список с иконками, кнопка Закрыть)
| |__ О программе (версия программы, копирайты, лицензионное соглашение)
|
|__ При подведении указателя мыши к областям экрана, имеющим текстовое описание (hint), выводить всплывающую подсказку
|
|__ По нажатию правой кнопки мыши при выбранном предмете, выбор сбрасывается
ПРИМЕЧАНИЕ:
- в требованиях пока никак не отражено что графика должна поддерживать слои (задний, передний план) и исходя из этого отображаться
- все файлы изображений должны быть недоступны для прямого просмотра из файловой системы (чтобы нельзя было увидеть все ролики не пройдя игру)

|