четверг, 18 марта 2010 г.

Fraps был взвешен, измерен и признан негодным ;)

Совсем недавно вышла новая версия нашего основного конкурента Fraps, которая позволяет снимать видео без синхронизации с игровым FPS. Не прошло и 100 лет ;) И уж совсем на днях вышла версия с некой оптимизацией под Battlefield Bad Company 2. Настало время все это дело проверить ;)

Испытания велись на Win7 x64 с последними апдейтами, на конфигурации Intel Core i5-750 / AMD Radeon 5750 / 2x2Gb DDR3 / 500Gb HDD (не системный) / 1920x1080 FullHD.

В PlayClaw выставлялся режим слабого сжатия, потому что он очень близок и похож на сжатие фрапса. FPS для видео выставлялся в 30.

FPS без записи = 127


Полный кадр
Fraps


PlayClaw


Как видно из скриншотов, Fraps снижает игровой fps до 60 со 127, PlayClaw - до 90 со 127.

Половинчатый кадр
Fraps

Это и смешно, и странно для меня, но показания фрапса практически не изменились - те же 60fps.

PlayClaw


Результаты для PlayClaw ожидаемые (увеличение игрового fps до 100), а вот что с фрапсом творится - непонятно.

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


А вот тут удивляет PlayClaw ;) Судя по всему, мощностей одного ядра процессора хватает на то, чтобы кодировать FullHD видео с fps 30 - игровой fps подрос до 99 за счет освобождения одного ядра. А заодно это означает, что 2 ядра игре все же маловато будет :)

Результаты

Итак, проведенные тесты показали, что не все хорошо в государстве фрапсовом. PlayClaw его уделывает почти на 50% (99fps против 60). Пользуйтесь на здоровье - лучшая программа для записи игрового видео! :)

вторник, 16 марта 2010 г.

Как работают читы для 3д шутеров

Уж очень часто приходится слышать от разных людей, что тот или иной игрок - читер. При этом приводятся определенные доводы, которые в большинстве своем абсолютно ничего не показывают, кроме того, что игрок либо играет хорошо, либо ему повезло, либо... он действительно читер? ;) Попробую популярно объяснить, как работают читы и почему те или иныи игровые ситуации не надо списывать на чит.

Сам я столкнулся с читами давно, играя по сетке в Counter Strike. Одновременно я работал в компании RevoltGames Multimedia ведущим программистом проекта Neuro. И даже однажды для эксперимента по-быстрому накидал простенький чит для CS, позволяющий видеть сквозь стены (Wallhack / Волхак).

Сразу оговорюсь - нижеописанное является верным для сетевых 3Д шутеров, построенных на системе Клиент-Сервер и клиенты которых работают под управлением Windows.

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

Так как (в идеале) игроки не имеют доступа к серверным файлам, то и программы-читы так же не могут повлиять на работу сервера. Остается оперирование данными, доступными клиенту. Вдаваться в подробности взлома и реверса кода клиента я не буду - это в данном случае никому не нужно. Просто скажу, что 99% читов имеют немного общего в принципах работы со значительно более полезной для честных игроков программой для захвата видео - PlayClaw.

Общее заключается в том, что они перехватывают методы отрисовки кадра и уже потом рендерят поверх кадра игры всю необходимую информацию (Overlays / Оверлеи). Собственно, из-за этого некоторые "продвинутые" системы защиты могут определять безобидные программы как потенциально опасные (например Hackshield Pro для шутера Combat Arms довольно туполоб в этом отношении).

Основные виды читов (их возможности)
100% клиентов сетевых 3д шутеров имеют доступ к положению игроков, которых видит наш игрок или потенциально может видеть. Потенциально видимый игрок может находиться за стеной или вообще невидим, но он находится рядом с нашим игроком. Чит отрисует всех видимых и потенциально видимых игроков (а так же возможно и предметы, и прочие полезные вещи) поверх кадра игры. Иногда для этого применяют выделение по цвету, чтобы даже полный дятел смог заметить врага. Такой вид читов называют Wallhack (видимость через стены). Это один из классических и распространенных видов читов.


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

Дополнительными ("мелкими") видами читов являются специфические для каждой игры возможности (радары, которые показывают все, индикаторы здоровья, оружия и проч.). Есть кое-что общее, например - No-Fog (отключение "тумана войны"), позволяющий игроку видеть максимально далеко. Тут никаких ухищрений программе-читу делать не надо, просто отключается небольшой кусочек рендера игры и все. Иногда для удобства читера отключают рендер фона, как результат - черное небо и контрастные игроки на этом фоне.


Как распознать читера?
В общем случае это сделать довольно сложно. А если читер умный и использует платные (или еще хуже - приватные) читы, то это практически нереально. Под словом "распознать" я понимаю определение игрока, который использует читы с вероятностью, близкой к 100%. Значительно хуже будет заклеймить честного игрока, чем не доказать виновность читера. Начнем по порядку.

Общие методы обнаружения читов - это античит программы, в частности Punkbuster, Valve Anti-Cheat, Hackshield Pro. Реализованы они по-разному, но смысл их действий один - сканируется память процесса игры на предмет обнаружения подозрительных модулей, проверяются на целостность критичные файлы игры, проверяются на целостность уже загруженные модули игры и т.д.

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

Valve Anti-Cheat не кикает игроков, а только банит в случае 100% обнаружения чита. Причем делает она это с задержкой от нескольких дней до нескольких недель. Говорят, это сделано специально для того, чтобы читер не смог понять, где он спалился.

С Hackshield Pro я знаком немного - в процессе "борьбы" за выживание PlayClaw в игре Combat Arms эта защита попила нехилое количество крови у меня. В результате PlayClaw то работает, то нет с этой игрой, но зато читеры там просто в масле катаются :) За пару-тройку часов игры в CA я их несколько штук успел увидеть.

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

Wallhack в руках грамотного читера распознать невозможно. Если же им пользуется дятел, то по записи в демке игры или по kill-cam (если игра это позволяет), можно заметить, как он ведет стволом за игроком, находящимся за стенкой или за углом и который должен сейчас выйти на читера. В самой игре это поймать довольно сложно - нужно учитывать специфику игры. Например, если вы уверены железно на 100%, что выруливаете из-за угла незамеченным и неслышимым и видите ствол, направленный в нос (или уже летящие снаряды, ракеты) и так повторяется несколько раз с одним и тем же игроком - это повод задуматься.

Aimbot распознается значительно проще, но одновременно вероятность ошибки тут велика. Если исходить из описания чита, то все очень просто - получаете постоянные хедшоты в любых положениях от одного и того же игрока - подозрительно. Этот игрок кладет по несколько противников за очередь - еще подозрительней. Но и профессионал может так же делать, не так ли? Тут оценка чисто субъективная. С очень высокой (практически 100%) вероятностью аимбот определяется, если посмотреть на демке за игроком или побегать за ним (в его же команде) - довольно часто неопытные читеры (или чит-программа не идеальна) палятся на том, что жмут на кнопку, аимбот срабатывает и наводит прицел, игрок стреляет и убивает и аимбот автоматически захватывает другую цель, которая может быть даже сзади игрока! Вот такие резкие "скАчки по головам" есть 100% аимбот.

Из дополнений, тот же NoFog можно определить, когда вам прилетает с другого конца карты :) Обычно такое используется совместно с аимботом.

Что читом не является
...естественно, при условии корректно написанного сервера и его прямой недоступности клиенту.

Читам не являются "бесконечное" здоровье, "бесконечные" боеприпасы, "вертлявость" или вообще Neo-Matrix-подобность, умение убивать всех сразу, умение проходить сквозь стены (тут бывают косяки игр, это не чит, это glitch) и прочая подобная бодяга. ВСЕ это обрабатывается на сервере и клиент не имеет возможности менять эти параметры или влиять на действия других игроков.

Просто запомните - клиент отсылает серверу информацию о нажатых кнопках и движениях мыши (контроллеров) и принимает координаты объектов и их свойства. И ЭТО ВСЕ.

Вот, постарался популярно объяснить, что это такое и с чем это есть. Можно было бы написать еще раза в 3 больше, но это уж слишком "многа букафф" :)