Русский · English
SA:COOP - мод для GTA San Andreas, с которым сюжет можно пройти вдвоём по сети. Один игрок становится хостом: игра идёт по его сохранению, и миссии запускает он. Второй подключается к нему и играет в том же мире своим персонажем, со своими деньгами, навыками и внешностью.
Что умеет мод
Сюжет вдвоём
Миссию запускает хост, но начинается она, только когда в маркер встали оба. Напарник видит те же тексты, субтитры, метки на радаре, маркеры, гоночные чекпоинты и таймеры, причём тексты идут на языке его собственной игры. Оружие, которое миссия выдаёт CJ, получает и напарник. Награду за миссию получают оба, а враги нападают на обоих.
| Хост стоит в маркере | Напарник видит, что его ждут |
|---|---|
![]() |
![]() |
Катсцены
Катсцены идут у обоих одновременно, и персонаж напарника в них стоит рядом с CJ. Он слушает разговор, переминается, кивает и смотрит на того, кто говорит, а когда CJ идёт, держится чуть позади и сбоку. Движения для него взяты из анимаций самих катсцен. Пропустить катсцену можно только вдвоём: один нажимает Enter, второй соглашается тем же Enter или отказывается клавишей Esc.
![]() |
![]() |
![]() |
![]() |
Общий мир
У обоих одни и те же прохожие, машины и полиция, одинаковые время суток и погода. Когда один игрок уезжает, прохожие и машины рядом со вторым переходят в его игру и никуда не пропадают. Сбитые фонари и знаки, разбитые стёкла и ящики, огонь, территории банд и двери зданий, которые открывает миссия, выглядят у обоих одинаково. Подковы, устрицы, снимки и граффити засчитываются в общий мир.
| У хоста | У напарника |
|---|---|
![]() |
![]() |
Машины
Каждый водит сам или садится пассажиром к другому. Пассажир стреляет из окна: правая кнопка мыши высовывает его с оружием, левая стреляет. Тюнинг и повреждения видны второму игроку. Работают шасси и сопла самолётов, башни танка и пожарной машины, гидравлика, прицепы и эвакуатор. Взрывы, ракеты, гранаты, выстрелы танка, вода из пожарной машины, поезда и радиоуправляемые модели видны обоим. Оставить машину в гараже у дома может любой из двоих, а хранит её мир хоста.
Своя прокачка
Еда и спортзал, навыки оружия и вождения, одежда, стрижки, тату, деньги и награды подработок у каждого свои. Друг приходит в мир хоста своим CJ, в той одежде и с теми тату, что у него в его игре. Если он подключился из главного меню, облик берётся из его последнего сохранения. Когда хост сохраняет игру, прогресс друга сохраняется у хоста тоже.
| Хост видит напарника | Напарник видит хоста |
|---|---|
![]() |
![]() |
Урон по напарнику
Хост может разрешить урон по напарнику галочкой в окне F9, перед тем как создать игру. Тогда игроки ранят и убивают друг друга пулями, кулаками, взрывами, огнём и машиной. Без галочки они друг для друга неуязвимы.
![]() |
![]() |
Русский и английский
Окно SA:COOP, чат и подсказки есть на русском и английском. Язык переключается вверху окна F9, и каждый выбирает его себе сам: у хоста может быть русский, а у напарника английский.
| У хоста | У напарника |
|---|---|
![]() |
![]() |
Остальное
Подработки (такси, скорая, пожарные, полиция, сутенёр), гонки, школы, тир, грузоперевозки и карьер каждый проходит в своей игре. Есть текстовый чат и голос, причём чем дальше напарник, тем тише его слышно. Метку на карте второй игрок видит у себя на радаре, а купленный дом появляется у обоих. Над головой напарника видны его здоровье, броня, оружие и звёзды розыска. Войну за территорию начинает хост, а провоцировать её убийствами бандитов можно вдвоём. Чит-коды на погоду, трафик, прохожих и скорость игры действуют у обоих, а на оружие, деньги и здоровье только у того, кто их ввёл.
Установка
Нужна GTA San Andreas версии 1.0 US, чистая или сборка с модами. Если игра куплена в Steam или Rockstar Games Launcher, её сначала надо откатить до 1.0 US, например программой GTA SA Downgrader.
- Скачайте архив
SA-COOP.zipсо страницы Releases и распакуйте его в папку игры, чтобыcoop.asi,install.batи папкаcoopоказались рядом сgta_sa.exe. - Запустите
install.bat. В чистой игре он поставит загрузчик ASI-плагинов, а в сборке, где загрузчик уже есть, ничего не изменит. - Запустите игру. Окно SA:COOP откроется в главном меню, а потом его можно вызвать клавишей F9. Впишите ник.
Подробная инструкция для игроков лежит в архиве в файле Инструкция.txt.
Как играть
Хост нажимает F9, открывает вкладку «Создать игру», выбирает сохранение и нажимает «Создать сервер». Если он уже
в игре, сервер создаётся из текущей игры. Галочка «Урон по напарнику» над кнопкой разрешает игрокам ранить друг
друга. Через пару секунд в окне появится код вида XXXX-XXXX-XXXX. Его нужно отправить другу. В коде зашит
внешний IP хоста, поэтому отправляйте его только тому, с кем играете.
Друг на вкладке «Подключиться» вставляет код и нажимает «Подключиться». После этого у него загружается мир хоста. Язык переключается вверху окна, там, где RU и EN.

