Перейти к содержанию
суббота, 31 октября 2026 г.

ИИ Вестник

Главные новости о развитии искусственного интеллекта в России

Грязные хаки и виртуальная машина: как SAMP добавил мультиплеер в GTA San Andreas на 1000 игроков

Источник: Все публикации в потоке Разработка
Retro gaming setup, vintage CRT monitor showing multiplayer game, dusty keyboard, dim room.
Generated by Sourceful Riverflow (RouterAI)

В 2004 году Rockstar выпустила GTA: San Andreas без полноценного мультиплеера, но сообщество моддеров под руководством Kalcor создало SAMP, позволивший тысяче игроков одновременно находиться в одном мире. Разбор архитектуры этого проекта раскрывает нестандартные технические решения, включая перехват скриптового движка и использование его для синхронизации.

История SAMP (San Andreas Multiplayer) началась с нереализованных амбиций Rockstar. В 2004 году GTA: San Andreas вышла на PS2, а затем и на ПК, предложив игрокам огромный бесшовный мир из трёх городов, автопарк из 213 транспортных средств, длинную сюжетную кампанию с множеством побочных активностей и даже элементы RPG с базовой прокачкой персонажа. Официально мультиплеер не был предусмотрен — Rockstar не успела доделать сетевой режим, оставив лишь локальный кооператив на PS2, в котором даже миссии проходить было нельзя. При этом в файлах игры остались следы вырезанного кода: в American.gxt сохранились строки с упоминанием сетевой игры — MULTIPLAYER, LAN, INTERNET, Connection, Find game, Game type, Game name, Number of players, Player color и другие. Именно эти «ошмётки» и вдохновили сообщество на реализацию того, что не сделала студия. Группа энтузиастов под руководством разработчика Kalcor взялась за задачу обеспечить стабильную работу до 1000 игроков на одном сервере, что требовало нестандартных подходов к синхронизации и использованию ресурсов игры.

Предыстория проекта уходит корнями в моды для предыдущих частей серии. Серия GTA получила статус культовой задолго до San Andreas: ещё в 2001 году на PS2 вышла GTA III, перенёсшая геймплей в полноценное 3D и реализовавшая на скромном железе PlayStation 2 огромный город из трёх островов. После прохождения одиночной кампании многим игрокам хотелось большего — не DLC с новыми миссиями, а полноценного мультиплеера, где можно было бы устраивать анархию с другими игроками. Через год, в 2002 году, игра вышла на ПК и моментально привлекла внимание моддеров. Точную хронологию событий восстановить сложно, но, скорее всего, моддеры сначала написали софт для распаковки и запаковки текстур в форматах txd, затем импортёры и экспортёры 3D-моделей в формате dff для 3ds Max и Milkshape 3D, и параллельно ковыряли скриптовый движок игры под названием SCM. Первой попыткой реализовать мультиплеер в GTA III стал GTA3: AM, позже известный как MTA, выпущенный 9 февраля 2003 года — через год после релиза игры на ПК. Первая версия мода была написана на Visual Basic 6 немецким подростком и являлась результатом реверс-инжиниринга кода игры, в котором на тот момент разобрали только структуру класса автомобиля и игрока. Из-за этого синхронизировались только две машины, а чтобы увидеть второго игрока, нужно было сначала сесть в машину, в которой будет ехать второй игрок, затем выйти из неё и сесть в «свою» — и только после этого игроки могли увидеть друг друга, причём вторая машина оказывалась без водителя. В MTA 0.2 добавили чат и пофиксили краши, а в MTA 0.3 реализовали полноценную синхронизацию других игроков вместе с первыми игровыми режимами — Deathmatch и Stunt. Именно в 0.3 впервые использовалась собственная реализация main.scm — mta.scm. Kalcor присоединился к команде MTA во время работы над Vice City, а позже начал разработку SAMP. Важным этапом стало получение неофициальной помощи от программистов Rockstar, которые поделились заголовочными файлами с описанием структур игры. Это позволило моддерам понять, как перехватить управление скриптовым движком.

