Skip to content

SpecialPowers

pWn3d1337 edited this page Sep 17, 2025 · 6 revisions

SpecialPower.ini

New Special Power Enums:

  • SPECIAL_ION_CANNON
  • SPECIAL_CLUSTER_MISSILE
  • SPECIAL_SUNSTORM_MISSILE
  • SPECIAL_METEOR_STRIKE
  • SPECIAL_PUNISHER_CANNON
  • SPECIAL_CHEMICAL_MISSILE
  • SPECIAL_CHRONOSPHERE

New Parser Fields:

BehaviorEnum = <OTHER ENUM>
Used to set how a new SpecialPower behaves, new enums will be like "SPECIAL_NEUTRON_MISSILE", with this field another behavior can be set, there is a lot of hardcoded stuff in the exe.

EvaDetectedOwn = <Name of eva event>
EvaDetectedAlly = <Name of eva event>
EvaDetectedEnemy = <Name of eva event>
EvaLaunchedOwn = <Name of eva event>
EvaLaunchedAlly = <Name of eva event>
EvaLaunchedEnemy = <Name of eva event>
EvaReadyOwn = <Name of eva event>
EvaReadyAlly = <Name of eva event>
EvaReadyEnemy = <Name of eva event>
These allow to specify eva events for a special power. When not set, vanilla special power still have their hardcoded events.

Code Example:

SpecialPower SupW_SpecialPowerChronoSphere
  Enum = SPECIAL_CHRONOSPHERE ; new Enum constant
  ReloadTime = 240000     ; in milliseconds
  PublicTimer = Yes
  InitiateAtLocationSound = ChronoSphereTargetInitiateSound
  SharedSyncedTimer = No
  RadiusCursorRadius = 50
  ShortcutPower = Yes     ; Capable of being fired by the side-bar shortcut.
  AcademyClassify = ACT_SUPERPOWER     ; Considered a powerful special power that a player could fire. Not for simpler unit based powers.
  BehaviorEnum = SPECIAL_SNEAK_ATTACK ; behave like sneak attack, required for chronosphere
  EvaDetectedEnemy = SUPERWEAPONDETECTED_ENEMY_CHRONOSPHERE ; Vanilla superweapons have these 5 eva events, define events in Eva.ini
  EvaLaunchedOwn = SUPERWEAPONLAUNCHED_OWN_CHRONOSPHERE
  EvaLaunchedAlly = SUPERWEAPONLAUNCHED_ALLY_CHRONOSPHERE
  EvaLaunchedEnemy = SUPERWEAPONLAUNCHED_ENEMY_CHRONOSPHERE
  EvaReadyOwn = SUPERWEAPONREADY_OWN_CHRONOSPHERE
End

Eva.ini

