Поработал над визуалом и откликом
Прогресс-бар теперь анимирован и выглядит живее. Добавил: отображение банкротства компании и получение дивидендов.
Ко всем ключевым действиям прикрутил звуки, плюс появились настройки звука в игре.
Прогресс-бар теперь анимирован и выглядит живее. Добавил: отображение банкротства компании и получение дивидендов.
Ко всем ключевым действиям прикрутил звуки, плюс появились настройки звука в игре.
Наконец видно результат работы моей системы синхронизации чатов:
Пока концентрируюсь на работе персональных чатов (это чаты между двумя собеседниками). У такого чата отображается имя собеседника, последнее сообщение, временная метка и аватарка.
Особую сложность вызывала система кэширования медиа. Начал разрабатывать систему кэширования медиафайлов, а потом узнал что существуют готовые решения 😆
Частично реализовал работу групповых чатов. Но не полностью, с ними еще много работы. Сейчас отображается имя чата, имя собеседника, который отправил последнее сообщение, само осообщение, временная метка.
Сегодня переделывал систему отображения онлайн-статуса пользователя. Сейчас онлайн-статус пользователя вроде работает и обновляется 😅 То есть можно будет видеть кто в сети, а кто не в сети.
Сразу же добавил возможность скрывать свой статус, полезная функция для тех, кто не хочет чтобы их видели 😎
Все же пришел к тому, что нужно делать веб-версию приложения 😅 Зачем?
Времена сложные, приложения могут выкидывать из магазинов (например из AppStore выкинули банковские приложения, Avito), блокировать.
Размещение приложения на личном сайте поможет хоть как-то защититься от этого. Во всяком случае с сайта можно будет скачать приложение для Android или настольных компьютеров (Windows/Linux/IOS).
--
Кому интересно, можете подписаться куда-нибудь на меня, попробуете мессенджер в числе первых.
Постепенно буду продолжать делиться успехами разработки :)
Принято считать, что современное железо позволяет разработчикам не экономить на ресурсах. Но на деле даже возможности PS5 и топовых ПК имеют предел, когда речь заходит о по-настоящему массовых сценах.
Хороший пример — A Plague Tale: Requiem. В первой части на экране одновременно могло находиться до 5 000 крыс. В сиквеле разработчики из Asobo Studio решили увеличить это число до 300 000.
Но если обсчитывать каждую крысу как отдельного персонажа с собственной коллизией и поиском пути, то никакой процессор с этим не справится. Основная нагрузка ложится не на видеокарту, а на CPU, который просто захлебнется в попытках понять, куда должна бежать каждая из 300 тысяч моделей, чтобы не застрять в стене.
Разработчики использовали неординарный подход: они перестали воспринимать орду как совокупность отдельных существ и начали работать с ней как с динамической жидкостью. Те крысы, что находятся в непосредственной близости от игрока, — это честные 3D-модели. У них есть простой ИИ, они реагируют на свет и умеют кусать персонажа. Их относительно немного, поэтому нагрузка на систему в норме.
Вся остальная масса крыс на среднем и дальнем расстоянии — это не отдельные юниты. Это единая геометрическая сетка (меш), которая деформируется по законам гидродинамики. Для игры эта орда выглядит как одна большая "волна", которая просто обтекает препятствия. Чтобы эта "живая вода" выглядела реалистично, поверх сетки накладываются шейдеры и анимации, имитирующие копошение тел. Вы видите тысячи грызунов, но видеокарта в этот момент просто отрисовывает один сложный объект, меняющий форму. Вместо классического ИИ для толпы они применили расчеты, которые обычно используются для симуляции воды или дыма. В результате получилась одна из самых технологичных сцен в современных играх, которая на поверку оказалась очень элегантным и экономным техническим решением.
UPD: Тут можно посмотреть как это выглядит:
Есть у меня маленькое хобби. Я, чтобы не закисать и мозг тренировать, время от времени какие-то проектики делаю, так, для себя. В основном на PHP, он мне духовно ближе, python лишь для анализа данных иногда использую.
Какие-то сайты, конструкторы, калькуляторы, боты для телеги, вот подобное.
На волне хайпа по вайбуодингу решил поработать с GitHub Copilot и одну давнюю задумку реализовать.
Лет семь у меня болтается база с подборкой забавных фактов, собранных по разным просторам интернета, но сделать на основе этой подборки что-нибудь полезное всегда не хватало настойчивости. Мысли и идеи есть, а как доходит до реализации, потратить несколько недель - тут у меня уже не хватает мотивации и знаний.
И я решил с помощью вайб-кодинга доделать давнюю задумку.
За 2 дня (вечер пятницы и половину субботы) ленивой работы между делом, вот что я сделал с помощью копайлот, ценой 10$ в месяц:
Полностью сделал с нуля удобную админку для модерации контента фактов.
Почистил старую базу с фактами от артефактов прошлых лет (в базе был "мусор", ошибки работы парсеров)
Прикрутил интерфейс публикации через бота в ТГ-канал.
Поручил Copilot изучить документацию к МАХ и написать бота для работы с МАХ.
Прикрутил бота в канал МАХ и добавил в интерфейс публикации.
Добавил публичную Ollama-модель для генерации тегов к материалам при помощи ИИ.
Добавил 3 публичных хостинга картинок с API, для поиска картинок просто по наименованию темы материала.
Сделал интерфейс для управления публикациями.
Сделал крон-скрипты для публикации отмодерированных тем.
Настроил автогенерацию тегов по расписанию, раз в 5 минут сервер по cron сам бежит к Ollama за очередной порцией тегов для неразмеченной темы.
Вот слайды:






Админка для модерации и управления публикацией.
Но просто сделать админку и настроить публикацию - это скукота... Это тест, проба пера...
Поэтому на этих выходных, за пятницу и субботу на базе тех же фактов я сделал телеграм-игру викторину. К каждому "реальному" факту из базы ИИ сгенерировал выдуманную пару-факт и игроку предстоит определить - какой факт выдуманный, а какой настоящий?
Конечно, настоящие факты местами вызывают вопросики :) Так же ИИ-шка некоторые факты генерирует очень забавно, а некоторые - только угадать от правды не отличишь.
Есть два режима игры:
можно просто играть по базе фактов, выбирая, выдуманный факт или нет;
а можно играть в режиме PvP, проходя с соперником одну и ту же подборку на 3/6/9 вопросов, соревнуясь в широте знаний или в удаче.
Отладил, сделал рейтинги, список игроков открытых для PvP, набананил изображений - готово!
Вот этот бот-игра: https://t.me/factgame_bot



Скрины проекта телеграм-бот игры
На мой взгляд, за последние 6-12 месяцев разработка при помощи ИИ очень сильно продвинулась вперёд!
В прошлый раз, когда я пробовал вайб-кодинг, такую штуку сделать было нельзя, проект "расползался" терял целостность, ИИ-шка постепенно забывала, что было сделано ранее, теряла рамки и границы.
В это раз всё было по другому:
мы почти не заходили в тупики;
новый код почти не ломал старый;
при разработке ИИ придерживался предложенной инфраструктуры;
ИИ готов изучать документацию к API с листа, просто по ссылке;
Конечно, для разработки надо понимать, как всё работает. Что требовалось от меня:
понимать архитектуру проекта;
понимать какие инструменты для каких вещей использовать;
понимать как тестировать и разворачивать приложение и СУБД;
уметь читать логи;
уметь указывать ИИ-шке, когда она предлагает или реализует странные вещи;
понимать, когда архитектура становится неуправляемой и предложить план по улучшению;
Но вся разработка шла по сути в форме диалога по циклу - задача, предложения по решению, выбор варианта, написание кода, проверка, корректировка, задача...
И знаете, это очень круто!
Я сам, как программист довольно слаб, разбираюсь во многих вещах, имею обширный опыт, но разработкой профессионально никогда не занимался, поэтому навыки очень поверхностные.
Но с использованием Github Copilot моя продуктивность увеличилась раз в 30!
Мог бы я сам написать что-то аналогичное? Да, но за месяц-два напряжённого труда и сильно хуже. Мне пришлось бы проделать большой объем нудной скучной работы по написанию кода.
А вместе с ИИ это были приятные несколько дней чистого творчества:
задумка
MVP
архитектура
реализация
Все самые интересные и приятные инженерные задачи были за мной. А умный и очень подкованный помощник проделал скучную, рутинную работу.
Конечно, на текущий момент ИИ не заменит человека, инженерные задачи - они пока ещё требуют человека и достаточно творческие, но в написании кода на моём уровне - ИИ уже однозначно лучше!





