Вскрытие по-генеральски

Часть первая Вскрытие по-генеральски Command & Conquer: Generals
Взято с сайта “[ Cкачайте файл, чтобы посмотреть ссылку ]”
Автор: Андрей Верещагин
   Command & Conquer: Generals сильно отличается от предыдущих игр серии. Полигональная графика, несколько нестандартный геймплей. Но у игрового движка по-прежнему открытая архитектура, позволяющая создавать самые разнообразные моды с новыми кампаниями, юнитами, строениями и оружием. В двух статьях цикла мы расскажем о том, как создать мод, максимально непохожий на оригинальную игру.    Предмет изучения    В корневой директории игры находится несколько папок и файлов. Нас интересуют только файлы с расширением .big это архивы, в которых хранятся игровые ресурсы и текстовые файлы с параметрами игры. Для работы с архивами вам понадобится утилита FinalBIG.   Запустив программу, выберите пункт меню File/Open и укажите путь к архивному файлу, с которым вы хотите работать. В левой части программного окна появится полный список файлов, составляющих архив. Кликните левой кнопкой мыши на название заинтересовавшего вас файла в правой части окна отобразится содержимое. Чтобы извлечь из архива выбранный файл, воспользуйтесь пунктом меню Edit/Extract, указав затем путь файла для распаковки. Чтобы вытащить из архива сразу все его содержимое, выберите пункт Edit/Extract All. Для удаления файла из архива используйте пункт Delete File, для переименования файла Rename File, для добавления файла в архив Add File, для запаковки директории Add Directory (все эти команды вызываются из меню Edit). Не забывайте сохранять изменения в архиве (для этого используйте пункт меню File/Save) всякий раз, когда вы добавляете в него (или удаляете) новые файлы и папки.    При работе с игровыми архивами совсем не обязательно перезапаковывать их после внесения изменений во входящие в них файлы. Можно просто распаковать все файлы нужного вам архива и положить их в игровую директорию в те же каталоги, в которых они лежали в архиве. Например, если вы отредактировали файлы из архива INI.big, разместите их по адресу Каталог игры\Data\INI\. При этом сам архив, файлы которого вы изменяли, следует из директории с игрой удалить.    Ресурсы    Рассмотрим содержимое основных big-файлов. Архив Maps.big содержит все игровые карты в формате .map. Вы можете открыть и отредактировать их в редакторе карт Command & Conquer Generals World Builder. Архивный файл Textures.big содержит текстуры (а также интерфейсные картинки), записанные в формате .dds. Работать с ними можно с помощью пакета утилит DXT Tools.
   В архивах Audio.big и AudioEnglish.big вы найдете звуковые эффекты, записанные в формате .wav. Архивы Speech.big и SpeechEnglish.big содержат файлы с речью персонажей (тоже в формате .wav). В файле Music.big располагаются музыкальные композиции в формате .mp3. Архив W3D.big таит в себе модели игровых персонажей и объектов в виде w3d-файлов. Последние могут быть просмотрены и отредактированы с помощью программы GMAX или в графическом пакете 3DMax.    Вы можете редактировать звуковые файлы игры, подставлять новые музыкальные треки, извлекать из игры понравившуюся вам музыку, переделывать на свой вкус имеющиеся в игре карты, перерисовывать текстуры и изменять внешний вид моделей.    Броня бывает разной    Перейдем к детальному рассмотрению отдельных архивов. Начнем с файла INI.big, который содержит файлы с расширением .ini. Это текстовые файлы, их можно просматривать и редактировать в любом текстовом редакторе. Файлы *.ini содержат разнообразные игровые параметры, редактирование которых позволит существенно преобразовать игровой процесс.
[ Cкачайте файл, чтобы посмотреть картинку ]

- Теперь пехота может успешно противостоять тяжелой технике



   Изучим самые интересные ini-файлы. Armor.ini содержит атрибуты, характеризующие уязвимость того или иного типа брони. Внося изменения в данные параметры, можно в корне модифицировать весь геймплей. Танк, разваливающийся на части после второго попадания в него из простого автомата. Или пехотинец, которого не берет и ракетный залп из БТРа. А ведь подобных эффектов можно добиться, всего лишь переписав пять-шесть строчек кода! Главное не забывать про игровой баланс.    Файл подразделяется на множество разделов, каждый из которых начинается со строки вида Armor X (X название типа брони) и заканчивается словом End. В начале файла помещается полный список параметров, которые встречаются в тексте (строки в этом списке помечены знаком ";". Это обозначает их как комментарии для пользователя; игрой они не учитываются). В каждом разделе файла есть параметры вида Armor = X N%, где X название типа атаки, N значение (повреждение брони данного юнита от атаки, заданной параметром X, в процентах). Если N равно нулю, юнит не чувствителен к данному виду атаки. Обратите внимание на то, что в каких-то разделах таких атрибутов будет меньше, в каких-то больше. Можно переносить параметры из одного блока в другой, создавая для того или иного юнита новые критерии уязвимости. Давайте разберемся, за что какой параметр отвечает.    EXPLOSION взрыв, производимый ракетами при воздушном ударе.    CRUSH повреждение, наносимое броне пешего воина, попавшего под гусеницы танка. Данный атрибут присутствует только в разделах, соответствующих пехотинцам.       ARMOR_PIERCING танковая стрельба.    SMALL_ARMS атака юнитов-сборщиков ресурсов.    GATTLING стрельба, производимая китайским танком Gattling Tank или воином на джипе (юнит Technical) у GLA.    RADIATION действие радиации.    FLAME повреждения, наносимые пожаром.   LASER урон от лазерного оружия.    SNIPER пуля снайперской винтовки.    POISON ядовитые вещества.    PARTICLE_BEAM атака юнита Particle Beam (армия США).    KILL_PILOT атака юнита Jermen Kell (GLA), специализирующегося на уничтожении пилотов машин.    MELEE повреждения в рукопашной схватке.    INFANTRY_MISSILE поражение ракетой, выпущенной из базуки пехотинца.    AURORA_BOMB атака бомбой, брошенной бомбардировщиком Aurora Bomber.    LAND_MINE взрыв мины.    JET_MISSILES повреждения от ракеты, пущенной с самолета.    STEALTHJET_MISSILES атака истребителя "Стелс" (Stealth Jet).    MOLOTOV_COCKTAIL взрыв "коктейля Молотова".    COMANCHE_VULCAN один выстрел из авиационного пулемета на вертолете "Команч".    Исправляя значения приведенных выше параметров, нетрудно полностью изменить систему повреждений в игре. Вариантов множество. Мне, например, показалось, что в игре слишком слабая пехота, и я усилил броню пехотинцев (HumanArmor).       Кампании    Файл Campaign.ini отвечает за игровые кампании. Если создать свои карты в редакторе, то, изменяя параметры данного файла, можно объединить карты в кампании с уникальным сюжетом и озвучкой. Получатся даже не моды, а полноценные аддоны. Кстати, разработчики этого не предусматривали.    Campaign.ini включает в себя четыре раздела, каждый из которых содержит параметры, связанные с той или иной кампанией (исключение составляет лишь первый раздел, отвечающий за тренировочную миссию). Название каждого блока выглядит следующим образом: Campaign X, где X название кампании. Все разделы файла (кроме первого) состоят из семи подразделов, каждый из которых отвечает за определенную миссию кампании и имеет название вида: Mission MissionX, где X номер миссии. В начале любого подраздела вы встретите следующие атрибуты:    CampaignNameLabel CAMPAIGN: название кампании, отображаемое в игре.    FirstMission начальная миссия кампании. Здесь вы должны указать название подраздела, соответствующего первому заданию.    FinalVictoryMovie победный ролик, завершающий кампанию. Укажите здесь название bik-файла с роликом (без учета расширения), который должен находиться по адресу: Каталог игры\Data\Movies. Кстати, раз уже заговорили о заставках: просматривать их можно с помощью пакета утилит RAD Video Tools (берите его с нашего компакта).    В подразделах файла, соответствующих тем или иным миссиям, находятся следующие параметры:    Map название карты, на которой разворачиваются события данной миссии. Карта должна находиться в архиве Maps.big, расположенном в игровой директории.    NextMission миссия, следующая за текущей. Укажите здесь название раздела нужной вам миссии.    IntroMovie вступительный ролик.    BriefingVoice озвучка брифинга перед миссией. Указанный здесь звуковой файл должен лежать в архиве Audio.big. Обратите внимание на то, что при указании имени файла расширение прописывать не нужно.    Далее следуют параметры вида UnitNamesX OBJECT:Y, где Y название юнита, изображение которого будет показываться в правом верхнем углу экрана при загрузке миссии, а X число от 0 до 2, задающее месторасположение юнита (чем больше цифра, тем правее будет находиться картинка с юнитом).    VoiceLength продолжительность "голосового" брифинга (в секундах). Если время брифинга превышает процесс загрузки миссии, игра начинает загружаться только по окончании брифинга.    Теперь вы можете приступать к созданию собственных кампаний, заменяя ими оригинальные. Все, что для этого нужно это сделать несколько подходящих карт, объединенных общим сценарием, переозвучить брифинг и, что называется, слить воедино озвучку и отдельные карты в полноценную кампанию, редактируя описанные выше параметры.    Общие настройки    Еще один файл, содержащий множество важных игровых параметров, GameData.ini. Многие из параметров, прописанных в этом файле, могут быть настроены через игровое меню. О них мы говорить не будем. Рассмотрим список характеристик, значения которых изменяются только через файл GameData.ini.    Изменяя значения данных параметров, вы сможете преобразовать геймплей игры и визуальный ряд. Можно заставить камеру "смотреть" на поле боя под любым углом. Хотите стратегию в top-down перспективе не проблема, хотите практически плоский экшен всегда пожалуйста. Вам не нравится, что ресурсы на какой-либо карте разрешено добывать только около своей базы и не получается своровать руду у противника?! Это поправимо. И вот харвестеры уже несутся в тыл врага, чтобы похитить драгоценный полезный ископаемый. А на вырученные деньги вы сможете построить лишнее здание по производству танков. Правда, это может снизить скорость производства некоторых видов вооружения... Можно даже изменять погоду на картах. Например, как вам перспектива поиграть на карте, где растут пальмы и идет... снег?!    UseTrees данный показатель определяет, будут ли на игровых картах расти деревья. Yes да, No нет (эти же значения принимают все параметры файла, предполагающие выбор типа "да/нет"). Поставив значение данного параметра на No и заменив текстуры ландшафта на подходящие текстуры зданий, вы можете перенести действие некоторых миссий в какое-либо помещение (например, на военную базу).    UseCloudMap определяет, будут ли отображаться облака в небе и их тени на земле. Если у вас слабый компьютер, то, поставив значение на No, можно получить заметную прибавку в скорости.


[ Cкачайте файл, чтобы посмотреть картинку ]

- Посредством редактирования настроек камеры можно сотворить "классическую" RTS с top-down перспективой



   ShowObjectHealth отображение полоски "жизней" у юнитов рядом с их моделями.    HideGarrasionFlags скрывать флаги у строений, указывающие на принадлежность последних к той или иной группировке.       Далее следует ряд параметров камеры.        CameraPitch угол наклона камеры. Выставьте 90, и вы будете играть в стратегию с видом сверху (очень похожую на Total Annihilation). При этом желательно увеличить значение атрибута CameraHeight, отвечающего за высоту расположения камеры над полем боя.    CameraYaw отклонение камеры от основного направления движения.    CameraHeight высота, на которой находится камера, когда вы начинаете игру.    MaxCameraHeight максимальная высота, на которой может находиться камера (высоту расположения камеры можно регулировать, нажимая соответствующие клавиши). Советую поднять значение этого показателя: увеличится поле обзора и, соответственно, удобнее будет командовать войсками. Но сильно повышать значение параметра не стоит: при максимальном отдалении камеры будут плохо видны юниты малых размеров.       MinCameraHeight минимальная высота расположения камеры. Уменьшив значение данного параметра, вы сможете в деталях рассмотреть поле боя. Но не злоупотребляйте модели при сильном приближении выглядят угловато, да и толку от подобного расположения камеры немного.    CameraAdjustSpeed быстрота приближения/отдаления камеры (в условных единицах). Существенно увеличивать данный показатель можно только на достаточно быстрых машинах.    HistoricDamageLimit время (в миллисекундах), в течение которого на земле будут оставаться следы от какого-либо мощного оружия, использованного игроками. Поднимая значение данного параметра, вы делаете игру более правдоподобной и эффектной, но увеличиваете нагрузку на процессор. Так что чрезмерно повышать значение атрибута не стоит особенно если у вас не слишком мощный компьютер.    Gravity гравитация. Судя по комментариям разработчиков, в ранней версии игры в качестве значения данного параметра использовалось число -32.0, и, как они сами же пишут, это значение является наиболее подходящим для нашей планеты. Почему разработчики в конце концов отказались от него, остается загадкой.    TimeOfDay время суток, когда разворачиваются военные действия. Возможные варианты: MORNING (утро), AFTERNOON (день), EVENING (вечер), NIGHT (ночь).    Weather погода. Возможные значения: NORMAL (без осадков), SNOW (снег). Некоторые карты при различных погодных условиях выглядят совершенно по-разному.    BuildSpeed скорость строительства зданий и производства юнитов (в условных единицах). Меняя значение данной характеристики, вы, по сути, меняете скорость игры.    MinDistFromEdgeOfMapForBuild минимальное расстояние от края карты, на котором вы можете строить здания. Значение данного параметра, как и всех остальных атрибутов, определяющих расстояние от одного объекта до другого (или высоту чего-либо), задается в футах.    SupplyBuildBorder максимально возможное расстояние от источника ресурсов до здания, куда они доставляются. Увеличив данный параметр, вы сделаете из обычной игры настоящую гонку за ресурсами, когда за очередной порцией руды придется отправлять сборщики через всю карту в тыл противнику.    AllowedHeightVariationForBuilding максимальная высота, на которой вы можете строить здания. Подняв значение данного параметра, скажем, до отметки 20, вы разрешите игрокам строить базы в горах.    MinLowEnergyProductionSpeed минимальная скорость строительства зданий и производства войск при малом количестве электроэнергии.    MaxLowEnergyProductionSpeed максимальная скорость строительства сооружений и производства войск при малом количестве энергии.    MultipleFactory увеличение скорости производства определенного рода юнитов, если есть несколько зданий "инкубаторов". Если установить для данного атрибута значение от 0 до 1 (например, 0.5), то эффект будет противоположным. То есть: чем больше "инкубаторов" построено, тем медленнее в каждом из них производятся юниты. Уж слишком велика выгода от строительства нескольких одинаковых строений: вы получаете не только дополнительные постройки для производства определенного типа юнитов, но и прибавку в скорости их изготовления. Если же сделать так, чтобы скорость производства юнитов при этом не росла, а падала, игрокам будет не столь выгодно строить несколько одинаковых сооружений. В зависимости от ситуации им придется выбирать, что приоритетнее: одновременная сборка нескольких юнитов или же скорость постройки.    RefundPercent процент от цены постройки, который вам возвращается, когда вы продаете здание. Поставив значение 100, вы при демонтаже здания получите в казну полную его стоимость.
[ Cкачайте файл, чтобы посмотреть картинку ]

- Как видите, модели пехотинцев весьма угловаты. Но авторы умело скрыли это, не позволив нам слишком уж приближать камеру к земле



   CommandCenterHealRange максимальное расстояние от командного центра (Command Center) игрока до поврежденных юнитов, на котором юниты могут "лечиться". Если значительно увеличить данный параметр, то ваши войска смогут улучшать здоровье даже в тылу вражеской базы.    CommandCenterHealAmount скорость пополнения "жизней" у поврежденного юнита, находящегося в радиусе "лечения" командного центра. Изменяя значение этой и предыдущей характеристик, вы можете регулировать сложность захвата базы соперника.    MaxTunnelCapacity максимальное количество юнитов, которое может одновременно пребывать в туннеле (здание Tunnel Network у GLA).    StandardMinefieldDensity плотность расположения мин на минном поле. Если сильно увеличить значение данного атрибута, то по минному полю не сможет пройти даже один пехотинец.    StandardMinefieldDistance величина минного поля.    Чуть ниже в файле располагаются параметры, определяющие бонусы для юнитов при определенных условиях. Большинство параметров имеют вид WeaponBonus = X Y N, где X условие, при котором юнит получает бонус, Y характеристика воина, получаемая в прибавку, а N значение (в процентах), определяющее, насколько этот бонус поднимет уровень указанной характеристики. Приведу список основных атрибутов (для краткости будем опускать WeaponBonus = из названия параметров):    HORDE RATE_OF_FIRE бонус к скорости стрельбы юнитов Red Guard, Tank Hunter и Battlemaster, состоящих в армии. Данный бонус доступен только китайцам.    NATIONALISM RATE_OF_FIRE бонус к скорострельности Red Guard, Tank Hunter и Battlemaster, который они получают, если вы провели апгрейд под названием Nationalism в здании Propaganda Center.       ENTHUSIASTIC RATE_OF_FIRE увеличение скорости стрельбы вышеперечисленных юнитов, находящихся в радиусе действия строения Speaker Tower.    SUBLIMINAL RATE_OF_FIRE прибавка к скорости стрельбы тех же воинов, находящихся в радиусе действия строения Speaker Tower, если вы ранее апгрейдили последнее (речь идет об исследовании Subliminal Messaging в строении Propaganda Center).    GARRISONED RANGE бонус к дальности стрельбы юнитов, находящихся в гарнизоне.    GARRISONED DAMAGE увеличение силы воинов, находящихся в гарнизоне.    VETERAN RATE_OF_FIRE прибавка к скорости стрельбы юнитов-ветеранов.    VETERAN DAMAGE прибавка к силе воинов-ветеранов.    ELITE RATE_OF_FIRE бонус к скорости стрельбы элитных юнитов.    ELITE DAMAGE увеличение силы элитных юнитов.    HERO RATE_OF_FIRE бонус к скорости стрельбы воинов-героев.    HERO DAMAGE прибавка к силе юнитов-героев.    HealthBonus_Veteran бонус к жизням воина-ветерана.    HealthBonus_Elite прибавка к жизням элитного юнита.    HealthBonus_Heroic бонус к жизням воина-героя.    Корректируя значение перечисленных выше параметров, вы можете увеличивать или уменьшать скорость апгрейда ваших войск в зависимости от накопленного ими опыта.    SOLO_AI_EASY RATE_OF_FIRE, SOLO_AI_NORMAL RATE_OF_FIRE, SOLO_AI_HARD RATE_OF_FIRE скорость стрельбы юнитов компьютера на различных уровнях сложности.    HumanSoloPlayerHealthBonus_Easy, HumanSoloPlayerHealthBonus_Normal, HumanSoloPlayerHealthBonus_Hard живучесть юнитов компьютера на различных уровнях сложности. Регулируя данные значения, можно изменять сложность игры.    DefaultStartingCash сумма денег, которую игрок получает в начале миссии при игре в режиме Skirmish.    FogOfWarOn наличие "тумана войны".  
  Средства уничтожения    Мы разобрались с базовыми игровыми параметрами. Изучим файл Weapon.ini, который буквально напичкан разнообразными настройками, связанными с оружием. Редактируя эти параметры, вы сможете полностью перевооружить свои войска и войска оппонентов. Обычные автоматы будут стрелять гранатами, базуки станут метать ракеты по прямой, танки палить по врагу со скоростью "катюш", а самый простой пехотинец будет вооружен не хуже бронетранспортера.    Как и все остальные ini-файлы игры, Weapon.ini разбит на разделы, каждый из которых начинается с маркера Weapon X, где X название оружия (заканчивается раздел словом End), и отвечает за тот или иной вид вооружения. Разберем основные атрибуты, изменение которых может сильно преобразить геймплей.    PrimaryDamage урон, наносимый данным оружием (в единицах здоровья).    PrimaryDamageRadius радиус поражения снаряда, которым стреляет это оружие (в футах).    ScatterRadiusVsInfantry максимальная дистанция, на которой из данного оружия можно стопроцентно попасть по врагу. Стоит воякам отойти на большую дистанцию, как они начнут часто мазать. Если выставить большое значение данного параметра, то из простых пехотинцев получатся настоящие снайперы, попадающие по цели на другом краю карты.    AttackRange дальнобойность оружия (в футах). Даже самую примитивную пушку легко заставить бить на дальнюю дистанцию.    MinTargetPitch минимальное расстояние, на которое может стрелять данный вид вооружения.    MaxTargetPitch максимальное расстояние, на которое бьет данное оружие.    DamageType тип снаряда, которым стреляет данное оружие. Вот перечень основных типов зарядов: ARMOR_PIERCING пуля, пробивающая броню, JET_MISSILES ракеты, пущенные с самолета, EXPLOSION взрыв, SMALL_ARMS обычная пуля, LASER лазер, FLAME огонь. Как вам идея сделать танки, стреляющие огнем? Вертолеты, бьющие бронебойными пулями? Или простых пехотинцев, вооруженных лазерами?..    DeathType данный атрибут определяет, как умрет воин, убитый из данного оружия: NORMAL обычной смертью, BURNED сгорит, EXPLODED взорвется, LASERED будет испепелен лазером. Изменяя этот параметр, можно добиться весьма забавных эффектов. Например, если для лазерного оружия поставить вид смерти "взрыв", то в бою это будет выглядеть весьма забавно.    WeaponSpeed скорострельность (в условных единицах). Ракетный танк, палящий со скоростью пулеметного джипа, мечта любого маньяка-стратегофила.    WeaponRecoil сила отдачи. Выставьте, к примеру, такое значение, чтобы даже отдача от простенького автоматика сбивала пехотинцев с ног.    FireSound звук стрельбы из данного орудия убийства. Нам не удалось изменить данный параметр так, чтобы выстрел из одного оружия хорошо смотрелся со звуком от другого выстрела. Не исключено, что это удастся вам. Экспериментируйте.    ClipSize размер обоймы у данного ствола. У оружия, не использующего обойму, здесь стоит 0. Если хотите сделать оружие с небольшой обоймой скорострельным, то этот параметр надо обязательно увеличить.    ClipReloadTime время (в миллисекундах), отводимое на перезарядку оружия.    Редактируя значения всех этих параметров, вы можете изменить до неузнаваемости оригинальные виды вооружения. А можно... Создать совершенно новое оружие! Это нетрудно. Надо сделать копию раздела, соответствующего оружию, наиболее схожего с тем, которое задумали, и вставить ее между двумя любыми разделами файла. Теперь придайте вставленным параметрам подходящие значения, и оружие готово. Осталось только вооружить им какой-либо юнит. Чтобы сделать это, откройте файл FactionUnit.ini и в соответствующем юниту разделе пропишите новое оружие в группе параметров WeaponSet.    * * *    Мы перерисовали интерфейс, научились изменять положение камеры, прописывать новые характеристики для юнитов и создавать новые виды оружия. Этого достаточно, чтобы сделать игровую модификацию. Но это еще не все. В следующем номере "Игромании" мы опубликуем материал о том, как изменять систему рангов юнитов, как настраивать по своему усмотрению апгрейды зданий и внимание как сделать доступными скрытые апгрейды, которые разработчики в последний момент исключили из игры.






Вскрытие по-генеральски Command & Conquer: Generals.Часть вторая
Взято с сайта “[ Cкачайте файл, чтобы посмотреть ссылку ]”
Автор:    Андрей Верещагин
   В прошлой статье мы перерисовывали интерфейс Command & Conquer: Generals, изменяли положение камеры, прописывали новые характеристики для пеших юнитов. Сегодня мы создадим новые виды оружия, поработаем над системой рангов различных юнитов, зададим новые характеристики для транспортных юнитов и... добавим в игру новые апгрейды, которые разработчики почему-то решили спрятать от геймеров.    Средства уничтожения    Мы разобрались с базовыми игровыми параметрами. Изучим файл Weapon.ini, который буквально напичкан разнообразными настройками, связанными с оружием. Редактируя эти параметры, вы сможете полностью перевооружить свои войска и войска оппонентов. Обычные автоматы будут стрелять гранатами, базуки станут метать ракеты по прямой, танки палить по врагу со скоростью "катюш", а самый простой пехотинец будет вооружен не хуже бронетранспортера.    Как и все остальные ini-файлы игры, Weapon.ini разбит на разделы, каждый из которых начинается с маркера Weapon X, где X название оружия (заканчивается раздел словом End), и отвечает за тот или иной вид вооружения. Разберем основные атрибуты, изменение которых может сильно преобразить геймплей:    PrimaryDamage урон, наносимый данным оружием (в единицах здоровья).    PrimaryDamageRadius радиус поражения снаряда, которым стреляет это оружие (в футах).    ScatterRadiusVsInfantry максимальная дистанция, на которой из данного оружия можно стопроцентно попасть по врагу. Стоит воякам отойти на большую дистанцию, как они начнут часто мазать. Если выставить большое значение данного параметра, то из простых пехотинцев получатся настоящие снайперы, попадающие по цели на другом краю карты.    AttackRange дальнобойность оружия (в футах). Даже самую примитивную пушку легко заставить бить на дальнюю дистанцию.    MinTargetPitch минимальное расстояние, на которое может стрелять данный вид вооружения.    MaxTargetPitch максимальное расстояние, на которое бьет данное оружие.    DamageType тип снаряда, которым стреляет данное оружие. Вот перечень основных типов зарядов: ARMOR_PIERCING пуля, пробивающая броню, JET_MISSILES ракеты, пущенные с самолета, EXPLOSION взрыв, SMALL_ARMS обычная пуля, LASER лазер, FLAME огонь. Как вам идея сделать танки, стреляющие огнем? Вертолеты, бьющие бронебойными пулями? Или простых пехотинцев, вооруженных лазерами?..    DeathType данный атрибут определяет, как умрет воин, убитый из данного оружия: NORMAL обычной смертью, BURNED сгорит, EXPLODED взорвется, LASERED будет испепелен лазером. Изменяя этот параметр, можно добиться весьма забавных эффектов. Например, если для лазерного оружия поставить вид смерти "взрыв", то в бою это будет выглядеть весьма забавно.    WeaponSpeed скорострельность (в условных единицах). Ракетный танк, палящий со скоростью пулеметного джипа, мечта любого маньяка-стратегофила.    WeaponRecoil сила отдачи. Выставьте, к примеру, такое значение, чтобы даже отдача от простенького автоматика сбивала пехотинцев с ног.

[ Cкачайте файл, чтобы посмотреть картинку ]

- В действительно серьезном моде переход на новый уровень должен требовать от игрока большого количества очков опыта



   FireSound звук стрельбы из данного орудия убийства. Нам не удалось изменить данный параметр так, чтобы выстрел из одного оружия хорошо смотрелся со звуком от другого выстрела. Не исключено, что это удастся вам. Экспериментируйте.       ClipSize размер обоймы у данного ствола. У оружия, не использующего обойму, здесь стоит 0. Если хотите сделать оружие с небольшой обоймой скорострельным, то этот параметр надо обязательно увеличить.    ClipReloadTime время (в миллисекундах), отводимое на перезарядку оружия.    Редактируя значения всех этих параметров, вы можете изменить до неузнаваемости оригинальные виды вооружения. А можно... Создать совершенно новое оружие! Это нетрудно. Надо сделать копию раздела, соответствующего оружию, наиболее схожего с тем, которое задумали, и вставить ее между двумя любыми разделами файла. Теперь придайте вставленным параметрам подходящие значения, и оружие готово. Осталось только вооружить им какой-либо юнит. Чтобы сделать это, откройте файл FactionUnit.ini и в соответствующем юниту разделе пропишите новое оружие в группе параметров WeaponSet (о том, как это сделать, читайте чуть ниже).    Улучшения и продвижения    Интерфейс мы подредактировали, камеру сместили, броню юнитов изменили, создали совершенно новые виды оружия. Осталось несколько важных параметров, хранящихся в файлах Rank.ini и Upgrade.ini. Изменив их, мы придадим моду законченный вид.    Система рангов    Файл Rank.ini содержит систему рангов юнитов. Прописывая здесь другие параметры, вы можете понизить или повысить значение того или иного ранга для отдельных юнитов или для всей армии. Файл разбит на пять разделов, имеющих названия вида Rank X, где X номер уровня. В каждом разделе представлены следующие параметры:       RankName кодовое название ранга.    SkillPointsNeeded количество очков опыта, необходимое для достижения данного уровня.    SciencePurchasePointsGranted количество очков, которое вам дают при получении указанного ранга и которое идет на повышение научного уровня вашей нации.    Апгрейды    В файле Upgrade.ini размещены параметры, связанные с апгрейдами построек и юнитов. Файл состоит из ряда тематических блоков, названия которых помечены двумя чертами, состоящими из знаков "-". Каждый такой блок несет в себе апгрейды для того или иного здания или воина. Внутри блока помещаются разделы, соответствующие определенному апгрейду для этого юнита/строения и начинающиеся со слов Upgrade X, где X название апгрейда. Любой раздел файла состоит из следующих атрибутов:    DisplayName = UPGRADE: название апгрейда, отображаемое в игре.    BuildTime время, которое требуется на проведение исследования.    BuildCost стоимость апгрейда.    ButtonImage изображение кнопки (оно должно храниться в архиве Textures.big в виде dds-файла), нажав на которую, вы начнете проводить данное исследование.    ResearchSound звук, который раздается по окончании проведения исследования.    Лично мне кажется логичным добавить в игру побольше разнообразных исследований, а то слишком уж их мало предусмотрено разработчиками. Делается это по аналогии со вставкой в игру нового оружия. Единственное различие заключается в том, что апгрейд следует прописывать в качестве значения параметра вида UpgradeCameoX (о нем мы еще поговорим) у юнита (или сооружения), которое может подвергаться этому улучшению. Плюс желательно нарисовать свой значок для апгрейда (не забудьте положить его в архив Textures.big), чтобы не путать его с другими исследованиями.
[ Cкачайте файл, чтобы посмотреть картинку ]

- Апгрейды стоят теперь дешевле, зато производятся значительно дольше



       Здесь же следует отметить, что в игре имеются два апгрейда, которые авторы исключили из финальной версии (о том, как вернуть их в игру, читайте ниже).    Боевые единицы    Переходим к изучению ini-файлов из папки \Object. Она содержит девять файлов. Из них мы будем изменять следующие: CivilianBuilding.ini (содержит параметры строений, принадлежащих мирным жителям), FactionBuilding.ini (характеристики сооружений, находящихся во владении различных наций), CivilianUnit.ini (соответствует мирным юнитам), FactionUnit.ini (воины, состоящие на службе у той или иной нации), NatureUnit.ini (животные, населяющие игровые карты).    Строения    Разберем файлы, соответствующие строениям, CivilianBuilding.ini и FactionBuilding.ini. Файлы имеют схожую структуру и разбиты на разделы, каждый из которых отвечает за определенное здание, относящееся к той или иной нации. Все разделы начинаются со слов Object X, где X название постройки. В начале названия всегда стоит обозначение нации, которой данная постройка принадлежит: America США, China Китай, GLA террористы. В каждом разделе вы встретите множество групп параметров, отвечающих за внешний вид построек (части модели, анимация различных частей конструкций). Перечислю основные параметры, которые нам будут нужны при редактировании строений.    DisplayName = OBJECT: название строения, отображаемое в игре.    ButtonImage изображение кнопки, нажав на которую, вы начнете строительство данного здания.    Side нация, которая может воздвигать сооружение (America США, China Китай, GLA террористы).    EditorSorting категория объектов, к которой относится постройка (используется при работе с редактором игры).    BuildCost стоимость здания.    BuildTime время (в секундах), отводимое на постройку строения. Хотите придать игре динамичности? Тогда смело уменьшайте раза в два значение этого параметра у всех строений, а также у юнитов (о них мы поговорим чуть позднее).    EnergyProduction количество энергии, вырабатываемое строением. В случае, если здание не вырабатывает, а потребляет энергию, данный атрибут принимает отрицательное значение. Если вы больше не хотите зависеть от электроэнергии и считаете электростанции ненужными, просто установите положительное значение у данного параметра для всех строений.    VisionRange "поле зрения" конструкции, то есть размер области вокруг постройки, которая не скрыта туманом войны.    VoiceSelect речь, которую вы слышите в ответ на выделение данной постройки кликом левой кнопкой мыши. Укажите здесь название файла с речью (без расширения). Сам файл должен находиться внутри архива SpeechEnglish.big, расположенного в игровой директории.    SoundDie звук, который вы слышите, когда постройка взрывается.    SoundOnDamaged звук, который проигрывается, когда здание атакуют. Указанный здесь звуковой файл должен быть упакован в архив Audio.big.    SoundOnReallyDamaged звук, раздающийся, когда конструкция подвергается атаке нескольких юнитов сразу.    MaxHealth максимальное количество "жизней" у строения.    InitialHealth начальное количество "жизней".
[ Cкачайте файл, чтобы посмотреть картинку ]

