TGViewer
Channel Public Channel
Phase Of Horizon | HollowEngine

Phase Of Horizon | HollowEngine

@hollowengine

Engine for development story-based maps & modpacks.

Support the project:
https://boosty.to/hollowhorizon/
Subscribers
373
Photos
152
Videos
94
Links
61

Showing posts older than #214 · Back to latest

Older Posts 17 shown
Post #213 383
🤖 Были добавлены новые AI-компоненты и связанные с ними системы:
• LookAt - всё время смотрит на сущность или блок указанный в компоненте
• MoveTo - всё время идёт к сущности или блоку указанному в компоненте
• Patrool - всё время ходит по указанным точкам в компоненте
• AttackTarget - атакует сущность указанную в компоненте


🎭 Система моделей тоже получила несколько доработок:
• Больше не вылетает и не пропадает модель при перезагрузке ресурсов
• В контроллере анимаций теперь можно настроить повороты тела и головы
• Исправлен контекст самого скрипта - теперь он корректно обрабатывает ошибки, а не ругается на всё подряд


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

📌 Ну и по мелочи:
• Поправлены несколько виджетов Markdown
• Закрыты часть старых TODO
• Улучшен файловый менеджер в scripting UI
• Мод обновлён до Forge 47.4.13
• Прошёл один точечный эксперимент с `ServerGamePacketListenerImplMixin` и был быстро откатан отдельным revert-коммитом - он чинил мод на ядре Mohist и ломал его на всех остальных ядрах 😃
• Частично исправлены дёрганья тела при повороте NPC


На этом у меня всё, получается сжал кучу ежедневных девлогов в один, оказалось, контента меньше не стало, на картинки даже места не хватило, а премиума у меня нет 🙃
Post #212 355
📓 Еженедельный девлог №1 | Исправления и доработки блоков кода

📊 Статистика: 40 коммитов, 12 557 добавлений и 4 488 удалений.

С конца февраля в HollowEngine я внёс довольно много существенных изменений во многих направлениях. В первую очередь это существенная переработка блоков кода и того, как они выполняются.

Раньше была лишь возможность целиком запустить файл командой и тогда он начинал отслеживать свои триггеры. Также внутри одного файла все переменные были общими, например, если Вы поставите триггер "При сообщении игрока в чат", то скрипт будет срабатывать каждый раз вне зависимости от игрока или текста и перезаписывать старые переменные, даже если прошлый скрипт ещё не завершился.

Теперь система работает иначе.

⚙️ Каждый файл может быть активен или не активен, это влияет на то, будут ли в нём срабатывать триггеры.

Каждый триггер теперь запускает новую ветку (последовательность блоков кода) и эта ветка напрямую связана с вызвавшим триггер.
Например:
⁃ в случае события чата - это игрок
⁃ в случае запуска игры - это сервер

При необходимости можно настроить, что делать если у вызвавшего триггер ещё не завершилась прошлая ветка:
⁃ отменить старую и начать новую ветку
⁃ отменить новую и продолжить старую ветку
⁃ добавить новую ветку **в очередь**, сразу после старой

Передавать данные между ветками теперь можно только через глобальные переменные или переменные сущностей.
Локальные переменные хранят данные только в рамках текущей ветки.

🧩 Появилась система output'ов.
Если раньше данные можно было только передать в блок, то теперь можно и наоборот - записать данные из блока в переменные.

Например, при выводе в чат можно сразу записать:
⁃ сущность игрока
⁃ его сообщение
⁃ имя


Это позволяет писать свои собственные фильтры и механики, а не только делать набор стандартных фраз, как в Legacy.

В целом, это все глобальные изменения в рамках блоков кода, остальное уже менее значимо:
• Все имена блоков кода вынесены в файлы перевода - теперь они на 700+ строк
• Реализован поиск блоков на их панели
• Улучшено отображение блоков в свёрнутом виде
• Доработана обработка ошибок - при удалении блоков или повреждении их структуры в одном из обновлений поломается лишь один блок, а не весь файл


