Для начала кратко разберу что такое 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
Пока это все...если будет время буду обновлять статью и дальше.