- В созданной нами модификации не существует проблемы нехватки электроэнергии: даже командные центры способны ее генерировать



   ExperienceValue количество "опыта", которое получает данное сооружение при переходе на следующий уровень. Значение параметра выглядит следующим образом: L1 L2 L3 L4, где L1 опыт, получаемый строением при переходе на второй уровень, L2 на третий уровень, L3 на четвертый, и L4 на пятый.       UpgradeCameo1 апгрейд, которому может подвергаться данная конструкция. Здесь вы должны указать название раздела в файле Upgrade.ini, соответствующее апгрейду. Данный параметр встречается у строений крайне редко в связи с небольшим числом доступных апгрейдов для зданий.    Наряду с указанными выше характеристиками каждой постройке соответствует блок атрибутов, имеющий вид:    ArmorSet    Armor = X    DamageFX = Y    End    X обозначает тип брони здания (все типы брони прописаны в файле Armor.ini), а Y эффект, который вы видите, когда конструкция подвергается атаке.    Также каждому зданию соответствует блок параметров вида:    Prerequisites    Object = X    End    Вместо X здесь указывается название здания (а точнее, название раздела файла, соответствующего этому зданию), которое требуется соорудить для постройки данного строения. Параметров вида Object = X внутри такого блока может сколько угодно это зависит от того, сколько зданий необходимо построить.    Обратите внимание, что многие строения обладают специфическими параметрами, присущими только определенному типу зданий. Так, например, у GLA главное сооружение имеет характеристику HoleHealthRegen%PerSecond, определяющую процент "жизней" данной конструкции, который регенерируется за секунду.    У нейтральных построек (напомню, что им соответствует файл CivilianBuilding.ini) имеются те же параметры, что и у построек базы, за исключением некоторых (например, показатели BuildCost и BuildTime).    Юниты    Начнем вскрытие файлов CivilianUnit.ini и FactionUnit.ini, которые содержат характеристики игровых юнитов. Здесь вы можете встретить уже знакомые нам по файлам CivilianBuilding.ini и FactionBuilding.ini параметры Side, EditorSorting, VisionRange, MaxHealth, InitialHealth, ExperienceValue, VoiceSelect, ButtonImage, UpgradeCameo1, а также группы характеристик ArmorSet и Prerequisites. В файле FactionUnit.ini вы также обнаружите параметры вида UpgradeCameoX (X номер апгрейда), цель которых обозначать все доступные для данного юнита апгрейды. Ниже приведен список атрибутов, характерных только для юнитов и не встречающихся у строений.    IsTrainable способность юнита набирать опыт (Yes есть, No нет).    ExperienceRequired количество "опыта", которое требуется юниту для перехода на следующий уровень. Значение параметра задается аналогично показателю ExperienceValue.    TransportSlotCount транспортная способность юнита (количество солдат, которое может перевозить в себе данный юнит). Если машина не может перевозить пехоту, то в данном параметре у нее стоит 0.    Mass масса юнита. От массы зависит скорость передвижения воина.    VoiceMove фраза, которую произносит юнит, когда вы приказываете ему двигаться.    VoiceAttack боевой клич юнита, когда он атакует врага.    Помимо названных выше атрибутов, каждому юниту соответствует блок WeaponSet, определяющий, какими видами вооружения наделен данный воин. Структура блока выглядит так:    WeaponSet    Conditions = N    Weapon = PRIMARY X    Weapon = SECONDARY Y    Weapon = TERTIARY Z    End    N условие, при котором юнит получает возможность пользоваться альтернативными орудиями убийства (PLAYER_UPGRADE совершение определенного апгрейда, None такие условия отсутствуют). X название первого (основного) оружия воина, Y второго и Z третьего.
[ Cкачайте файл, чтобы посмотреть картинку ]

- Теперь вместимость армейского джипа возросла до пяти человек



Все орудия убийства прописаны в файле Weapon.ini (в этом файле вы также найдете названия всех представленных в игре видов вооружения). Параметров Weapon = SECONDARY и Weapon = TERTIARY может и не быть, если юнит наделен только одним видом вооружения. Чтобы привинтить к юниту новый вид оружия, просто вставьте в группу атрибутов WeaponSet новый параметр вида Weapon = X Y, указав вместо X номер слота для оружия, а вместо Y название оружия. Меняя значение параметра Side у нейтральных юнитов на название нужной вам нации, можно заставить нейтральных юнитов служить в армии (самый лучший вариант добавить к каждой нации по 2-3 нейтральных воина). Как вам идея покомандовать отрядами мирных граждан и водителей, управляющих легковыми машинами? Правда, следует отметить, что большинство мирных жителей не вооружены, и им нужно выдать какое-то оружие. С этой целью вы можете вставить в раздел, посвященный интересующему вас юниту, группу параметров WeaponSet и поместить в нее название нужного оружия. И вот уже хорошо вооруженные мирные граждане, уставшие сидеть без дела, забриты в рекруты и скоро станут участниками масштабного военного конфликта.       Завершая разговор о юнитах и строениях, следует отметить, что вы можете не только менять отдельные их показатели, но и замещать их новыми воинами и постройками. Правда, для этого придется также подредактировать соответствующие текстуры и модели.    Скрытое становится явным    Оказывается, в Command & Conquer: Generals имеются незадействованные апгрейды, скрытые способности у некоторых юнитов и не попавшие в игру орудия убийства. Почему разработчики отказались от всего этого, остается загадкой, но, думаю, вам будет интересно увидеть секреты собственными глазами.    Первое, что авторы игры спрятали от наших любопытных взглядов это апгрейд для юнита Tomahawk (и апгрейд, и сам юнит можно заказать в здании War Factory) под названием Cruise Missiles. Сделав этот апгрейд, вы "обучаете" воина команде Tomahawk Bombardment, что позволяет задавать ему точку, которую тот будет бомбардировать до самой своей смерти или пока вы не прикажете юниту отходить.    Чтобы включить в игру апгрейд и соответственно новую команду для Tomahawk, вы должны проделать следующее. Сначала откройте в текстовом редакторе файл Upgrade.ini (лежит в архиве INI.big), найдите в нем блок под названием America War Factory Upgrades и удалите символы ";" из начала строк (таких строк семь; строчку ****CUT**** трогать не надо), образующих верхний раздел (он называется Upgrade Upgrade_AmericaTomahawkRemoteControl) указанного блока. Зайдите в папку \Object (также находится в архиве INI.big) и найдите в ней файл FactionUnit.ini, в котором найдите раздел Object AmericaVehicleTomahawk. В нем нужно снять комментарий (то есть удалить символ ";") со строчки UpgradeCameo4 = Upgrade_AmericaTomahawkRemoteControl, а также удалить из конца строки надпись ***CUT***. Теперь вы можете заказывать скрытый ранее апгрейд.    Но нужно еще научить юнита им пользоваться. Для этого откройте файл CommandButton.ini и удалите из него символ ";" из начала каждой строки раздела CommandButton Command_UpgradeAmericaTomahawkRemoteControl. То же самое проделайте в разделе CommandButton Command_FireTomahawkAtPosition того же файла. Откройте файл CommandSet.ini. В разделе CommandSet AmericaVehicleTomahawkCommandSet уберите комментарий из строки 3 = Command_FireTomahawkAtPosition, а в блоке CommandSet AmericaWarFactoryCommand Set из строки 9 = Command_UpgradeAmericaTomahawkRemoteControl. Также удалите надпись ***CUT*** из конца строки.
[ Cкачайте файл, чтобы посмотреть картинку ]

- В строении War Factory появился новый апгрейд



Только после этого юнит Tomahawk сможет атаковать указанную точку на местности.      Вернем в игру еще один важный апгрейд. На этот раз для "китайского" юнита Red Guard. Этот апгрейд наделяет Red Guard способностью стрелять патронами, оглушающими противников, и может быть произведен в здании Propaganda Center. Чтобы активизировать апгрейд, первым делом отредактируйте файл Weapon.ini. Найдите в файле раздел Weapon RedguardStunBulletsMachineGun, удалите символ ";" из начала каждой строки. Откройте файл FactionUnit.ini из директории \Object. В разделе Object ChinaInfantryRedguard нужно снять комментарий с параметра UpgradeCameo3 и подставить следующее значение: Upgrade_ChinaStunBullets. В этом же разделе найдите группу параметров WeaponSet и смените внутри нее значение атрибута Conditions на PLAYER_UPGRADE и добавьте характеристику Weapon = SECONDARY RedguardStunBulletsMachineGun. Обратите внимание на то, что вы можете и не менять значение параметра Conditions, но тогда Red Guard будет получать оглушающий ствол не вследствие апгрейда, а с момента начала игры, что может внести определенный дисбаланс. Если же вы тем не менее решили сразу наделить "краснога стража" новым мощным оружием, корректировку файла Upgrade.ini, о которой речь пойдет дальше, можно не осуществлять.    Следующим шагом на пути к новому апгрейду является редактирование файла Upgrade.ini. В нем нужно удалить комментарий со всех строк (их всего семь) раздела Upgrade Upgrade_ChinaStunBullets (располагается в блоке China Propaganda Center Upgrade), начиная с его названия и заканчивая словом End. Апгрейд добавлен в игру.    Последнее, что спрятали от нас авторы игры это Tranquilizer, оружие, стреляющее патронами с транквилизирующими свойствами. Данной пушкой может быть вооружен воин Rebel, состоящий на службе у GLA. Чтобы добавить оружие в игру, откройте файл Weapon.ini и удалите комментарий с раздела Weapon GLARebelTranqDartsWeapon. Найдите в файле FactionUnit.ini (в каталоге \Object) раздел Object GLAInfantryRebel и добавьте в него характеристику Weapon = SECONDARY GLARebelTranqDartsWeapon в группу параметров WeaponSet.    Мы добавили в игру новые апгрейды и невиданные ранее виды оружия для каждой нации, одновременно усилив все три противоборствующие стороны. Существенного дисбаланса в игру изменения не внесли.    В бой идут одни генералы    Пришло время создавать свою модификацию. Как она будет выглядеть решать вам. Можно ограничиться легким редактированием основных игровых параметров, но вряд ли это устроит настоящего фаната Generals. Придется изменить значения множества параметров, придать игре новый облик, переписать тексты, изменить текстуры и интерфейсные картинки, смоделировать новые юниты, добавить озвучку.    Как вариант можно заменить одну из противоборствующих сторон нашими соотечественниками. Сделать это не так сложно, как кажется на первый взгляд. Для этого вовсе не обязательно видоизменять все модели юнитов и строений какой-то из наций достаточно по минимуму изменить геометрию построек, украсить их новыми текстурами, переозвучить воинов и слегка подправить внешний вид и характеристики некоторых из них. И вот уже мод с участием России готов.    Если же нет желания производить какие-то глобальные изменения и в то же время хочется создать что-то оригинальное, можно просто сделать небольшой аддон к игре. С несколькими новыми юнитами, строениями, исследованиями, видами оружия, миссиями (желательно объединенными в кампанию). Работа над созданием такого дополнения облегчается тем, что мы уже включили в игру скрытые апгрейды и секретные виды оружия.













[ Cкачайте файл, чтобы посмотреть ссылку ]
Добавляем новую сторону в игру. Переведено [ Cкачайте файл, чтобы посмотреть ссылку ]   ( исправлено 17.04.2004)
 
Данный мод не будет работать без специально созданных скриптов для вашей стороны !
Данная статейка может помочь вам в добавлении новой стороны в генов. Делайте все с прямыми руками =)  и у вас все получится.
 
