Jump to content


UsernameUsername

Member Since 12 May 2016
Offline Last Active Sep 28 2017 12:48 AM

Posts I've Made

In Topic: Contra Feedback

24 August 2017 - 04:26 PM

Scorpions damage bug:

I assume that Scorpion Tank was using a "hold fire" weapon that was a straight copy of the main weapon used for "fire at will" but with a "PreAttackDelay = -1" line added to make it not attack ?

Eventually it'd be possible that a not existing "LockWeaponCreate" module could cause the Scorpion to use it's PRIMARY and SECONDARY at the same time due to not being locked to a single weapon as it should be. That'd be the same issue as when USA Ranger infantry are created from a destroyed USA structure: They're using their Assault Rifle and Flashbang, whatever is ready instead of being limited to either one as it's the case with Barracks-produced rangers.

"PreAttackType" could also be missing as entry and cause that, eventually. It's possible entries are "PER_CLIP, PER_SHOT, PER_ATTACK"; should be set to "PER_CLIP" for the Scorpion Tank, eventually making the unit ignore the "PreAttackDelay = -1" entry under circumstances and use a 2nd, similar attack.

 

I'll test stuff using Contra002Beta2 ini files.


In Topic: Contra Feedback

23 August 2017 - 10:33 PM

This shows how it looks and works in the game (ignore the Gun Buggy, that's not part of any what I posted):

 

Note:

-CommandButtons moving +1 slot to the right per experience level is not part of the posted code, it merely shows that each unit uses it's own CommandSet on experience level 0/1/2/3

-changing or re-applying a RIDER by pressing either the "hold fire" or "fire at will" button always resets the unit's experience back to 0/3; thus I had to spawn levelup crates inside the units, re-applying their experience level whenever that was the case

 -> the issue remaining with that is that partial experience gained by the unit towards it's next level is being lost upon toggling the firemode; unfixable while using this method

-another issue is that each RIDER demands another CommandSet for spawning the matching number of levelup crates; that makes toggling firemodes for large groups of units with different experience levels clunky but works without issues on units sharing the same experience level

-the "StealthUpdate" module I used in the video was still flawed. Fixed module:

 

  Behavior = StealthUpdate ModuleTag_StealthQuadCannon
    StealthDelay = 2000 ; msec
    UseRiderStealth = No
    InnateStealth = No
    StealthForbiddenConditions = FIRING_PRIMARY FIRING_SECONDARY
    OrderIdleEnemiesToAttackMeUponReveal = Yes
  End

 

Another thing I found out during testing:
WeaponSet "Conditions" are indeed treated as OR conditions, meaning any single can be true to make use of that WeaponSet. However: the WeaponSet offering more exact matches in it's Conditions is more likely to be chosen than a WeaponSet with less exact matches either due to less conditions being listed or due to more conditions being listed but less being met.

Conditions = HERO PLAYER_UPGRADE CRATEUPGRADE_ONE
and
Conditions = HERO CRATEUPGRADE_ONE

with a GLA unit of 3/3 experience level (hero) and a single crate turret upgrade the WeaponSet using "Conditions = HERO CRATEUPGRADE_ONE" is prefered as more exact match.
If I just have the same unit, lacking a crate turret upgrade and also lacking the proper experience rank but then just and only research it's upgrade it'll use the "Conditions = HERO PLAYER_UPGRADE CRATEUPGRADE_ONE" WeaponSet because no other WeaponSets exist that have "PLAYER_UPGRADE" among their Conditions even though the unit doesn't match the other requirements.

This means I can define WeaponSet Conditions with missing Conditions if I intend so to save me from adding a million WeaponSets under all Conditions and they'll still be used properly if I make use of the other Conditions properly.

That also means if I forget to add proper conditions on the way, like for this example-GLA-unit with only 2 WeaponSets:

WeaponSet
Conditions = None
Weapon = PRIMARY BoringWeapon
End

WeaponSet
Conditions = HERO CRATEUPGRADE_TWO PLAYER_UPGRADE
Weapon = PRIMARY UltimateWeapon
End

...then the unit would receive the "UltimateWeapon" upon either reaching 3/3 unit experience or crate-upgrading it's turret twice or the player researches the unit's upgrade because other WeaponSets taking care of individual condition states are missing, like:

Conditions = CRATEUPGRADE_ONE
Conditions = CRATEUPGRADE_TWO
Conditions = PLAYER_UPGRADE
Conditions = VETERAN
Conditions = ELITE
Conditions = HERO

Conditions = CRATEUPGRADE_ONE PLAYER_UPGRADE
Conditions = CRATEUPGRADE_ONE PLAYER_UPGRADE
Conditions = CRATEUPGRADE_ONE PLAYER_UPGRADE

Conditions = CRATEUPGRADE_TWO PLAYER_UPGRADE
Conditions = CRATEUPGRADE_TWO PLAYER_UPGRADE
Conditions = CRATEUPGRADE_TWO PLAYER_UPGRADE

Conditions = VETERAN CRATEUPGRADE_ONE
Conditions = ELITE CRATEUPGRADE_ONE
Conditions = HERO CRATEUPGRADE_ONE

Conditions = VETERAN CRATEUPGRADE_TWO
Conditions = ELITE CRATEUPGRADE_TWO
Conditions = HERO CRATEUPGRADE_TWO

Conditions = VETERAN PLAYER_UPGRADE
Conditions = ELITE PLAYER_UPGRADE
Conditions = HERO PLAYER_UPGRADE

Conditions = VETERAN CRATEUPGRADE_ONE PLAYER_UPGRADE
Conditions = ELITE CRATEUPGRADE_ONE PLAYER_UPGRADE
Conditions = HERO CRATEUPGRADE_ONE PLAYER_UPGRADE

Conditions = VETERAN CRATEUPGRADE_TWO PLAYER_UPGRADE
Conditions = ELITE CRATEUPGRADE_TWO PLAYER_UPGRADE
Conditions = HERO CRATEUPGRADE_TWO PLAYER_UPGRADE

...to cover all possible WeaponSet upgrade stages. Thus the unit uses the most matching WeaponSet instead. I haven't figured out yet what's the priority, like if there's only 1 WeaponSet adressing the proper experience rank, another WeaponSet solely adressnig the proper PLAYER_UPGRADE and another WeaponSet solely adressing the proper CRATE_UPGRADE_[ONE / TWO].


In Topic: Contra Feedback

23 August 2017 - 08:31 PM

Sooo... to get a RIDER logic using unit that upgrades it's WeaponSet by using a fake special power to spawn an OCL depending on it's experience level and being able to keep it's experience level while not inheriting the rider's stealth we need...

-3 experience-based CommandSets along with the initial CommandSet the unit uses to be capable of reaching access to other CommandSets than the RIDER or default ones ("CommandSetUpgrade" module entries to the unit)

-8 OCLs that apply the correct RIDER logic and spawn the additional experience crates to re-apply the unit experience that is lost upon RIDER change (8x ObjectCreationList.ini entries)

-8 fake special powers that do nothing at all but must each have a unique name (8x SpecialPower.ini entries)

-4 CommandSets in total (default, veteran, elite, hero) with the fake special powers for "hold fire" / "fire at will" among their CommandButtons (4x CommandSet.ini entries)

-a new type of crate that only grants any unit it touches +1 experience level and nothing else (Crate.ini entry)

-to update the fake unit construction-based CommandSetUpgrade so that it uses the new data (haven't done that yet...)

-8 entries in System.ini for the RIDERs

-a pre-installed StealthUpdate module in the unit that is set to "UseRiderStealth = No" and "InnateStealth = No" so that the GPS Scrambler can work to apply stealth and the RIDER doesn't apply stealth or make the GPS Scrambler not work on the unit

-4 WeaponSets: 1x "hold fire", then "fire at will" (no crate upgrade); "fire at will" (one crate upgrade), "fire at will" (two crate upgrades)

-a "RiderChangeContain" module, with "InitialPayload = OCL_QuadCannonFireAtWillObjectRegular 1" (name I used for the RIDER2 state applying object [RIDER1 is "hold fire" mode] once the unit is built, enabling "fire at will" mode by default) with 8 riders: 4 experience levels (regular / veteran / elite / hero) with each 2 entries (hold fire WeaponSet, fire at will WeaponSet per experience level; necessary only because toggling a RIDER using an OCL removes all experience and UpgradeOCL doesn't support upgrades or unit experience but only Science.ini entries)

-8 new CommandButton.ini copy & paste variants for the 8 fake special powers, displaying them as "hold fire" / "fire at will" for each experience level

 

For the Stealth General's Quad Cannon unit (StealthGeneral.ini) -> "Object Slth_GLAVehicleQuadCannon":

 

-the unit's CommandSet needs to be changed to: "CmdSet_QuadCannon_Regular"

 

  WeaponSet
    Conditions = WEAPON_RIDER1 WEAPON_RIDER3 WEAPON_RIDER5 WEAPON_RIDER7
    Weapon = PRIMARY DummyWeapon
    Weapon = SECONDARY DummyWeapon
  End

  WeaponSet
    Conditions = WEAPON_RIDER2 WEAPON_RIDER4 WEAPON_RIDER6 WEAPON_RIDER8 ;any of these RIDERS can uses that WeaponSet
    Weapon = PRIMARY QuadCannonGun
    Weapon = SECONDARY QuadCannonGunAir
  End
 
  WeaponSet
    Conditions = WEAPON_RIDER2 WEAPON_RIDER4 WEAPON_RIDER6 WEAPON_RIDER8 CRATEUPGRADE_ONE ;any of these RIDERS can uses that WeaponSet if the turret was upgraded with a salvage crate once
    Weapon = PRIMARY QuadCannonGunUpgradeOne
    Weapon = SECONDARY QuadCannonGunUpgradeOneAir
  End
 
  WeaponSet
    Conditions = WEAPON_RIDER2 WEAPON_RIDER4 WEAPON_RIDER6 WEAPON_RIDER8 CRATEUPGRADE_TWO ;any of these RIDERS can uses that WeaponSet if the turret was upgraded with a salvage crate twice
    Weapon = PRIMARY QuadCannonGunUpgradeTwo
    Weapon = SECONDARY QuadCannonGunUpgradeTwoAir
  End
 

;OCL = ObjectCreationList.ini entries, the first named OCL is the unit put inside this unit to apply it's RIDER1 to RIDER8 state with the according CommandSet per RIDER
  Behavior = RiderChangeContain ModuleTag_88
    Rider1 = OCL_QuadCannonHoldFireObjectRegular RIDER1 WEAPON_RIDER1 STATUS_RIDER1 CmdSet_QuadCannon_Regular SET_NORMAL
    Rider2 = OCL_QuadCannonFireAtWillObjectRegular RIDER2 WEAPON_RIDER2 STATUS_RIDER2 CmdSet_QuadCannon_Regular SET_NORMAL
    Rider3 = OCL_QuadCannonHoldFireObjectVeteran RIDER3 WEAPON_RIDER3 STATUS_RIDER3 CmdSet_QuadCannon_Veteran SET_NORMAL
    Rider4 = OCL_QuadCannonFireAtWillObjectVeteran RIDER4 WEAPON_RIDER4 STATUS_RIDER4 CmdSet_QuadCannon_Veteran SET_NORMAL
    Rider5 = OCL_QuadCannonHoldFireObjectElite RIDER5 WEAPON_RIDER5 STATUS_RIDER5 CmdSet_QuadCannon_Elite SET_NORMAL
    Rider6 = OCL_QuadCannonFireAtWillObjectElite RIDER6 WEAPON_RIDER6 STATUS_RIDER6 CmdSet_QuadCannon_Elite SET_NORMAL
    Rider7 = OCL_QuadCannonHoldFireObjectHero RIDER7 WEAPON_RIDER7 STATUS_RIDER7 CmdSet_QuadCannon_Hero SET_NORMAL
    Rider8 = OCL_QuadCannonFireAtWillObjectHero RIDER8 WEAPON_RIDER8 STATUS_RIDER8 CmdSet_QuadCannon_Hero SET_NORMAL
    Slots                = 1
    InitialPayload       = OCL_QuadCannonFireAtWillObjectRegular 1 ;this RIDER is in this unit initially and allows it to use the "fire at will" WeaponSet matching unit experience level 0
    ScatterNearbyOnExit  = No
    HealthRegen%PerSec   = 0
    DamagePercentToUnits = 100%
    BurnedDeathToUnits   = No
    AllowInsideKindOf    = PORTABLE_STRUCTURE
    ExitDelay         = 1
    NumberOfExitPaths = 1
    GoAggressiveOnExit = No
    DoorOpenTime = 0
  End

 

  Behavior           = OCLSpecialPower ModuleTag_SpecialPower01
    SpecialPowerTemplate = SP_QuadCannonFireAtWillRegular ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonFireAtWillRegular ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower02
    SpecialPowerTemplate = SP_QuadCannonFireAtWillVeteran ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonFireAtWillVeteran ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower03
    SpecialPowerTemplate = SP_QuadCannonFireAtWillElite ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonFireAtWillElite ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower04
    SpecialPowerTemplate = SP_QuadCannonFireAtWillHero ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonFireAtWillHero ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower05
    SpecialPowerTemplate = SP_QuadCannonHoldFireRegular ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonHoldFireRegular ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower06
    SpecialPowerTemplate = SP_QuadCannonHoldFireVeteran ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonHoldFireVeteran ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower07
    SpecialPowerTemplate = SP_QuadCannonHoldFireElite ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonHoldFireElite ;ObjectCreationList.ini entry (look it up there)
  End
 
  Behavior           = OCLSpecialPower ModuleTag_SpecialPower08
    SpecialPowerTemplate = SP_QuadCannonHoldFireHero ;fake special power that does nothing but must be unique to create the correct OCL entry unit for this unit
    OCL                  = OCL_QuadCannonHoldFireHero ;ObjectCreationList.ini entry (look it up there)
  End
 

;this only triggers ONCE in the unit's lifetime, even if changing RIDERS resets the unit's experience to 0/3 this won't ever trigger again

;used to escape the default CommandSet and the RIDER's CommandSet initially to be able to spawn experience level increasing crates that level up the unit after WeaponSet swap so that the unit re-gains it's experience
  Behavior = CommandSetUpgrade ModuleTag_QuadCannon_CmdSet_Veteran
    CommandSet = CmdSet_QuadCannon_Veteran
    TriggeredBy = Upgrade_Veterancy_VETERAN
  End

 

;this only triggers ONCE in the unit's lifetime, even if changing RIDERS resets the unit's experience to 0/3 this won't ever trigger again

;used to escape the default CommandSet and the RIDER's CommandSet initially to be able to spawn experience level increasing crates that level up the unit after WeaponSet swap so that the unit re-gains it's experience
  Behavior = CommandSetUpgrade ModuleTag_QuadCannon_CmdSet_Elite
    CommandSet = CmdSet_QuadCannon_Elite
    TriggeredBy = Upgrade_Veterancy_ELITE
  End
 

;this only triggers ONCE in the unit's lifetime, even if changing RIDERS resets the unit's experience to 0/3 this won't ever trigger again

;used to escape the default CommandSet and the RIDER's CommandSet initially to be able to spawn experience level increasing crates that level up the unit after WeaponSet swap so that the unit re-gains it's experience
  Behavior = CommandSetUpgrade ModuleTag_QuadCannon_CmdSet_Hero
    CommandSet = CmdSet_QuadCannon_Hero
    TriggeredBy = Upgrade_Veterancy_HEROIC
  End

 

;this makes the unit interact with stealth without the RIDER conflicting (by either applying it's stealth or not allowing stealth to be applied) and makes the unit visible like other regular units until receiving stealth by a GPS Scrambler or something

  Behavior = StealthUpdate ModuleTag_StealthQuadCannon
    StealthDelay = 2000 ; msec
    UseRiderStealth = No
    InnateStealth = No
    StealthForbiddenConditions = FIRING_PRIMARY FIRING_SECONDARY
    OrderIdleEnemiesToAttackMeUponReveal = Yes
  End

 

--------------------------------------------------------------------

 

SpecialPower.ini entries for fake special powers:

 

SpecialPower SP_QuadCannonFireAtWillRegular
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

SpecialPower SP_QuadCannonFireAtWillVeteran
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

SpecialPower SP_QuadCannonFireAtWillElite
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

SpecialPower SP_QuadCannonFireAtWillHero
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

;---

SpecialPower SP_QuadCannonHoldFireRegular
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

SpecialPower SP_QuadCannonHoldFireVeteran
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

SpecialPower SP_QuadCannonHoldFireElite
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

SpecialPower SP_QuadCannonHoldFireHero
  Enum              = SPECIAL_DETONATE_DIRTY_NUKE
  ReloadTime        = 0
  PublicTimer       = No
  ShortcutPower     = No
End

 

--------------------------------------------------------------------

 

CommandSet.ini entries for new CommandSets:

 

CommandSet CmdSet_QuadCannon_Regular
  1 = Command_QuadCannonFireAtWillRegular
  3 = Command_QuadCannonHoldFireRegular
  9 = Slth_Command_ConstructGLAVehicleFake
  15 = Command_AttackMove
  13 = Command_GuardFlyingUnitsOnly
  17 = Command_Guard
  18 = Command_Stop
End

CommandSet CmdSet_QuadCannon_Veteran
  1 = Command_QuadCannonFireAtWillVeteran
  3 = Command_QuadCannonHoldFireVeteran
  9 = Slth_Command_ConstructGLAVehicleFake
  15 = Command_AttackMove
  13 = Command_GuardFlyingUnitsOnly
  17 = Command_Guard
  18 = Command_Stop
End

CommandSet CmdSet_QuadCannon_Elite
  1 = Command_QuadCannonFireAtWillElite
  3 = Command_QuadCannonHoldFireElite
  9 = Slth_Command_ConstructGLAVehicleFake
  15 = Command_AttackMove
  13 = Command_GuardFlyingUnitsOnly
  17 = Command_Guard
  18 = Command_Stop
End

CommandSet CmdSet_QuadCannon_Hero
  1 = Command_QuadCannonFireAtWillHero
  3 = Command_QuadCannonHoldFireHero
  9 = Slth_Command_ConstructGLAVehicleFake
  15 = Command_AttackMove
  13 = Command_GuardFlyingUnitsOnly
  17 = Command_Guard
  18 = Command_Stop
End

 

--------------------------------------------------------------------

 

CommandButton.ini entries for new CommandButtons:

 

CommandButton Command_QuadCannonFireAtWillRegular
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonFireAtWillRegular
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSFireAtWill
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:FireAtWill
  DescriptLabel     = CONTROLBAR:FireAtWillDescription
End

CommandButton Command_QuadCannonFireAtWillVeteran
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonFireAtWillVeteran
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSFireAtWill
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:FireAtWill
  DescriptLabel     = CONTROLBAR:FireAtWillDescription
End

CommandButton Command_QuadCannonFireAtWillElite
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonFireAtWillElite
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSFireAtWill
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:FireAtWill
  DescriptLabel     = CONTROLBAR:FireAtWillDescription
End

CommandButton Command_QuadCannonFireAtWillHero
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonFireAtWillHero
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSFireAtWill
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:FireAtWill
  DescriptLabel     = CONTROLBAR:FireAtWillDescription
End

;---

CommandButton Command_QuadCannonHoldFireRegular
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonHoldFireRegular
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSHoldFire
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:HoldFire
  DescriptLabel     = CONTROLBAR:HoldFireDescription
End

CommandButton Command_QuadCannonHoldFireVeteran
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonHoldFireVeteran
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSHoldFire
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:HoldFire
  DescriptLabel     = CONTROLBAR:HoldFireDescription
End

CommandButton Command_QuadCannonHoldFireElite
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonHoldFireElite
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSHoldFire
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:HoldFire
  DescriptLabel     = CONTROLBAR:HoldFireDescription
End

CommandButton Command_QuadCannonHoldFireHero
  Command       = SPECIAL_POWER
  SpecialPower  = SP_QuadCannonHoldFireHero
  Options       = OK_FOR_MULTI_SELECT NOT_QUEUEABLE
  ButtonImage   = SSHoldFire
  ButtonBorderType = ACTION
  TextLabel     = CONTROLBAR:HoldFire
  DescriptLabel     = CONTROLBAR:HoldFireDescription
End

 

--------------------------------------------------------------------

 

ObjectCreationList.ini entries for RIDER objects and experience bonus crates:

 

ObjectCreationList OCL_QuadCannonFireAtWillRegular
  CreateObject
    ObjectNames = OCL_QuadCannonFireAtWillObjectRegular
    Count = 1
    ContainInsideSourceObject = Yes
  End
End

ObjectCreationList OCL_QuadCannonFireAtWillVeteran
  CreateObject
    ObjectNames = OCL_QuadCannonFireAtWillObjectVeteran
    Count = 1
    ContainInsideSourceObject = Yes
  End
  CreateObject
    ObjectNames = LevelUpTestCrate
    Count = 1
    DiesOnBadLand = Yes
  End
End

ObjectCreationList OCL_QuadCannonFireAtWillElite
  CreateObject
    ObjectNames = OCL_QuadCannonFireAtWillObjectElite
    Count = 1
    ContainInsideSourceObject = Yes
  End
  CreateObject
    ObjectNames = LevelUpTestCrate
    Count = 2
    DiesOnBadLand = Yes
  End
End

ObjectCreationList OCL_QuadCannonFireAtWillHero
  CreateObject
    ObjectNames = OCL_QuadCannonFireAtWillObjectHero
    Count = 1
    ContainInsideSourceObject = Yes
  End
  CreateObject
    ObjectNames = LevelUpTestCrate
    Count = 3
    DiesOnBadLand = Yes
  End
End

;----

ObjectCreationList OCL_QuadCannonHoldFireRegular
  CreateObject
    ObjectNames = OCL_QuadCannonHoldFireObjectRegular
    Count = 1
    ContainInsideSourceObject = Yes
  End
End

ObjectCreationList OCL_QuadCannonHoldFireVeteran
  CreateObject
    ObjectNames = OCL_QuadCannonHoldFireObjectVeteran
    Count = 1
    ContainInsideSourceObject = Yes
  End
  CreateObject
    ObjectNames = LevelUpTestCrate
    Count = 1
    DiesOnBadLand = Yes
  End
End

ObjectCreationList OCL_QuadCannonHoldFireElite
  CreateObject
    ObjectNames = OCL_QuadCannonHoldFireObjectElite
    Count = 1
    ContainInsideSourceObject = Yes
  End
  CreateObject
    ObjectNames = LevelUpTestCrate
    Count = 2
    DiesOnBadLand = Yes
  End
End

ObjectCreationList OCL_QuadCannonHoldFireHero
  CreateObject
    ObjectNames = OCL_QuadCannonHoldFireObjectHero
    Count = 1
    ContainInsideSourceObject = Yes
  End
  CreateObject
    ObjectNames = LevelUpTestCrate
    Count = 3
    DiesOnBadLand = Yes
  End
End

 

--------------------------------------------------------------------

 

Crate.ini entry for experience bonus crate:

 

Object LevelUpTestCrate

  ; *** ART Parameters ***
  Draw = W3DScienceModelDraw ModuleTag_01
    RequiredScience = SCIENCE_GLA ; Only GLA players and observers can see us.
    DefaultConditionState
      Model = PMJnkCrate
    End
  End

  ; ***DESIGN parameters ***
  DisplayName     = OBJECT:Crate
  EditorSorting   = MISC_MAN_MADE
  TransportSlotCount = 1                 

  ; *** ENGINEERING Parameters ***  
  KindOf = PARACHUTABLE CRATE
  Behavior = SalvageCrateCollide ModuleTag_02
    ForbiddenKindOf = PROJECTILE HULK
    ExecuteFX = FX_CratePickup   ; FXList to play when sucessfully picked up
    WeaponChance = 0%          ;If we are WeaponSalvager, this is the chance we get a WeaponSet upgrade if not fully upgraded
    LevelChance = 100%           ; Either we are just a regular Salvager, or we are fully upgraded.  This is the chance we gain a level
    MoneyChance = 0%           ; And this is the chance we get money.  Level + Money = 100%.  Weapon is an idependant FirstChance
    MinMoney = 0               ; If we get money, this is how much we get.  Make them different to get a random range.
    MaxMoney = 0
  End      

  Behavior = SquishCollide ModuleTag_03
  End

  Behavior = PhysicsBehavior ModuleTag_04
    Mass = 75.0
  End

  Geometry = BOX
  GeometryMajorRadius = 12.0
  GeometryMinorRadius = 12.0
  GeometryHeight = 12.0     
  GeometryIsSmall = Yes    
  Shadow = SHADOW_VOLUME
End

 

--------------------------------------------------------------------

 

System.ini entries for RIDERs that apply the WeaponSets:

 

Object OCL_QuadCannonFireAtWillObjectRegular
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonFireAtWillObjectVeteran
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonFireAtWillObjectElite
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonFireAtWillObjectHero
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonHoldFireObjectRegular
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonHoldFireObjectVeteran
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonHoldFireObjectElite
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

Object OCL_QuadCannonHoldFireObjectHero
  EditorSorting       = SYSTEM
  TransportSlotCount  = 1
  IsTrainable = No
  KindOf = PORTABLE_STRUCTURE INERT
  Body = ActiveBody ModuleTag_03
    MaxHealth       = 1.0
    InitialHealth   = 1.0
  End
  Behavior = AIUpdateInterface ModuleTag_06
  End
  Behavior = DestroyDie ModuleTag_12
    DeathTypes = ALL
  End
  Behavior = HeightDieUpdate ModuleTag_13
    TargetHeight = 500.0
  End
  Behavior = PhysicsBehavior ModuleTag_15
    Mass = 5.0
    AllowBouncing = No
  End
End

 

--------------------------------------------------------------------

 

The "hold fire" weapon, called "DummyWeapon" in the Weapon.ini also needs an additional entry:

"PreAttackDelay = -1"

This fixes that issue: Force-attacking the ground, then toggling to "hold fire" would make the unit drive towards the targeted location, stay there, play it's animation for firing weapons while nothing happens and remain unable to gain stealth while performing that firing order.

Actually each unit should use it's own dummy weapon, being a copy of the original weapon in terms of range, physics and target priorities so that units despite "hold fire" will still try to aquire targets but not attack due to the "PreAttackDelay = -1" setting and thus also not reveal themselves while stealthed due to the "StealthUpdate" module's setting.

 

This assumes the setting "AutoAcquireEnemiesWhenIdle = Yes Stealthed" exists for the "AIUpdateInterface" module of the unit, which should be the case so units already have their turrets aligned when dropping stealth opposed to still requiring time for that.

 

Apologies if I forgot something. It's a lot of data...


In Topic: Contra Feedback

22 August 2017 - 09:55 AM

Are you sure about "OrderIdleEnemiesToAttackMeUponReveal"? Does it cause idle units inside AI bases to move?

It doesn't work as I initially thought: all over the map. Sometimes the AI just reaches a critical mass of units and will begin to move once something triggers it from sleep mode to combat mode. That was that. However: units that use this setting are attacked by more targets than units that don't use this setting. Extra units are called due to this.

 

 

 

ShareWeaponReloadTime (...)

Thanks for info.

 

Deep stealth:

I think this would be good: Normally stealth detectors cover a huge area of vision and stealth detection. If "deep stealth" could only be detected at half the distance regular stealth could be detected stealth detectors would still work but detecting such units would take more anti stealth coverage. That'd require adding an extra stealth detection module to units already using one to specifically detect "deep stealth" only at half the regular stealth detection range.

 

 

 

-Not sure if allowing Dozers to be built in WF is a good idea. US and Chinese Command Centers have a lot of health and are almost impossible to destroy early game unless you lose your factories before it. Emergency Repair is actually very useful as a power.

The problem for me is that I only play vs AI, not vs human players so I lack that knowledge how things work or don't work there. I view Emergency Repair as useless later on due to it's not upgradeable repair amount and high recharge time compared to it's use. It's not strong enough to fully repair Airforce General's tanks, it's not strong enough to safe 3/3 artillery strike targeted structures, even if waiting for some hits to time the repair for full potential. The main use for me later on is just Dozer and Sentry Drone repair. In the early game it's quite useful for saving some time and units but just later it's not.

 

 

 

-Colossus can be buffed without change of concept.

Well... no matter how much the structure or it's unit are buffed: using this defense vs Chemical General will just aid the enemy in creating a wall of "Clogged Engines" so that Airforce General can't use additional air units for defense without taking far more damage than with any other type of defense. The failure rate vs Bomb Trucks, even if detected, would also be unique among base defenses as a Sparrowhawk dies to a single Bomb Trucks explosion, allowing the enemy to push on without getting attacked until the next one is respawned and starts attacking.

 

 

 

Are you sure that "PreferredAgainst" holds the following entries in priority and the unit is more likely to choose a target from the specified entries rather than the nearest target?

I specifically tested this by sending a Pave Low vs some China AI units with all at once in range of the target location: some vehicles, some infantry, some defense structures, some regular structures. The unit would auto select the very first target in order but after that one was destroyed it would just target whatever is close by and fastest to aquire. So this only does it's job upon the first arrival. I haven't tested if using the stop button on the unit would reset the targeting order but moving the unit a little should. The Airforce General's AI started to use Pave Lows better as some of these specifically tried to snipe defense structures more frequently and in groups.

 

 

 

-Did "AutoChooseSources = PRIMARY NONE" do the trick with aircraft attacking enemies by themselves?

Scrap that. "guard area" doesn't work anymore as it should with that setting. But yeah, that stops the unit from attacking anything on it's own.

"AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT" is the desired setting. "Guard area" works, single target clicks work, the unit starts from the Airfield if some enemy close by starts attacking but doesn't attack that enemy until ordered or "guard area" is used; the unit rather circles above the airfield until landing again after some time.

 

SuperweaponsGeneral\Units\Vehicles\Avenger ("Object SupW_AmericaTankAvenger"):

Found 2 issues with that one:

1) Anti air range for the dummy weapon is set to 175 while the actual AA laser range of the PORTABLE_STRUCTURE inside is 250; +75 range difference; that'll make the unit drive closer to enemy aircraft than necessary

2) If enemies close by are attacking any structures the unit constantly leaves it's position in an attempt to use it's laser target designator on any ground units attacking. This causes the unit to get shot as it drives in front of the defense opposed to staying behind it as well as the defense to losing it's anti air support at the desired location due to the unit leaving it's position. Applying the same fix as just used for the Auroras and other bombers to this unit makes it stop using it's laser target designator unless manually selecting a unit or using "guard area" command; otherwise a weapon switch or deploy mode would be a solution to the issue.

 

Discord: I don't know what that is. Maybe I'll show up rarely as there's not much to bla about and text form is required for .ini stuff anyway. I'm pretty sure I'm not a good player as I've played vs AI matches only and that's actually what I prefer. Human vs human battles seem too stressful to me and I enjoy constructing pretty bases human players wouldn't let me have.

 

Edit:

Current progress with Quad Cannon "hold fire" / "fire at will" toggle by using a Crop Duster-like fake special power to apply a RIDER logic:

-salvage crate upgrades work: they affect the model and the model's weapons as intended

-stealth works as it should: no innate stealth, no usage of rider stealth

-issue: whenever toggling the RIDER and thus the WeaponSet the unit loses all of it's experience and starts with 0/3 unit experience again

 -> possible workaround: upgrading the OCL by using UPGRADE_VETERANCY_[VETERAN / ELITE / HEROIC] so that additional objects are spawned -> crates that level up the unit again after toggling the WeaponSet along with the single RIDER that makes the WeaponSet change to the according RIDER used

 

Got it working without upgrading the OCLs but have to test it with experience rank upgraded OCL versions later on.

Experience is an issue: "UpgradeOCL" only accepts Science.ini entries. UPGRADE_VETERANCY_[VETERAN / ELITE / HEROIC] entries make the game crash on startup. I guess CommandSetUpgrade wouldn't work either while any of the riders named in the "RiderChangeContain" module would be present as these apply their own CommandSet and override the unit's default CommandSet. If the "UpgradeOCL" command could be made to work anyhow, using the unit's experience, all would work flawlessly. We would be capable of toggling through WeaponSets and spawn levelup crates on the unit to fix the experience issue after changing riders.

 

Further testing: CommandSetUpgrade works despite RIDER logic with unit experience (tested with "Upgrade_Veterancy_HEROIC"). That's a workaround to the unit experience issue but it doesn't address which rider is currently active so both buttons ("Fire at Will" and "Hold Fire") would still be required opposed to a single button for "Hold Fire" on / off. Additionally for fake unit construction further CommandSetUpgrades (+1 per unit experience rank) would be required.

 

Another try:

Got everything working. Really complicated. Posting later...


In Topic: Contra Feedback

21 August 2017 - 05:13 PM

What do you think about making GLA units such as Quad Cannon AutoAcquireEnemiesWhenIdle only when visible (by removing the STEALTHED condition)?

This does nothing. I want to escape into stealth so that enemies stop attacking the unit before it gets destroyed and the unit is blocking this by not stopping to attack everything in range due to a lack of "Hold Fire" action due to the game's issues and limitations.

 

2 possible solutions:

1) use SWITCH_WEAPON CommandButton to Flash-bang-like toggle between PRIMARY (ground attack), SECONDARY (anti air) and TERTIARY (hold fire):

-downside: a unit can be set either to only anti air or anti ground but not both, meaning any unexpected attacker would be ignored until the weapon state is toggled

-upside: units could be set to focus on certain targets; this would stop anti air units that can also attack ground units from leaving their positions just because some other ground units (tanks) start attacking defenses and thus allow aircraft to advance because defensive AA positions have been abandoned

2) use anything that toggles the WeaponSet:

