Gameanater
  • Gameanater
  • 55.5% (Neutral)
  • General Topic Starter
7 years ago
Hello ya'll.

I've become interested in Zero Hour modding again and have taken it upon myself to start by improving the Superweapons General, one that I always liked but didn't like how unviable she actually is in serious play and the fact that she isn't actually too great at turtling - the thing she's supposed to do.

I have it as a sort of headcanon that she's the least mentally stable of the three USA Generals and would have much wackier and more experimental units. One such unit is a Ranger cyborg given a smaller version of the Microwave Tank's weapon.

I've gotten it to a playable state... And it's freaking awesome. Aside from two issues.

1 - I can't seem to get the beam to come out of the gun no matter what I've tried. It just comes out of his feet.

2 - Due to having a weapon for attacking infantry instead of garrisons specifically, he's completely helpless against garrisons which sorta sucks.

Any suggestions on how to fix these? If they can't be fixed I might go back and change him to be more like an Initiate from Yuri's Revenge... though I feel like that might fit a China faction better.

Here's my code:



;Microwave Ranger weapons
;------------------------------------------------------------------------------
Weapon  MicrowaveRangerVehicleDisabler
  PrimaryDamage         = 24.0
  PrimaryDamageRadius   = 0.0       ; 0 primary radius means "hits only intended victim"
  AttackRange           = 120.0
  DamageType            = SUBDUAL_VEHICLE
  DeathType             = NORMAL
  WeaponSpeed           = 999999.0          ; dist/sec (huge value == effectively instant)
  ;WeaponSpeed           = 10.0          ; dist/sec (huge value == effectively instant)
  LaserName             = MicrowaveDisableStream
  LaserBoneName         = MuzzleFX
  RadiusDamageAffects   = ALLIES ENEMIES NEUTRALS
  DelayBetweenShots     = 100               ; time between shots, msec
  ClipSize              = 0                    ; how many shots in a Clip (0 == infinite)
  ClipReloadTime        = 0              ; how long to reload a Clip, msec
  AntiAirborneVehicle   = No
  AntiAirborneInfantry  = No
  FireSound             = MicrowaveWeaponLoop
  FireSoundLoopTime = 120                ; loop the firing sound until there's this much delay between shots 
End

;------------------------------------------------------------------------------
Weapon  MicrowaveRangerBuildingDisabler
  PrimaryDamage         = 50.0
  PrimaryDamageRadius   = 0.0       ; 0 primary radius means "hits only intended victim"
  AttackRange           = 120.0
  DamageType            = SUBDUAL_BUILDING
  DeathType             = NORMAL
  WeaponSpeed           = 999999.0          ; dist/sec (huge value == effectively instant)
  ;WeaponSpeed           = 10.0          ; dist/sec (huge value == effectively instant)
  LaserName             = MicrowaveDisableStream
  LaserBoneName         = MuzzleFX
  RadiusDamageAffects   = ALLIES ENEMIES NEUTRALS
  DelayBetweenShots     = 100               ; time between shots, msec
  ClipSize              = 0                    ; how many shots in a Clip (0 == infinite)
  ClipReloadTime        = 0              ; how long to reload a Clip, msec
  AntiAirborneVehicle   = No
  AntiAirborneInfantry  = No
  FireSound             = MicrowaveWeaponLoop
  FireSoundLoopTime = 120                ; loop the firing sound until there's this much delay between shots 
End

;------------------------------------------------------------------------------
;Instructions:
;Place human within range of the rifle and center of your cross-hairs
;Set weapon to "high" and pull trigger
;Continue until your human is a screaming, flaming husk and enjoy.
;Caution! Product will be hot!

Weapon  MicrowaveRangerHumanReheater 
  PrimaryDamage         = 20.0 ; Toasty
  PrimaryDamageRadius   = 2.0       ; 0 primary radius means "hits only intended victim"
  AttackRange           = 120.0
  DamageType            = MICROWAVE ;We only wanna shoot humans with this weapon
  DeathType             = BURNED
  WeaponSpeed           = 999999.0          ; dist/sec (huge value == effectively instant)
  LaserName             = MicrowaveDisableStream
  LaserBoneName         = MuzzleFX
  RadiusDamageAffects   = ALLIES ENEMIES NEUTRALS
  DelayBetweenShots     = 100               ; time between shots, msec
  ClipSize              = 0                    ; how many shots in a Clip (0 == infinite)
  ClipReloadTime        = 0              ; how long to reload a Clip, msec
  AntiAirborneVehicle   = No
  AntiAirborneInfantry  = No
  FireSound = MicrowaveWeaponLoop
  FireSoundLoopTime = 120                ; loop the firing sound until there's this much delay between shots 
End


And the unit itself


