Автор Тема: [OpenBOR] Double Dragon Mini  (Прочитано 10292 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн MKLIUKANG1

  • Пользователь
  • Сообщений: 315
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
[OpenBOR] Double Dragon Mini
« Ответ #30 : 02 Сентября 2026, 19:07:49 »
Double Dragon Mini build 27.5
Всем привет делюсь прогрессом на данный момент сделано.
- Добавлен экран копирайтов с мигающим шрифтом.
- Добавлено секретное меню Галлерея в которой нужно разблокировать Арты, что бы посмотреть.
- Добавлено в паузе меню Command LIST в которой для Билли и Джимми показываются управления с превью.
- Доработка лестниц (Ещё не закончена работа продолжается)
- Доработки с канатами, теперь можно запрыгивать на них.
и по мелочи исправления.


Оффлайн MKLIUKANG1

  • Пользователь
  • Сообщений: 315
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
[OpenBOR] Double Dragon Mini
« Ответ #31 : 06 Сентября 2026, 21:36:49 »
Double Dragon Mini b. 27.8
- Обновлён задний фон в галерей с псевдо 3D дорогой со сменой суток.
- Обновлены опций в меню и доработаны.
- System Confic добавлены опций: God Mode, Unlimited MP, Disable AI, Slow Motion и Hide HUD. Так же в эти настройки доработан задний фон.
- Билли добавлены IDLE стойки.
Добавлены мини игры Понг и Галага

Оффлайн MKLIUKANG1

  • Пользователь
  • Сообщений: 315
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
[OpenBOR] Double Dragon Mini
« Ответ #32 : 08 Сентября 2026, 15:37:41 »
Отчёт о разработке системы мини-игр для проекта Double Dragon Mini (OpenBOR)

В рамках фанатского некоммерческого проекта Double Dragon Mini на движке OpenBOR была реализована коллекция из восьми аркадных мини-игр, встроенных в главное меню. Каждая мини-игра выполнена с использованием примитивов движка (прямоугольники, линии) и работает поверх стандартного интерфейса. Активация происходит через секретные чит-коды, вводимые на титульном экране или в главном меню.

🕹️ Список мини-игр
Pong
Классический пинг-понг. Управление ракетками с клавиатуры (игрок 1 и опционально игрок 2) или против ИИ. ИИ имеет задержку и случайные ошибки, что делает игру честной. Мяч переливается цветами, есть звуки отскоков, ударов и гола.

Galaga
Вертикальный космический шутер. Враги выстроены в ряд и периодически атакуют игрока, вылетая из строя. Враги умеют стрелять. Есть уровни, жизненная система, звуки выстрелов, взрывов и попаданий.

Breakout
Разрушение кирпичей мячом. Несколько уровней, увеличивающаяся скорость мяча, разноцветные кирпичи с разной ценностью, пауза после потери жизни, звуки.

Snake
Классическая змейка. Собирайте еду, растите, избегайте стен и своего хвоста. Скорость увеличивается с ростом, есть уровни, звуки поедания и смерти.

Flappy Bird
Аркада с пролётом между трубами. Гравитация, прыжки, постепенное усложнение (скорость труб, ширина зазоров), звуки прыжка, столкновения и набора очков.

Whack-a-Mole
Бей кротов, появляющихся из нор. Курсор перемещается между четырьмя норами. Ограниченное время, жизни, уровни, звуки попаданий и появлений.

Dodge the Falling Objects
Уклоняйтесь от падающих предметов. Постепенное увеличение скорости и частоты появления, неуязвимость после попадания, мигание игрока, звуки.

Tetris
Полноценный тетрис с семью стандартными фигурами, поворотами, удалением линий, подсчётом очков и уровней. Превью следующей фигуры, случайная генерация без повторов подряд.

🔐 Активация мини-игр
Каждая игра запускается секретным кодом, который нужно ввести на титульном экране или в главном меню
Пример:
Pong   ← ← → → ↑ ↑ ↓ ↓ ← ← → → ↑ ↑ ↓ ↓
Breakout   ← ← ↑ ↑ → → ↓ ↓


Кроме того, существует общий список мини-игр, который открывается кодом:
В этом меню можно листать игры стрелками ← → и запускать выбранную игру кнопкой Attack.

⚙️ Технические особенности
Все мини-игры написаны на скриптовом языке OpenBOR и интегрированы в главное меню игры.

Графика отрисовывается процедурно с помощью drawbox, drawline, drawstring. Не используются внешние спрайты (кроме кнопки Special для подсказок).

Для хранения состояния используются глобальные переменные, что позволяет корректно работать в цикле обновления движка.

Сложность игр сбалансирована: начальные уровни лёгкие, с каждым уровнем скорость/частота препятствий увеличивается.

Оффлайн MKLIUKANG1

  • Пользователь
  • Сообщений: 315
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Re: [OpenBOR] Double Dragon Mini
« Ответ #33 : 10 Сентября 2026, 20:22:09 »
Рефакторинг Double Dragon Mini: переход на массивы OpenBOR

Всем привет! :cool: Хочу поделиться опытом оптимизации нашего проекта Double Dragon Mini на движке OpenBOR. Долгое время в коде использовался паттерн с динамическими именами глобальных переменных:
Цитата
setglobalvar("tetris_cell_" + col + "_" + row, value);
setglobalvar("galaga_enemy_alive_" + i, 1);
Это работало, но каждое обращение включало преобразование чисел в строки, конкатенацию, хэширование и поиск в хэш-таблице. В горячих путях (десятки вызовов за кадр) это давало ощутимую нагрузку.

Что сделано:

После изучения руководства Damon Caskey «Using OpenBOR Arrays» я перевёл все однотипные данные на индексированные массивы (array(N)), которые дают доступ за O(1) через арифметику смещений.

Мини-игры:

Galaga — 10 массивов по 5 элементов вместо 50 глобальных переменных

Breakout — массив из 18 кирпичей

Snake — массивы координат сегментов (200 элементов с запасом)

Dodge — 4 массива по 5 объектов

Tetris — массив поля 200 элементов

Pong, Flappy Bird, Whack-a-Mole — данных мало, оставил как есть

Главное меню:

14 чит-кодов (было ~560 строк в 28 блоках) сжаты до 3 функций на массивах (~150 строк). Один вызов process_cheat_codes() заменяет весь разбор ввода.

Галерея: 16 переменных → 2 массива gallery_arts[8], gallery_cache[8]

BVD Team: 4 переменные → 1 массив

Update.c:

Move List превью: 22 переменные → 3 массива

Координаты опций: 15 переменных → 1 массив opt_coords[15]

Управление памятью

Соблюдаю рекомендации из руководства:

Проверка указателя перед использованием: typeof(arr) == openborconstant("VT_PTR")

После free() всегда setglobalvar("...", NULL())

Массивы создаются один раз и не ресайзятся в горячих путях

Никаких add()/delete() в игровом цикле — только get()/set()

Результаты

Производительность: убраны сотни конкатенаций и хэш-поисков за кадр

Читаемость: menu_script.c сократился примерно на 400 строк

Надёжность: единый паттерн очистки исключает утечки

Спасибо Damon Caskey за подробное руководство  — без него я бы продолжал городить обходные пути. Вот, если кому интересно о массивах в OpenBOR. :) : https://www.caskeys.com/dc/using-openbor-arrays/

Оффлайн Про Игрок

  • Пользователь
  • Сообщений: 1936
  • "А ты...знаешь что такое Red Sky Project!?"
    • ВКонтакте
    • Youtube
    • Просмотр профиля
[OpenBOR] Double Dragon Mini
« Ответ #34 : 11 Сентября 2026, 19:21:52 »
Оптимизация проектов на Open B.o.R. (ed) перешла на новый уровень   :cool: