Phase Of Horizon | HollowEngine
378 subscribers
155 photos
98 videos
12 files
65 links
Engine for development story-based maps & modpacks.

Support the project:
https://boosty.to/hollowhorizon/
Download Telegram
Рефакторинг 🚴‍♂️🩼 | День 29

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

Пока что добавил немного математики и тригонометрии вам в блоки 😅
- Рейкастинг: Позволяет узнать точку, куда смотрит сущность + явное ограничение дальности, что не было бесконечных значений, если сущность смотрит в небо)
- Угол между 2 сущностями, т.е. от первой до второй относительно взгляда первой.
Думаю очень поможет в создании механик вроде "нпс должен пропасть, если игрок его не видит"

А, ну и кстати, для тех кто предпочитает Telegram, а не Discord, у нас тут группа появилась, заходите если что 🤔
https://t.me/+zBNc0IJUHXozZmMy
❤4
- Это он украл блоки из MCreator!
- Я не отдам блок, я Холлоу Хоризон, работаю над движком 30 дней без выходных и зряплаты 😈


Ну что, прошёл месяц с того, как я начал этот эксперимент с ежедневными девлогами, релиза в красивое к сожалению не будет, всё-таки взять и забить на учёбу, сессию и другие дела и посвятить всё время на разработку я не могу, но всё же вечерами добавлять небольшие фичи - лишним не будет. Сегодня вот появилось больше блоков для работы с игроками (сытость, насыщение, больший контроль над опытом и игровым режимом) и сущностями (настройка эффектов, ну и пара параметров которые не попали в кадр)

Ну а на этом пока всё, ну и напоминаю, для тех, кто пропустил, что у движка появилось своё сообщество 🙃
❤9👀2🔥1
Я уже сбился со счёту с этими блоками, но... | День 31 😶‍🌫️

Знаете, я сегодня пожалуй даже не буду показывать содержимое всех блоков, просто скажу, что их стало больше... Очень много всякой информации о сущностях (нпс, игроки и не только), больше операцией с векторами и больше настраиваемых параметров для той же телепортации или респавна игроков ✍️
🔥4
Взаимодействие с миром 🏠 | День 32

Сегодня у нас набор блоков по работе с миром, пока лишь базовые вещи вроде спавна мобов, работы с блоками, немного информации о погоде, времени или небе (можно определить, находится ли игрок в доме или условной шахте)
А ещё я думаю добавить в блоки сразу значения по умолчанию... А то как-то неудобно для каждого блока каждый раз заполнять одно и то же, правда тут пока есть некоторые сложности, поскольку сами скрипты в будущем будут привязаны не обязательно к серверу, а, например, к тем же сущностям или нпс, а в этом случае набор блоков и значений по умолчанию может быть другой 🤔

Ну а ещё я практически разобрался со всеми задачами по учёбе, так что в ближайшие дни ждём обновления если не появится других неотложных дел 🫡
❤4👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Больше удобных фич 🤝 | День 33

Сегодня у меня довольно неожиданная фича - редактор переводов.
Если коротко, то в движке уже давно есть загрузчик ресурспаков, который может позволить добавлять и заменять текстуры, модели, звуки, файлы перевода. Так что я тут подумал, почему бы не облегчить работу и не добавить встроенный редактор с возможностью анализа, фильтрации и поиска всех переводов?

Вышло что-то такое 🙃
🤯5🤩2🔥1
Кто эти ваши шейдыры? 😨 | День 34

Довольно много времени сегодня ушло на курсовую работу, да и по блокам я думаю на первое обновление хватит, сейчас их около 130. Остальные думаю буду добавлять уже кодогенератором после релиза, к тому же ещё ведь документацию делать)
Так что сегодня вместо девлога решил поделиться знаниями на моём Boosty, где-то пол года назад я писал достаточно технический пост про устройство пост-шейдеров в HollowEngine Legacy, но в этом посте я скорее затрону их логику и в целом расскажу, как работает рендер Sodium/Iris, а также разберём подобный эффект, применяемый на мир ✨
Пост скорее обзорный, так что в технические детали вдаваться не буду, чтобы было понятно и тем, кто с шейдерами никогда не работал (Но хотя бы школьный уровень математики вам сильно упростит понимание 🙃)
🤯7🔥2
Дорабатываю систему сохранения ⚙️ | День 35

