Разработка и ромхакинг > Разработка игр
[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 и т.д.

Вообщем работы над ней предстоит много ещё.
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии