Phase Of Horizon | HollowEngine
361 subscribers
126 photos
78 videos
10 files
52 links
Engine for development story-based maps & modpacks.

Support the project:
https://boosty.to/hollowhorizon/
Download Telegram
Такс, небольшой внеплановый пост)

Некоторые уже успели пожаловаться на новое лого, так что почему бы тогда не обсудить варианты? 🙃
В текущем варианте в самом деле со светом как будто небольшой перебор, да и некоторым сама концепция 3D логотипа не нравится, так что вот пока несколько основных концептов. В игре безусловно 2D вариант смотрится куда приятнее, но как по мне, для обложки группы / сервера это как-то простовато, нет?

P.S. Ниже скоро появится опрос
Какой из вариантов логотипа вам нравится больше всего?
Anonymous Poll
53%
1
15%
2
25%
3
48%
4
📓 Еженедельный девлог №4 | Интеграция ECS с блоками кода и начало скриптинга

📊 Статистика: ~10 коммитов, ~3000 строчек кода

На этой неделе я по большей части доводил до ума систему сборки HollowEngine Loom и к сожалению пришёл к выводу, что идея оказалась провальная из-за сложности изменениями generic-функций и классов в JVM. В подробности вдаваться не буду, всё равно кроме 1.5 калеки тут никто этого не поймёт 🥲 Но суть в том, что я откатился обратно до Stonecutter.
Так что теперь я вернулся к прошлым задачам.

🎡 Компоненты и блоки кода
Я добавил новые блоки для добавления, удаления, получения и проверки компонентов для сущностей. Это значит, что теперь внутри блоков кода на сущности можно вешать или убирать компоненты с некоторой логикой, например:
- Следовать за другой сущностью или смотреть на неё
- Патрулировать некоторые точки
- Добавлять разную логику взаимодействия или атаки
Пока самого функционала ещё нет, но для начала я хочу довести до ума текущие системы, а не вводить новые.


📜 Скрипты
Я начал постепенно реализовывать функционал связанный с скриптингом и пока-что это `.reload.kts` скрипты. Это самый базовый вид скрипта, который будет использоваться во многих системах и возможностях. Как следует из названия он будет автоматически запускаться при перезагрузке серверных ресурсов при запуске сервера или команде `/reload`. На текущий момент он уже позволяет добавлять / удалять рецепты для верстака и печек, но в будущем тут будет и логика связанная с обработкой событий, создание собственных компонентов, пользовательские системы и другая логика.


Пока я вижу, что дизайн и удобство использования нуждаются в доработке, так что приоритет пока меняю на них. В связи с этим на следующей неделе будет дополнительно 3 поста на эту тему с демонстрациями и небольшой документацией. Пока что полноценную документацию вводить в игру не буду, поскольку на это нужно больше времени, но, пожалуй, хватит и простых .md файлов на GitHub 🫠
Вот пока что пара скриншотов с тестовой версии. Блоки для компонентов генерируются автоматически, так что пока что выглядит так себе, тут нужно будет ещё полировать генератор 🙃

P.S. новый логотип откладывается на некоторый срок, когда появится время и возможности
🐳2👀2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🛞 Еженедельный девлог №5 | Я добавил движок в изолятор

📊 Статистика: 8 коммитов , ~8500 добавлений, ~6000 удалений 🔝

На этой неделе я закрыл очень объёмную и болезненную задачу - полностью вынес и изолировал HollowEngine со всеми его зависимостями в отдельный ClassLoader. А это целых 56 миксинов и ещё около 10 ASM-трансформеров в Kool 🦾 (потому что на изолированные классы миксины не действуют)
Основная причина - совместимость с другими модами. Движок использует несколько десятков различных библиотек, причём сложность в том, что если 2 мода используют одинаковые библиотеки разных версий, то Forge крашнется даже без каких либо логов. Из-за этого мод долгое время был не совместим с популярным модом Kotlin For Forge и для его работы нужно было ставить специальный патчер, который к тому же запускался не на всех JVM. Теперь же такой проблемы чисто технически не будет, поскольку ни Forge, ни другие моды просто не смогут найти классы движка 🤯

Ну и у такого подхода есть свои плюсы и минусы, если коротко:

Плюсы
- Нет и не может быть конфликтов библиотек.
- Хорошая основа для обновления движка без перезапуска игры (что важно мне для разработки). То есть в будущем мне не придётся перезапускать игру при добавлении нового интерфейса / фичи.
- Возможность запускать мод из одного jar на любом загрузчике, и Forge, и Fabric в одном jar. (Пока не доступно, но теперь это вполне возможно без ущерба производительности и размеру файла)


