| Разработка и ромхакинг > Разработка игр |
| [OpenBOR] Double Dragon Mini |
| (1/2) > >> |
| MKLIUKANG1:
Double Dragon Mini Движок: OpenBOR v.4 Разработчики: BVD Game Дата релиза: ??? 👊 Всем привет! Хочу поделиться первыми успехами в разработке своего нового проекта на движке OpenBOR v.4. Текущее рабочее название — Double Dragon Mini (в будущем оно может измениться).Визуальный стиль проекта вдохновлен спрайтами из культовой классики Battletoads & Double Dragon (SNES) и полностью базируется на них. В этом видео я демонстрирую стартовый уровень Rumble City, а также некоторые ключевые механики геймплея. 🕹️ Что уже реализовано на данный момент:Боевая система Билли Ли: Базовые движения, бег, прыжки, мощный удар с разбега и классические комбинации ударов руками.Уникальные добивания:Для громилы Guido — сокрушительный удар ногой с разворота!Для опасной Linda — брутальный захват за волосы в стиле олдскульных частей серии.Интерактивное окружение (Фишка уровня): На потолке в Rumble City висят люстры. Билли может запрыгивать и виснуть на них, атаковать прямо на весу, а если он нанесет сильный удар, люстра обрывается и падает на землю, заставляя игрока быстро совершить тактический отскок/уклонение! 🔥 Проект находится в активной разработке. Впереди еще много работы над балансом, новыми врагами, наборами приемов и уровнями. 👇 Пишите в комментариях, что вы думаете о механике с люстрами и добиваниях! Буду очень рад любой обратной связи. |
| MKLIUKANG1:
DevLog: Магия примитивов и возвращение Джимми В этом обновлении я сосредоточился на визуальной части и расширении ростера. Джимми Ли готов к бою: Полностью настроена анимация и управление для второго игрока. Теперь можно проходить Rumble City вдвоем. Освещение через drawbox: Чтобы не нагружать движок тяжелыми спрайтами, я использовал отрисовку примитивами. Световой конус строится в цикле: программа нарезает десятки горизонтальных полосок drawbox, динамически меняя их ширину. Это позволило создать эффект «объемного» света, который расширяется от плафона к полу. Добавлена математика мерцания через rand(), что придает ретро-шарм. Полировка Chandelier Grab: Исправил баги с коллизиями. Теперь каждый игрок может занимать свою люстру независимо друг от друга, а при разрушении объекта скрипт мгновенно прекращает отрисовку светового конуса. |
| MKLIUKANG1:
DevLog: Дневник разработки Double Dragon Mini — Живой свет и случайные добивания! 🐉💡Всем привет! Сегодня я сосредоточился на визуальных эффектах, атмосфере уровней и зрелищности битв с боссами. Вот что полностью готово и добавлено в свежий билд: 💡 «Живой» свет для люстрПолностью объединил вертикальный конус луча и овальное световое пятно на полу в единый цикл отрисовки.Синхронность: Благодаря общему расчету функции rand(), луч и овал на полу мерцают абсолютно синхронно, создавая потрясающую и живую ретро-атмосферу.Интерактивность: Свет намертво привязан к состоянию объекта. Как только люстру сбивают, скрипт мгновенно прекращает рендеринг, и свет гаснет вместе с ней. 👊 Система случайных комбо-финишеров на боссеНастроил onpainscript для Гвидо-Босса под особенности движка OpenBoR v4.0.Логика работы: С помощью системной переменной lasthit_attacker скрипт перехватывает каждый точный удар Билли или Джимми.Вариативность: Теперь при попадании по боссу игроки случайным образом выдают разные мощные приемы — апперкот, удар ногой в прыжке, удар с разворота или мощный локоть! Это делает затяжные битвы с боссами гораздо интереснее, динамичнее и непредсказуемее. 🧠 Эксперименты с ИИ (В процессе)Также сегодня потратил немало времени на написание кастомного скрипта поведения для искусственного интеллекта врагов. Хотел сделать тактическое окружение в кооперативе, но в коде начала получаться каша — алгоритмы поиска путей стали конфликтовать друг с другом. Пока отложил эту задачу, чтобы перевести дух и вернуться к ней позже со свежей головой. |
| MKLIUKANG1:
Всем привет! Свежий апдейт механики взаимодействия главных героев с врагами. На этот раз прокачал боевой арсенал братьев Ли (Билли и Джимми) в схватке против Гвидо. Список изменений и нововведений: Кастомное меню: Освежил визуальный стиль игрового интерфейса. Братья теперь реагируют на уровень здоровья Guido. У Гвидо много HP: Игрок берет его в плотный захват для продолжения комбо. У Гвидо мало HP: Срабатывает эффектное и быстрое добивание с ноги. Новый противник: Начал интеграцию Shadow Boss. На данном этапе он умеет передвигаться и выполнять несколько базовых атак. |
| Smoke_John:
Идея и реализация классные, у тебя здорово получается. Жаль, что графику взял не nes варианта, чтобы прямо и механики под nes вариант реализованы вышли, но с другой строны почему бы и не ремейкнуть, всё равно, насколько вижу это лучше, чем просто драконы сороподобные, ближе к оригиналу они как ни крути, тем более подправив можно будет проще и оригинальных повторить. |
| MKLIUKANG1:
--- Цитата: Smoke_John от 05 Июня 2026, 20:49:46 ---Идея и реализация классные, у тебя здорово получается. Жаль, что графику взял не nes варианта, чтобы прямо и механики под nes вариант реализованы вышли, но с другой строны почему бы и не ремейкнуть, всё равно, насколько вижу это лучше, чем просто драконы сороподобные, ближе к оригиналу они как ни крути, тем более подправив можно будет проще и оригинальных повторить. --- Конец цитаты --- Спасибо! На счет графики: NES версия драконов мне не очень нравится, как нарисованы, а вот 16 битные самое то! Это будет не ремейк, а своя мини игра. Спасибо в любом случае! Добавлено позже: Double Dragon Mini [OpenBOR] — Кастомное скриптовое меню, плеер и оптимизация. Привет, комьюнити! Хочу поделиться прогрессом. Родное меню OpenBOR уже надоело и приелось, поэтому я решил полностью вырезать его и написать своё, кастомное, через текстовые скрипты. Основные фичи нового интерфейса: Интеграция системных функций: Родное меню движка полностью скрыто. При выборе "Start Game" скрипт корректно очищает память и бесшовно перекидывает на выбор персонажей. Пункт "Options" успешно интегрирован в общую структуру меню.Секреты и Чит-коды: Реализовал честный ввод кода, который прямо в меню на лету разблокирует скрытый контент. Меню SOUNDTRACK: Полноценный встроенный аудиоплеер для прослушивания треков из игры. Сделал циклический скроллинг (показывает текущий, прошлый и будущий треки), мигающие стрелочки и плавное раскрытие окошка из центра экрана. Меню BVD_TEAM: Интерактивные титры нашей команды. Под каждого участника выделена своя инфо-карточка. Рамки и неоновая подсветка динамически меняют свой цвет на лету при перелистывании страниц. Техническая оптимизация (что пришлось исправить):Победил исчезновение спрайтов: Изначально из-за связки loadsprite + free каждый кадр происходила дикая утечка памяти — при перезаходе в меню картинки пропадали и экран становился черным. Переписал логику на кэширование через глобальные переменные (getglobalvar). Теперь движок загружает PNG в ОЗУ один раз. Работает железно стабильно. Поправил Z-Index: Четко разграничил графические слои от задника до спрайтов и шрифтов, чтобы графика не перекрывала текст. Починил таймеры: Исправил баг с занулением state_ticks, благодаря чему фоновая музыка корректно стартует один раз при входе на экраны. Оценивайте визуал, буду рад фидбеку! |
| мфыфыы:
Круто! Особенно вот так взять и переписать меню опенбора, это отличная идея!) |
| Smoke_John:
А я где-то читал, что невозможно в боре меню заменить стандартное) |
| MKLIUKANG1:
Добавлено позже: --- Цитата: Smoke_John от 12 Июня 2026, 23:19:23 ---А я где-то читал, что невозможно в боре меню заменить стандартное) --- Конец цитаты --- Через скрипты можно обойти эти ограничения |
| MKLIUKANG1:
|
| Smoke_John:
Здорово, что ты видосы такие пилишь, кто-то может что-то полезное для себя почерпнуть помимо ознакомления с результатом. |
| Lucky7:
|
| Lucky7:
Новые спрайты и их референсы |
| MKLIUKANG1:
|
| Lucky7:
Новый дизайн худа Добавлено 5 июля 2026 года: Новый дизайн выбора игрока |
| Street Fighter:
--- Цитата: Lucky7 от 04 Июля 2026, 02:56:48 ---Новые спрайты и их референсы --- Конец цитаты --- Очень интересно, побольше таких сообщений кидайте :thumbup:! |
| Lucky7:
--- Цитата: Street Fighter от 05 Июля 2026, 12:46:09 ---Очень интересно, побольше таких сообщений кидайте :thumbup:! --- Конец цитаты --- хорошо спасибо :thumbup: |
| MKLIUKANG1:
Добавлено позже: Неправильный youtube url https://www.youtube.com/live/4qBmj9vyV5g?si=S0rh4JAEL4ugSOg- Правки в меню и опций |
| MKLIUKANG1:
https://www.youtube.com/live/4qBmj9vyV5g?si=ZcmjerzZFbL3ahZ9 Добавлено позже: Расположил кнопки навигаций для меню |
| MKLIUKANG1:
Система лестниц для OpenBOR В стандартном OpenBOR нет встроенной поддержки лазания по лестницам, как в классических beat'em up. Однако с помощью скриптов можно реализовать полноценную механику, позволяющую игроку хвататься за лестницу, двигаться вверх/вниз (и даже влево/вправо), а также спрыгивать в любой момент. Я разработал компактную, готовую к использованию систему лестниц, которая: - Работает без указателей и оператора & — полностью совместима с OpenBOR. - Поддерживает до 5 лестниц на уровень (можно легко расширить). - Имеет два типа лестниц: вертикальные (только движение по Y) и HV (движение по X и Y). - Настраивается прямо из файла уровня через глобальные переменные. - Не мешает другим скриптам и не создаёт утечек памяти. Архитектура системы Хранение параметров лестниц Все параметры лестниц хранятся в глобальных переменных. Для каждой лестницы сохраняются координаты центра (x, y, z), ширина зоны захвата (w), высота (h) и тип (type). Максимальное количество — 5, но легко можно добавить новые. float ladd_x0, ladd_y0, ladd_z0, ladd_w0, ladd_h0; int ladd_type0; float ladd_x1, ladd_y1, ladd_z1, ladd_w1, ladd_h1; int ladd_type1; // ... до ladd_x4 int ladd_count = 0; Основные функции add_ladder(x, y, z, w, h, type) – добавляет лестницу в список. init_ladders() – считывает глобальные переменные уровня (ladder_count, ladder0_x, …) и заполняет внутренний список. set_current_ladder(idx) – заполняет вспомогательные переменные cur_lx, cur_ly, ... параметрами лестницы с индексом idx. Это сделано для того, чтобы избежать указателей. process_ladders() – главная функция, которую нужно вызывать в update.c внутри блока уровня. Она обрабатывает всех игроков (0 и 1), проверяет нахождение в зоне лестницы, управляет захватом, движением и отпусканием. Как работает обработка При смене уровня (current_level не равен предыдущему) вызывается init_ladders(), которая загружает параметры из глобальных переменных. 1 - Для каждого игрока проверяется, находится ли он уже на лестнице (по переменной ladder_idx). 2 - Если игрок на лестнице — обрабатывается движение (вверх/вниз, для HV-типа ещё и влево/вправо), проверяется выход за границы (верх/низ), и при нажатии прыжка — спрыгивание. 3 - Если игрок не на лестнице — проверяется, не находится ли он внутри зоны захвата какой-либо лестницы. Если да и нажата кнопка «Вверх» — происходит захват. Пример для одной вертикальной лестницы: updatescript @script void main() { setglobalvar("ladder_count", 1); setglobalvar("ladder0_x", 100); setglobalvar("ladder0_y", 95); setglobalvar("ladder0_z", 0); setglobalvar("ladder0_w", 40); setglobalvar("ladder0_h", 190); setglobalvar("ladder0_type", 0); } @end_script Параметры: x, y, z – центр лестницы. w – ширина зоны захвата по оси X. h – высота лестницы по оси Y. type – 0 (вертикальная, только движение вверх/вниз) или 1 (HV, дополнительно движение влево/вправо). Для добавления второй лестницы использую переменные ladder1_x, ladder1_y и т.д. Вообщем работы над ней предстоит много ещё. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |