данянул <3 @danyanull Channel on Telegram

данянул <3

@danyanull


Блог (щитпостинг) разработчика Null's Brawl и других проектов.
Мои подписчики лучшие.

Основной канал по NB: @nulls_ru

данянул <3 (Russian)

Добро пожаловать в канал "данянул <3"! Этот канал создан специально для поклонников разработчика Null's Brawl и других проектов. Здесь вы найдете увлекательные и интересные посты о разработке игр, а также эксклюзивные материалы и обновления от разработчика. Наша цель - поделиться информацией с нашими верными подписчиками и создать качественное сообщество любителей игр. Мы гордимся нашими подписчиками и приглашаем вас присоединиться к нам!
Кто мы? Мы - команда разработчиков, занимающихся созданием игр, в том числе популярной игры Null's Brawl. Мы стремимся к постоянному совершенствованию наших проектов и предлагаем нашим подписчикам уникальные возможности следить за нашей работой изнутри

Что это такое? Этот канал - ваш надежный источник информации о разработке игр, обновлениях и секретах проектов Null's Brawl и многих других. Мы делаем все возможное, чтобы предоставить вам самую свежую и актуальную информацию, а также создать уютное и дружелюбное сообщество единомышленников

Присоединяйтесь к нам уже сегодня и станьте частью увлекательного мира игр и разработки! Добро пожаловать в нашу команду! Подписывайтесь на основной канал по Null's Brawl: @nulls_ru

данянул <3

05 Feb, 23:50


А вы знали, что у ребят, продающих гемы и другие приколы в Brawl Stars начался сущий кошмар? Вот и я не знал, и не хотел бы...

Там какое дело: в Supercell ID не так давно начали вводить что-то вроде "Request Forgery Protection". По факту же — обычная подпись запроса, отдаленно напоминающая AWS Signature v4, ключ при этом лежит в почти открытом виде в самой игре😑

И вот на днях эта подпись стала обязательной, и сбила с толку многих людей, использующих SCID так или иначе. Одни люди начали искать помощи (я даже видел соответствующий запрос на Хабр Фрилансе, прикиньте!), другие — продавать непонятные "приватные" скрипты😅

Ну а я... мне иногда просто нечем заняться, и подобный повод что-то пореверсить я упустить не смог. В итоге за часа полтора получилось что-то такое: https://gist.github.com/daniillnull/78e8867c121f712523edd01f72c3c4f6 (да, оформлением кода я себя не утруждал)

Вот такие дела. Продавцы гемов теперь снова могут тыркать свое любимое SCID API, Supercell теперь снова будут придумывать как усложнить им жизнь (и может даже придумают что-нибудь получше!), а "продавцы скриптов"... ну, мне за вас просто стыдно, да.

данянул <3

08 Jan, 10:41


Звездный игрок? Нет, блин, MVP. Не так давно в чятике меня попросили рассказать, за что же именно данная плашка выдается, и что на нее влияет. Об этом никто раньше не говорил особо, так что вот вам пост🎉

Начнем с того, что во время боя в Brawl Stars собирается довольно много статистики о важных действиях: киллы, смерти, нанесенный урон по разным видам сущностей, количество отхила, а также более базовые вещи вроде общего количества собранных гемов или времени удержания мяча... много всего интересного, в общем! (а в последних версиях количество таких значений превышает 50)

Так вот, эту статистику вам конечно не показывают (хотя было бы прикольно!), но она напрямую используется для определения звездного игрока — разные значения складываются с разным весом (множителем), и звездным игроком становится тот, у кого общая сумма больше всех👍

В целом, общую формулу можно выразить так:

sum = (1000 * kills) - (200 * deaths) - (200 * gems_lost) + (3000 * ball_goals) + (0.1 * damage_0) + (0.2 * taking_ticks) + (0.5 * damage_1) + N