Практически полностью переписал прошлый подход к сохранению, теперь оно работает через Scope (Пространства) - определённый блок или исполнитель скрипта может создать новое пространство с изолированным набором переменных.
Например, на скриншоте сейчас запущен первый блок "Ждать 5 секунд" и на этом моменте я вышел из игры и движок сохранил 4 уровень вложенности:
- Первый уровень: Цепочка от корневого блока, хранит активный блок - это Если
- Второй уровень: Уже содержимое блока Если, а если точнее его результат - condition: true,
- Третий уровень: Далее идёт опять цепочка с именем активного блока, но уже внутри Then-ветки. Сейчас там указан ID блока Ждать.
- Четвёртый уровень: Пустой блок, это уже данные самого блока Ждать, их тут пока нет, но позже тут будет храниться пройденное время, чтобы оно не сбросилось при выходе и не пришлось ждать условные 4 часа с самого начала)

В целом это довольно умная система, которая для каждого блока всегда выдаёт чистый контекст для сохранения и затрачивает минимум памяти.
Если сравнить это с Legacy, то тут преимущество может достигать более чем в сотню раз 🤯
А всё, потому что раньше моя система сохраняла каждое действие, которое вообще было в скрипте. Теперь же эта система сохраняет только те данные, которые необходимы для успешного продолжения скрипта, то есть активные ветки и данные не завершённых блоков и в худшем случае оно может сохранить 7-10 блоков (зависит от глубины вложенных блоков), но никак не 500, как это было раньше 🫣
❤3
Скрины не поместились, так что кидаю их вторым постом)
❤2
Улучшаю UX/UI | День 36 📐

Провели тут парочку тестов последней версии. Логика уже вполне рабочая, так что пока навожу порядок в интерфейсе, чтобы разные последовательности блоков не накладывались друг на друга, довожу до ума оформление сделанное на скорую руку. Остаётся разве что поправить ещё мелкие недочёты, добавить сохранение переменных и глобальные/локальные триггеры (глобальные запускают новые скрипты, локальные - срабатывают в запущенных скриптах) и в целом всё, эта большая система будет готова 🤔

Разве что над моделями ещё нужно поработать, вероятно они будут настраиваться через скрипты, а не блоки, но тут ещё буду думать
🤝3🔥2
Media is too big
VIEW IN TELEGRAM
Система сохранения теперь работает? | День 37 ▶️

Сегодня таки допилил сохранение переменных на уровне скрипта. В целом всё даже работает Наверное, это тот случай, когда система заработала с первого раза и ты сидишь, думаешь, в чём подвох 🤔

О полноценном релизе говорить ещё рано, вчера писал подробнее, но думаю поиграться с парой блоков на этой системе уже можно, так что сегодня выложу билд в сообществе. Ну а пока оставляю чеклист задач до релиза:
- Переменные
- [x] локальные
- [ ] глобальные
- [ ] для сущностей и измерений
- Триггеры
- [x] локальные
- [ ] глобальные
- Багфиксы: Тут ещё довольно много всяких небольших и Quality Of Life фич, которые я постепенно буду закрывать, так что не пугайтесь, что некоторые кнопки не работают или размер контекстного меню не тот, всему своё время 🙃
❤5👏3🔥1
А видеокарта выйдет погулять? | День 38 🕹

Сегодня решил ещё немного поработать над моделями, ибо было несколько популярных шейдерпаков с которыми не было совместимости (причём даже со времён Legacy...)
Короче говоря, не буду вдаваться в подробности (всё равно если я щас начну говорить про нормали и касательные меня поймут разве что 3D-художники 😅), разве что скажу, что текущая система выдерживает около сотни нпс в кадре без существенных просадок и может сама определять и использовать наиболее эффективный метод отрисовки.

