> For the complete documentation index, see [llms.txt](https://docs.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sannybuilder.com/ru/edit-modes/opcodes-list-scm.ini.md).

# Список опкодов (SCM.INI)

{% hint style="success" %}
Документацию по опкодам можно найти в [Sanny Builder Library](https://library.sannybuilder.com/).
{% endhint %}

Основной файл, который обеспечивает компиляцию и дизассемблирование скриптов, – `INI` файл со списком опкодов. В Sanny Builder есть список опкодов для каждого [режима редактирования](/ru/edit-modes.md#opcodes).

{% hint style="info" %}
Начиная с версии 4.0 этот файл является необязательным для работы и может быть заменен определениями команд, доступными для скачивания в формате JSON в Sanny Builder Library. Новые режимы редактирования используют только файлы SBL.
{% endhint %}

| Игра                 | Имя файла  | Директория      |
| -------------------- | ---------- | --------------- |
| GTA III              | SCM.INI    | data\gta3       |
| Vice City            | VCSCM.INI  | data\vc         |
| San Andreas          | SASCM.INI  | data\sa         |
| Liberty City Stories | LCSSCM.INI | data\lcs        |
| Vice City Stories    | VCSSCM.INI | data\vcs        |
| VC Mobile            | VCSCM.INI  | data\vc\_mobile |
| SA Mobile            | SASCM.INI  | data\sa\_mobile |

## Формат файла

Строки, начинающиеся с `;`, игнорируются.

### Метаданные

Файл может иметь особые параметры, которые содержат метаданные о его текущей версии.

`VERSION` – номер версии. См. директиву [$VERSION](/ru/coding/directives.md#usdversion)\
`PUBLISHER` – автор изменений \
`DATE` – дата обновления\
\
Дизассемблер выводит эту информацию в комментарии на первой строке исходника.

### Опкоды

Каждая строка с опкодом имеет следующий формат:

`xxxx=N, yyyy` \
`XXXX` – номер опкода\
`N` – кол-во параметров\
`yyyy` – описание опкода

Не допускается редактирование первых двух значений (номер опкода и кол-во параметров). Описание опкода может меняться свободно.

Если в `INI` файле содержится несколько определений для одного и того же опкода, используется последнее.

Существует соглашение, по которому описание условного опкода всегда начинается с двух пробелов.

### Параметры опкодов

Параметры - это динамическая часть опкода. В описании опкода они начинаются и заканчиваются `%`&#x20;

```
0001=1,wait %1d% ms
```

Данная строка указывает дизассемблеру, что для опкода `0001` следует написать слова `wait` и `ms`, а между ними единственный параметр опкода:

```
0001: wait 10 ms
```

Определение параметра включает в себя его [порядковый номер](/ru/edit-modes/opcodes-list-scm.ini.md#poryadok-sledovaniya-parametrov) и [тип](/ru/edit-modes/opcodes-list-scm.ini.md#tipy-parametrov).

#### Порядок следования параметров

Число в параметре `%1d%` - его порядковый номер. Он нужен, потому что в некоторых опкодах параметры переставлены местами для улучшения читабельности кода.

```
0053=5,%5d% = create_player %1o% at %2d% %3d% %4d%
```

Для опкода `0053` дизассемблер поставит 5-й параметр в начале:

```
0053: $PLAYER_CHAR = сreate_player #NULL at 2488.562 -1666.865 12.8757 
```

Если бы параметры выводились в оригинальном порядке, опкод `0053` выглядел бы так:

```
0053: сreate_player #NULL at 2488.562 -1666.865 12.8757 $PLAYER_CHAR
```

{% hint style="warning" %}
Изменение порядка следования параметров должно быть крайней мерой, т.к. оно приводит к несовместимости старых скриптов с новым INI файлом.
{% endhint %}

{% hint style="info" %}
Порядок следования параметров может различаться от режима к режиму. Смотрите [сравнительную таблицу](/ru/edit-modes.md#available-modes), чтобы узнать больше.
{% endhint %}

#### Типы параметров

Буква после номера параметра обозначает его тип.

`d` - любое значение\
`p` - имя [метки](/ru/coding/data-types.md#metki)\
`o` - имя [модели](https://app.gitbook.com/s/-M0dALM7uq5_eDYhSBjl-1508421016/coding/data-types.md#imena-modelei) (включая объекты)\
`m` - имя модели из `.ide` файла (исключая объекты)\
`g` - ключ из [`.gxt`](/ru/edit-modes.md#text) файла\
`x` - ID внешнего скрипта\
`k` - строковый литерал фиксированной длины (128 байтов)<br>

{% hint style="info" %}
Типы параметров могут свободно меняться в случае необходимости.
{% endhint %}
