Помощь - Поиск - Пользователи - Календарь
Полная версия: Тибериумный Ai
Форум Command & Conquer > Tiberium Universe > C&C 3: Tiberium Wars + Kane's Wrath
Avenger
Искусственный интеллект — довольно слабое место в Command & Conquer 3: Tiberium Wars. AI в игре, мягко говоря, не самый удачный. Это в первую очередь касается наших виртуальных оппонентов. Скажем, если вы сумели как следует развиться и обзавестись большой сбалансированной армией, то успех в рядовой миссии вам практически гарантирован. Скорее всего, вы очень быстро сметете оборону противника. В подавляющем большинстве уровней компьютер опасен игроку лишь на ранних стадиях развития.

Юниты ведут себя порой совершенно неадекватно. То охраняющие базу солдаты устремляются в ненужную погоню за врагом, то не могут этого самого врага вблизи разглядеть. Все эти недоработки, мелкие и не очень, мы сегодня и будем устранять. Конечно, мы не перекроим весь игровой AI, но внесем ряд точечных изменений, которые добавят осмысленности действиям компьютера.
Бедный, богатый, злой

Все, что нужно, вы найдете в ini-файлах игры из папки <Каталог игры>\Alldata\data\ini. Главным образом нас интересует файл aidata.ini (прячется в подкаталоге \default), посвященный AI, и в меньшей степени — его собрат gamedata.ini, содержащий общие параметры геймплея. Оба редактируются в стандартном «Блокноте».

Все параметры в файле aidata.ini относятся к искусственному интеллекту, но не все характеризуют ваших компьютерных соперников. Некоторые отвечают за поведение определенных категорий юнитов независимо от того, принадлежат те игроку или компьютеру. Эти редкие атрибуты тоже по-своему интересны, и о них мы также расскажем. В целом же произвести апгрейд AI нам помогут следующие показатели.

показать офф-топ
StructureSeconds — минимальный временной интервал (в секундах), через который компьютер делает попытку возвести новое сооружение (отсчитывается после строительства предыдущего строения). Новички могут замедлить компьютеру развитие, немного повысив значение этой (до 5-8) и следующих характеристик (до 20-25).

TeamSeconds — минимальное время (тоже в секундах), через которое компьютер пытается произвести нового юнита.

Wealthy — минимальное количество тибериума, при котором компьютерный игрок считает себя богатым.

Poor — максимальное количество тибериума, при котором компьютер считает себя бедным.

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

StructuresPoorRate — скорость застройки для «бедного» компьютера.

TeamsWealthyRate — скорость производства юнитов для «богатого» компьютера (опять-таки речь идет о величине промежутка между двумя заказами).

TeamsPoorRate — аналогично для «бедного».

GuardInnerModifierAI — коэффициент величины поля зрения, которое имеют обороняющиеся юниты (которым дана соответствующая команда) компьютера в момент, когда они агрессивно атакуют силы игрока.

GuardOuterModifierAI — множитель величины поля зрения, которое имеют обороняющие базу юниты компьютера в момент преследования юнитов игрока.

GuardInnerModifierHuman — аналог параметра GuardInnerModifierAI (только здесь ситуация обратная: игрок защищает базу от нашествия компьютера).

GuardOuterModifierHuman — обратный аналог показателя GuardOuterModifierAI. Обратите внимание на то, что значения этой и предыдущих характеристик существенно выше, чем у их антиподов, вследствие чего обороняющиеся юниты игрока получают ощутимое преимущество в зрении по сравнению с их оппонентами под управлением AI.

GuardChaseUnitsDuration — время (в миллисекундах), которое обороняющийся юнит преследует нападавших. По истечении этого срока он это неблагодарное дело бросает. Параметр, кстати, относится не только к юнитам компьютера, но и к вашим подчиненным, которым вы определили состояние Guard stance.

GuardEnemyScanRate — периодичность (в миллисекундах) сканирования обороняющимся юнитом местности на наличие врагов в ситуации, когда боец не двигается. Учтите, что этот атрибут относится не только к компьютеру.

GuardEnemyReturnScanRate — периодичность сканирования местности на наличие новых врагов, когда воин гонится за неприятелем.

AlertRangeModifier — коэффициент дальности обзора юнита, применяющийся, когда юнит находится в состоянии боевой готовности и осматривает местность на наличие противников. Обратите внимание, что этот и следующий атрибут относятся только к силам компьютера.

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

AttackPriorityDistanceModifier — дистанция, на которой цель становится менее приоритетной для атакующего юнита.

RepulsedDistance — дополнительное расстояние, на которое напуганный мирный юнит убегает от захватчиков (на расстояние, равное своему полю зрения, он убежит в любом случае). Числа от 0 до 50 сделают граждан спокойными и бесстрашными, а от 150 до 200 превратят их в паникеров.


Несколько весьма любопытных параметров скрыто в файле gamedata.ini. Все приведенные ниже атрибуты измеряются в процентах. Первые три относятся только к сингловой части игры:

показать офф-топ
EASY_AI_SINGLE_PLAYER_DAMAGE_MULT —множитель урона, наносимого войсками компьютера на легком уровне сложности.

MEDIUM_AI_SINGLE_PLAYER_DAMAGE_MULT — урон на среднем уровне сложности.

HARD_AI_SINGLE_PLAYER_DAMAGE_MULT — урон на высоком уровне сложности.

Настройки EASY_AI_MULTI_PLAYER_DAMAGE_MULT, MEDIUM_AI_MULTI_PLAYER_DAMAGE_MULT, HARD_AI_MULTI_PLAYER_DAMAGE_MULT являются аналогами трех предыдущих параметров, только используются для мультиплеера.


Еще три показателя влияют только на однопользовательский режим:

показать офф-топ
HumanSoloPlayerHealthBonus_Easy — живучесть ваших юнитов на легком уровне сложности.

HumanSoloPlayerHealthBonus_Normal — выживаемость на среднем уровне.

HumanSoloPlayerHealthBonus_Hard — выживаемость на высоком.


Обратите внимание, что значения шести последних показателей равны ста процентам. Это говорит о том, что, во-первых, изменение уровня сложности на мультиплеере сказывается слабо, во-вторых, повышение уровня сложности в любом режиме игры не делает вас слабее. Если последнее в принципе разумно, то многопользовательским атрибутам логично определить соответственно следующие числа: 50, 75 и 100.

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

Пересадка мозгов

показать офф-топ
Дабы сделать компьютерных игроков более умными и умелыми, внесем в файл aidata.ini следующие изменения. Первым делом присвоим характеристике TeamSeconds значение 5, StructureSeconds — 1, TeamsWealthyRate и StructuresWealthyRate — 2.5, а StructuresPoorRate и TeamsPoorRate — 0.8. Тем самым мы поднимем производительность виртуального оппонента. Однако при таком положении дел ему будет сильно не хватать ресурсов, особенно на первых порах. Исправить это можно, увеличив значения чисел, стоящих рядом с атрибутами Wealthy и Poor, соответственно до 10000 и 3000.

В оригинале разница между порогами бедности и состоятельности не столь велика. У нас же этот разрыв получился куда более существенным. Теперь, скопив 10-тысячное состояние, компьютер будет штамповать здания и юниты практически без остановок — насколько ему позволяют ресурсы. Такому сопернику под силу в кратчайшие сроки собрать большую и грозную армию, не говоря уже о том, чтобы как следует отстроиться. Так что крайне опасно давать ему беспрепятственно процветать.

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

Чтобы стоящие на страже войска компьютера стали более зоркими (в любом из возможных состояний), повысьте значения атрибутам GuardInnerModifierAI, GuardOuterModifierAI, AlertRangeModifier и AggressiveRangeModifier, соответственно, до 1.3, 1.5, 1.4 и 1.7. Такая регулировка первых двух настроек хотя бы немного сгладит имеющееся неравенство, при котором игрок находится в привилегированном положении. Если вы опытный и умелый геймер, то непременно должны находиться с соперником в равных условиях.

Не мешает также сделать обороняющихся (причем как ваших, так и компьютера) более бдительными, понизив числа, соответствующие параметрам GuardEnemyScanRate и GuardEnemyReturnScanRate, до 300 в первом случае и до 750 во втором.

Советуем понизить значение атрибута GuardChaseUnitsDuration до 10000. Ведь в исходном варианте юниты под управлением как живого игрока, так и виртуального, легко заманить в ловушку: защитники порой слишком увлекаются погоней за появившимся врагом. В результате не составляет труда увести их за собой далеко за пределы базы. А там может быть либо засада, либо... пустота (основные силы атакующего игрока в это время смогут почти беспрепятственно вторгнуться во владения его соперника). Нынешний расклад хорош тем, что все же позволяет подлавливать противника подобным образом, но отныне для этого вам придется приложить максимум усилий и изобретательности.


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

Обратите внимание, что произведенные преобразования отразились не только на AI вашего противника, но и отчасти на интеллекте ваших подопечных. При обороне они отныне действуют куда более осмысленно и внимательно.

Но помните, никакой AI никогда не заменит вам живого противника. 54.gif

Выдержка с Журнала "Игромания" №10 2007 года.
SteXer
Статься по MOD SDK? Скорее всего - да. Напиши что это для мод мейкерства, а то многие поползут в папку с игрой и с удивлением не смогут ничего найти...

ЗЫ. и прикрепи пожалуйста инфу о том как комплитить мод, самому интересно =)
Avenger
Прости, но это не по MOD SDK 56.gif . Файл <Каталог игры>\Alldata\data\ini\default\aidata.ini я находил на пиратке игры (на лиц. не искал). 54.gif Этот материал это выдержка с Журнала "Игромания" №10 2007 года.

PS: Как комплитить мод я бы сам хотел узнать. 56.gif
SteXer
пиратка такая пиратка 54.gif 54.gif
показать офф-топ
Изображение
BLACKOUT217
Чтобы это замутить, надо просто сделать БИГ-файл с Aidata и потом подрубить этот БИГ к игре. В принципе, это будет мод.
snork
Прикольная статейка
Avenger
Хм, странно, вот только что поставил пиратку C&C3 и нашёл его (у меня это D:\Games\CC3 Tiberium Wars\Alldata\data\ini\default\aidata.ini Может попробуй поюзать поиск. 54.gif Или же его просто упаковали.
BLACKOUT217
Цитата(Avenger @ 11.2.2010, 1:06) *

Хм, странно, вот только что поставил пиратку C&C3 и нашёл его (у меня это D:\Games\CC3 Tiberium Wars\Alldata\data\ini\default\aidata.ini Может попробуй поюзать поиск. 54.gif Или же его просто упаковали.

Неужели "Игроманы" писали статью по пиратке? 08.gif
Avenger
Всё возможно 27.gif
SteXer
Цитата(BLACKOUT217 @ 10.2.2010, 21:10) *

Чтобы это замутить, надо просто сделать БИГ-файл с Aidata и потом подрубить этот БИГ к игре. В принципе, это будет мод.

Чтобы подрубить этот биг файл к игре, по сути нужно сделать декомпл всей игры 14.gif

А я, чесно говоря, комплитил моды помню 54.gif
Щас поставлю МОД СДК, гляну что да как 54.gif Заинтересовали вы меня... ))

Файл AIData.ini (MOD SDK):
Код
;//////////////////////////////////////////////////////////////////////////////
;FILE: AIData.ini (SYSTEM) ////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////////////////////////

AIData

  UseLowLODTrees = Yes
  LowLodTreeScale = 1.2
  LowLodTreeName = TreeF03
  LowLodTreeNameNoGrab = GenericHarvestOnlyOptimizedTreeA
  LowLodTreeNameNoHarvest = PTStump02A

  StructureSeconds                    = 0.0;  Ai tries to build a new structure every N seconds.
  TeamSeconds                         = 10     ;Ai tries to build a new team every N seconds.
  Wealthy                             = 7000  ;   Number of resources for the AI to consider itself wealthy
  Poor                                = 2000  ;   Number of resources for the AI to consider itself poor
  StructuresWealthyRate               = 2.0;  (2=twice as fast) Rate modifier for structure building when wealthy.
  StructuresPoorRate                  = 0.6;  (0.5=half as fast) Rate modifier for structures when poor.
  TeamsWealthyRate                    = 2.0;   (2=twice as fast) Rate modifier for teams building when wealthy.
  TeamsPoorRate                       = 0.6;  (0.5=half as fast) Rate modifier for teams when poor.
  TeamResourcesToStart                = 0.1  ; (1.0=100%) Amount of resources required to start building a team.
  GuardInnerModifierAI                = 1.1;The radius modifier to vision which a guarding (AI Controlled) unit will agressively attack
  GuardOuterModifierAI                = 1.333 ;The radius modifier to vision which a guarding (AI Controlled) unit will chase after
  GuardInnerModifierHuman             = 1.8;1.1;The radius modifier to vision which a guarding (Human Controlled) unit will agressively attack
  GuardOuterModifierHuman             = 2.2;1.333 ;The radius modifier to vision which a guarding (Human Controlled) unit will chase after
  GuardChaseUnitsDuration             = 15000 ;The number of msec for which a guarding unit will chase attackers before giving up
  GuardEnemyScanRate                  = 500; when actively guarding, how often to scan for enemies (msec)
  GuardEnemyReturnScanRate            = 1000  ; when returning to "active" guarding (from pursuing someone), how often to scan for enemies (msec)
  AlertRangeModifier                  = 1.1;The adjustment applied when a unit is alert and doing various scans for enemies (AI units only)
  AggressiveRangeModifier             = 1.5;The adjustment applied when a unit is aggressive and doing various scans for enemies (AI units only)
  AttackPriorityDistanceModifier      = 80.0 ;The distance required to reduce attack priority by 1.
  MaxRecruitRadius                    = 400.0 ;The maximum distance a unit will be from a unit that recruits it.
  ForceIdleMSEC                       = 67    ;The number of milisec a unit must be idle before looking for an enemy, 2 frames.
  ForceSkirmishAI                     = No    ; Use skirmish instead of solo ai.  For development till the skirmish ui is finished.
  RotateSkirmishBases                 = Yes;  If yes, rotate base layout so same side of base faces center of map.  
  AttackUsesLineOfSight               = Yes;  If yes, attack for ALL UNITS (player and ai) uses line of sight.  

  EnableRepulsors                     = Yes; If yes, KINDOF_CAN_BE_REPULSED will run from enemies & repulsors.
  RepulsedDistance                    = 120.0 ; How far beyond vision range a repulsed civilian will run before stopping.
; so if vision range is 120.0, he will move to a point at least 270.0 away from the enemy, and then stop running.

  WallHeight                          = 35    ; Height of the "Wall", made of KIND WALK_ON_TOP pieces.
  
  AttackIgnoreInsignificantBuildings  = Yes; If yes, units will ignore enemy-owned buildings that are not faction buildings

