GameDev: разработка игр
7.64K subscribers
859 photos
203 videos
1 file
1.22K links
Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов

Разместить рекламу: @tproger_sales_bot

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
Godot начал писать свойства объектов с переносами строк, и это чинит diff в системе контроля версий

21 июля вышел второй промежуточный билд Godot 4.8: 93 участника, 197 исправлений с прошлого снапшота, сборка из коммита 7220d456d. Обложка релиза взята из детектива The Incident at Galley House.

Самая приятная правка невидима на скриншотах. Данные типа Object раньше писались в файл одной строкой целиком, и любой инструмент сравнения версий обращался с таким файлом фактически как с бинарным: понять по диффу, что именно поменялось, было нельзя. Теперь свойства разделяются переносами строк, и слияние ветвей перестаёт быть лотереей.

Из остального: созданные ресурсы теперь сами раскрываются в инспекторе, сцену можно запустить прямо из контекстного меню файловой системы, движок обновлён до Jolt Physics 5.6.0. Завершение работы GDScript стало устойчивее к падениям, а форматирование сделали детерминированным. Ускорено удаление большого числа дочерних узлов, и теперь невозможно случайно получить больше одного основного потока.

По мелочи: в Asset Store сортировка по умолчанию стала по оценке, в 3D-редакторе вернули инерцию свободного полёта камеры, а новые проекты по умолчанию игнорируют геймпады в неактивном окне.

Это предварительная сборка, а не релиз: замеров производительности в анонсе нет, большая часть изменений относится к удобству работы в редакторе. Отдельно отмечу, что промежуточные билды удобно смотреть именно ради таких правок формата файлов, которые в релизных заметках обычно теряются среди фич.

Полный анонс: https://godotengine.org/article/dev-snapshot-godot-4-8-dev-2/

Забавно, что самая полезная для командной работы правка за релиз — это символ переноса строки :)

@make_game
👍5👌1
Для GameMaker вышло расширение Colyseus, и сетевой код в проекте сводится к нескольким вызовам GML

6 августа в блоге GameMaker появилось интервью с командой Colyseus по случаю выхода их расширения. Colyseus — открытый фреймворк для сетевой игры в реальном времени: комнаты, подбор игроков, синхронизация состояния и авторитетный сервер. Сервер остаётся отдельным приложением на Node.js и TypeScript, но опыта в них, по словам авторов, не требуется, а разворачивать его можно у любого хостера.

Поддержки GameMaker сообщество просило годами, и до расширения люди изобретали обходные пути ради HTML5-сборок. Сделать её получилось после того, как клиент переписали на общее ядро на C, которое теперь питает все нативные SDK.

Подбор игроков сводится к вызову colyseus_client_join_or_create() с именем комнаты: он либо подключит к существующей, либо создаст новую, лобби писать не нужно, а по дополнительным параметрам можно разводить игроков по режиму или региону. Обработчики регистрируются как colyseus_on_state_change() и colyseus_on_message(), а один вызов colyseus_process() в Step разбирает всю очередь, без потоков и асинхронных сюрпризов.

Состояние живёт на сервере, клиенту приходит компактная двоичная заплатка только с изменениями, и она превращается в понятные события: игрок добавился, координата изменилась, игрок вышел. Клиент при этом шлёт намерения: он сообщает «хочу пойти», а куда игрок попал, решает сервер. Правку памяти на своей машине это обесценивает. Оттуда же берётся скрытая информация, тяжело дающаяся играм с хостом на клиенте: в демо с картами сервер владеет колодой и сообщает каждому только его руку, остальные видят лишь число карт.

В комплекте нативные библиотеки для Windows, macOS и Linux плюс сборка WebAssembly для HTML5 и GX.Games, автоматическое переподключение с очередью исходящих сообщений и два демо-проекта с исходниками: пошаговая карточная игра и танки в реальном времени.

Мобильных платформ пока нет, они обещаны позже. Замеров задержки и нагрузочных тестов в материале тоже нет, это интервью, а не технический разбор, так что цену решения придётся мерить самому. И сервер на Node.js всё равно кому-то нужно поднимать и обновлять.

Полный текст: https://gamemaker.io/en/blog/colyseus-multiplayer

Приятно, что демо отдают с исходниками: по ним видно, где проходит граница между «клиент показывает» и «сервер решает» :)

@make_game
👍5
Шесть лет, 5279 коммитов, больше 60 переводчиков и первый в жизни проекта сторонний коммит с кодом

