• ,

Азы кодинга генералов, Часть 1

Блок №5.


Данный тутор будет не по конкретно одной какой-то программе, а по отдельной эпостасии моддинга генералов — кодингу. Для кодинга можно пользоваться чем угодно, хоть бубном, главное — чтобы правильно нужные нам файлы открывались. Автор не будет учить пользоваться вас блокнотом, т.к. этого не умеют только ленивые обезьяны

Лично сам автор пользуется такой прогой, как Notepad++.

Notepad++ — свободный текстовый редактор с открытым исходным кодом для Windows с подсветкой синтаксиса большого количества языков программирования и разметки.

Вот так это выглядит

Скачать его вы можете из Блока №2.
ВНИМАНИЕ! Тутор очень большой по объему и довольно-таки нудный (т.к. тут мало картинок и много информации описательного характера)! Из-за своего объема и ограничений Reds Blog данный тутор поделен на 2 части: данный блок и БЛОК№

Итак, приступим
Весь код генералов, доступный для редактирования, содержится в файлах, имеющих расширение *.ini Каждый ini-файл имеет свое собственное предназначение (т.е. мы не можем поместить код юнита в файл с описанием параметров и типов брони, например). Основная масса ini-файлов находится по адресу: папка вашего мода\Data\INI, однако ini-файлы могут находиться и в других папках, об этом будет рассказано ниже.

Кратко о файлах и их предназначении:

В папке INI кроме ini-файлов есть еще несколько папок, содержащих ini-файлы (из этих папок их перемещать нельзя, иначе не будут работать):
  • В папке MappedImages содержатся файлы, отвечающие за картинки в игре (за камеосы, заставки, кнопки, картинки консолей и пр.)
  • В папке Object содержатся файлы, отвечающие за объекты (юниты и здания в игре)
  • В папке Default содержатся исходные файлы (папка Default всегда должна присутствовать и содержать присутствующие в ней файлы, даже если в этих файлах ничего не будет, иначе будет вылет игры)


Увеличить
Об ini-файлах, содержащихся в INI:
  • AIData — выполняет часть функций ИИ.
  • Animation2D — здесь задаются параметры анимаций картинок (например, картинка «ремонта» — анимированный гаечный ключ и пр.)
  • Armor — здесь задаются различные типы брони юнитов и их параметры.
  • AudioSettings — думаю из названия понятно, что в этом файле задаются аудионастройки для игры
  • Campaign — это уже поинтересней. В файле происходит настройка вашей компании (если она у вас в моде есть), а также режима вызова (или обучения).
  • ChallengeMode — здесь тоже все ясно из названия, этот файл настраивает генералов для режима «вызова», а также настраивает их «картинки»
  • CommandButton — «командные кнопки», это кнопки, которые мы размещаем в пользовательском интерфейсе игры (игровой панели управления) для создания контекстно-зависимых команд.
  • CommandMap — автор не знает для чего этот файл, т.к. он все время был пустым
  • CommandMapDebug — здесь задаются «горячие ключи» для кнопок
  • CommandMapDemo — автор не знает для чего этот файл, но походу тут какие-то нереализованные в генах чит-ключи
  • CommandSet — здесь настраивается РАСПОЛОЖЕНИЕ кнопок, созданных и отредактированных нами в файле CommandButton
  • ControlBarResizer — здесь настраиваются размеры и позиции основных элементов панели управления и меню игры (окна, кнопки, текстовые строки, картинки и пр.). В отличии от CommandSet, где все позиции кнопок уже определены и вам нужно лишь выбрать одну из имеющихся, в этом файле ограничений нет.
  • ControlBarScheme — этот файл позволяет пользователю изменять или создавать свои собственные панели управления (можно сделать собственную для каждого генерала), которые будут использоваться игре. Он имеет дело только с внешним видом панелей, а не с их функциональностью.
  • Crate — этот файл содержит объекты и структуры, которые создаются теми или иными юнитами или спецабилками при определенных условиях, с определенными параметрами, задаваемыми здесь.
  • Credits — благодарности. Здесь можно задать текст, который будет писаться в меню в раздели «Авторы»
  • DamageFX — здесь мы можем настроить то, что будет происходить с юнитом, при атаке его тем или иным оружием с разным типом урона (т.е. графические эффекты, типа рикошета пуль от брони танков или брызг крови при попадании автоматной очереди по пехотинцу). Можно сделать разные типы DamageFX (как и разные типы брони) и раздать им разным юнитам.
  • DrawGroupInfo — в этом файле настраивается, насколько я понял, стиль текста, который появляется возле юнитов, когда мы, например, объединяем юнитов в формации, или присваиваем им номера
  • Eva — здесь настраиваются «голосовые сообщения», которые будут произнесены игрой, при выполнении какого-либо события в игре (например, «Наш черный лотос обнаружен!», или «Воин пал!», или «Нашу базу атакуют!», ну и тд.)
  • FXList — здесь настраиваются те или иные эффекты(звуковые, визуальные и пр), происходящие при определенных событиях
  • GameData и GameDataDebug — здесь находятся доступные нам для изменения параметры и настройки игры, которые не зашиты в движок (но не факт, что все что здесь предоставлено, зависит от этого файла, т.е. некоторые параметры здесь ни за что не отвечают, как бы мы их не меняли).
  • GameLOD и GameLODPresets — здесь настраивается взаимодействие движка игры с ресурсами вашего ПК (снова предупреждаю: не факт, что все что здесь предоставлено, зависит от этого файла, т.е. некоторые параметры здесь ни за что не отвечают, как бы мы их не меняли).
  • InGameUI — здесь содержатся настройки внутриигрового пользовательского интерфейса (но не панели управления, ее настройки выведены в отдельный файл, об этом писалось выше). Зато здесь можно редактировать различные типы курсоров, тектовых строк и пр..
  • Locomotor — здесь происходит настраиваются т.н. Locomotorы, «двигатели» различных юнитов. От того, какой стоит локомотор у того или иного юнита будет зависеть характер его движения, скорость, маневренность и пр.
  • MiscAudio — здесь настраиваются звуки, типа пищания сирены при нападении на ваши войска, или включения/отключения радара миникарты (например, при нехватке энергии)
  • Mouse — здесь настраиваются виды курсоров мыши, а также реакция игры на операции с мышью (например «шаг» зума)
  • Multiplayer — здесь производятся некоторые настройки мультиплеера
  • Music — здесь задаются музыкальные треки, которые могут использоваться вами в игре
  • ObjectCreationList — здесь содержатся блоки, которые используются для создания тех или иных объектов супероружиями, генсилами или спец. абилками.
  • ParticleSystem — здесь создаются различные графические эффекты (т.н. «партиклы» — частицы)
  • PlayerTemplate — здесь задаются основные параметры фракций
  • Rank — здесь настраиваются параметры ранговой системы
  • Roads — здесь настраиваются дороги
  • Science — здесь настраиваются генеральские науки
  • ShellMenuScheme — автор не знает, зачем этот файл, т.к. он все время был пустым
  • SoundEffects — здесь настраиваются различные звуковые эффекты (типа звуков при взрывах и пр.)
  • SpecialPower — здесь настраиваются спецабилки (супероружия, спецсилы и пр)
  • Speech — здесь настраивается то, что будет говорится «генералами» в кампаниях или вызове
  • Terrain — здесь настраиваются различные типы и текстуры земли
  • Upgrade — здесь настраиваются апгрейды
  • Video — здесь настраиваются видеозаставки и видеоролики, присутствующие в игре.
  • Voice — здесь настраиваются различные звуки (например, при выборе юнитов или отдаче им различных приказов на действия).
  • Water — здесь настраивается вода.
  • Weapon — здесь настраиваются различные типы оружия
  • Weather — здесь настраивается погода
  • Webpages — автор не знает, зачем этот файл, т.к. он все время был пустым
  • WindowTransitions — здесь настраиваются окна, используемые в меню


