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
🛞 Еженедельный девлог №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
А, упс, а пост рановато вышел)
Ладно, ближе к вечеру документацию покажу 🫠
🔥62👍2
Ну что, как и обещал, новая документация по HollowEngine ⚡️

С сайтом по документации помогали:
@urliveyn - сам сайт, документация;
@axelswamp - макет и дизайн;
@algorithmlx_today - деплой и домен.

Без них я бы тут ещё недельку возился бы с этим React, TypeScript и другими непонятными словами :)

Пока ещё есть над чем работать, но уже лучше, чем копаться в .md файле на пару тысяч строк)
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥9👍7🥰52🐳2🔥1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
У вас тоже такое бывает, сидишь, делаешь систему для диалоговых окон и всяких менюшек, а получается браузер? 😂
Please open Telegram to view this post
VIEW IN TELEGRAM
115😨6🔥3
Media is too big
VIEW IN TELEGRAM
🛞 Еженедельный девлог №11 | Пользовательские интерфейсы

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

Закончив с основными задачами по скриптингу, я по многочисленным просьбам занялся созданием интерфейсов. Как вы могли видеть в демке на неделе, я начал писать свой фреймворк с нуля. Сами интерфейсы пишутся и декорируются в .ui и .hss файлах соответственно.
Сейчас в целом система уже более чем рабочая, я даже добавил подсветку синтаксиса, подсказки и предпросмотр. Остаются разве что всякие небольшие баги при совокупности большого числа модификаторов, но в целом уже можно создавать довольно интересные штуки.
Из интересных возможностей библиотеки:
✔️ Гибкая настройка всех элементов: размеры, цвета, форма, фильтры, вроде чёрно-белого или размытия, отступы и многое другое.
✔️ Удобная система анимаций: можно настроить переключение многих параметров при наведении курсора, кликах и других событиях.
✔️ Вращение и перспектива: компоненты можно наклонять по 3 осям, при этом нажатия тоже будут обрабатываться в 3D-пространстве
✔️ Классический xml+css подход с возможностью расширения: удобная настройка и стилизация компонентов. Не нужно отдельно настраивать стиль каждой кнопки, достаточно выдать ей тег (хотя если очень хочется, можно и каждую настроить 😂)
✔️ Полная интеграция с Minecraft: предметы, блоки, сущности - всё можно рендерить в гуишке.
🚫 Пока ещё нет динамического добавления новых элеметов, условно из тех же скриптов в духе того же React.
🚫 Пока ещё нет интеграции со скриптами и в целом открыть гуишку кроме как через предпросмотр нельзя.

Короче говоря, движок стал ещё на одну голову выше)
Думаю скоро залью эту версию в Telegram чат бустеров, пока без документации и с некоторыми косяками, но в целом есть подсказки, да и оно довольно похоже на классический веб, так что думаю разобраться возможно 👍
P.S. С июня минимальная подписка поднимется в цене с 50р до 150р, так что если думали поддержать проект, самое время закупиться на год вперёд 😂

К слову, на следующей неделе поста не будет, поскольку у меня уже предзащита диплома, так что пока движком буду заниматься в пол силы, но не забывайте, что у нас есть сообщество, где тоже довольно много спойлеров и обсуждений 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥41🔥11
Media is too big
VIEW IN TELEGRAM
Новая гуи либа становится всё интереснее 🐼 🌟

правда я где-то накосячил с шрифтом и он его немного плющит)
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥3❤‍🔥1😱1
Media is too big
VIEW IN TELEGRAM
🛞 Еженедельный девлог №12 | События, скриптинг интерфейсов и багфиксы

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

Кто-то на прошлой неделе писал, что поста не будет, не верьте ему, это был вброс! 👍
За эту неделю я предзащитил диплом расширил систему интерфейсов, добавил автозапуск скриптов (для этого в нём необходимо в начале файла добавить `#loader server`), а также добавил глобальные обработчики событий 👀