Симон Дальвай ведёт открытый футбольный менеджер 99Managers на Godot и 4 августа выложил двенадцатый девлог. Проекту 11 июля исполнилось шесть лет, первый коммит датирован 2020 годом, сейчас их 5279. В июле вышли две версии, 0.8.3 и 0.8.4.

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

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

В Google Play набралось больше 30 тысяч загрузок за четыре месяца с релиза, и автор отдельно объясняет, что платформа за загрузки не платит ничего: для него это способ показать игру миру. Сборка для F-Droid, первая воспроизводимая сборка игры на Godot, пережила два обновления без ручного вмешательства, включая переход на Godot 4.7.1, где пришлось лишь поправить хеш коммита движка в двух местах. Версия 1.0 намечена на ноябрь, до неё остались сборные, тренировки, совет клуба с целями на сезон, травмы и карточки.

Цифр по активной аудитории, удержанию и деньгам в девлоге нет, и загрузки в сторе с ними не связаны. Это история одного проекта, а не обобщаемая статистика, но именно поэтому её удобно читать: видно, из чего складывается шестилетний open-source проект без рекламы и покупок внутри.

Девлог целиком: https://99managers.org/blog/devlog-july-2026/

Шесть лет и первый сторонний коммит с кодом только сейчас — хорошее напоминание, сколько на самом деле стоит собрать вокруг проекта сообщество :)

@make_game
2
Суббота, а значит открыт скриншотник.

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

Смотрим чужие проекты, спрашиваем авторов о деталях и ставим огонёчки.

@make_game
5🔥4
Разработчики Iron Nest отдали GameDiscoverCo выгрузку из Steamworks, и разбор запуска вышел с настоящими цифрами, а не с оценками: 366 тысяч копий и 4,74 миллиона долларов валовой выручки за пять дней, возвраты 4 процента, вдвое ниже обычного.

Что из этого можно унести к себе:

Демо решает больше, чем кажется. В него сыграли 876 тысяч человек при медианном времени 2 часа 19 минут. Но 400 тысяч вишлистов было ещё ДО демо — набрались на коротких роликах, в основном чужих и органических.

Соавтор игры говорит прямо: короткие видео дали первый разгон, а дальше их вклад сравнялся с остальными форматами — плейтестами, демо, фестивалем. То есть это инструмент старта, а не постоянный двигатель.

И отдельный сюжет: игра открыто сделана по мотивам PVKK, чей трейлер два года назад придумал жанр «маленькая комната, механизмы, стрельба». Вывод автора разбора неприятный, но честный: показал уникальную идею — выпускайся быстро. 26 процентов вишлистеров Iron Nest держат в списке и PVKK.

@make_game
83
Способ, которым игрок нашёл игру, связан с тем, сколько он в ней потом просидит.

GameDiscoverCo опросили больше 16 тысяч игроков Steam и разложили ответы по времени в игре. Стримы как источник растут с 40,6 процента у тех, кто наиграл полчаса, до 44,5 у тех, кто перевалил за пятьдесят часов. Текстовые соцсети идут вниз: 38,2 процента у наигравших час и 33 у долгожителей.

Разброс между играми ещё интереснее. Короткие ролики назвали источником 50,9 процента игроков R.E.P.O., 39,4 у ARC Raiders и всего 34,2 у Clair Obscur. Средний возраст при этом 25 лет против 31. То есть «работают ли шортсы» — вопрос не про жанр вообще, а про вашу аудиторию.

Важная оговорка: отвечали люди с открытыми профилями, согласившиеся на опрос, то есть заметно более вовлечённые, чем средний покупатель. А группа «50+ часов» вдобавок состоит из тех, кому игра подошла.

@make_game
👍3
Человек собрал себе Arch с Hyprland в теме «Аватара» и выложил его целиком — вместе с пятью играми на Python, которые лежат в том же репозитории и запускаются отдельно от всего окружения.

Тетрис на 766 строк живёт прямо в терминале: семь фигур с поворотами и подкрутками у стены, удержание фигуры, превью следующих, ускорение по уровням, вспышка на очистке линий и разлетающиеся частицы на game over. Рядом лежит тот же тетрис на pygame, с холстом 760×760. Змейка на 423 строки подгоняет поле под размер терминала и заворачивает края, а рекорды змейка и оба тетриса складывают в один общий JSON.

Вокруг игр — девять согласованных тем оформления, обои с Аангом, свой выбиратель тем на Rofi, гайд по сборке и шпаргалка по горячим клавишам. Автор просит не ставить всё подряд, а забирать понравившиеся куски.