По пунктам:
kills это убийства (считаются только персонажи-бравлеры)
deaths это смерти
gems_lost — количество потерянных гемов (и только гемов) за весь бой
ball_goals — количество забитых мячей в ББ
damage_0 — нанесенный урон по бравлерам или базе осады
• damage_1 — нанесенный урон по сейфу в ограблении

Значение taking_ticks считается особым образом: каждый тик (50 миллисекунд) оно увеличивается на количество удерживаемых гемов (или иных предметов, кроме банок). Помимо этого, каждый тик оно увеличивается на +2, если игрок держит мяч, и на +1, если игрок стоит в горячей зоне. При смерти из taking_ticks вычитается количество выпавших предметов, умноженное на 200. Такой вот накопительный рейтинг получается🙂

Также есть и другие значения, которые могут повлиять на расчет суммы, но кажется они используются только в новых режимах, и их реверс-инжиниринг проблематичен :( Я обозначил их как N.

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

данянул <3

31 Dec, 20:56


1704056400 секунд с 1 января 1970. Unixtime. Есть ли в этом числе что-то особенное, и почему все отмечают этот праздник?

Ой, точно, новый год по московскому времени! Как же я мог забыть…

Итак, немного подведем итоги:
— В 2024 популярность Brawl Stars резко возросла. И наших проектов — тоже 💛
— Автор умудрился потерялся в пустые недалеко от Дубая. Невероятно ☺️
— Новые знакомства, отношен… ой, что? Да, бывает и такое ❤️

В целом, год получился насыщенным, особенно на хорошее, но и плохое тоже было (вспомните блокировку ютуба, например). Но как обычно, встречая новый год, мы будем ждать и надеяться на лучшее!

В общем поздравляю дорогих подписчиков, друзей, знакомых, родственников, кто тут еще на меня подписан, аааэээ… всех в общем!!

Вот вам еще какая-то случайная фотокарточка, иду по улице, вижу — елка, ну вот и сфоткал. А еще можете в комментариях поделиться своими мыслями об уходящем и новом году — буду рад прочитать😑

данянул <3

22 Dec, 05:19


В последнем обновлении Brawl Stars из игры внезапно пропали... ящики?

Да, они самые! Но пропали они из редактора карт в столкновении: просто нет их там больше и всё. Как обычно бывает, сначала мне пожаловались на эту проблему в Null's Brawl, а потом довольно быстро стало понятно — это не я сломал, это снова Supercell😇

В целом, мне бы хотелось сразу сказать — редактор карт в игре сделан максимально отвратно. От начала и до конца. Настолько плохо, что и сами разработчики не спешат это лишний раз трогать, ибо себе дороже😑

И так, начнем с того, что у каждого режима есть свои особенные блоки или сущности, такие как ящики в ШД или, условно, второстепенные точки респавна в Бравлмячике. Для того, чтобы показывать лишь нужные блоки в нужном режиме, ребята определили в коде функцию, MapEditorHUD.tileVisibleForMode(LogicTileData const*), которая возвращает true (1), если блок доступен в данном режиме🙂

При этом игровой режим для данной функции не является аргументом, она получала его сама из полей объекта-синглтона MapEditorScreen. И далее логика данной функции была похожа на что-то такое (до v58):

int gamemode = MapEditorScreen.instance.gamemode;
/* ... */
if (tile == LogicDataTables.getCrateTileData()) {
return (gamemode == 6 || gamemode == 9);
}
/* ... */


Однако помните, что в последнем обновлении ребята начали использовать информацию о режимах из ресурсов игры (game_mode_variations.csv)? Для этого они наравне с числовым ID режима (int gamemode) начинают использовать также объект GameModeVariationData. Соответствующее поле появляется в клиентской (LogicBattleModeClient) и серверной (LogicBattleModeServer) логике боев, а также — в нашем любимом MapEditorScreen.

И теперь код начинает выглядеть как-то так (начиная с v59):

int gamemode = MapEditorScreen.instance.gamemode;
GameModeVariationData gmvData = MapEditorScreen.instance.gmvData;
/* ... */
if (tile == LogicDataTables.getCrateTileData()) {
return (gmvData != null && gmvData.playersCollectPowerBuffs);
}
/* ... */


И казалось бы, всё хорошо? Стало лучше и красивее? Да, но... я же говорил, что ребята не трогают лишний раз редактор карт? Именно поэтому в функции MapEditorScreen.enter(), там где они всегда присваивали значение полю gamemode, они вовсе забыли про gmvData, в котором всегда оставался nullptr.

Ах да, забыли причем ровно на половину — ведь у них там есть ветвление, и в одной части (которая выполняется, кажется, при очень специфических условиях, в которые я не вникал) ставится таки оба поля, но в другой — по старому, лишь одно😴

На самом деле, данный анализ было бы сложно провести без Frida. Например, именно с помощью нее я довольно быстро понял, что поле не выставляется вовсе. Да и исправляется проблема тоже всего лишь интерцептором на нужную функцию, добавляющий код, о котором забыли Supercell. Вот он, кстати, на скрине к посту прикреплен👍

данянул <3

12 Dec, 08:38


В комментариях таки многие просили всё таки рассказать, почему же это случилось, и на самом деле это довольно долгая история...

Еще с давних времен в Brawl Stars существовала проблема: разработчики любили хардкодить (оставлять значения прямо в коде, не вынося в игровые ресурсы). Названия эффектов или снарядов от каждой пассивки? Предметы которые спавнятся на карте? Длительность боя в каждом из режимов, в конце концов? Да, даа, дааа...

Почему это плохо? Потому что снижает поддерживаемость и читаемость кода, снижает гибкость (ведь нельзя изменить эти значения без пересборки проекта) и всё такое. В общем, не надо так делать😑

Но в этом году всё начало меняться. Еще несколько версий назад ребята начали выносить в игровые ассеты статус эффекты (отравления и некоторые баффы), а также больше информации о гиперзарядах и пассивках. А вот в этом обновлении, вы не поверите, они наконец отрефакторили и игровые режимы👍

На первом скрине показано, как игра получала длительность боя до версии 58.x (включительно), а на втором — то, как сделали сейчас. Значение battleTicks подгружается из game_mode_variations.csv, и код стал значительно проще и лучше🎉

И да, максимальная длительность боя немного увеличилась за счет того, что раньше в режимах без таймера (ШД или тренировка) всегда возвращалось 16000 тиков, а теперь к значению также прибавляется значение функции getIntroTicks(), давая в сумме 16182 тика🐱

Кста, просто для справки: в Brawl Stars один тик длится 50 миллисекунд. Как в майнкрафте. Вот такие дела💛

данянул <3

11 Dec, 22:15


Внимание!
В последней версии Brawl Stars максимальная длительность боя увеличена с 13 минут 14 секунд до 13 минут 23 секунд.
Считаете это недостаточно бесполезным? Что ж, я могу даже рассказать, почему её увеличили...

данянул <3

04 Dec, 22:30


Смотрите какая книжка у меня есть теперь, завидуйте💛
(там есть еще много всего, но вам я не покажу)

данянул <3

17 Oct, 08:32


Ыыыы.
Сегодня у нас начались какие-то странные проблемы связи сервера OVH (EU) с сервером на Selectel (RU)
Смотрю анализ трафика, и что я вижу: раз в несколько минут начинается невероятный дроп пакетов (и ретрансмисии соответственно)
Примерно так работает «замедление» от РКН, но почему оно внезапно задело наши хосты — очередная загадка
Может, они просто увлеклись блокировками дискорда...

данянул <3

07 Sep, 15:35


Где обнова?

Вот знаете, я уже было даже начал, но стоило мне открыть ютуб... ребята, это настоящее МЯСО🥩🥩🥩

Вы можете посмотреть на это вместе со мной, но дважды подумайте, надо ли вам это... я предупреждал...

данянул <3

21 Aug, 06:51


Тот самый видеоролик моих знакомых, где видны архетипы в действии!
Начало на 1:14 (кликабельно)
Важно: текстуры и названия могут быть изменены!

данянул <3

15 Aug, 14:17


Supercell сломали Brawl Stars на iOS — теперь он может просто крашнуться в случайный момент. Более того, по какой-то причине, это задело даже Null's Brawl. Возможно, чуть позже я сделаю разбор этой ситуации, но это просто МЕМ какой-то🐱

данянул <3

14 Aug, 23:29


Спасибо, Пашка Дуров, вот бы еще звонки не лагали и фейковых каналов было поменьше…

данянул <3

19 Jul, 12:01


Squad Busters?

Посмотрел я тут на днях графики онлайна в Null's Proxy для этой игры, и даже как-то грустно стало...

Игра в России не взлетела, очень не взлетела: текущий онлайн в 10+ раз меньше, чем в день глобального релиза. Он сейчас даже меньше чем в Clash Royale и Clash of Clans в несколько раз (не говоря о Brawl Stars).

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

Как думаете, у этой игры еще может быть будущее, или её уже ничего не спасет?

данянул <3

17 Jul, 05:31


Уже больше полугода прошло с момента прошлого опроса по картам...

С тех пор в игре появились новые карты, немного поменялась мета и баланс, да и старые выбранные карты многим начинают надоедать, поэтому время от времени я буду проводить эти опросы снова. Например, прямо сейчас:
ШД
: https://forms.gle/SgBvfwS4uCVvCHt89
Гемы: https://forms.gle/R4qFTyu9tntVQ9qk8
Бравлмячь: https://forms.gle/rptY7eexJ16ohqzP6
Горячая зона: https://forms.gle/mYxD1faMLRmWkS6K8
Ограбление: https://forms.gle/8HoKXurqJVG2Ygm27
Дуэли: https://forms.gle/4GDF2nn6rdHF1L7m8
Нокаут: https://forms.gle/B2QgaGfJH6fvA2aT8
Баунти: https://forms.gle/dWVRvBLPhwjwZdGB8

Скорее всего, опросы будут доступны до конца месяца (31.07.24), после чего будут подведены результаты, внесены изменения в ротацию, а участники получат небольшую награду👍

данянул <3

12 Jul, 15:14


Скачать тик-ток на iOS без регистрации и смс! Стоп, что?

tl;dr: не доверяйте подобным предложениям от источников, которым не доверяете

Есть у меня про это небольшая и неприятная история. Несколько дней назад мне написал администратор одного крупного телеграм-канала с "прямыми ссылками" на iOS, предлагая сотрудничество. В первую очередь я полистал его канал — и вместе с другими приложениями увидел там "прямую ссылку" на скачивание Null's Brawl😑

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

Проблема в том, что на iOS нет надежных механизмов проверки подлинности сторонних приложений — а значит, вы не можете знать наверняка, что именно вы устанавливаете. И, к сожалению, мои опасения подтвердились — в канале была модифицированная версия Null's Brawl, содержащая исполняемый код, добавленный без нашего ведома🥺

Если кратко, то основной бинарник загружал стороннюю (не нашу!) библиотеку libheima.dylib, которая в свою очередь занималась чем-то странным: подключалась к dylib.heima911.com:8100 (TCP), отправляла на тот адрес информацию о вашем устройстве и установленном приложении, а также могла отображать WebView при некоторых условиях. Дальнейший анализ мог бы занять много времени, но уже было понятно — эта модификация вряд ли делает что-то хорошее

Более того, это делается не просто без нашего ведома, но и без каких-либо упоминаний модификации для конечных пользователей. Не знаю, можно ли назвать это вирусом, но делать так... некрасиво😅

А что настораживает больше всего — в их канале есть не только Null's Brawl, но и другие приложения, от тик-тока до сбера и т-банка. Соболезнуем, так сказать...

данянул <3

30 Jun, 00:25


Данянул сделайте пожалуйста обнову со скибиди туалетом где на бравл старс напали злые скибиди туалеты и их защищают добрые камерамены и спикермены😭😭😭

данянул <3

16 Jun, 12:00


К сожалению, 128 команд так и не набралось 😭
Кто не успел попасть, не расстраивайтесь, вы сможете получить приоритетное место в следующем турнире (и точно на него попадете!) 😬
А всем остальным удачи (и давайте понадеемся что эта штука не сломается)

Сетка турнира: https://challonge.com/ru/hyjep05x (может обновляться с небольшой задержкой)

данянул <3

16 Jun, 11:25


Ой, вас уже 100+ команд зарегистрировалось... до конца регистрации осталось примерно полчаса, но вы еще можете успеть добить до 128 команд (чтобы все успели попасть, иначе сейчас попадут лишь первые 64)😑

данянул <3

15 Jun, 14:30


Турниры в Null's Brawl? #nullsbrawl

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

Сегодня мы с активными подписчиками в моем чате впервые сыграли турнир из 4 раундов в режиме Дуэли, и всё прошло довольно хорошо: автор не разучился писать код (невероятно). А выглядело это всё примерно так: https://tournaments.dnull.xyz/?id=1

На данный момент всё работает довольно просто:
1. Во время регистрации вы можете присоединиться к чьей-либо команде, либо создать свою собственную. Чтобы подтвердить свое владение аккаунтом, вы должны получить специальный токен в настройках Null's Connect🍄 (да, звучит слишком сложно, и чуть позже мы сделаем этот процесс проще)
2. В начале каждого раунда вы будете приглашены в специальную дружескую комнату, в которой нужно будет сыграть бой с командой противника. Результат сразу будет засчитан в турнирной сетке🥳
3. Раунды начинаются и заканчиваются автоматически, как и сам турнир. А мне, как организатору, можно спокойно ничего не делать😌

Вот такие дела. Если у вас есть какие-либо предложения, пожелания или вопросы касаемо турниров в нуля бравлике — не стесняйтесь писать в комментарии👀

Ой, чуть не забыл, завтра будет еще один турнир, вот он: https://tournaments.dnull.xyz/?id=2

данянул <3

11 Jun, 01:55


Это еще бравл старс или уже сквад бастерс?🥺

данянул <3

01 Jun, 18:20


Ой, сегодня уже лето? Невероятно🙂

(вот я вышел потрогать траву, а кто-то забрал у меня телефон и начал играть в нуля бравл. ну а вы можете просто играть в нуля бравл, это полезно!)

данянул <3

27 May, 11:18


Пасхалко в Brawl Stars?

1. Нужно выбрать дуэли
2. Первый персонаж должен быть Ларри и Лори, а второй или третий — Эш
3. Поздравляю! Вы победили.

Об этой ошибке мне рассказали еще вчера, когда случайно заметили её в Null's Brawl. Пришлось разбираться...

Краш игры происходит при попытке вызвать Animation::getRunningTime с this = nullptr. А дальше уже магией реверс-инжиниринга было выяснено следующее: анимация, с которой пыталась работать игра, относилась к LobbyLoopAnim текущего скина петов (крыс) Эша. А такой анимации у них нет🥺

А почему игра пыталась с ней работать? Предположительно, она загружает анимации петов для всех трех бравлеров, если таковые есть у первого. А у Ларри и Лори они как раз есть. К тому же, это не касается персонажей, у которых петов нет вовсе (например, Колетт). Вот и получается, что в таком случае к ошибке приводит только Эш — у него единственного есть петы, но без нужной анимации😑

Данную ошибку можно исправить, просто указав крысам Эша в LobbyLoopAnim что-то вроде KnightPetDefaultIdle (чтобы была хоть какая-нибудь анимация). Именно так я вчера и сделал в Null's Brawl, как временное решение проблемы. Но по-хорошему Supercell стоит не пытаться грузить анимации, которых не должно быть, и не судить об их наличии или отсутствии только по первому персонажу в списке😅