🛠 Новые инструменты

Я немного поработал над динамическим добавлением предметов.

Без перезапуска игры и сервера, прямо в мире одной командой можно обновить префабы связанные с предметами и они сразу появляются в игре!

Но пока что эта система сильно упрощена в сравнении с тем, какой она должна быть:
• нет динамического удаления таких предметов из всех инвентарей
• нет нормальной синхронизации с клиентом
• нет динамического добавления моделей без полной перезагрузки ресурсов
• нет возможности добавить явный функционал вроде Меча/Кирки

Короче говоря, это пока что минимальный Proof-Of-Concept, что пропатчить регистраторы и динамически добавлять новые предметы, блоки и сущности - возможно.

🧠 В процессе доработки системы блоков кода появилась новая система пространств корутин и переменных, которые можно привязывать к сущностям и серверу.

Сейчас она используется только для блоков кода, но с её помощью куда проще будет реализовать всякий скриптинг, а также различные квестовые и обучающие системы, поскольку там есть всё, чтобы сохранять контекст корутин или данные сущностей.

🧱 После этого была обновлена следующая крупная задача - система компонентов и префабов.

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

Сохранение компонентов стало централизованным:
сущности и компоненты теперь могут универсально сохраняться в
• NBT - для сохранения в сущности
• YML - для сохранения префабов
• JSON - для метаданных в редакторе префабов

Также появилась возможность скрывать компоненты из редактора, чтобы Вам не показывался мой мусор, на который вам смотреть нельзя 🙂
  • 👍 1
Post #211 879
Это конечно не ежедневный девлог, но всё-таки 👀
  • 🔥 8
  • 🐳 1
  • 🏆 1
Post #209 847
Что же можно сказать про сами посты? На самом деле много довольно интересных наблюдений. Были и свои сильные стороны и слабые. Как человеку, который обычно работает по 18 часов в сутки, а потом неделю прокрастинирует, переключиться на новый режим было довольно тяжело и болезненно. Было довольно много филлерных постов, когда за день я особо ничего не успел из-за учёбы, коммерческих заказов или простой усталости. Но на удивление, спустя время от этого появились и свои преимущества, например, у меня полностью пропала прокрастинация/лень/выгораний/впишите_нужное. Пройдя самые неприятные монологи с самим собой, почему я не могу просто взять и забросить это всё на условном 30 дне, стало куда проще работать, может сформировалась привычка, может быть просто подтянулась дисциплина - наверняка сказать не могу. Но оно явно в этом может помочь, даже если у вас недостаток силы воли, особенно если есть аудитория, перед которой вы дали обещание 🙃
Также из необычных эффектов... Наверное многие кому уже за 20, замечали, что с каждым годом, время начинает лететь всё быстрее. Когда вроде бы прошёл год, а ты не можешь вспомнить, чего стоящего ты сделал в последнее время. - В моём случае время будто бы остановилось, даже не пролистывая посты или коммиты, я куда лучше помню чем я занимался и что сделал. Наверное, это примерно как с ведением дневника, только в этом случае это дневник, куда ты обязался вписывать не просто, как ты провёл день, а поставил себе цель "достичь хоть чего-то каждый день")

Буду ли я и дальше продолжать выпускать посты или устал ли я от ежедневных постов? Возьму ли я отпуск или продолжу работать и дальше?
На самом деле я бы вполне уверенно мог бы продолжать выпускать ежедневные посты и дальше, но уже не вижу в этом необходимости. Изначально я это всё затеял, чтобы дойти до релиза, сейчас по сути чего я хотел добился, остались лишь мелкие доработки и багфиксы. Так что я думаю ежедневные посты тут скорее навредят, поскольку занимают они довольно много времени, а писать в конце дня пост из разряда "Сегодня я весь день просидел с дебаггером и, наконец, нашёл, почему вылетает, если одновременно нажать ctrl+z и shift+a в полнолуние с включенным месседжером [ДАННЫЕ ЗАМЕДЛЕНЫ] без интернета". Если, когда я ранее занимался преимущественно добавлением нового контента, я мог просто показать пару скринов с этими фичами, то показывать вам список исправленных багов смысла особо нет, скорее это просто лишняя трата времени или создание постов из воздуха.
Так что теперь я думаю перейду на еженедельные девлоги, думаю выйдет куда более интересно, чем просто пара скриншотов и ролик снятый одним дублем 🫤
Да и не исключено, что иногда будут и внеплановые посты, если будет о чём рассказать. Я вот недавно прошёл 3 и 4 главы Deltarune, может быть сделать небольшой обзор?)

