Skip to content
Karimov-AkbarPublic

About

Cooperative mod for GTA: San Andreas

Resources

Stars

122 stars

Watchers

4 watching

Forks

Latest commit

 

History

19 Commits

Folders and files

Repository files navigation

SA:COOP

Релиз Скачивания Сборка Лицензия MIT GTA San Andreas 1.0 US

Русский · English

SA:COOP - мод для GTA San Andreas, с которым сюжет можно пройти вдвоём по сети. Один игрок становится хостом: игра идёт по его сохранению, и миссии запускает он. Второй подключается к нему и играет в том же мире своим персонажем, со своими деньгами, навыками и внешностью.

Хост и напарник на Грув-стрит

Что умеет мод

Сюжет вдвоём

Миссию запускает хост, но начинается она, только когда в маркер встали оба. Напарник видит те же тексты, субтитры, метки на радаре, маркеры, гоночные чекпоинты и таймеры, причём тексты идут на языке его собственной игры. Реплики, которые персонажи говорят в миссиях вне катсцен, он тоже слышит. Оружие, которое миссия выдаёт CJ, получает и напарник. Награду за миссию получают оба. Враги нападают на обоих, и ранить их может каждый.

Хост стоит в маркере Напарник видит, что его ждут
Хост ждёт напарника у маркера Напарнику показано, что хост ждёт его у маркера

Катсцены

Катсцены идут у обоих одновременно, и персонаж напарника в них стоит рядом с CJ. Он слушает разговор, переминается, кивает и смотрит на того, кто говорит, а когда CJ идёт, держится чуть позади и сбоку. Движения для него взяты из анимаций самих катсцен. Пропустить катсцену можно только вдвоём: один нажимает Enter, второй соглашается тем же Enter или отказывается клавишей Esc.

Катсцена в гараже: CJ справа, персонаж напарника за ним Катсцена во дворе: персонаж напарника позади CJ и Райдера
Катсцена на вечеринке: персонаж напарника у стены слева Катсцена с Эмметом: персонаж напарника рядом с CJ

Общий мир

У обоих одни и те же прохожие, люди внутри зданий, машины и полиция, одинаковые время суток и погода. Прохожие переговариваются и ругаются у обоих одинаково, а полицейские заграждения с барьерами видны обоим. Когда один игрок уезжает, прохожие и машины рядом со вторым переходят в его игру и никуда не пропадают. Сбитые фонари и знаки, разбитые стёкла и ящики, огонь, территории банд, двери зданий, которые открывает миссия, и ворота Pay 'n' Spray и мастерских выглядят у обоих одинаково. Подковы, устрицы, снимки и граффити засчитываются в общий мир.

У хоста У напарника
Драка балласа с напарником на экране хоста Та же драка на экране напарника

Машины

Каждый водит сам или садится пассажиром к другому. Пассажир стреляет из окна: правая кнопка мыши высовывает его с оружием, левая стреляет. Тюнинг и повреждения видны второму игроку. Работают шасси и сопла самолётов, башни танка и пожарной машины, гидравлика, гудок, прожектор полицейского вертолёта, прицепы, эвакуатор и тягач в аэропорту. Взрывы, ракеты, гранаты, выстрелы танка, вода из пожарной машины, стрельба NPC из машин, поезда и радиоуправляемые модели видны обоим. Оставить машину в гараже у дома может любой из двоих, а хранит её мир хоста.

Напарник едет пассажиром в машине хоста

Своя прокачка

Еда и спортзал, навыки оружия и вождения, одежда, стрижки, тату, деньги и награды подработок у каждого свои. Что игрок делает в закусочной, спортзале, парикмахерской или тату-салоне, второй видит у себя, как и поднос с едой, сигарету, телефон у уха и раскрытый парашют. Если игрок сменит модель персонажа, например скинселектором, второй тоже увидит новую модель. Друг приходит в мир хоста своим CJ, в той одежде и с теми тату, что у него в его игре. Если он подключился из главного меню, облик берётся из его последнего сохранения. Когда хост сохраняет игру, прогресс друга сохраняется у хоста тоже.

Хост видит напарника Напарник видит хоста
Напарник в своей одежде на экране хоста Хост на экране напарника

Урон по напарнику

Хост может разрешить урон по напарнику галочкой в окне F9, перед тем как создать игру. Тогда игроки ранят и убивают друг друга пулями, кулаками, взрывами, огнём и машиной. Без галочки они друг для друга неуязвимы.

Хост замахивается битой на напарника Напарник сбит с ног, хост стоит над ним с битой

Русский и английский

Окно SA:COOP, чат и подсказки есть на русском и английском. Язык переключается вверху окна F9, и каждый выбирает его себе сам: у хоста может быть русский, а у напарника английский.

У хоста У напарника
Список игроков и ответ сервера на русском у хоста Тот же момент у напарника, всё на английском

Остальное

Подработки (такси, скорая, пожарные, полиция, сутенёр), гонки, школы, тир, грузоперевозки и карьер каждый проходит в своей игре. Есть текстовый чат и голос, причём чем дальше напарник, тем тише его слышно. Метку на карте второй игрок видит у себя на радаре, а купленный дом появляется у обоих. Над головой напарника видны его здоровье, броня, оружие и звёзды розыска. Войну за территорию начинает хост, а провоцировать её убийствами бандитов можно вдвоём. Чит-коды на погоду, трафик, прохожих и скорость игры действуют у обоих, а на оружие, деньги и здоровье только у того, кто их ввёл.

Чат, голос и список игроков на экране напарника

Установка

Нужна GTA San Andreas версии 1.0 US, чистая или сборка с модами. Если игра куплена в Steam или Rockstar Games Launcher, её сначала надо откатить до 1.0 US, например программой GTA SA Downgrader.

  1. Скачайте архив SA-COOP.zip со страницы Releases и распакуйте его в папку игры, чтобы coop.asi, install.bat и папка coop оказались рядом с gta_sa.exe.
  2. Запустите install.bat. В чистой игре он поставит загрузчик ASI-плагинов, а в сборке, где загрузчик уже есть, ничего не изменит.
  3. Запустите игру. Окно SA:COOP откроется в главном меню, а потом его можно вызвать клавишей F9. Впишите ник.

Подробная инструкция для игроков лежит в архиве в файле Инструкция.txt.

Как играть

Хост нажимает F9, открывает вкладку «Создать игру», выбирает сохранение и нажимает «Создать сервер». Если он уже в игре, сервер создаётся из текущей игры. Галочка «Урон по напарнику» над кнопкой разрешает игрокам ранить друг друга. Через пару секунд в окне появится код вида XXXX-XXXX-XXXX. Его нужно отправить другу. В коде зашит внешний IP хоста, поэтому отправляйте его только тому, с кем играете.

Друг на вкладке «Подключиться» вставляет код и нажимает «Подключиться». После этого у него загружается мир хоста. Язык переключается вверху окна, там, где RU и EN.

Окно SA:COOP в главном меню

Сюжет можно начать и с самого начала: последний пункт в списке сохранений называется «Новая игра». Пролог хост проходит один, а друг подключается сразу и ждёт. Когда 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 хоста. Лог прошлого запуска лежит рядом, в coop\coop.old.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, файлов игры в репозитории нет.

About

Cooperative mod for GTA: San Andreas

Resources

Stars

122 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages