𝐑𝐨𝐨𝐭𝐓𝐨𝐨𝐥 𝐁𝐥𝐨𝐠
194 subscribers
570 photos
48 videos
5 files
60 links
ニャン
Download Telegram
Прапрадедушка Blueprints...?

Именно, Kismet - старейшая, как вселенная, система визуального скриптинга в Unreal Engine!

Зародилась она еще в UE3 и имела.... слегка сомнительный интерфейс, но работала же! Да, там не было ни переменных. ни классов, НИЧЕГО! Лишь простая логика для дизайнеров по типу "Включи лампочку, открой дверь по триггеру"

Да блин, у них было всего-то около 100-150 нод! (В 4.0 - 300-500 нод, под конец в 4.27 более 1500, а в 5-ке так вообще перевалило за 3000 и продолжает расти :D)

И дизайн, по нашим меркам как любителям темной темы - вырви глаз (Ага, а мы еще жалуемся что в 4-ке кнопочки слишком яркие, чем в 5-ке...)


И минутка истории с нашего любимого (нет) бекенда:
- Как говорилось ранее, Kismet 1 была первой системой визуального скриптинга
- В UE4 Kismet обновили и дали название Kismet 2, а затем она внешне переименовалась в... Blueprints! Да, те самые наши любимые Блюпринты
- В файлах Анрила еще сохранилось устоявшееся название как UK2Node, что можно расшифровать как Unreal Kismet 2 Node, или еще пример: UKismetMathLibrary - так скажем, общая библиотека с математикой и логикой для Блюпринтов, и С++
- А еще Kismet 1 был капец как жестко привязан к уровню, не то что наши Блюпринты сейчас - сиди, таскай, переименовывай - вообще по барабану


В целом я рассказал это не чтобы посмеяться над UE3, это... Лишь пример того, как выглядело начало у великих историй
Кто бы мог подумать в 2010-м, что эта слегка убитая система, похожая на странный конструктор для дизайнеров (Scratch нервно курит), однажды станет лицом Анрила, что снизит планку входа в геймдев по всему миру?


Так что если вдруг Ваши первые шаги выглядят странно, запутанно и местами убито, не отчаивайтесь:
Возможно, это Ваш первый шаг к чему-то великому. Даже великое когда-то выглядело как костыль :)
🔥4❤1⚡1😍1
Нормально я так поспал

Чисто зашел и вышел из сна
🔥6🫡2🕊1👻1
Это проверочный пост на спам ботов
Чат уже разблокирован, но возможно временно
🎉5❤1
ЧТО БЛИН ВЧЕРА ПРОИЗОШЛО?!

Для начала, чтобы у нас не было недопонимания - я не заказывал себе накрутку (оно мне не надо)

Во-вторых - за это могут снести мне канал (четкого правила в тг нет, но модераторы могут заметить и прикрыть нашу лавочку)

Ну и в-третьих... Я правда не понял чего это все стоило, но боюсь я не знаю кто это сделал и с какими намерениями 👍

и какая яндере за этим стоит
❤4🔥1🕊1
Даааа, она приехала!
Джейсон Грегори - опытный геймдев-программист, специализирующийся на низкоуровневой архитектуре движка (Темный лес движка одним словом 💀)

Видел/слышал, что многие программисты хвалят ее, поэтому немедленно заказал эту шедевро-книгу. Что ж, теперь есть что почитать на лето/учебный год и писать Root Engine. А интересные моменты буду рассказывать здесь в блоге

и охренеть она толстая...
❤9👍1🔥1🎉1🕊1🫡1
Попробовал повторить фон из этого видео: тык

Очень просто вышло, буквально 57 строчек кода

Оценивайте сами: тык
❤2🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
(Ладно, ладно, я знаю чего вы ждете. Но завтра-завтра... Дайте впервые нормально поспать хвхвхв)
🤓4
Алло Absolute Science?
Да-да Portal De Solverio Alpha Edition

Gamejolt: тык
🔥3❤1
𝐑𝐨𝐨𝐭𝐓𝐨𝐨𝐥 𝐁𝐥𝐨𝐠
Неожиданный дроп, месяц работы и встречайте - A Cold Love Story Remaster (V1.1) Да-да, хоть кто-то спустя 10 лет взялся за игру Лиама Викерса (Серьезно, он выпустил ее в 2015-м) Чем можем порадовать? - Подчистка от лишних файлов - залог оптимизации (Вес…
A Cold Love Story

Делюсь с вами роликом товарища по SSTWL про криппипасту/новеллу Лиама Викерса - A Cold Love Story
(Делюсь ночью, потому что так атмосфернее)

Ролик получился хорошим, длинным и интересным
А также он хорошо пересказал оригинальную крипипасту (которую я собственно не читал), поэтому узнал от нее некоторые новые моменты

Ссылочка: тык
(Ролик с трудом делался аж 3 месяца, поддержите его как никак)
🔥3❤1
🎶Солнце мое, взгляни на меня🎶
🎶Моя ладонь превратилась в кулак🎶

Что ж.... Что ж.... Прошли недели, улетели месяцы, 1 год разработки и вот она - Портал Солвер Альфа

Безусловно, это не конец. Это далеко не конец

Но кого хотелось бы поблагодарить - вас. И каждого, кого я встретил в такое короткое время. Конечно, время не вернешь, моменты что были так и останутся в памяти

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

Даже если мы больше не увидимся - то помните, что было весело провести время с вами

А еще было приятно встретить вас на релизе Альфы! Я честно и не думал что вам так все понравится. Да, были баги, хотя фичи тоже были - кататься на лазерном релее это сильно)

Очень высоко оценили саундтреки, меню, оптимизацию (вау) и кастомизацию Солвера

Собственно еще раз благодарю команду, ее бывших участников и вообще всех тех, кого когда-либо встречал. Без вас бы этот день не случился!
❤‍🔥3❤1🔥1🎉1
This media is not supported in your browser
VIEW IN TELEGRAM
Опыт штука прикольная, жаль только приходит со временем


Удивительно, но сегодня начнем с Portal De Solverio

Точнее - БЕКЕНД 💀
Иронично, что в Альфе есть оптимизация, но дьявол скрыт в деталях...
Примерно чтобы вы понимали спектр моей работы сейчас - мне нужно как хирург аккуратно работать с существующей кодовой базой Альфы, перестраивать ее, переписывать, дак еще выпускать патчи

А причина?
- Во-первых... код написан сомнительно, а за год разработки я не один раз наступал на грабли, так еще сроки - нужно было усердно все заматывать изолентой, чтобы это хотя бы запустилось хвхвхвхв)
- Та и во-вторых редактор карт, да! К нему мы стремимся! От чего нужно очень сильно изменить структуру текущего бекенда Альфы. Думаете только мне одному стремно?

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

- UCLASS(MinimalAPI) - удобнейшая штучка для оптимизации. Говоря простым языком - в компиляцию пойдет не весь класс, а только то, что используется. То есть если будут какие-то функции, которые "просто оставлены", но никто с ними не работают - то они не пойдут в финальный билд. Уменьшает время компиляции!

- UInterface - Интерфейсы... Да

В свое время я допустил большую ошибку, когда мне нужно было обновлять лазерные компоненты по-очереди (просто потому что так надо), я накатал небольшую подсистему ULaserSubsystem от UTickableWorldSubsystem (Подсистема, живущая в текущем мире и имеющая тик), и в ней я хранил ссылки на акторы лазерных элементов и там же обновлял их состояние в нужном порядке (TX -> RX -> Cube -> Relay).

Сами понимаете, хранить ссылки на каждый класс это... не круто как-то? Так еще у меня был САМЫЙ НЕЛЮБИМЫЙ КЛАСС в Портал Солвере - LaserClass.cpp, это была тупо затычка, которая всегда багалась и вылетала из-за ТУПЕЙШЕЙ рефлексии Анрила. То компонент удалялся, то неправильно регистрировал все, то вообще... да... Нет слов одни рыданья (Интересно как Альфа еще жива хвхвхв)

Поэтому сейчас начал жествую перепись кода и теперь все строится на абстрактных интерфейсах - на деле это жесть какая удобная штука!

Хотя возникает вопрос - как хранить интерфейсы в массиве? Сделать TArray<AActor*> и каждый тик делать каст на нужный интерфейс? Ха, размечтались...

- TScriptInterface<T> - Контейнер интерфейсов. Обычно интерфейсы являются самостоятельными классами и трудно как-то "взять их", но тут Эпики на удивление постарались и сделали нам TScriptInterface - контейнер, что хранит ссылку на интерфейс, прикрепленный к определенному обьекту. И как бы сложите это и выше сказанное и у вас получится красивенький TArray<TScriptInterface<T>> - именно так и реализовано сейчас. А так как это массив, то его можно спокойно перебрать и делать то, что хотите (вот на примере моего интерфейса ILaserInterface):

for (const TScriptInterface<ILaserInterface>& Laser : LaserArray) // Перебираем каждый элемент массива
if (Laser && IsValid(Laser.GetObject())) // Если сам интерфейс и его родитель существуют (проверяйте, ибо частенько спасает от вылетов в финальной сборке)
Laser->TickLaser(DeltaTime); // То выполняем функцию через интерфейс (В моем случае тик лазера)


(Скоро будет второй пост, ибо есть что рассказать)
❤‍🔥3❤1🎉1🤩1🫡1