Сюжет можно начать и с самого начала: последний пункт в списке сохранений называется «Новая игра». Пролог хост проходит один, а друг подключается сразу и ждёт. Когда CJ сядет на велосипед, друг появится рядом с ним, и для него тоже найдётся велосипед.
Hamachi и Radmin не нужны. Сервер сам открывает порт через UPnP или пробивает NAT. Если у провайдеров не проходит
ни то, ни другое, хост может включить ретранслятор строкой turn в coop\server.ini, как описано в инструкции.
Клавиши
| Клавиша | Что делает |
|---|---|
| F9 | окно SA:COOP |
| T | чат: Enter отправляет сообщение, Esc закрывает |
| B | голосовая связь, пока клавиша зажата |
| G | сесть пассажиром в ближайшую машину |
| Правая кнопка мыши | пассажиром: высунуться с оружием из окна, стрелять левой кнопкой |
| F2 | список игроков |
| Enter / Esc | в катсцене: предложить пропуск и согласиться / отказаться |
В чате работают команды /help, /players и /tp (переместиться к напарнику). Хост может выгнать игрока
командой /kick <ник> [причина].
Ограничения
- Сюжетные миссии, гонки Сезара и войны за территории начинает только хост. Если в миссии CJ что-то носит, например ящики в ограблении дома с Райдером, это делает тоже хост.
- Поезд другого игрока виден, но сесть в него нельзя: его водит тот, в чьей игре он появился.
- Сюжетный прогресс (новые районы, качалки, маркеры миссий) напарник получает загрузкой мира хоста после каждой пройденной хостом миссии. Загрузка занимает несколько секунд, а место, оружие и прокачка напарника сохраняются.
- Профиль напарника хранится у хоста под его ником. С другим ником деньги и навыки начинаются заново.
- Сбитое и сломанное на улицах держится несколько минут, потом карта ставит всё на место, как в обычной игре.
- Если оба игрока за «симметричным» NAT (так бывает в мобильном интернете), без ретранслятора по коду не
подключиться. Тогда нужен
turnили проброшенный у хоста порт 7788/UDP. - Поддерживается только
gta_sa.exeверсии 1.0 US. Сборки у игроков могут отличаться, но моды, которые меняют сюжет или сохранения, нужны обоим. Еслиdata\script\main.scmу напарника не такой, как у хоста, мир хоста у него не загрузится, и мод скажет об этом в чате. - Моды через modloader работают. Модели, текстуры и эффекты каждый видит свои. Машину, которую мод добавляет под новым номером, видит только тот, у кого этот мод стоит.
Ошибки и предложения
Об ошибках, вылетах и идеях пишите в Issues. Там откроется короткая форма: что случилось, как это повторить, версия мода и какая у вас игра. Также доступна телеграмм группа, если возникают трудности с отправкой на Github
К сообщению об ошибке приложите coop\coop.log из папки игры того, у кого она случилась. Если игра вылетела,
нужен ещё coop\crash.log, а если не получается подключиться, то coop\server-data\server.log хоста.
Сборка из исходников
Нужны Windows, Python 3.10 или новее и PowerShell. Компилятор (llvm-mingw) скачивается скриптом в папку
toolchain:
powershell -ExecutionPolicy Bypass -File tools/get-toolchain.ps1
python tools/build.py # coop.dll, coop-server.exe и vorbisFile.dll в build/release/bin
python tools/build.py dist # то же и готовый архив dist/SA-COOP.zip
python tools/fsd_check.py # проверка зависимостей между слоями
python tools/i18n_check.py # проверка, что у каждого текста игры есть английский
Каждый пуш собирается в GitHub Actions, и архив сохраняется в артефактах сборки. Тег вида v0.2.0 выпускает
релиз и прикладывает к нему SA-COOP.zip.
Как устроен проект
Исходники разложены по Feature-Sliced Design. Каждая из трёх программ устроена как отдельное приложение со
слоями app, pages, widgets, features, entities и shared, а общий для них код лежит в src/common.
src/
├── client/ coop.asi, работает внутри игры
│ ├── app/ точка входа, главный цикл, патчи игры
│ ├── pages/ окно F9
│ ├── widgets/ оверлей поверх игры
│ ├── features/ сюжет и катсцены, прокачка, гаражи, голос, погода и другое
│ ├── entities/ сессия, игрок, машина, пед, миссия, профиль
│ └── shared/ обёртки движка, сеть, рисование и ввод, конфиг
├── server/ coop-server.exe, сервер для двух игроков
├── loader/ vorbisFile.dll, загрузчик ASI для чистой игры
└── common/ протокол, сеть, лог и утилиты для всех трёх
Слой подключает только слои ниже себя и свой слайс. Это проверяет tools/fsd_check.py. Подробно о том, как
мод устроен внутри и почему сделан именно так, написано в docs/ARCHITECTURE.md.
Сторонний код
- ENet (лицензия MIT): сетевой транспорт,
third_party/enet. - MinHook (лицензия BSD 2-Clause): перехват функций,
third_party/minhook. - llvm-mingw: компилятор, скачивается при сборке.
- Адреса и структуры движка сверялись с проектами gta-reversed и plugin-sdk.
Лицензия
Код SA:COOP распространяется по лицензии MIT (файл LICENSE). У ENet и MinHook свои лицензии. Их тексты
лежат в third_party и в архиве в папке coop\licenses.
SA:COOP не связан с Rockstar Games и Take-Two Interactive. Для игры нужна своя копия GTA San Andreas, файлов игры в репозитории нет.
