Подробнее о некоторых файлах.

AIData

В начале файла находятся некоторые параметры, назначение которых не совсем ясно, т.к. их изменение не ведет к каким-либо результатам. Например, есть параметр «MinInfantryForGroup». Он равен 3. В комментарии говорится, что это минимальное количество солдат, необходимое для того, чтобы команда начала движение. Но в игре мы видим, что ИИ захватывает нефтяные вышки командами по 2 солдата. Т.е, «MinInfantryForGroup» вообще на ИИ никак не влияет. Есть параметр «TeamsWealthyRate», который говорит о том, что ИИ должен строить команды быстрее, если у него много денег. Но строительство команд целиком и полностью регулируется скриптами. Т.е. этот параметр тоже ни на что не влияет. И т.д. Под большим вопросом стоит и назначение других параметров.
Далее идут 12 блоков «SideInfo» (для каждой стороны – по одному). Эти блоки описывают некоторые параметры сторон. Задаваемые параметры следующие:
ResourceGatherersEasy, ResourceGatherersNormal и ResourceGatherersHard – количество сборщиков ресурсов, которое надо строить для каждого ресурсного центра на легкой, средней и тяжелой сложностях.
BaseDefenseStructure1 – основное защитное сооружение. Здание, указанное в этом параметре будет строиться при запуске действий «Build one additional base defenses on the flank» и «Build one additional base defenses on the front» из раздела «Skirmish Only».
Блоки SkillSet1 и SkillSet2 указывают, какие генеральские возможности следует приобрести при получении повышений. В начале игры блок выбирается случайным образом — либо SkillSet1, либо SkillSet2. В дальнейшем, ИИ приобретает новые возможности в том порядке, в котором они указаны в выбранном блоке.
Далее содержатся 12 блоков «SkirmishBuildList» (для каждой стороны – по одному). Эти блоки являются списками строительства и отвечают за расположение зданий на базе. Когда какой-либо скрипт из группы «Base Building» пытается построить здание, игра обращается к соответствующему списку и строит здание в заданном месте. Если в заданном месте обнаруживается препятствие, то ИИ автоматически двигает здание и строит его рядом с указанными координатами. Если здания в списке строительства нет, то оно не строится. Будьте внимательны! Если вы используете действие «Build a building» из раздела «Skirmish Only», то ИИ будет строить только те здания и только в том количестве, в котором они указаны в списках строительства. Если вы хотите, чтобы ИИ построил какое-либо еще здание, то нужно добавить его в соответствующий список строительства.

Animation2D
Блоки с анимациями имеют следующий вид:
Animation DefaultHeal
  AnimationMode          = LOOP
  AnimationDelay         = 30  ; in milliseconds
  RandomizeStartFrame    = Yes
  NumberImages           = 16
  Image                  = SCPCross000
  Image                  = SCPCross001
  Image                  = SCPCross002
  Image                  = SCPCross003
  Image                  = SCPCross004
  Image                  = SCPCross005
  Image                  = SCPCross006
  Image                  = SCPCross007
  Image                  = SCPCross008
  Image                  = SCPCross009
  Image                  = SCPCross010
  Image                  = SCPCross011
  Image                  = SCPCross012
  Image                  = SCPCross013
  Image                  = SCPCross014
  Image                  = SCPCross015
End