Техническая суть SAMP заключается в использовании скриптовой виртуальной машины игры (SCM) для создания и управления объектами, которые затем синхронизируются между клиентами. SCM представлял собой специализированную виртуальную машину, которая загружала огромную многопоточную программу main.scm, контролировавшую чуть ли не половину геймплея игры: зоны банд, места спавна машин, пикапы оружия и здоровья, а также содержавшую логику миссий вместе с побочными заданиями. Схожая система использовалась и в GTA2, причём DMA Design (бывшее название Rockstar North) в 1999 году опубликовала официальный компилятор вместе с документацией и примерами скриптов — что и послужило отправной точкой для реверса SCM, хотя под «капотом» обе работали похожим образом, но у GTA2 номера опкодов были другими. Многопоточность в SCM была условной: потоки в скриптах не могли выполняться параллельно на разных ядрах процессора и не контролировались планировщиком задач в ОС. Вместо этого у движка игры был собственный планировщик, который каждый кадр брал по одной инструкции каждого потока и выполнял только её. Такой подход позволял не превращать игровой цикл в мешанину из коллбэков, корутин и await'ов и сохранить синхронность и последовательность скриптовой части игры — настолько удобная концепция, что Oracle реализовала её за счёт виртуальных потоков в Java 21. Разработчики SAMP обнаружили, что можно подменить структуру CRunningScript, передав ей указатель на произвольный буфер с опкодами, и таким образом заставить игру выполнять любые действия. Это позволило создавать пешеходов, транспорт, управлять их позицией и поведением, что и легло в основу сетевой игры. Для синхронизации тысяч игроков использовалась клиент-серверная архитектура, где сервер обрабатывал логику и рассылал обновления клиентам, а клиенты, в свою очередь, применяли эти изменения через скриптовый движок. Такой подход, хотя и был «грязным хаком», оказался эффективным и позволил достичь заявленной пропускной способности.

Контекст разработки SAMP неразрывно связан с историей моддинга GTA. После выхода GTA III на ПК в 2002 году сообщество активно изучало форматы файлов и скриптовый движок. Инструменты для распаковки текстур и моделей появлялись один за другим, а понимание SCM позволило моддерам вмешиваться в игровую логику. MTA, первый мультиплеерный мод, прошёл путь от эксперимента до полноценной платформы, но именно SAMP стал самым популярным благодаря масштабируемости и поддержке тысяч игроков. К моменту выхода SAMP в 2006 году рынок мультиплеерных модов для GTA уже был насыщен, но проект Kalcor предложил нечто большее — стабильную игру с огромным количеством участников. Сравнивая SAMP с альтернативами, стоит упомянуть MTA:SA, который также предлагал мультиплеер, но с акцентом на графические улучшения и более сложную синхронизацию. SAMP же выбрал путь минимального вмешательства в движок, используя скриптовый слой, что обеспечило высокую производительность и совместимость. Кроме того, SAMP имел открытый API для создания серверов, что способствовало росту пользовательских модификаций. В отличие от MTA, SAMP не требовал мощного железа и работал даже на слабых машинах, что сделало его доступным для широкой аудитории. Это преимущество позволило SAMP стать де-факто стандартом мультиплеера для San Andreas.

Для российского рынка SAMP имел особое значение: в середине 2000-х и позже страна стала одним из крупнейших сообществ игры. Многие российские серверы (например, такие как «Аризона», «Даймонд» и другие) собирали тысячи игроков ежедневно, а разработчики серверов создавали уникальные игровые режимы, используя скриптовые возможности SAMP. Отраслевые эксперты отмечают, что SAMP продемонстрировал силу сообщества и показал, как энтузиасты могут продлевать жизнь играм на десятилетия. Для российских разработчиков этот проект стал примером того, как нестандартные технические решения могут привести к созданию успешной платформы. Значимость SAMP для российского рынка ИИ и геймдева в целом заключается ещё и в том, что он на практике доказал: скриптовый слой игры можно превратить в полноценную сетевую платформу без доступа к исходникам движка — урок, актуальный для современных проектов, где сообщества нередко продлевают жизнь продуктам через моды и серверные реализации.

Перспективы SAMP остаются туманными: с одной стороны, проект жив благодаря сообществу, но с другой — возраст игры и устаревшие технологии ограничивают приток новых игроков. Открытыми вопросами остаются дальнейшая поддержка и возможные обновления, а также влияние на современные проекты. Неясно и то, насколько применим опыт SAMP к новым частям серии и к современным сетевым решениям, где требования к безопасности и античиту заметно выше. Однако наследие SAMP очевидно: он показал, что даже «грязные хаки» могут создать процветающую экосистему. Будущее мультиплеерных модов для GTA, вероятно, будет связано с новыми частями серии, но опыт SAMP останется важным уроком для разработчиков, стремящихся к масштабируемым сетевым решениям.

Читайте также