К слову, эта система в теории уже поддерживает Optifine для малополигональных моделей, да и в теории я бы мог доработать и полную совместимость, вопрос лишь в том, а надо ли оно кому-то, когда есть куда более стабильный и надёжный Iris/Oculus?)
❤5👻3🔥2❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаю исправлять мелкие баги 🐛 | День 39

Закрыл сегодня последние 2 зачёта по учёбе, осталось защитить курсовую 🫠
Ну а тем временем, я поправил пару багов с сохранением, а также сделал блоки не подключенными к триггерам визуально неактивными, чтобы не получилось такого, что Вы случайно его отключили и не заметили)
❤5🔥2
Разные виды переменных #️⃣ | День 40

Доработал сегодня систему переменных и начал систему триггеров 🚀
Дизайн пока сырой, так что расскажу немного про саму логику:
- (L) Локальные переменные: Хранятся пока активен сам скрипт, в них удобно хранить всяких нпс, различные предметы и задачи для нпс и прочие данные, которые не нужны после завершения скрипта
- (G) Глобальные переменные: Хранятся до тех пор, пока не удалить их вручную (или же всегда), общие для всех файлов - удобно для общих данных, конфигов, всяких флагов, глав сюжета и т.п.
- Переменные сущностей: Хранятся у конкретной сущности, будь то нпс, игрок или кто либо ещё. Позволяет таким образом хранить уникальную информацию для каждого игрока или нпс (те же системы квестов)

P.S. в ближайшие 5-10 минут будет продолжение поста на тему моделей и анимаций
❤3
Пока что всё ещё думаю над системой моделей и анимаций для нпс. Пока что склоняюсь к тому, что к релизу будет примитивная система, как в Legacy, где можно указать путь к модели и запускать её уникальные анимации. Но вообще хотелось бы в ближайшие недели уже иметь следующие возможности:
1) Настройка триггеров для анимаций. Выбор интерполяций (режимов сглаживания) и времени перехода между анимациями
2) Процедурные анимации (например поворот головы или зрачков в зависимости от того, как смотрит сущность)
3) Возможность вызывать анимации с сервера и при этом там же хранить активные зацикленные анимации
4) Сделать, чтобы запуск анимации в скрипте делал паузу до завершения анимации (или опционально)
Но я пока не определился с тем, как это должно выглядеть. В блоках кода это выглядит довольно громоздко и неудобно (чем глубже в лес, if else, if else). Kotlin-скриптинг в этом плане куда удобнее за исключением синхронизации данных между клиентом и сервером. Понятное дело всякие процедурные анимации и физика должны быть на клиенте, чтобы сервер не лёг от 500 таких сущностей, а если кто-то решил запустить зацикленную анимацию через скрипт, то она должна сохраниться на сервере, чтобы при перезапуске анимация не пропала. Но сделать это разделение через скриптинг достаточно сложно. Есть также идея - сделать редактор на основе нод, вроде того, что в Unity (Пример кину в комментарии, видимо место мало), где явно прописываются анимации и условия переходов, это во многом проще, но довольно громоздко. Так что пока что не знаю, какой подход я бы хотел реализовать, возможно у кого-то есть идеи получше?)
❤5
Готовлю интерфейс к релизу | День 41 🚪

Раз уж по механикам уже практически всё готово, то пришло время доработать интерфейс (ибо мне вечно все жалуются, что в нём некоторые кнопки не работают 😅)
В целом, прототип уже готов, и как Вы можете видеть, появилась новая кнопка для сворачивания окна, думаю это будет довольно удобно для тестирования, когда необходимо переключаться между редактором и самой игрой. Ну и по мелочи, кривые вместо стрелок, новые иконки, более классический шрифт, и пара других мелочей.
Кроме того, в редакторе блоков кода появится возможность приближения/отдаления и выбора нескольких блоков одновременно, но это пока в разработке, так что показывать не буду 🙃
❤5