I tried an upgrade that did this and provided the unit with an upgrade ("Hold Fire") and un-upgrade (regular attack) "Upgrade" but that caused 3 issues:

-1) annoying "upgrade complete" sound + radar notification

-2) CommandSet not properly upgrading (needed to be triggered twice)

-3) C&C Generals upgrade limit becoming an issue if that'd be used on multiple units

=> I'll try Crop Duster RIDER logic next and see how that works or fails

Ultimately a WeaponSet toggle would be ideal but if that can't be done I'd rather use a single attack setting opposed to leaving things as they are.

 

AI: Contra009Beta2 AI issues I noticed:
-GLA forgets to build defenses or stays passive: Stealth General is completely passive; Assault General sometimes forgets to build any defenses (except rocks)

 -> of all GLA Generals only Chemical General's AI and Explosives General's AI work
-no single GLA faction ever builds anything to detect stealthed air units, allowing scouting and attacking with such units wherever and whenever
-AIs that can definately crash the game with a "serious error": any China AI, USA Airforce General, USA Laser General (100% sure); not sure: USA Super Weapons General, GLA Explosives General
 => China crash seems to be related to some AI reaction when attacking the Command Center or being near it (including Super Weapons General attacking it with Tomahawk Missiles)

-USA Laser General and China Tank General cause some serious lag spike when they suddenly try to send a whole bunch of tanks to somewhere because of pathfinding making the game lag

