Пара вещей, которые должен знать игровой программист
-
В std::move никто никуда не двигается
-
В undefined behavior поведение вполне себе определено, просто крашит игру
-
В GameObject нет ни игры ни объекта, а только баги и куча антипаттернов
-
Memory leak detector сам протекает
-
В PhysicsEngine физики столько же, сколько в сказке про Колобка
-
Из 8 часов работы 6 уходят на попытку собрать билд после мержа со стейблом.
-
В ProfileMode тормозит всё кроме профайлера
-
В retrospective meeting обсуждают, почему всё плохо, но оставляют как есть.
-
В debug билде багов меньше чем в релизном и выше фпс
-
Crossplatform сборка игры компилится только на одной машине, в опеделенном углу офиса, на одном компиляторе, в полнолуние
-
В LevelStreaming грузится весь мир сразу
-
В С++ из игрового языка только умение играть на нервах разрабов
-
Порефакторенный легаси код начинает мстить через неделю
-
В tech debt backlog долгов больше, чем фич. Но фичи делают, а долги нет
-
В EntityComponentSystem нет ни системы, ни сущностей ни компонентов, только хаос данных и сотни несвязанных вызовов
-
QA репортит баг где описано всё, кроме того, как это воспроизвести.
-
code review фидбек приходит, когда ты уже пушнул в релиз ветку.
-
«Красивая оптимизация» от тимлида обычно роняет фпс.
-
В MVP нет ни минимального, ни жизнеспособного, ни продукта
-
В огне deadline’a умирает всё, включая атмосферу в команде.
-
В burnout prevention week нет ни отдыха, ни профилактики — просто ещё один спринт.
-
В релизном билде не работает ничего, кроме багов
-
Если прилетело «Не бойтесь, это приорити 3» — это обычно уже пожар на проде.
-
Сert submission билд обычно содержит больше 200 багов, которые захачены костылями
-
В TRC/XR/LOT правил больше, чем статей в Уголовном кодексе (у Сони 450)
-
В Xbox GDK — GDK расшифровывается как «Где Документация, Карл?»
-
В cert blocker баг возникает только у тестеров Sony в полнолуние, но чинить надо вчера.
-
В server tick тикать должен сервер, но тик начинается у тебя.
-
Prediction system ничего не предсказывает, но всё ломает.
-
В navmesh всё отлично, пока AI не решит пойти в стену.
-
В smart object system объекты умнее персонажей.
-
В decision making system решений нет, только if-else.
-
Finite State Machine умеют висеть, застревать, спотыкаться, плавать и падать
-
В «маленьком изменении уровня» обычно 200 перетаскиваний и 500 новых багов.
-
В «это просто добавить кнопку» обычно зарыто 3 дня UI-ада и конфликт с рендером.
-
«почему так дорого?» ревью приходят от людей, которые не покупали игру
-
«это всё Unity виноват!» ревью приходят, даже если игра написана на своем движке.
-
В audio system всегда есть звук, который никто не слышит (звук silence).
-
В FMOD event триггерится либо никогда, либо всегда, и описывается через флоат поле
-
Sound designer обычно присылает таски в стиле «Нужно чтобы звук был чуть живее» и скриншот — это вся таска, если что.
-
Widget UI система ничего не рендерит, но занимает 40% CPU.
-
One-click deploy работает только у того, кто его писал, на его машине, в полнолуние.
-
В Unique string ID системе ID строк дублируются, а строки теряются.
-
non-latin font обычно ломает весь UI.
-
В RTL text всё отображается справа… и снизу.
-
В voiceover актёр говорит 5 секунд, а персонаж молчит 10.
-
С письмом от продюссера «это не баг, это перевод такой» лучше не спорить.
-
В template metaprogramming нет ни меты, ни програмирования — только compile error простыня на 3 экрана.
-
В таске “добавим std::any в Х” потеряли тип, отладку и производительность.
-
В коде движка больше всего коментов, которые начинаются с // TODO.
-
Виртуальные деструкторы убивают не объекты, а производительность и иногда билд.
-
В third-party libs всё несовместимо, особенно лицензии.
-
assert(false && «should not happen») случается пару раз в день.
-
Самый частый резолв при закрытии бага — CNRD (Cant reproduce in debug|Этот баг не повторяется в дебаге)
-
В save state паттерне можно потерять только несколько часов своей жизни
-
В constexpr ты компилируешь во время компиляции
-
«Сейчас перепишем под ECS.» обычно заканчивается тем, что у вас разломан движок, зато есть презентация на 60 слайдов.
-
«Мы используем свою memory arena.» Теперь никто не знает, почему краш — даже Valgrind.
-
«Включили поддержку C++20.» Прод билд теперь не собирается ни на одном из компиляторов
-
RAII решает всё, но создаёт циклы, которые никто не может починить
-
Инкапсуляция хорошо, но public-поле спасает релиз за 10 минут до дедлайна
-
Сигналы и слоты удобны, но баги теперь воспроизводятся рандомно
-
Мы не используем goto, но switch-case на 800 строк — норм
-
Если баг невозможен — он всё равно случится. В релизной сборке с разным стектрейсом
-
Строчки, помеченные //TMP живут дольше чем ты работаешь в студии
-
Чем ближе майстоун, тем чаще нейтрино пролетают через планки памяти и ломают биты
-
Если баг невозможно воспроизвести — игроки будут воспроизводить его каждый раз.
-
Фича, сделанная за ночь до майлстоуна, попадает в трейлер.
-
Если ты меняешь что-то «всего в одном месте» — ломается в трёх других.
-
Каждый рефакторинг удаляет кусочек истории
-
Ты знаешь, что можно лучше. Но лучше никто не просит.
-
Мы перенесли сборку в CI, теперь оно ломается само без участия программера
-
Когда-нибудь ты допишешь документацию
-
Всё, на что ты потратишь больше недели, заменят ассетами с маркета.
-
Ninja хотфикс ломает две стабильных ветки.
-
Любое ускорение загрузки приводит к трем новым таскам от художников
-
Никто не знает, как работает тот легаси код. Но если ты его трогаешь — ломается весь билд.
-
Всё, что можно было унаследовать неправильно — уже унаследовано
-
Если кто-то сказал “я почистил код” на митинге — готовься к неделе гейзенбагов
-
Фича, на которую закладывали полгода, будет отключена перед релизом из-за “низкого приоритета”.
-
Чем глупее идея, тем выше шанс, что она попадёт в релиз.
-
Техдолг — это просто еще одно вежливое название для чьих-то непофикшных багов.
-
Если билд внезапно стал стабильным, значит собрали дебаг
-
Ты не можешь уволить человека, который написал этот ад. Потому что он ушёл сам — два года назад.
-
Каждый “простой фикс” от художника отнимает день у программиста
-
Ты переписал систему ивентов, чтобы она стала понятной. Теперь её не понимает никто, включая тебя.
-
Когда тебе говорят “ничего критичного” — это всегда таска уровня «приорити 3», см. п22.
-
Если менеджер просит “по-быстрому”, значит он уже продал фичу начальству.
-
Соотношение mgr/prg кореллирует с вероятностью получить на релизе продукт, а не игру. (Тонко, но mgr обижаются)
-
Художник не знает, как работает шейдер. Геймдизайнер не знает, как работает баланс. Продюсер не знает, как работает игра.
-
Никакие баги так не страшны, как фича, описанная на кухне словами “ну ты сам поймёшь, что я имел в виду”.
-
Если билд собирается и запускается — это не значит, что он работает
-
Ты сделал всё, как было написано в таске. Но прав был тот, кто сделал всё “на глаз”. Потому что его меньше отвлекали.
-
Если патч выходит в пятницу. Значит, в выходные надо свалить подальше и отключить телефон.
-
Свет пробивается сквозь бетон, пули — нет. Это и есть физика в играх.
-
Весь проект держится на 3 людях, которых менеджмент не слушает.
-
“Ретро-стиль” — это когда художник не умеет в лайтмап и его работу делает рендер-программист.
-
Чем больше ты говоришь, что это плохая идея, тем выше шанс получить её в виде таски.
-
Вероятность увольнения прямо пропорциональна надежности системы, которую ты сделал.
Автор: dalerank