; SkirmishGroupFudgeDistance is the distance that is multiplied by the number of units in a group to
; determine if they are close enough to the waypoint to consider themselves AT the waypoint. This is
; only used for "Follow Waypoint Path as a Team."
  SkirmishGroupFudgeDistance          = 4.0

; Note that these group pathfind parameters are inter-related, and modifying them may produce really
; ugly results & require code changes.
  InfantryPathfindDiameter            = 6      ; Number of pathfind cells wide group path is for infantry.
  VehiclePathfindDiameter            = 6      ; Number of pathfind cells wide group path is for vehicles.

  SupplyCenterSafeRadius            = 240.0  ; Radius to scan for enemies to determine if a supply center is safe.
  RebuildDelayTimeSeconds            = 30     ; Delay this many seconds when a base building is destroyed or captured before attempting rebuild.

  AIDozerBoredRadiusModifier        = 1.6    ; Multiplier to dozer scan radius for repair & mine clearing.  2.0 means ai uses twice the radius as human dozers.
  AICrushesInfantry                    = Yes    ; If yes, ai will attempt to crush infantry with vehicles.

  MeleeApproachDist                    = 48.0; Melee units will move towards targets if > this distance.
  MeleeApproachTolerance            = 20.0;
  
  WadeWaterDepth                    = 5.0; How deep we can wade into water or cross fords.
  DeepWaterDepth                    = 6.0; How deep water needs to be for ships & subs (non-shallow-water craft).

  
; Group (formation) pathfinding parameters.
  MinDistanceForGroup                = 200.0  ; Have to be moving at least this far for group (formation) movement.
  FormationEnemyDistance            = 500.0 ; Don't use formation movement if enemies are closer than this to the center of the group.

  FormationColumnWidth                = 60.0  ; Space between columns.
  FormationRowDepth                    = 55.0; Space between rows.
  FormationSquadSpacing                = 30.0; Extra space between squads.
  FormationColumns                    = 2; form up two hordes abreast, or 4 smaller units. (valid values are 2 or 3.)
  UseFormations                        = Yes ; Move in formation.  Can be turned off in a map.ini if necessary.
  WaitForOthers                        = No; When moving in formation wait (or not) for others at first waypoint. Default=No.
  
  NarrowPassageScale                = 0.4;
  
  HordesWaitForHordes                = Yes; If yes, hordes will stop and wait for other hordes to pass.  If no, they just run through each other. 22 Sept. 2004
  AttackMoveUsesFormations            = Yes; If yes, player attack moves will move in formation (if UseFormations == Yes)

; Retaliation parameters.
  MaxRetaliateDistance              = 410.0  ; If the attacker is more than this far away, won't chase.  Keeps from chasing artillery.
  RetaliateFriendsRadius            = 120.0  ; Retaliator gathers allies within this distance & attacks.
  
  ChaseFromBehindLimit                = 50.0; How far from behind units can do melee attacks when chasing other units. 01Oct2004
  
  ForceHordesToLowLOD                = Yes;

  AllowForestFires                    = No;
  
  CastleSiegeStandBackDistance      = 500.0; How far for units to stand back from if they cannot enter the castle



;//////////////////////////////////////////////////////////
;
; Build Phase Priority Modifiers
;    These numbers are the amount by which the priority of a structure is increased per second
;    for each thing that needs said structure to exist
;
;//////////////////////////////////////////////////////////
  
  BuildPhase1_PerSecondPriorityModifier = 50
  BuildPhase2_PerSecondPriorityModifier = 30
  BuildPhase3_PerSecondPriorityModifier = 20
  BuildPhaseN_PerSecondPriorityModifier = 10
  
  
;///////////////////////////////////////////
;//
;// The entire AttackPriority system is no longer in use
;// target priorities are now defined much more generically in SkirmishAIData.ini
;//
;///////////////////////////////////////////
  
    AttackPriority DefaultAttackPriority; define THIS IS OUTDATED, DO NOT USE THIS
        Default                                         = 35
    End

END

gamedata.ini (MOD SDK)
Код
//////////////////////////////////////////////////////////////////////////////
// FILE: GameData.ini (SYSTEM) /////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

//------------------------BALANCE DATA----------------------------
//NOTE: Attacks are as such: PreAttackDelay -> Both: FiringDuration & DelayBetweenShots -> After DBS starts PreAttackDelay again.

// Region Bonuses
#define DEFAULT_REGION_RESOURCE_BONUS                10
#define DEFAULT_REGION_ARMY_BONUS_GOOD                20
#define DEFAULT_REGION_ARMY_BONUS_EVIL                50
#define DEFAULT_REGION_LEGENDARY_BONUS                1

#define EMOTION_CHEER_RADIUS                    100
#define ARCHER_FEAR_SCAN_RADIUS                    30
#define INFANTRY_FEAR_SCAN_RADIUS                100
#define CAVALRY_FEAR_SCAN_RADIUS                30
#define INFANTRY_TAUNT_POINT_RADIUS                100

// Afraid of objects must be SCARY kindof as well.
#define EMOTION_AFRAIDOF_OBJECTFILTER            NONE
#define EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER    NONE
#define EMOTION_POINTAT_OBJECTFILTER            NONE

#define SHOCKWAVE_RESISTANCE_WEAK            20
#define SHOCKWAVE_RESISTANCE_STRONG            74
#define SHOCKWAVE_RESISTANCE_IMMUNE            99
#define SHOCKWAVE_RESISTANCE_ALWAYS            9999 // always resist meta-impact

//-----------------------Generic Experience Values-----------------

#define PLAYER_MAX_PURCHASE_POINTS_DEFAULT        150            // 150 = (3 * 5) + (4 * 10) + (3 * 15) + (2 * 25)
#define PLAYER_MAX_PURCHASE_POINTS_EVIL            225            // 230 = (5 * 5) + (6 * 10) + (5 * 15) + (4 * 25) - 5    ( 5 is starting value)
#define PLAYER_MAX_PURCHASE_POINTS_GOOD            201            // 205 = (4 * 5) + (5 * 10) + (4 * 15) + (3 * 25) - 4    (rounding error)
#define PLAYER_PURCHASE_POINTS_GRANTED            1        //3        // Amount per rank SciencePurchasePointsGranted
#define PLAYER_SKILL_POINTS_DELTA_DEFAULT        70        //125    Why was this 42 // Amount to take to next rank SkillPointsNeededDefault
#define PLAYER_SKILL_POINTS_DELTA_CAMPAIGN        133        //400    // Amount to take to next rank SkillPointsNeededCampaign

//------------------------HORDE RENDER LOD DATA----------------------------
#define ALLOW_MULTIPLE_MODELS_LOW        No
#define MAX_RANDOM_TEXTURES_LOW            1
#define MAX_RANDOM_ANIMATIONS_LOW        1
#define MAX_ANIM_FRAME_DELTA_LOW        8

#define ALLOW_MULTIPLE_MODELS_MED        No
#define MAX_RANDOM_TEXTURES_MED            2
#define MAX_RANDOM_ANIMATIONS_MED        4
#define MAX_ANIM_FRAME_DELTA_MED        4

#define ALLOW_MULTIPLE_MODELS_HIGH        Yes
#define MAX_RANDOM_TEXTURES_HIGH        2
#define MAX_RANDOM_ANIMATIONS_HIGH        4
#define MAX_ANIM_FRAME_DELTA_HIGH        4

//----------------------------AI BONUSES-----------------------------------
#define EASY_AI_SINGLE_PLAYER_DAMAGE_MULT        25%
#define MEDIUM_AI_SINGLE_PLAYER_DAMAGE_MULT     100%
#define HARD_AI_SINGLE_PLAYER_DAMAGE_MULT        120%