-the "StealthUpdate" module's setting "OrderIdleEnemiesToAttackMeUponReveal" seems not to relate to units in weapon range / vision range but all over the map, causing a huge lag spike if there are many idle units and due to pathfinding
-all USA Generals AI's still use the Fuel Bomb even though not all should have access to it; on top of that the AI uses this without any Command Center or Strategy Center requirement and in such a way that it comes out of screen to the target with the shortest possible distance (if building near the map borders a defense vs this bomb drop isn't possible)
-USA Super Weapons General: the AI ignores invalid consruction area issues when spawning turrets by using the general's power and thus these turrets are constantly spawned inside structures by the AI while that shouldn't be possible and at least for a human player it isn't

-USA Super Weapon AI in general seems to ignore invalid construction areas and always builds structures inside other structures, so that structures are overlapping another

 

Other stuff:

-USA Drones assisting structures can't be rebuilt / replaced after being destroyed as the UI only allows their construction a single time per structure opposed to always anew once an assisting drone was destroyed as it's the case for mobile units; security / defense drones aren't affected by this

-music tracks still get canceled before completing, I guess it's related to the game's speed / frame rate

 

MAY BE IMPORTANT:

WeaponSet conditions can have multiple conditions, like...

Conditions = Hero PLAYER_UPGRADE