Немного скринов из игры
Игра создана как лично моё развлечение: https://t.me/factgame_bot использовать на свой страх и риск!
Сейчас в ней 200 отмодерированных фактов-дублей. Если будут пользователи - промодерирую до 2 000, а затем до 20 000 тыс.
Рекомендую установить ник в профиле игры, чтобы не мелькать именем в рейтингах.
Отзывы, пожелания, предложения и панамка - в комментариях!
Сижу, модерирую выдуманные факты, читаю комменты, всем спасибо за мнения и отзывы!
Создаю 2D RPG «Souls-Witcher Mix» — проект на стыке хардкорной боёвки и глубокого билдостроения. Мой подход: отказ от автопрокачки в пользу осознанного выбора снаряжения и синергии талантов. Внедряю различные механики из «Ведьмака» и суровую прогрессию из Souls-серии. Верю, что баланс — это математика, превращающая игру в вызов для лучших. Создаю фундамент для легенды.
На данный момент занимаюсь базовыми механиками игры. Что имеется сейчас: передвижение ГГ, а также простой ИИ мобов. Есть система боя: планирую использовать смешанную механику — Turn-Based для боссфайтов и Action Real-Time для сражения с рядовыми противниками. Сейчас работаю над инвентарём, системой Level-Up и деревом скиллов.
RatTools теперь используется как пакетный рекурсивный импортер ресурсов.
Добавлена заготовка для системы материалов.
Потихоньку идет работа над конвейером и импортером материалов. Идет тяжелее, чем надеялся, но идет (больше читаю спецификации, чем пишу + работа + РКН и моя личная борьба с ними).
Итак, что получается на данный момент.
За основу взял заготовку, о которой писал тут: Relict Engine: Шейдеры. Часть 2. Материалы. Синтаксис
Вписал в RatTools парсер трех словных команд по принципу: команда аргумент значение. Для примера: use domain Simple - use команда, domain аргумент, а Simple значение.
Сделал, пока откровенным говнокодом, обработку этого дела. Команда use (в указанном выше посте using) domain подгружает Vertex.glsl и Fragment.glsl из директории SHADERS/domain/%Значение%, считывает их. Подгружает дополнительные файлы glsl с помощью самодельной команды препроцессора #include и подставляет в нужные места значения команды set с выборкой по аргументу. Выглядит это на данный момент так:
inline vec3 Material_Offset()
{
#set return vOffset:vec3(0)
}
Допустим, есть у нас вот такая функция. Парсер видит самодельную команду препроцессор #set с двумя аргументами и селектором ':'. Обращается к хранилищу команды set и ищет там аргумент vOffset. Если находит, то подставляет его значение на место этой строки, если нет, то значение после селектора. В итоге функция превращается в
inline vec3 Material_Offset()
{
return vec3(0);
}
ну или, если vOffset присутствует в материале, то подставится его значение. Заместо return может быть имя переменной, тогда вместо return будет оператор присвоения, например
void Material_Offset(out vec3 MaterialOffset)
{
#set MaterialOffset vOffset:vec3(0)
}
вернет нам
void Material_Offset(out vec3 MaterialOffset)
{
MaterialOffset = vec3(0);
}
ну и тд, но до создания переменной заданного типа пока не доросли (и я не уверен, нужно ли это).
Прежде чем идти дальше (перегнать все это в SPIR-V формат и добавить недостающий функционал, типа ввода/вывода юниформов) хочу немного причесать код, да избавится от ряда костылей, которые появились пока я пробовал разные подходы к форматированию.
[Интро] Город. Ночь. Дождь. Свет от телевизора в дешёвом отеле. Гитара и аккордеон, но с битом.
[Куплет 1 ] Пять лет, четыре месяца, немного. Ты ушёл, даже не бросил "прощай". Твоё имя в горле — как ожог. А аккордеон играет тот же трёп.
[Куплет 2 ] Не смотри так — я растворюсь. Не касайся — я поверю в нас. Твой голос снится, я в нём тону. Но на утро — боль. Ты знаешь? Ну.
[Припев ] Простыни помнят тебя до сих пор. В зеркале — чужой, не я. Не тот. Скажи, тебя время тоже гнёт? Или я был ошибкой, пустой полёт?
[Куплет 3 ] Не знаю, это любовь или просто драма. Не знаю, умеет ли сердце прощать. Но я закрыла глаза — и к твоей двери, прямо. И я здесь. Хотя не должна. Молчать.
[Бридж ] Тихо. Почти шёпотом. "Слушай... я не знаю, есть ли в этом смысл. Но я всё ещё здесь. И ты — не молчи."
[Финал] Аккордеон затихает. Дождь. Бит заканчивается. Я здесь. Хотя не должна. Молчать.
Немало игр дают возможность побывать на просторах нашей необъятной страны в самые разные эпохи: от крещения Руси и лихих 90-х до фантазий о светлом киберпанк-будущем. Россия представлена в геймдеве в самых разных жанрах, но чаще всего разработчики эксплуатируют тему Второй мировой войны.
При этом тема революции 1917 года и последующей Гражданской войны остаётся в тени. Сегодня мы вспомним игры и моды, которые рискнули зайти на территорию этого сложного и трагического периода начала XX века.
И начнём мы с легендарной серии квестов. Это настоящая икона «золотой эпохи» русского квеста. Если ваше детство пришлось на конец девяностых или начало нулевых, вы точно помните эти диски от «Буки» с колоритными героями на обложке.
Суть: Смесь анекдотов, абсурдного юмора и максимально странного взгляда на историю.
Троица: Петька, ВИЧ (Василий Иванович Чапаев) и Анка-пулемётчица стали настолько родными, что серия растянулась на девять частей (хотя каноничными считаются первые три).
Итог: Искать здесь историческую достоверность бесполезно. Это попытка взглянуть на трагедию через призму народного фольклора и «кухонных» шуток. Зато рисовка и саундтрек первых частей навсегда в сердечке.
Здесь Гражданская война показана «по-взрослому» и с голливудским размахом. На данный момент это, пожалуй, самое красивое воплощение той эпохи в индустрии.
Атмосфера: Руины Царицына (нынешнего Волгограда), заснеженные берега Волги, сожжённые деревни и величественные соборы.
Визуал: DICE удалось передать меланхоличную и суровую эстетику умирающей империи.
Вердикт: При всей своей красоте — это лишь яркий, дорогой, но мимолётный эпизод в рамках огромного шутера.
Эта часть стоит особняком в серии. Вместо привычного открытого мира перед нами стильный 2.5D-платформер, действие которого разворачивается в 1918 году.
Стиль: Весь визуал вдохновлен русским конструктивизмом и плакатным искусством. Агрессивные красный, чёрный и белый цвета создают уникальную атмосферу «агитпропа».
Сюжет: История камерная и сфокусирована больше на мистике орденов, чем на реальном хаосе войны. Вы видите лишь узкий срез событий, ограниченный «коридорной» механикой.
Полноценных игр по теме катастрофически мало, поэтому на помощь приходят мододелы.
Мод превращает привычную Кальрадию в гигантскую карту бывшей Российской империи.
Фракции: РККА, Белое движение, махновцы, УНР, «зелёные» и интервенты Антанты.
Геймплей: Вы начинаете как одинокий всадник с наганом, а закончить можете как маршал, штурмующий Кремль или Екатеринодар. Отличное сочетание кавалерийских рубок на шашках и позиционных перестрелок.
Звучит странно, но это работает. Серьёзная историческая драма разыгрывается квадратными человечками, что создает сюрреалистичный опыт.
Особенности: Это скорее цифровой военно-исторический клуб реконструкторов. Здесь важнее социальное взаимодействие и отыгрыш роли (RP), чем механика стрельбы.
На этом, пожалуй, всё. Конечно, существуют ещё суровые пошаговые стратегии вроде Revolution Under Siege Gold или сценарии в Strategic Command: World War I, но это уже развлечение для совсем искушенных стратегов.
Кстати, я и сам сейчас разрабатываю игру про Гражданскую войну. Если интересно увидеть, что получается у инди-разработчика, — жду вас в своем Telegram-канале