#define EASY_AI_MULTI_PLAYER_DAMAGE_MULT        100%
#define MEDIUM_AI_MULTI_PLAYER_DAMAGE_MULT        100%
#define HARD_AI_MULTI_PLAYER_DAMAGE_MULT        100%

//-----------------------------CAMO----------------------------------------
#define CAMOUFLAGE_DETECTION_DISTANCE_SHORT        0.5
#define CAMOUFLAGE_DETECTION_DISTANCE_SHORTISH    0.8
#define CAMOUFLAGE_DETECTION_DISTANCE_DEFAULT    1.0            // everything has this by default.
#define CAMOUFLAGE_DETECTION_DISTANCE_SHEDIUM    1.5            // not quite short and not quite medium so shedium.
#define CAMOUFLAGE_DETECTION_DISTANCE_MEDIUM    2.0        
#define CAMOUFLAGE_DETECTION_DISTANCE_LONG        3.0

//-----------------------------TRANSPORT SLOTS----------------------------------------

#define TRANSPORTSLOTCOUNT_NOT_TRANSPORTABLE        0
#define TRANSPORTSLOTCOUNT_HERO                        1
#define TRANSPORTSLOTCOUNT_DOZER                    1
#define TRANSPORTSLOTCOUNT_SIEGE                    1
#define TRANSPORTSLOTCOUNT_UNIT                        1
#define TRANSPORTSLOTCOUNT_MONSTER                    1
#define TRANSPORTSLOTCOUNT_SMALL_HORDE                1
#define TRANSPORTSLOTCOUNT_LARGE_HORDE                1
#define TRANSPORTSLOTCOUNT_MACHINE                    1

//    Camouflage defines
#define CAMOUFLAGE_DETECTOR_LEVEL_LOW            1            // low - heavy vehicles, aircraft
#define CAMOUFLAGE_DETECTOR_LEVEL_MEDIUM        2            // medium - heavy infantry, light vehicles
#define CAMOUFLAGE_DETECTOR_LEVEL_HIGH            3            // high - infantry


//-----------------------------Radar Jam Special Power---------------------------------
#define RADAR_JAM_RADIUS                    200.0
#define RADAR_JAM_DURATION                    30000


//-----------------------------GENERAL MOVEMENT----------------------------------------
#define GENERIC_INFANTRY_SQUAD_SPEED        40

//-----------------------------GDISoldierSquad----------------------------------------
#define GENERIC_INFANTRY_BUILDCOST                300        ; BALANCE ME
#define GENERIC_INFANTRY_BUILDTIME                20        ; BALANCE ME
#define GENERIC_INFANTRY_VISION_RANGE            300        ; BALANCE ME
#define GENERIC_INFANTRY_SHROUD_RANGE            300        ; BALANCE ME
#define GENERIC_INFANTRY_SHROUD_THREAT            1.0        ; BALANCE ME

//-----------------------------GAME DATA----------------------------------------
GameData
//    CheckMemoryLeaks = Yes

  ShellMapName = Maps\ShellMap1\ShellMap1.map
  MapName = Assault.map
  MoveHintName = SCMoveHint
  MoveHintZBias = 100.0
  ShowProps = Yes
  UseFPSLimit = Yes
  FramesPerSecondLimit = 30
  //Windowed = No; Please leave this commented during production
  //XResolution = 800
  //YResolution = 600
  MaxShellScreens = 8
  UseCloudMap = Yes
  AllowTreeFading = No
  UseLightMap = Yes
  AdjustCliffTextures = Yes
  StretchTerrain = No
  UseHalfHeightMap = No
  ShowObjectHealth = Yes
  HideGarrisonFlags = No
  Use3WayTerrainBlends = 1
  DrawEntireTerrain = No
  TerrainLOD = DISABLE ; should be handled by options screen.
  TerrainLODTargetTimeMS = 45
  RightMouseAlwaysScrolls = Yes
  UseCloudPlane = Yes
  UseShadowDecals = Yes
  UseShadowMapping = No
  ShowSelectedUnitMarker = Yes
  UseSimpleHordeDecals = No
  UseSimpleMergeDecals = Yes
  OpacityOfSimpleMergeDecals = 35%
  UseBehindBuildingMarker = Yes
  DefaultOcclusionDelay = 3000 ; in ms
  OccludedColorLuminanceScale = 0.5
  WaterPositionX = 0.0
  WaterPositionY = 0.0
  WaterPositionZ = 7.0
  WaterExtentX = 2000.0
  WaterExtentY = 2000.0
  WaterType = 0
  
  
  // Default Healing & Repair Buff Fx lists
  DefaultUnitHealingBuffFxList     = FX_DefaultUnitHealBuff
  DefaultStructureRepairBuffFxList = DefaultStructureRepairBuffFx
  
  // when a structure is reduced to rubble, set its z-height to this if nothing else is specified.
  DefaultStructureRubbleHeight = 8.0
  
  TimeAfterDamageUntilRepairAllowed = 0


  DownwindAngle = -0.785   ; Northeast! AKA "Away and to the right"
  DrawSkyBox = Yes

    //------------------------------------------------------------------------------------------------------------
    //These are the primary camera settings
    //****CHANGING ANY OF THESE VALUES WILL AFFECT CINEMATICS*****
    //------------------------------------------------------------------------------------------------------------
    DefaultCameraMinHeight            = 120.0;The minimum height of the camera relative to the terrain.
    DefaultCameraMaxHeight            = 300.0;The maximum height of the camera relative to the terrain.
    DefaultCameraPitchAngle            = 37.5;The pitch angle of the camera off top down view.
    DefaultCameraYawAngle            = 0.0;The direction the camera faces by default.
    DefaultCameraScrollSpeedScalar    = 1.0;How much faster or slower all scrolling is.
    //------------------------------------------------------------------------------------------------------------
    //****DO NOT CHANGE ABOVE VALUES *********
    //****PS: These values haven't been changed since original Generals anyways, this is an educational message.
    //------------------------------------------------------------------------------------------------------------
    //------------------------------------------------------------------------------------------------------------
        
    CameraLockHeightDelta = 150.0
    CameraTerrainSampleRadiusForHeight = 1.0;Controls how sensitive the camera height adjust is to nearby terrain. If you move the camera near a mountain, it'll raise up sooner with a large value.

    JoypadScrollScalar = 1.0
    CursorMagnetismMode = 2
  
;;OK TO UNCOMMENT;;  CameraEaseFactor = 0.2;for softening the tethered camera (while locked to an object or a drawable)
  
;These figures are compatible with the new 25-degree projection angle
;MaxCameraHeight = 750.0 ;230.0
;MinCameraHeight = 430.0
  
  UseCameraInReplay = No;Not working, don't use it yet.
  CameraAdjustSpeed = 0.3     ; between 0 and 1 - this is how fast the camera snaps to the desired height
  ScrollAmountCutoff = 50.0     ; arbitrary units - above this value, we don't update height while scrolling
  ScrollPitchMultiplier = 0.15; The amount the camera pitches when zooming in and out.
  EnforceMaxCameraHeight = No     ; Obey max camera height while scrolling?
  TerrainHeightAtEdgeOfMap = 100.0
  UnitDamagedThreshold = 0.66
  UnitReallyDamagedThreshold = 0.33
  GroundStiffness = 0.8
  StructureStiffness = 0.3