Initially I falsely assumed that these conditions were treated as AND conditions, meaning every single condition must be true to activate the WeaponSet. Testing revealed that they're treated as OR conditions.

 

UPDATE:

Another thing I found out during testing is that WeaponSets really use their "Conditions" entries as OR conditions but the most matching setting is prefered. That means if I have a unit, using a sole WeaponSet with a "Conditions = VETERAN CRATEUPGRADE_ONE PLAYER_UPGRADE" entry it will use that WeaponSet under ANY of these conditions, meaning it'll become active if the unit either becomes veteran (1/3 experience level reached) or uses a salvage crate (assuming it can interact with the crate) or receives the upgrade mentioned in it's "WeaponSetUpgrade" module BUT...

 

if I add seperate WeaponSets with Conditions, like...

WeaponSet

Conditions = VETERAN

Weapon = PRIMARY PrimaryVeteran

End

 

WeaponSet

Conditions = CRATEUPGRADE_ONE

Weapon = PRIMARY PrimaryCrateOne

End

 

WeaponSet

Conditions = PLAYER_UPGRADE ;requires the "WeaponSetUpgrade" module to define which upgrade triggers this

Weapon = PRIMARY PrimaryUpgradeResearched

End

 

WeaponSet

Conditions = VETERAN CRATEUPGRADE_ONE