AnimationMode = LOOP — Тип анимации (будет рассмотрен ниже)
AnimationDelay = 30 — Время выполнения анимации
RandomizeStartFrame = Yes — Картинка, с которой будет проигрываться анимация. Yes — с любой, No — по порядку
NumberImages = 16 — Кол-во картинок. Ниже перечислены их названия (названия присваиваются в одном из файлов папки MappedImages

Armor
Блоки с броней имеют следующий вид:
Armor BomberArmor                      
  Armor =  DEFAULT               0%
  Armor =  EXPLOSION             30%
  Armor =  CRUSH                 80%
  Armor =  ARMOR_PIERCING        10%
  Armor =  SMALL_ARMS            15%
  Armor =  GATTLING              30%
  Armor =  RADIATION             25%
  Armor =  POISON                25%
  Armor =  FLAME                 30%
  Armor =  PARTICLE_BEAM         70%
  Armor =  MELEE                 30%
  Armor =  INFANTRY_MISSILE      30%
  Armor =  AURORA_BOMB           70%
  Armor =  JET_MISSILES          80%
  Armor =  STEALTHJET_MISSILES   60%
  Armor =  MOLOTOV_COCKTAIL      50%
  Armor =  COMANCHE_VULCAN       20%
  Armor =  SUBDUAL_VEHICLE       100%
  Armor = HEALING            100%
End

Располагаются они так:






Campaign
Блоки с кампанией имеют следующий вид:
Campaign TRAINING
 CampaignNameLabel CAMPAIGN:TRAINING
  FirstMission Mission01
  FinalVictoryMovie USACampaignVictory
  IsChallengeCampaign yes
  PlayerFaction FactionAmericaAirForceGeneral
  Mission Mission01
    Map Maps\Training01\Training01.map
    GeneralName GUI:BioNameEntry_Pos1
    IntroMovie GeneralsChallengeBackground
    ObjectiveLine0 GUI:Objectives:
    ObjectiveLine1 LOAD:TRAINING_1
    ObjectiveLine2 LOAD:TRAINING_2
    ObjectiveLine3 LOAD:TRAINING_3
    ObjectiveLine4 LOAD:GLA08_2
    BriefingVoice BriefingUSATraining
    UnitNames0 OBJECT:Ranger
    UnitNames1 OBJECT:Humvee
    UnitNames2 OBJECT:Crusader
    LocationNameLabel OBJECT:Mazar
    VoiceLength = 17
    NextMission Mission02
  END
  Mission Mission02
    Map Maps\GC_LaserGeneral\GC_LaserGeneral.map
    GeneralName GUI:BioNameEntry_Pos5
    IntroMovie GeneralsChallengeBackground
    NextMission Mission03
  END
END

Campaign TRAINING — название кампании, где TRAINING — само имя
CampaignNameLabel CAMPAIGN:TRAINING — имя кампании которое задается в csf-файле, где CAMPAIGN:TRAINING — строчка в файле с названием имени
FirstMission Mission01 — 1 миссия, которая бкдет проигрываться в кампании, где Mission01 — название миссии
FinalVictoryMovie USACampaignVictory — видео, которое будет проигрываться при прохождении всей кампании, где USACampaignVictory — название самого видео
IsChallengeCampaign yes — это кампания входит в режим вызова? (yes — да, no — нет)
PlayerFaction FactionAmericaAirForceGeneral — фракция бота (используется в режиме вызова), где FactionAmericaAirForceGeneral — сама фракция
Далее идут отдельные блоки с миссиями (которые входят в состав кампании). Миссий может быть сколько угодно.
Map Maps\Training01\Training01.map — карта, являющеяся миссией, где Maps\Training01\Training01.map — путь до этой карты из основной папки генералов
GeneralName GUI:BioNameEntry_Pos1 — имя генерала
IntroMovie GeneralsChallengeBackground — вступительное видео перед компанией
ObjectiveLine0 GUI:Objectives: — Строка текста
BriefingVoice BriefingUSATraining — звук вступительного брифинга
UnitNames0 OBJECT:Ranger — подписи к юнитам в брифинге
LocationNameLabel OBJECT:Mazar — название местности на карте, где происходит миссия
VoiceLength = 17 — громкость звука при брифинге
NextMission Mission02 — следующая миссия после успешного прохождения этой

ChallengeMode

  GeneralPersona0
    PlayerTemplate = FactionAllies
    StartsEnabled = yes
    BioNameString = GUI:BioNameEntry_Pos0
    BioDOBString = GUI:BioDOBEntry_Pos0
    BioBirthplaceString = GUI:BioBirthplaceEntry_Pos0
    BioStrategyString = GUI:BioStrategyEntry_Pos0
    BioRankString = GUI:BioRankEntry_Pos0
    BioBranchString = GUI:BioBranchEntry_Pos0
    BioClassNumberString = GUI:BioClassNumber_Pos0
    BioPortraitSmall = PAAirGen_S
    BioPortraitLarge = PAAirGen
    PortraitMovieLeftName = PortraitAirGenLeft
    PortraitMovieRightName = PortraitAirGenRight
    DefeatedImage = PAAirGen_L
    VictoriousImage = PAAirGen_W
    DefeatedString = GUI:BioDefeatedEntry_Pos0
    VictoriousString = GUI:BioVictoriousEntry_Pos0
    ;SelectionSound = Taunts_Grainger009
    ;PreviewSound = Taunts_GCAnnouncer07
    TauntSound1 =Taunts_Grainger061
    TauntSound2 =Taunts_Grainger062
    TauntSound3 =Taunts_Grainger063
    WinSound =Taunts_Grainger064
    LossSound =Taunts_Grainger065
    NameSound = Taunts_GCAnnouncer14
    Campaign = CHALLENGE_0
  END

GeneralPersona0 — название блока (отличаются индексом)
PlayerTemplate = FactionAllies — фракция генерала
StartsEnabled = yes — включен изначально? (yes — да, no — нет)
BioNameString = GUI:BioNameEntry_Pos0 — имя генерала
BioDOBString = GUI:BioDOBEntry_Pos0 — комментарий о гене
BioBirthplaceString = GUI:BioBirthplaceEntry_Pos0 — место, откуда он (где происходит действие на его «родной» карте)
BioStrategyString = GUI:BioStrategyEntry_Pos0 — какую тактику и стратегию использует
BioRankString = GUI:BioRankEntry_Pos0 — звание генерала
BioBranchString = GUI:BioBranchEntry_Pos0 — род войск
BioClassNumberString = GUI:BioClassNumber_Pos0 — типа тоже звание
BioPortraitSmall = PAAirGen_S — маленькая превью-картинка (показывается при загрузке режима перестрелки, если играете за него)
BioPortraitLarge = PAAirGen — большая превью-картинка (показывается при загрузке режима вызова, если играете против него)
DefeatedImage = PAAirGen_L — его рожа, если вы победите
VictoriousImage = PAAirGen_W — его рожа, если вы проиграете
DefeatedString = GUI:BioDefeatedEntry_Pos0 — что он вам напишет, если вы победите
VictoriousString = GUI:BioVictoriousEntry_Pos0 — что он вам напишет, если вы проиграете
SelectionSound = Taunts_Grainger009 — что он вам скажет, если вы его выберете в челлендже
PreviewSound = Taunts_GCAnnouncer07 — что он вам скажет, если вы его выберете в противники в челлендже
WinSound =Taunts_Grainger064 — что он вам скажет, если вы проиграете
LossSound =Taunts_Grainger065 — что он вам скажет, если вы победите
NameSound = Taunts_GCAnnouncer14 — называется его имя при наведении на него курсора
Campaign = CHALLENGE_0 — компания, которая соответствует этому генералу
Помните, если вы хотите, чтобы у вашего генерала была не только собственная компания в режиме вызова, но и собственная картинка и описание тактики в мультиплеере, то ему нужно создавать здесь собственный отдельный блок.


CommandButton
Если сказать проще, то тут настраиваются ВСЕ кнопки для игры:

Существуют разные виды и типы кнопок, имеющие собственные предназначения. Общий вид они имеют такой:
CommandButton Command_ToxinBombFromShortcut
  Command           = SPECIAL_POWER_FROM_SHORTCUT
  SpecialPower      = SuperweaponToxinBomb
  Options           = NEED_SPECIAL_POWER_SCIENCE NEED_TARGET_POS CONTEXTMODE_COMMAND
  TextLabel         = CONTROLBAR:ToxinBomb
  ButtonImage       = Arado238_L
  InvalidCursorName = GenericInvalid
  ButtonBorderType  = ACTION
  DescriptLabel     = CONTROLBAR:TooltipFireToxinBomb
  RadiusCursorType  = ANTHRAXBOMB
End

Опишу общие для всех кнопок:
CommandButton Command_ToxinBombFromShortcut — название кнопки
Command = SPECIAL_POWER_FROM_SHORTCUT — тип ее комманды. От типа комманды зависит то, что эта кнопка будет делать (и какие настройки будут в ней работать)
TextLabel = CONTROLBAR:ToxinBomb — название кнопки, которое будет отображаться в игре (задается в csf-файле)
ButtonImage = Arado238_L — картинка кнопки
ButtonBorderType = ACTION — идентификатор для пользователя о том, какого типа эта кнопка
DescriptLabel = CONTROLBAR:TooltipFireToxinBomb — описание того, что делает эта кнопка, которое будет отображаться в игре (задается в csf-файле)

CommandSet
Блоки с расположением кнопок для каждого юнита/здания выглядят примерно так:
CommandSet GermanVehicleDozerCommandSet
  1  = Command_ConstructGermanStructurePowerPlant
  2  = Command_ConstructGermanStructureBarracks
  ;3  = Command_ConstructGermanRadar
  4  = Command_ConstructGermanSupplyCenter
  5  = Command_ConstructGermanStructureLightFactory
  6  = Command_ConstructGermanStructureWarCenter
  7 = Command_ConstructGermanStructureHeavyFactory
  8  = Command_ConstructGermanCommandCenter
  9 = Command_ConstructGermanStructureAirfield
  10 = Command_ConstructBritishSupplyDropZone
  12  = Command_DisarmMinesAtPosition
  13 = Command_UpgradeGLAWorkerFakeCommandSet
  14 = Command_Stop
  ;----------for bots:---------
  16  = Command_ConstructGermanGattlingCannon
  17  = Command_Construct_Flak88Turret
  ;15  = Command_ConstructArtPoz
  ;19  = Command_ConstructGermanSpeakerTower
  15  = Command_ConstructGermanPillbox
  18  = Command_ConstructGermanFlak40Platform
End


Кнопки постройки юнитов/зданий и управления ими в панели управления располагаются в таком порядке:

А вот так расположены абилки в меню выбора ген. повышений (видно, что они разбиты на 3 отдельных «ранга», кажды из которых настраивается отдельно):


Вы уже могли заметить, что необязательно, чтобы кнопки располагались обязательно друг за другом (можно оставлять места, незанятые кнопками).
В генералах доступно для настройки 14 видимых кнопок на панели управления, а также 4 «невидимых», которые нигде на ней не размещены, однако они доступны ботам для и использования (и людям, если на них назначить хоткеи на клавиатуре). В принципе, эти кнопки можно сделать и видимыми, однако для этого придется существенно видоизменять панель управления.

ControlBarResizer
Выглядит это добро вот так:
ControlBarResizer ControlBar.wnd:ControlBarParent
  AltPosition = X:0 Y:518
  AltSize = X:800 Y:82
END

Думаю, что есть что, пояснять уже не нужно, тут легко разобраться по аналогии.

Locomotor

Расскажу про них на примере 2х локомоторов: типичного танка (скорпиона) и типичного самолета (раптора).
Помните, что локомоторы разных типов войск могут иметь структурные отличия! Я привожу примеры только для самолетов и танков, хотя различных типов локомоторов намного больше!
Locomotor ScorpionLocomotor
  Surfaces            = GROUND
  Speed               = 34   ; in dist/sec
  SpeedDamaged        = 28   ; in dist/sec
  TurnRate            = 120   ; in degrees/sec
  TurnRateDamaged     = 120   ; in degrees/sec
  Acceleration        = 20   ; in degrees/sec
  AccelerationDamaged = 20   ; in degrees/sec
  Braking             = 20  ; in degrees/sec
  MinTurnSpeed        = 0   ; in dist/sec
  ZAxisBehavior       = NO_Z_MOTIVE_FORCE
  Appearance          = TREADS

  AccelerationPitchLimit = 5
  DecelerationPitchLimit = 5
  PitchStiffness = 0.05
  RollStiffness = 0.025
  PitchDamping = 0.8                
  RollDamping = 0.3                 
  ForwardAccelerationPitchFactor = 0.5 
  LateralAccelerationRollFactor = 0.33  
End


Surfaces — «среда», для которой предназначен локомотор. (GROUND — наземный, AIR — воздушный)
Speed — максимальная скорость
SpeedDamaged — скорость, при сильном повреждении юнита (урон более 75%)
TurnRate — угловая скорость разворота на месте
TurnRateDamaged — то же, при сильном уроне
Acceleration — ускорение юнита
AccelerationDamaged — то же, при сильном уроне
Braking — торможение юнита
MinTurnSpeed — минимальная скорость поворота
ZAxisBehavior — поведение юнита во вертикальной оси (NO_Z_MOTIVE_FORCE — «нет вертикальной движущей силы» (для всех наземных юнитов), SURFACE_RELATIVE_HEIGHT — «постоянная высота над поверхностью» (для авиации), RELATIVE_TO_HIGHEST_LAYER — «переменная высота над поверхностью» (для дронов).)
Appearance — тип шасси (TREADS — гусеницы (для танков), FOUR_WHEELS — «4 колеса» (для машин), HOVER — «парящий в воздухе» (для вертолетов и дронов), WINGS — крылья (для самолетов), TWO_LEGS — «2 ноги» (для пехоты), THRUST — «маршевый» (для ракет).)
AccelerationPitchLimit — предельный угол того, насколько шасси будет подниматься или переворачиваться с ускорением.
DecelerationPitchLimit — тоже, но при торможении
PitchStiffness — «жесткость» пружин в подвеске при движении вперед-назад
RollStiffness — тоже, только при движении из стороны в сторону
PitchDamping — как быстро затухают колебания на подвеске пружин (0 — «идельные пружины», т.е. колеблются всегда, 1 — вообще не реагируют) при движении вперед/назад.
RollDamping — тоже, только при движении из стороны в сторону
ForwardAccelerationPitchFactor — на сколько может накрениться юнит при движении по прямой
LateralAccelerationRollFactor — на сколько может накрениться юнит при прохождении поворота


Locomotor RaptorJetLocomotor
  Surfaces = AIR
  Speed = 175                 ; in dist/sec
  SpeedDamaged = 120         ; in dist/sec
  MinSpeed = 60             ; in dist/sec
  TurnRate = 120            ; in degrees/sec
  TurnRateDamaged = 90      ; in degrees/sec
  Acceleration = 120         ; in dist/(sec^2)
  AccelerationDamaged = 30  ; in dist/(sec^2)
  Lift = 120                ; in dist/(sec^2)
  LiftDamaged = 80          ; in dist/(sec^2)
  Braking = 10              ; in dist/(sec^2)
  MinTurnSpeed = 150          ; in dist/sec
  PreferredHeight = 100
  AllowAirborneMotiveForce = Yes
  ZAxisBehavior = SURFACE_RELATIVE_HEIGHT
  CirclingRadius = 100 
  Appearance = WINGS

  PitchInDirectionOfZVelFactor = 1.0  
  PitchStiffness = 0.5                  
  RollStiffness = 0.4             
  PitchDamping = 0.9        
  RollDamping = 0.8                
  ForwardVelocityPitchFactor = 0       
  LateralVelocityRollFactor = 0.2      
  Apply2DFrictionWhenAirborne = Yes
  AirborneTargetingHeight = 30
  LocomotorWorksWhenDead = Yes         
End

Помните, у самолетов нет такого параметра, как MinSpeed!
Lift — «подъемная сила», т.е. ускорение самолета в вертикальной плоскости (например, при взлете/посадке)
LiftDamaged — тоже, если он ранен
PreferredHeight — предпочтительная высота полета
AllowAirborneMotiveForce — является воздушным юнитом (Yes — да, No — нет, это нужно для того, чтобы по нему могли палить только ПВО, а не все кому не лень)
CirclingRadius — радиус и направление движения, по которому самолет кружит в воздухе, когда он бездействует, например при защите территории. (pos = по часовой стрелке, neg = против часовой стрелки, 0 = автоматически рассчитываемый наименьше возможный радиус, учитывая нашу скорость, радиус разворота и т.д.)
PitchInDirectionOfZVelFactor — автор так и не понял, что это, но похоже это какой-то вертикальный коэффициэнт ускорения
ForwardVelocityPitchFactor — автор так и не понял, что это
LateralVelocityRollFactor — автор так и не понял, что это
Apply2DFrictionWhenAirborne = Yes — автор так и не понял, что это
AirborneTargetingHeight — автор так и не понял, что это
LocomotorWorksWhenDead = Yes — нужно для корректной работы JetSlowDeathBehavior (т.е. красивой смерти самолета)
Следует знать, что у юнитов-самолетов назначают несколько типов локомоторов: для движения по аэродрому (называется как-то типа «BasicJetTaxiLocomotor»), для полетов, и у некоторых для «суперускорения» (например у авроры до сброса бомб)

Multiplayer
Как было сказано выше, здесь производятся некоторые настройки мультиплеера, типа:
  • Задания различных доступных игрокам цветов фракций на выбор
  • Задания цветов текста в мультиплеерном меню (чате и пр)
  • Задание максимального кол-ва маяков (Beacon), доступному каждому игроку для установки (строка MaxBeaconsPerPlayer).
  • Кол-во секунд в таймере обратного отсчета до начала игры, когда все игроки в мультиплеерном меню нажмут кнопку «Принять», подтвердив свою готовность (строка StartCountdownTimer).
  • Разрешение на использование «случайного генерала» (строка ShowRandomPlayerTemplate).
  • Разрешение на использование «случайной стартовой позиции» (строка ShowRandomStartPos).
  • Разрешение на использование «случайного цвета» (строка ShowRandomColor).
  • Суммы денег, доступные игрокам на выбор (блоки MultiplayerStartingMoneyChoice)

Music
Здесь задаются музыкальные треки, которые могут использоваться вами в игре
Структура файла довольно проста. В блоках задается игровое имя трека (CINE_Music), которое будет использоваться игрой, присваивающееся реальному файлу creditstrack.mp3 из папки [Корневая директория игры]\Data\Audio\Tracks
MusicTrack CINE_Music
  Filename = creditstrack.mp3
End

Помните, что не рекомендуется удалять стандартные музыкальные треки из этого файла, т.к. это может привести к вылету игры (но никто не запрещает вам в этом файле вписывать свои, новые, или давать своим трекам имена старых)

ObjectCreationList

Блоки могут содержать себе отдельные подгруппы (их число не ограничено). У каждого блока (и у каждой подгруппы) должно быть начало с названием (строка ObjectCreationList Название) и конец (строка END), иначе будет выводится ошибка при запуске игры.
Помните, что у подгрупп нет названий, в отличии от блоков.
ObjectCreationList OSL_Пример
  CreateObject
  :Это подгруппа №1
  End
  DeliverPayload
  :Это подгруппа №2
  End
  CreateDebris
  :Это подгруппа №3
  End
  CreateObject
  :Это подгруппа №4
  End
End

Подгруппы могут быть следующих типов:
  • CreateObject — для создания каких-либо объектов
    CreateObject
        ObjectNames = GLAInfantryTerrorist
        Count = 5
        SpreadFormation = Yes
        MinDistanceAFormation = 20.0
        MinDistanceBFormation = 30.0
        MaxDistanceFormation = 400.0
        FadeIn = Yes
        FadeTime = 3000
        FadeSound =  TerrorCellActivated
      End

    ObjectNames — названия создаваемых объектов (их может быть несколько)
    Count — их кол-во
    SpreadFormation — Задает их появление на определенной местности, а не из одной точки
    FadeIn — постепенно делать видимыми (т.е. появление объектов будет «гладким» а не резким)
    FadeTime — собственно время, за которое появятся эти объекты
    FadeSound — звук при их появлении

  • CreateDebris — для создания каких-либо обломках или мусора (например, при уничтожении танка он взрывается и из него во все стороны летят куски брони). Отличается от CreateObject тем, что работает с моделями, а не с объектами (+ различные др. настройки)
    CreateDebris
        ModelNames = None
        Offset = X:0 Y:0 Z:0
        Mass = 2
        Count = 1
        Disposition = RANDOM_FORCE 
        MinForceMagnitude = 5
        MaxForceMagnitude = 7
        SpinRate = 180
        MinForcePitch = 55
        MaxForcePitch = 80
        ParticleSystem = BlackTrail
      End

    ModelNames — имена используемых моделей
    Offset — точка их появления (задается в координатах от начального положения исходного объекта, например, убитого танка)
    Mass — масса «обломка»
    Disposition — характер (данный параметр можно задать и в подгруппе CreateObject; RANDOM_FORCE — случайная сила (т.е обломок может полететь в любую сторону), SEND_IT_OUT — отделение вновь созданных объектов от исходного (только для CreateObject), ON_GROUND_ALIGNED — создание объектов на поверхности земли (только для CreateObject), LIKE_EXISTING — создавать на месте исходного объекта (только для CreateObject), SEND_IT_FLYING — отправить его в полет, INHERIT_VELOCITY — сохранить заданную скорость)
    MinForceMagnitude — минимальная величина силы, с которой обломок может полететь
    MaxForceMagnitude — максимальная величина силы, с которой обломок может полететь
    SpinRate — скорость вращения обломка (0 = не вращается)
    MinForcePitch — минимальный угол наклона силы, с которой обломок может полететь
    MaxForcePitch — максимальный угол наклона силы, с которой обломок может полететь
    ParticleSystem — партикл, который будет создан вместе с эти обломком

  • DeliverPayload — для транспортировки чего-либо куда-либо (используется спец. абилками)
    DeliverPayload
        Transport                       = AlliedAircraftThunderboltSpec
        FormationSize                   = 6
        FormationSpacing                = 55.0
        WeaponConvergenceFactor         = 0.5
        StartAtPreferredHeight          = Yes
        StartAtMaxSpeed                 = Yes
        MaxAttempts                     = 1               
        DropDelay                       = 500                
        DeliveryDistance                = 450                
        VisibleItemsDroppedPerInterval  = 2                   
        VisibleDropBoneBaseName         = WeaponA           
        VisibleSubObjectBaseName        = Missile             
        VisibleNumBones                 = 6                 
        VisiblePayloadTemplateName      = A10ThunderboltMissile  
        VisiblePayloadWeaponTemplate    = A10ThunderboltMissileWeapon
        InheritTransportVelocity        = Yes                
        ExitPitchRate                   = 30                  
        DiveStartDistance               = 500
        DiveEndDistance                 = 300
        StrafingWeaponSlot              = PRIMARY             
        StrafeLength                    = 450
        StrafeWeaponFX                  = FX_DamageTankStruckSmallArms
        DeliveryDecalRadius = 50
        DeliveryDecal
          Texture           = SCCA10Strike_USA
          Style             = SHADOW_ALPHA_DECAL
          OpacityMin        = 25%
          OpacityMax        = 50%
          OpacityThrobTime  = 500
          Color             = R:255 G:156 B:0 A:255 
          OnlyVisibleToOwningPlayer = Yes
        End
      End

    Transport — юнит-транспорт, с помощью которого будет доставлен нужный нам объект
    FormationSize — кол-во транспортов
    FormationSpacing — расстояние
    WeaponConvergenceFactor — коэффициэнт рассеивания оружия (т.е. на сколько могут отклониться бомбы/десантники от цели)
    StartAtPreferredHeight — стартовать транспорту на максимальной высоте
    StartAtMaxSpeed — стартовать транспорту на максимальной скорости
    MaxAttempts — максимальное кол-во попыток выброски «десанта»
    DropDelay — время м/д десантированием каждого отдельного юнита (если их больше одного) или сбросом каждой отдельной бомбы
    DeliveryDistance — расстояние до зоны выброски, с которого уже начинается и заканчивается выброска «десанта» или бомбометания
    VisibleItemsDroppedPerInterval — сбрасывать по несколько бомб/десантников за раз (задается кол-во бомб или десантников)
    VisibleDropBoneBaseName — название костей в модели транспорта, откуда будут выпадать бомбы
    VisibleSubObjectBaseName — название объектов в модели транспорта, которые играют роль бомб до их сброса
    VisibleNumBones — количество костей в модели транспорта, откуда будут выпадать бомбы
    VisiblePayloadTemplateName — название объектов, которые будут играть роль бомб после их сброса (т.е. полетят на цель)
    VisiblePayloadWeaponTemplate — оружие, которым бомбы атакуют цель
    InheritTransportVelocity — бомбы/десантники стартуют со скоростью транспорта
    ExitPitchRate — скорость, с которой бомба/десант перевернется в воздухе из горизонтального положения в вертикальное
    DiveStartDistance — расстояние, с которого транспорт начнет пикирование (если нужно) на цель
    DiveEndDistance — расстояние, с которого транспорт закончит пикирование (если нужно) на цель
    StrafingWeaponSlot — слот оружия, которым будет производиться атака на бреющем полете во время пикирования (до тех пор точка цель находится в пределах данного оружия)
    StrafeLength — длина атаки на бреющем полете
    StrafeWeaponFX — эффект, который будет воспроизводиться во время атаки на бреющем полете
    DeliveryDecalRadius — радиус картинки зоны выброски (определяет размер картинки для наглядности)

    Далее идут собственно настройки этой картинки (в подгруппе DeliveryDecal):

    Texture — текстура данной картинки
    Style — стиль текстуры
    OpacityMin — минимальная непрозрачность
    OpacityMax — максимальная непрозрачность
    OpacityThrobTime — промежуток времени чередования непрозрачности (для создания эффекта пульсации картинки)
    Color — цвет картинки
    OnlyVisibleToOwningPlayer — видима только для игрока, создавшего ее (Yes — только для него, No — для всех игроков).

  • Attack — для супероружий
    Attack
        WeaponSlot = PRIMARY
        NumberOfShots = 9
        DeliveryDecalRadius = 200
        DeliveryDecal
          Texture           = SCCScudStorm_GLA
          Style             = SHADOW_ALPHA_DECAL
          OpacityMin        = 25%
          OpacityMax        = 50%
          OpacityThrobTime  = 500
          Color             = R:33 G:255 B:67 A:255 
          OnlyVisibleToOwningPlayer = Yes
        End
      End

    WeaponSlot — слот оружия, которым будет производиться атака
    NumberOfShots — кол-во выстрелов
    С картинкой-декалом, думаю, все понятно.

PlayerTemplate
Собственно, с этого файла начинается создание любо новой фракции
PlayerTemplate FactionAllies
  Side              = Allies
  BaseSide          = Allies
  PlayableSide      = Yes
  StartMoney        = 0
  PreferredColor    = R:15 G:150 B:0
  IntrinsicSciences = SCIENCE_AMERICA
  PurchaseScienceCommandSetRank1  = SCIENCE_AMERICA_CommandSetRank1
  PurchaseScienceCommandSetRank3  = SCIENCE_AMERICA_CommandSetRank3
  PurchaseScienceCommandSetRank8  = SCIENCE_AMERICA_CommandSetRank8
  SpecialPowerShortcutCommandSet  = Allies_SpecialPowerShortcut
  SpecialPowerShortcutWinName     = GenPowersShortcutBarUS.wnd
  SpecialPowerShortcutButtonCount = 10
  DisplayName       = INI:FactionAmerica
  StartingBuilding  = AlliedCommandCenter
  StartingUnit0     = AmericaVehicleDozer
  StartingUnit1     = Allies_SpecialPowersHolderObject
  ScoreScreenImage  = America_ScoreScreen
  LoadScreenImage   = SAFactionLogoPage_US
  LoadScreenMusic   = Load_USA
  ScoreScreenMusic  = Score_USA
  ;HeadWaterMark    = SCTempSelectPortrait 
  FlagWaterMark     = WatermarkUSA
  EnabledImage      = SSObserverUSA
  BeaconName        = MultiplayerBeacon
  SideIconImage     = GameinfoAMRCA
  GeneralImage      = USA_Logo
  OldFaction        = Yes  
  ArmyTooltip       = TOOLTIP:BioStrategyLong_USA
  Features          = GUI:BioFeatures_USA
  MedallionRegular  = USAGeneral_slvr
  MedallionHilite   = USAGeneral_blue
  MedallionSelect   = USAGeneral_orng
End

PlayerTemplate — название блока нужный вам фракции
Side — собственно его фракция
BaseSide — его принадлежность (например: танковый и пехотный генералы в обычных ЗХ принадлежат Китаю, а токсиновый и подрывник к ГЛА)
PlayableSide — за эту сторону можно играть? (Yes — да, No — нет)
StartMoney — кол-во денег, с которым всегда стартует генерал (лучше оставить 0, как есть)
PreferredColor — его стандартный цвет (используется в миссиях)
IntrinsicSciences — наука, которая автоматически открывается ему при старте игры (его стандартный Science по умолчанию)
PurchaseScienceCommandSetRank1 — коммандсет в меню ген.сил, который соответствует «1 рангу»
PurchaseScienceCommandSetRank3 — 3 рангу
PurchaseScienceCommandSetRank8 — 5 рангу
SpecialPowerShortcutCommandSet — коммандсет непосредственного запуска спец. обилок (в ЗХ он находится с правого боку)
SpecialPowerShortcutWinName — название файла настройки окна коммандсета непосредственного запуска спец. обилок
SpecialPowerShortcutButtonCount — кол-во доступных кнопок в коммандсете непосредственного запуска спец. обилок
DisplayName — название фракции, которое будет высвечиваться в игре
StartingBuilding — стартовое здание игрока
StartingUnit0 — стартовый юнит игрока (их может быть несколько, можно добавить еще, создав новую строку для него типа "StartingUnit1" и поменяв в ней индекс)
ScoreScreenImage — картинка, которя является фоном в менюшке, выводимой после завершения многопользовательской игры/миссии (менюшке-статистике)
ScoreScreenMusic — музыка, котора играет в менюшке, выводимой после завершения многопользовательской игры/миссии (менюшке-статистике)
LoadScreenImage — картинка, которя является фоном в менюшке, выводимой при загрузке многопользовательской игры/миссии
LoadScreenMusic — музыка, котора играет в менюшке, выводимой при загрузке многопользовательской игры/миссии
EnabledImage — маленькая картинка, показывающая эту фракцию в режиме наблюдателя
SideIconImage — маленькая картинка, показывающая эту фракцию в окне просмотра уже играющих сторон в меню сетевой игры, а также в меню статистики (которая появляется после завершения многопользовательской игры)
OldFaction — была ли эта фракция в оригинальных генах?
ArmyTooltip — описание армии этой фракции
Features — особенности этой фракции
MedallionRegular — картинка кнопки этого генерала в режиме вызова (обычная)
MedallionHilite — картинка кнопки этого генерала в режиме вызова (при наведении курсора)
MedallionSelect — картинка кнопки этого генерала в режиме вызова (при выборе)

Rank
Вы можете задать какое угодно кол-во «рангов».
Rank 2
  RankName                      = INI:RankLevel2
  SkillPointsNeeded             = 500
  SciencesGranted               = SCIENCE_Rank2
  SciencePurchasePointsGranted  = 1
End

RankName — название ранга (используется в меню ген. повышений)
SkillPointsNeeded — кол-во «очков», которые нужно заработать, чтобы открыть этот ранг
SciencesGranted — наука, которая автоматически откроется при наборе данного ранга
SciencePurchasePointsGranted — кол-во очков для пукупки ген. абилок в меню ген. повышений, которые вы можете открыть, при наборе данного ранга

Science
С помощью наук можно обеспечивать разную степень доступности юнитов (чтобюы открыть, например, определенный танк, его нужно разблокировать в меню ген. повышений), а совместно с Rank.ini можно сделать ранговую систему (доступность определенных групп юнитов после нобора определенного скила за уничтожение врагов в игре)
Science SCIENCE_Pathfinder
  PrerequisiteSciences = SCIENCE_AMERICA SCIENCE_Rank2
  SciencePurchasePointCost = 1
  IsGrantable = Yes
  DisplayName = SCIENCE:USAPathFinder
  Description = CONTROLBAR:ToolTipUSASciencePathFinder
End

Science — название данной науки
PrerequisiteSciences — науки, которые требуются, чтобы сделать доступной для открытия (разблокировать) данную науку
SciencePurchasePointCost — кол-во очков для пукупки ген. абилок в меню ген. повышений, которые необходимо использовать, чтобы открыть данную науку
IsGrantable — можно ли ее открыть вообще в меню ген. повышений?
DisplayName — имя науки, выводимое в игре
Description — ее описание

SpecialPower
Этот файл содержит специальные силы и умения генералов (спец. абилки) и их настройки. Спец. абилки, это такие штуки, как супер-оружия, которые доступны после того, как истечет время, указанное в таймере, и игрок будет отвечать всем требуемым параметрвам (т.е. если он имеет нужный ранг, если он выбрал эту абилку в меню ген. повышений и пр.).
SpecialPower SuperweaponA10ThunderboltMissileStrike
  Enum                = SPECIAL_A10_THUNDERBOLT_STRIKE
  ReloadTime          = 450000   ; in milliseconds
  RequiredScience     = SCIENCE_A10ThunderboltMissileStrike1
  InitiateAtLocationSound = AirRaidSiren
  PublicTimer         = No
  SharedSyncedTimer   = Yes
  ViewObjectDuration  = 30000
  ViewObjectRange     = 250
  RadiusCursorRadius  = 50
  ShortcutPower       = Yes 
  AcademyClassify     = ACT_SUPERPOWER
End

SpecialPower — название
ReloadTime — таймер «перезагрузки» спец. абилки
RequiredScience — наука, которая требуется для открытия данной специальной способности
InitiateAtLocationSound — звук, который будет воспроизводится над целью при использовании данной спец. абилки
PublicTimer — таймер виден всем?
SharedSyncedTimer — есть ли таймер вообще у абилки?
ViewObjectDuration — здесь задается время таймера
ViewObjectRange — зона открытия карты, производимой этой абилкой (т.е. диаметр зоны, которая станет видимой при применении данной спец. абилки)
RadiusCursorRadius — задает радиус курсора для картинки-декала (которое появляется когда вы нажимаете на кнопка вызова нужной вам спец. абилки и выбираете цель)
ShortcutPower — находится ли находится в панели быстрого доступа (левая панель)
AcademyClassify — классификация спец. способности (ACT_SUPERPOWER

Upgrade
Апгрейды позволяют прокачивать ваших юнитов в игре. Более подробный разбор апгрейдов и операций, связанных с ними будет осуществлен в следующих статьях.
Upgrade Upgrade_ChinaEMPMines
  DisplayName        = UPGRADE:EMPMine
  Type               = OBJECT
  BuildTime          = 25.0
  BuildCost          = 500
  ButtonImage        = SNEMPMine
  ResearchSound      = MineFieldPlaced
End

DisplayName — название апгрйда, отображаемое в верхнем левом углу игры при окончании исследования.
Type — тип апгрейда (Player или Object).
BuildTime — время исследования.
BuildCost — стоимость исследования.
ButtonImage — картинка, отображаемая в нижнем левом углу рядом с портретом юнита, использующего этот апгрейд (необходимо прописать в настройках юнита).
ResearchSound — звук, воспроизводимый при окончании исследования.
AcademyClassify — используется для апгрейдов радара (в значении всегда указывается ACT_UPGRADE_RADAR).

ВНИМАНИЕ! Тутор очень большой по объему и довольно-таки нудный (т.к. тут мало картинок и много информации описательного характера)! Из-за своего объема и ограничений Reds Blog данный тутор поделен на 2 части: данный блок и БЛОК№
  • 0

  • 0

2 комментария

sgor00
Хорошо написано. Надо бы больше туторов по коддингу СнС 3 и РА3, ибо это на данный момент актуальнее и лучше.
NKA
По-моему наоборот, скверно (как не пытался его разбавить и переделать, все равно он однообразный), да и не до конца дописан, т.к. ограничение на размер.

Оставить комментарий