Для работы нам понадобятся следующие файлы: PlayerTemplate.ini, CommandButton.ini, CommandSet.ini, и YourSidesNameHere.ini, CommandBarScheme.ini. Прежде чем вы начнете, удостоверьтесь, что все файлы “лежат” там где они должны лежать :) У вас должна быть INI папка в папке Data в основном каталоге генералов, и если вы собираетесь использовать новые модели, кнопки и т.п. , то вам также будет необходима папка Art (опять в корневом каталоге игры). Папка Art будет содержать W3d папку, куда Вы будете класть свои w3d файлы, также в папке Art будет папка Textures, где будут лежать все ваши *.dds и *.tga файлы, которые сможет использовать игра. Если папки имеют неправильные названия или лежат в неверных местах, то у вас ничего не получится.  Также, может получиться, что ваш новый юнит не видим, это значит, что вы либо не положили модель юнита в  W3D папку. Также может получиться, что ваш юнит будет не того цвета, это  значит, что игра не может прочитать файлы из папки Textures. Если все работает, то вы увидите все свои новые стороны, модели, и текстуры.
 
 
Теперь перейдем к делу. Везде, где Вы увидите YourSide, YourSides, или YOURSIDE, переименовывайте эти названия, в названия вашей стороны. Также к некоторым кодам написаны маленькие подсказки (на английском), которые могут помочь вам в понимании кода. Если какие-либо подсказки вам не понятны, обращайтесь.
Для начала откройте CommandBarScheme.ini и вставьте этот код в эту иниху.
ControlBarScheme YourSide8x6 ScreenCreationRes X:800 Y:600 Side YourSide QueueButtonImage SCBigButton RightHUDImage SULogo BuildUpClockColor R:0 G:0 B:0 A:160 ButtonBorderBuildColor R:67 G:108 B:190 A:255 ;blue
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Сохраняйте свои изменения и выходите. После, открывайте PlayerTemplate.ini. Затем вставляйте этот код. PlayerTemplate FactionYourSide Side = YourSide BaseSide = YourSide PlayableSide = Yes StartMoney = 0 PreferredColor = R:255 G:255 B:255 IntrinsicScienc
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·BioStrategyLong_YourSide Features = GUI:BioFeatures_YourSide MedallionRegular = GLAGeneral_slvr MedallionHilite = GLAGeneral_blue MedallionSelect = GLAGeneral_orng End Сохраняйте свою работу. Открывайте CommandSet.ini. Затем вставляйте нижеследующее: Co
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Теперь вы должны добавить свои собственные Science’ы (генеральские повышения), но тутор как сделать это, я напишу попозже. Сохраняйте работу и выходите.
Теперь создайте новую папку в папке INI, назвав ее Objects и создайте новый INI файл под названием YourNewSideNameHere.ini  (название ини файла должно совпадать с названием вашей стороны).
Затем откройте этот файл и пропишите новых юнитов и новые здания, которые вы хотите. Я не стану расписывать это в моем туторе. После того, как вы добавили все что вы хотели, сохраните свою работу и открывайте CommandButton.ini. Теперь сделайте кнопки для ваших юнитов и зданий и добавьте в  CommandButton.ini
CommandButton Command_ConstructYourSideCommandCenter Command = DOZER_CONSTRUCT Object = YourSideCommandCenter T
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·uildVehicleTransport End
 
 
Теперь сохраняйте свою работу. Поздравляю! Вы только что добавили свою сторону в генералов.






















Добавляем ICBM ( Межконтинентальная Баллистическая Ракета )
Автор (Author) [ Cкачайте файл, чтобы посмотреть ссылку ].
Переведено (Translated) [ Cкачайте файл, чтобы посмотреть ссылку ]
 
Для того чтобы добавить Межконтинентальную Баллистическую Ракету  ( МБР ), вам понадобятся следующие файлы: SpecialPower.ini, AmericaSuperWeaponGeneral.ini, CommandButton.ini, CommandSet.ini.
Также в папке Data должна быть папка INI.  Если папки находятся там где они не должны находится, то у вас ничего не получится. Если Вы все сделаете правильно, то Вы увидите  свою МБР’у в командной панели.
Приступим к делу. Для начала нам понадобится файл SpecialPower.ini. В него вставьте следующий код: ;----------------------------------------------------------------------------- SpecialPower SupW_CruiseMissile Enum = SUPR_SPECIAL_CRUISE_MISSILE; Rel
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Сохраняйте и открывайте CommandSet.ini.
CommandSet SupW_AmericaDozerCommandSet 10 = SupW_Command_ConstructAmericaCruiseMissileLauncher End Сохраните работу и открывайте  CommandButton.ini. CommandButton SupW_Command_ConstructAmericaCruiseMissileLaunche
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· what kind of button this is DescriptLabel = CONTROLBAR:TooltipFireICBM RadiusCursorType = NUCLEARMISSILE InvalidCursorName = GenericInvalid End
 