Ну а на этом у меня на сегодня всё, следующий пост будет либо 1, либо 8 марта, посмотрим ближе к концу недели 😶‍🌫️
  • ❤‍🔥 10
  • 🐳 4
  • 🎉 2
  • ❤ 1
  • 😭 1
Post #208 861
Пришло время подводить итоги 🧮| День 100

Вот и подошли к концу 100 дней переноса релиза... Наверное ещё и не все застали начало этих постов или вообще забыли, что изначально я пообещал выпускать пост каждый день пока мод не выйдет в релиз :D
Разумеется планы много раз поменялись с тех пор и сами требования к релизу выросли раз в 5, не меньше. Но на 95 дне эта планка всё же была достигнута, может быть мод пока ещё и не стабилен, но весь запланированный функционал уже готов, дальше только полировка того что есть и исправление багов.
Но был проделан огромный путь с множеством различных механик и инструментов, прежде всего это:
● Скриптовой движок Kotlin с самописной IDE на базе компилятора K2 поддерживающий подсветку синтаксиса, inlay hints и автодополение. Всё это с обходом обфускации под (Neo)Forge / Fabric.
● Scratch-подобная система блоков кода прямо внутри игры. Где каждый блок может вызывать suspend функции. Возможность создания пользовательских блоков. Полная система сохранения их прогресса и контекста выполнения.
● Рабочая Entity Component System с синхронизацией компонентов между сервером и клиентом для сущностей и игроков.
● Редактор префабов и компонентов. Настройка модели и контроллера анимаций через скрипт.
● Переработанная система моделей: Исправлена генерация нормалей и касательных, поддержка скиннинга и шейпкеев. Импорт дополительных форматов: obj, fbx, geo.json (BlockBench)
● Парсер Markdown с поддержкой форматирования текста (включая дополнительные цвета), создание таблиц, изобрашений, списков и вставок с кодом.
● Пост-процессинг через шейдеры. Копирование буфера кадра для плавных переходов из одной локации в другую.
● Редактор тегов для настройки уровня добычи блоков, новых видов материалов для рецептов и многое другое.
● Редактор переводов с сканированием доступных ключей перевода и сравнением языков. Сохранение в один общий файл перевода.
● Поддержка формата JSON в IDE: подсветка синтаксиса, выделение парных скобок.
● Поддержка изображений в IDE: просмотр и редактирование картинок с настройкой цвета и размера кисточки.
● Граф-подобный редактор контроллера анимаций с экспортом в скрипты.
● Поддержка инстансинга для моделей (Пока без совместимости с Iris/Optifine)
● Перенос большинства систем мода на Корутины и Flow, лёгкая система задач и их распределение

Хоть многие из этих возможностей пока недоступны или дорабатываются, но я думаю для 100 дней это не так уж и мало, особенно, когда большинство модов едва ли справляются с одной из подобных фишек 🫠
За это время было сделано около 300 коммитов, написано около 16к строк кода и переписано около 400к 🤯
  • ❤ 8
  • 🔥 3
  • 🎉 2
Post #207 753
Продолжаю улучшать Markdown 🪄 | День 99