;------------------------------------------------------------------------------
;Microwave Ranger cyborg
Object SupW_AmericaInfantryRanger

  ; *** ART Parameters ***
  SelectPortrait          = SARanger_L
  ButtonImage            = SARanger
  
  UpgradeCameo1 = Upgrade_AmericaRangerFlashBangGrenade
  UpgradeCameo2 = Upgrade_AmericaAdvancedTraining
  UpgradeCameo3 = Upgrade_InfantryCaptureBuilding
  UpgradeCameo4 = Upgrade_AmericaChemicalSuits
  ;UpgradeCameo5 = NONE
  
  Draw = W3DModelDraw ModuleTag_01

    OkToChangeModelColor = Yes

    ; this says "we don't use these condition states at all, so completely
    ; ignore them for purposes of matchmaking"... this is useful to help
    ; reduce the number of AliasConditionState clauses you must add in
    ; order to avoid ambiguity in some cases.
    IgnoreConditionStates = PREATTACK_A FIRING_A BETWEEN_FIRING_SHOTS_A RELOADING_A

    ; --- Idle
    DefaultConditionState
      Model             = AIRngr_SKN
      IdleAnimation     = AIRngr_SKL.AIRngr_STA 0 35
      IdleAnimation     = AIRngr_SKL.AIRngr_IDA
      IdleAnimation     = AIRngr_SKL.AIRngr_IDB
      AnimationMode     = ONCE
      WeaponFireFXBone  = PRIMARY Muzzle
      WeaponMuzzleFlash = PRIMARY MuzzleFX
	  WeaponLaunchBone  = PRIMARY Muzzle 
      WeaponFireFXBone  = SECONDARY Muzzle
	  WeaponMuzzleFlash = SECONDARY MuzzleFX
      WeaponLaunchBone  = SECONDARY Muzzle  	  
      WeaponFireFXBone  = TERTIARY  Muzzle
	  WeaponMuzzleFlash = TERTIARY  MuzzleFX
      WeaponLaunchBone  = TERTIARY  Muzzle
      TransitionKey     = TRANS_Stand

    End

    ConditionState      = REALLYDAMAGED
      IdleAnimation     = AIRngr_SKL.AIRngr_STB 0 35
      IdleAnimation     = AIRngr_SKL.AIRngr_IDC
      IdleAnimation     = AIRngr_SKL.AIRngr_IDD
      AnimationMode     = ONCE
      TransitionKey     = TRANS_StandInjured
    End

    TransitionState     = TRANS_Stand TRANS_StandInjured
      Animation         = AIRngr_SKL.AIRngr_SA2SB
      AnimationMode     = ONCE
    End

    ; --- attacking (Machine Gun)
    ConditionState      = USING_WEAPON_A
      Animation         = AIRngr_SKL.AIRngr_ATA
      AnimationMode     = LOOP
      TransitionKey     = TRANS_FiringA
    End

    ConditionState      = USING_WEAPON_A REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_ATA2
      AnimationMode     = LOOP
      TransitionKey     = TRANS_FiringAInjured
    End

    TransitionState     = TRANS_FiringA TRANS_FiringAInjured
      Animation         = AIRngr_SKL.AIRngr_A2WAA
      AnimationMode     = ONCE
    End

    TransitionState     = TRANS_Stand TRANS_FiringA
      Animation         = AIRngr_SKL.AIRngr_ATAST
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_FiringA TRANS_Stand
      Animation         = AIRngr_SKL.AIRngr_ATAED
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_StandInjured TRANS_FiringAInjured
      Animation         = AIRngr_SKL.AIRngr_S2WAA
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_FiringAInjured TRANS_StandInjured
      Animation         = AIRngr_SKL.AIRngr_WAA2S
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End
    
    TransitionState     = TRANS_Stand TRANS_Move
      Animation         = AIRngr_SKL.AIRngr_STA2RNA
      AnimationMode     = ONCE
    End

    ; --- attacking (Grenade Launcher)
    ConditionState      = PREATTACK_B 
      Animation         = AIRngr_SKL.AIRngr_ATBA
      AnimationMode     = ONCE
      TransitionKey     = TRANS_FiringB
    End
    AliasConditionState = PREATTACK_B MOVING
    AliasConditionState = PREATTACK_B FIRING_B
    AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B

    ConditionState      = FIRING_B
      Animation         = AIRngr_SKL.AIRngr_ATBB
      AnimationMode     = ONCE
      TransitionKey     = TRANS_FiringB
    End

    ConditionState      = BETWEEN_FIRING_SHOTS_B
      Animation         = AIRngr_SKL.AIRngr_ATBB
      AnimationMode     = MANUAL
      Flags             = START_FRAME_LAST
      TransitionKey     = TRANS_FiringB
      WaitForStateToFinishIfPossible = TRANS_FiringB
    End
    AliasConditionState = RELOADING_B

    TransitionState     = TRANS_Stand TRANS_FiringB
      Animation         = AIRngr_SKL.AIRngr_ATBST1
      AnimationMode     = ONCE
    End

    TransitionState     = TRANS_FiringB TRANS_Stand
      Animation         = AIRngr_SKL.AIRngr_ATBST2
      AnimationMode     = ONCE
    End

    ConditionState      = PREATTACK_B REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_ATB2A
      AnimationMode     = ONCE
      TransitionKey     = TRANS_FiringBInjured
    End
    AliasConditionState = PREATTACK_B MOVING REALLYDAMAGED
    AliasConditionState = PREATTACK_B FIRING_B REALLYDAMAGED
    AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B REALLYDAMAGED

    ConditionState      = FIRING_B REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_ATB2B
      AnimationMode     = ONCE
      TransitionKey     = TRANS_FiringBInjured
    End

    ConditionState      = BETWEEN_FIRING_SHOTS_B REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_ATB2B
      AnimationMode     = MANUAL
      Flags             = START_FRAME_LAST
      TransitionKey     = TRANS_FiringBInjured
      WaitForStateToFinishIfPossible = TRANS_FiringBInjured
    End
    AliasConditionState = RELOADING_B REALLYDAMAGED

    TransitionState     = TRANS_StandInjured TRANS_FiringBInjured
      Animation         = AIRngr_SKL.AIRngr_ATB2ST1
      AnimationMode     = ONCE
    End

    TransitionState     = TRANS_FiringBInjured TRANS_StandInjured
      Animation         = AIRngr_SKL.AIRngr_ATB2ST2
      AnimationMode     = ONCE
    End
	
	    ; --- attacking (Third weapon)
    ConditionState      = USING_WEAPON_C
      Animation         = AIRngr_SKL.AIRngr_ATA
      AnimationMode     = LOOP
      TransitionKey     = TRANS_FiringC
    End

    ConditionState      = USING_WEAPON_C REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_ATA2
      AnimationMode     = LOOP
      TransitionKey     = TRANS_FiringCInjured
    End

    TransitionState     = TRANS_FiringC TRANS_FiringCInjured
      Animation         = AIRngr_SKL.AIRngr_A2WAA
      AnimationMode     = ONCE
    End

    TransitionState     = TRANS_Stand TRANS_FiringC
      Animation         = AIRngr_SKL.AIRngr_ATAST
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_FiringC TRANS_Stand
      Animation         = AIRngr_SKL.AIRngr_ATAED
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_StandInjured TRANS_FiringCInjured
      Animation         = AIRngr_SKL.AIRngr_S2WAA
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_FiringCInjured TRANS_StandInjured
      Animation         = AIRngr_SKL.AIRngr_WAA2S
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End
    
    TransitionState     = TRANS_Stand TRANS_Move
      Animation         = AIRngr_SKL.AIRngr_STA2RNA
      AnimationMode     = ONCE
    End

    ; -- cross-attack transitions

    TransitionState     = TRANS_FiringA TRANS_FiringB
      Animation         = AIRngr_SKL.AIRngr_ATA2AB
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_FiringB TRANS_FiringA
      Animation         = AIRngr_SKL.AIRngr_ATA2AB
      AnimationMode     = ONCE_BACKWARDS
      AnimationSpeedFactorRange = 4 4
    End
	
	;--
	
    TransitionState     = TRANS_FiringA TRANS_FiringC
      Animation         = AIRngr_SKL.AIRngr_ATA2AB
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End
	
    TransitionState     = TRANS_FiringB TRANS_FiringC
      Animation         = AIRngr_SKL.AIRngr_ATA2AB
      AnimationMode     = ONCE_BACKWARDS
      AnimationSpeedFactorRange = 4 4
    End
	
	;--
	
    TransitionState     = TRANS_FiringC TRANS_FiringB
      Animation         = AIRngr_SKL.AIRngr_ATA2AB
      AnimationMode     = ONCE
      AnimationSpeedFactorRange = 4 4
    End

    TransitionState     = TRANS_FiringC TRANS_FiringA
      Animation         = AIRngr_SKL.AIRngr_ATA2AB
      AnimationMode     = ONCE_BACKWARDS
      AnimationSpeedFactorRange = 4 4
    End



    ; --- moving
    ConditionState      = MOVING
      Animation         = AIRngr_SKL.AIRngr_RNA 30
      AnimationMode     = LOOP
      Flags             = RANDOMSTART
      TransitionKey     = TRANS_Move
      ParticleSysBone   = None InfantryDustTrails
    End
    AliasConditionState = MOVING ATTACKING

    ConditionState      = MOVING REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_RNB 30
      AnimationMode     = LOOP
      Flags             = RANDOMSTART
      TransitionKey     = TRANS_Move
    End
    AliasConditionState = MOVING REALLYDAMAGED ATTACKING
    
    ; --- dying anims
    ConditionState      = DYING
      Animation         = AIRngr_SKL.AIRngr_DTA
      Animation         = AIRngr_SKL.AIRngr_DTB
      AnimationMode     = ONCE
      TransitionKey     = None
    End

    TransitionState     = TRANS_Dying TRANS_Flailing
      Animation         = AIRngr_SKL.AIRngr_ADTF1
      AnimationMode     = ONCE
    End

    ConditionState      = DYING EXPLODED_FLAILING
      Animation         = AIRngr_SKL.AIRngr_ADTF2
      AnimationMode     = LOOP
      TransitionKey     = TRANS_Flailing
    End

    ConditionState      = DYING EXPLODED_BOUNCING
      Animation         = AIRngr_SKL.AIRngr_ADTF3
      AnimationMode     = ONCE
      TransitionKey     = None
    End
    AliasConditionState = DYING SPLATTED

    ; --- cheering
    ConditionState      = SPECIAL_CHEERING
      Animation         = AIRngr_SKL.AIRngr_CHA
      AnimationMode     = LOOP
    End

    ConditionState      = SPECIAL_CHEERING REALLYDAMAGED
      Animation         = AIRngr_SKL.AIRngr_CHB
      AnimationMode     = LOOP
    End

    ; ----- PARACHUTING ANIMATIONS
    ConditionState      = FREEFALL
      Animation         = AIRngr_SKL.AIRngr_PFL
      AnimationMode     = LOOP
      TransitionKey     = TRANS_Falling
    End
    AliasConditionState = FREEFALL REALLYDAMAGED
    AliasConditionState = FREEFALL DYING
    ConditionState      = PARACHUTING
      Animation         = AIRngr_SKL.AIRngr_PHG
      AnimationMode     = LOOP
      Flags             = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
      TransitionKey     = TRANS_Chute
    End
    AliasConditionState = PARACHUTING REALLYDAMAGED
    AliasConditionState = PARACHUTING DYING
    TransitionState     = TRANS_Falling TRANS_Chute
      Animation         = AIRngr_SKL.AIRngr_POP
      AnimationMode     = ONCE
      Flags             = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
    End
    TransitionState     = TRANS_Chute TRANS_Stand
      Animation         = AIRngr_SKL.AIRngr_PTD
      AnimationMode     = ONCE
    End
    TransitionState     = TRANS_Chute TRANS_StandInjured
      Animation         = AIRngr_SKL.AIRngr_PTD
      AnimationMode     = ONCE
    End

    ; ------- Bldg-capture

    ConditionState      = UNPACKING
      Model             = AIRngr_F_SKN
      Animation         = AIRngr_F_SKL.AIRngr_F_FDP1
      AnimationMode     = ONCE
    End
    AliasConditionState = UNPACKING REALLYDAMAGED


    ConditionState      = RAISING_FLAG
      Model             = AIRngr_F_SKN
      Animation         = AIRngr_F_SKL.AIRngr_F_FDP2
      AnimationMode     = ONCE
      TransitionKey     = TRANS_Raising
    End
    AliasConditionState = RAISING_FLAG REALLYDAMAGED

    ConditionState      = PACKING
      Model             = AIRngr_F_SKN
      Animation         = AIRngr_F_SKL.AIRngr_F_FDP1
      AnimationMode     = ONCE_BACKWARDS
      Flags             = START_FRAME_LAST
      TransitionKey     = TRANS_Packing
    End
    AliasConditionState = PACKING REALLYDAMAGED

    TransitionState     = TRANS_Raising TRANS_Packing
      Model             = AIRngr_F_SKN
      Animation         = AIRngr_F_SKL.AIRngr_F_FDP2
      AnimationMode     = ONCE_BACKWARDS
      Flags             = START_FRAME_LAST
    End

    ; --- RAPPELLING ANIMATIONS
    ConditionState      = RAPPELLING
      Animation         = AIRngr_SKL.AIRngr_RPL1 ;30
      AnimationMode     = LOOP
      Flags             = RANDOMSTART
      TransitionKey     = TRANS_Rappelling
    End
    AliasConditionState = MOVING RAPPELLING

    TransitionState     = TRANS_Rappelling TRANS_Stand
      Animation         = AIRngr_SKL.AIRngr_RPL2
      AnimationMode     = ONCE
    End

    TransitionState     = TRANS_Rappelling TRANS_StandInjured
      Animation         = AIRngr_SKL.AIRngr_RPL2
      AnimationMode     = ONCE
    End

  End

  ; ***DESIGN parameters ***
  DisplayName         = OBJECT:Ranger
  Side                = AmericaSuperWeaponGeneral
  EditorSorting       = INFANTRY
  TransportSlotCount  = 1                 ;how many "slots" we take in a transport (0 == not transportable)
  
  WeaponSet
    Conditions = None 
    Weapon = PRIMARY MicrowaveRangerVehicleDisabler
	Weapon = SECONDARY MicrowaveRangerBuildingDisabler
	Weapon = TERTIARY MicrowaveRangerHumanReheater 
  End
  
  ;Grenades may be moved to a new Grenadier unit  - JCD
  
  ;WeaponSet
  ;  Conditions = PLAYER_UPGRADE 
  ;  Weapon = PRIMARY RangerAdvancedCombatRifle
  ;  Weapon = SECONDARY RangerFlashBangGrenadeWeapon
  ;  AutoChooseSources = PRIMARY FROM_SCRIPT FROM_AI DEFAULT_SWITCH_WEAPON
  ;  AutoChooseSources = SECONDARY FROM_SCRIPT FROM_AI
  ;  WeaponLockSharedAcrossSets = Yes ; This set is so similar to the default set that it can hold the weapon lock
 ; End
 
  ArmorSet
    Conditions      = None
    Armor           = HumanArmor
    DamageFX        = InfantryDamageFX
  End
  ArmorSet
    Conditions            = PLAYER_UPGRADE
    Armor                 = ChemSuitHumanArmor
    DamageFX              = None
  End
  VisionRange = 100
  ShroudClearingRange = 400
  Prerequisites
    Object = SupW_AmericaBarracks
  End
  BuildCost = 225
  BuildTime = 5.0          ;in seconds  
  
  ExperienceValue = 20 20 40 60    ;Experience point value at each level
  ExperienceRequired = 0 40 60 120  ;Experience points needed to gain each level
  IsTrainable = Yes             ;Can gain experience
  CrushableLevel      = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  CommandSet          = SupW_AmericaInfantryRangerCommandSet

  ; *** AUDIO Parameters ***
  VoiceSelect = RangerVoiceSelect
  VoiceMove = RangerVoiceMove
  VoiceGuard = RangerVoiceMove
  VoiceAttack = RangerVoiceAttack
  VoiceFear = RangerVoiceFear
  VoiceTaskComplete = RangerVoiceCaptureComplete

  UnitSpecificSounds
    VoiceEnter = RangerVoiceMove
    VoiceEnterHostile = RangerVoiceMove
    VoiceGarrison = RangerVoiceGarrison
    VoiceCreate         = RangerVoiceCreate
    VoiceSubdue         = RangerVoiceSubdue
    VoiceClearBuilding  = RangerVoiceClearBuilding
    VoiceGetHealed      = RangerVoiceMove
    VoicePrimaryWeaponMode = RangerVoiceModeGun
    VoiceSecondaryWeaponMode = RangerVoiceModeFlashBang
  End

  UnitSpecificFX
    ; These have the syntax of SomeNameSomewhereInCode = SomeNameSomewhereInLookupINIs
    CombatDropKillFX = FX_RangerCombatDropKill
  End

  ; *** ENGINEERING Parameters ***
  RadarPriority = UNIT
  KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY CAN_RAPPEL SCORE

  Behavior = CommandButtonHuntUpdate ModuleTag_02
  End

  Body = ActiveBody ModuleTag_03
    MaxHealth       = 180.0
    InitialHealth   = 180.0
  End

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

  Behavior = AutoFindHealingUpdate   ModuleTag_05 ; This update will have the unit go to a healing station if injured. jba 
    ScanRate = 1000 ; once a second.
    ScanRange = 300 ;
    NeverHeal = 0.85 ;  don't heal if we are > 85% healthy.
    AlwaysHeal = 0.25 ; if we get below 25%, find healing right away.
  End

  Behavior = AIUpdateInterface ModuleTag_06
    AutoAcquireEnemiesWhenIdle = Yes
  End
  Locomotor = SET_NORMAL BasicHumanLocomotor

  Behavior = PhysicsBehavior ModuleTag_07
    Mass = 5.0
  End

  Behavior = ProductionUpdate ModuleTag_08
    ; nothing
  End

  Behavior = CommandButtonHuntUpdate  ModuleTag_09 ; allows use of command button hunt script with this unit. 
  End

  ;Behavior = WeaponSetUpgrade ModuleTag_10
  ;  TriggeredBy = Upgrade_AmericaRangerFlashBangGrenade
  ;End
  