New Eva events:

  • SUPERWEAPONDETECTED_OWN_ION_CANNON

  • SUPERWEAPONDETECTED_ALLY_ION_CANNON

  • SUPERWEAPONDETECTED_ENEMY_ION_CANNON

  • SUPERWEAPONLAUNCHED_OWN_ION_CANNON

  • SUPERWEAPONLAUNCHED_ALLY_ION_CANNON

  • SUPERWEAPONLAUNCHED_ENEMY_ION_CANNON

  • SUPERWEAPONREADY_OWN_ION_CANNON

  • SUPERWEAPONREADY_ALLY_ION_CANNON

  • SUPERWEAPONREADY_ENEMY_ION_CANNON

  • SUPERWEAPONDETECTED_OWN_CLUSTER_MISSILE

  • SUPERWEAPONDETECTED_ALLY_CLUSTER_MISSILE

  • SUPERWEAPONDETECTED_ENEMY_CLUSTER_MISSILE

  • SUPERWEAPONLAUNCHED_OWN_CLUSTER_MISSILE

  • SUPERWEAPONLAUNCHED_ALLY_CLUSTER_MISSILE

  • SUPERWEAPONLAUNCHED_ENEMY_CLUSTER_MISSILE

  • SUPERWEAPONREADY_OWN_CLUSTER_MISSILE

  • SUPERWEAPONREADY_ALLY_CLUSTER_MISSILE

  • SUPERWEAPONREADY_ENEMY_CLUSTER_MISSILE

  • SUPERWEAPONDETECTED_OWN_SUNSTORM_MISSILE

  • SUPERWEAPONDETECTED_ALLY_SUNSTORM_MISSILE

  • SUPERWEAPONDETECTED_ENEMY_SUNSTORM_MISSILE

  • SUPERWEAPONLAUNCHED_OWN_SUNSTORM_MISSILE

  • SUPERWEAPONLAUNCHED_ALLY_SUNSTORM_MISSILE

  • SUPERWEAPONLAUNCHED_ENEMY_SUNSTORM_MISSILE

  • SUPERWEAPONREADY_OWN_SUNSTORM_MISSILE

  • SUPERWEAPONREADY_ALLY_SUNSTORM_MISSILE

  • SUPERWEAPONREADY_ENEMY_SUNSTORM_MISSILE

  • SUPERWEAPONDETECTED_OWN_METEOR_STRIKE

  • SUPERWEAPONDETECTED_ALLY_METEOR_STRIKE

  • SUPERWEAPONDETECTED_ENEMY_METEOR_STRIKE

  • SUPERWEAPONLAUNCHED_OWN_METEOR_STRIKE

  • SUPERWEAPONLAUNCHED_ALLY_METEOR_STRIKE

  • SUPERWEAPONLAUNCHED_ENEMY_METEOR_STRIKE

  • SUPERWEAPONREADY_OWN_METEOR_STRIKE

  • SUPERWEAPONREADY_ALLY_METEOR_STRIKE

  • SUPERWEAPONREADY_ENEMY_METEOR_STRIKE

  • SUPERWEAPONDETECTED_OWN_PUNISHER_CANNON

  • SUPERWEAPONDETECTED_ALLY_PUNISHER_CANNON

  • SUPERWEAPONDETECTED_ENEMY_PUNISHER_CANNON

  • SUPERWEAPONLAUNCHED_OWN_PUNISHER_CANNON

  • SUPERWEAPONLAUNCHED_ALLY_PUNISHER_CANNON

  • SUPERWEAPONLAUNCHED_ENEMY_PUNISHER_CANNON

  • SUPERWEAPONREADY_OWN_PUNISHER_CANNON

  • SUPERWEAPONREADY_ALLY_PUNISHER_CANNON

  • SUPERWEAPONREADY_ENEMY_PUNISHER_CANNON

  • SUPERWEAPONDETECTED_OWN_CHEMICAL_MISSILE

  • SUPERWEAPONDETECTED_ALLY_CHEMICAL_MISSILE

  • SUPERWEAPONDETECTED_ENEMY_CHEMICAL_MISSILE

  • SUPERWEAPONLAUNCHED_OWN_CHEMICAL_MISSILE

  • SUPERWEAPONLAUNCHED_ALLY_CHEMICAL_MISSILE

  • SUPERWEAPONLAUNCHED_ENEMY_CHEMICAL_MISSILE

  • SUPERWEAPONREADY_OWN_CHEMICAL_MISSILE

  • SUPERWEAPONREADY_ALLY_CHEMICAL_MISSILE

  • SUPERWEAPONREADY_ENEMY_CHEMICAL_MISSILE

  • SUPERWEAPONDETECTED_OWN_CHRONOSPHERE

  • SUPERWEAPONDETECTED_ALLY_CHRONOSPHERE

  • SUPERWEAPONDETECTED_ENEMY_CHRONOSPHERE

  • SUPERWEAPONLAUNCHED_OWN_CHRONOSPHERE

  • SUPERWEAPONLAUNCHED_ALLY_CHRONOSPHERE

  • SUPERWEAPONLAUNCHED_ENEMY_CHRONOSPHERE

  • SUPERWEAPONREADY_OWN_CHRONOSPHERE

  • SUPERWEAPONREADY_ALLY_CHRONOSPHERE

  • SUPERWEAPONREADY_ENEMY_CHRONOSPHERE

New SpecialPower "Kodiak"

based on spectre gunship, a unit with multiple turrets and a primary weapon are fired in the target area

  • MainTurrets: Follow manual targetting (spectre)
  • SideTurrets: Auto-Acquire targets (cheap first)
  • AATurrets: Auto-Acquire targets
  • MainWeapon: Primary Weapon of the gunship itself that is fired when ready. Has it's own scatter pattern and option to lock on to targets within a radius of scatter impact. Scatter Pattern is in KodiakUpdate, the weapon itself should not have a scatter radius or scatter targets. The Kodiak update will try to fire the weapon when ready going through scatter targets in same order. Use a clipsize. If clipreloadtime is smaller than OrbitTime, the weapon is fired again.

All turrets must be contained objects, this allows individual attack orders.

