Мы не выбираем, когда приходит момент, чтобы всё доказать.
Только решаем. Пойдем ли мы ради этого хоть на край света.
Эта статья направлена на освещение механик приложения, которое я создал со своим товарищем. Суть приложения — предсказывание камбеков в Dota 2.
Тот, о ком пойдет речь, не был королем. Не носил плащ тренера с золотыми пуговицами. Не стоял на трибунах The International под ослепительными огнями. Он был Хоббитом среди великанов. Но в нём была искра. Идея, от которой уже не отказаться.
Однажды я решил, что хочу работать аналитиком в реальной киберспортивной команде.
Не просто анализировать матчи в лайве. Отказаться от тренерства в дистанционном формате. Мне захотелось серьёзной, «мужицкой» команды — хотел видеть живые, настоящие эмоции и vibe киберспорта, как это было на LAN-сценах.
Написал товарищу, который тогда был тренером по CS в Севастополе. Мы давно были знакомы, еще со времен, когда учились вместе в IT сфере. Без подробных вопросов он ответил «Приезжай завтра».
«Завтра?» подумал я. Уже было поздно, а путь был не близкий. Нужно было добраться с одного конца Крыма в другой — в Севастополь. Но когда меня это останавливало? :)
Собрал рюкзак. Ноутбук. Пара футболок. И отправился на автостанцию.
Шел дождь. Солнце уже зашло за горизонт. Зонтик я, как всегда, решил не брать. Добираюсь до автостанции на такси. Автобус ушел. «Вот, незадача. Ну что-ж, погнали ловить попутки».
Словил первую машину. Водитель молодой, как и я. Весь салон в неоне. Громкая музыка. Без подробных диалогов добросил меня до ближайшей автостанции, ведущей на Симферополь.
Поблагодарил, кинул сотку на переднее сидение, стал ждать дальше. Зашел в магазин, купил газированной воды и булку. Дождь потихоньку стих. Одна машина, другая.. никто не останавливается. «А ведь и впрямь — подумал я, — часто ли я сам, когда был за рулем, подвозил незнакомцев? Нет, что уж там... просто проезжал мимо. А теперь и сам стою на обочине. Не скажу, что я мало дел добрых совершил за свою жизнь, но в карму толком не верю. Частенько считаю себя скептиком. Может, им и являюсь».
«ГАВ!» раздалось позади меня. Я обернулся. Передо мной стоял пес и вилял хвостом. Не долго думая бросил ему пол булки. Ему она явно нужнее чем мне. Повернувшись обратно, вдохнул свежего воздуха полной грудью и продолжил ловить попутки.
Некоторое время спустя остановилась машина. Спросил, куда едут, узнал, что нам по пути. Сел. Это были пара парней на отечественном автопроме. Ехали быстро, музыка играла громко. Беседа ни к чему не обязывает. Но один из парней вдруг заговорил. Начал спрашивать о моей точке назначения, и почему я решил отправиться в такой час на другой конец Крыма. Я без капли сомнения все рассказал: и про идею стать серьезным аналитиком, и о том, что давно занимаюсь разбором «внутренностей» компьютерной игры Dota 2.
Они же в ответ - сами стали рассказывать о том, что играют в доту и CS. Один даже вспомнил времена первой доты. Было ли мне интересно? Да, всегда приятно поболтать о чем-то что нравится не только тебе. Полезно? Возможно. Степень полезности порой трудно просчитать в уме. И все же — я слышал людей, которым игра дорога. А это всегда важно.
Когда путь становился испытанием
Доехали до окраины Симферополя. Попрощался с парнями. Было приятно, что поездка оказалась не скучной. Но тут встала очередная проблема. Последний автобус на Севастополь должен быть через 20-30 минут. А я черт знает где.
Быстрым шагом — через какие-то заборы, рельсовые пути, где только карта показывала дорогу. Рюкзак с ноутом прыгал на спине, как будто тоже волновался.
Сел на остановке у вокзала. Стал ждать. 15 минут.
Понимаю, автобуса нет. И осознаю...
Автобус проходит через совершенно другую остановку, а я тут расселся, будто бы собрался ехать обратно домой. «Ну, не без приключений» подумал я и вызвал такси.
Доехал до Западного автовокзала, который осуществляет транспортные перевозки в сторону Севастополя. Автобусы я там, конечно, уже и не ждал в такой час, но попутку с иного места и не поймать. Встал на остановку. Было тихо. Даже слишком. Ни перекатиполей, ни знакомых-незнакомых лиц.
Мужчина в старой куртке остановился. Спросил, куда мне нужно. И предложил подвезти. Не до моего пункта назначения — а до Бахчисарая. В целом, для меня и это было счастливым стечением обстоятельств.
Ехали. Болтали. Я стал рассказывать куда и зачем еду. Про доту, про драфты, про то, как сложно объяснить игрокам, что один герой может выглядеть сильным, но потерять свой боевой потенциал после условной 20 минуты. О том, как все решения принимаются на глаз, без системы.
Он слушал внимательно. Сказал, что давно не играл, но понимал. Ведь сам проходил через подобное. Даже привел пару параллелей с жизнью на флоте. Казалось бы.. чего тут общего? Дота и флот :)
Слова летели, как искры огней, домов, горящих за окном. И мы даже не заметили, как проехали Бахчисарай и попали в Севастополь. Я не стал расспрашивать как так получилось. Думаю, что он сам решил добросить меня. Порой мы совершаем такие поступки просто потому, что хотим, чтобы так было. И ничего не просим взамен.
Продолжение оставлю в комментариях.
Что же внутри DotaDiviner? Приложения, в котором, как обещают разработчики ( то есть я ), есть алгоритм предрекающий перевороты игры?
Что это:
Каждый герой получает оценку силы в зависимости от того, насколько он полезен на разных стадиях игры — ерлигейме, мидгейме, лейте.
У некоторых героев сильное ерли (например, Puck, Batrider, Viper), но они теряют ценность со временем
Другие набирают силу только к лейту (например, Dragon Knight, Morphling, Phantom Assassin)
Некоторые работают равномерно на протяжении всей игры (например, Abaddon, Rubick)
Зачем это нужно:
Кто выигрывает ерли, а кто лейт
Где может быть перевес даже если темп героев средний
И почему команда с "сильными" героями может проиграть: просто она не подготовлена к нужной фазе игры
2. Синергия между героями
Что это:
Оценка, насколько герои работают вместе как команда , а не как набор случайных персонажей.
Хорошая синергия:
Pangolier + Tusk + Bane + Shadow Fiend + Kunkka = давление в ерли, контроль карты, быстрые ганги
Плохая синергия:
Chen + Templar Assassin + Magnus + Pangolier + Vengeful Spirit = хаос, мало контроля карты, слабый тимфайт
Зачем это нужно:
Чтобы понимать, почему один драфт сильнее другого , даже если винрейты кажутся одинаковыми
Чтобы видеть слабые места в составе, которые можно использовать самому или избегать при выборе героев
Что это:
Оценка, кто доминирует в противостоянии , основываясь на том, какие герои могут подавить ключевых игроков соперника.
Как бот считает:
Если у тебя есть герой, который подавляет одного из ключевых героев соперника — ты получаешь преимущество.
Если соперник выбрал героя, который ломает твою систему игры — ты в зоне риска
Примеры:
Wraith King vs Brewmaster: плохой матчап — Wraith King не успевает за героями, которых не может быстро убить. Урон сосредоточен по одиночным целям. Ограниченная мобильность, а также полагается только на свою выживаемость в то время, как Brewmaster напротив закрывает преимуществом в мобильности
Slardar vs Naga Siren : контрпик, потому что Slardar не имеет хороших инструментов для борьбы с большим иллюзий. Уязвимость к оцепенению и ультимейту, так как Slardar будучи героем ближнего боя неизбежно попадет под ее воздействие. Кроме того, высокая сложность убийства с учетом любви Naga Siren к покупке таких айтемов как Butterfly
Зачем это нужно:
Понять, кто действительно доминирует по драфту
Увидеть, кто потеряет силу из-за выбора соперника
Это особенно ценно при просмотре профессиональных игр — часто там решающий контрпик определяет исход
4. Мобильность и выживаемость
Что это:
Два показателя, которые говорят о том, как герои перемещаются по карте и насколько они живучи в файтах.
Отвечает за то, насколько быстро команда может перемещаться между линиями, начинать файты, зачищать кемпы, убивать рошана
Высокая мобильность = возможность перехватывать инициативу в нужный момент
Определяет, кто дольше остаётся в живых в teamfight’ах
Высокая выживаемость = больше шансов сохранить преимущество после давления
Как это влияет на игру:
И БЛАБЛАБЛАБЛ. Давай уже к сути, написал тут кучу текста, который прочтут лишь процентов двадцать. Хочу увидеть реальные камбеки!!! А не все вот эти вот показатели.
Показатели важны. Как в строительстве, где есть несущая стена — основа конструкции. У неё есть и помощники: колонны, пилоны, торцевые стены и т.д. Без них конструкция стояла бы голой и беспомощной. Верно?
5. График темпа игры
Что это:
Визуализация поминутного сравнения силы команд.
Не прогноз победителя, а график силы нарастающий/падающий в течение игры.
Как читать график:
Линия выше линии соперника → эта команда имеет преимущество на указанной минуте
Линия ниже линии соперника → соперник доминирует в этот момент игры
Чем дальше линия от средней точки 0.5 → тем больше перевес между командами
Стабильный рост / падение к концу игры → показывает, у кого есть сильный лейт или кто теряет контроль
Почему это важно:
Можно предсказать камбеки
Увидеть, когда начнётся лейт
Понять, когда стоит инциировать активные события
И главное — не гадать на глаз , а иметь объективную картину
❗ПЕРЕЙДЕМ К ПРИМЕРУ❗
На иллюстрации графика «Преимущество команд в минуту игры» видно, что Radiant набирают силу к 25 минуте, и это совпадает с началом их камбека в реальном матче — что и означает - модель работает.
И тут встает вопрос: выборка же слишком мала. Ты нам тут показываешь один скриншот, где все совпало, но когда я начну пользоваться, то точно не найду ничего подобного.
Я постарался, потратил какое-то количество времени и сделал. Мне, честно, даже понравилось. Буду это делать и дальше.
Реализовал галерею камбеков, где собрал все основные перевороты, которые были предскзааны за последние пару месяцев. Это не все. Но это те, которые я нашел вручную и поместил в простой и понятный интерфейс для наглядности.
🔗Попробовать и поглядеть больше скриншотов можно тут — добро пожаловать:
В TG достаточно ввести команду /live. В приложении — воспользоваться функцией "Автоанализ" или ввести героев вручную — полный анализ драфта не заставит себя долго ждать.
ೃ⁀➷ В заключение
Diviner — не волшебная коробка.
Это инструмент, в который я вложил два года, тысячи матчей и хорошо запоминающуюся поездку на попутках в дождь.
Если ты игрок, стример, аналитик или даже обычный бродяга с улицы — попробуй его.
Не потому что я прошу.
А потому что ты, да-да, именно ты, заслуживаешь пройти не по поверхности, а сквозь игру. Как через лабиринт, и в руках у тебя уже есть карта.
Сейчас мы работаем над нейросетями NS1 и NS2 — двумя аналитиками в одном:
NS1 анализирует драфт до матча, как тренер перед битвой
NS2 смотрит в лайв, как шахматный гроссмейстер — предсказывает следующий ход, давление, момент камбека
Вместе они превратят Diviner из инструмента анализа в шахматный движок, который видит игру наперёд.
Не просто "график по прошлым данным", а прогноз, построенный на ритме.
Цель: не 60%, не 70%, а выше 80% точности, чтобы Diviner стал не просто помощником, а самым настоящим стандартом аналитики в Dota 2.
Carpe diem ˗ˏˋ ´ˎ˗ и да поможет нам Бог. Ave Maria☩