; --- begin Death modules ---
  Behavior = SlowDeathBehavior ModuleTag_Death01
    DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
    SinkDelay           = 3000
    SinkRate            = 0.5     ; in Dist/Sec
    DestructionDelay    = 8000
    FX                  = INITIAL FX_RangerDie
  End
  Behavior = SlowDeathBehavior ModuleTag_Death02
    DeathTypes          = NONE +CRUSHED +SPLATTED
    SinkDelay           = 3000
    SinkRate            = 0.5     ; in Dist/Sec
    DestructionDelay    = 8000
    FX                  = INITIAL FX_GIDieCrushed
  End
  Behavior = SlowDeathBehavior ModuleTag_Death03
    DeathTypes          = NONE +EXPLODED
    SinkDelay           = 3000
    SinkRate            = 0.5     ; in Dist/Sec
    DestructionDelay    = 8000
    FX                  = INITIAL FX_RangerDie
    FlingForce          = 8
    FlingForceVariance  = 3
    FlingPitch          = 60
    FlingPitchVariance  = 10
  End
  Behavior = SlowDeathBehavior ModuleTag_Death04
    DeathTypes          = NONE +BURNED
    DestructionDelay    = 0
    FX                  = INITIAL FX_DieByFireUSA
    OCL                 = INITIAL OCL_FlamingInfantry
  End
  Behavior = SlowDeathBehavior ModuleTag_Death05
    DeathTypes          = NONE +POISONED
    DestructionDelay    = 0
    FX                  = INITIAL FX_DieByToxinUSA
    OCL                 = INITIAL OCL_ToxicInfantry
  End
  
  Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
    DeathTypes          = NONE +POISONED_BETA
    DestructionDelay    = 0
    FX                  = INITIAL FX_DieByToxinUSA
    OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
  End
  Behavior = SlowDeathBehavior ModuleTag_Death07
    DeathTypes          = NONE +POISONED_GAMMA
    DestructionDelay    = 0
    FX                  = INITIAL FX_DieByToxinGLA
    OCL                 = INITIAL OCL_ToxicInfantryGamma
  End