@make_game
👍5
Разброс внутри одного стримингового показа огромный: на картинке разбор Triple-I Initiative, где 35 игр, медиана прироста вишлистов за неделю 36 тысяч, у верхних десяти процентов 154 тысячи, у нижних — 996.

Поэтому GameDiscoverCo советуют задать пять вопросов до того, как соглашаться.

Сколько игр в программе: у PC Gaming Show и Future Games Show доходило до восьмидесяти, у Triple-I тридцать пять-сорок. Чем меньше, тем больше внимания вашей.

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

Сколько там настоящих премьер: от этого зависит, соберёт ли эфир зрителей вообще.

Можно ли блогерам пересобирать трансляцию со своими комментариями — у крупных показов это заметно расширяет охват.

И сколько всё длится: короткие программы теперь заметно выигрывают.

@make_game
1
Доминик Шаблевски описал, как перенёс свой C-движок high_impact на Nintendo 64 и довёл Xibalba 64, шутер в духе Wolfenstein 3D, до физического картриджа для клона M64.

Бэкенд для платформы на Libdragon занял несколько вечеров, игровой код не менялся. Дальше началось железо: 93 МГц MIPS, 4 КБ текстурной памяти, максимум 64×64 на текстуру и медленная её загрузка. Отсюда сортировка тайлов по текстуре, до 17 квадов в одном 64-битном вызове Tiny3D и небо из одной текстуры 32×32. Уровни редактор хранит в JSON, но сборка компилирует их в бинарные структуры, потому что разбор JSON на консоли стоил около 100 мс на загрузке. Порт занял две недели, доводка — ещё несколько месяцев, стабильные 60 FPS.

Отладочный стенд: SummerCart64 по USB, ROM заливается прямо из сборки, видео через капчур-карту за 10 $. Эмулятор Ares точный, но медленную память N64 проверяет только настоящая приставка :)

@make_game
❤‍🔥5
Автор ретро-шутера WOBLO пишет игру на Python с raylib, без движка: геометрия, коллизии, свет, редактор уровней, физика и сохранения свои. В девлоге после 90 дней молчания он рассказывает вещи, полезные независимо от того, на чём вы делаете игру.

Про архитектуру. Мультиплеер он сделал наследником обычной игры и не поменял в основном коде ни строки. Это, по его словам, и есть проверка, что движок внутри правда разделён, а не выглядит аккуратным для того, кто сам этот беспорядок и устроил. На втором месяце работы такое не проверишь — нужно положить сверху что-то странное и посмотреть, сломается ли.

Про баги. Игрок упирался в невидимую стену; починил — стал проходить сквозь пол снизу; починил — вернулась стена. Оказалось, это один баг, видимый с двух сторон. Теперь он всегда проверяет оба случая сразу: проверять один — значит просто перекладывать баг.

Про платформы. На Mac все стены стали чёрными: там Metal, данные в шейдер приходят иначе, и свежее освещение получало мусор.

И вывод, ради которого он вообще сел писать: вишлисты набираются в месяцы до релиза, а не в день релиза. Молчание не бесплатно.

@make_game
👍2
В Defold завезли свет. Версия 1.13.1 добавляет компоненты Light: четыре типа источников, редактор их показывает, кастомные шейдеры получают данные через LightBuffer. Ограничения на старте честно перечислены: до восьми источников в редакторе, в WebGL1 и ES2 не работает, а layout LightBuffer должен совпадать с тем, что лежит в lighting.glsl.

Второе, что заметно на практике, это инстансинг morph targets. Веса морфов уезжают в per-instance buffer через атрибут morph_targets_weights, так что толпа персонажей с мимикой перестаёт быть отдельной болью.

Геймпады перевели на базу контроллеров SDL с сопоставлением сначала по GUID, добавили настройку input.gamepad_deadzone, а gdc умеет генерировать новые mappings; старый формат .gamepads поддерживается временно. Editor Scripts получили немодальные диалоги с изменяемым размером, вкладки, картинки, editor.fetch_libraries(), загрузку файлов по HTTP и endpoint /preview, который отдаёт сцену в PNG.

Тёплая сборка, по замерам авторов, ускоряется до 19%. Это верхняя граница из их измерений, а не обещание для вашего проекта, так что на большом проекте замерьте до и после сами.

@make_game
4
Bevy отметил шесть лет и подвёл итоги года: 47 529 звёзд, 1527 участников, 13 543 коммита. Главное, что появилось за год и что можно взять в проект.

