C&C Generals Zero Hour Mods

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » C&C Generals Zero Hour Mods » Обучение » INI FAQ


INI FAQ

Сообщений 1 страница 4 из 4

1

Для начала кратко разберу что такое INI
Если вы хотите создавать моды то должны знать что INI это папка в которой лежат все основные файлы такого же формата (.ini) с параметрами Generals и как там бить я все подробно объясню.

И так начнем по порядку  :
Папка Default в ней хранятся параметры искусственного интеллекта (ИИ или же как его называют - Бота) в ней может находится много файлов самый важный это AIData.ini там хранятся параметры покупки повышений бота, его построек.

После этого идет папка MappedImages в ней хранятся еще две папки в них есть различные ini файлы и именно в них надо прописывать новые картинки в ваш мод.

Самая важная это папка Object в ней возмещаются файлы с объектами ну это потом.

Обсудим оставшийся ini файлы в папке INI -
Animation2D.ini - Тут кодировка параметров анимации игры - текстур и их воздействие в игре.
Armor.ini - Параметры брони юнитов
AudioSettings.ini - Установка значений музыки в игре.
Campaign.ini - Здесь прописываются все карты миссии, обучения, соревнование и т.п.
ChallengeMode.ini - Очень тонкий кодинг, прописывает генералов для соревнования а также их картинки при загрузке игр в сражении и сетевых играх (кроме ванильных фракций).Но также надо помнить там есть очень гадкий лимит от (GeneralPersona0 до GeneralPersona11) прописать 12 и более уже нельзя, так что надо уметь с этим жить.
CommandButton.ini - Основной параметр окон в игре (кнопок, повышений и т .д.) работает как "связной" ini между кнопками и их параметрами
CommandSet.ini - Основной параметр окон в игре (кнопок, повышений и т .д.) но именно он отвечает за расстановку от 1 до 18(блоков с учетом что видно только 14 но остальные может с легкостью использовать БОТ)
Crate.ini - Прописывается денежные и гуманитарные контейнера.
Credits.ini - Авторы, ознакомление.
DamageFX.ini - Эффекты попадания по объектам (именно здесь можно прописать кровь пехотинцам)
Eva.ini - Голоса по типу : "...обнаружена вражеская партикулярная пушка..."
FXList.ini - Генератор эффектов.
GameData.ini - Параметры игрового мира (высота наблюдения и т.д)
InGameUI.ini - Круги (от скад шторма и т.д.) не советую его вообще трогать он очень ранимый.
Locomotor.ini - Двигатели юнитов, ракет и т.п.
MiscAudio.ini - Игровые звуки по типу пикания, крушения и т.д.
Mouse.ini - Курсоры, также не советую трогать но сами курсоры можно изменить заменив их на другие лежат в : (Data-Cursors-)
multiplayer.ini - Вид цвета игрока, количество маяков, открытий-закрытий рандом, стартовые сумы...
Music.ini - Музыка всех фракций, их порядок.
ObjectCreationList.ini - Связной кодинг с повышениями и оружия с таймером.
ParticleSystem.ini - Здесь содержатся эффекты, вспышки и т.д.
PlayerTemplate.ini - Фракции, команды.
Rank.ini - Ранги.
Roads.ini - Дороги.
Science.ini - Повышения и их количество.
SoundEffects.ini - Звуковые эффекты (взрыв и т.д.)
SpecialPower.ini - "счетчики время" именно они определяют время перезарядки СВ и повышений.
Speech.ini - Голоса для Миссий и Соревнований.
Terrain.ini - Текстуры земной поверхности.
Upgrade.ini - Апгрейды, лимит 128!
Weapon.ini - Вооруженные характеристики и их мощь.
WindowTransitions.ini - Меню, лобби, соревнование и т. д.
Это краткий список всех основных видов ini которые нужны в мододельстве.

Теперь про вылеты-
Вылетает когда : нажали на иконку и пиявилось миниатюрное окно загрузки (не на весь екран) и тут же поверх него появляется ошибка (техникал дифузес....)
Из за: объектов или же привишеного лимита в апгрейдах или соревновании.
Решение: Юзайте WorldBuilder.exe (находится в папке ZeroHour) при загрузке он будет выдавать сообщения с ошибками и где именно надо их исправлять.