Начал интегрировать вчерашнюю систему в игру, всё оказалось куда сложнее, чем я думал)
Пока я занимался другими вещами движок очередной раз обновился, в связи с чем я потратил пол дня, чтобы заставить его запуститься, поскольку было много всяких причин:
- Старый LWJGL: движок уже использует на пару версий новее, а самому его обновить проблематично, ведь на нём работает сам Minecraft, если бы я это сделал поломались бы все лаунчеры :D
- Постепенное внедрение Jetpack Compose: это довольно продвинутая библиотека для виджетов, которая используется в Android (да и не только), пришлось и её под игру подгонять
- Java 25: Пришлось очередной раз перекомпилировать проекты под Java 17, поскольку движок уже успел перейти на 25 версию

Но в любом случае оно и к лучшему, проще будет в будущем перейти на тот же Vulkan и новые версии 🙂
  • ❤ 4
  • 🐳 1
  • 🫡 1
Post #206 637
Выглядит это примерно так 👀
  • 🔥 2
  • 👍 1
Post #205 655
Разметка интерфейсов в Kool 📐 | День 98

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

В Kool же всё проще, есть дерево виджетов, где каждый имеет свои свойства и можно настроить логику распределения виджетов, внутри, например:
- Cell Layout: Виджеты располагаются вместе, перекрывая друг друга (полезно, когда нужно расположить модальное окно или оверлей)
- Column Layout: Виджеты располагаются последовательно, сверху вниз (например, как кнопки на левой панели в ролике)
- Row Layout: Аналогично прошлому, но по горизонтали.
Этого уже достаточно для большинства задач, но я всё чаще начал сталкиваться, что иногда мне нужно чтобы виджеты сами распределялись последовательно по горизонтали и сверху вниз. Поэтому я сегодня написал вот такой Flow Layout, который сам распределяет виджеты вне зависимости от размера и формы 🤯
И всё это чисто, чтобы форматированный текст с ссылками и картинками внутри умещался под любой размер окна
Короче, Absolute Layout 🤚🫠🤚
  • ❤ 3
Post #203 647
🧱🧱🧱🧱🧱🧱🧱 | День 97

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

В общем, работа идёт полным ходом, билды скоро будут в сообществе и на GitHub!
  • 🔥 4
  • ❤ 2
  • 🐳 2
Post #201 633
Время фиксить баги 🪡 | День 96

Ну что же, сегодня утром я не без проблем таки сбилдил мод под Java 17 и уже нашлось много разных моментов и проблем, так что вот сегодняшние правки :D
- Исправлен адаптивный интерфейс на мониторах 2к+
- Исправлены вылеты при открытии неподдерживаемых файлов
- Поправлены косяки с блоками кода (можно было изменить блоки на панели предпросмотра, некоторые из блоков некорректно масштабировались)

Ну и также несколько новых фишек:
- Добавлены значения по умолчанию во многих блоках
- Цвета блоков теперь настраиваются индивидуально для каждого блока, а не исключительно по категориям
- Добавлены команды для запуска простых скриптов (просто .kts, без контекста или нпс)
  • ❤ 3
  • 🤝 1
Post #200 717
Сырой релиз 🫠 | День 95

Ну что, с необходимыми фичами уже всё, я добавил всё что хотел, так что концептуально движок уже дошёл до того самого релиза 🤯
Так что в ближайшие часы я скомпилирую движок под Java 17 (ибо пока он использует зависимости с 21) и выложу в сообществе, сразу говорю, что проблем ещё довольно много, так что будем постепенно их исправлять, но в любом случае, хотя бы запустить и потыкать интерфейс - уже может помочь выявить некоторые проблемы, в особенности касаемо адаптивного интерфейса под разные мониторы 🙃
  • 🔥 7
  • ❤ 4
Post #199 630
Генерация скрипта для контроллера анимаций 🐸 | День 94

Пока не стал делать сложную логику, да и от умных полей с подсветкой синтаксиса и ошибок временно отказался, чтобы не тянуть со всем этим и дальше. Переписал старый контроллер анимаций с Molang на Kotlin и подтянул для него кодогенератор из графа с настройками. Пока при сохранении контроллера он также сохраняет и файл в виде кода по соседству, думаю пока что это оптимальный вариант, к тому же всегда можно будет часть логики поправить или дополнить в коде, на первое время этого с головой хватит 🤔
Ну а дальше, я уже займусь подключением этих скриптов к нпс и всякими небольшими правками для нового билда 🫣
  • 👍 4
  • 🥰 1