; acceleration due to gravity, in dist/sec^2
; note that our distance units are roughly one foot, so
; this corresponds to earth-normal gravity (32 ft/sec^2)
;Gravity = -32.0
; this "feels" better...
  Gravity = -64.0

  PartitionCellSize = 40.0
  TerrainResourceCellSize = 20.0

  ParticleScale = 1.0;
  
  AutoFireParticleSmallPrefix   = FireS
  AutoFireParticleSmallSystem   = FireBuildingSmall
  AutoFireParticleSmallMax      = 1
  AutoFireParticleMediumPrefix  = FireM
  AutoFireParticleMediumSystem  = FireBuildingMedium
  AutoFireParticleMediumMax     = 1
  AutoFireParticleLargePrefix   = FireL
  AutoFireParticleLargeSystem   = FireBuildingLarge
  AutoFireParticleLargeMax      = 1
  AutoSmokeParticleSmallPrefix  = SmokeS
  AutoSmokeParticleSmallSystem  = SmokeBuildingSmall
  AutoSmokeParticleSmallMax     = 1
  AutoSmokeParticleMediumPrefix = SmokeM
  AutoSmokeParticleMediumSystem = SmokeBuildingMedium
  AutoSmokeParticleMediumMax    = 1
  AutoSmokeParticleLargePrefix  = SmokeL
  AutoSmokeParticleLargeSystem  = SmokeBuildingLarge
  AutoSmokeParticleLargeMax     = 1
  AutoAflameParticlePrefix      = Aflame
  AutoAflameParticleSystem      = FireBuildingSmall
  AutoAflameParticleMax         = 1

  LevelGainAnimationName = LevelGainedAnimation
  LevelGainAnimationTime = 4.0
  LevelGainAnimationZRise = 15.0

;;;;;;;;;;;;;;;GetHealedAnimationName = GetHealedAnimation        <- Removed until effect is corrected.
   GetHealedAnimationTime = 4.0
  GetHealedAnimationZRise = 15.0

  GenericDamageFieldName = GenericDamageField; The ThingTemplate that DamageFieldNuggets will use
;  GenericDamageWarningName = GenericDamageWarning; The Thingtemplate that Damage and Projectile nuggets will use to herald the coming attack

  MaxTerrainTracks = 100 ; how many vehicles can generate tread marks on the terrain.
  TimeOfDay = AFTERNOON
  MakeTrackMarks = Yes
  ForceModelsToFollowTimeOfDay = Yes
  ForceModelsToFollowWeather = Yes

  TerrainLightingMorningAmbient = R:128 G:100 B:77
  TerrainLightingMorningDiffuse = R:230 G:180 B:153
  TerrainLightingMorningLightPos = X:-0.96 Y:0.05 Z:-0.29
  TerrainLightingEveningAmbient = R:64 G:59 B:51
  TerrainLightingEveningDiffuse = R:153 G:128 B:102
  TerrainLightingEveningLightPos = X:-1.0 Y:0.0 Z:-0.2
  TerrainLightingNightAmbient = R:26 G:26 B:39
  TerrainLightingNightDiffuse = R:51 G:51 B:77
  TerrainLightingNightLightPos = X:-1.0 Y:1.0 Z:-2.0

  TerrainObjectsLightingMorningAmbient = R:128 G:102 B:77
  TerrainObjectsLightingMorningDiffuse = R:230 G:179 B:153
  TerrainObjectsLightingMorningLightPos = X:-0.96 Y:0.05 Z:-0.29
  TerrainObjectsLightingEveningAmbient = R:64 G:59 B:51
  TerrainObjectsLightingEveningDiffuse = R:153 G:128 B:102
  TerrainObjectsLightingEveningLightPos = X:-1.0 Y:0.0 Z:-0.2
  TerrainObjectsLightingNightAmbient = R:26 G:26 B:39
  TerrainObjectsLightingNightDiffuse = R:51 G:51 B:77
  TerrainObjectsLightingNightLightPos = X:-1.0 Y:1.0 Z:-2.0

  TerrainLightingAfternoonAmbient = R:56 G:52 B:44
  TerrainLightingAfternoonDiffuse = R:255 G:255 B:255
  TerrainLightingAfternoonLightPos = X:-0.81 Y:0.38 Z:-0.45
  TerrainObjectsLightingAfternoonAmbient = R:56 G:52 B:44
  TerrainObjectsLightingAfternoonDiffuse = R:255 G:255 B:255
  TerrainObjectsLightingAfternoonLightPos = X:-0.81 Y:0.38 Z:-0.45

  TerrainLightingAfternoonAmbient2 = R:0 G:0 B:0
  TerrainLightingAfternoonDiffuse2 = R:60 G:60 B:120
  TerrainLightingAfternoonLightPos2 = X:0.79 Y:0.62 Z:-0.00
  TerrainObjectsLightingAfternoonAmbient2 = R:0 G:0 B:0
  TerrainObjectsLightingAfternoonDiffuse2 = R:60 G:60 B:80
  TerrainObjectsLightingAfternoonLightPos2 = X:0.79 Y:0.62 Z:-0.00

  TerrainLightingAfternoonAmbient3 = R:0 G:0 B:0
  TerrainLightingAfternoonDiffuse3 = R:30 G:30 B:20
  TerrainLightingAfternoonLightPos3 = X:0.81 Y:-0.48 Z:-0.34
  TerrainObjectsLightingAfternoonAmbient3 = R:0 G:0 B:0
  TerrainObjectsLightingAfternoonDiffuse3 = R:30 G:30 B:20
  TerrainObjectsLightingAfternoonLightPos3 = X:0.81 Y:-0.48 Z:-0.34

  AudioOn = Yes
  MusicOn = Yes
  SoundsOn = Yes
  SpeechOn = Yes
  VideoOn = Yes

  DebugAI = No
  DebugAIObstacles = No

  MaxRoadSegments = 4000
  MaxRoadVertex = 5000
  MaxRoadIndex = 10000

;;; CAMPAIGN BONUS CAPS
  GoodCommandPointLimit        = 300
  EvilCommandPointLimit        = 600
  PowerLimit            = 60
  ResourceMultiplierLimit    = 5.0
  
;;; INITIAL MAX RING LEVEL PLAYER CAN ACHIEVE
  InitialMaxRingLevel = 60;2
  
;;; Resource Bonus Percentage
  ResourceBonusMultiplier = 10.0                    ; 10% bonus per region conquered
      
;;; COMMAND POINTS FOR SOLO PLAY HUMAN (INCLUDING LIVING WORLD);;;
;
;    Command points are:  [starting value] [maximum value].
;

; ngavalas@ea.com
; For C&C3 these are only used for console to help performance and memory.
; Each unit is worth 100 CP no matter if it's a squad or a single unit.
; There is also no evil/good difference so they are now the same.

  GoodCommandPoints = 5000 5000
  EvilCommandPoints = 5000 5000

  GoodCommandPointsBonus = 5000     ; bonuses for every territory captures in living world
  EvilCommandPointsBonus = 5000

;;; COMMAND POINTS FOR SOLO PLAY AI;;;
  GoodCommandPointsAI = 5000 5000
  EvilCommandPointsAI = 5000 5000

;;; COMMAND POINTS FOR MULTIPLAY;;;
  GoodCommandPointsMP2 = 5000 5000    ; 2 players
  EvilCommandPointsMP2 = 5000 5000

  GoodCommandPointsMP3 = 5000 5000    ; 3 players
  EvilCommandPointsMP3 = 5000 5000

  GoodCommandPointsMP4 = 5000 5000    ; 4 players
  EvilCommandPointsMP4 = 5000 5000

  GoodCommandPointsMP5 = 5000 5000    ; 5 players
  EvilCommandPointsMP5 = 5000 5000

  GoodCommandPointsMP6 = 5000 5000    ; 6 players
  EvilCommandPointsMP6 = 5000 5000

  GoodCommandPointsMP7 = 5000 5000    ; 7 players
  EvilCommandPointsMP7 = 5000 5000

  GoodCommandPointsMP8 = 5000 5000    ; 8 players
  EvilCommandPointsMP8 = 5000 5000

