Работа над Null’s Brawl 68.279 с Нори и Венди уже идёт полным ходом. Новые бойцы, наносилы и остальной контент постепенно переносятся на сервер, но в этот раз разработчики оригинальной игры заметно усложнили нам жизнь.
Больше всего времени сейчас занимает адаптация новых баффи, переработанных гаджетов и звёздных сил. Всего таких способностей получилось около двенадцати, и многие из них реализованы довольно необычным способом. Поэтому каждую механику приходится отдельно изучать, переносить и адаптировать под нашу систему боя.
Как устроены новые способности
В Brawl Stars существует система трейтов (Trait). Именно через неё сегодня работают многие игровые механики, включая баффи, наносилы, пассивные способности и различные модификаторы поведения бойцов.
Каждый игровой объект содержит собственный список трейтов, а описание каждого из них хранится в таблице traits.csv. Именно они определяют работу большинства новых способностей.
В боевой логике это выглядит примерно так:
public void handleTraitsOnCauseDamage(...) {
TraitData trait = this.findTraitByType(
TraitType.SpawnCharacterOnGetHurt
);
if (trait != null) {
/* Handle required behavior */
}
}
Сам по себе такой подход вполне нормальный. Проблема начинается немного в другом.
Когда одинаковые механики становятся разными
За последние обновления разработчики начали постоянно добавлять новые типы трейтов, хотя многие из них полностью повторяют уже существующие.
- OverrideMaxSpawns и AddMaxSpawns
- OverrideNumSpawns и AddNumSpawns
- OverrideBasicAttackCastingRange и AddCastingRangeNormalAttack
- OverrideUltiCastingRange и AddCastingRangeSuper
Это ещё можно понять. Но встречаются и практически одинаковые типы:
- OverrideAreaEffectStatusEffectEnemy
- OverrideEnemyStatusEffectToAreaEffect
Из-за этого обработка превращается в повторение одного и того же кода:
public StatusEffectData getEnemyStatusEffect(...) {
TraitData trait = findTraitByType(
TraitType.OverrideAreaEffectStatusEffectEnemy
);
if (trait != null) {
return trait.statusEffect;
}
TraitData trait2 = findTraitByType(
TraitType.OverrideEnemyStatusEffectToAreaEffect
);
if (trait2 != null) {
return trait2.statusEffect;
}
/* ... */
}
Конечно, подобный код можно переписать и сделать универсальную обработку нескольких типов сразу. Но сначала приходится вручную проверять каждую новую механику, чтобы убедиться, что между ними действительно нет скрытых отличий.
Сейчас в игре уже почти 400 различных типов трейтов, и значительную часть из них вполне можно было объединить. Это заметно упростило бы поддержку игры.
Старые и новые системы работают одновременно
При этом часть способностей до сих пор использует старую систему через cards.csv, а новые механики уже работают через трейты.
Получается, что во время разработки приходится одновременно поддерживать сразу несколько разных систем способностей, разбираться в их взаимодействии и только потом переносить всё в серверную логику Null’s Brawl.
Именно поэтому новые баффи, гаджеты, пассивные способности, наносилы и слияния сейчас требуют значительно больше времени, чем кажется со стороны.
Что сейчас уже в работе
На данный момент продолжается перенос:
- Нори и Венди;
- системы наносил;
- механики слияний;
- новых баффи;
- переработанных гаджетов;
- звёздных сил;
- гипербаффи и гиперзарядов;
- графических эффектов;
- новых игровых режимов.
После завершения адаптации всё это пройдёт полное тестирование перед релизом.
Когда выйдет обновление?
Разработка Null’s Brawl 68.279 продолжается. Осталось ещё немного ручной работы, после чего начнётся финальное тестирование.
Следить за ходом разработки и узнать обо всех нововведениях можно в основной статье:
→ Null’s Brawl 68.279 с Нори и Венди
После релиза скачать новую версию можно будет на отдельных страницах:
Продолжаем работу. Хотелось бы выпустить обновление быстрее, но ещё важнее — чтобы все новые механики, наносилы, баффи и бойцы работали стабильно с первого дня.
Нулс Бравл | Null's Brawl — приватный сервер для iOS и Android Приватный сервер Нулс Бравл для iOS и Android