Минусы
- Нет возможности создать внешние патчи или миксины, чтобы изменить код движка.
- Сложно писать аддоны, пока не появится официальная их поддержка, поскольку обычный мод просто не увидит классы движка.
- Больше мороки с передачей данных между игрой и движком. Нужно создавать мосты для передачи данных между ClassLoader'ами


В общем, задачка не из лёгких, и сложностей она явно добавит, но думаю ради дальней совместимости и надёжности шаг необходимый, тем более для поддержки нескольких версий и модлоадеров 🚀
На текущий момент я проверял, мод запускается на Fabric и Forge, но безусловно, среди тех изменённых 8к строчек кода могли появиться новые баги 👀

Ну а пока, я готовлю ещё одну мощную систему, которая вероятно выйдет на следующей неделе ⭐️
А вместе с ней будет и выпуск мода на CurseForge ⚒️ и Modrinth ⛏️
Please open Telegram to view this post
VIEW IN TELEGRAM
54🐳2
This media is not supported in the widget
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5🌚2🗿2
Получается ещё один небольшой юбилей

Для тех кто не знает, я 5 месяцев назад на скорую руку сделал аддон для FTB Quests добавляющий всякие мелочи, с тех пор в нём появилось ещё несколько фич:
🏎 Поддержка анимированных картинок APNG со стримингом. (т.е. это своего рода декодер в реальном времени, который не загружает всё сразу в память, а обрабатывает 1-2 кадра в реальном времени)
Шейдерные фоны для разных вкладок в квестах.
🌐 Интеграция с модом EMI. (как JEI, но более гибкий и удобный)
💡 Ну и по мелочи, всякие анимации иконок и форм.


В общем, шутка, которая зашла слишком далеко 💻
Please open Telegram to view this post
VIEW IN TELEGRAM
10
🛞 Еженедельный девлог №6 | Мод стал больше похож на "движок", но меньше похож на "сюжетный"

📊 Статистика: 12 коммитов , 7400 добавлений, 961 удаление 💎

Сегодня только пятница, но я думаю изменений уже достаточно для этой недели 😳
А всё потому, что эти изменения продвинули его на две головы выше, чем ранее. По крайней мере в моём представлении о том, как движок должен выглядеть и использоваться.
Начал я с доработки компонентов и сущностей. Если раньше для каждой ванильной сущности создавалась своя ECS-сущность (далее буду называть её объектом, чтобы не путать с ванильными), то сейчас логика немного другая, ECS-сущности это по сути независимые объекты 🌎
И эти объекты могут привязываться с помощью специальных "якорей", пока их 2 вида: EntityAnchor и WorldAnchor, первый привязывает объект к ванильной сущности, а второй к мировым координатам. А для смещения используется компонент Transform. Он меняет объект относительно "якоря", т.е. относительно сущности, либо мира. Это позволяет настраивать перемещение, размеры, повороты.

Очевидно, настраивать всё это командами или скриптами/конфигами неудобно, поэтому я добавил в мод такую штуку как - gizmo 🪩
Это виджет, который вы могли видеть во многих 3D редакторах, с помощью которого можно менять положение объекта. Думаю с его помощью работать куда удобнее.
Ну и чтобы эти объекты не были просто пустышками, я добавил пока 2 компонента влияющих на визуал, это модели и свет.
Модели пока скорее просто как декорации, без взаимодействий и коллизий, но думаю уже очень удобно, если в условной локации вам нужно добавить листы бумаги, или какие-нибудь настенные часы.

А вот свет это уже задачка в разы сложнее, чем я думал, инстансинг моделей, которым я занимался недавно, на фоне этого теперь кажется мелкой фичей, которая делается за пол часа 😂
Если коротко, в Январе я уже пробовал что-то такое сделать, но там это была прям упрощённая версия. Сейчас уже можно добавлять точечные и направленные источники света с разным цветом и яркостью. Кроме этого, я даже добавил тени от них, хотя пока что они довольно требовательные, один такой источник по сути вынужден 6 раз рендерить мир, чтобы тень исходила в любом направлении в зависимости от положения источника. Так что вполне вероятно в будущем я добавлю "запекание" цвета, чтобы не пересчитывать его каждый кадр, правда тогда он уже будет работать только на блоки и декорации ✈️
Пока что освещение поддерживает только кастомный шейдерпак Complementary, поскольку разные шейдерпаки используют разные подходы и я чисто технически не могу сделать универсальную систему. В будущем скорее всего добавлю поддержку и других шейдерпаков, если на то будет спрос