Weapon = PRIMARY PrimaryCrateOneVeteran

End

 

WeaponSet

Conditions = VETERAN PLAYER_UPGRADE ;requires the "WeaponSetUpgrade" module to define which upgrade triggers this

Weapon = PRIMARY PrimaryVeteranUpgradeResearched

End

 

WeaponSet

Conditions = CRATEUPGRADE_ONE PLAYER_UPGRADE ;requires the "WeaponSetUpgrade" module to define which upgrade triggers this

Weapon = PRIMARY PrimaryCrateOneUpgradeResearched

End

 

WeaponSet

Conditions = VETERAN CRATEUPGRADE_ONE PLAYER_UPGRADE ;requires the "WeaponSetUpgrade" module to define which upgrade triggers this

Weapon = PRIMARY PrimaryCrateOneVeteranUpgradeResearched

End

 

...then the WeaponSet matching the listed conditions the most is used.

 

I found some interesting thread ( http://forum.fallout...ticlesystemini/ ) that claims a "cleaned up" ParticleSystem.ini speeds up the game's performance and shows how.

 

I found a so far unused setting for WeaponSets:

"ShareWeaponReloadTime = [Yes / No]"

I've yet to test what it does. I hope it's the a setting that stops units which received an upgrade for their weapon due to experience gain from starting to reload all over again at full reload time unless the weapon was already reloaded but instead makes the new weapon use the remaining reload time.

 

As the Stealth General is supposed to be the master of stealth I was kicking the thought around of granting him "deep stealth", a stealth that can't be revealed by regular stealth detectors. I found the KindOf "Shrubbery". Maybe that could be added to units as "deep stealth" KindOf so that they're excluded from regular detectors if that doesn't cause any issues ? Also in terms of playstyle I think it's best if this general receives a hand full of more or less specialized and effective but expensive units that also take some time to build so that instead of a whole "stealth" army single units can effectively make a difference but need to be used correctly. Generic units may also be available as cannon fodder, to lure the enemy somewhere or to distract. Because he's the weakest of all GLA generals in direct combat he needs to excel in tunnels, stealth and mobility.

 

Airforce General:

The general is too easy to lock down by sniping Dozers as his HQ is the only structure capable of creating new Dozers. This means that in early game focussing on 1 structure, the HQ, can be a huge issue for that general and in late game it means huge travel distances (even if using Chinooks) as no front line units of this type can be produced elsewhere. The rank 1 science to repair units & structures in an area could eventually also allow Dozer production inside War Factories to get around this vulnerability and to make this choice more attractive as it lacks any upgrade later on.

 

StealthGeneral\Units\Warrior ("Object Slth_GLAInfantryRebel"):

-I thought about granting him an updated CommandSet once "Camouflage" has been researched at the Black Market, allowing a weapon toggle to use a knife to kill enemy infantry silently and unseen; so that this upgrade is of some use to this unit instead of being of use for all early game infantry except this one

-eventually there should be a generic infantry upgrade later on, increasing infantry mobility by a bit (even while wounded so that units don't fall too far behind)

-I'm also kicking around the though that all organic units in the game receive an always active passive selfheal that kicks in some seconds after not having taken any damage and that is very minor as it's possible to stack multiple "AutoHealBehavior" modules without any issues:

 

  Behavior = AutoHealBehavior ModuleTag_Organic
    HealingAmount = 1 ; absolute value: hit points, amount healed per "tick"
    HealingDelay = 1000 ; 1000ms = 1s, delay between "ticks"
    StartHealingDelay = 20000 ; after this many ms of having taken no damage start the effect
    StartsActive = Yes
  End

 

AirforceGeneral\Structures\Barracks ("Object AirF_AmericaBarracks"):

-I'd add +2 Pilots for training there: +2 and +3 experience Pilots that cost 2x and 3x as much time and credits to be created to reduce Pilot micro-management as currently up to 3 Pilots are required per jet

 -> 1st row (upper row) could be: Ranger, Missile Defender, Col. Burton

 -> 2nd row (lower row) could be: Pilot , Pilot , Pilot of experience rank 1,2,3 with according cost and build time multiplier (using a copy & paste unit-type of the original Pilot with just these values changed)

 

AirforceGeneral\Units\Aircraft\Comanche ("Object AirF_AmericaVehicleComanche"):

-Comanche AA missiles constantly cause friendly fire issues with own Comanches destroying another because the range is so low in AA combat that this happens

 -> "RadiusDamageAffects = ALLIES ENEMIES NEUTRALS" to "RadiusDamageAffects = ENEMIES NEUTRALS" would get rid of this issue without buffing / nerfing the unit otherwise

-removing "ComancheLaunchDroneWeapon" from the Comanche's turret seems to fix the issue that the Comanche launches it's drone wherever it's pointing at instead of at the player-selected location (previously couldn't be launched where the player clicked once the Comanche decided to face an enemy)

-"ComancheLaunchDroneWeapon" damage from 1 to 0.0001, eventually additionally

 

AirforceGeneral\Structures\Colossus ("Object AirF_AmericaFireBase"):
-After a test in a "How long can I survive ?" scenario with multiple unit combinations these were this unit's results:
 -it misses fast units
 -Jarmen Kell's "Kill Driver" attack can rarely be stopped by this defense as it simply takes to long to take him out with that; he most often reaches any vehicle he came for before dying without additional units attacking him
 -very vulnerable vs Infantry General's long range siege infantry (forgot name) and incapable of countering Infantry General's always stealthed snipers that are good vs any ground unit & structures
 -> it can't detect anything (but the Sparrowhawk's beam will keep the single enemy it targets visible so it can't enter stealth while under the beam's effect)
 -it can't stop explosive truck spams because the Sparrowhawk dies after a single suicide truck explosion and thus the area is clear for the others
 -the Sparrowhawk's guard range is too low to deal with artillery units unless they needlessly come too close
 -vs Chemical General the "Clogged Engines" upgrade in combination with Sparrowhawk defense just constantly creates a wall of death for aircraft and spams the player with "Unit lost." audio notifications
 -China Overlords with upgraded engines have it all: speed, armor, firepower -> this defense can't stop them and neither can it hurt them enough
 -it needs high terrain from which it can't be directly attacked to survive or other defenses covering it (health too low, can't take much of a beating)
 -starts dealing area damage to own units, structures and allies once enemies come too close to them, aiding in the destruction of my base and units (especially Dozers)
 -has no upgrade to address any of it's weaknesses or receive any meaningfull improvements
 -> In short: Redesign or replacement required. The defense is overprized for it's performance. What the Airforce General needs is either some tanky defense that draws the enemy's attention and potentially slows attackers down while not causing Chemical General's AA units to spray the whole area with the "Clogged Engines" effect. I'd use a bunker-like structure that can take some infantry inside (2-4), has some tanky hitpoint-pool and every x seconds sends out a 360° ground-based EMP stun on a medium to large range, affecting all enemy ground vehicles and structures so that they are disabled for 1-2s every x seconds and need to destroy this structure to push on - or bring siege units.

 