; --- end Death modules ---

  Behavior = SquishCollide ModuleTag_12
    ;nothing
  End
  Behavior                = ArmorUpgrade ModuleTag_Armor01
    TriggeredBy           = Upgrade_AmericaChemicalSuits
  End

  Behavior = PoisonedBehavior ModuleTag_17
    PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
    PoisonDuration = 3000       ; ... for this long after last hit by poison damage
  End
 
  Behavior = SpecialAbility ModuleTag_18
    SpecialPowerTemplate      = SpecialAbilityRangerCaptureBuilding
    UpdateModuleStartsAttack  = Yes
    StartsPaused              = Yes ; Unpaused by upgrade module
    InitiateSound         = RangerVoiceCapture
  End
  Behavior = SpecialAbilityUpdate ModuleTag_19
    SpecialPowerTemplate  = SpecialAbilityRangerCaptureBuilding
    StartAbilityRange  = 5.0
    UnpackTime            = 3000  ; (changing this will scale anim speed)
    PreparationTime       = 20000 ; time to complete hack once prepared (changing this will scale anim speed)
    PackTime              = 2000  ; (changing this will scale anim speed)
    DoCaptureFX           = Yes
    AwardXPForTriggering  = 15
    ;SkillPointsForTriggering = ???  -- Dustin, fill me out if you want different balance values.
  End

  Behavior = UnpauseSpecialPowerUpgrade ModuleTag_20
    SpecialPowerTemplate = SpecialAbilityRangerCaptureBuilding
    TriggeredBy = Upgrade_InfantryCaptureBuilding
  End

  ;Behavior = LockWeaponCreate ModuleTag_21
  ;  SlotToLock = PRIMARY ; Prevents indeterminate state plus two unpickable weapons equaling no attack.
  ;End

  Geometry = CYLINDER
  GeometryMajorRadius = 7.0
  GeometryMinorRadius = 7.0
  GeometryHeight = 13.0

  GeometryIsSmall = Yes
  Shadow = SHADOW_DECAL
  ShadowSizeX = 14;
  ShadowSizeY = 14;
  ShadowTexture = ShadowI;
  BuildCompletion = APPEARS_AT_RALLY_POINT

