> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# PR с изменениями движка

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

## Работа в субмодуле

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

Если вы не знакомы с **Git submodules**: субмодули Git — это, по сути, просто Git репозитории, отслеживаемые внутри других Git репозиториев. Например, SS14 имеет субмодуль, указывающий на Robust.

Поскольку субмодуль всё ещё является полноценным Git репозиторием, вы можете работать с ним, как с любым другим репозиторием: делать коммиты, ветки, push, pull и т.д. Родительский репозиторий отслеживает текущий checkout коммит дочернего субмодуля и не заботится ни о чём другом, что происходит в субмодуле.

Сначала вам нужно форкнуть [движок](https://github.com/space-wizards-federation/RobustToolbox). Затем вы можете изменить ваши git remotes внутри субмодуля, чтобы работать с вашим форком:

```bash theme={null}
# Go to branch master
git switch master
# Rename "origin" (the default remote, keeping track of space-wizards-federation) to "upstream".
git remote rename origin upstream
# Add your own fork as "origin" remote.
git remote add origin https://github.com/<your username>/RobustToolbox.git
# Master will still track upstream (so you can just run git pull on it)
# and any branches you push to origin will go to your fork.
```

Во-вторых, вам нужно отключить автообновление субмодуля. По умолчанию система сборки автоматически обновляет субмодуль (чтобы людям, которые *не* хотят изменять движок, не приходилось вручную запускать `git submodule update` постоянно). Однако это мешает, если вы пытаетесь внести изменения в движок, так как будет постоянно сбрасывать вас на master! Чтобы отключить эту, возможно, функцию, поместите пустой файл с именем «`DISABLE_SUBMODULE_AUTOUPDATE`» в папку `BuildChecker/` в корне проекта SS14 (не внутри `RobustToolbox/`). Также убедитесь, что у него нет расширения `.txt` или чего-то подобного.

## Создание PR

При создании вашего PR, вы захотите сделать отдельный PR в репозитории движка и в основном репозитории.

**Не коммитьте фактическое изменение checkout коммита субмодуля в ваш основной PR контента; оставьте его не закоммиченным во время разработки.** Это постоянная причина конфликтов слияния, и мы разберёмся с этим при слиянии.

### Моя сборка падает!

Чтобы система сборки использовала ваши изменения движка при сборке вашего основного PR, вам нужно поместить «Requires `<PR>`» в сообщение PR.

Например, если ваш PR движка — #1234, то сообщение вашего основного PR будет:

```
This is my PR that requires an engine change.

  * Broke something
  * Fixed something

Requires https://github.com/space-wizards-federation/RobustToolbox/pull/1583
```

Поддерживаемые форматы можно найти на [https://github.com/space-wizards-federation/submodule-dependency](https://github.com/space-wizards-federation/submodule-dependency)

## Рекомендации по изменениям движка

Старайтесь избегать любых ломающих изменений, которые делают будущие версии движка несовместимыми со старыми версиями игры. Это не является огромной проблемой из-за того, как мы версионируем сборки движка, но всё равно вызывает очень неудобный «танец» обновлений, когда мы пытаемся обновить субмодуль в контенте. Такие подходы, как пометка чего-либо `[Obsolete]`, гораздо предпочтительнее полного удаления, когда это больше не нужно.
