Q2PRO-XНа сайт Q2PRO-XСодержаниеRUEN
III. Соперники и новые инструменты

OpenTDM-X: как научить бота выигрывать

Сентябрь 2026 · ранние беты и OpenTDM-X Beta 10

Бот мог попасть почти без промаха и всё равно проиграть карту. Он отдавал красную броню, выходил с нижнего пола под чужой рейлган, а после смерти снова появлялся безоружным в комнате, где его уже ждали. Человек за несколько таких встреч забирал всё нужное и дальше выбирал бой сам. В OpenTDM-X захотелось получить соперника, способного нарушить этот порядок: восстановиться, отнять удобную позицию и воспользоваться чужой ошибкой.

В сентябре исследовали прежние проекты ботов. Среди кандидатов были JABot из семейства ACE и 3ZB2: один привлекал разделением подсистем, другой — подробными случаями движения и боя. Проверка обнаружила ограничения и у других вариантов. В архиве Gladiator не было исходников самой библиотеки разума, у Eraser отсутствовала часть навигационного кода. Но даже полные исходники не давали готового честного игрока OpenTDM. Некоторые боты отправляли обычные команды и одновременно напрямую меняли скорость. Перенести такой контроллер целиком означало бы незаметно получить другие возможности движения.

Правила взяли из OpenTDM: оружие, предметы, физику и подсчёт результата. Для бота писали восприятие, выбор цели и исполнение. Параметр skill определял его возможности, включая разрешённую осведомлённость о противнике. Даже на высоком уровне она не давала иной физики. Рокетджамп подбрасывал бота настоящим взрывом, а выпущенная ракета проходила тот же путь, что ракета человека.

Чему учит запись матча

Первой учебной картой стала q2duel5. Сентябрьский проход анализатора разобрал 121 уникальный поток записей — свыше миллиона строк состояния игроков. Программа находила демки и в растущих папках, и внутри архивов; уже прочитанное повторно не разбирала. Дальше из кадров предстояло восстановить сами решения: к какому предмету шёл человек, почему сменил направление, что делал перед выстрелом и куда ушёл после него.

Удачный побег не всегда годится в урок. Игрок мог спастись благодаря выбранному пути, а мог — потому что противник промахнулся. Фрагменты сопоставляли с другими записями и геометрией уровня. Для трикса разбирали разгон, место прыжка и приземление: повторить нужно было действие, а не только оказаться в записанных координатах.

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

К OpenTDM-X Beta 10 бот хорошо освоил компактную q2duel5. Он давил, встречал респавны и простреливал выходы. Сборку сохранили для сравнения: при подозрении, что новые правила замедлили бота, её запускали рядом и снова играли. Часть жалоб относилась к старым недостаткам. В публичных демках OpenTDM-X Beta 10 человек тоже мог безнаказанно снимать стек сверху, пока бот оставался на нижнем полу. Возвращение к прежней сборке этого не исправляло.

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

Схема выхода после респавна: уйти за укрытие и добраться до оружия, сохранив возможность ответить сопернику.
Схема выхода после респавна: уйти за укрытие и добраться до оружия, сохранив возможность ответить сопернику.

Скачать книгу в PDF