Сохраняйте и открывайте SuperWeaponGeneral.ini. ;-----------------------------------------------------------
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Fire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_CLOSING DAMAGED NIGHT Model = ABNukeSilo_A3D Animation = ABNukeSilo_A3D.ABNukeSilo_A3D AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_OPENING REALLYDAMAGED RUBBLE NIGHT Model = ABNukeSilo_A2E Animation = ABNukeSilo_A2E.ABNukeSilo_A2E AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_OPEN REALLYDAMAGED RUBBLE NIGHT Model = ABNukeSilo_A2E Animation = ABNukeSilo_A2E.ABNukeSilo_A2E AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE REALLYDAMAGED RUBBLE NIGHT Model = ABNukeSilo_A3E Animation = ABNukeSilo_A3E.ABNukeSilo_A3E AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_CLOSING REALLYDAMAGED RUBBLE NIGHT Model = ABNukeSilo_A3E Animation = ABNukeSilo_A3E.ABNukeSilo_A3E AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ;-------------- SNOW! -------------------- ConditionState = SNOW Model = NBNMissle_S End ConditionState = DAMAGED SNOW Model = NBNMissle_DS ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire End ConditionState = REALLYDAMAGED RUBBLE SNOW Model = NBNMissle_ES ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = AWAITING_CONSTRUCTION SNOW Model = None End ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED SNOW Model = NBNMissle_S Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT END ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED SNOW DAMAGED Model = NBNMissle_DS Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT END ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED SNOW REALLYDAMAGED Model = NBNMissle_ES Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT END ConditionState = DOOR_1_OPENING SNOW Model = NBNMissle_A2S Animation = NBNMissle_A2S.NBNMissle_A2S AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES End ConditionState = DOOR_1_WAITING_OPEN SNOW Model = NBNMissle_A2S Animation = NBNMissle_A2S.NBNMissle_A2S AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE SNOW Model = NBNMissle_A3S Animation = NBNMissle_A3S.NBNMissle_A3S AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost End ConditionState = DOOR_1_CLOSING SNOW Model = NBNMissle_A3S Animation = NBNMissle_A3S.NBNMissle_A3S AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 End ConditionState = DOOR_1_OPENING DAMAGED SNOW Model = NBNMissle_A2DS Animation = NBNMissle_A2DS.NBNMissle_A2DS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_OPEN DAMAGED SNOW Model = NBNMissle_A2DS Animation = NBNMissle_A2DS.NBNMissle_A2DS AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE DAMAGED SNOW Model = NBNMissle_A3DS Animation = NBNMissle_A3DS.NBNMissle_A3DS AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_CLOSING DAMAGED SNOW Model = NBNMissle_A3DS Animation = NBNMissle_A3DS.NBNMissle_A3DS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_OPENING REALLYDAMAGED RUBBLE SNOW Model = NBNMissle_A2ES Animation = NBNMissle_A2ES.NBNMissle_A2ES AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_OPEN REALLYDAMAGED RUBBLE SNOW Model = NBNMissle_A2ES Animation = NBNMissle_A2ES.NBNMissle_A2ES AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE REALLYDAMAGED RUBBLE SNOW Model = NBNMissle_A3ES Animation = NBNMissle_A3ES.NBNMissle_A3ES AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_CLOSING REALLYDAMAGED RUBBLE SNOW Model = NBNMissle_A3ES Animation = NBNMissle_A3ES.NBNMissle_A3ES AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ; night ConditionState = NIGHT SNOW Model = NBNMissle_NS End ConditionState = DAMAGED NIGHT SNOW Model = NBNMissle_DNS ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire End ConditionState = REALLYDAMAGED RUBBLE NIGHT SNOW Model = NBNMissle_ENS ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = AWAITING_CONSTRUCTION NIGHT SNOW Model = None End ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED NIGHT SNOW Model = NBNMissle_NS Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT END ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED NIGHT SNOW DAMAGED Model = NBNMissle_DNS Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT END ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED NIGHT SNOW REALLYDAMAGED Model = NBNMissle_ENS Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT END ConditionState = DOOR_1_OPENING NIGHT SNOW Model = NBNMissle_A2NS Animation = NBNMissle_A2NS.NBNMissle_A2NS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES End ConditionState = DOOR_1_WAITING_OPEN NIGHT SNOW Model = NBNMissle_A2NS Animation = NBNMissle_A2NS.NBNMissle_A2NS AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE NIGHT SNOW Model = NBNMissle_A3NS Animation = NBNMissle_A3NS.NBNMissle_A3NS AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost End ConditionState = DOOR_1_CLOSING NIGHT SNOW Model = NBNMissle_A3NS Animation = NBNMissle_A3NS.NBNMissle_A3NS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 End ConditionState = DOOR_1_OPENING DAMAGED NIGHT SNOW Model = NBNMissle_A2DNS Animation = NBNMissle_A2DNS.NBNMissle_A2DNS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_OPEN DAMAGED NIGHT SNOW Model = NBNMissle_A2DNS Animation = NBNMissle_A2DNS.NBNMissle_A2DNS AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE DAMAGED NIGHT SNOW Model = NBNMissle_A3DNS Animation = NBNMissle_A3DNS.NBNMissle_A3DNS AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_CLOSING DAMAGED NIGHT SNOW Model = NBNMissle_A3DNS Animation = NBNMissle_A3DNS.NBNMissle_A3DNS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_OPENING REALLYDAMAGED RUBBLE NIGHT SNOW Model = NBNMissle_A2ENS Animation = NBNMissle_A2ENS.NBNMissle_A2ENS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_OPEN REALLYDAMAGED RUBBLE NIGHT SNOW Model = NBNMissle_A2ENS Animation = NBNMissle_A2ENS.NBNMissle_A2ENS AnimationMode = MANUAL Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire ParticleSysBone = Steam01 BigMissileSteam ParticleSysBone = Steam02 BigMissileSteam End ConditionState = DOOR_1_WAITING_TO_CLOSE REALLYDAMAGED RUBBLE NIGHT SNOW Model = NBNMissle_A3ENS Animation = NBNMissle_A3ENS.NBNMissle_A3ENS AnimationMode = MANUAL Flags = START_FRAME_FIRST WeaponLaunchBone = PRIMARY RockPost ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End ConditionState = DOOR_1_CLOSING REALLYDAMAGED RUBBLE NIGHT SNOW Model = NBNMissle_A3ENS Animation = NBNMissle_A3ENS.NBNMissle_A3ENSS AnimationMode = ONCE Flags = MAINTAIN_FRAME_ACROSS_STATES2 ParticleSysBone = Smoke01 SmolderingSmoke ParticleSysBone = Smoke02 SmolderingSmoke ParticleSysBone = Smoke03 SmolderingSmoke ParticleSysBone = Smoke04 SmolderingSmoke ParticleSysBone = Smoke05 SmolderingSmoke ParticleSysBone = Smoke06 SmolderingSmoke ParticleSysBone = Smoke01 SmolderingFire ParticleSysBone = Smoke02 SmolderingFire ParticleSysBone = Smoke03 SmolderingFire ParticleSysBone = Smoke04 SmolderingFire ParticleSysBone = Smoke05 SmolderingFire ParticleSysBone = Smoke06 SmolderingFire End End ; ------------ construction-zone fence ----------------- Draw = W3DModelDraw ModuleTag_02 AnimationsRequirePower = No DefaultConditionState Model = None TransitionKey = DOWN_DEFAULT End ConditionState = NIGHT Model = None TransitionKey = DOWN_DEFAULT End ConditionState = SNOW Model = None TransitionKey = DOWN_DEFAULT End ConditionState = SNOW NIGHT Model = None TransitionKey = DOWN_DEFAULT End ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED Model = ABSupDrop_A4 Animation = ABSupDrop_A4.ABSupDrop_A4 AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_DAY End ConditionState = NIGHT AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED Model = ABSupDrop_A4N Animation = ABSupDrop_A4N.ABSupDrop_A4N AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_NIGHT End ConditionState = SNOW AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED Model = ABSupDrop_A4S Animation = ABSupDrop_A4S.ABSupDrop_A4S AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_SNOW End ConditionState = SNOW NIGHT AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED Model = ABSupDrop_A4SN Animation = ABSupDrop_A4SN.ABSupDrop_A4SN AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_SNOWNIGHT End TransitionState = DOWN_DEFAULT UP_DAY Model = ABSupDrop_A4 Animation = ABSupDrop_A4.ABSupDrop_A4 AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = DOWN_DEFAULT UP_NIGHT Model = ABSupDrop_A4N Animation = ABSupDrop_A4N.ABSupDrop_A4N AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = DOWN_DEFAULT UP_SNOW Model = ABSupDrop_A4S Animation = ABSupDrop_A4S.ABSupDrop_A4S AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = DOWN_DEFAULT UP_SNOWNIGHT Model = ABSupDrop_A4SN Animation = ABSupDrop_A4SN.ABSupDrop_A4SN AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = UP_DAY DOWN_DEFAULT Model = ABSupDrop_A4 Animation = ABSupDrop_A4.ABSupDrop_A4 AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End TransitionState = UP_NIGHT DOWN_DEFAULT Model = ABSupDrop_A4N Animation = ABSupDrop_A4N.ABSupDrop_A4N AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End TransitionState = UP_SNOW DOWN_DEFAULT Model = ABSupDrop_A4S Animation = ABSupDrop_A4S.ABSupDrop_A4S AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End TransitionState = UP_SNOWNIGHT DOWN_DEFAULT Model = ABSupDrop_A4SN Animation = ABSupDrop_A4SN.ABSupDrop_A4SN AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End End ; ------------ under-construction scaffolding ----------------- Draw = W3DModelDraw ModuleTag_03 AnimationsRequirePower = No MinLODRequired = MEDIUM DefaultConditionState Model = None TransitionKey = DOWN_DEFAULT End ConditionState = NIGHT Model = None TransitionKey = DOWN_DEFAULT End ConditionState = SNOW Model = None TransitionKey = DOWN_DEFAULT End ConditionState = SNOW NIGHT Model = None TransitionKey = DOWN_DEFAULT End ConditionState = PARTIALLY_CONSTRUCTED Model = ABSupDrop_A6 Animation = ABSupDrop_A6.ABSupDrop_A6 AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_DAY ParticleSysBone = Dust01 BuildingDustChina ParticleSysBone = Smoke01 BuildUpSmokeChina ParticleSysBone = Smoke02 BuildUpSmokeChina ParticleSysBone = Smoke03 BuildUpSmokeChina ParticleSysBone = Smoke04 BuildUpSmokeChina ParticleSysBone = Smoke05 BuildUpSmokeChina End ConditionState = NIGHT PARTIALLY_CONSTRUCTED Model = ABSupDrop_A6N Animation = ABSupDrop_A6N.ABSupDrop_A6N AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_NIGHT ParticleSysBone = Dust01 BuildingDustChina ParticleSysBone = Smoke01 BuildUpSmokeChina ParticleSysBone = Smoke02 BuildUpSmokeChina ParticleSysBone = Smoke03 BuildUpSmokeChina ParticleSysBone = Smoke04 BuildUpSmokeChina ParticleSysBone = Smoke05 BuildUpSmokeChina End ConditionState = SNOW PARTIALLY_CONSTRUCTED Model = ABSupDrop_A6S Animation = ABSupDrop_A6S.ABSupDrop_A6S AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_SNOW ParticleSysBone = Dust01 BuildingSnowDust ParticleSysBone = Smoke01 BuildUpSnowSmoke ParticleSysBone = Smoke02 BuildUpSnowSmoke ParticleSysBone = Smoke03 BuildUpSnowSmoke ParticleSysBone = Smoke04 BuildUpSnowSmoke ParticleSysBone = Smoke05 BuildUpSnowSmoke End ConditionState = SNOW NIGHT PARTIALLY_CONSTRUCTED Model = ABSupDrop_A6SN Animation = ABSupDrop_A6SN.ABSupDrop_A6SN AnimationMode = MANUAL Flags = START_FRAME_LAST TransitionKey = UP_SNOWNIGHT ParticleSysBone = Dust01 BuildingSnowDust ParticleSysBone = Smoke01 BuildUpSnowSmoke ParticleSysBone = Smoke02 BuildUpSnowSmoke ParticleSysBone = Smoke03 BuildUpSnowSmoke ParticleSysBone = Smoke04 BuildUpSnowSmoke ParticleSysBone = Smoke05 BuildUpSnowSmoke End TransitionState = DOWN_DEFAULT UP_DAY Model = ABSupDrop_A6 Animation = ABSupDrop_A6.ABSupDrop_A6 AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = DOWN_DEFAULT UP_NIGHT Model = ABSupDrop_A6N Animation = ABSupDrop_A6N.ABSupDrop_A6N AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = DOWN_DEFAULT UP_SNOW Model = ABSupDrop_A6S Animation = ABSupDrop_A6S.ABSupDrop_A6S AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = DOWN_DEFAULT UP_SNOWNIGHT Model = ABSupDrop_A6SN Animation = ABSupDrop_A6SN.ABSupDrop_A6SN AnimationMode = ONCE AnimationSpeedFactorRange = 1.0 1.0 Flags = START_FRAME_FIRST End TransitionState = UP_DAY DOWN_DEFAULT Model = ABSupDrop_A6 Animation = ABSupDrop_A6.ABSupDrop_A6 AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End TransitionState = UP_NIGHT DOWN_DEFAULT Model = ABSupDrop_A6N Animation = ABSupDrop_A6N.ABSupDrop_A6N AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End TransitionState = UP_SNOW DOWN_DEFAULT Model = ABSupDrop_A6S Animation = ABSupDrop_A6S.ABSupDrop_A6S AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End TransitionState = UP_SNOWNIGHT DOWN_DEFAULT Model = ABSupDrop_A6SN Animation = ABSupDrop_A6SN.ABSupDrop_A6SN AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly Flags = START_FRAME_LAST End End ; ------------ being-constructed crane ----------------- ;Draw = W3DModelDraw ModuleTag_04 ;AnimationsRequirePower = No ;DefaultConditionState ;Model = None ;TransitionKey = DOWN_DEFAULT ;End ;ConditionState = NIGHT ;Model = None ;TransitionKey = DOWN_DEFAULT ;End ;ConditionState = SNOW ;Model = None ;TransitionKey = DOWN_DEFAULT ;End ;ConditionState = SNOW NIGHT ;Model = None ;TransitionKey = DOWN_DEFAULT ;End ;ConditionState = SOLD ;Model = NONE ;End ;ConditionState = ACTIVELY_BEING_CONSTRUCTED ;Model = NBNMissle_A5 ;Animation = NBNMissle_A5.NBNMissle_A5 ;AnimationMode = LOOP ;TransitionKey = UP_DAY ;End ;ConditionState = NIGHT ACTIVELY_BEING_CONSTRUCTED ;Model = NBNMissle_A5N ;Animation = NBNMissle_A5N.NBNMissle_A5N ;AnimationMode = LOOP ;TransitionKey = UP_NIGHT ;End ;ConditionState = SNOW ACTIVELY_BEING_CONSTRUCTED ;Model = NBNMissle_A5S ;Animation = NBNMissle_A5S.NBNMissle_A5S ;AnimationMode = LOOP ;TransitionKey = UP_SNOW ;End ;ConditionState = SNOW NIGHT ACTIVELY_BEING_CONSTRUCTED ;Model = NBNMissle_A5SN ;Animation = NBNMissle_A5SN.NBNMissle_A5SN ;AnimationMode = LOOP ;TransitionKey = UP_SNOWNIGHT ;End ;TransitionState = DOWN_DEFAULT UP_DAY ;Model = NBNMissle_AB ;Animation = NBNMissle_AB.NBNMissle_AB ;AnimationMode = ONCE ;AnimationSpeedFactorRange = 1.0 1.0 ;Flags = START_FRAME_FIRST ;End ;TransitionState = DOWN_DEFAULT UP_NIGHT ;Model = NBNMissle_ABN ;Animation = NBNMissle_ABN.NBNMissle_ABN ;AnimationMode = ONCE ;AnimationSpeedFactorRange = 1.0 1.0 ;Flags = START_FRAME_FIRST ;End ;TransitionState = DOWN_DEFAULT UP_SNOW ;Model = NBNMissle_ABS ;Animation = NBNMissle_ABS.NBNMissle_ABS ;AnimationMode = ONCE ;AnimationSpeedFactorRange = 1.0 1.0 ;Flags = START_FRAME_FIRST ;End ;TransitionState = DOWN_DEFAULT UP_SNOWNIGHT ;Model = NBNMissle_ABSN ;Animation = NBNMissle_ABSN.NBNMissle_ABSN ;AnimationMode = ONCE ;AnimationSpeedFactorRange = 1.0 1.0 ;Flags = START_FRAME_FIRST ;End ;TransitionState = UP_DAY DOWN_DEFAULT ;Model = NBNMissle_AB ;Animation = NBNMissle_AB.NBNMissle_AB ;AnimationMode = ONCE_BACKWARDS ;AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly ;Flags = START_FRAME_LAST ;End ;TransitionState = UP_NIGHT DOWN_DEFAULT ;Model = NBNMissle_ABN ;Animation = NBNMissle_ABN.NBNMissle_ABN ;AnimationMode = ONCE_BACKWARDS ;AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly ;Flags = START_FRAME_LAST ;End ;TransitionState = UP_SNOW DOWN_DEFAULT ;Model = NBNMissle_ABS ;Animation = NBNMissle_ABS.NBNMissle_ABS ;AnimationMode = ONCE_BACKWARDS ;AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly ;Flags = START_FRAME_LAST ;End ;TransitionState = UP_SNOWNIGHT DOWN_DEFAULT ;Model = NBNMissle_ABSN ;Animation = NBNMissle_ABSN.NBNMissle_ABSN ;AnimationMode = ONCE_BACKWARDS ;AnimationSpeedFactorRange = 2.0 2.0 ; play teardown animations more quickly ;Flags = START_FRAME_LAST ;End ;End ; Blinking lights ;Draw = W3DModelDraw ModuleTag_05 ;OkToChangeModelColor = Yes ; day ;ConditionState = NONE ;Model = NBNMissle_AC ;Animation = NONE ;End ;ConditionState = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED ;Model = NBNMissle_AC ;Flags = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT ;End ;ConditionState = AWAITING_CONSTRUCTION ;Model = NONE ;End ;ConditionState = DOOR_1_OPENING ;Model = NBNMissle_AC ;Animation = NBNMissle_AC.NBNMissle_AC ;AnimationMode = LOOP ;Flags = START_FRAME_FIRST ;End ;ConditionState = DOOR_1_WAITING_OPEN ;Model = NBNMissle_AC ;Animation = NBNMissle_AC.NBNMissle_AC ;AnimationMode = LOOP ;Flags = START_FRAME_LAST ;End ;ConditionState = DOOR_1_WAITING_TO_CLOSE ;Model = NBNMissle_AC ;Animation = NBNMissle_AC.NBNMissle_AC ;AnimationMode = LOOP ;Flags = START_FRAME_FIRST ;WeaponLaunchBone = PRIMARY RockPos ;End ;ConditionState = DOOR_1_CLOSING ;Model = NBNMissle_AC ;Animation = NBNMissle_AC.NBNMissle_AC ;AnimationMode = LOOP ;Flags = START_FRAME_FIRST ;End ;End PlacementViewAngle = 135 ; ***DESIGN parameters *** DisplayName = OBJECT:CruiseMissile Side = AmericaSuperWeaponGeneral EditorSorting = STRUCTURE Prerequisites Object = SupW_AmericaWarFactory Object = SupW_AmericaStrategyCenter End BuildCost = 2000 BuildTime = 60.0 ; in seconds EnergyProduction = -10 VisionRange = 200.0 ; Shroud clearing distance ShroudClearingRange = 200 CommandSet = SupW_AmericaCruiseMissileCommandSet ArmorSet Conditions = None Armor = StructureArmorTough DamageFX = StructureDamageFXNoShake End ExperienceValue = 400 400 400 400 ; Experience point value at each level MaxSimultaneousOfType = DeterminedBySuperweaponRestriction ; Normally unlimited, but can be selected by players in multiplayer games MaxSimultaneousLinkKey = Superweapon ; Count all superweapons **AND THE GLA SCUD STORM REBUILD HOLE** as one "type" for MaxSimultaneousOfType ; *** AUDIO Parameters *** VoiceSelect = NuclearMissileSelect SoundOnDamaged = BuildingDamagedStateLight SoundOnReallyDamaged = BuildingDestroy UnitSpecificSounds UnderConstruction = UnderConstructionLoop End ; *** ENGINEERING Parameters *** RadarPriority = STRUCTURE KindOf = PRELOAD STRUCTURE SELECTABLE IMMOBILE SCORE CAPTURABLE FS_TECHNOLOGY POWERED MP_COUNT_FOR_VICTORY Body = StructureBody ModuleTag_06 MaxHealth = 4000.0 InitialHealth = 4000.0 End Behavior = OCLSpecialPower ModuleTag_07 SpecialPowerTemplate = SupW_CruiseMissile OCL = SUPERWEAPON_CruiseMissile End Behavior = SpecialPowerCreate ModuleTag_08 ;nothing End Behavior = MissileLauncherBuildingUpdate ModuleTag_09 SpecialPowerTemplate = SupW_CruiseMissile DoorOpenTime = 8000 DoorWaitOpenTime = 2000 DoorCloseTime = 8000 ; FXLists to play at transitions: DoorOpeningFX = ChinaNuclearMissileLauncherDoorOpen ;DoorOpenFX = FX_ABPowerPlantExplode DoorWaitingToCloseFX = ChinaNuclearMissileLauncherLaunch ;DoorClosingFX = FX_ABPowerPlantExplode ;DoorClosedFX = FX_ABPowerPlantExplode ; looping sound to play while open: DoorOpenIdleAudio = BuildingNeutronMissileHiss End Behavior = ProductionUpdate ModuleTag_10 DisabledTypesToProcess = DISABLED_HELD DISABLED_UNDERPOWERED End Behavior = DestroyDie ModuleTag_11 ;Nothing End Behavior = FireWeaponWhenDeadBehavior ModuleTag_12 DeathWeapon = ChinaPowerPlantDeathWeapon StartsActive = Yes End Behavior = FlammableUpdate ModuleTag_14 AflameDuration = 5000 ; If I catch fire, I'll burn for this long... AflameDamageAmount = 5 ; taking this much damage... AflameDamageDelay = 500 ; this often. End Behavior = TransitionDamageFX ModuleTag_15 ;-------------DESIGNED FOR MEDIUM SIZED FACTION BUILDING TRANSITIONS------------------- DamagedParticleSystem1 = Bone:None RandomBone:No PSys:StructureTransitionMediumSmoke ;--------------------------------------------------------------------------------------- ReallyDamagedParticleSystem1 = Bone:None RandomBone:No PSys:StructureTransitionMediumSmoke ReallyDamagedParticleSystem2 = Bone:None RandomBone:No PSys:StructureTransitionMediumExplosion ReallyDamagedParticleSystem3 = Bone:None RandomBone:No PSys:StructureTransitionMediumShockwave End Behavior = CreateObjectDie ModuleTag_20 CreationList = OCL_LargeStructureDebris End Behavior = FXListDie ModuleTag_21 ExemptStatus = UNDER_CONSTRUCTION DeathFX = FX_NukeGLA End Behavior = ProductionUpdate ModuleTag_22 ; This is needed in order to get a public timer to work! End Geometry = BOX GeometryMajorRadius = 45.0 GeometryMinorRadius = 55.0 GeometryHeight = 64.0 GeometryIsSmall = No Shadow = SHADOW_VOLUME BuildCompletion = PLACED_BY_PLAYER End Поздравляю! Вы только что добавили МБР. ( если я нигде не ошибся :) )