BSN, новая система сцен: композиция и наследование иерархий сущностей прямо в Rust-макросе bsn!, с зависимостями и ассетами. Разработчик Exofactory после переноса на BSN убрал из проекта 7364 строки. Приземлились базовые UI-виджеты без стилей: кнопки, чекбоксы, слайдеры, списки, модалки, меню и наконец текстовое поле, а поверх них набор Feathers для внутренних инструментов. В рендере GPU-driven pipeline: пример bevy_city рисует город на 55 000 сущностей при 60 FPS; развиваются трассировщик Solari, язык шейдеров WESL и виртуальная геометрия. Сообщество на этих же основах собрало прототип редактора Jackdaw с визуальным редактированием сцен и инспектором ECS. Bevy Metrics теперь на каждый коммит меряет производительность, время компиляции и размер бинарника.

Отдельный раздел про ошибки: автор признаёт, что BSN должен был приземлиться быстрее и что раньше разработка шла в изоляции, пока не станет «достаточно хорошо».

@make_game
👍1👌1
Как собрать убедительный кристалл в Unreal, не платя за прозрачность.

Анастасия Горбань расписала свой мастер-материал по шагам. Материал непрозрачный: глубина внутри камня подделана двумя цветовыми слоями, которые при повороте камеры смещаются на разное расстояние. Именно разрыв между ними даёт объём, а не смесь двух цветов.

Перед цветом идёт стадия глубины, и там на выбор параллакс с картой высот или дешёвое смещение по яркости. Оба пути берут высоту из одного источника с одним тайлингом — поэтому подделанная глубина всегда ложится ровно на тот цвет, который смещает.

Переливы снаружи сделаны через синус: интерференция периодична по углу обзора, поэтому плавный градиент превращается в повторяющиеся полосы. Слой отключаемый — кварцу и рубину он не нужен, опалу и лунному камню нужен.

В конце автор приводит арифметику. Вариант на новой системе слоёв стоит 445–517 инструкций шейдера, а тот же вид на обычном материале — 291–369. Автор честно пишет: если цель просто выпустить этот кристалл дёшево, обычный материал правильнее.

@make_game
🤣2
Godot 4.7.2 это ремонтный релиз: 39 контрибьюторов, 57 исправлений, совместимость с 4.7.1 сохранена.

Главное для Windows: починили просадку производительности при движении мыши с высокой частотой опроса. Там же поправили залипание при одновременном отпускании Shift и позиционирование Wayland IME при дробном масштабировании.

В сети репликация больше не встаёт, когда удаляют узел, созданный через MultiplayerSpawner; заодно обновили источник энтропии в mbedTLS. В рендере починили тени PCSS, которые брали начало shadow range не в том пространстве, двойное копирование billboard-частиц и запуск игры на Android при выключенном экране.

Из мелкого, что легко словить: запрет отрицательных весов в RandomPCG::rand_weighted, падение при невозможности открыть файл лога и проверка родителей в GDExtension. Обновление недорогое, а проверять после него стоит ровно то, что чинили: ввод с высокой частотой опроса, спавн по сети, сцены с PCSS и экспорт под Android и Windows.

@make_game
4
Карта, погода, враги и лут получают по своему генератору случайных чисел, чтобы правка одной системы не ломала другую. Но если все они засеяны одним seed, они выдают одну и ту же последовательность, и игрок, увидев результат в одной системе, предсказывает остальные. Автор блога knives for cats разобрал три способа с этим справиться.

Смещение начала последовательности для каждого генератора — пластырь: сдвиги надо делать большими, не все RNG умеют перепрыгивать, и учёт превращается в отдельную работу. Отдельный генератор для раздачи seed работает, но состояние каждой системы теперь зависит от порядка создания генераторов, и добавление новой ломает старые. Вариант автора — хэшировать общий seed с именем системы: new RNG(gameSeed, "Weather"), генераторы независимы, а связать два нарочно можно, подмешав выход одного в seed другого. Хэш нужен детерминированный, HashCode из C# не подходит.

Через шесть часов после публикации выяснилось, что MegaCrit используют почти ту же схему в Slay the Spire 2: в первой части System.Random при линейно растущих seed выдавал коррелированные последовательности, и runSeed + hash("id") давал всем генераторам одни числа со сдвигом. Сам автор берёт Squirrel3 из доклада Сквиррела Айзерло: два uint состояния и прыжок в любую позицию.

