Phase Of Horizon | HollowEngine
376 subscribers
154 photos
98 videos
12 files
64 links
Engine for development story-based maps & modpacks.

Support the project:
https://boosty.to/hollowhorizon/
Download Telegram
Улучшаю 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
День 42?
🤯5🍓3
This media is not supported in your browser
VIEW IN TELEGRAM
Ладно, шутки шутками, а я тут ещё немного над интерфейсом поигрался, получается пока что-то такое 👾

Что думаете по поводу бокового списка с блоками? Я вот пока не определился с тем, удобнее ли он, чем выпадающий список? Вроде бы занимает много места, а с другой стороны, когда тебе нужно 20 блоков одинаковых блоков добавить, то лезть каждый раз в это контекстное меню не очень удобно. К тому же можно сразу добавить несколько фич, например удаление блоков, которые с холста будут перенесены туда 👀

Ну и к слову да, поработал над скроллом, остался ещё зум, да и в целом, работы ещё довольно много)
❤7
This media is not supported in your browser
VIEW IN TELEGRAM
Что лучше, Зум или Макс? 🤔 | День 43

Добавил Zoom или же отдаление/приближение в редактор. На деле оказалась довольно болезненная фича, поскольку нужно буквально в каждом блоке учитывать, что отступы теперь масштабируемые... Короче говоря тут ещё есть над чем работать, например, можно добавить приближение прямо к курсору, да и анимация пока довольно костыльная (примерно такая же, как я делал в моде Certain Questing Additions) и по хорошему стоит использовать принцип пружины, а это физика, закон Гука, с учётом текущей скорости, короче штука, которую не сделать одной строчкой кода :D

Ну а вообще функция довольно удобная и в будущем её можно будет использовать во всяких деревьях прокачки, навыков, квестов и т.п. Так что думаю, она ещё пригодится в других системах ⚙️
❤7👍2🐳2
Время подводить итоги 🏁 | День 44

Ну что, прошёл почти месяц с начала разработки редактора блоков кода, и теперь я с уверенностью могу сказать, что всё готово уже на 90% 🤯
Мне кажется вышло очень даже неплохо, как по концепции, так и по дизайну. Изначально я думал сегодня-завтра допилить пару фич и выпустить новый билд, красивая дата, все дела. Но пожалуй правильнее оставить это на 3-5 числа. В любом случае дел у всех будет много, да и в косяки я поправить не смогу, так что лучше уж я доработаю стабильную версию, чем потом буду писать в комментариях "Через пару дней поправлю" 🙃

Ну а пока можете посмотреть более подробные итоги года и будущие планы на моём Boosty (Бедные бустеры, уже 2 бесплатный пост за этот месяц, на что они донатят...)
❤7🎄3👍2🔥1
Документация которую никто не читает 📗 | День 45

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

Ну а теперь, всех, с наступающим новым годом! 🎉
❤7☃2🗿2
This media is not supported in your browser
VIEW IN TELEGRAM
Источники света и туман 😶‍🌫️ | День 46

Решил сегодня ради интереса покопаться в шейдерах, на тему возможности добавления источников света... Вышло нечто подобное 🙃
С туманом как будто стоит ещё поработать, но как по мне вышло прикольно)
🔥5😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё одно улучшение интерфейса | День 47

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

Короче, список задач постепенно закрывается и это хорошо, релиз уже не за горами 🌋
❤3🐳1
This media is not supported in your browser
VIEW IN TELEGRAM
Сворачивание блоков 🗞 | День 48

Большую часть дня потратил на то, чтобы реализовать перетаскивание блоков из левой панели на холст, пока осталось дописать лишь предпросмотр при перетаскивании, но он пока отказывается работать и не может динамически определить размер блока. Можно было бы заткнуть пока костылём вроде фиксированной картинки, но думаю надёжность сейчас всё же важнее 🙃
Ну зато добавил ещё одну удобную фишку: Сворачивание / Разворачивание блоков, чтобы если блок занимает слишком много места, его можно было свернуть до одного заголовка (В будущем у каждого будет свой "упрощённый" вид)
👍6❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Полноценная панель с блоками и история изменений 📋 | День 49

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

Если исправления багов не займут много времени, то завтра я уже доведу до ума систему триггеров. А сразу после неё выйдет последняя бета перед релизом!
🤯5❤‍🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё одно улучшение UX | День 50 📌

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

По сути осталось лишь доработать сам функционал этих триггеров и на этом система блоков кода будет завершена 🙃
👍4❤1
Новая система триггеров | День 51 🌐

Сегодня взялся за переработку системы триггеров. Всё оказалось сложнее, но не в техническом плане, а концептуальном... Похоже, нам всё-таки понадобится документация страниц на 15, чтобы объяснить все нюансы 💀