Добавляем в игру свои саундтреки (soundtracks).
 
Все музыкальные файлы, добавляемые в игру, должны быть в формате mp3 или wav
Для того чтобы добавит свои саундтреки в игру (далее музыку) нужно сделать следующее:
 
Вариант I:
 
Вытаскиваем всю музыку из архива MusicZH.big  или Music.big. Для примера возьмем музыку за США. ( В данном туторе рассматривается Zero Hour).
 
1)     Перемещаем всю вытащенную музыку в папки \Data\Audio\Tracks\
 
2)     Всего за США  16 треков, значит по своему вкусу выбираем 16 треков (точнее сколько вам нужно, столько и выбираем) и копируем их в выше указанный каталог.
 
3)     Теперь, смотрим на названия файлов, в нашем случае это USA_01.mp3, USA_02.mp3, USA_03.mp3, ну и тому подобное,  и переименовываем свою музыку в названия вышеуказанных файлов и подтверждаем замену файлов. Вот и все, теперь в игре будет звучать наша музыка. Наслаждайтесь!!
 
4)     Для тех кто не понял как все делается. Например, в каталоге Tracks  у вас лежит композиция Prodigy – Firestarter.mp3, мы смотрим на названия в пункте 3 и переименовываем, т.е.  Prodigy – Firestarter.mp3 переименовываем в USA_01.mp3, и теперь когда Вы включите игру, первый саундтрек, который Вы услышите это будет Prodigy – Firestarter. Вот и все. Надеюсь теперь Вы поняли.
 
  
   Вариант II:
 
1)     Можно добавить свою музыку путем редактирования INI – файла. Для этого нужно вытащить Music.ini из архива INIZH.big или из   
      INI.big и положить ее в каталог Data\INI\  
 
2)     Теперь открываем эту иниху и редактируем.
 
3)     Для примера опять же возьмем музыку за США. Там Вы увидите подобное:
 
MusicTrack Game_USA_01
  Filename = USA_01.mp3
End
 
MusicTrack Game_USA_02
  Filename = USA_02.mp3
End
 
MusicTrack Game_USA_03
  Filename = USA_03.mp3
End
 
4)     Для того чтобы проигрывалась музыка нужно сделать следующее:  положить в паку Tracks свою музыку и изменить следующую строчку во всех пунктах  Filename = USA_01.mp3  на  Filename = Prodigy – Firestarter.mp3. Эффект получится тот же что и в первом варианте.  Также хочу сказать, что название USA_01.mp3  можно изменять на любое название, лишь бы оно совпадало с названием файлов mp3, которые лежат в каталоге Tracks.
 
      5)     Вот и все! Теперь Вы научились изменять музыку в генералах.
 
 
 
Хочу сказать, что это не предел возможностей игры. Ведь к уже имеющимся трекам можно добавить еще, т.е. можно довести количество треков США до 20, 30 до того количества, до которого хотите, но есть одно “НО”: для этого нужно уметь редактировать скрипты, чего я пока не умею :( .
 
 
Хочу сказать большое спасибо [ Cкачайте файл, чтобы посмотреть ссылку ]  за помощь в написании Варианта II данной статьи.

























Внедрение юнитов в Zero Hour.
Автор: [ Cкачайте файл, чтобы посмотреть ссылку ].
 
            Наверно, многие думали о своей модификации. Но что же за модификация без новых юнитов? Здесь вы научитесь вставлять их в игру. Предполагается, что читателя не пугают слова "распаковать big-архив".
 
Начало начал
            Итак, поехали. Для начала находим файл INIZH.BIG в  корневой папке игры. Открываем его FinalBIG`ом или чем-то подобным, и распаковываем следующие файлы:
 
1) W e a p o n . i n i
2) N u k e G  e n e r a l.  i n i        Совет: вы можете распаковать файл для любого генерала!
3) C o m m a n d S  e t . i n i
4) C o m m a n d B u t t o n . i n i
5) *** U s e r I n t e r f a c e *** . i n i    Подсказка: *  любое число или буква
 
Также извлеките из файла EnglishZH.big файл generals.csf. Его можно отредактировать [ Cкачайте файл, чтобы посмотреть ссылку ].
 
Подсказка: далее, видя приставки nuke_, заменяйте их на приставки к своему генералу. Если вы вставляете юнит просто стороне, без генералов, приставку опускайте.
           
Это важно: все файлы надо извлекать в их директории. Директории указаны в начале имени файла в архиве.
 
Теперь создаём (в 3ds max или Gmax) или скачиваем [ Cкачайте файл, чтобы посмотреть ссылку ] модель Mammoth`a. Танк с двумя пушками из Red Alert`a. Распаковываем архив в папку Art (если таковой нет, создайте). Убедитесь, что файлы *.w3d лежат в \Art\w3d\ а файлы *.tga лежат в \Art\Textures\ . Подготовка выполнена, начинаем пихать
·
 
Это важно: ни в коем случае не меняйте имена у моделей. Если вы их создаёте, то будете знать почему. Если нет, то об этом знать и не надо
·
 
Потихоньку, полегоньку
Это важно: У некоторых генералов, например, у пехотного, в файле нет Overlord`a. Если так, то скопируйте блок Overlord`a из файла другого генерала, и редактируйте его.
 
            Открывайте файл NukeGeneral.ini (или другой файл, в зависимости от того, какого генерала вы выбрали) и с помощью поиска находите строку Nuke_ChinaTankOverlord (введите Overlord для более точного поиска). Во всяком случае, должна выделиться строка с первым словом Object, например, Object Nuke_ChinaTankOverlord. Всё, что надо скопировать, нах-ся в промежутке между этим Object и другим Object (Это важно: не перелестните случайно конец секции Overlord`a, иначе ничего не получится). Копируйте эту секцию целиком и вставляйте в конец файла. Находите строчки   
  UpgradeCameo3 = Upgrade_ChinaOverlordBattleBunker
  UpgradeCameo4 = Upgrade_ChinaOverlordGattlingCannon
  UpgradeCameo5 = Upgrade_ChinaOverlordPropagandaTower
и удаляйте их. На модели не предусмотрено мест для башни пропаганды, бункера или гаттлинга.
Далее, находите строчки типа Model = NVOvrlnr и меняйте их на Model = GXMAMMOTH_HI
Ещё найдите строчки типа Model = NVOvrlrd_D и меняйте их на Model = GXMAMMOTH_CH
Потом ищите строчку DisplayName = OBJECT:Nuke_Overlord и меняйте её на
DisplayName = OBJECT:Nuke_Mammoth. Так, уже почти всё по редактированию параметров юнита. Далее, ищите группу
WeaponSet
  Weapon = PRIMARY Nuke_OverlordTankGun