Example Code in the gunship unit:

 Behavior = SpecialAbility ModuleTag_32
    SpecialPowerTemplate = ZSupW_SuperweaponKodiakGunship
    UpdateModuleStartsAttack = Yes
  End
  Behavior = KodiakUpdate ModuleTag_10
    SpecialPowerTemplate = ZSupW_SuperweaponKodiakGunship
    OrbitTime = 30000 ; total time in attack mode.
    TurretRecenterTimeBeforeExit = 3000 ; Time before finishing where turrets stop and recenter
    InitialAttackDelay = 1500 ; when entering target area time until attacks start, leaves time for animations
    ; Effective Attacking time = OrbitTime - TurretRecenterTimeBeforeExit - InitialAttackDelay
    ; during TurretRecenterTimeBeforeExit and InitialAttackDelay DOOR_1_CLOSING and DOOR_1_OPENING animations are played
    ; Locomotorset change happens at reaching the target and end of OrbitTime (NORMAL to PANIC like spectre) 
    TargetingReticleRadius = 25 ; Like spectre
    GunshipOrbitRadius = 400 ;radius from target point at where to go in attack mode
    MainTurrets = 2 ; how many turrets are main, should have at least one, must be first x contained objects
    SideTurrets = 2 ; how many turrets are side, must be contained after mainTurrets
    AATurrets = 2 ; how many turrets are aa, must be contained after sideTurrets
    MainTargetingRate = 200     ; how often target for main turrets can change
    AttackAreaRadius = 250.0 ; Attack area around target like spectre
    SideTargetingRate = 150     ; how often target for side turrets can change
    SideAttackAreaRadius = 250.0 ; which radius side turrets can shoot at, calculated from current gunship pos
    AATargetingRate = 200     ; how often target for aa turrets can change
    AAAttackAreaRadius = 325.0 ; which radius aa turrets can shoot at air targets, calculated from current gunship pos
    MissileLockRadius = 50.0 ; when firing main weapon units within this radius can be locked at
    MissileScatterRadius = 250.0 ; area scalar for ScatterTargets
    ScatterTarget = X: 0.000 Y: 0.133 ; add as many scatter targets as clipsize
    ScatterTarget = X: 0.133 Y:-0.200 ; if less then clipsize they will be repeated
    ScatterTarget = X:-0.067 Y: 0.667 ; if no targets at all, shoot at gunship location
    ScatterTarget = X: 0.300 Y: 0.300
    ScatterTarget = X: 0.767 Y: 0.000
    ScatterTarget = X: 0.500 Y:-0.567
    ScatterTarget = X:-0.333 Y:-0.800
    ScatterTarget = X:-0.600 Y:-0.1333
    ScatterTarget = X:-0.567 Y: 0.433
    ScatterTarget = X: 0.000 Y: 0.133
    ScatterTarget = X: 0.133 Y:-0.200
    ScatterTarget = X:-0.067 Y: 0.667
    ScatterTarget = X: 0.300 Y: 0.300
    ScatterTarget = X: 0.767 Y: 0.000
    ScatterTarget = X: 0.500 Y:-0.567
    ScatterTarget = X:-0.333 Y:-0.800
    ; Decals Like spectre
    AttackAreaDecal 
      Texture = SCCSpecTarg
      Style = SHADOW_ALPHA_DECAL
      OpacityMin = 25%
      OpacityMax = 50%
      OpacityThrobTime = 1500
      Color = R:127 G:177 B:222 A:255
      OnlyVisibleToOwningPlayer = Yes
    End
    TargetingReticleDecal
      Texture = SCCSpecRet
      Style = SHADOW_ALPHA_DECAL
      OpacityMin = 50%
      OpacityMax = 100%
      OpacityThrobTime = 300
      Color = R:127 G:177 B:222 A:255
      OnlyVisibleToOwningPlayer = Yes
    End
  End

Coresponding CommandCenter Code:

  Behavior = SpecialAbility ModuleTag_496
    SpecialPowerTemplate = ZSupW_SuperweaponKodiakGunship
    UpdateModuleStartsAttack = Yes
  End
  Behavior = KodiakDeploymentUpdate ModuleKodiak_1 ; Parameters like spectre, just different module name
    SpecialPowerTemplate = ZSupW_SuperweaponKodiakGunship
    RequiredScience = SupW_SCIENCE_KodiakGunship
    GunshipTemplateName = SupW_AmericaJetKodiak
    AttackAreaRadius = 250
    CreateLocation = CREATE_AT_EDGE_NEAR_SOURCE
  ; other choices are: *NEAR_SOURCE *FARTHEST_FROM_SOURCE *NEAR_TARGET
  End

Clone this wiki locally