Вылетает когда: нажали на иконку и пиявилось миниатюрное окно загрузки после чего развернулось черное окно на весь экран и тут же поверх него появляется ошибка (техникал дифузес....)
Из за: ini - CommandButton.ini и CommandSet.ini - если между ними нарушена малейшая связь (к примеру в CommandSet.ini прописано - AmericaDozerCommandSet а в CommandButton.ini нету такого (чего такого потом )
Решение: Через тот же  WorldBuilder.exe но уже надо уметь скриптить.

А легче всего скачать вот это: http://contra.cncguild.net/Rus/checker.php

а теперь объясняю детально CommandButton.ini

Пример топливной бомбы у США:

CommandButton Command_PurchaseScienceDaisyCutter :Блок кнопка в повышении (с точностью к блоку!)
Command = PURCHASE_SCIENCE
Science = SCIENCE_DaisyCutter :Повышение из Science.ini
ButtonImage = SACDaisyCutter :Картинка
ButtonBorderType = UPGRADE
TextLabel = CONTROLBAR:DaisyCutter :Верхняя строчка описания
ConflictingLabel = OBJECT:DaisyCutterBomb
DescriptLabel = CONTROLBAR:TooltipDaisyCutter :Нижняя строка описания
End

CommandButton Command_DaisyCutter :Кнопка-блок в Командном центре после апгрейда (с точностью к блоку!)
Command = SPECIAL_POWER
SpecialPower = SuperweaponDaisyCutter :Таймер из SpecialPower.ini
Options = NEED_SPECIAL_POWER_SCIENCE NEED_TARGET_POS CONTEXTMODE_COMMAND
Science = SCIENCE_DaisyCutter SCIENCE_MOAB :Повышение +после апгрейда МОАБ
TextLabel = CONTROLBAR:DaisyCutter
ButtonImage = SACDaisyCutter
ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:TooltipDaisyCutter
RadiusCursorType = DAISYCUTTER
InvalidCursorName = GenericInvalid
UnitSpecificSound = EvaUSA_SelectTarget
End

CommandButton Command_DaisyCutterFromShortcut :Боковая-блок кнопка (с точностью к блоку!)
Command = SPECIAL_POWER_FROM_SHORTCUT
SpecialPower = SuperweaponDaisyCutter
Options = NEED_SPECIAL_POWER_SCIENCE NEED_TARGET_POS CONTEXTMODE_COMMAND
Science = SCIENCE_DaisyCutter SCIENCE_MOAB
TextLabel = OBJECT:DaisyCutterBomb
ButtonImage = SACDaisyCutter
; ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:TooltipDaisyCutter
RadiusCursorType = DAISYCUTTER
InvalidCursorName = GenericInvalid
UnitSpecificSound = EvaUSA_SelectTarget
End

Пример Юнита-обэкта:
Американский Бульдозер

CommandButton Command_ConstructAmericaDozer :Имя которое должно с точностю совпадать к блоку в Команд Сет
Command = UNIT_BUILD
Object = AmericaVehicleDozer :Название обекта в папке Обджект
TextLabel = CONTROLBAR:ConstructAmericaDozer
ButtonImage = SACDozer
ButtonBorderType = BUILD ; Identifier for the User as to what kind of button this is
DescriptLabel = CONTROLBAR:ToolTipUSABuildDozer
End

Пример Upgrade.ini:

CommandButton Command_UpgradeChinaNationalism :Имя которое должно с точностю совпадать к блоку
Command = PLAYER_UPGRADE :Означает общий апгрейд сразу для всей фракции ибо можно использовть OBJECT_UPGRADE для каждого обэкта отдельно.
Upgrade = Upgrade_Nationalism :название апгрейда
TextLabel = CONTROLBAR:UpgradeChinaNationalism
ButtonImage = SSNationalism
ButtonBorderType = UPGRADE
DescriptLabel = CONTROLBAR:TooltipChinaUpgradeNationalism
End

Теперь обясняю детально CommandSet.ini

Пример Строительного Бульдозера США, его характеристики:

CommandSet AmericaDozerCommandSet ;такое же название должен иметь обект для которого вы хотите использовать эту кнопку
1 = Command_ConstructAmericaPowerPlant :Кнопки-блоки которые должни соответствовать Команд Буттон
2 = Command_ConstructAmericaStrategyCenter
3 = Command_ConstructAmericaBarracks
4 = Command_ConstructAmericaSupplyDropZone
5 = Command_ConstructAmericaSupplyCenter
6 = Command_ConstructAmericaParticleCannonUplink
7 = Command_ConstructAmericaPatriotBattery
8 = Command_ConstructAmericaCommandCenter
9 = Command_ConstructAmericaFireBase
11 = Command_ConstructAmericaWarFactory
13 = Command_ConstructAmericaAirfield
14 = Command_DisarmMinesAtPosition
End

Детально SpecialPower.ini

Вернемся к топливной бомбе юсы

;-----------------------------------------------------------------------------
SpecialPower SuperweaponDaisyCutter :Название таймера (должно бить как и в Команд Буттон!)
Enum = SPECIAL_DAISY_CUTTER
ReloadTime = 360000 : Время в милисекундах
RequiredScience = SCIENCE_DaisyCutter : Повышение после которого доступно (если таймер нужен без повышение то этот параметр надо убирать)
PublicTimer = No :Таймер отображается в игре или нет
SharedSyncedTimer = Yes :Лимит таймера к одному да или нет
ViewObjectDuration = 30000 ; Lifetime of a Look done belonging to the firing player
ViewObjectRange = 250 ; And how far it can see
RadiusCursorRadius = 170 ; shared by MOAB
ShortcutPower = Yes ;Capable of being fired by the side-bar shortcut.
AcademyClassify = ACT_SUPERPOWER ;Considered a powerful special power that a player could fire. Not for simpler unit based powers.
End

Детально Upgrade.ini

К примеру Национализм

;-----------------------------------
Upgrade Upgrade_Nationalism :название апгрейда должно бить с точностю прописано иначе вылет игры гарантирован!
DisplayName = UPGRADE:Nationalism :Описание при приобретении(в верхнем углу екрана)
BuildTime = 50.0 :время реализации
BuildCost = 1000 :Стоимость
ButtonImage = SSNationalism :картинка
ResearchSound = RedGuardVoiceUpgradeNationalism :Звук при приобретении
End

Детально про Science.ini

Ранговая система:
Science SCIENCE_Rank1 :уровень ранга (в игре таких уровней 5 но можно зделать и больше) 
PrerequisiteSciences = None
SciencePurchasePointCost = 0 ; note that this means "not purchasable", NOT "free"!
IsGrantable = No
End

Повышение Топливной бомбы:
Science SCIENCE_DaisyCutter :название повышения
PrerequisiteSciences = SCIENCE_AMERICA SCIENCE_Rank5 :Где доступен и у кого(тут приведен пример Только повышений Америки на ранге 5)
SciencePurchasePointCost = 1 :количество требованых едениц опыта
IsGrantable = Yes
DisplayName = SCIENCE:USADaisyCutter :верхнее описание
Description = CONTROLBAR:ToolTipUSAScienceDaisyCutter :нижнее описание

Детально про PlayerTemplate.ini

PlayerTemplate FactionAmerica :название фракции, команды
Side = America :точное название вашей команды, по нем проводится интелект бота.
BaseSide = USA
PlayableSide = Yes :доступен ли он в в игре при выборе
StartMoney = 0
PreferredColor = R:0 G:0 B:255 :официальний цвет компании
IntrinsicSciences = SCIENCE_AMERICA :Ранговая система команды
PurchaseScienceCommandSetRank1 = SCIENCE_AMERICA_CommandSetRank1 :название Команд Сета с рангами от и до...
PurchaseScienceCommandSetRank3 = SCIENCE_AMERICA_CommandSetRank3
PurchaseScienceCommandSetRank8 = SCIENCE_AMERICA_CommandSetRank8
SpecialPowerShortcutCommandSet = SpecialPowerShortcutUSA
SpecialPowerShortcutWinName = GenPowersShortcutBarUS.wnd
SpecialPowerShortcutButtonCount = 11 :количество боковых кнопок (больше 11 неотображается)
DisplayName = INI:FactionAmerica :название фракции при загрузке
StartingBuilding = AmericaCommandCenter :стартовое строение
StartingUnit0 = AmericaVehicleDozer :стартовый юнит (можно прописовать до StartingUnit7)
ScoreScreenImage = America_ScoreScreen
LoadScreenImage = SAFactionLogoPage_US
LoadScreenMusic = Load_USA
ScoreScreenMusic = Score_USA
;HeadWaterMark = SCTempSelectPortrait
FlagWaterMark = WatermarkUSA
EnabledImage = SSObserverUSA
BeaconName = MultiplayerBeacon
SideIconImage = GameinfoAMRCA
GeneralImage = USA_Logo
OldFaction = Yes
ArmyTooltip = TOOLTIP:BioStrategyLong_USA
Features = GUI:BioFeatures_USA
MedallionRegular = USAGeneral_slvr
MedallionHilite = USAGeneral_blue
MedallionSelect = USAGeneral_orng
End
End

Пока это все по части содержание файлов в папке INI 

Теперь перейдем в папку Object

В каждой папке есть свои детали, объекты (Строения, Юниты, Ракеты, Радиация и т.д.)

Буду приводить примеры:

Юнит
Пример Американский Полковник Бартон - AmericaInfantryColonelBurton

Исходный код
Object AmericaInfantryColonelBurton :название юнита
(такое же должно быть в CommandButton.ini этого юнита иначе его невозможно будет построить -
иконка просто будет серой)

; *** ART Parameters ***
  SelectPortrait     = SABurton_L :Большая картинка (при нажатии на юните
  ButtonImage     = SABurton       :Миниатюрная картинка как в CommandButton.ini

  UpgradeCameo1 = Upgrade_AmericaAdvancedTraining :Наявные апгрейды
  UpgradeCameo2 = Upgrade_AmericaChemicalSuits

  Draw = W3DModelDraw ModuleTag_01           
  OkToChangeModelColor = Yes               
:Отображается ли цвет фракции на этом юните
с уловием если есть Housecolor

   ; idle
DefaultConditionState                       
:Дальше очень тонкое дело...
тут прописуется пасивная модель пехотинца - когда он стоит
  Model       = AIHERO_SKN
  IdleAnimation    = AIHERO_SKL.AIHERO_STA 0 25  :Варианты поведения пехотинца
  IdleAnimation    = AIHERO_SKL.AIHERO_IDA
  IdleAnimation    = AIHERO_SKL.AIHERO_IDB
  AnimationMode    = ONCE :Такой параметр означает активный (позже поймете)
  TransitionKey    = TRANS_Stand :Ключевой переход на
другое состояние юнита (советую с этим невозится...даже я до конца непонял  )
  WeaponFireFXBone = PRIMARY Muzzle :Эффект Хлопка из оружия
  WeaponMuzzleFlash   = PRIMARY MuzzleFX :Эффект Огня из оружия           
  WeaponMuzzleFlash   = SECONDARY NONE :Поскольку здесь прописан
кинжал он не нуждается в хлопке и огне (ИМХО это же не Linage )
  HideSubObject = MUZZLEFX01 :   сам туплю чо это
End

   ; injured idle
ConditionState    = REALLYDAMAGED :Поврежденная (ранившая)
поведение пехотинца
  IdleAnimation    = AIHERO_SKL.AIHERO_ISTA 0 30
  IdleAnimation    = AIHERO_SKL.AIHERO_IIDA
  IdleAnimation    = AIHERO_SKL.AIHERO_IIDB
  AnimationMode    = ONCE
  TransitionKey    = TRANS_StandInjured
End

TransitionState = TRANS_Stand TRANS_StandInjured  :Переход ключа
  Animation     = AIHERO_SKL.AIHERO_ISTAHIT
  AnimationMode = ONCE
End

   ; moving
ConditionState    = MOVING    :Состояние бега, хотьби
  Animation       = AIHERO_SKL.AIHERO_RNA 26
  AnimationMode    = LOOP
  Flags       = RANDOMSTART
  TransitionKey    = TRANS_Walking
  ParticleSysBone = None InfantryDustTrails
  HideSubObject = MUZZLEFX01
End
AliasConditionState = MOVING FIRING_A :
AliasConditionState используется если
ЛЕНЬ или же нету необходимости лишний раз писать лишний параметр
например Земной параметр его
нет так что можно его прописать таким способом под стандартным
AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A
AliasConditionState = MOVING RELOADING_A
AliasConditionState = MOVING FIRING_B
AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_B
AliasConditionState = MOVING RELOADING_B

   ; injured moving
ConditionState = MOVING REALLYDAMAGED :Состояние бега, ходьбы раненым
  Animation    = AIHERO_SKL.AIHERO_IRNA 26
  AnimationMode = LOOP
  Flags    = RANDOMSTART
  TransitionKey = TRANS_WalkingInjured
  ParticleSysBone  = None InfantryDustTrails
  HideSubObject = MUZZLEFX01
End
AliasConditionState = MOVING FIRING_A REALLYDAMAGED
AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A REALLYDAMAGED
AliasConditionState = MOVING RELOADING_A REALLYDAMAGED
AliasConditionState = MOVING FIRING_B REALLYDAMAGED
AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_B REALLYDAMAGED
AliasConditionState = MOVING RELOADING_B REALLYDAMAGED

   ; Firing animation
ConditionState   = FIRING_A :Огонь первого вида оружия
PRIMARY если создавать второе огненое оружие по типу пулеметного огня
надо прописывать FIRING_B для SECONDARY и в 3 вариант FIRING_C для TERTIARY
  Animation     = AIHERO_SKL.AIHERO_ATA
  AnimationMode = ONCE
  AnimationSpeedFactorRange = 1.5 1.5
  TransitionKey = TRANS_FiringA
End

Думаю дальше объяснение кода анимации ненадо (легче повесится )

; ***DESIGN parameters ***  :Параметры Основы Пехотинца
  DisplayName     = OBJECT:ColonelBurton :Имя пехотинца (при наведении на его)
  Side        = America :фракция в которой он отображается
(это неимеет значения просто лутше сводить все в соответствующие команды чтобы легче было
работать с  WorldBuilder.exe.)
  EditorSorting    = INFANTRY :К чему относится (в каком разделе  WorldBuilder.exe.)
  TransportSlotCount  = 1    :Насколько толстый чтобы занимать место в транспорте 
  VisionRange     = 150    :Общий ранг охраны
  ShroudClearingRange = 500       :общий ранг видимости карты
  Prerequisites           :Что требуется (повышения, здания...что угодно)
Object = AmericaBarracks
Object = AmericaStrategyCenter
  End
  BuildCost = 1500        :Стоимость
  BuildTime = 20.0        :Сколько строится

  ExperienceValue = 50 100 100 150  :Уровень получения личек
  ExperienceRequired  = 0 200 300 600   :ХЗ
  IsTrainable     = Yes   
  CrushableLevel   = 2 ;What am I?:    0 = for infantry, 1 = for trees, 2 = general vehicles
  CommandSet      = AmericaInfantryColonelBurtonCommandSet :А вот и команд сет
который он ищет в CommandSet.ini

  MaxSimultaneousOfType = 1 :Максимальное количество юнитов.

  WeaponSet               :Вид оружия
Conditions      = None
Weapon      = PRIMARY ColonelBurtonSniperRifleWeapon
Weapon      = SECONDARY   ColonelBurtonKnifeWeapon
AutoChooseSources   = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
AutoChooseSources   = SECONDARY   NONE
  End
  ArmorSet            :броня
Conditions   = None
Armor       = HumanArmor
DamageFX    = InfantryDamageFX
  End
  ArmorSet
Conditions   = PLAYER_UPGRADE :Броня после Апгрейда
Armor       = ChemSuitHumanArmor
DamageFX    = InfantryDamageFX
  End

; *** AUDIO Parameters ***    :Аудио параметры
  VoiceSelect = ColonelBurtonVoiceSelect
  VoiceMove = ColonelBurtonVoiceMove
  VoiceAttack = ColonelBurtonVoiceAttack
  VoiceFear = ColonelBurtonVoiceFear
  VoiceGuard = ColonelBurtonVoiceMove
  SoundStealthOn = StealthOn
  SoundStealthOff = StealthOff
 
  UnitSpecificSounds
VoiceMelee = ColonelBurtonVoiceAttackKnife
VoiceCreate     = ColonelBurtonVoiceCreate
VoiceGarrison     = ColonelBurtonVoiceGarrison
VoiceEnter              = ColonelBurtonVoiceMove
VoiceEnterHostile = ColonelBurtonVoiceMove
VoiceGetHealed     = ColonelBurtonVoiceMove
  End

; *** ENGINEERING Parameters ***
  RadarPriority = UNIT :как его понимать
  KindOf = :всякие особености юнита (про каждый из них отпишу ниже)

  Body = ActiveBody ModuleTag_02 :Жизнь
MaxHealth     = 200.0
InitialHealth   = 200.0
  End

  Behavior = AIUpdateInterface ModuleTag_03 :Интелект
AutoAcquireEnemiesWhenIdle = Yes
  End

  Behavior = CommandButtonHuntUpdate  ModuleTag_04 :ХЗ
  End

  Behavior = AutoFindHealingUpdate   ModuleTag_05 :опять ХЗ
ScanRate = 1000; once a second.
ScanRange = 300;
NeverHeal = 0.85;  don't heal if we are > 85% healthy.
AlwaysHeal = 0.25; if we get below 25%, find healing right away.
  End

  Locomotor = SET_NORMAL ColonelBurtonGroundLocomotor ColonelBurtonCliffLocomotor :Двигатель
(дизельний  )

  Behavior = PhysicsBehavior ModuleTag_06 :Скока весит...мне бы так 
Mass = 5.0
  End
  Behavior        = ArmorUpgrade ModuleTag_Armor01  :апгрейд
за который ему дают обновленный химический костюм и броню.
TriggeredBy       = Upgrade_AmericaChemicalSuits
  End

  Behavior = StealthUpdate ModuleTag_07   :Скрытность (стелс)
StealthDelay        = 1500; msec
StealthForbiddenConditions  = FIRING_PRIMARY
HintDetectableConditions = IS_FIRING_WEAPON
FriendlyOpacityMin      = 50.0%
FriendlyOpacityMax      = 100.0%
InnateStealth       = Yes
OrderIdleEnemiesToAttackMeUponReveal  = Yes
EnemyDetectionEvaEvent   = EnemyColonelBurtonDetected
OwnDetectionEvaEvent    = OwnColonelBurtonDetected
  End

  Behavior = SpecialAbility ModuleTag_08    :спец возможности
SpecialPowerTemplate = SpecialAbilityColonelBurtonRemoteCharges
UpdateModuleStartsAttack = Yes
InitiateSound    = ColonelBurtonVoicePlantRemoteCharge
  End
  Behavior = SpecialAbilityUpdate ModuleTag_09
SpecialPowerTemplate = SpecialAbilityColonelBurtonRemoteCharges
StartAbilityRange = 0.0
PreparationTime = 0
SpecialObject = RemoteC4Charge
MaxSpecialObjects = 8
SpecialObjectsPersistWhenOwnerDies = No
AlwaysValidateSpecialObjects = Yes
SpecialObjectsPersistent = Yes   
UniqueSpecialObjectTargets = Yes
UnpackTime      = 5500 ColonelBurtonPlantCharge
PackTime        = 0
SkipPackingWithNoTarget = Yes      
FlipOwnerAfterUnpacking = Yes
FleeRangeAfterCompletion = 100.0    ;Runs away after finishing ability
UnpackSound       = ColonelBurtonPlantCharge
LoseStealthOnTrigger   = Yes
PreTriggerUnstealthTime   = 5000; in milliseconds
  End

  Behavior = SpecialAbility ModuleTag_10
SpecialPowerTemplate = SpecialAbilityColonelBurtonTimedCharges
UpdateModuleStartsAttack = Yes
InitiateSound    = ColonelBurtonVoicePlantTimedCharge
  End
  Behavior = SpecialAbilityUpdate ModuleTag_11
SpecialPowerTemplate = SpecialAbilityColonelBurtonTimedCharges
StartAbilityRange = 0.0
PreparationTime = 0
SpecialObject = TimedC4Charge
MaxSpecialObjects = 10
SpecialObjectsPersistWhenOwnerDies = Yes
SpecialObjectsPersistent = Yes   
UniqueSpecialObjectTargets = Yes
UnpackTime      = 5500    
FlipOwnerAfterUnpacking = Yes
FleeRangeAfterCompletion = 100.0    ;Runs away after finishing ability
UnpackSound       = ColonelBurtonPlantCharge
LoseStealthOnTrigger   = Yes
PreTriggerUnstealthTime   = 5000; in milliseconds
  End

  Behavior = ExperienceScalarUpgrade ModuleTag_12
TriggeredBy   = Upgrade_AmericaAdvancedTraining
AddXPScalar   = 1.0;Increases experience gained by an additional 100%
  End

; --- begin Death modules --- :Види похорон 
  Behavior = SlowDeathBehavior ModuleTag_Death01
DeathTypes      = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -
POISONED_BETA -POISONED_GAMMA
SinkDelay       = 3000
SinkRate    = 0.5 ; in Dist/Sec
DestructionDelay = 8000
FX          = INITIAL FX_ColonelBurtonDie
  End
  Behavior = SlowDeathBehavior ModuleTag_Death02
DeathTypes      = NONE +CRUSHED +SPLATTED
SinkDelay       = 3000
SinkRate    = 0.5 ; in Dist/Sec
DestructionDelay = 8000
FX          = INITIAL FX_GIDieCrushed
  End
  Behavior = SlowDeathBehavior ModuleTag_Death03
DeathTypes      = NONE +EXPLODED
SinkDelay       = 3000
SinkRate    = 0.5 ; in Dist/Sec
DestructionDelay = 8000
FX          = INITIAL FX_ColonelBurtonDie
FlingForce      = 8
FlingForceVariance  = 3
FlingPitch      = 60
FlingPitchVariance  = 10
  End
  Behavior = SlowDeathBehavior ModuleTag_Death04
DeathTypes      = NONE +BURNED
DestructionDelay = 0
FX          = INITIAL FX_DieByFireUSA
OCL         = INITIAL OCL_FlamingInfantry
  End
  Behavior = SlowDeathBehavior ModuleTag_Death05
DeathTypes      = NONE +POISONED
DestructionDelay = 0
FX          = INITIAL FX_DieByToxinUSA
OCL         = INITIAL OCL_ToxicInfantry
  End
Behavior = SlowDeathBehavior ModuleTag_Death06
DeathTypes      = NONE +POISONED_BETA
DestructionDelay = 0
FX          = INITIAL FX_DieByToxinUSA
OCL         = INITIAL OCL_ToxicInfantryBeta
  End

  Behavior = SlowDeathBehavior ModuleTag_Death07
DeathTypes      = NONE +POISONED_GAMMA
DestructionDelay = 0
FX          = INITIAL FX_DieByToxinUSA
OCL         = INITIAL OCL_ToxicInfantryGamma
  End
; --- end Death modules ---

  Behavior = PoisonedBehavior ModuleTag_18
PoisonDamageInterval = 100 ; Every this many msec I will retake the poison damage dealt me...
PoisonDuration = 3000   ; ... for this long after last hit by poison damage
  End

  Geometry = CYLINDER      :Вид геометрии
  Scale = 0.95    :Параметр изминения размера (1.0 стандартный как при его создании)
  GeometryMajorRadius = 10.0  :Основной радиус юнита (сколько места занимает)
  GeometryMinorRadius = 10.0  :Тоже радиус но обычно меньше основного
  GeometryHeight = 12.0          :Высота указания полосы жизни
  GeometryIsSmall = Yes                 
  Shadow = SHADOW_DECAL    :Параметры тени
  ShadowSizeX = 14
  ShadowSizeY = 14
  ShadowTexture = ShadowI
  BuildCompletion = APPEARS_AT_RALLY_POINT

End

Юнит
Пример Китайский Боевой Мастер - ChinaTankBattleMaster

Исходный код
Object ChinaTankBattleMaster    :все описовать небуду поскольку общие параметры описал в
пехотинце бартоне

  ; *** ART Parameters ***
  SelectPortrait         = SNBattlemaster_L
  ButtonImage            = SNBattlemaster
 
  UpgradeCameo1 = Upgrade_Nationalism
  UpgradeCameo2 = Upgrade_ChinaNuclearTanks
  UpgradeCameo3 = Upgrade_NapalmShells
  ;UpgradeCameo5 = NONE
 
  Draw = W3DTankDraw ModuleTag_01  :С транспортом в игре легче,
тут все понятнее,
просто прописать точки выпуска, хлопка из модельки прямиком в (Weapon...)
Но он поделяется на несколько категорий:
W3DTankDraw - параметр который следует прописовать тока танкам у которых есть тока
гусеници,
W3DOverlordTankDraw
- параметр для повелителей
(если хотите прикрепить дополнительную пушку или еще чото то надо прописовать именно этот
параметр при других пушка будет просто болтатся на юните)
W3DTruckDraw - прописуется колесному транспорту.
W3DTankTruckDraw - редко когда используется, прописуется при наявносте колес и гусенец
(пример квад пушка у ГЛА)

    OkToChangeModelColor = Yes
    DefaultConditionState
      Model               = NVBtMstr
      Turret              = Turret01
      WeaponFireFXBone    = PRIMARY Muzzle
      WeaponRecoilBone    = PRIMARY Barrel
      WeaponMuzzleFlash   = PRIMARY MuzzleFX
      WeaponLaunchBone    = PRIMARY Muzzle
    End
    ConditionState = REALLYDAMAGED
      Model               = NVBtMstr_D
      Turret              = Turret01
      WeaponFireFXBone    = PRIMARY Muzzle
      WeaponRecoilBone    = PRIMARY Barrel
      WeaponMuzzleFlash   = PRIMARY MuzzleFX
      WeaponLaunchBone    = PRIMARY Muzzle
    End
    ConditionState = RUBBLE        :Модель после крушения. При быстрой игре ее неуспеваеш заметить.
      Model               = NVBtMstr_D
      Turret              = Turret01
    End

    TrackMarks              = EXTnkTrack.tga     :текстура оснавленая от следов гусенец
  End

  ; ***DESIGN parameters ***
  DisplayName      = OBJECT:BattleMaster
  Side = China
  EditorSorting   = VEHICLE
  TransportSlotCount = 3               
  WeaponSet
    Conditions = None
    Weapon = PRIMARY BattleMasterTankGun
    Weapon = SECONDARY BattlemasterTankMachineGun
  End
  WeaponSet
    Conditions = PLAYER_UPGRADE                                    :Вейпойнт после апгрейда (пример взято из Реборна)
    Weapon = PRIMARY NapalmBattleMasterTankGun
  End
  ArmorSet
    Conditions      = None
    Armor           = TankArmor
    DamageFX        = TankDamageFX
  End
  BuildCost       = 800
  BuildTime       = 10.0          ;in seconds   
  VisionRange     = 150
  ShroudClearingRange = 300
  Prerequisites
    Object = ChinaWarFactory
  End

  ExperienceValue = 100 100 200 400    ;Experience point value at each level
  ExperienceRequired = 0 200 300 600 ;Experience points needed to gain each level
  IsTrainable = Yes             ;Can gain experience
  CrusherLevel           = 2  ;What can I crush?: 1 = infantry, 2 = trees, 3 = vehicles
  CrushableLevel         = 2  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  CommandSet       = ChinaVehicleBattleMasterCommandSet

  ; *** AUDIO Parameters ***
  VoiceSelect = BattleMasterTankVoiceSelect
  VoiceMove = BattleMasterTankVoiceMove
  VoiceGuard = BattleMasterTankVoiceMove
  VoiceAttack = BattleMasterTankVoiceAttack
  SoundMoveStart = BattleMasterTankMoveStart
  SoundMoveStartDamaged = BattleMasterTankMoveStart

  UnitSpecificSounds
    ; These have the syntax of SomeNameSomewhereInCode = SomeNameSomewhereInLookupINIs
    VoiceCreate          = BattleMasterTankVoiceCreate
    TurretMoveStart = NoSound
    TurretMoveLoop = TurretMoveLoop
    VoiceCrush = BattleMasterTankVoiceCrush
    VoiceEnter = BattleMasterTankVoiceMove
  End

  ; *** ENGINEERING Parameters ***
  RadarPriority = UNIT
  KindOf = :всякие особености юнита (про каждый из них отпишу ниже)

  Body = ActiveBody ModuleTag_02
    MaxHealth       = 500.0
    InitialHealth   = 500.0

    ; Subdual damage "Subdues" you (reaction defined by BodyModule) when it passes your max health.
    ; The cap limits how extra-subdued you can be, and the other numbers detemine how fast it drains away on its own.
    SubdualDamageCap = 800
    SubdualDamageHealRate = 500
    SubdualDamageHealAmount = 50
  End

  Behavior = AIUpdateInterface ModuleTag_03                  :Интелект отвечающий за поворот дула.
    Turret
      TurretTurnRate = 120   ; turn rate, in degrees per sec
      ControlledWeaponSlots = PRIMARY SECONDARY
    End
    AutoAcquireEnemiesWhenIdle = Yes
  End

  Locomotor = SET_NORMAL BattleMasterLocomotor
  Locomotor = SET_NORMAL_UPGRADED NuclearBattleMasterLocomotor   :Двигатель после апгрейда.

  Behavior = VeterancyGainCreate ModuleVet_01                                 :Активация лички через повышение
    StartingLevel = ELITE          :статус (кем станет) VETERAN - одна личка, ELITE - две лички, HEROIC - три лички
    ScienceRequired = SCIENCE_BattlemasterTraining        :Повышение которое требует для активации лички.
  End

  Behavior = HordeUpdate ModuleTag_04             :В каких групах находится для получения Horde
    RubOffRadius = 150    ; if I am this close to a real hordesman, I will get to be an honorary hordesman
    UpdateRate = 1000     ; how often to recheck horde status (msec)
    Radius = 75           ; how close other units must be to us to count towards our horde-ness (~30 feet or so)
    KindOf = VEHICLE      ; what KindOf's must match to count towards horde-ness
    AlliesOnly = Yes      ; do we only count allies towards horde status?
    ExactMatch = Yes      ; do we only count units of our exact same type towards horde status? (overrides kindof)
    Count = 5             ; how many units must be within Radius to grant us horde-ness
    Action = HORDE        ; when horde-ing, grant us the HORDE bonus
  End

  Behavior = PhysicsBehavior ModuleTag_05
    Mass = 40.0
  End

  Behavior = FireWeaponWhenDeadBehavior ModuleTag_06      :Смертное состояние 1 (после апгрейда)
    DeathWeapon   = NuclearTankDeathWeapon                        :Вейпойнт который будет активирован (взрыв и радиация)
    StartsActive  = No                        :Активный ли сразу
    TriggeredBy   = Upgrade_ChinaNuclearTanks    :Какой требует Апгрейд
  End
  Behavior = LocomotorSetUpgrade ModuleTag_07   :Апгрейд на Двигатель
    TriggeredBy = Upgrade_ChinaNuclearTanks
  End
  Behavior = WeaponSetUpgrade ModuleTag_17       :Апгрейд на Вейпойнт
    TriggeredBy = Upgrade_NapalmShells
  End

  ; A crushing defeat
  Behavior = DestroyDie ModuleTag_08
    DeathTypes = NONE +CRUSHED +SPLATTED
  End
  Behavior = FXListDie ModuleTag_09
    DeathTypes = NONE +CRUSHED +SPLATTED
    DeathFX = FX_CarCrush
  End
  Behavior = CreateObjectDie ModuleTag_10
    DeathTypes = NONE +CRUSHED +SPLATTED
    CreationList = OCL_CrusaderTank_CrushEffect
  End
  Behavior = CreateCrateDie ModuleTag_11
    CrateData = SalvageCrateData
    ;CrateData = EliteTankCrateData
    ;CrateData = HeroicTankCrateData
  End

  Behavior = SlowDeathBehavior ModuleTag_12 
    DeathTypes = ALL -CRUSHED -SPLATTED
    ProbabilityModifier = 25
    DestructionDelay = 200
    DestructionDelayVariance = 100
    OCL = FINAL    OCL_ChinaTankBattleMasterDebris
    FX  = FINAL    FX_BattleMasterExplosionOneFinal
  End

  Behavior = TransitionDamageFX ModuleTag_13    :эфекты крушения
    ReallyDamagedParticleSystem1 = Bone:Smoke RandomBone:Yes PSys:SmokeSmallContinuous01
    ReallyDamagedFXList1 = Loc: X:0 Y:0 Z:0 FXList:FX_BattleMasterDamageTransition
  End

  Behavior = FlammableUpdate ModuleTag_21
    AflameDuration = 5000         ; If I catch fire, I'll burn for this long...
    AflameDamageAmount = 3       ; taking this much damage...
    AflameDamageDelay = 500       ; this often.
  End

  Geometry = BOX           :Геометрия которая притаманна для машин
  GeometryMajorRadius = 13.0
  GeometryMinorRadius = 9.0
  GeometryHeight = 10     
  GeometryIsSmall = Yes
  Shadow = SHADOW_VOLUME   
  ShadowSizeX = 45  ; minimum elevation angle above horizon. Used to limit shadow length

End

Думаю с постройкой проблем небудет.

А теперь розберем Weapon.ini

Пример - Вейпойнт БатлМастера Китая

;------------------------------------------------------------------------------
Weapon BattleMasterTankGun
PrimaryDamage = 60.0 :Сила удара
PrimaryDamageRadius = 6.0 :Радиус удара
ScatterRadiusVsInfantry = 10.0 :Розброс относительно пехоты
AttackRange = 200.0 :Дальность Атаки
MinTargetPitch = -15
MaxTargetPitch = 15
DamageType = ARMOR_PIERCING :Вид нанесеного Урона
DeathType = NORMAL
WeaponSpeed = 500 : dist/sec
WeaponRecoil = 5 :angle to deflect the model when firing
ProjectileObject = BattleMasterTankShell :обэкт который вистрелюет
FireFX = WeaponFX_GenericTankGunNoTracerSmall :Эфект при выстреле
VeterancyFireFX = HEROIC WeaponFX_HeroicGenericTankGunNoTracerSmall :Трехличковый эфект
ProjectileDetonationFX = WeaponFX_GenericTankShellDetonation :Эфект Детонации.
FireSound = BattlemasterTankWeapon :Звук выстрела
RadiusDamageAffects = ALLIES ENEMIES NEUTRALS
DelayBetweenShots = 2000 :Время перезарядки обойм.
ClipSize = 0 :Количество Обойм если есть DelayBetweenShots 0=1
ClipReloadTime = 0 :Время перезарядки если обойм несколько
WeaponBonus = PLAYER_UPGRADE DAMAGE 125% :Бонус после апгрейда UraniumShells
ProjectileCollidesWith = STRUCTURES WALLS
End

А вот и информация про ParticleSystem.ini

ParticleSystem TsingMaTrailSmoke --- имя партикла! =))
Priority = WEAPON_EXPLOSION --- приоритет отображания партикла при загрузки железа. Самый высший CRITICAL, самый низший НЕ ПОМНЮ. Если ставишь CRITICAL, то партикл будет отображатся, если даже комп 1фпс показывает.
IsOneShot = No --- без понятия, в теории значение определяет один или множество раз проецируется партикл. Но так как я делал партиклы по шаблону наиболее похожего, это значение никогда не трогал.
Shader = ALPHA --- не, это не шейдеры =)) ALPHA - текстура с использованием альфа канала, ALPHA_TEST - более гадкий альфа канал с пятью уровнями прозрачности, ADDITIVE - текстура без альфа канала, но в ней более тёмные участки будут отображатся более прозрачными
Type = PARTICLE --- PARTICLE - обычный партикл, STREAK - партикл проецируется друг за другом в связке (полоски вместо дыма ракетчиков), DRAWABLE - это обычная серия спрайтов, которая в Генералах не используется, но значение, почему то, присутствует. Попытатся его воскресить, по крайней мере у меня, не получилось.
ParticleName = EXSmokNew1.tga --- текстура
AngleZ = 0.00 0.25 - начальный угол поворота партикла по оси Z
AngularRateZ = -0.01 0.01 - скорость поворота текстурки вокруг оси Z
AngularDamping = 0.99 0.99 - незнаю пока что
VelocityDamping = 0.99 0.98 - процент окончания анимации партикла.Вид анимации задаётся в VelocityType
Gravity = 0.01 --- сила притяжения
Lifetime = 60.00 60.00 --- время жизни каждой текстурки партикла из расчёта 30 кадров в секунду
SystemLifetime = 0 --- время жизни самого партикла, если "0" - то партикл умрёт лишь тогда, когда исчезнет замута, его запустившая, например, ракета детанирует, либо будет сбита.
Size = 5.00 5.00 --- размер текстурки партикла
StartSizeRate = 0.00 0.00 --- изменение размера при создании партикла, при минусе - уменьшение, при плюсе - увеличение
SizeRate = 3.00 3.00 - конечный размер партикла
SizeRateDamping = 0.95 0.95 - скорость изменения размера партикла от StartSizeRate до SizeRate
Alpha1 = 0.00 0.00 0 - настройки альфа канала, третье значение обозначает кадр на котором данное изменние вступит в силу. Так же 30 кадров в секунду.
Alpha2 = 1.00 1.00 5
Alpha3 = 0.00 0.00 60
Alpha4 = 0.00 0.00 0
Alpha5 = 0.00 0.00 0
Alpha6 = 0.00 0.00 0
Alpha7 = 0.00 0.00 0
Alpha8 = 0.00 0.00 0
Color1 = R:255 G:255 B:255 0 - цвет текстур партикла, если нужен родной, то 000.Следующие отвечают за постепенное изменение цвета
Color2 = R:0 G:0 B:0 0
Color3 = R:0 G:0 B:0 0
Color4 = R:0 G:0 B:0 0
Color5 = R:0 G:0 B:0 0
Color6 = R:0 G:0 B:0 0
Color7 = R:0 G:0 B:0 0
Color8 = R:0 G:0 B:0 0
ColorScale = 0.00 0.00 - не юзал, но по переводу - "Масштаб цвета".
BurstDelay = 40.00 40.00 --- задержка перед появлением партикла (30 кадров в сек, ну ты понял =)))
BurstCount = 0.00 2.00 --- количество появляющихся текстурок в один "заход"
InitialDelay = 20.00 20.00 --- промежуток времение между "заходами", так же 30 кадров в сек
DriftVelocity = X:0.00 Y:0.00 Z:0.00 --- направление движения текстурок
VelocityType = OUTWARD --- это один из типов
VelOutward = 0.00 0.00 - разброс по горизонтали
VelOutwardOther = 0.00 0.00 - разброс по вертикали (неможет привышать границы данные VolumeType)
(POINT, SPHERICAL ,HEMISPHERICAL ,ORTHO ,NONE ,CYLINDRICAL)

