Идея:

Counter Strike Global Offensive или CS:GO — игра, широко известная в игровом сообществе. CS:GO была одной из первых игр в жанре FPS, в которую я играл, и требовал определенного уровня навыков, чтобы даже считаться приличным игроком. Игра сложная, требует обучения и, самое главное, может работать на тостере (если бы у него был процессор). Основным источником вдохновения для проекта послужило то, что пользователи активно создавали и загружали в игру собственные карты спустя 9 лет после ее первого выпуска в 2012 году. Это открывает возможность добавления скрытых сообщений и кодирования их на пользовательскую карту. Карта будет общедоступна и станет легальной игрой со скрытым поворотом.

Игровой процесс:

Новому игроку, начинающему игру, нужно кое-чему научиться, в том числе схемам распыления огнестрельного оружия. Если вы используете автоматические винтовки, пулеметы, пули разлетаются, и игрок должен контролировать отдачу. Поскольку выстрелы в тело наносят меньше урона, игрок также должен научиться быстро перемещать перекрестие в голову врага, чтобы получить точный выстрел в голову и уничтожить его.

Это приводит к необходимости «тренировочных режимов» в игре. Хотя в игре есть несколько встроенных практических курсов, пользователи в значительной степени зависят от индивидуального обучения, созданного сообществом, чтобы стать лучше в игре.

Карты мастерской:

Карты Мастерской разрабатываются игроками и загружаются для широкой публики. Это позволяет друзьям просто развлекаться и бездельничать в игре, не влияя на их фактические ранги. Создатели загрузили практически все виды карт мастерской для CS:GO, начиная от тематической карты «Игра кальмаров» и заканчивая игрой «Прятки» с элементами ужасов.

Для этого скрытого канала разработана карта аим-тренера. Это очень распространенный тип карт, которые создатели создают для игроков, чтобы отточить свои навыки, чтобы они лучше работали в реальных играх.

Создание карты с нуля:

Чтобы создать карту с нуля, разработчик должен сначала скачать CS:GO и сыграть в нее хотя бы один раз. Они также должны купить CS:GO «Prime Account». SDK CS:GO доступен только платным подписчикам.
После установки SDK можно использовать редактор Hammer и создать «простую», но играбельную карту с различными текстурами, освещением, стенами и твердыми объектами.

Теория кодирования:

Логика создания скрытого канала проста: бот, появляющийся рядом с игроком, обозначается «0», бот, появляющийся вдали от игрока, обозначается «1», а сообщение кодируется в зависимости от порядка расположения ботов. Игрок может войти в игру, сбить всех ботов и, поскольку боты неподвижны, сохранить журналы игры, чтобы расшифровать сообщение.

Поскольку игра сама по себе будет немного медленной, игрок может включить SV_CHEATS, чтобы включить скорость, точность и убрать отдачу оружия. Общее время раунда, время заморозки (время до начала следующего раунда) и аналогичные элементы управления могут быть изменены, чтобы сократить время, необходимое для декодирования сообщения. Простой скрипт на Python можно использовать для анализа журналов, определения канала убийств и последующего получения сообщения на основе позиции убийства.

Реализация кодирования:

Реализация кодирования довольно проста.

● Просто создайте бота в зависимости от бинарного сообщения (впереди или дальше на карте) и установите режим «включен».

● Создайте следующего бота на основе двоичного сообщения и установите для него значение «отключено».

● Определите логическую точку, которая отключает текущего бота и включает следующего бота, как только игрок сбивает текущего бота.

● Повторяйте этот процесс до тех пор, пока все сообщение не будет закодировано.

Логика триггера:

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

Тем не менее, есть функция, называемая «триггерная кисть», и режим функции, называемый «trigger_multiple». Теоретически, если игрок/NPC (неигровой персонаж) выполняет какое-либо действие рядом с триггерной кистью, некоторые действия могут быть активированы — например, закрытие/открытие двери или включение лампочки.

Эта функциональность идеальна для игры, потому что логика может быть настроена таким образом, что если текущий бот покидает область ближайшей триггерной кисти, он отключается, а следующий бот включается. Триггерный вход, необходимый для функции триггерной кисти, — «OnEndTouch».

Публикация карты и Steam:

Карта может быть опубликована на официальной странице Steam CS:GO Workshop и будет доступна для всех. Чтобы найти карту, созданную конкретным пользователем, игрок может перейти на свою страницу пользователя и перейти на страницу «Предметы мастерской». Загрузка карты мастерской с проверкой Steam занимает около полдня, а обновление существующей карты — около 5 минут. Примечание: Steam очень строг в своих правилах плагиата, поэтому mao должен быть относительно уникальным. Копирование чьих-либо карт и объектов не рекомендуется.

Реализация приемника:

Помимо фактического запуска игры, получатель также должен запустить скрипт для анализа журналов, чтобы расшифровать сообщение. С помощью представленной здесь логики можно сжать сообщение следующим образом: если бот находится на приподнятой платформе, т. е. координаты по оси Z больше 64 (базовая высота), полученный бит равен «1». Если бот находится на земле, то есть координаты по оси z ровно 64, бит приемника равен «0».

В конце сообщения биты могут быть объединены в одну строку и преобразованы обратно в их символы ASCII.

Задачи:

Существует довольно много проблем, когда дело доходит до разработки скрытого канала в среде, которая не была создана для этой конкретной цели. У более старой игры, такой как CS:GO, было множество проблем —

● Документация давно не обновлялась и практически непригодна для использования.

● Нет реальных инструкций для начинающих, чтобы попытаться построить свои карты, кроме старых видео на Youtube 2012/2013.

● Редактор Hammer очень непредсказуем и может неожиданно завершить работу — сохранение вашего прогресса после каждого крупного обновления абсолютно необходимо.

● Карты, скомпилированные из консоли Hammer, могут не всегда показывать такое же поведение при доступе из карт Workshop.

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

Эффективность/результаты:

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

Карта в настоящее время способна кодировать 64 бита или 8 символов. Хорошей аналогией было бы сказать, что у нас закончилась бумага — чтобы написать более длинное сообщение, нам нужен лист бумаги большего размера или, в данном случае, карта большего размера. Декодирование сообщения происходит со скоростью около 1 бита в секунду с самым медленным оружием в игре, и скорость может быть значительно увеличена за счет включения читов в игре.

Расширенная реализация/будущая работа:

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

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

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

Ссылка на Github проекта —