Но это только начало, в скриптовом языке Katari теперь поддерживаются xml-литералы для интерфейсов, а также json-подобные структуры данных для передачи между клиентом и сервером (а также позже их можно будет использовать и для настройки тегов предметов)
Выглядит это всё примерно так:
val dialog = ui(
<box id="dialog" layout="column" size="300px auto" padding="12px" gap="8px">
<text value="Привет, игрок!" foreground="#FFFFFF" font-size="16px" />
<button id="accept" background="#339933" onPressed='emit(struct { event: "accept" })'>Принять</button>
<button id="cancel" background="#993333" onPressed='emit(struct { event: "cancel" })'>Отмена</button>
</box>
)

dialog.showScreen(player)

Или же вот так:
val tag = struct {
custom_name: {text:"Рандомный меч", color:"gold", bold:true},
lore: [
{text:"Это легендарное оружие найденное в каком-то прогнившем подвале", color:"dark_purple", italic:true}
],
enchantments: {
levels: {'minecraft:sharpness':5, 'minecraft:unbreaking':3}
},
unbreakable:{}
}
player.give("minecraft:diamond_sword", tag)

Как мне кажется, это куда удобнее, чем писать всё внутри одной строки и выделять кавычки символом: '\'.
Кроме того, по мелочи была исправлена большая часть багов с редактором, добавлена пара новых функций и местами доработан дизайн.

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

P.S. Интерфейс в ролике если что я корявый сделал за пару мину, так там понятное дело можно каждую мелочь настроить)
P.S.S. По поводу обновления документации пинайте @algorithmlx_today, я уже под UI большую часть написал, просто кто-то всё ещё не обновил Docker контейнер 🧮
Please open Telegram to view this post
VIEW IN TELEGRAM
14🍾4
🛞 Еженедельный девлог №13 | Последний еженедельный девлог

📊 Статистика: 26 коммитов, ~4500 добавлений, ~1400 удалений

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

Ну а теперь к менее радостным новостям - я думаю завершить с еженедельными постами. По факту сейчас нет каких-то прям громких новостей и интересных тем, так что на тему вроде "я добавил 3 новые страницы в документацию" или "Поправил 5 багов, которые всем надоели" выпускать посты я особо не хочу. Лучше уж тогда, как раньше, если есть что-то интересное - просто сделаю пост, нету - не буду ради этого тратить время, чтобы записать очередной ролик или пост.

Ну и на последок, на Boosty вышел куда больший пост с дальнейшими планами по движку, я обновил RoadMap, так что советую изучить:
https://boosty.to/hollowhorizon/posts/a633e5f9-c0a6-428b-9d1a-0fed652bb328
Please open Telegram to view this post
VIEW IN TELEGRAM
17😭3
Теперь, насчёт текущих и дальшнейших планов ✈️

Начнём с наименее болезненных и тяжёлых к освоению. Первое, это постепенный перенос всех интерфейсов с Kool на внутреннюю UI-систему HollowEngine.

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

Зачем? - В перспективе это значит - больше кастомизации, свои темы, свои стили, более удобные и расширяемые редакторы, прямая интеграция с игрой (меньше багов), стабильная работа на AMD GPU. Меньше странных ограничений "Почему у меня одно окно выталкивает другое, а ещё почему нельзя менять порядок вкладок? - потому что фреймворк так работает, я это так просто не исправлю".


Второе большое направление - я, похоже, всё же забрасываю Katari как основной язык для скриптинга и возвращаюсь к Kotlin.