POINT означает что текстурки будут появляться просто в одной точке

VelocityType = SPHERICAL
VelSpherical = 1.00 2.00 - распространение во все стороны, при минусе партиклы будут двигаться от краёв VolumeType в центр.

VelocityType = HEMISPHERICAL - пока что неюзал

VelocityType = ORTHO
VelOrthoX = -3.00 3.00 - движение всех партиклов по оси X
VelOrthoY = -3.00 3.00 - движение всех партиклов по оси Y
VelOrthoZ = 3.00 8.00 - движение всех партиклов по оси Z

VelocityType = CYLINDRICAL
VelCylindricalRadial = 0.25 0.75 - этот эффект заполнения VolumeType я так и непонял, но он вроде бы распространяет все партиклы паралельно земле заполняя VolumeType до краёв
VelCylindricalNormal = 0.10 0.30 - это как бы расброс партиклов вертикально

VolumeType = SPHERE --- способ появления текстурок, их тоже много, в данном случае они появляются, как бы, в кругу (в сфере, так как у нас же 3д игра =)))
(CILINDER, LINE, NONE ,BOX) - я думаю здесь подписывать ничё ненадо
VolSphereRadius = 4.00 - радиус круга (сферы)
IsHollow = No - хз
IsGroundAligned = No --- текстурки повёрнуты к камере (No) или проецируются на поверхности ландшафта (Yes)
IsEmitAboveGroundOnly = No --- если Да, то партикл будет пропадать в воде
IsParticleUpTowardsEmitter = No --- хз
WindMotion = Unused (и чтобы использовалось надо поставить PingPong здесь)--- ниже идёт замута с ветром, не использовал никогда, но походу она и не работает в генералах(но в 5 партиклах эта вещь юзается и всё работает нормуль).
WindAngleChangeMin = 0.149924 - все эти строчки пока мне неизвестны.Советую использовать это только для огня, дыма и тому подобных вещей
WindAngleChangeMax = 0.449946
WindPingPongStartAngleMin = 0.000000
WindPingPongStartAngleMax = 0.785398
WindPingPongEndAngleMin = 5.497787
WindPingPongEndAngleMax = 6.283185
End

