| Решение суда по делу Hobby World против Wildberries | |
| 16 июня 2026 года конституционный суд Росси вынес своё решение по жалобе Hobby W... | |
| С миру по нитке [17.06.2026] | |
| Россыпь новостей из мира настольных игр. | |
| Идут сборы на Life | |
| Проживите целую жизнь от рождения до старости. | |
| Победители 20-ой премии Annual Golden Geek Awards - 2025 | |
| Сайт BGG подвёл итоги голосования по своей премии. | |
| Идут сборы на Die in the Dungeon | |
| Легковесный рогалик в духе Slay the Spire, но со сбором пула кубиков. | |
Привет, друзья!
Иногда за очень простой функцией в интерфейсе скрывается длинная история разработки. В моём случае всё началось с небольшой идеи — сделать удобный цифровой планшет сыщика для карточного «Ужаса Аркхэма».

Проект называется Arkham Investigator, и за последние месяцы он пережил довольно серьёзные изменения: переписал архитектуру приложения, добавил расчёт вероятностей проверок и выпустил версию для iOS.
Решил рассказать немного подробнее, как всё это устроено изнутри. Возможно, кому-то будет интересно не только само приложение, но и технические задачи, которые возникают при разработке фанатского инструмента для настольной игры.
Сразу уточню: проект полностью некоммерческий.
Приложение распространяется бесплатно, без рекламы и платных функций. Я занимаюсь им в свободное время — просто потому, что люблю саму игру и интересные инженерные задачи.
Изначально идея была очень простой: сделать удобный трекер во время партии. Прежде всего, для себя
Игроки в «Аркхэм» периодически используют планшеты. Об этом мы немного говорили в прошлой статье. Я вдохновлялся деревянными планшетами с магнитными шариками как то, что хочется сделать значительно проще и приятнее в использовании
Со временем функциональность приложения постепенно росла. Сейчас в нём автоматизировано более 40 способностей сыщиков, включая обработку эффектов Знака древних.
Но вместе с ростом возможностей появилась и новая проблема.
Казалось бы, приложение — это в первую очередь код.
Но довольно быстро стало ясно, что графика тоже требует огромного количества времени. Ведь одна из фишек приложения - полноразмерные изображения сыщиков
Официальные материалы иногда бывают недостаточно большими, чтобы лицо сыщика было в центре экрана и вокруг был запас места. А некоторые дополнения просто не имеют готовых графических исходников.

Например, для Barkham Horror или пользовательских кампаний изображения существуют только в виде готовых карт. Нет отдельных портретов, нет фонов или артов художников.
Если просто взять такие изображения и вставить их в приложение, интерфейс начинает выглядеть как коллаж из случайных картинок.
Поэтому пришлось заниматься довольно кропотливой работой:
выравнивать портреты персонажей
дорисовывать края изображений
очищать фон
подгонять освещение и контраст
Иногда это превращалось в маленькую реставрацию: берёшь изображение карты и буквально собираешь из него портрет заново, чтобы он выглядел аккуратно в интерфейсе.
Это не самая заметная часть разработки, но на неё ушло неожиданно много времени.

И искусственный интеллект тут не особо помогает. Взгляните хотя бы на Тони Моргана в интерпретации ИИ
Версия для Android существует уже почти год.
Но когда я решил выпустить приложение на iOS, оказалось, что это отдельное приключение.

Apple очень внимательно относится к приложениям, связанным с известными играми и брендами. Поэтому первым делом возник вопрос к названию.
Слово Arkham пришлось убрать из названия в App Store.
Теперь там приложение называется AH Investigator.
Но это была только первая правка.
Следующий вопрос модерации касался графических материалов игры.
Чтобы избежать конфликтов с авторскими правами, версия для App Store распространяется как своего рода «пустая оболочка».