End




  sshot497.bmp (6,076kb) downloaded 23 time(s).   sshot501.bmp (6,076kb) downloaded 21 time(s).   sshot502.bmp (6,076kb) downloaded 25 time(s).
Any old friends still on here can add me on discord @jcdenton2187. I'm far more likely to respond there.
Sponsor
SkyMix_RMT
7 years ago
Try replacing "LaserBoneName = MuzzleFX" with "LaserBoneName = Muzzle01" to fix the first issue.
Check out:
My Music  (Techno/House/Experimental)
My Website  (GeneralsCentral)
My Youtube Channel  (Inactive)
World Builder Community Discord 
Gameanater
  • Gameanater
  • 55.5% (Neutral)
  • General Topic Starter
7 years ago
Well that solved the drawing issue. I guess it's been so long since I've done modding that I forgot what I usually did for laser weapons. XD


I almost found a workaround for the garrison issue... But the Microwave Ranger is still helpless against them. He can technically attack garrisons but can't actually kill anything after I added "AllowAttackGarrisonedBldgs = Yes"

I honestly didn't expect it to do anything but I'm surprised it can technically attack since it deals zero damage to buildings.


I am having so much issue getting this guy to attack garrisons... I tried cloning the Dragon Tank weapon but that weapon hates hates hates being used by infantry even after replacing the locomotor with that of a missile's, and trying to make infantry vulnerable to KILL_GARRISONED damage KindOf just crashed the game. I didn't foresee having this much trouble with creating a Ranger with a Microwave Tank weapon but I should have figured since it already has three weapons that's why it has a burning field as its counter to infantry.