;;; START MULTIPLAYER TUNING FACTORS;;;
;;;                                1player        2player        3player        4player        5player        6player        7player        8player

;; More is more. 1.0 is default. 1.5 is 50% more.
  MultiPlayMoneyMult =                        MP1:1.0        MP2:1.0        MP3:1.0        MP4:1.0        MP5:1.0        MP6:1.0        MP7:1.0        MP8:1.0
  MultiPlayUnitXPMult =                        MP1:1.0        MP2:1.0        MP3:1.0        MP4:1.0        MP5:1.0        MP6:1.0        MP7:1.0        MP8:1.0
  MultiPlayBuildingXPMult =                MP1:1.0        MP2:1.0        MP3:1.0        MP4:1.0        MP5:1.0        MP6:1.0        MP7:1.0        MP8:1.0
  
;; Less is faster. 1.0 is default speed. 0.5 is half the build time
  MultiPlayUnitSpeedMult =                MP1:1.0        MP2:1.0        MP3:1.0        MP4:1.0        MP5:1.0        MP6:1.0        MP7:1.0        MP8:1.0
  MultiPlayBuildingSpeedMult =        MP1:1.0        MP2:1.0        MP3:1.0        MP4:1.0        MP5:1.0        MP6:1.0        MP7:1.0        MP8:1.0
  
;;; END MULTIPLAYER TUNING FACTORS;;;
  
;; Handicap Multipliers for Build Speeds. All other handicap values can be found in AttributeModifier.ini under "HandicapPercent5"
;  Note: HandicapBuildSpeed5 currently corresponds to a -5% handicap setting in the UI. Likewise for all the other settings.
;  The UI currently denotes handicap settings as negatives. Internally I've left handicap settings as positive values.
;  For example full handicap mode is the -100% setting in the UI. This corresponds to HandicapBuildSpeed100. Just wanted to make that clear.
  HandicapBuildSpeed5 = 105%
  HandicapBuildSpeed10 = 110%
  HandicapBuildSpeed15 = 115%
  HandicapBuildSpeed20 = 120%
  HandicapBuildSpeed25 = 125%
  HandicapBuildSpeed30 = 130%
  HandicapBuildSpeed35 = 135%
  HandicapBuildSpeed40 = 140%
  HandicapBuildSpeed45 = 145%
  HandicapBuildSpeed50 = 150%
  HandicapBuildSpeed55 = 155%
  HandicapBuildSpeed60 = 160%
  HandicapBuildSpeed65 = 165%
  HandicapBuildSpeed70 = 170%
  HandicapBuildSpeed75 = 175%
  HandicapBuildSpeed80 = 180%
  HandicapBuildSpeed85 = 185%
  HandicapBuildSpeed90 = 190%
  HandicapBuildSpeed95 = 195%
  HandicapBuildSpeed100 = 200%

  //Harvesting Data
  //SupplyBoxesPerTree = 90
  ValuePerSupplyBox = 400        //Each "supply box" is 1 harvested chunk of tiberium.
  SupplyBoxesPerTibCrystal = 1    //This is how many boxes there are in each crystal before it goes away.
  
  GameSpeedFactor = 0.75        ; Multiplier for all times in a single player game
  MinimalGameSpeedFactor = 0.1    ; Minimal allowed value for game speed factor
  
  BuildSpeed = 1.0
  MinDistFromEdgeOfMapForBuild = 30.0 ; buildings may not be constructed this close to a map edge
  SupplyBuildBorder = 20.0 ; min dist you can put a supply center from a supply source

;Terrain height at structure footprint must be within this much to
;be considerd "flat" and therefore buildable
  AllowedHeightVariationForBuilding = 10.0

  MinLowEnergyProductionSpeed = 0.5
  MaxLowEnergyProductionSpeed = 0.8
  LowEnergyPenaltyModifier = 1.0
  MultipleFactory = 1.0
  RefundPercent = 50.0%
  StealthFriendlyOpacity = 50.0%

  CommandCenterHealRange = 400.0; command center heals your/ally stuff this close to the command center
  CommandCenterHealAmount = 0.01; command center heals close by stuff this amount per logic frame
  MaxLineBuildObjects = 50      ; line build style objects can be in a line no longer than this count of objects
  MaxTunnelCapacity = 3        ; How many can be in a player's tunnel network.  Limit 3 for UI currently

;PRUNED StandardMinefieldDensity    = 0.004   ; in mines per square foot
;PRUNED StandardMinefieldDistance   = 40     ; in feet. should generally be larger than typical tank shot range.


  HorizontalScrollSpeedFactor = 0.4    ; Factor applied to the maximum RMB scroll speed.  Larger allows faster scrolling.
  VerticalScrollSpeedFactor = 0.5      ; Split to account for aspect ratio induced speed limits.  Room to mouse drag.
  
  ScreenEdgeScrollSpeedFactor = 1.0    ; Factor applied to screen edge scrolling
  ScreenEdgeScrollRampTime = 0.25    ; Ramp up time for screen edge scrolling in seconds

  KeyboardScrollSpeedFactor = 1.0;   ; Factor applied to the maximum keyboard scroll speed.  Larger allows faster scrolling.
  MovementPenaltyDamageState = REALLYDAMAGED ; Point at which we slow movement

  MaxParticleCount = 2500       ; the maximum number of particles that can exist at one time (to 5000 for demo)
  MaxFieldParticleCount = 30    ; the number of field type particles rendered to the screen, beyond which this type will begin skipping
                                ; a field particle is one of Priority AREA_EFFECT and isGroundAligned = Yes
                                ; Typically these are puddles, toxic contamination, radiation, decontamination, etc.


; you cannot set this; it always has a value of 100%.
; HealthBonus_Regular = 100%
;HealthBonus_Veteran = 100%
;HealthBonus_Elite   = 100%
;HealthBonus_Heroic  = 100%

  HumanSoloPlayerHealthBonus_Easy    = 100%
  HumanSoloPlayerHealthBonus_Normal  = 100%    ; ie, unadjusted
  HumanSoloPlayerHealthBonus_Hard    = 100%
  
  AttributeModifierArmorMaxBonus = 75%    ; ARMOR type bonuses in AttributeModifier.ini are summed, so this is the cap for them to prevent invincibility

; Audio parameters
;  VolumeDistribution = Linear         ; for linear falloff
;  VolumeDistribution = MuLaw           ; for S-Curve falloff
;  VolumeMuValue = 6.0                 ; defines the steepness of the S, must be >=0, higher is steeper.

  GroupSelectMinSelectSize = 5
  GroupSelectVolumeBase = 0.5
  GroupSelectVolumeIncrement = 0.02
  MaxUnitSelectSounds = 8
  
  DamageRadiusMinimumForSplash = 0.0; Need to be more than this in order to hurt more than a single target.  Fixes "projectiles explode at radius 2" vs "our guys overlap a lot"

  SelectionFlashSaturationFactor = 0.5 ; zero leaves color unaffected, 4.0 is purely saturated
  SelectionFlashHouseColor       = No ; if 'No', selection flashes white

  CameraAudibleRadius = 201            ; defines the radius that we can hear when the camera is looking up.
  GroupMoveClickToGatherAreaFactor = 0.5; if you take all the selected units and calculate the smallest possible rectangle
                                       ; that contains them all, and click within that, all the selected units will break
                                       ; formation and gather at the point the user clicked (if the value is 1.0). If it's
                                       ; 0.0, units will always keep their formation. If it's <1.0, then the user must
                                       ; click a smaller area within the rectangle to order the gather.

; FormationMoveClusterRange = 200.0

  ShakeSubtleIntensity      = 0.5
  ShakeNormalIntensity      = 1.0
  ShakeStrongIntensity      = 2.5
  ShakeSevereIntensity      = 5.0
  ShakeCineExtremeIntensity = 7.5      ;Cinematic reserved -- don't use for game stuff because it can change.
  ShakeCineInsaneIntensity  = 10.0     ;Cinematic reserved -- don't use for game stuff because it can change.

  MaxShakeIntensity    = 10.0
  MaxShakeRange        = 150.0

  SellPercentage       = 50%; You get this percentage back of the cost to build
  
  BaseRegenHealthPercentPerSecond = 0.3%;You get this % of max health back per second from auto base regeneration
  BaseRegenDelay                  = 3000;in MS, delay in frames we must be damage free before we can auto heal from base regeneration
  



  SpecialPowerViewObject = SuperweaponPing; Name of the object created for superweapons to let you watch what happens
                                
; this is a list of bones that will always be exposed to Logic.
; please note that this is really here for quick backwards compatibility with old code,
; which didn't require declaring which bones you wanted to be able to use from logic...
; so PLEASE DO NOT ADD TO THIS LIST; if you need to expose new bones for a particular
; unit, please use the "ExtraPublicBone" INI keyword on a per-unit basis instead
; (see the airfields for an example).
  StandardPublicBone = FirePoint
  StandardPublicBone = Target_Left
  StandardPublicBone = Target_Right
  StandardPublicBone = ExitStart
  StandardPublicBone = ExitEnd
  StandardPublicBone = Muzzle
  StandardPublicBone = PARA_COG
  StandardPublicBone = PARA_ATTCH
  StandardPublicBone = PARA_MAN
  StandardPublicBone = ExitStart
  StandardPublicBone = DockStart
  StandardPublicBone = DockAction
  StandardPublicBone = DockEnd
  StandardPublicBone = DockWaiting
  StandardPublicBone = WeaponA
  StandardPublicBone = Smoke
  StandardPublicBone = Fire
  StandardPublicBone = WaterSpray
  StandardPublicBone = Spray
  StandardPublicBone = WaterSprayBig
  StandardPublicBone = Steam
  StandardPublicBone = Propeller
  StandardPublicBone = SpawnPoint
  StandardPublicBone = FireS
  StandardPublicBone = FireM
  StandardPublicBone = FireL
  StandardPublicBone = SmokeS
  StandardPublicBone = SmokeM
  StandardPublicBone = SmokeL
  StandardPublicBone = Aflame
  StandardPublicBone = SIEGETOWER

  DefaultStartingCash = 1500;The amount of cash the player starts with by default.

  UnlookPersistDuration     = 30000; How long after you stop looking until the fog grows back, this appears to be in miliseconds.

  ShroudColor = R:255 G:255 B:255
  ClearAlpha = 255
  FogAlpha = 127
  ShroudAlpha = 0; 0 is opaque, 255 is clear.  Unsigned Byte
  TaintOn = Yes
  TaintColor = R:120 G:90 B:80
  TaintAlpha = 0;  

; Network timing settings.  Don't mess with these unless you know what you're doing!
; If you are tempted to mess with these, please let me know.
; This does not imply that I know what I'm doing.
  NetworkFPSHistoryLength = 30     ; The number of fps history entries.
  NetworkLatencyHistoryLength = 200; The number of ping history entries.
  NetworkRunAheadMetricsTime = 5000; The number of miliseconds between run ahead metrics things
  NetworkCushionHistoryLength = 10 ; The number of cushion values to keep.
  NetworkRunAheadSlack = 30        ; The amount of slack in the run ahead value.  This is the percentage of the calculated run ahead that is added.
  NetworkKeepAliveDelay = 20       ; The number of seconds between when the connections to each player send a keep-alive packet.
  NetworkDisconnectTime = 15000     ; The number of milliseconds between when the game gets stuck on a frame for a network stall and when the disconnect dialog comes up.
  NetworkPlayerTimeoutTime = 60000 ; The number of milliseconds between when a player's last keep alive command was recieved and when they are considered disconnected from the game.
  NetworkDisconnectScreenNotifyTime = 15000; The number of milliseconds between when the disconnect screen comes up and when the disconnect notification is sent to the other players.

  KeyboardCameraRotateSpeed = 0.1  ; How fast the camera rotates when rotated via keyboard controls.

  DefaultVoiceAttackChargeTimeout = 10000 ; Default for milliseconds after using VoiceAttackCharge before VoiceAttackCharge will used again

  DefaultMaxDistanceForEngaged = 33; Default for Object's MaxDistanceForEngaged
  DefaultEngagedStateTimeout = 1000; Default for Object's EngagedStateTimeout

  AnimationSharingCap              = 100   ; share at most 100 animations. This is a target only. It can go above it if it has no choice.
  AnimationSharingFrameTolerance   = 5     ; 5 frames of animation difference to accept for sharing
  AnimationSharingSpeedTolerance   = 0.1f  ; the speed differential of animation to accept for sharing
  AnimationSharingWorryThreshold   = 0.25f ; threshold before we start to take some measures to share more animations
  AnimationSharingDrasticThreshold = 0.50f ; threshold before we start to take drastic measures to share more animations

; progress movie of rotating ring
  ProgressMovieOffset               = X:-118 Y:-128
  ProgressMovieSize                 = X:64 Y:64
  
  UseHelpTextSystem = Yes
  EnableHouseColor    = Yes
  
  TreeFadeObjectFilter = ANY +INFANTRY +CAVALRY -HARVESTER -IGNORED_IN_GUI
  CamouflageDetectorObjectFilter = ANY +INFANTRY +CAVALRY +HERO +MONSTER +MACHINE +VEHICLE  
  
  ReinvisibityDelay = 2000
  InvisibilityOpacityMin = 0.4
  InvisibilityOpacityMax = 3
  InvisibilityOpacityCycleFrames = 30

  BuilderFadeOutTime = 1000    //    msec
  BuilderFadeInTime = 1000    //    msec
  BuilderMoveFromNewStructureDistance = 20
  MaxCastleRadius            = 130    //This needs to be set to the largest castle we have.

; Note: dead, destroyed, UNATTACKABLE and IGNORE_FOR_VICTORY are always ignored.
  VictoryConditionStructureObjectFilter    = NONE +STRUCTURE -FS_BASE_DEFENSE -IGNORE_FOR_VICTORY -UNATTACKABLE
  
                                                ; NOT_AUTOACQUIRABLE here for the non selectable workers.
  VictoryConditionUnitObjectFilter        = ANY -DOZER -NOT_AUTOACQUIRABLE +AlienMCVUnpacking +GDIMCV +NODMCV +AlienMCV -IGNORE_FOR_VICTORY -UNATTACKABLE
Avenger
Неплохо, GameData.ini просто огромен. Кстати, думаю это лучше спрятать в оффтоп, что бы места меньше занимало. 64.gif

У меня он AIData.ini такой:
показать офф-топ
;//////////////////////////////////////////////////////////////////////////////
;FILE: AIData.ini (SYSTEM) ////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////////////////////////