Внутри приложения нет официальных артов карт или жетонов. Все фоновые картинки счётчиков я переработал и оставил только фанатских сыщиков
Вместо этого я реализовал систему внешних модулей. Пользователь может подключить источник данных самостоятельно — указав ссылку на файл с нужной информацией.
С точки зрения App Store это важно: само приложение остаётся универсальным инструментом, а пользователь уже решает, какие данные использовать.
Это позволило пройти модерацию и при этом сохранить весь функционал.
Arkham Investigator написан на React Native, чтобы одна кодовая база работала и на Android, и на iOS.
В теории это звучит идеально.
На практике иногда оказывается, что одна и та же функция ведёт себя по-разному на разных платформах.
Например, в приложении есть эффект обесцвечивания портрета, когда у сыщика заканчивается ход или он побеждён. На Android это работает без проблем. На iOS - просто нет возможности
В итоге пришлось написать отдельную реализацию фильтра на Objective-C.
Это забавный момент: иногда небольшая визуальная деталь заставляет разработчика изучить ещё один язык программирования.
Но самое интересное началось, когда я решил добавить функцию Chaos Odds — расчёт вероятности успеха проверки.
Снаружи всё выглядит очень просто: несколько чисел показывают шанс успешной проверки.
Но внутри эта задача оказалась гораздо сложнее.
Мешок хаоса в «Ужасе Аркхэма» — это не просто случайный жетон.
В игре есть множество эффектов, которые меняют правила вытягивания.

Например:
жетоны Bless и Curse заставляют вытянуть дополнительный жетон
некоторые символы сценария тоже говорят «тяни ещё»
иногда эффекты могут накладываться друг на друга
В результате одно вытягивание может породить целую цепочку новых вытягиваний.
С математической точки зрения получается дерево вероятностей, которое начинает очень быстро расти.
В некоторых сценариях число возможных комбинаций может достигать миллионов вариантов.

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

В итоге математическое ядро было полностью переписано как нативный модуль на Rust и C++.
Rust отлично подошёл для реализации самой логики вероятностного дерева. Он быстрый, безопасный и хорошо работает с памятью.
C++ использовался для интеграции этого модуля с мобильной частью приложения.
Результат оказался довольно впечатляющим.
Теперь расчёт вероятности занимает меньше одной секунды даже на старых устройствах вроде iPhone 7 или бюджетных телефонов уровня Redmi 4X.
И что важно — все вычисления происходят полностью оффлайн.
Никакие данные не отправляются на серверы. Телефон сам рассчитывает все варианты прямо во время партии.

Когда речь идёт о вероятностях, качество исходных данных критически важно.
Здесь огромную работу проделал Егор Косаткин (@Egoorka_k). Он буквально вручную проверил все официальные кампании и сценарии.
Каждый жетон, каждый модификатор, каждое условие вытягивания — всё сверялось с оригинальными правилами.
В процессе было обнаружено около 70 ошибок и пограничных случаев.
И самое интересное — часть этих ошибок оказалась не в приложении, а в базе данных Arkham Cards, которой пользуются все, кто хотят удобный цифровой журнал или упростить сбор колоды.
Мы отправили исправления прямо в их репозиторий. В итоге удалось улучшить не только наше приложение, но и общую базу данных для сообщества.
Также хочу поблагодарить:
Никиту Красильникова (@kolorono) — за помощь с математической моделью
@Ari_oh — за работу над плавностью интерфейса и анимациями
Этот релиз я хочу посвятить Сергею Вакуленко.
Многие в сообществе знают его как автора множества переводов для «Аркхэма».
Именно Серёжа когда-то сделал один из первых калькуляторов вероятностей для игры. Его идеи стали для меня ориентиром.
Ещё раз напомню: проект бесплатный и открытый.
Если кому-то интересно попробовать приложение или посмотреть код — вот ссылки.
Буду благодарен лайку в теме на BGG для того, чтобы игрокам было легче найти проект
Android
Google Play
iOS
App Store
Проекту нужен модуль для официального контента. Я вынес инструкцию по его установке в отдельный пост, на случай, если что-то поменяется
BGG
Тема проекта
GitHub
Исходный код
Буду рад вопросам, замечаниям и конструктивной критике.
Надеюсь, этот инструмент сделает партии в «Ужас Аркхэма» немного удобнее — а кому-то, возможно, будет интересна и сама инженерная задача, скрытая за несколькими числами вероятности на экране.