@make_game
2🆒1
Если ваш мультиплеер в GameMaker сделан на откате состояния — не обновляйтесь. В ветке 2026.100.0 эту подсистему удалили полностью, а в заметках просто советуют оставаться на 2026.0, пока не найдёте замену. Чем заменять, не сказано.

Остальное в ветке, последняя запись от 13 августа:

Появились layer_sequence_get_alpha() и layer_sequence_get_blend() — читают текущие цвет и прозрачность последовательности. Менеджер пакетов научился проверять и переустанавливать испорченные пакеты, из-за которых заготовка могла намертво застрять. Для Switch добавили настройку, отключающую поддержку сенсорного экрана.

Из правок в самом коде игр стоит знать три: инкремент внутри аксессора больше не срабатывает дважды при присваивании, draw_set_alpha() теперь влияет на отрисовку сразу, а не после ближайшего изменения масштаба объекта, и оператор ^= в компилируемом режиме перестал считать входные значения логическими.

Остальное — редактор: вкладки, рабочие области, вставка текста, набор иероглифов. Разделение окон на части готовят, но в интерфейсе ещё не включили.

@make_game
Соло-разработчик выложил цифры по своей Paranormal Observation: Steam в октябре 2022 года, Switch в мае 2026-го, демо на GameJolt как ранняя проверка идеи.

Всплеск от стримеров, в основном от Insym, дал примерно 225 добавлений в список желаемого за день, лучший день продаж около 65 копий. За первый месяц Steam принёс примерно 400 копий, Switch около 200: на консоли не было ни маркетингового толчка, ни накопленного списка желающих, и вторым запуском порт не стал.

Выводы автора: и ранний доступ, и выход версии 1.0 стоит считать полноценными маркетинговыми событиями, скидка от 20% помогает превратить список желаемого в покупки, а ограниченные окна видимости в Steam лучше тратить в начале. Отдельно напоминает, что первые десять отзывов критичны для показа оценки, а ключи покупками не считаются.

Все числа округлены, сырых данных Steamworks и выручки в посте нет. Но даже так это редкий случай, когда кто-то показывает Switch-порт без прикрас :)

@make_game
👍1
Dear ImGui 1.92.9 поменял поведение числовых полей, и это заметят все, у кого на нём внутриигровые редакторы и отладочные панели. DragXXX, SliderXXX и InputScalar теперь применяют значение после валидации или потери фокуса, а не на каждое нажатие клавиши; старое поведение возвращает флаг ImGuiItemFlags_LiveEditOnInputScalar. Релиз вышел 25 июля, 31 июля за ним последовал 1.92.9b.

Стоит помнить и о предыдущей 1.92.8, где поменялись сигнатуры ImDrawList::AddRect, AddPolyline и PathStroke; устаревшее поле ImDrawData::CmdListsCount теперь положено заменять на CmdLists.Size. Хотфикс 1.92.9b закрыл три регрессии: Ctrl-клик, границы таблиц и обнулённый CmdListsCount. Если обновляете движок с ImGui внутри, стоит прочитать раздел Breaking Changes до сборки, а не после :)

@make_game
🥱1
jMonkeyEngine — открытый 3D-движок на Java, живущий с середины двухтысячных. Вторая бета версии 3.10.0 вышла 21 июля и целиком про то, что ломается на стыке движка с операционной системой.

Для тех, кто выпускается на настольные платформы: в зависимостях появилась Windows на ARM64, а 32-битные библиотеки удалены.

Дальше — набор багов, знакомых любому, кто делал полноэкранную игру. Починили восстановление захвата мыши и курсора после Alt-Tab и нажатия клавиши Windows. Смещение мыши больше не учитывается, пока окно не в фокусе. При удалении привязок клавиш очищаются зависшие состояния ввода, а виртуальные курки геймпада наконец ведут себя правильно. В редакторе такое не видно, у игрока проявляется сразу.

Ещё: исправлено масштабирование обработчиков сцены при высокой плотности пикселей, починен фатальный сбой на macOS при аппаратном размножении объектов, а генерация мип-уровней теперь предупреждает, если свалилась с видеокарты на процессор — раньше это молча стоило производительности.

Замеров в заметках нет, стабильность не обещана: это бета.

@make_game
Скриншотник. Правила прежние: показываем, над чем сидели неделю.

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

Если на этой неделе двигалось туго — покажите то, что почти работает, тут за это не ругают. Ссылки на свои каналы разрешены.

@make_game
51