В открытый доступ я это пока выкладывать не буду, но бустерам уже доступна экспериментальная версия. Я думаю сделать ещё упрощённую поддержку этих источников света и теней без активных шейдерпаков в более ванильном стиле, тогда уже возможно выложу в открытый доступ (но с большой вероятностью это уже будет летом, поскольку пока я уже устал от всего этого рендеринга 🫠)

Небольшая демка 👀
https://www.youtube.com/watch?v=QSXHrsZ15VY
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83👍2
🛞 Еженедельный девлог №7 | Две новости, одна хорошая, вторая плохая

📊 Статистика: 12 коммитов , ~4000 добавлений, ~6000 удалений 😮

В этот раз изменения не менее глобальные, но пожалуй начну с самых важных и неприятных новостей.
🚨 Мод мигрирует на NeoForge + Fabric 1.21.1, поддержка 1.20.1 и других версий прекращена.
Система блоков кода забрасывается на неопределённый срок.

Теперь насчёт причин, в первую очередь, я устал:
Я долго сидел на Stonecutter (система сборки модов) в надежде, что это упростит мне разработку мультиверсионных модов и планировал после стабильных версий добавить дополнительную ветку для 1.21.1, но в этом и проблема, сам Stonecutter существенно тормозит компиляцию и сборку проектов. У меня есть 4 основных подпроекта для работы движка и для каждого из них ещё подпроекты под версии игры, для которых, в свою очередь ещё и подпроекты Forge/Fabric. Сейчас я вернулся на чистый Architectury и время компиляции уменьшилось с 2-3 минут до 15 секунд, да и сама IDE стала подхватывать контекст проекта куда быстрее и мне не нужно каждые пару часов сбрасывать индексы и ждать, пока IDEA их починит. На первый взгляд было бы разумнее сначала доделать 1.20.1, а потом уже переходить на 1.21.1, чтобы для тех, кто ещё там работает был бы хоть какой-то рабочий билд, но увы, в тех условиях продолжать дальше допиливать движок почти нереально, а тратить потом ещё 1-2 недели на ручной порт я не хочу, так что думаю 1.21.1 сейчас наиболее актуальный вариант, да и в случае чего с неё будет проще портировать мод на 26.2+, если большинство модов начнут переносить туда.
Теперь по поводу блоков кода, пока я хочу перенаправить основные силы на новую систему скриптинга, а после него посмотреть на подход к блокам кода со стороны. Есть у меня мысль, как их совместить и не делать 2 разные системы с разной документацией)


Но есть и довольно много плюсов за эту неделю:
Источники света теперь потребляют на ~20% меньше производительности
Я уже целиком перенёс движок на Fabric 1.21.1 (для NeoForge там ещё нужно пара небольших правок, но они будут готовы уже завтра)
Скриптинг теперь будет на моём языке Katari, который основан на Kotlite (упрощённый Kotlin). Суть в том, что вместо компиляции теперь используется кастомный сериализуемый интерпретатор с приостанавливаемыми функциями. Это нужно, чтобы сделать более простой и удобный синтаксис, вместо того, чтобы городить стейтмашины, корутины, плагины для компилятора, неудобный DSL и т.п. теперь просто большая часть языка и стандартной библиотеки ограничена, но в замен весь его функционал стал стабильнее, плюс это позволяет мне добавлять новые операторы, которых нет в оригинальном языке. Подробнее можете почитать тут, по сути это мой аналог нарративным языкам, вроде Ink или Yarn Spinner, которые используются во всяких Unity / Godot, но с более гибким функционалом.
Кроме того, новый скриптовой движок весит всего 2МБ, вместо 80МБ в случае оригинального компилятора. Возиться с аддонами тоже теперь нет необходимости.

В общем, очередные глобальные изменения, ради будущего движка. Как считаете, хорошее это решение, или Холлоу опять за старое? 💻
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍1👎1😭1
Держу в курсе, я уже завершил порт на 1.21.1, теперь он работает на Fabric и NeoForge

Ну и постепенно наращиваю скриптинг, сейчас уже можно делать простенькие текстовые приключения, вроде того, что в ролике. Если кому-то интересно уже посмотреть на синтаксис или начать себе писать документацию, вот вам файл, если ChatGPT разобрался, значит Вы - тем более сможете 💻
Ну и в целом, 500+ строк обрабатывает без проблем и запускает моментально 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
14🗿1
🛞 Еженедельный девлог №8 | Анимации, Скриптинг, Компоненты

📊 Статистика: 19 коммитов , ~11200 добавлений, ~10420 удалений 😰

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

