TGViewer
Channel Public Channel
GameDev: разработка игр

GameDev: разработка игр

@make_game

Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов

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

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

Другие наши проекты: https://tprg.ru/media
Subscribers
7.63K
Photos
905
Videos
203
Links
1.3K

Showing posts older than #1999 · Back to latest

Older Posts 20 shown
Post #1998 1.25K
Разработчик Warlondor выложил полный отчёт по рекламе в Reddit Ads. Открутил 1160 долларов, из которых 500 были промокредитом, то есть своих потратил около 660. Получил 861 вишлист: по полной цене это 1,35 доллара за вишлист, по фактически потраченным деньгам — 0,77.

США и остальной мир разошлись сильно. В США 113 485 показов, 3436 кликов, CTR 3,028% и клик по 0,28 доллара. За пределами США 100 169 показов, 1642 клика, CTR 1,639% и клик по 0,13.

Он отдельно сравнил два способа таргетинга: около 250 разрешённых ключевых слов и 100 исключённых против выбора сообществ. В США ключи дали 3,122% CTR, сообщества 2,990%, и автор сразу оговаривает, что не считает ключи лучше сообществ.

Про окупаемость автор честно говорит, что не знает: игра ещё не вышла :)

@make_game
Post #1997 1.22K
Детерминированная симуляция — это когда одна и та же последовательность входных данных всегда даёт один и тот же результат. Из неё получаются честные реплеи, откат состояния и возможность доиграть матч после падения сервера.

Рик Хоскинсон рассказал, как это делали в League of Legends. Работа заняла почти год и стала основой восстановления матчей на ранних турнирах.

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

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

Полезная деталь для тех, кто будет повторять: малейшее расхождение между двумя симуляциями со временем накапливается и разносит их полностью.

@make_game
  • 👍 10
Post #1996 1.18K
Восемь игроков, полторы тысячи юнитов, модем 28,8 килобита и Pentium 90. Доклад с GDC 2001 про сетевой код Age of Empires — пятнадцать страниц о том, как это вообще заработало.

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

Именно тут начинается интересное. Расхождение проявляется не сразу: чуть иначе посчитанное положение оленя приводит к тому, что крестьянин через несколько минут идёт к другому кусту, добывает другое количество еды, и партии расходятся. Ловить это пришлось сверкой состояния мира, объектов, поиска пути, выбора целей и генератора случайных чисел.

Поверх UDP команда сделала свою обработку порядка сообщений, обнаружение потерь и повторную отправку.

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

@make_game
  • 🔥 11
  • ❤ 1
Post #1995 1.24K
Человек, который шесть лет разбирает чужие портфолио по игровому интерфейсу — больше сотни портфолио и уже не сосчитать сколько HUD внутри них, — свёл повторяющиеся проблемы к четырём.

Первая — на экран тащат всё. Валюта нужна на виду только тогда, когда её прямо сейчас можно потратить; в остальное время она может всплывать и гаснуть. Исключение он приводит сам: души в соулслайке, где потеря денег после смерти и есть часть эмоциональной петли.

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

Третья — HUD рисуют в тишине и покое, а работать ему приходится в самый громкий момент. Проектировать надо под взрыв, летящие цифры урона и крик «поднимите меня» в наушниках. Босс-файт тут крайний случай: невидимый кулдаун или незамеченный лежачий союзник стоят всего боя.

Четвёртая — размер. Он сравнивает HUD первой Demon's Souls, огромный, и Elden Ring, где за годы в том же жанре всё ужалось, а при полном здоровье HUD со временем гаснет целиком. Ужимать стоит всё, кроме шрифта: его размер надо взять комфортный и потом ещё увеличить.

Четвёртый пункт вообще самый недооценённый — шрифт всегда мельче, чем кажется автору на его мониторе в полуметре от лица :)

@make_game
  • 👍 4
  • ❤ 2
Post #1994 1.23K
Читер с просвечиванием стен не может увидеть то, чего клиенту не отправили. На этой мысли построена серверная система видимости в VALORANT, и разбор Пола Чемберлена из Riot полезен любому, кто делает сетевую игру с авторитетным сервером.

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

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

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

@make_game
  • 👍 4
Post #1993 1.28K
Статья 2004 года, которую до сих пор скидывают всем, у кого пружины взрываются, а объекты проваливаются сквозь пол: «Fix Your Timestep!» Гленна Фидлера.

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

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

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

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

@make_game
  • ❤ 4
  • 👍 3
Post #1992 1.19K
Скриншотник. Правила прежние: показываем, над чем сидели неделю.

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

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

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

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

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

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

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

@make_game
Post #1990 1.2K
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
Post #1989 1.24K
Соло-разработчик выложил цифры по своей Paranormal Observation: Steam в октябре 2022 года, Switch в мае 2026-го, демо на GameJolt как ранняя проверка идеи.

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

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

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

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

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

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

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

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

@make_game
Post #1987 1.22K
Карта, погода, враги и лут получают по своему генератору случайных чисел, чтобы правка одной системы не ломала другую. Но если все они засеяны одним 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
Post #1986 1.23K
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
Post #1985 1.24K
Как собрать убедительный кристалл в Unreal, не платя за прозрачность.

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

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

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

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

@make_game
  • 🤣 2
Post #1984 1.21K
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
Post #1983 1.24K
В 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
Post #1982 1.29K
Автор ретро-шутера WOBLO пишет игру на Python с raylib, без движка: геометрия, коллизии, свет, редактор уровней, физика и сохранения свои. В девлоге после 90 дней молчания он рассказывает вещи, полезные независимо от того, на чём вы делаете игру.

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

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

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

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

@make_game
  • 👍 2
Post #1981 1.29K
Доминик Шаблевски описал, как перенёс свой 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
Post #1980 1.28K
Разброс внутри одного стримингового показа огромный: на картинке разбор Triple-I Initiative, где 35 игр, медиана прироста вишлистов за неделю 36 тысяч, у верхних десяти процентов 154 тысячи, у нижних — 996.

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

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

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

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

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

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

@make_game
  • ❤ 1
Post #1979 1.39K
Человек собрал себе Arch с Hyprland в теме «Аватара» и выложил его целиком — вместе с пятью играми на Python, которые лежат в том же репозитории и запускаются отдельно от всего окружения.

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

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

@make_game
  • 👍 5
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 →