AirforceGeneral\Units\Aircraft\Pavelow ("Object AirF_AmericaVehiclePaveLow"):

-currently uses the wrong armor once upgrading "Countermeasures": uses "CountermeasuresComancheArmor", should use "CountermeasuresChinookArmor" (before upgrade: "ChinookArmor")

 -> makes the unit more vulnerable than before to some types of damage

-range suggestion: extend missiles' minimum range to the maximum range of the Grenade Launcher so that it's somewhat possible to control what weapon is used when by chosing an attack range opposed to the unit senselessly slamming missiles into garrisoned structures; this also forces the use of this unit as long range artillery unit as it can no longer attack vehicles close by due to being within minimum range

-"PaveLocomotor": "Braking" from 20 to 95 makes the unit less annoying to handle: it will stop where ordered opposed to flying far beyond where ordered, turning this unit into clunky micro-management annoyance that often gets shot due to not being where ordered

-changing Pave Low's missile targeting from "PreferredAgainst = PRIMARY VEHICLE STRUCTURE" to "PreferredAgainst = PRIMARY IMMUNE_TO_CAPTURE STRUCTURE VEHICLE" makes the unit more likely to target defense structures, regular structures and then only other units opposed to initially trying to take out units while not being made for that

 

AirforceGeneral\Units\Vehicles\Bobcat ("Object AirF_AmericaVehicleStrykerEng"):