END
и меняйте её на
WeaponSet
  Weapon = PRIMARY Nuke_MammothTankGun
END
 
Ещё ищите строку CommandSet = ChinaTankOverlordDefaultCommandSet и меняйте её на CommandSet = ChinaTankMammothDefaultCommandSet
 
Можете по своему усмотрению поменять параметры BuildCost (стоимость), BuildTime (время постройки), MaxHealth (максимум здоровья), InitialHealth (начальное здоровье).
Также можете поиграть с группой
Prerequisites
  Object = Nuke_ChinaWarFactory
  Object = Nuke_ChinaPropagandaCenter
END
, только War Factory оставьте. Например, можно сделать так, чтобы танк можно было построить при ядерке и т.п.
 
Ещё у атрибутов ButtonImage и SelectPortrait поставить значения GXMammoth и GXMammoth _L соответственно.
 
Бей врагов без передышки!!!
            Открываем файл Weapon.ini и ищем строку Weapon OverlordTankGun. Копируем этот раздел в конец файла и приступаем к редактированию. Строки SecondaryDamage и SecondaryDamageRadius
удаляйте. Здесь представляется небольшое описание параметров.













Имя
Тип
Описание

PrimaryDamage
Хелсы
Ущерб от одного выстрела

PrimaryDamageRadius
Футы
Дальность взрывной волны

ScatteredRadiusVsInfantry
Футы
Насколько оружие может промахнуться по пехоте

AttackRange
Футы
Дальнобойность

Min.\Max. TargetPitch
Футы
Насколько оружие может отклонятся по высоте

DamageType
Переменная
Тип уроны

DeathType
Переменная
Тип смерти при убийстве из данного оружия

WeaponSpeed
Усл. ед.
Скорость полёта одного снаряда\патрона

DelayBetweenShots
Мсек.
Задержка перед выстрелом

ShotsPerBarrel
Кол-во выстрелов
Выстрелов подряд на одно орудие (у Overlord`a их два)

ClipSize
Кол-во выстрелов
Размер обоймы

ClipReloadTime
Мсек.
Время перезарядки обоймы

 
Настройте эти параметры по своему вкусу. Сильно вдаваться сюда не стоит.
 
 
Раз картинка, два картинка
            Теперь открываем файл **UserInterface***.ini. Повторюсь - * это любое число или буква.
Создаём такой раздел
MappedImage GXMammoth
  Texture = ChinaMam.tga
  TextureWidth = 62
  TextureHeight = 50
  Coords = Left:2 Top:2 Right:60 Bottom:48
  Status = NONE
End
 
Текстура иконок в Generals состоит из этих самых иконок, вклеенных в один файл. Можете ради интереса распаковать файлы с расширением *.tga .
 
Texture - название текстуры иконки.
TextureWidth - ширина текстуры
TextureHeight - высота текстуры
Coors - координаты иконки в текстуре. Left и Right отсчитываются от левой границы,
Top и Bottom - от верхней.
Status - статус иконки.
 
Теперь впихните ещё это
MappedImage GXMammoth_L
  Texture = ChinaMamL.tga
  TextureWidth = 122
  TextureHeight = 98
  Coords = Left:2 Top:2 Right:120 Bottom:96
  Status = NONE
End
 
 
Эти строки! Они меня задушат!!!
            Запускаем редактор CSF и с его помощью открываем файл Generals.csf. Учить как в нём работать я вас не буду, там и так всё понятно. Нажимаем на панели кнопку "Add new string", в верхнем поле ввода вводим OBJECT:Nuke_Mammoth, а в большом поле - Heavy Mammoth Tank.
Затем нажимаем опять на волшебную кнопочку и пишем уже в верхнем
CONTROLBAR:Nuke_ConstructChinaVechicleMammoth, а в нижнем Mammoth Heav&y Tank.
Амперсанд (&) нужен для того, чтобы юнит можно было строить горячей клавишей - в данном случае это "v".
В третий (и последний) раз нажимаем кнопку и в верхнем поле пишем CONTROLBAR:Nuke_ToolTipBuildChinaMammoth, а в нижнем - что хотите, но только на английском. Попробуйте на русском - увидите, что будет. Единственно что, содержимое нижнего поля будет отображаться на подсказке при наведении на иконку курсора. Так что пишите, против кого Мамонт силён, против кого слаб и т. д.
 
 
Выдави кнопку до отказа!
            Открываем файл CommandButton.ini и пихаем в конец файла вот это:
CommandButton Nuke_Command_ConstructChinaVechicleMammoth
  Command = UNIT_BUILD
  Object = Nuke_ChinaTankMammoth
  TextLabel = CONTROLBAR:Nuke_ConstructChinaMammoth
  ButtonImage = GXMammoth
  ButtonBorderType = BUILD
  DescriptLabel = CONTROLBAR:Nuke_ToolTipChinaBuildMammoth
End
 
Разберёмся, что к чему.
Command - команда, которая должна выполнятся
Object - объект для строительства
TextLabel - заголовок всплывающей подсказки о постройке юнита.
ButtonImage - название картинки, которую мы достали из текстуры.
ButtonBorderType - тип границы кнопки, по умолчанию - BUILD
DescriptLabel - Текст в этой самой подсказке.
 
Заметьте, что параметры значений TextLabel и DescriptLabel совпадают с введёнными нами в файл generals.csf.
 
 
Набор наборов
            Наконец, открываем файл CommandSet.ini. В нём содержатся данные о панелях для различных юнитов и зданий. Первое, что делаем, это копируем самый первый раздел
(CommandSet GenericCommandSet)  в конец файла и обзываем его ChinaTankMammothDefaultCommandSet. Затем с помощью штатного поиска ищем Nuke_ChinaWarFactoryCommandSet и изменяем значение 13 = на
13 = Command_UpgradeChinaMines ( - это длинный текст), а 12 = на
12 = Nuke_Command_ConstructChinaVechicleMammoth. Также потом спускаем на один блок вниз (там, где Nuke_ChinaWarFactoryCommandSetUpgrade) и изменяем точно так же, только вместо 13 = Command_UpgradeChinaMines пишем 13 = Command_UpgradeEMPMines.
Всё, файл можно закрывать и сохранять.
 
 Рекруты рвутся в бой
            Надеюсь, эта статья помогла вам, начинающие модеры, внедрить новые юниты для Command and Conquer Generals Zero Hour. Отзывы можно слать на [ Cкачайте файл, чтобы посмотреть ссылку ].

Добавляем свои кнопки в игру.
Автор: [ Cкачайте файл, чтобы посмотреть ссылку ]
Ну, здравствуйте! Хотите добавить в игру парочку только что нарисованных "кнопочек" и портретов".. НО НЕ ПОЛУЧАЕТСЯ ? Тогда я постараюсь вам помочь.
Тутор рассчитан на то, что читатель обладает хотя бы самыми скромными знаниями в области модостроения, или хотя бы раз вскрывал  *.big архивы.
Для начала разберёмся: "кнопки" имеют размер, примерно 60х48, а "портреты" 120х96. Чтобы было понятно: "кнопки" -  это те "маленькие квадратики с картинками", нажимая на которые, вы даёте различные команды, например, построить юнит, произвести апгрейд и т.д. А "портреты" - это, увеличенные, примерно в 2 раза, изображения "кнопок", появляющиеся в правой нижней части экрана, когда вы выделите какую-нибудь единицу техники. Но эти подробности знают все :), я просто хотел уточнить.
Вот, что вам нужно:
- Конечно, сами "кнопки" и "портреты" в формате *.tga
Отступление: размеры "кнопок" лучше взять 82х70 – так как, в игре изображения будут более качественным и не потеряют чёткость.
- Файл HandCreatedMappedImages.ini. Он лежит в INI.big по пути: Data\INI\MappedImages\HandCreated\
- Файл CommandButton.ini. Он тоже в INI.big. Путь: Data\INI\
- Программы [ Cкачайте файл, чтобы посмотреть ссылку ] и [ Cкачайте файл, чтобы посмотреть ссылку ]
- Инишки с параметрами редактируемых юнитов.
Начинаем с определения координат.
1. Скомпонуйте все изображения в одно целое с помощью ImagePacker’а и сохраните это дело в формате *.tga
2. Откройте программу PortraitEdit. Сначала загрузите в неё HandCreatedMappedImages.ini (“Открыть INI”), потом скомпонованное изображение ( “Открыть TGA “ ).
3. Далее, нажмите “Смотреть TGA”, мышкой выделите первую “кнопку” или "портрет" на картинке и жмите ОК.
4. В поле "Имя" напишите любое, наиболее подходящее, название для этой "кнопки" или "портрета" и нажмите ОК. Теперь информация о координатах прописана в инишке.
5. Проделайте шаги 3 и 4 с остальными элементами.
6. Всё сделав, сохраняйтесь ( "Сохранить INI" ) и выходите.
Теперь надо назначить "кнопку" и "портрет" юниту ...
Я объясню на примере стандартного юнита - Пулемётчика Пехотного генерала ( если по "научному", то Object Infa_ChinaInfantryMiniGunner ).
Опираясь на эту информацию, вы сможете самостоятельно назначить всё те же "кнопки" и "портреты" НОВЫМ юнитам.
1. Открываем инишку с его параметрами - InfantryGeneral.ini, ищем "научное" название пулемётчика.
2. Вот, что мы нашли:
   Object Infa_ChinaInfantryMiniGunner
     SelectPortrait = SNMiniGunner_L  ;Название "портрета"
     ButtonImage = SNMiniGunner  ;Название "кнопки"
Всё просто, вместо SNMiniGunner_L и SNMiniGunner пишите свои названия (Которые мы прописали в HandCreatedMappedImages.ini)
Но это еще не всё.
Откройте CommandButton.ini и найдите параметры "командной кнопки" юнита(нажимая на которую, вы строите юнит.
В данном случае это:
CommandButton Infa_Command_ConstructChinaInfantryMiniGunner
  Command = UNIT_BUILD
  Object = Infa_ChinaInfantryMiniGunner
  TextLabel = CONTROLBAR:ConstructChinaInfantryMiniGunner
ButtonImage = SNMiniGunner  ;Название "кнопки"
  ButtonBorderType = BUILD
  DescriptLabel = CONTROLBAR:ToolTipChinaBuildMiniGunner
End
Надеюсь понятно, что надо писать вместо SNMiniGunner.
Почти конец, надо поставить всё в игру:
1) Создаем пути Data\INI\MappedImages\HandCreated и Data\English\Art\Textures
2) CommandButton.ini кладём в Data\INI\
3) HandCreatedMappedImages.ini сядет тут: Data\INI\MappedImages\HandCreated
4) А скомпанованную картинку кидаем в Data\English\Art\Textures
5) Всю эту кучку кладём в папку с игрой. И играем.
Всё, разобрались ... ? Если да, то очень хорошо! [ Cкачайте файл, чтобы посмотреть картинку ]
Конец формы

Конец формы
Конец формы
450 Kb457 Kb458 Kb496 Kb482 Kb Заголовок 1 Заголовок 315

Приложенные файлы

  • doc 3867756
    Размер файла: 668 kB Загрузок: 2

Добавить комментарий