Надгробья современного геймдева. Добрососедское
Как гласит старинная скандинавская максима, «С соседями своими в мире живи, чтобы не сожгли дома твоего».
К сожалению, даже в такой критически важной мелочи, как добрососедское сосуществование с иным софтом, в геймдеве (да и, чего греха таить, в целом по IT) наблюдается хронический непроглядный швах.
В лучшем случае из конфликта между двумя программными продуктами получается внеочередной товарищеский матч между техподдержками этих программ, по виду спорта «футбол пользователем».
В худшем — тот софт, который половчее, устраивает показательную децимацию компьютеру пользователя (и, by extent, софту-оппоненту), ибо нефиг скрещивать лучи.
Формально, окончательное решение добрососедского вопроса перекладывается… на Минимальные Системные Требования. Потому, что МСТ должно хватать на работу ОС + приложения — и оставаться ещё капельку на всё остальное.
Или на инструкции по установке. Поставил наше приложение — удали все чужие.
Или на FAQ на сайте игры. Поставил наше приложение, но оно не работает? Удали все чужие.
На что угодно, кроме здравого смысла и умеривания своих неадекватных хотелок.
Да тьфу, кто вообще этим занимается?! Чего ради, чего для?
Каждый раз, когда очередной убелённый сединами самопровозглашённый Поборник Правильного Программирования начинает мне доказывать, что я ничего не понимаю в принципах построения ПО (и UX в частности), — я начинаю нервно хихикать.
Нет, правда.
Поборники Правильного Программирования тратят своё несомненно бесценное время на то, чтобы ходить среди нас, смертных.
Учить нас, как кодить правильно.
Припадать устами к избранным стандартам организации разработки при каждом удобном случае.
С пеной у рта и иных частей тела отстаивать наиудивительнейшие принципы, подходы и парадигмы, типа «неприменимости законов экономики реального мира к программному продукту», «пользователь должен гнуться под код, а не код под пользователя!», «хороший айтишник обязан быть экспертом по всему сразу! По фуллстэку в каждые руки на каждую позицию!», «только строгая типизация и массовые расстрелы помогут писать качественный код!», «ПМ не человек!», etc, etc, etc…
…ооооох…
К сожалению ли, к счастью ли, в ходе неудержимой борьбы с ветряными мельницами наш стартап «дон Кихот & осёл Пансы» совершенно утрачивает сцепление с реальностью…
…так рождается программный продукт, который ведёт себя, как совершенно не порядочный сосед.
В качестве затравки, я приведу довольно простенький пример.
Вам приспичило купить The Sims 4. Ничего криминального… пока что.
Вам приспичило купить The Sims 4 в Steam. Уже интересно, но терпимо.
Вам приспичило установить The Sims 4, купленный в Steam. И, начинаем парад-алле!
На Вашем компьютере уже установлен Steam.
Вы пытаетесь установить The Sims 4.
Стимовский «установщик» вместе с игрой протаскивает Вам на жёсткий диск установщик Origin.
Установщик Origin после первого же запуска вписывается в автозагрузку (вернее, в список автозапускаемых сервисов). И ждёт.
А, да, и если Вы поиграли и закрыли и Steam, и «симсов», — типа-сервис Origin останется сидеть в памяти.
Вопрос: как домохозяйке, которую угораздило купить симсы в стиме, избавитсья от ориджина в автозагрузке (и в памяти по завершении игры)?
Алло, Electronic Arts? На дворе 2022 год, пора бы услышать про синхронизацию списка игр между платформами, если вам так уж хочется, чтобы клиент и вна Origin пришёл!
И/или про отдельный исполняемый файл для Steam, если по какой-то причине вам приспичило диверсифицировать доход через кусок пользовательской базы Steam.
Или ещё про что-нибудь, что снимет с конечного пользователя бремя по очистке оперативки от мусора, чувствующего себя как дома.
Мелочь, скажете вы. Нет. Мне не жалко пары мегабайт оперативки для приложения, которое мне нужно от силы раз в две недели, когда захочется чего-нибудь помодить.
Но.
Чем дальше в XXI век — тем больше появляется приложений-свиней, решительно не готовых мириться с тем, что пользователю они не нужны 24/7.
Вот что творится у меня в штатном списке автозагрузки сейчас:
Who’s that man, mr. Smitters?
Нет, мне не нужен гайдзинолаунчер круглосуточно, я не настолько люблю Crossout.
Нет, мне не нужен… что бы это ни было, я уже успел забыть (и, наверное, удалить) Lantern.
Loudplay? Какой Loudplay?
Скайп? Нет, спасибо. Раз в два месяца отдать файлы. Чаще не нужно.
Телееееега… аналогично.
И это после многократного пылесосинга реестра. Я устал пылесосить себе реестр от любителей заложить очередной авторан замедленного действия.
В Службы я даже не буду заглядывать, чтобы не портить себе настроение.
Потому, что в среднем каждая третья макака рано или поздно решает, что штатный список автозагрузок — это для слабаков. Поэтому сделаем наш автозагрузчик Слуууууужбой!
Ну хоть в Планировщик Задач долбиться перестали… вроде бы… и на том спасибо.
В зависимости от того, насколько зажрался конкретный разработчик, каждая запись в автозагрузке — это от 10 мегабайт оперативной памяти до 1 гигабайта.
Я не шучу про гигабайт. Просочившийся в автозагрузку GOG Galaxy вполне может выжрать порядка гигабайта и застрять, аки Винни-Пух в Кролике.
Да что GOG Galaxy!
Старожилы, возможно, вспомнят какие-то дистрибутивы игр для WinXP, непонятно зачем устанавливавшие втихую эппловский Bonjour, который в те далёкие времена мог вызвать плоходиагностируемый сбой работы проводного Интернета…
Просто подумайте.
Игра (!!!) ставит вместе с собой совершенно ненужный фреймворк, который мало того, что память жрёт, так ещё и сбои вызывает.
Зачем так делать? Чтобы в случае багов с игрой послать игрока в техподдержку Apple?!
Но если бы только это…
Вы знаете, я ненавижу Viber.
Фичевое наполнение Viber производится людьми, у которых сцепление с реальностью могло бы быть и получше.
Если же у них с этим всё ОК — откуда тогда у этого приложения скверная манера регулярно и без спросу открывать какую-то чудь в браузере?
«Смотри, мы обновились! Почитай чейнджлоги!»
«Смотри, новая фича, почитай о ней в нашем блоге!»
«Смотри, это лысый орёл! Смотри, это совёнок Хути! Смотри, они дерутся!»
Кхм…
Какой-то опции отключить этот бессмысленный флуд в десктопном приложении, насколько я знаю, всё ещё нет.
Только браузерный плагин, блокирующий попытки открыть любую связанную с Viber страницу, спасает от этой кишечной немочи.
(или пара записей в hosts, перенаправляющих любые попытки посмотреть вайберовский блог на порнхаб. Дети, так не делайте)
Интересной разновидностью этой болячки является открытие страницы с формой-опросником (как правило, не на языке пользователя) по факту удаления программы.
Алло! Если я уже удалил вашу программу — я ТОЧНО решил, что пользоваться ей не буду, и не горю желанием делиться с вами причиной!
Потому, что если бы я хотел поделиться причиной — я бы написал в техподдержку, например!
Может, пора подумать, почему пользователю проще удалить вашу программу, чем написать в вашу техподдержку?
Да, про святую уверенность каждого приложения, что ИМЕННО ОНО должно оказаться поверх всех окон, я только пройду вскользь.
Я хочу запустить, скажем, Блокнот, лаунчер и копию игры. Бикоз мультитаскинг из мэйнстрим.
Пока всё это грузится, я хочу, скажем, бегло полистать вики по игре, чтобы вспомнить, через какое место я хотел что-то замодифицировать в ней.
Я начинаю читать вики, нахожу нужную статью.
В это время Блокнот «вспоминает», что он наконец загрузился, и всплывает поверх всех окон.
Ругаюсь в усы, альт-табаюсь обратно на вики.
Два абзаца спустя, лаунчер заканчивает хрустеть хардом и тоже всплывает поверх всех окон.
Ругаюсь в усы, альт-табаюсь обратно на вики. Почему-то попадаю на Блокнот. Ещё ругаюсь, ещё альт-табаюсь.
К середине статьи — чу! запустилась игра! поверх всех окон!
Кыш, итить твою! Альт-таб, альт-таб, альт-таб, да чтоб тебя… Down, boy, dammit!
(кто бы мог подумать — адепты Мультитаскинга Неделимого не могут написать софт, который при работе с ним не мешает мультитаскать, даже в таких базовых вещах…)
Но могло быть и хуже!
Playnite, помнится, грешит тем, что ворует фокус каждый раз, когда требуется действие пользователя.
Т. е. я запускаю, скажем, импорт библиотеки в одном окне — и листаю книжку во втором.
В среднем, раз в пять минут книжка перестаёт листаться. Потому, что Playnite по какой-то причине не может найти очередную игру. И забирает фокус на себя. Потому, что ИМЁООООРДЖЕНСИ! Я ИГРУ НЕ МОГУ РАСПОЗНАТЬ! ПОМОГИТЕ! ЕГГОГ! ЕГГОГ!
Тьфу… стыдоба.
Я не хочу даже разбираться, чей это баг — самого Playnite, плагина-интеграции библиотеки или аж самого дотнета.
Такого. Быть. Не. Должно. Совсем.
Приложение должно знать своё место.
И не воровать фокус, если фокус явно не на нём.
Но это слишком сложная задача для программирования в XXI веке — не воровать фокус без особо большой нужды.
Мы же свиньи.
После нас хоть потоп.
Все ваши ресурсы принадлежат нашему приложению.
Хуже воровства фокуса только незапланированные дети неожиданные оповещения-тосты.
По мудрому замечанию держателей сайта grumpy.website, «самое подходящее время для показа оповещений — НИКОГДА».
Если приложению СРОЧНО нужна реакция пользователя (например, через пять минут плановая перезагрузка сервера) — старое доброе всплывающее окно поможет гиганту мысли.
В абсолютно всех остальных случаях — не лезь в фокус. Не наползай на чужое окно. Ты мешаешь.
Что забавно, вроде бы именно для таких гиперактивных приложений в Win10 выделили целый лоток именно для показа оповещений.
Но вот же жь подстава — им никто не пользуется почему-то. Кроме самой Windows. И то не всегда.
Мо-лод-цы.
Помнится, в плане незапланированных оповещений особенно отличился GOG Galaxy (опять…).
В котором все оповещения, какие можно, по умолчанию включены.
Единого выключателя нет.
Извольте корячиться и выключать их поштучно, СЭЭЭЭЭЭЭЭР.
Если это пик UX по-польски — то я, пожалуй… хмммммммм… как бы это помягче сказать… воспользуюсь традициями UX другой нации.
Впрочем, что выключатели оповещений. Не могу удержаться от некоторого количества оффтопика, связанного с ещё одним удивительным решением CDPR.
В свежих обновлениях в GOG Galaxy добавили просто киллер-фичу. Сам Маркетинговый Молох с неё рыдает и умоляет перестать.
Как вы догадываетесь, в лаунчере GOG Galaxy есть страницы игр. Не магазинные. Внутрилаунчерные.
С кратким описанием, системными требованиями, списком достижений… ну, так, на случай, если пользователь забыл, что за игру он купил. Дело благородное.
Так вот, в крайних обновлениях на эти внутрилаунчерные страницы игр добавили рекламу.
Которая предлагает вам купить ту игру, страницу которой Вы просматриваете.
То есть, эта игра уже у Вас есть, иначе Вы не можете попасть на эту страницу. Но Вы всё равно подумайте, а не купить ли её ещё раз.
Понимаете абсурд ситуации?
obligatory_todd_howard_joke.txt
Неудивительно, что спустя два года разработки обычная папка с файлами справляется с организацией библиотеки игр лучше, чем этого лаунчер-многостаночник.
Не то чтобы я придирался. Нет.
Просто с нынешним трендом навьючивать на каждую игру по два-три лаунчера
плюс DRM от третьих лиц
плюс античит
плюс какую-нибудь YOBA-технологию типа переключения типа рендера на ходу (нужную полутора особо целеустремлённым фанатикам — Diablo 2 Refunded и ремастер Asterix & Obelix XXL, я о вас в первую очередь!)
плюс оверлеи плюс сохранение последних 30 секунд геймплея по хоткею плюс чаты
плюс чёрт знает что ещё…
…алло!
Я. Просто. Хочу. Поиграть. В. Игру.
Изредка, когда накатывает особо творческое настроение, я хочу запустить вашу игру и что-нибудь ещё.
И при этом не лазать лихорадочно по всякого рода инспекторам процессов в поисках именно того шлакоблока, который именно сейчас решил похрустеть моим жёстким диском и запить оперативкой.
ХВАТИТ ЖРАТЬ РЕСУРСЫ МОЕГО КОМПА!
Мало того, что игры сами по себе выходят крайне неоптимизированными — так ещё и в комплекте с ними идёт какое-то ну настолько бессмысленное барахло, просто «чтобы было»…
…но здравый смысл в геймдеве не ночует.
Любое приложение считает, что все ресурсы компьютера принадлежат ему и только ему.
Что всё внимание пользователя должно принадлежать ему и только ему…
…у меня иные бывшие были не такие чокнутые, как эти приложения. А чокнутых бывших, поверьте, у меня хватало…
Самое смешное, что ввиду убийственной комбинации кризиса производства и… кхм… религиознополитических трений на мировом уровне решать проблему приложений, ведущих себя как кошкодевки, экстенсивно — дозакупкой более мощного железа — уже не выйдет.
Разработчик!
Подумай прежде, чем внедрять очередного пожирателя ресурсов для 0.001% особо вокальной базы игроков!
Остальные 99.999% могут не смочь поиграть в твою игру!
И зарефандят.
Может быть.
Всё-таки… что в 76, что в 77 же кто-то всё ещё играет…
Впрочем, отдельным индивидам и Diablo Immoral нравится…, но об этом, возможно, мы поговорим в следующий раз.
Приятного вам дня.