Post #198 662
Конфигурация редактора 🏓 | День 93

Сегодня ещё немного поработал над редактором, добавил для него конфиг, выглядит он примерно так (хотя как будто тут половина и не нужна 🫠):
showLineNumbers: true
showBackground: true
showVerticalScrollbar: true
showHorizontalScrollbar: true
showSelectionAndCaret: true
singleLine: false
enableKeyMap: true
enableAutoBrackets: true
fontSize: 16.0
font: 'hollowengine:monocraft'
indentSize: 4

С другой стороны в будущем ведь появится тот же фолдинг кода и всякие пользовательские подсказки/паттерны, так что думаю ещё пригодится. Ну и да, я решил постепенно переносить свою систему с toml на yaml, поскольку второй, как по мне более читаемый для больших файлов и списков 🤔

Над горячими клавишами пока ещё думаю, мне кажется будет слишком громоздко их все пихать в ванильный раздел управления, а в конфиге их редактировать неудобно из-за всяких модификаторов вроде ctrl, shift и т.п. Так что думаю лучше будет для них отдельный редактор сделать? Да и в целом, пожалуй было бы не плохо сделать редактор конфигов в моде, можно было бы вообще не париться и все их через редактор делать, но тогда на сервере подобные штуки редактировать будет не удобно 🙃
Пока ещё дорабатываю компилятор для контроллера анимаций, вероятно он тоже всё же на первое дело будет в виде скрипта, поскольку реализовывать полноценный компилятор довольно долго
  • ❤ 5
  • 👍 1
Post #196 619
Возвращаюсь к редактору анимаций 🏃🏻 | День 92

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

Так что мы уже у финишной черты, готовьте свои последние: "Жду релиза HollowEngine день ∫(lim[x→∞] (Σ(n! / e^iπ) + √-1)) dx"
  • ❤‍🔥 4
  • 🤯 3
  • ❤ 1
Post #195 662
Редактор картинок 👨🏻‍🎨 | День 91

Всё ещё занят рефакторингом, но также добавил недавно ещё одну штуку - редактор картинок. Пока что это лишь набросок и над дизайном ещё не работал, но функционал уже вполне рабочий 👀

Ну а тем временем у меня уже развилась проф. деформация - временами уже захожу в ванилу и думаю "Блин, куда пропала шестерёнка, я хотел файлы игры посмотреть" 🙃
  • ❤ 8
Post #194 636
Улучшенный редактор кода 🫨 | День 90

Существенно переписал тот старый редактор, чтобы проще его было вписать в контроллер анимаций и добавлять новый функционал, получилось пока нечто подобное. Весь анализ файлов проходит в отдельном потоке через корутины, что делает его довольно быстрым и без каких либо пролагов.
Также, рефакторинг позволил добавить поддержку новых форматов, вроде json, как видите ни единого фриза в файле на 7000+ строк 🤯
Осталось разве что по мелочи доработать каретку, поправить само-открывающиеся подсказки при пустой строке ну и другие мелочи

В общем, с редактором практически закончено, вероятно успею его доделать даже сегодня 🙃
  • ❤ 5
Post #193 672
Поддержка fbx 🛻 | День 89

Немного поработал сегодня над системой моделей, обновил поддержку форматов .fbx и .geo.json.
Первый часто используется в игровых движках, а также для него существует довольно обширная библиотека с готовыми анимациями на Mixamo.com, так что в будущем может быть даже сделаю адаптер, чтобы импортировать готовые анимации в ваши модели, необходимо будет только ключевые кости настроить
Второй это практически родной формат BlockBench'а, который поддерживает Molang-выражения в отличии от gltf

Пока что система ещё дорабатывается, по крайней мере необходимо добавить оптимальную перезагрузку моделей, поскольку она тут немного сложнее, но думаю мы уже вышли за рамки 90% модов по функционалу 🙃
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →