Skip to content

Samiker69/TheEndlessWeave

Repository files navigation

The Endless Weave

90% Bullethell дрочильни, 9% лени и 1% остального

Build | Установка

! Для сборки необходимо иметь Java17


./gradlew :server:buildServer :android:assembleDebug Вы можете собрать всё сразу - ./gradlew build, либо всё по отдельности.

Client

Для сборки для Desktop'а: ./gradlew :lwjgl3:shadowJar

Для сборки apk нужно установить android-sdk, есть два пути - AndroidStudio и Сommand-tools. Я использовал второй вариант, так что ниже о нём.

Сommand-tools

Для начала установите его с официального сайта

  1. Где-нибудь в удобном месте создайте папку, условно droid-sdk
  2. Внутри папки создайте папку cmdline-tools
  3. Внутри этой создайте latest
  4. Распакуйте туда содержимое скачанного архива. Должно быть /path/to/droid-sdk/cmdline-tools/latest/X, где X это содержание архива: bin, lib итд
  5. Запустите /bin/sdkmanager, установите компоненты: ./sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0". после успешной установки обязательно запустите ./sdkmanager --licenses и прожмите везде y, иначе gradle не сможет работать
  6. Добавьте env ANDROID_HOME дo droid-sdk
  7. Вы установили эту хрень и потратили гигабайт места!!! (потом ещё 5 потратите)

Сборка .apk

Если вы всё это время держали терминал/ide открытой, то перезапустите его, чтобы применились env'ы, затем можете билдить: ./gradlew android:assembleDebug

Если libGDX пожалуется на отсутствие конкретной версии API, просто доустановите её через sdkmanager "platforms;android-XX" и в android/build.gradle.kts поставьте нужный target-sdk


Server

Вы можете отдельно собрать только сервер.

./gradlew :server:buildServer

Также сервер можно запустить из клиента:

java -jar filename-client.jar --server

ToDo-лист: RPG Bullet Hell

по большей части нужен мне, чтобы знать что делать и не забить на это всё в процессе


RightNow

  • Мультиплеер

    • Сделать Game абсолютно независимым, чтобы мог быть инициализирован как клиентом, так и сервером
    • Изменить архитектуру проекта на core (общее: компоненты, системы, генератор карты), client (текущий view) и server (серверный цикл)
    • Сделать минимальный Hi Hello сетевой стек.
    • Адаптировать логику клиента и сервера для работы с сетью
      • (!) клиент НЕ должен самостоятельно вызывать что-либо в Game, он должен отправлять пакет и получать подтверждение
      • синхронизировать игровую карту (клиент отправляет параметры (GameData), сервер хавает)
        • если сервер НЕ должен возвращать карту, то пусть сервер передаст шанс рандома, чтобы клиент сам создал карту с таким рандомом.
    • Перенести соло игру на интегрированный сервер.
      • клиент инициализирует и запускает локальный сервер в GameScreen
      • конфиг генерации мира с клиента должен применяться на сервере
    • ? Оптимизации пакетов. ктож знает какие задержки могут быть вне локального сервера.
    • НеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабитьНеЗабить
  • Hello LibGDX!

    • Javafx слишком много срёт на слабых устройствах и в целом не подходит для текущих целей. нужно переписать рендер:
      • client.controllers -> client.screens
      • client.custom.*
      • client.systems.<classname.toLowerCase().equals("render")>
    • создать ветку и настроить build.gradle.kts.
    • Баги/проблемы (исправить)
      • ? Из-за написанного кода под javafx, на клиенте могут возникать проблемы с логикой из-за другой системы координат в libgdx, например, при просчёте логики полёта пуль, необходимо домножать скорость на размер тайлов.
        • коллизия/рендер пулек поломались и они могут заходить сквозь стены.
        • ? вероятно при нестандарных размерах экрана рендер ломается.
      • сервер не удаляет игрока, если он отключился.
      • клиент рендерит других игроков как врагов.
      • ui не масштабируется как надо при изменении размера окна.
      • при очень высоких значениях fps плавное движение камеры менее заметно.
      • (?) при fullscreen размер окна равен разрешению в настройках
      • если на мобильном устройстве поменять разрешение в настройках то игра крашнет
        • solution: скрыть для мобильных устройств настройки разрешения.
        • сделать в Main метод isMobile для проверки среды без и с учётом выбранного управления
  • Сделать возможность подключения к внешним серверам. Обезопасить интегрированный сервер от не локальных подключений.

  • ! Вернуться к фазовым планам.


