Mavericks Dunk Elite
markdown# DunkElite 🏀
Бесконечный аркадный баскетбол на Godot 4 — цепляй броски, наращивай комбо, лети вверх.
DunkElite — вертикальный аркадный баскетбол, где ты бросаешь мяч из кольца в кольцо, а цепочка уходит бесконечно вверх. Цель простая: не промахиваться. Исполнение — уже сложнее.
Каждый бросок — это рогатка. Тянешь пальцем назад, отпускаешь — мяч летит. Предиктивная дуга из 12 точек (градиент от жёлтого к красному) показывает траекторию и силу удара. Пройди кольцо по центру, не задев обод — комбо растёт. Дай ему набраться: ×5 — светящийся лейбл, ×7 — взрыв частиц, у мяча появляется трейл, который меняется с каждым уровнем серии.
Кольца не стоят на месте. Они дрейфуют по синусоиде, наклоняются под углом, а иногда между тобой и целью появляется перекладина-блок.
Основной цикл
Мяч стоит на стартовом кольце. Тянешь — видишь дугу, отпускаешь — бросок. Гол засчитывается только при проходе сверху вниз через две сенсорные зоны кольца со скоростью ≥50. После гола камера ползёт вверх, следующее кольцо из пула четырёх встаёт на позицию.
Усложнение
- Движущиеся кольца — 55% шанс, что следующее кольцо двигается по горизонтали, вертикали или диагонали
- Наклонные кольца — 50% шанс наклона до ±17°
- Блоки — после 4+ голов с вероятностью 1/3 между кольцами появляется перекладина
- Stuck detection — если мяч простаивает 2.5 секунды и бросок невозможен — game over
- Зона смерти — камера едет вверх и не ждёт; упал за нижний край — конец
Комбо
Чистые попадания (без касания обода) наращивают множитель. Очки за бросок = 1 + текущее комбо. На ×5 загорается лейбл, на ×7 — взрыв. Трейл мяча реагирует на уровень серии.
Весь прогресс хранится локально в user://save.dat, управляется через global.gd.
| Валюта | Как получить |
|---|---|
| ⭐ Звёзды | Подбор с колец (50% шанс, 1–3 штуки) + награды за челленджи |
| ❤️ Сердца | Покупка в магазине — используются для продолжения после поражения |
Магазин (3 вкладки)
- Мячи — 15 скинов, 100 звёзд за штуку
- Фоны — 15 кортов (улица, ночной корт, космос и др.), 100 звёзд. Тёмные фоны автоматически перекрашивают UI-лейблы и иконки в светлые
- Сердца — 1 сердце за 50 звёзд
Челленджи
Семь ступенчатых квестов с наградами в виде звёзд и сердец:
| Челлендж | Цель |
|---|---|
| Серия | Комбо подряд (до ×30) |
| Снайпер | Попаданий за игру (до 100) |
| Рекордсмен | Побить рекорд N раз |
| Коллекционер | Купить N скинов мячей |
| Феникс | Рестарт после поражения N раз |
| Дальнобойщик | Броски на максимальной силе N раз |
| Машина | Комбо ×5 в N разных играх |
Награды стакаются, клеймятся вручную.
- Движок — Godot 4.4.1 stable
- Язык — GDScript
- Рендерер — GL Compatibility (требование Aurora OS)
- Разрешение — 540×960, портрет
project.godot # точка входа Godot, настройки проекта global.gd # автолоад — глобальное состояние, сохранение, челленджи
scenes/ ├── main_scene.tscn # единственная сцена игры, содержит всё ├── ring.tscn # кольцо со всеми зонами (GoalZoneTop, GoalZoneBottom, RimLeft, RimRight) └── ball.tscn # мяч с физикой и трейлом
scripts/ ├── main_scene.gd # главный скрипт — игровой цикл, UI, камера, пул колец ├── ring.gd # логика кольца: движение, наклон, звёзды, сетка ├── ball.gd # бросок, предиктивная дуга, stuck detection ├── ball_trail.gd # трейл мяча, меняется в зависимости от комбо ├── store_screen.gd # магазин — три вкладки, покупки, синхронизация └── global.gd # прогресс, звёзды, сердца, челленджи, save/load
assets/ ├── balls/ # текстуры мячей (default, ball1..11, cosmo, disco, earth) ├── backgrounds/ # фоны кортов (15 штук) ├── sounds/ # музыка, удары об обод, swish, звук броска └── ui/ # иконки, лейблы, частицы
Как устроен код global.gd (автолоад) Загружается первым при старте. Хранит всё между сессиями: звёзды, сердца, рекорд, купленные скины, прогресс челленджей. Сохраняет и читает user://save.dat. Любой скрипт обращается к нему напрямую через Global.stars, Global.hearts и т.д. main_scene.gd Самый большой скрипт. Отвечает за:
переключение экранов (_switch_screen() / _hide_all_ui()) — вся навигация по UI в одном месте игровой цикл: обработка гола, смена активного кольца, движение камеры вверх пул из 4 колец — active_ring, next_ring, hidden_ring, launch_ring. После каждого гола кольца ротируются, launch_ring всегда отделён от ротации генерацию сложности: вероятности движения, наклона, появления блока комбо, счёт, game over, continue через сердце
ring.gd Каждое кольцо знает своё состояние: движется или нет, под каким углом, есть ли блок. При инициализации main_scene.gd передаёт параметры следующего кольца. Гол определяется через две Area2D зоны — сначала мяч проходит GoalZoneTop, потом GoalZoneBottom, только тогда засчитывается. Скорость мяча при входе проверяется — менее 50 не считается. ball.gd Обрабатывает ввод: drag от мяча → вычисляет вектор силы → рисует 12 точек предиктивной дуги с градиентом цвет. При отпускании применяет импульс с асимметричными множителями (force.x *= 0.85, force.y *= 1.25). Следит за stuck detection — если мяч почти не двигается 2.5 секунды, посылает сигнал ball_stuck в main_scene.gd. store_screen.gd Три вкладки (мячи, фоны, сердца) с общим ScrollContainer. Активная вкладка синхронизируется при открытии магазина. Тёмные фоны определяются по флагу — при выборе такого фона main_scene.gd перекрашивает все UI-лейблы и иконки в светлые варианты.
Требования
- Godot 4.4.1 stable
- Для Aurora OS — патченная сборка: savegame/godot, релиз
4.4.1-auroraos-4
Android
- Установи Android SDK и JDK 17
- В Godot: Project → Export → Android
- Укажи путь к keystore, alias и пароли
- Нажми Export Project
Aurora OS
- Установи Aurora SDK и Docker CE
- Скопируй экспортные шаблоны из релиза
4.4.1-auroraos-4в:~/.local/share/godot/export_templates/4.4.1.stable/ - Открой патченный Godot: Project → Export → Aurora OS
- Путь к RPM — только ASCII, без пробелов:
/home/user/builds/dunkelite.rpm - В поле Version вручную введи
1.0.0 - Нажми Export Project — сборка идёт через
sfdk
Разработано в рамках университетской практики.
Репозиторий: github.com/top-it-090304/Mavericks