Листая прошлые посты, понял, что толком не объяснял, как всё работало раньше.
Было: Пользователь вручную запускал скрипт командой, тот начинал слушать события и жил до тех пор, пока триггеры не завершатся.
Тут всплыли две проблемы:
1) Автозапуск. Нельзя сделать так, чтобы скрипт стартовал сам, когда игрок заходит на карту. Приходилось бы делать костыли: запускать вручную и создавать отдельный скрипт для каждого игрока на сервере, даже если это условный нпс-торговец на спавне.
2) Одноразовость. Триггеры умирали после срабатывания. Хотите запретить ломать блоки? Старая система запретит сломать один блок, а дальше скрипт завершится. Если же делать их многоразовыми, то действия разных игроков начнут перезаписывать друг друга, ломая логику.

В связи с этим я решил разделить триггеры на локальные и глобальные:
1) Глобальные - это точки входа (например, "Игрок залогинился на сервер"). Они срабатывают всегда и создают отдельный экземпляр скрипта (контейнер) со своими личными переменными для каждого игрока.
2) Локальные - живут внутри этого экземпляра. Например, "Ломание блока". Они могут срабатывать многократно внутри одной сессии игрока, не мешая другим. Плюс, у них есть доступ к общим переменным контекста.

Но тут есть несколько сложных моментов:
- Когда завершать скрипт? Если локальные триггеры срабатывают бесконечно, скрипт будет висеть в памяти вечно.
Варианты решения: Завершать после выполнения глобального триггера? Добавить режим для одноразового/многоразового запуска триггера? Или дать пользователю блок "Завершить скрипт" (который 99% людей забудут поставить и положат сервер 50-ю копиями скрипта)?

- Конкурентность. Что делать, если игрок сломал блок, скрипт начал задержку на 15 секунд, а игрок тут же сломал второй блок?
Варианты решения: Отменять первое действие? Игнорировать второе, пока первое не доработает? Или запускать асинхронно? (Привет, гонка данных и баги в переменных).

В общем, идеального решения я не вижу. Каждый сценарий может потребовать своего подхода. Поэтому я решил не ограничивать Вас и реализовать все варианты с возможностью переключения 😱. Да, это дольше кодить и интерфейс станет чуть сложнее, зато система будет более гибкой. 🙃
🤯6❤4
Таймлайн | День 52 🎬

Сегодня по некоторым причинам, пост делаю я dan_bat :>
Расскажу я вам про таймлайн, который я делаю уже около 2 недель. Суть его в том чтобы вы могли делать кастомные анимации, катсцены и многое другое, не прибегая к коду, чем то это будет похоже на BBS. Вообще Hollow на своем бусти уже рассказывал про таймлайн и то где он будет использоваться, но там не было концепта дизайна...
К счастью с недавних пор у нас в команде появился дизайнер Axel Encore, который уже приложил руку к HollowEngine, если вы активно следили за постами, вы могли увидеть красивый дизайн дерева файлов и системы блоков, тут огромное ему за это спасибо❤️
Так что концепт дизайна у нас теперь тоже есть! Сегодня, если рассказывать про то что уже сделано, то это большая часть логики: Бесконечный таймлайн, система ключей, система групп, блокировка и скрытие треков и обработка свойств ключей.
🤯6❤3
Просто к пониманию бесконечного таймлайна: в теории вы сможете сделать 18 часовую катсцену, но вряд ли это вообще кому-то будет нужно. Сейчас по сути осталось задизайнить и после уже начать делать интеграцию и реальную логику, ради который этот таймлайн и делался. Если говорить про то сколько займет времени дизайн, то циферка выйдет не маленькая...
Сегодня я начал делать верхнюю линию сия чуда и получилось так что из 892 строк кода получилось 1106...
В такие моменты хочется спросить: "Боже надеюсь это ружье...". В общем, "да": таймлайн делается и находится на хорошей стадии реализации. Надеюсь, что я успею доделать его до конца каникул, и вы сможете протестировать его уже в HollowEngine, а не посмотреть его на видео, которые я буду вам кидать XD.
На этом у меня сегодня все, больше мне вам пока рассказать нечего, если опустить все детали разработки...
Передавайте хорошие пожелания нашей маленько команде разработчиков и в частности пожелайте здоровья Hollow.
Увидимся в следующих постах!
❤9
This media is not supported in your browser
VIEW IN TELEGRAM
Шейпкеи или же морф таргеты 🎹 | День 53

В последние дни я немного приболел, так что так и не доделал обещанную бету, но теперь я снова тут, и завтра возвращаюсь к разработке 🙃
А пока вот доработал фичу, что просил у меня некий Анонимчик - поддержка шейпкеев для моделей 🫣
Если коротко, это некоторые модификации самих моделей, которые позволяют плавно менять положение некоторых вершин. Как это работает вы можете увидеть в ролике. То есть при желании можно не делать 5-10 моделей под: женскую/мужскую версию, slim/обычный скин, 2 слой скина, всякие декорации и т.п. А просто создать одну модель с готовыми настройками в редакторе 🤯

P.S. Да, это значит, что теперь при желании можно сделать даже редактор персонажа при входе в игру 🔥
❤7🔥2