Фаза 1: Фундамент и архитектура (done)

...


Фаза 2: Мир и его генерация (done)

...


Фаза 3: Персонаж и RPG-механики

  • Создание игрока
    • Реализовать класс Player с базовыми характеристиками (здоровье, скорость).
    • Настроить управление движением персонажа (через AnimationTimer и DeltaTime).
    • Реализовать точный хитбокс, отдельный от спрайта.
  • Система прокачки
    • Реализовать систему уровней и опыта за убийство врагов (см. Пометка1).
    • Создать систему предметов, влияющих на характеристики (см. Пометка2).
    • Разработать систему инвентаря для хранения предметов.
  • Боевая система
    • Реализовать механику использования умений с перезарядкой (Кулдаунами) (см. Пометка3).
    • Добавить элементальные и статусные эффекты (огонь, лед, яд) (см. Пометка4).

Фаза 4: Враги, AI и Bullet Hell (done)

...


Фаза 5: Игровой цикл и Roguelike-элементы

  • Основная логика
    • Реализовать систему столкновений (Collision Detection).
    • Настроить логику спавна врагов на сгенерированных уровнях.
  • Roguelike-механики
    • Реализовать перманентную смерть (сброс прогресса забега при гибели).
    • Создать систему мета-прогрессии (см. Пометка6)
      • Ввести специальную валюту, сохраняемую после смерти.
      • Создать меню, где можно тратить валюту на постоянные улучшения.

Фаза 6: Интерфейс (UI)

  • Игровой HUD
    • Отображение здоровья и других характеристик игрока.
    • Иконки умений с отображением перезарядки.
    • Отображение очков/валюты.
  • Экраны и меню
    • Главное меню.
    • Меню паузы.
    • Экран "Game Over".
    • Меню мета-прогрессии.

Примечания/Пометки

  • Система прокачки
    • Помтека1: Классическая система уровней. Персонаж получает опыт за убийство врагов, и при достижении нового уровня игрок распределяет очки по основным характеристикам (сила, ловкость, интеллект и т.д.).
    • Пометка2: Система на основе предметов. Прокачка происходит в основном за счет находимого снаряжения. Новые мечи, броня или артефакты дают бонусы к характеристикам или новые способности.
  • Боевая система
    • Пометка3: Навыки с перезарядкой. Активные умения из древа навыков можно использовать с определенной перезарядкой (кулдауном). В JavaFX это можно визуализировать с помощью иконок, которые становятся цветными по готовности.
    • Пометка4: Элементальные или статусные эффекты. Можно добавить урон от огня, льда, яда и т.д. Враги могут иметь уязвимости или сопротивления к определенным типам урона, что добавит тактической глубины.
  • Механики Bullet Hell
    • Пометка5: Сложные паттерны. Снаряды могут лететь по синусоиде, спирали или менять направление через некоторое время.
  • Roguelike-механики
    • Пометка6: Частичная мета-прогрессия. После смерти игрок сохраняет специальную валюту, которую можно потратить в главном меню на постоянные улучшения (например, увеличение начального здоровья или разблокировку нового стартового оружия).
      • В будущем как уровни сложности: Жесткая перманентная смерть. Ничего не сохраняется после смерти. | Разблокировка контента. Новые враги, предметы и боссы могут появляться в последующих прохождениях только после того, как игрок достигнет определенных успехов (например, дойдет до определенного уровня или победит первого босса).

About

RPG (не) рогалик в жанре bullethell

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors

Languages