Про парткл взял из РедСуса там много чего полезного http://www.redsys.ru/forum/index.php?showforum=9

И так подробнее про KindOf
PRELOAD :Необходим для любого обэкта использующего геометрию.
SELECTABLE :Возможность выбирать обэкт (кикать на него)
CAN_ATTACK :Способность юнита к атаке.
ATTACK_NEEDS_LINE_OF_SIGHT :Дополнительний парамерт к атаке.
CAN_CAST_REFLECTIONS :По типу рефлекса точно хз но должен бить у любого юнита.
VEHICLE :Прописуется исключительто транспорту (очень важно поскольку игра определаэт именно по нем кто есть кто)
INFANTRY - Пехотинцу.
AIRCRAFT - Авиация.
SCORE :Хз много параметров, тоже должен бить в живих обэктах.
HERO :этот маленький параметр делает с вашего обэкта героя =) по типу как Бартон, Лотос и Ярмола (они стают отмечены на карте хрестом и их нельзя задавить транспортом)
CANNOT_RETALIATE, CAN_RAPPEL - Мега ХЗ до них я еще недобрался...знаю тока нужны для пехотинцев.
EMP_HARDENED - Недосягаемость для ЕМП и любих других електромагнитных вспышек.

Теперь про фишки которые надо знать:
1)Если хотите зделать обэкт неотключаемым против ЕМП и ЕМИ (а именно не авиацию а транспорт или же постройки) надо добавить им следуйщее в KindOf: EMP_HARDENED и AIRCRAFT (да так уж прописан код что без дополнительного параметра AIRCRAFT работать небудет)