AIData

UseLowLODTrees = Yes
LowLodTreeScale = 1.2
LowLodTreeName = TreeF03
LowLodTreeNameNoGrab = GenericHarvestOnlyOptimizedTreeA
LowLodTreeNameNoHarvest = PTStump02A

StructureSeconds = 0.0 ; Ai tries to build a new structure every N seconds.
TeamSeconds = 10 ;Ai tries to build a new team every N seconds.
Wealthy = 7000 ; Number of resources for the AI to consider itself wealthy
Poor = 2000 ; Number of resources for the AI to consider itself poor
StructuresWealthyRate = 2.0 ; (2=twice as fast) Rate modifier for structure building when wealthy.
StructuresPoorRate = 0.6 ; (0.5=half as fast) Rate modifier for structures when poor.
TeamsWealthyRate = 2.0 ; (2=twice as fast) Rate modifier for teams building when wealthy.
TeamsPoorRate = 0.6 ; (0.5=half as fast) Rate modifier for teams when poor.
TeamResourcesToStart = 0.1 ; (1.0=100%) Amount of resources required to start building a team.
GuardInnerModifierAI = 1.1 ;The radius modifier to vision which a guarding (AI Controlled) unit will agressively attack
GuardOuterModifierAI = 1.333 ;The radius modifier to vision which a guarding (AI Controlled) unit will chase after
GuardInnerModifierHuman = 1.8 ;1.1 ;The radius modifier to vision which a guarding (Human Controlled) unit will agressively attack
GuardOuterModifierHuman = 2.2 ;1.333 ;The radius modifier to vision which a guarding (Human Controlled) unit will chase after
GuardChaseUnitsDuration = 15000 ;The number of msec for which a guarding unit will chase attackers before giving up
GuardEnemyScanRate = 500 ; when actively guarding, how often to scan for enemies (msec)
GuardEnemyReturnScanRate = 1000 ; when returning to "active" guarding (from pursuing someone), how often to scan for enemies (msec)
AlertRangeModifier = 1.1 ;The adjustment applied when a unit is alert and doing various scans for enemies (AI units only)
AggressiveRangeModifier = 1.5 ;The adjustment applied when a unit is aggressive and doing various scans for enemies (AI units only)
AttackPriorityDistanceModifier = 80.0 ;The distance required to reduce attack priority by 1.
MaxRecruitRadius = 400.0 ;The maximum distance a unit will be from a unit that recruits it.
ForceIdleMSEC = 67 ;The number of milisec a unit must be idle before looking for an enemy, 2 frames.
ForceSkirmishAI = No ; Use skirmish instead of solo ai. For development till the skirmish ui is finished.
RotateSkirmishBases = Yes ; If yes, rotate base layout so same side of base faces center of map.
AttackUsesLineOfSight = Yes ; If yes, attack for ALL UNITS (player and ai) uses line of sight.

EnableRepulsors = Yes ; If yes, KINDOF_CAN_BE_REPULSED will run from enemies & repulsors.
RepulsedDistance = 120.0 ; How far beyond vision range a repulsed civilian will run before stopping.
; so if vision range is 120.0, he will move to a point at least 270.0 away from the enemy, and then stop running.

WallHeight = 35 ; Height of the "Wall", made of KIND WALK_ON_TOP pieces.

AttackIgnoreInsignificantBuildings = Yes ; If yes, units will ignore enemy-owned buildings that are not faction buildings

; SkirmishGroupFudgeDistance is the distance that is multiplied by the number of units in a group to
; determine if they are close enough to the waypoint to consider themselves AT the waypoint. This is
; only used for "Follow Waypoint Path as a Team."
SkirmishGroupFudgeDistance = 4.0

; Note that these group pathfind parameters are inter-related, and modifying them may produce really
; ugly results & require code changes.
InfantryPathfindDiameter = 6 ; Number of pathfind cells wide group path is for infantry.
VehiclePathfindDiameter = 6 ; Number of pathfind cells wide group path is for vehicles.

SupplyCenterSafeRadius = 240.0 ; Radius to scan for enemies to determine if a supply center is safe.
RebuildDelayTimeSeconds = 30 ; Delay this many seconds when a base building is destroyed or captured before attempting rebuild.

AIDozerBoredRadiusModifier = 1.6 ; Multiplier to dozer scan radius for repair & mine clearing. 2.0 means ai uses twice the radius as human dozers.
AICrushesInfantry = Yes ; If yes, ai will attempt to crush infantry with vehicles.

MeleeApproachDist = 48.0 ; Melee units will move towards targets if > this distance.
MeleeApproachTolerance = 20.0 ;

WadeWaterDepth = 5.0 ; How deep we can wade into water or cross fords.
DeepWaterDepth = 6.0 ; How deep water needs to be for ships & subs (non-shallow-water craft).


; Group (formation) pathfinding parameters.
MinDistanceForGroup = 200.0 ; Have to be moving at least this far for group (formation) movement.
FormationEnemyDistance = 500.0 ; Don't use formation movement if enemies are closer than this to the center of the group.

FormationColumnWidth = 60.0 ; Space between columns.
FormationRowDepth = 55.0 ; Space between rows.
FormationSquadSpacing = 30.0 ; Extra space between squads.
FormationColumns = 2 ; form up two hordes abreast, or 4 smaller units. (valid values are 2 or 3.)
UseFormations = Yes ; Move in formation. Can be turned off in a map.ini if necessary.
WaitForOthers = No ; When moving in formation wait (or not) for others at first waypoint. Default=No.

NarrowPassageScale = 0.4;

HordesWaitForHordes = Yes ; If yes, hordes will stop and wait for other hordes to pass. If no, they just run through each other. 22 Sept. 2004
AttackMoveUsesFormations = Yes ; If yes, player attack moves will move in formation (if UseFormations == Yes)

; Retaliation parameters.
MaxRetaliateDistance = 410.0 ; If the attacker is more than this far away, won't chase. Keeps from chasing artillery.
RetaliateFriendsRadius = 120.0 ; Retaliator gathers allies within this distance & attacks.

ChaseFromBehindLimit = 50.0 ; How far from behind units can do melee attacks when chasing other units. 01Oct2004

ForceHordesToLowLOD = Yes ;

AllowForestFires = No ;

CastleSiegeStandBackDistance = 500.0 ; How far for units to stand back from if they cannot enter the castle



;//////////////////////////////////////////////////////////
;
; Build Phase Priority Modifiers
; These numbers are the amount by which the priority of a structure is increased per second
; for each thing that needs said structure to exist
;
;//////////////////////////////////////////////////////////

BuildPhase1_PerSecondPriorityModifier = 50
BuildPhase2_PerSecondPriorityModifier = 30
BuildPhase3_PerSecondPriorityModifier = 20
BuildPhaseN_PerSecondPriorityModifier = 10


;///////////////////////////////////////////
;//
;// The entire AttackPriority system is no longer in use
;// target priorities are now defined much more generically in SkirmishAIData.ini
;//
;///////////////////////////////////////////

AttackPriority DefaultAttackPriority ; define THIS IS OUTDATED, DO NOT USE THIS
Default = 35
End
BLACKOUT217
Цитата(SteXer @ 11.2.2010, 2:11) *

Чтобы подрубить этот биг файл к игре, по сути нужно сделать декомпл всей игры 14.gif

Зачем всей? Суть в том, что тебе надо задействовать пару файлов. Извлекаешь их из игры, изменяешь, запихиваешь в новый БИГ-файл и подрубаешь...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.
Конвертация из ExBB - TSB Scripts 2008