Ну а тем временем было сделано довольно много:
✔️ Доведён до ума порт на NeoForge, теперь мод там стабильно запускается и весь функционал присутствует (Включая правки в Iris+Sodium)
✔️ Внедрён скриптовой движок Katari, о котором я писал ранее и показывал пару небольших примеров.
✔️ Добавлена поддержка объёмного тумана и Flare (свечения, если смотреть на источник света)
✔️ Удалён Geary ECS, движок теперь работает на своей кастомной системе компонентов. Основная причина - не релевантность в рамках JVM, плюс низкая производительность в рамках игры. Geary предназначен скорее для симуляций десятков тысяч однотипных сущностей, а тут они скорее все разные, да и сам движок игры больше 300 сущностей уже не выдерживает.
✔️ Доработана система анимаций - теперь можно создавать несколько управляемых контроллеров с независимыми переходами, запускать и отключать обычные анимации, динамически менять их скорость и даже добавлять небольшие скрипты с процедурными вычислениями.


Ну и вот небольшой пример с анимациями, тут и базовые переходы между ожиданием, ходьбой, бегом, прыжками и приседанием. Также добавление поверх этого дополнительных анимаций, вроде эмоций или жестов. А также процедурные анимации для головы, зрачков, тела и рук в зависимости от поворота головы. Короче говоря так не долго и до Figura функционал расширить 👀
Думаю на днях уже тут и новый билд выпущу, как добавлю под всё это удобные методы для настройки в скрипты и всё перепроверю
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
114🔥3👏3
🛞 Еженедельный девлог №9 | Скриптинг, катсцены и управление камерой

📊 Статистика: 43 коммита , ~17000 добавлений, ~4000 удалений 😳

На этой неделе скриптинг, наконец, вышел в открытый доступ, а также появилась система катсцен, на текущий момент возможностей довольно много:
✔️ Создание, настройка и удаление НИПов.
✔️ Анимации нипов по триггеру или постоянные с условиями переходов.
✔️ Воспроизведение аудио, запуск катсцен, изменение смещения, поворотов и масштаба для нпс.
✔️ Триггеры по времени, взаимодействию, зонам / радиусу, клавишам и кликам.
✔️ Получение всяких параметров и атрибутов для сущностей.
✔️ Импорты скриптов внутри других скриптов.
✔️ Практически полная библиотека Kotlin StdLib в Katari (Collections, Ranges, Random, лямбды и другие удобные модули)
✔️ Продвинутый редактор пролётов камеры с возможностью детально настраивать каждый кадр.
Ну и по мелочи, удобные инструменты для добавления новых функций, переменных и классов в скриптовой движок из Kotlin в Katari.

В общем, тут осталось только добавить удобную обработку событий и кастомные гуишки, после чего движок на мой взгляд сможет закрыть 90% потребностей 💳

Система катсцен пока доступна только на моём Boosty, ну а для простых пользователей, шейдерпак с поддержкой кастомных источников света выходит в открытый доступ 🆓
Производительность на мой взгляд всё ещё нуждается в доработках, но увы, пока это лучшее чего я смог добиться не ломая совместимость с другими модами, вмешательством в рендеринг чанков и перенос игры на Vulkan👅

Ну а на этом у меня пока всё, пробуйте новую версию мода, пишите о найденных багах или новых идеях в сообщество, а я пойду доделывать линтер и автодополнение для Katari в встроенной IDE 😱
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥9🐳5🍾4
🛞 Еженедельный девлог №10 | Асинхронщина, рефакторинги, поддержка IDE, новые функции и документация

📊 Статистика: 28 коммитов, ~7000 добавлений, ~3000 удалений

Продолжаю расширять функционал движка:
✔️ Полностью переделана внутренняя система событий, теперь она практически никак не влияет на производительность в сравнении с прошлой.
✔️ В скриптинг добавлены 2 новых оператора: async и race. Первый запускает задачу отдельно от основной ветке, не ожидая, пока выполнятся функции внутри неё (удобно для работы с несколькими нпс или параллельными диалогами и действиями), а второй позволяет определить, какая из нескольких задач выполнилась первой (удобно для таймаутов или сложных условий)
✔️ Добавлена базовая поддержка IDE: подсветка синтаксиса и подсказки ко всем доступным функциям и переменным.
✔️ Добавлено множество новых функций: привязка предметов к модели, замена скинов игрока и материалов нпс, работа с мирами (время, погода, взаимодействия с блоками), рейкастинг и многое другое
✔️ Создана документация для движка

Сейчас работаю над кастомными интерфейсами и обработкой событий. Ну а после этого я пожалуй возьму перерыв на пару недель, а то чёт я смотрю никому оно сейчас и не надо, за последний месяц движок едва ли 10 человек запускали)
Please open Telegram to view this post
VIEW IN TELEGRAM
4😭22😢1