2)Знак ; используется для вырезания в коде, после него можно писать любые пометки.

3)Код для невидимости вашего обэкта:

Behavior = StealthUpdate ModuleTag_07
StealthDelay = 2500 ; msec
StealthForbiddenConditions = ATTACKING USING_ABILITY :при каких условиях стает видимым, в этом случае при атаке и хз чему (взято из повстанца ГЛА)
MoveThresholdSpeed = 3 :скорость видео тени
InnateStealth = No :Начальная маскировка (Yes) если ненадо апгрейда и начинает бить невидем в самом начале.
OrderIdleEnemiesToAttackMeUponReveal = Yes :Хз непомню.
End

Behavior = StealthUpgrade ModuleTag_10 :А вот и апгрейд кторый необходим для активации с условием InnateStealth = No
TriggeredBy = Upgrade_GLACamouflage
End

Пока это все...если будет время буду обновлять статью и дальше.

0

2

Когда же сделаешь обновление, Иван, эээх :( , тебе то хорошо, - ты всё знаешь...

0

3

Иван, ааааааааа(смайл плачущий-рыдающий), когда ж заделаешъ полнометражную статью ? А то на Ред Сустем в разделе INI coding там чёрт-ногу-сломит - всё перечитывать сидеть искать то что надо запаришся в кучищще дубль-тем. А надо, очень нада...

0

4


Вы здесь » C&C Generals Zero Hour Mods » Обучение » INI FAQ