GameDev: разработка игр
الذهاب إلى القناة على Telegram
Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов Разместить рекламу: @tproger_sales_bot Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
إظهار المزيد7 635
المشتركون
+124 ساعات
-127 أيام
-2930 أيام
جاري تحميل البيانات...
القنوات المماثلة
سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
أغسطس '26
أغسطس '26
+53
في 0 قنوات
يوليو '26
+80
في 6 قنوات
Get PRO
يونيو '26
+83
في 1 قنوات
Get PRO
مايو '26
+85
في 1 قنوات
Get PRO
أبريل '26
+61
في 0 قنوات
Get PRO
مارس '26
+118
في 6 قنوات
Get PRO
فبراير '26
+92
في 1 قنوات
Get PRO
يناير '26
+90
في 6 قنوات
Get PRO
ديسمبر '25
+86
في 7 قنوات
Get PRO
نوفمبر '25
+133
في 4 قنوات
Get PRO
أكتوبر '25
+97
في 0 قنوات
Get PRO
سبتمبر '25
+91
في 2 قنوات
Get PRO
أغسطس '25
+115
في 1 قنوات
Get PRO
يوليو '25
+82
في 0 قنوات
Get PRO
يونيو '25
+78
في 2 قنوات
Get PRO
مايو '25
+90
في 1 قنوات
Get PRO
أبريل '25
+146
في 2 قنوات
Get PRO
مارس '25
+139
في 2 قنوات
Get PRO
فبراير '25
+90
في 1 قنوات
Get PRO
يناير '25
+72
في 0 قنوات
Get PRO
ديسمبر '24
+67
في 1 قنوات
Get PRO
نوفمبر '24
+71
في 2 قنوات
Get PRO
أكتوبر '24
+74
في 1 قنوات
Get PRO
سبتمبر '24
+67
في 1 قنوات
Get PRO
أغسطس '24
+72
في 2 قنوات
Get PRO
يوليو '24
+71
في 1 قنوات
Get PRO
يونيو '24
+63
في 2 قنوات
Get PRO
مايو '24
+60
في 1 قنوات
Get PRO
أبريل '24
+60
في 0 قنوات
Get PRO
مارس '24
+68
في 0 قنوات
Get PRO
فبراير '24
+49
في 0 قنوات
Get PRO
يناير '24
+69
في 0 قنوات
Get PRO
ديسمبر '23
+80
في 2 قنوات
Get PRO
نوفمبر '23
+54
في 0 قنوات
Get PRO
أكتوبر '23
+72
في 2 قنوات
Get PRO
سبتمبر '23
+64
في 0 قنوات
Get PRO
أغسطس '23
+80
في 0 قنوات
Get PRO
يوليو '23
+63
في 0 قنوات
Get PRO
يونيو '23
+64
في 0 قنوات
Get PRO
مايو '23
+62
في 0 قنوات
Get PRO
أبريل '23
+74
في 0 قنوات
Get PRO
مارس '23
+97
في 0 قنوات
Get PRO
فبراير '23
+103
في 0 قنوات
Get PRO
يناير '23
+170
في 0 قنوات
Get PRO
ديسمبر '22
+192
في 0 قنوات
Get PRO
نوفمبر '22
+212
في 0 قنوات
Get PRO
أكتوبر '22
+158
في 0 قنوات
Get PRO
سبتمبر '22
+181
في 0 قنوات
Get PRO
أغسطس '22
+235
في 0 قنوات
Get PRO
يوليو '22
+297
في 0 قنوات
Get PRO
يونيو '22
+206
في 0 قنوات
Get PRO
مايو '22
+272
في 0 قنوات
Get PRO
أبريل '22
+200
في 0 قنوات
Get PRO
مارس '22
+194
في 0 قنوات
Get PRO
فبراير '22
+299
في 0 قنوات
Get PRO
يناير '22
+138
في 0 قنوات
Get PRO
ديسمبر '21
+86
في 0 قنوات
Get PRO
نوفمبر '21
+92
في 0 قنوات
Get PRO
أكتوبر '21
+129
في 0 قنوات
Get PRO
سبتمبر '21
+136
في 0 قنوات
Get PRO
أغسطس '21
+476
في 0 قنوات
Get PRO
يوليو '21
+674
في 0 قنوات
Get PRO
يونيو '21
+491
في 0 قنوات
Get PRO
مايو '21
+4 020
في 0 قنوات
Get PRO
أبريل '21
+4 007
في 0 قنوات
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 27 أغسطس | +1 | |||
| 26 أغسطس | +4 | |||
| 25 أغسطس | +1 | |||
| 24 أغسطس | 0 | |||
| 23 أغسطس | +2 | |||
| 22 أغسطس | +1 | |||
| 21 أغسطس | +3 | |||
| 20 أغسطس | +2 | |||
| 19 أغسطس | +2 | |||
| 18 أغسطس | +1 | |||
| 17 أغسطس | +2 | |||
| 16 أغسطس | +1 | |||
| 15 أغسطس | +1 | |||
| 14 أغسطس | +1 | |||
| 13 أغسطس | +3 | |||
| 12 أغسطس | +3 | |||
| 11 أغسطس | +3 | |||
| 10 أغسطس | +2 | |||
| 09 أغسطس | +3 | |||
| 08 أغسطس | +1 | |||
| 07 أغسطس | +3 | |||
| 06 أغسطس | +1 | |||
| 05 أغسطس | +2 | |||
| 04 أغسطس | +2 | |||
| 03 أغسطس | +3 | |||
| 02 أغسطس | +4 | |||
| 01 أغسطس | +1 |
منشورات القناة
Epic выложила хотфикс 5.8.2 к Unreal Engine 25 августа. Новых возможностей в нём почти нет, зато закрыт длинный список падений редактора: Sequencer роняли завершение работы, вкладка со ссылками на уничтоженный объект, привязка трека к актору вне уровня, конвертация привязки в spawnable-актора и перекомпиляция блюпринта во время отслеживания свойств. Отдельно исправлены падения при сборке Nanite Assemblies с Keep Triangle Percent меньше ста и недетерминированность такой сборки.
Самое заметное по числам — в транскодировании видео для Tiled Mipmap Video Player. Подготовка кадра резервировала около 20 ГБ видеопамяти на один кадр 16K вместо нужных 1,4 ГБ, память кончалась и подвешивала видеокарту. Теперь транскодер смотрит, сколько памяти свободно на старте задачи, и ограничивает число одновременно обрабатываемых кадров; долю запаса можно подкрутить настройками
TmvMedia.Transcode.MediaPlayer.MemoryBudgetFraction и TmvMedia.Transcode.FileSequence.MemoryBudgetFraction.
Из практического: целевой Android SDK поднят до API 36, в сетевой физике починили передачу TickOffset на физический поток, когда сервер не прислал ни одного реплицированного состояния, а PCG избавился от гонки при рассылке небезопасных делегатов вне игрового потока.
Тем, кто собирает на маке, стоит подождать: известная проблема UE-377426 ломает компиляцию на Xcode 26.4 и новее, Epic рекомендует оставаться на 26.1.
@make_game| 2 | WebGPU в Unity перестал быть экспериментальным: начиная с 6000.6 это полноценный графический бэкенд с обычной поддержкой, объявила команда Web Graphics.
По умолчанию он всё равно выключен. Включается вручную: снять Auto Graphics API в настройках плеера, добавить WebGPU в список и поднять наверх, оставив ниже WebGL 2 как запасной вариант. Уберёте WebGL 2 — проект просто не запустится там, где WebGPU нет.
Ради чего это: вычислительные шейдеры в браузере, а с ними GPU Resident Drawing, отсечение невидимого на GPU, апскейлер STP, VFX Graph на миллионы частиц, Adaptive Probe Volumes и скиннинг на GPU. На WebGL всё это было недоступно.
Ловушка при выкладке: WebGPU браузер отдаёт только в защищённом контексте, так что сборка по обычному HTTP или открытая файлом молча откатится на WebGL 2.
@make_game | 582 |
| 3 | Мыши с частотой опроса выше килогерца роняли частоту кадров в играх на Godot под Windows, и на 8 кГц с захваченным курсором она падала ниже одного FPS. Юго Локурсьо разобрал причину и починку.
Windows шлёт приложению и обычные события WM_MOUSEMOVE, и сырой ввод WM_INPUT одновременно, даже когда курсор захвачен. Отказаться от обычных нельзя — сломается перетаскивание окна за заголовок. Поэтому сырой ввод теперь читается пачками и не рассылается сразу, а обычные события движения обрабатываются не чаще одного раза за кадр.
На Ryzen 9 9950X3D и RTX 5090 захваченная мышь на 8 кГц без вертикальной синхронизации дала 1703 FPS вместо «меньше одного». На картинке другой замер, с видимым курсором на 4 кГц: 1% low вырос в 45,8 раза.
Фикс уже в 4.7.2, в 4.7.1 его нет. Linux на Wayland и X11, как пишет автор, эта проблема обычно не задевает.
@make_game | 776 |
| 4 | За первые две недели страницу How Many Dudes? в Steam добавили в желаемое 422 раза. По ранним меркам игру можно было закрывать — а к релизу вишлистов набралось 308 тысяч, и за три недели после выхода продалось 242 тысячи копий.
Крис Зуковски разобрал, что именно сработало. Два удачных YouTube Shorts принесли 769 вишлистов: приятно, но алгоритм Steam от этого не проснулся.
Проснулся он от демо. Его выложили 16 декабря, и оно попало в раздел New & Trending Free на зимней распродаже. Между Рождеством и Новым годом почти никто ничего не выпускает, вытеснять с витрины некому: игра провисела там не меньше 24 дней и собрала 36 946 вишлистов.
Делали её семь человек ровно год — после пятилетней разработки Crashlands 2.
@make_game | 821 |
| 5 | Интерактивность в glTF до сих пор жила вне файла: геометрия, материалы и анимации едут в ассете, а поведение каждый движок реализует у себя заново.
Khronos отправил на ратификацию расширение KHR_interactivity для glTF 2.0. Оно кладёт поведение прямо внутрь ассета в виде графов, переносимых между платформами. Babylon.js уже проигрывает такие файлы, Needle Tools помогли сделать экспортёр, который выгружает интерактив прямо из Unity Visual Scripting, у Magic Leap готов рантайм, а Android XR обещает воспроизведение через Jetpack XR SDK.
Рядом до статуса release candidate дошло расширение для гауссовых сплатов — само оно описывает несжатое представление, готовое к отправке на видеокарту; сжатие и анимация сплатов пока живут отдельными предложениями. В превью glTF 2.1 — сцены из нескольких ассетов и потоковая загрузка с полной совместимостью с 2.0.
Оттуда же цифра из опроса Khronos про шейдеры, больше 400 разработчиков: главной болью назвали отладку и профилирование шейдеров, 53 процента.
@make_game | 835 |
| 6 | Геймдев перегрет. Куда идти 3D-моделлеру?
На рынке сотни Junior и Middle 3D-артистов, дерущихся за тестовые в студиях. А рядом есть сфера АГР (архитектурно-градостроительные решения), где заказчики готовы платить десятки тысяч рублей за одну модель, потому что делать по ГОСТам просто некому.
Как начать зарабатывать на АГР моделях для застройщиков — разбираем на бесплатном вебинаре от Академии Playestate.
👉 Линк на регистрацию | 849 |
| 7 | В приключенческих играх Sierra можно застрять навсегда: забыл крем от загара в Лос-Анджелесе, сел на лайнер — и через несколько игровых дней умираешь на плоту, вернуться нельзя. Игра продолжает принимать ввод, просто выиграть уже невозможно. LucasArts таких ловушек не делала принципиально.
Кто-то написал анализатор, который находит эти состояния сам. Он декомпилирует скрипты движка SCI, абстрактной интерпретацией строит граф переходов между комнатами с условиями, перемещений предметов и записей сюжетных флагов, выводит охранные условия, проверяет их на модели и вшивает обратно в игру: переход в тупик просто перестаёт срабатывать.
Ничего про конкретную игру внутри не зашито: стартовая комната, комната победы и сигнал смерти выводятся из кода самой игры. Проверено на четырёх играх одним и тем же кодом: Leisure Suit Larry 2 и King's Quest IV на SCI0 1988 года, King's Quest VI и Laura Bow 2 на SCI1.1 1992 года.
Мысль на вынос: невозвратные переходы ищутся обходом графа состояний, а не плейтестом.
@make_game | 843 |
| 8 | Лучший текст о том, почему в играх всё так долго: «The Door Problem» Лиз Ингланд. Тысяча двести слов про одни только двери.
Начинается с вопроса, который кажется пустяковым: какие двери в игре открываются, а какие нарисованы для вида. Дальше вопросы множатся. Как игрок отличит одну от другой — цветом, ручкой, мусором перед проходом? Дверь заперта навсегда или откроется по сюжету? Чем открывается: подходом, кнопкой, ключом, взломом, головоломкой? Могут ли из неё выходить враги и запирается ли она за ними?
Потом добавляется кооператив: когда дверь открывается, если игроков двое, и не запрёт ли один другого снаружи. На больших уровнях подключается подгрузка: оставшийся за дверью игрок может оказаться в выгружаемом куске карты. И размер: дверь должна пропускать игрока, союзников, врагов и крупного мини-босса.
В конце автор перечисляет, кого эта одна механика касается: дизайнера, художника, аниматора, звукорежиссёра, программиста поведения, сетевого программиста, тестировщиков, локализацию и поддержку.
Полезно показывать всем, кто спрашивает, почему простая фича не делается за день.
@make_game | 871 |
| 9 | Разработчик 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 | 857 |
| 10 | Детерминированная симуляция — это когда одна и та же последовательность входных данных всегда даёт один и тот же результат. Из неё получаются честные реплеи, откат состояния и возможность доиграть матч после падения сервера.
Рик Хоскинсон рассказал, как это делали в League of Legends. Работа заняла почти год и стала основой восстановления матчей на ранних турнирах.
Главное решение: не пытаться сделать детерминированной всю память игры. В зону гарантии вошло только состояние, влияющее на игровой процесс, остальное осталось как есть. Сетевые входы записываются каждый кадр в порядке получения, а отдельная система умеет писать, воспроизводить и сверять состояние по кадрам.
Самым тяжёлым местом оказалось время. В коде нашлось шесть разных способов узнать, который час, и объединение их в единые часы переписывали почти полгода. Пришлось выкинуть обращения к процессорному времени и работу с долями кадра, а защиту от длинных кадров переделать. От жёсткого фиксированного шага при этом отказались: сервер меряет реальную длину кадра с ограничением сверху и записывает тайминг вместе с входами.
Полезная деталь для тех, кто будет повторять: малейшее расхождение между двумя симуляциями со временем накапливается и разносит их полностью.
@make_game | 870 |
| 11 | Восемь игроков, полторы тысячи юнитов, модем 28,8 килобита и Pentium 90. Доклад с GDC 2001 про сетевой код Age of Empires — пятнадцать страниц о том, как это вообще заработало.
Передавать положение тысяч юнитов по такому каналу невозможно, поэтому передаются только команды игроков, а симуляция крутится одинаково на всех машинах. Отсюда главное требование: результат должен совпасть до последнего бита у всех.
Именно тут начинается интересное. Расхождение проявляется не сразу: чуть иначе посчитанное положение оленя приводит к тому, что крестьянин через несколько минут идёт к другому кусту, добывает другое количество еды, и партии расходятся. Ловить это пришлось сверкой состояния мира, объектов, поиска пути, выбора целей и генератора случайных чисел.
Поверх UDP команда сделала свою обработку порядка сообщений, обнаружение потерь и повторную отправку.
Отдельно ценны замеры на живых игроках: задержка до 250 миллисекунд обычно не замечается, от 250 до 500 играбельна, выше 500 уже мешает. Эти цифры с тех пор никуда не делись.
@make_game | 923 |
| 12 | Человек, который шесть лет разбирает чужие портфолио по игровому интерфейсу — больше сотни портфолио и уже не сосчитать сколько HUD внутри них, — свёл повторяющиеся проблемы к четырём.
Первая — на экран тащат всё. Валюта нужна на виду только тогда, когда её прямо сейчас можно потратить; в остальное время она может всплывать и гаснуть. Исключение он приводит сам: души в соулслайке, где потеря денег после смерти и есть часть эмоциональной петли.
Вторая — путать быстрое с медленным. На HUD место тому, что меняется рывками: здоровье, мана, патроны. Опыт на первых уровнях растёт заметно, а к середине игры полоска не двигается часами — такую информацию он предлагает убирать во всплывающий виджет или встраивать в соседний элемент.
Третья — HUD рисуют в тишине и покое, а работать ему приходится в самый громкий момент. Проектировать надо под взрыв, летящие цифры урона и крик «поднимите меня» в наушниках. Босс-файт тут крайний случай: невидимый кулдаун или незамеченный лежачий союзник стоят всего боя.
Четвёртая — размер. Он сравнивает HUD первой Demon's Souls, огромный, и Elden Ring, где за годы в том же жанре всё ужалось, а при полном здоровье HUD со временем гаснет целиком. Ужимать стоит всё, кроме шрифта: его размер надо взять комфортный и потом ещё увеличить.
Четвёртый пункт вообще самый недооценённый — шрифт всегда мельче, чем кажется автору на его мониторе в полуметре от лица :)
@make_game | 911 |
| 13 | Читер с просвечиванием стен не может увидеть то, чего клиенту не отправили. На этой мысли построена серверная система видимости в VALORANT, и разбор Пола Чемберлена из Riot полезен любому, кто делает сетевую игру с авторитетным сервером.
Идея простая, а цена реализации — нет. Сервер отправляет клиенту данные о противнике, только если игрок реально может его видеть. Первый прототип проверял линию взгляда от каждого сетевого объекта к каждому игроку на каждом такте и съедал 50 процентов серверного кадра. В финальной версии — меньше 2 процентов: помогли дополнительные лучи к ограничивающему объёму, его расширение и проверка «куда объект попадёт через мгновение», а поверх этого — отсечение по видимости на стороне сервера.
Отдельная проблема, о которой обычно не думают заранее: объект появляется в зоне видимости с уже идущим эффектом. Riot хранит эффекты так, чтобы их можно было перезапустить и промотать к нужному моменту — например, разминирование продолжается с оставшегося времени, а не начинается заново.
И практика, которую стоит скопировать: боты в автотестах на каждой сборке специально входят в туман войны и выходят из него, а телеметрия меряет каждый запрос видимости с разбивкой по картам и персонажам.
@make_game | 922 |
| 14 | Статья 2004 года, которую до сих пор скидывают всем, у кого пружины взрываются, а объекты проваливаются сквозь пол: «Fix Your Timestep!» Гленна Фидлера.
Суть проблемы: если считать физику с шагом, равным длине кадра, поведение игры начинает зависеть от частоты кадров. На мощной машине одно, на слабой другое, а при просадке до пяти кадров объект успевает пролететь сквозь стену, потому что между шагами он телепортируется на полметра.
Решение разбирается по шагам. Сначала фиксированный шаг, например одна шестидесятая секунды. Потом полуфиксированный: большой промежуток режется на несколько мелких. Дальше — накопитель, который копит реальное время и тратит его целыми шагами симуляции.
Отдельно объясняется спираль смерти: если симуляция не успевает переварить накопившееся время, она набирает ещё больше долгов и окончательно тонет. Отсюда правило ограничивать число шагов за кадр.
Последний кусок — про плавность: состояние интерполируется между предыдущим и текущим шагом, повороты через сферическую интерполяцию. Тот же фиксированный шаг потом даёт воспроизводимость реплеев и детерминированный сетевой код.
@make_game | 1 056 |
| 15 | Скриншотник. Правила прежние: показываем, над чем сидели неделю.
В комментарии идут скриншоты, гифки, ролики, демки и ссылки на страницы игр. Отдельно интересно то, что обычно не показывают: редактор уровней, отладочная отрисовка коллизий, кривая графика профилировщика, инструмент, который вы написали для себя.
Если на этой неделе двигалось туго — покажите то, что почти работает, тут за это не ругают. Ссылки на свои каналы разрешены.
@make_game | 1 006 |
| 16 | jMonkeyEngine — открытый 3D-движок на Java, живущий с середины двухтысячных. Вторая бета версии 3.10.0 вышла 21 июля и целиком про то, что ломается на стыке движка с операционной системой.
Для тех, кто выпускается на настольные платформы: в зависимостях появилась Windows на ARM64, а 32-битные библиотеки удалены.
Дальше — набор багов, знакомых любому, кто делал полноэкранную игру. Починили восстановление захвата мыши и курсора после Alt-Tab и нажатия клавиши Windows. Смещение мыши больше не учитывается, пока окно не в фокусе. При удалении привязок клавиш очищаются зависшие состояния ввода, а виртуальные курки геймпада наконец ведут себя правильно. В редакторе такое не видно, у игрока проявляется сразу.
Ещё: исправлено масштабирование обработчиков сцены при высокой плотности пикселей, починен фатальный сбой на macOS при аппаратном размножении объектов, а генерация мип-уровней теперь предупреждает, если свалилась с видеокарты на процессор — раньше это молча стоило производительности.
Замеров в заметках нет, стабильность не обещана: это бета.
@make_game | 1 017 |
| 17 | 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 027 |
| 18 | Соло-разработчик выложил цифры по своей Paranormal Observation: Steam в октябре 2022 года, Switch в мае 2026-го, демо на GameJolt как ранняя проверка идеи.
Всплеск от стримеров, в основном от Insym, дал примерно 225 добавлений в список желаемого за день, лучший день продаж около 65 копий. За первый месяц Steam принёс примерно 400 копий, Switch около 200: на консоли не было ни маркетингового толчка, ни накопленного списка желающих, и вторым запуском порт не стал.
Выводы автора: и ранний доступ, и выход версии 1.0 стоит считать полноценными маркетинговыми событиями, скидка от 20% помогает превратить список желаемого в покупки, а ограниченные окна видимости в Steam лучше тратить в начале. Отдельно напоминает, что первые десять отзывов критичны для показа оценки, а ключи покупками не считаются.
Все числа округлены, сырых данных Steamworks и выручки в посте нет. Но даже так это редкий случай, когда кто-то показывает Switch-порт без прикрас :)
@make_game | 1 083 |
| 19 | Если ваш мультиплеер в GameMaker сделан на откате состояния — не обновляйтесь. В ветке 2026.100.0 эту подсистему удалили полностью, а в заметках просто советуют оставаться на 2026.0, пока не найдёте замену. Чем заменять, не сказано.
Остальное в ветке, последняя запись от 13 августа:
Появились layer_sequence_get_alpha() и layer_sequence_get_blend() — читают текущие цвет и прозрачность последовательности. Менеджер пакетов научился проверять и переустанавливать испорченные пакеты, из-за которых заготовка могла намертво застрять. Для Switch добавили настройку, отключающую поддержку сенсорного экрана.
Из правок в самом коде игр стоит знать три: инкремент внутри аксессора больше не срабатывает дважды при присваивании, draw_set_alpha() теперь влияет на отрисовку сразу, а не после ближайшего изменения масштаба объекта, и оператор ^= в компилируемом режиме перестал считать входные значения логическими.
Остальное — редактор: вкладки, рабочие области, вставка текста, набор иероглифов. Разделение окон на части готовят, но в интерфейсе ещё не включили.
@make_game | 1 098 |
| 20 | Карта, погода, враги и лут получают по своему генератору случайных чисел, чтобы правка одной системы не ломала другую. Но если все они засеяны одним 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 | 1 090 |