If I can get this guy to attack garrisons though I might try and make a copy of the successful weapon for the normal Microwave Tanks, which I've made able to disable vehicles already. Being able to directly attack infantry AND clear garrisons, AND diable vehicles, AND disable buildings might make the thing a worthwhile support unit.

EDIT: I'm honestly thinking maybe creating an invisible turret attached to his gun that does the building clearing? The only issues with that approach might be that he could fire at a garrison while moving and he also can't clear a building while garrisoned himself or inside a Humvee?

And... I just remembered, I hear turrets and their parents occupying a Firebase does not end well...
Any old friends still on here can add me on discord @jcdenton2187. I'm far more likely to respond there.
SkyMix_RMT
7 years ago
What if you try creating a DamageType just for you ranger, equal to MICROWAVE but with a different name. I believe the armor from buildings takes 0% damage from MICROWAVE DamageType, so all you gotta do is use one with a different name so that it uses the default value of 100% damage taken.
Check out:
My Music  (Techno/House/Experimental)
My Website  (GeneralsCentral)
My Youtube Channel  (Inactive)
World Builder Community Discord 
Gameanater
  • Gameanater
  • 55.5% (Neutral)
  • General Topic Starter
7 years ago
I didn't even know you could create new damage types. Sweet. Wouldn't your suggestion make the building itself take damage, though? What I want is for the weapon to just clear out the units in a garrison, not destroy it outright.
Any old friends still on here can add me on discord @jcdenton2187. I'm far more likely to respond there.
SkyMix_RMT
7 years ago
oh, I can't help you then, I don't know how garrison clearing weapons work. Good luck tho and I hope you find a solution.
Check out:
My Music  (Techno/House/Experimental)
My Website  (GeneralsCentral)
My Youtube Channel  (Inactive)
World Builder Community Discord 
klingondragon
7 years ago
I'd take a look at the tokin tank. Not sure how it does it, but there may be something there.
(walking home from work now, I'll take a look myself when I get home)
Gameanater
  • Gameanater
  • 55.5% (Neutral)
  • General Topic Starter
7 years ago

I'd take a look at the tokin tank. Not sure how it does it, but there may be something there.
(walking home from work now, I'll take a look myself when I get home)

Originally Posted by: KlingonDragon 



It does the same as the Dragon Tank.



  Behavior = MissileAIUpdate ModuleTag_05
    TryToFollowTarget = No 
    FuelLifetime = 350
    DetonateOnNoFuel = Yes
    InitialVelocity = 120                ; in dist/sec
    IgnitionDelay = 0
    DistanceToTravelBeforeTurning = 2
    GarrisonHitKillRequiredKindOf = INFANTRY
    GarrisonHitKillForbiddenKindOf = NONE
    GarrisonHitKillCount = 2
    GarrisonHitKillFX = FX_DragonFlameGarrisonBuildingHit
    DistanceToTargetForLock = 0  ; If it gets within 100 of the target, it kills the target.

  End


I've had no further luck. I attempted to copy this bit of code into the Microwave weapon object I had created but it doesn't seem to do anything to laser weapons.


I think what I'm going to do for both the Microwave Ranger and the Microwave Tank is combine the vehicle and building disablers into a projectile weapon that creates an EMP spheroid. Basically a non-missile version of the EMP Patriot weapon that deals like 0.00001 damage so it doesn't overlap with that and my planned EMP Defender. I might use HistoricWeaponBonus and have it fire very fast so it doesn't instantly shut down whatever it makes contact with.

Heck, this could make it more distinct from the ECM Tank since that will be able to shut down vehicles and buildings as well.
Any old friends still on here can add me on discord @jcdenton2187. I'm far more likely to respond there.
Gameanater
  • Gameanater
  • 55.5% (Neutral)
  • General Topic Starter
7 years ago
So I am in the process of doing this, and creating new EMPEffectSpheroids in System.ini. And oh my gosh... EMPs are way more complicated than I thought and all this weapon and object code is starting to make my head hurt. Heheheh.

I think I'm going to create my EMP Defender first since there's far less tweaking I gotta do with that. Then I'll come back and perfect my Microwave Ranger and redone Microwave Tanks. I shall update this thread with my results with the Microwave stuffs.
Any old friends still on here can add me on discord @jcdenton2187. I'm far more likely to respond there.
Zatsupachi
7 years ago
Have you taken a look at the actual weapon objects? Try to look at flashbang and add that property to the laser?
"It's precision_bomber."
Death Label HAS BEEN RELEASED(go get v0.99):
http://www.moddb.com/mods/death-label/downloads/death-label-ver-099 
Next Episode:
precision_bomber's Zero Hour SCIENCE!
Gameanater
  • Gameanater
  • 55.5% (Neutral)
  • General Topic Starter
7 years ago

Have you taken a look at the actual weapon objects? Try to look at flashbang and add that property to the laser?

Originally Posted by: Zatsupachi 



Yes I have. I tried cloning a portion of the Dragon Tank weapon and it did nothing.




;------------------------------------------------------------------------------
Weapon  MicrowaveRangerBuildingDisabler
  PrimaryDamage         = 50.0
  PrimaryDamageRadius   = 0.0       ; 0 primary radius means "hits only intended victim"
  AttackRange           = 120.0
  DamageType            = SUBDUAL_BUILDING
  DeathType             = BURNED
  WeaponSpeed           = 999999.0          ; dist/sec (huge value == effectively instant)
  ;WeaponSpeed           = 10.0          ; dist/sec (huge value == effectively instant)
  LaserName             = MicrowaveRangerAttackStream ;MicrowaveDisableStream
  LaserBoneName         = Muzzle01
  RadiusDamageAffects   = ALLIES ENEMIES NEUTRALS
  DelayBetweenShots     = 100               ; time between shots, msec
  ClipSize              = 0                    ; how many shots in a Clip (0 == infinite)
  ClipReloadTime        = 0              ; how long to reload a Clip, msec
  AntiAirborneVehicle   = No
  AntiAirborneInfantry  = No
  FireSound             = MicrowaveWeaponLoop
  FireSoundLoopTime = 120                ; loop the firing sound until there's this much delay between shots 
End

;------------------------------------------------------------------------------
;Instructions:
;Place human within range of the rifle and center of your cross-hairs
;Set weapon to "high" and pull trigger
;Continue until your human is a screaming, flaming husk and enjoy.
;Caution! Product will be hot!

Weapon  MicrowaveRangerHumanReheater 
  PrimaryDamage         = 20.0 ; Toasty
  PrimaryDamageRadius   = 2.0       ; 0 primary radius means "hits only intended victim"
  AttackRange           = 120.0
  DamageType            = MICROWAVE ;We only wanna shoot humans with this weapon
  DeathType             = BURNED
  WeaponSpeed           = 999999.0          ; dist/sec (huge value == effectively instant)
  LaserName             = MicrowaveRangerAttackStream ;MicrowaveDisableStream
  LaserBoneName         = Muzzle01
  RadiusDamageAffects   = ALLIES ENEMIES NEUTRALS
  DelayBetweenShots     = 100               ; time between shots, msec
  ClipSize              = 0                    ; how many shots in a Clip (0 == infinite)
  ClipReloadTime        = 0              ; how long to reload a Clip, msec
  AntiAirborneVehicle   = No
  AntiAirborneInfantry  = No
  FireSound = MicrowaveWeaponLoop
  FireSoundLoopTime = 120                ; loop the firing sound until there's this much delay between shots 
  AllowAttackGarrisonedBldgs  = Yes
End



- WeaponObjects.ini -



;------------------------------------------------------------------------------
Object MicrowaveRangerAttackStream
  ; *** ART Parameters ***
  Draw = W3DLaserDraw ModuleTag_01
    Texture = EXSineWave.tga
   
    Tile = Yes
    TilingScalar = .5
    ScrollRate = -10                       ;Scrolls the texture offset this fast -- towards(-) away(+)    
    NumBeams = 1                          ;Number of overlapping cylinders that make the beam. 1 beam will just use inner data. Current max: 10
    InnerBeamWidth = 8                    ;The total width of beam
    InnerColor = R:100 G:200 B:100 A:50   ;The inside color of the laser (hot)
    OuterBeamWidth = 5.0                  ;The total width of beam
    OuterColor = R:96 G:255 B:96  A:5     ;The outside color of the laser (cool)
 End


  KindOf = IMMOBILE
  ClientUpdate = LaserUpdate ModuleTag_02
    MuzzleParticleSystem = GenericGreenLaserFlare
    TargetParticleSystem = HackFlare
  End

  Behavior = DeletionUpdate ModuleTag_03
    MinLifetime = 126   ; min lifetime in msec
    MaxLifetime = 126   ; max lifetime in msec
  End
  
  Behavior = MissileAIUpdate ModuleTag_05
    ;TryToFollowTarget = Yes ;No 
    ;FuelLifetime = 350
    ;DetonateOnNoFuel = Yes
    ;InitialVelocity = 120                ; in dist/sec
    ;IgnitionDelay = 0
    ;DistanceToTravelBeforeTurning = 2
    GarrisonHitKillRequiredKindOf = INFANTRY
    GarrisonHitKillForbiddenKindOf = NONE
    GarrisonHitKillCount = 2
    GarrisonHitKillFX = FX_DragonFlameGarrisonBuildingHit
    DistanceToTargetForLock = 0  ; If it gets within 100 of the target, it kills the target.
  End
  
End

;------------------------------------------------------------------------------
Object MicrowaveRangerInfantryWeaponProjectile1

; Explanation - Particles can't do damage, so this is a fast shooting low 
; damage invisible missile launcher with a Microwave Tank beam trail for exhaust
; This is a modified version of DragonTankFlameProjectileUpgraded

  ; *** ART Parameters ***
  Draw = W3DModelDraw ModuleTag_01
    OkToChangeModelColor = Yes
    ConditionState = NONE
      Model = NULL 
    End
  End
  ; Must have a draw module to be allowed to draw detonation FX

  ; ***DESIGN parameters ***
  EditorSorting     = SYSTEM
  VisionRange       = 0.0  
  ArmorSet
    Conditions      = None
    Armor           = ProjectileArmor
    DamageFX        = None
  End

  ; *** ENGINEERING Parameters ***
  KindOf            = PROJECTILE
  Body              = ActiveBody ModuleTag_02
    MaxHealth       = 100.0
    InitialHealth   = 100.0
  End

  Behavior = DestroyDie ModuleTag_03
    ;nothing
  End
    
  Behavior = PhysicsBehavior ModuleTag_04
    Mass = 1
    AllowCollideForce = No  ; flames collide, but never apply forces when they do so
  End
  Behavior = MissileAIUpdate ModuleTag_05
    TryToFollowTarget = Yes ;No 
    FuelLifetime = 350
    DetonateOnNoFuel = Yes
    InitialVelocity = 120                ; in dist/sec
    IgnitionDelay = 0
    DistanceToTravelBeforeTurning = 2
    GarrisonHitKillRequiredKindOf = INFANTRY
    GarrisonHitKillForbiddenKindOf = NONE
    GarrisonHitKillCount = 2
    GarrisonHitKillFX = FX_DragonFlameGarrisonBuildingHit
    DistanceToTargetForLock = 0  ; If it gets within 100 of the target, it kills the target.

  End
  Locomotor = SET_NORMAL PatriotMissileLocomotorReallyFast ;DragonTankFlameLocomotor

  Behavior = BoneFXUpdate ModuleTag_06
    PristineParticleSystem1  = bone:NULL OnlyOnce:Yes  0  0 PSys:GenericGreenLaserFlare ; Covers gap at beginning of line
    PristineParticleSystem2  = bone:NULL OnlyOnce:Yes  0  0 PSys:HackFlare
    PristineParticleSystem3  = bone:NULL OnlyOnce:Yes  0  0 PSys:MicrowaveRangerTrail
    ;PristineParticleSystem4 = bone:NULL OnlyOnce:Yes  0  0 PSys:FlameThrowerTrail04Upgraded
    ;PristineParticleSystem5 = bone:NULL OnlyOnce:Yes  0  0 PSys:FlameThrowerTrail06Upgraded

    ;PristineParticleSystem6 = bone:NULL OnlyOnce:Yes  0  0 PSys:FlameThrowerSmoke01
  End

  Behavior = BoneFXDamage ModuleTag_07
    ;nothing
  End

  Geometry = Sphere
  GeometryIsSmall = Yes
  GeometryMajorRadius = 2.0

End



Both attempts failed.
Any old friends still on here can add me on discord @jcdenton2187. I'm far more likely to respond there.
Zatsupachi
7 years ago
this is the actual weapon from the microwave tank


;------------------------------------------------------------------------------
Weapon  MicrowaveTankBuildingClearer
  PrimaryDamage         = 1.0 ; Number of passengers to kill with each shot
  PrimaryDamageRadius   = 0.0       ; 0 primary radius means "hits only intended victim"
  AttackRange           = 125.0
  DamageType            = KILL_GARRISONED
  DeathType             = NORMAL
  WeaponSpeed           = 999999.0          ; dist/sec (huge value == effectively instant)
  LaserName             = MicrowaveDisableStream
  LaserBoneName         = WEAPON02
  RadiusDamageAffects   = ALLIES ENEMIES NEUTRALS
  DelayBetweenShots     = 100               ; time between shots, msec
  ClipSize              = 0                    ; how many shots in a Clip (0 == infinite)
  ClipReloadTime        = 0              ; how long to reload a Clip, msec
  AntiAirborneVehicle   = No
  AntiAirborneInfantry  = No
;  FireSound = AngryMobAmbientLoop
;  FireSoundLoopTime = 120                ; loop the firing sound until there's this much delay between shots 
End

checking microwave tank code, they don't disable vehicles, so you should have a weapon slot available maybe as a third firing mode?
"It's precision_bomber."
Death Label HAS BEEN RELEASED(go get v0.99):
http://www.moddb.com/mods/death-label/downloads/death-label-ver-099 
Next Episode:
precision_bomber's Zero Hour SCIENCE!