Katari был интересным экспериментом. Он решал часть проблем сюжетных скриптов: приостанавливаемые функции, ожидание событий, удобные сценарии, сохранение состояния и так далее. Но со временем стало понятно, что часть проблем закрыта только частично, а некоторые нормально закрыть невозможно:
➡️ Производительность и стабильность: Я и так уже перенёс порядка 30% функционала Kotlin и построил кучу внутренних утилит просто, чтобы сделать систему базово совместимой с Kotlin. В рамках интерпретатора добиться скорости компилируемых языков практически невозможно, с другой стороны для сюжетных скриптов оно и не нужно.
➡️ Нарративная часть языка имеет много ограничений, которые портят жизнь как мне, так и вам:
- Ограниченное количество типов данных / классов, плюс каждый из них должен иметь возможность сохраняться в файл, а также ручное добавление всех функций и переменных. То есть написать аддон добавляющий новые функции или интеграцию с определённым модом крайне сложно
- Полное сохранение скрипта в ходе его работы... Но, которое работает до первой мелкой правки. Из-за того, что вся ответственность за сохранение легла на язык, он сам размечает данные и сохраняет их. Разберём простой пример - Вы создали сервер с сюжетом, в версии 1.0 у нпс 3 варианта ответа и последствия. А потом выпустили обновление 1.1, где убрали последний вариант и заменили на другую ветку. **Все сохранения** теперь не работают и полностью сбрасывают скрипт на 5000+ строк, поскольку язык априори не может знать, что делать в случае если ветки из сохранения больше нет. И таких нюансов могут быть сотни и все их предусмотреть не возможно. Таким должны заниматься люди, а не язык программирования, сами создавать в скрипте пометки и размечать данные, мол "если была найдена ветка из прошлого сохранения, то заменить её на другую". Или если сохранения вообще не было, то самому с этим разбираться, как тут выкручиваться, а не доверять алгоритму :)

Поэтому я снова смотрю в сторону Kotlin-скриптинга.

У Kotlin 2.4 появилось и появляется много приятных вещей: исправили проблемы, о которых я писал ещё зимой, упростили синтаксис для списков, контекстные параметры и прочие штуки, из-за которых скрипты можно сделать заметно удобнее. При этом Kotlin остаётся компилируемым языком, а значит производительность ровно такая же, как и у всего написанного на Java. Ну и готовая проверка ошибок, лучше поддержка IDE и меньше неожиданностей при выполнении скриптов.
Пока что я не готов презентовать новую систему скриптинга, да и новая IDE ещё полируется, но как только всё будет готово, в релиз выйдет 2.3, скорее всего уже в этом месяце!


И третье направление - редактор визуальных эффектов.

Забыл его добавить в роадмапу, но это, наверное, самая зрелищная штука из того, что сейчас хочется сделать. Идея появилась не только у меня: люди из сообщества тоже просили более удобный инструмент для эффектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Хочется сделать что-то в духе Effekseer, Kool или Photon, но встроенное прямо в экосистему HollowEngine. То есть не просто "загрузить готовый эффект", а дать возможность удобно собирать эффекты внутри мода: частицы, эмиттеры, кривые, параметры, материалы/шейдеры, цвет, размер, скорость и другие параметры, а также привязка к объектам движка и полная настройка и интеграция со скриптингом, чего сложно добиться с внешней библиотекой, особенно нативной, вроде Effekseer. Ну и разумеется API для разработчиков модов, поскольку напомню, HollowEngine в ближайшее время можно будет использовать как библиотеку для ваших модов.

По удобству хочется ориентироваться скорее на Unity-подобный подход: чтобы эффект можно было собрать, сразу посмотреть, подкрутить параметры, сохранить и использовать без возни с отдельными программами или перезагрузкой ресурсов. Плюс, скриптинг может значительно расширить классические эффекты из разряда "запустил и забыл".

При этом важно не забыть про производительность. Эффекты могут быть красивыми, но если они начинают убивать FPS, пользы от них мало. Поэтому я хочу сразу закладывать нормальную архитектуру: батчинг, либо compute шейдеры, если они поддерживаются для тяжёлых эффектов и симуляций. В качестве примера можете посмотреть этот или этот, на самом деле рендерить миллионы партиклов способны даже встроенные видеокарты, не говоря уже о дискретных, просто зачастую сделаны они довольно халтурно)


Ну и кроме того, я решил открыть первый сбор на Boosty. Сумма не космическая, но уже и не пара обедов, поэтому сразу уточню, это не ультиматум и не предзаказ. Не будет такого, что если сбор не закроется, то система эффектов никогда не появится. И не будет такого, что если сбор закроется сегодня, то завтра уже выйдет готовый редактор. Скорее это способ поддержать это направление разработки. HollowEngine уже несколько лет развивается как бесплатный инструмент: без обязательной оплаты, без рекламы и без попытки спрятать всё полезное за подписку. Но чем больше становится проект, тем больше времени занимают крупные системы. Если вам такое направление интересно и вы хотите помочь ему появиться быстрее - поддержка на Boosty будет очень кстати 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
1