Теперь перейдем к программированию. Синтаксис я обьяснять не буду, только приемы. Создадим профиль для Ил-2.

Сначала описываем нужные нам команды, в первую очередь режимы. Всего их будет 4:

<SCRIPTLIST>

режим навигации
loadNAV LOADMODE_NAV

режим навигации с нажатым шифтом
loadsNAV LOADMODE_sNAV

боевой режим
loadFIGHT LOADMODE_FIGHT

боевой режим с нажатым шифтом
loadsFIGHT LOADMODE_sFIGHT

Теперь все остальное:

очень полезная команда, очищает кнопку от всех функций
_NULL

# Оружие

стреляем пушками и пулеметами сразу
FireAllp backspace
FireAllr BACKSPACE

кидаем бомбы
Bomb period PERIOD

Тут надо обратить внимание на разницу в описании команд. Смысл в том, что я хочу чтобы стрельба из оружия продолжалась до тех пор пока я не отпущу соответствующую клавишу, а сброс бомб будет происходить по одной на каждое нажатие кнопки.

# Управление

FlapsUp v V
FlapsDown f F
Radiator r R
Engine i I
Gear g G
Breaks b B
WEP w W

# Вспомогательные функции

FastTime rbracket RBRACKET
SlowTime lbracket LBRACKET
Pause p P

# Обзор

Про обзор писать ничего не буду, тут каждый настраивает по-своему - я использую NewView, кто-то мышь, кто-то стандартный тип1 или тип2.

Итак, все команды описаны, начинаем назначать их клавишам. Описываем наши режимы.

<PROGRAM_MODES>

[DEFAULT]
{DEFAULT}

[NAV]
{NAV}

[sNAV]
{sNAV}

[FIGHT]
{FIGHT}

[sFIGHT]
{sFIGHT}

Почему их получилось 5? Режим DEFAULT создается по умолчанию, это тот режим который загружается при инициализации джоя.
Например - в режиме DEFAULT кнопке Триггер назначена клавиша Пробел. Кроме того, обьявлены 3 режима - М1, М2 и М3, переключения которых назначены на кнопки Mode_1, Mode_2 и Mode_3. Причем сейчас этот переключатель стоит в положении Mode_1, в котором на Триггер назначена клавиша Ввод. Что будет при загрузке профиля в джой? Если открыт текстовый редактор, то результат можно увидеть - сначала загрузится режим DEFAULT и будет нажат Пробел, после чего загрузится М1 и будет нажат Ввод (естественно, Триггер в этот момент должен быть нажат).
Для чего можно применить этот режим? Очень просто - если есть функции, которые во всех обьявленных режимах назначаются на одни и те же кнопки (например это может быть управление обзором) то назначать их лучше всего в режиме DEFAULT иначе это придется делать в каждом из обьявленных режимов.
Тут есть некоторые тонкости, возможно в дальнейшем я попробую их обьяснить, но по-моему это бесполезно - тут все надо почувствовать самому .

Итак, начнем раскидывать функции по режимам.
Обратите внимание на реализацию шифта. Как такового шифта в XD-Profile нет, им может быть любая кнопка, я выбрал Пинки. Ну а смысл шифта очень простой - при нажатии загружается новый режим, при отпускании - возвращается старый. Что я и делаю:

[DEFAULT]
Mode1Press = loadNAV
Mode2Press = loadFIGHT
{DEFAULT}

[NAV]
ShiftPress = loadsNAV
ShiftRelease = loadNAV
{NAV}

[sNAV]
{sNAV}

[FIGHT]
ShiftPress = loadsFIGHT
ShiftRelease = loadFIGHT
{FIGHT}

[sFIGHT]
{sFIGHT}

Теперь все остальное:

[DEFAULT]
Mode1Press = loadNAV
Mode2Press = loadFIGHT

FireСPress = Radiator
{DEFAULT}

[NAV]
ShiftPress = loadsNAV
ShiftRelease = loadNAV

ThrottleHat1UpPress = _NULL
ThrottleHat1RightPress = FlapsDown
ThrottleHat1LeftPress = FlapsUp

FireAPress = Engine
FireBPress = Gear
TriggerPress = Breaks
{NAV}

[sNAV]
ThrottleHat1UpPress = Pause
ThrottleHat1LeftPress = SlowTime
ThrottleHat1RightPress = FastTime
{sNAV}

[FIGHT]
ShiftPress = loadsFIGHT
ShiftRelease = loadFIGHT

ThrottleHat1UpPress = _NULL
ThrottleHat1RightPress = FlapsDown
ThrottleHat1LeftPress = FlapsUp

TriggerPress = FireAllp
TriggerRelease = FireAllr

FireAPress = _NULL
FireBPress = WEP
{FIGHT}

[sFIGHT]
FireBPress = Bomb

ThrottleHat1UpPress = Pause
ThrottleHat1LeftPress = SlowTime
ThrottleHat1RightPress = FastTime
{sFIGHT}

Вот и все. С этим профилем уже можно немного летать. Конечно, я взял только несколько основных функций для примера, но остальные добавить труда думаю не составит.

Более сложные возможности я опишу в следующий раз.