-mine destruction rate 500 -> 250 because currently it's possible that this unit drives onto one of Demo General's AV mines despite being an anti mine unit due to bad anti mine field timing frequency (changing it should affect all anti mine vehicles as all use the same weapon for their anti mine field -> "MineDetonationFieldWeapon")

-at least for the Airforce General the anti-contamination spray should receive extended range (2x) and no line of sight restriction because airfields are large and build space is limited so the Airforce General can't always space out structures everywhere or position them in a way to make sure this unit can reach all places; often puddles are also left onto the airfields and with line of sight restriction this causes issues

-the turret turns too slow while the unit is mobile and aquiring new puddles takes too long so that this unit is somewhat ineffective

-destroying Demo General's mines with anti mine units always causes them to explode, making it impossible to safely get rid of them whenever the AI spawns them inside structures and thus using anti mine units results in the same as blindly allowing them to explode or in other words: anti mine units are useless in that situation as they safe nothing but also cause the mines / traps to explode

 

SuperweaponsGeneral\Units\Aircraft\Chimera ("Object AirF_AmericaBomberB52"):
-slow, vulnerable, far too long reload, useless against mobile targets, missiles shot down by missile defense systems or redirected by ECMs, no stealth or engine upgrade
 => pointless, considering all the other bomber options: either the cheap F16s deal with stationary defenses & structures or the Pave Lows do, additionally their range can be extended by the laser target designator's aura; for groups of units there are the F18 (after the Frog Missile upgrade) / JFSs; for either groups of enemies or single ones Auroras exist along with the Wyvern super unit; Chimeras are just underperforming while being just more of the same
-they'd would be better suited as Fuel Bomb / MOAB kind of bomber that is that slow and vulnerable as currently but drops a fuel bomb, with a rank 5 upgrade the unit could receive another 3D model with more speed, more HP and a MOAB bomb; eventually even stealth, accessible only after that model-changing upgrade (instead of a single part of the unit being replaced after the upgrade a 2nd model is used -> old bomber design is being replaced by the new one)
-there could also be a weapon toggle between the fuel / moab bomb and multiple bombs in a row / carpet bombs if a Crop Duster-like RIDER design would be possible for the unit

-damage type of the area damage the fuel / moab bomb does could either be NOT_SIMILAR or NOT_AIRBORNE

=> new role would be: still vulnerable, slow and slow reloading BUT carrying a huge bad bomb whereever no or decimated air defenses exist

 

SuperweaponsGenerals\Units\Vehicles\Valanx ("Object SupW_AmericaVehicleHumvee"):

The unit is worthless as a transport as a Chinook is faster, can carry more units, can only be attacked by AA capable units and even then the Chinook can take around equal to more punishment.

This unit needs a role. I suggest enabling infantry to attack from inside the transport it while leaving it as vulnerable as it is along with the micro-management of getting the units inside to have a vulnerable hit & run unit that can also act as emergency support unit:

 -> set: "PassengersAllowedToFire = No" to "PassengersAllowedToFire = Yes"
 -> add: "ForbidInsideKindOf = STEALTH_GARRISON" -> no snipers allowed inside; and btw. despite Super Weapon's snipers having this KindOf they aren't invisible to the enemy (at least to AI) while inside civilian structures
 -> change: "Slots = 3" to "Slots = 2" (so that Valanx' don't become too powerful in ground vs ground combat)
 

SuperweaponsGeneral\Units\Aircraft\StealthJet ("Object SupW_AmericaJetStealthFighter"):

This unit is supposed to be good against enemy defensive structures but it isn't because it's attack range is so low that it gets hit by multiple enemies all the time and because it loses stealth while attacking. The range needs to be increased, the damage to be buffed or stealth needs to be kept up while bombing. Anything of this or anything mixed in a way that it makes sense but otherwise this unit is a pointless waste, except for the Bunker Busters upgrade.

Refernce values:

Airforce General's F16:

ClipReloadTime = 9000; ALL clips are reloaded after this much time, doesn't mean per clip

AttackRange = 550

PrimaryDamage = 180

SecondaryDamage = 10

SecondaryDamageRadius = 10

Bombs: 2

 

Super Weapon General's Stealth Jets:

ClipReloadTime = 8000 ; ALL clips are reloaded after this much time, doesn't mean per clip

AttackRange = 250

PrimaryDamage = 200

SecondaryDamage = 50

SecondaryDamageRadius = 30

Bombs: 1

=> the Super Weapon's Stealth Jet has a longer reload time per bomb, seems to be moving slower, has less than half the attack range and a bit more than half the damage of a F16; all that while supposed to be an anti defense specialized unit

 

-much like Airforce General's jets the Stealth Jets should also have a sell option, eventually even the Auroras because currently I've got to use my own units to kill my own unit to make room on the airfield and that's kind of silly overall

 

All of USA faction bombers but especially Auroras:

-add an "AutoChooseSources = PRIMARY NONE" to these units so that they stop destroying their own Airfields and possibly other things and units around whenever GLA decides to tunnel in or spawn some infantry inside the base; it's really bad unit behaviour if these units blow up everything around, worse than the enemy ever could, including their own Airfield

 

-maybe Airforce General's Pilots could receive a "suicide" weapon usable to "shoot" at flying units that makes the Pilots suicide and causes the "hit" helicopters to fire a reactive weapon that increases their rank as currently the issue with Pave Lows and Pilots is that they're being transported instead of increasing the Pave Low's rank and Comanches can't even benefit from Pilots unless landing for repairs near an Airfield while trying to defend, especially since it's an automated reaction the player didn't order and that never works out well

 

-eventually GLA Black Markets should have a heal & repair aura around them as it somehow fits what they offer: any kind of helpful goods

 

-eventually all GLA factions should also start with a 3 to 5% bounty science for free as faction identity, upgradeable later on a general science (where maybe picking the last rank allows the research of a final upgrade after that at rank 5)

 

Edit:

 

SuperweaponsGeneral\Units\Vehicles\Saturn ("Object SupW_AmericaVehicleSaturn" & "Object SupW_AmericaVehicleSaturn_GC"):

-the price should be reduced 7000 to 5500; the high price just isn't justified by the ability to shoot down super weapons alone or being tanky because repairing the unit is a really bad and clunky issue

-issue: upgrading "Composite Armor" doesn't upgrade the unit's autorepair to keep the total repair time the same

-issue: very slow unit -> expecting the player to use War Factories to repair these is unreasonable because of their low speed; meanwhile their autorepair time is huge: around 11min without "Composite Armor", around 14min with the upgrade

 -> solution: staged repair speeds

 phase#1 repair: 0.2% maxHP/s, always active -> 4600 / 5750 HP without / with "Composite Armor" -> 9 HP/s without / 12 HP/s with the upgrade

 

  Behavior = AutoHealBehavior ModuleTag_AutoRep01
    HealingAmount = 9
    HealingDelay = 1000
    StartsActive = Yes
  End

 

 

  Behavior = AutoHealBehavior ModuleTag_AutoRep01Upgraded
    TriggeredBy = Upgrade_AmericaCompositeArmor
    HealingAmount = 3
    HealingDelay = 1000
    StartsActive = No
  End

 

 phase#2 repair: 1.0% maxHP/s, active after 20s of having taken no damage (adding +0.8% to the already active 0.2% to have a 1.0% hp reg going):

 

  Behavior = AutoHealBehavior ModuleTag_AutoRep02
    HealingAmount = 37
    HealingDelay = 1000

   StartHealingDelay = 20000
    StartsActive = Yes
  End

 

 

  Behavior = AutoHealBehavior ModuleTag_AutoRep02Upgraded
    TriggeredBy = Upgrade_AmericaCompositeArmor
    HealingAmount = 9
    HealingDelay = 1000

   StartHealingDelay = 20000
    StartsActive = No
  End

 

 phase#3 repair: 3.0% maxHP/s, active after 60s of having taken no damage (adding +2% to the already active 1.0% to have a 3.0% hp reg going):

 

  Behavior = AutoHealBehavior ModuleTag_AutoRep03
    HealingAmount = 92
    HealingDelay = 1000

   StartHealingDelay = 60000
    StartsActive = Yes
  End

 

 

  Behavior = AutoHealBehavior ModuleTag_AutoRep03Upgraded
    TriggeredBy = Upgrade_AmericaCompositeArmor
    HealingAmount = 23
    HealingDelay = 1000

   StartHealingDelay = 60000
    StartsActive = No
  End

 

-"Solar Panels" for the Super Weapon General clearly aren't enough to keep the base properly defended or to expand; this unit should have it's own reactor inside it and add some energy to the general's economy: "EnergyProduction = 6"; eventually I'd even add a per Ion Power Plant purchaseable "Solar Panels" upgrade to install such panels on top of the structure, granting it +1 power for 300$, available after the main "Solar Panels" upgrade has been researched at the Strategy center

-income is also a huge issue for the Super Weapon General: defenses cost a lot; Saturns should have a Black Market-like money generating ability, increased by the "Supply Lines" upgrade but of minor effect compared to a Black Market; they should be capable of using Chinese Hackers' "Hack Internet" ability that makes them unable to defend the the base or construct but allows them to generate a bit more money than a Supply Drop Zone would, also benefiting from "Supply Lines" there

 -> that way Saturns wouldn't just drain the economy by their high price while adding nothing but actually be of use other than as missile defense and tanky but badly repairable unit with moderate AA capabilities

-special ability-wise I'd grant the Saturn the option to capture structures the unit is really close to by using a Black Lotus-like ability so that this unit can't just guard things but also take them

-as the unit is helpless against anything that stays stealthed I'd grant it passive stealth detection at half it's sight range; that's a reasonable area; exception should be mines and demo traps

-"Energy Capacitors" is available for research at the Strategy Center, even if the Centurion Tanks it is for haven't been selected as general power; I'd rather put this upgrade to use for the Saturn than removing it: increase the Saturn's move- and turn speed by somewhat between 20 to 40% and it's anti vehicle weapon damage by flatout +20% as it's currently laughable how long it takes the "super unit" to take out a single unupgraded, not propaganda tower buffed Overlord tank -> anti vehicle really needs more damage; anti structure and anti air damage is fine; perhaps it's time for a designated anti vehicle TERTIARY weapon for the Saturn that has more of a punch to it while the explosive damage type anti air weapon may also be used against structures so that the anti structure damage remains the same but just vehicles take more damage than currently from the unit

-the structure repair of the Saturn should also be buffed: It should definately be better at structure repairs than a Heavy Dozer and be the next step in structure repairs: 3% repair

=> this is much I'd modify but I view this as necessary; this unit hardly qualifies as super unit because despite being bulky repairing it is an issue so it's only strength is being able to shoot down general power projectiles, super weapons and missiles; that makes it more of a defense turret than anything else; a badly repairable one that, despite being a super unit, doesn't add much of value the base wouldn't have without it