#**************************************************************************** #** #** File : /cdimage/lua/modules/aeonweapons.lua #** Author(s): John Comes, David Tomandl, Gordon Duclos #** #** Summary : Default definitions of Aeon weapons #** #** Copyright © 2005 Gas Powered Games, Inc. All rights reserved. #**************************************************************************** local WeaponFile = import('defaultweapons.lua') local CollisionBeamFile = import('defaultcollisionbeams.lua') local DisruptorBeamCollisionBeam = CollisionBeamFile.DisruptorBeamCollisionBeam local QuantumBeamGeneratorCollisionBeam = CollisionBeamFile.QuantumBeamGeneratorCollisionBeam local PhasonLaserCollisionBeam = CollisionBeamFile.PhasonLaserCollisionBeam local TractorClawCollisionBeam = CollisionBeamFile.TractorClawCollisionBeam local Explosion = import('defaultexplosions.lua') local KamikazeWeapon = WeaponFile.KamikazeWeapon local BareBonesWeapon = WeaponFile.BareBonesWeapon local DefaultProjectileWeapon = WeaponFile.DefaultProjectileWeapon local DefaultBeamWeapon = WeaponFile.DefaultBeamWeapon local EffectTemplate = import('EffectTemplates.lua') ADFReactonCannon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/reacton_cannon_muzzle_charge_01_emit.bp', '/effects/emitters/reacton_cannon_muzzle_charge_02_emit.bp', '/effects/emitters/reacton_cannon_muzzle_charge_03_emit.bp', '/effects/emitters/reacton_cannon_muzzle_flash_01_emit.bp',}, } ADFOverchargeWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.ACommanderOverchargeFlash01, } ADFTractorClaw = Class(DefaultBeamWeapon) { BeamType = TractorClawCollisionBeam, FxMuzzleFlash = {}, PlayFxBeamStart = function(self, muzzle) local target = self:GetCurrentTarget() if not target or EntityCategoryContains(categories.STRUCTURE, target) or EntityCategoryContains(categories.COMMAND, target) or EntityCategoryContains(categories.EXPERIMENTAL, target) or not EntityCategoryContains(categories.ALLUNITS, target) then return end DefaultBeamWeapon.PlayFxBeamStart(self, muzzle) self.TT1 = self:ForkThread(self.TractorThread, target) self:ForkThread(self.TractorWatchThread, target) end, OnLostTarget = function(self) self:AimManipulatorSetEnabled(true) DefaultBeamWeapon.OnLostTarget(self) end, TractorThread = function(self, target) self.unit.Trash:Add(target) local beam = self.Beams[1].Beam if not beam then return end local muzzle = self:GetBlueprint().MuzzleSpecial if not muzzle then return end local pos0 = beam:GetPosition(0) local pos1 = beam:GetPosition(1) local dist = VDist3(pos0, pos1) self.Slider = CreateSlider(self.unit, muzzle, 0, 0, dist, -1, true) WaitFor(self.Slider) target:AttachBoneTo(-1, self.unit, muzzle) self.AimControl:SetResetPoseTime(10) target:SetDoNotTarget(true) self.Slider:SetSpeed(15) self.Slider:SetGoal(0,0,0) WaitFor(self.Slider) if not target:IsDead() then target:Kill() end self.AimControl:SetResetPoseTime(2) end, TractorWatchThread = function(self, target) while not target:IsDead() do WaitTicks(1) end KillThread(self.TT1) self.TT1 = nil if self.Slider then self.Slider:Destroy() self.Slider = nil end self.unit:DetachAll(self:GetBlueprint().MuzzleSpecial or 0) self:ResetTarget() self.AimControl:SetResetPoseTime(2) end, } ADFTractorClawStructure = Class(DefaultBeamWeapon) { BeamType = TractorClawCollisionBeam, FxMuzzleFlash = {}, } ADFChronoDampener = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.AChronoDampener, FxMuzzleFlashScale = 0.5, CreateProjectileAtMuzzle = function(self, muzzle) end, } ADFDisruptorBeamWeapon = Class(DefaultBeamWeapon) { BeamType = DisruptorBeamCollisionBeam, FxMuzzleFlash = {}, } ADFLaserLightWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/flash_04_emit.bp' }, } ADFSonicPulsarWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/flash_02_emit.bp' }, FxMuzzleFlashScale = 0.5, } ADFLaserHeavyWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {}, } ADFGravitonProjectorWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.AGravitonBolterMuzzleFlash01, } ADFDisruptorCannonWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.ADisruptorCannonMuzzle01, } ADFDisruptorWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {}, } ADFCannonQuantumWeapon = Class(DefaultProjectileWeapon) { #FxMuzzleFlash = { '/effects/emitters/quantum_cannon_muzzle_flash_03_emit.bp' }, FxMuzzleFlash = EffectTemplate.AQuantumCannonMuzzle01, } ADFCannonOblivionWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = { '/effects/emitters/oblivion_cannon_flash_01_emit.bp', '/effects/emitters/oblivion_cannon_flash_02_emit.bp', '/effects/emitters/oblivion_cannon_flash_03_emit.bp', }, } AIFMortarWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {}, } AIFBombGravitonWeapon = Class(DefaultProjectileWeapon) {} AIFArtilleryMiasmaShellWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {}, CreateProjectileForWeapon = function(self, bone) local proj = self:CreateProjectile(bone) local damageTable = self:GetDamageTable() local blueprint = self:GetBlueprint() local data = { Instigator = self.unit, Damage = blueprint.DoTDamage, Duration = blueprint.DoTDuration, Frequency = blueprint.DoTFrequency, Radius = blueprint.DamageRadius, Type = 'Normal', DamageFriendly = blueprint.DamageFriendly, } proj:PassDamageData(damageTable) proj:PassData(data) return proj end, } AIFArtillerySonanceShellWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = { '/effects/emitters/aeon_sonance_muzzle_01_emit.bp', '/effects/emitters/aeon_sonance_muzzle_02_emit.bp', '/effects/emitters/aeon_sonance_muzzle_03_emit.bp', }, } AIFBombQuarkWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/antiair_muzzle_fire_02_emit.bp',}, } AANDepthChargeBombWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/antiair_muzzle_fire_02_emit.bp',}, CreateProjectileForWeapon = function(self, bone) local proj = self:CreateProjectile(bone) local damageTable = self:GetDamageTable() local blueprint = self:GetBlueprint() local data = { Army = self.unit:GetArmy(), Instigator = self.unit, StartRadius = blueprint.DOTStartRadius, EndRadius = blueprint.DOTEndRadius, DOTtype = blueprint.DOTtype, Damage = blueprint.DoTDamage, Duration = blueprint.DoTDuration, Frequency = blueprint.DoTFrequency, Type = 'Normal', } proj:PassDamageData(damageTable) proj:PassData(data) return proj end, } AIFSmartCharge = Class(DefaultProjectileWeapon) { CreateProjectileAtMuzzle = function(self, muzzle) local proj = DefaultProjectileWeapon.CreateProjectileAtMuzzle(self, muzzle) local tbl = self:GetBlueprint().DepthCharge proj:AddDepthCharge(tbl) end, } AANChronoTorpedoWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = { '/effects/emitters/default_muzzle_flash_01_emit.bp', '/effects/emitters/default_muzzle_flash_02_emit.bp', '/effects/emitters/torpedo_underwater_launch_01_emit.bp', }, } AIFQuasarAntiTorpedoWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {}, } AKamikazeWeapon = Class(KamikazeWeapon) { FxMuzzleFlash = {}, } AIFQuantumWarhead = Class(DefaultProjectileWeapon) { } AIFCommanderDeathWeapon = Class(BareBonesWeapon) { OnCreate = function(self) BareBonesWeapon.OnCreate(self) local myBlueprint = self:GetBlueprint() # The "or x" is supplying default values in case the blueprint doesn't have an overriding value self.Data = { NukeOuterRingDamage = myBlueprint.NukeOuterRingDamage or 10, NukeOuterRingRadius = myBlueprint.NukeOuterRingRadius or 40, NukeOuterRingTicks = myBlueprint.NukeOuterRingTicks or 20, NukeOuterRingTotalTime = myBlueprint.NukeOuterRingTotalTime or 10, NukeInnerRingDamage = myBlueprint.NukeInnerRingDamage or 2000, NukeInnerRingRadius = myBlueprint.NukeInnerRingRadius or 30, NukeInnerRingTicks = myBlueprint.NukeInnerRingTicks or 24, NukeInnerRingTotalTime = myBlueprint.NukeInnerRingTotalTime or 24, } end, OnFire = function(self) end, Fire = function(self) local myBlueprint = self:GetBlueprint() local myProjectile = self.unit:CreateProjectile( myBlueprint.ProjectileId, 0, 0, 0, nil, nil, nil):SetCollision(false) if self.Data then myProjectile:PassData(self.Data) end end, } ACruiseMissileWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = { '/effects/emitters/aeon_missile_launch_01_emit.bp', }, } ADFLaserHighIntensityWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.AHighIntensityLaserFlash01, } AAATemporalFizzWeapon = Class(DefaultProjectileWeapon) { FxChargeEffects = { '/effects/emitters/temporal_fizz_muzzle_charge_01_emit.bp', }, FxMuzzleFlash = { '/effects/emitters/temporal_fizz_muzzle_flash_01_emit.bp',}, ChargeEffectMuzzles = {}, PlayFxRackSalvoChargeSequence = function(self) DefaultProjectileWeapon.PlayFxRackSalvoChargeSequence(self) local army = self.unit:GetArmy() for keyb, valueb in self.ChargeEffectMuzzles do for keye, valuee in self.FxChargeEffects do CreateAttachedEmitter(self.unit,valueb,army, valuee) end end end, } AAASonicPulseBatteryWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/sonic_pulse_muzzle_flash_01_emit.bp',}, } AAAZealotMissileWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.CZealotLaunch01, } AAAAutocannonQuantumWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = {'/effects/emitters/quantum_displacement_cannon_flash_01_emit.bp',}, } AIFMissileTacticalSerpentineWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = { '/effects/emitters/aeon_missile_launch_02_emit.bp', }, } AQuantumBeamGenerator = Class(DefaultBeamWeapon) { BeamType = QuantumBeamGeneratorCollisionBeam, FxUpackingChargeEffects = {},#'/effects/emitters/quantum_generator_charge_01_emit.bp'}, FxUpackingChargeEffectScale = 1, PlayFxWeaponUnpackSequence = function( self ) local army = self.unit:GetArmy() local bp = self:GetBlueprint() for k, v in self.FxUpackingChargeEffects do for ek, ev in bp.RackBones[self.CurrentRackSalvoNumber].MuzzleBones do CreateAttachedEmitter(self.unit, ev, army, v):ScaleEmitter(self.FxUpackingChargeEffectScale) end end DefaultBeamWeapon.PlayFxWeaponUnpackSequence(self) end, } AAMSaintWeapon = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.ASaintLaunch01, } AAMWillOWisp = Class(DefaultProjectileWeapon) { FxMuzzleFlash = EffectTemplate.AAntiMissileFlareFlash, } ADFPhasonLaser = Class(DefaultBeamWeapon) { BeamType = CollisionBeamFile.PhasonLaserCollisionBeam, FxMuzzleFlash = {}, FxChargeMuzzleFlash = {}, FxUpackingChargeEffects = EffectTemplate.CMicrowaveLaserCharge01, FxUpackingChargeEffectScale = 1, PlayFxWeaponUnpackSequence = function( self ) local army = self.unit:GetArmy() local bp = self:GetBlueprint() for k, v in self.FxUpackingChargeEffects do for ek, ev in bp.RackBones[self.CurrentRackSalvoNumber].MuzzleBones do CreateAttachedEmitter(self.unit, ev, army, v):ScaleEmitter(self.FxUpackingChargeEffectScale) end end DefaultBeamWeapon.PlayFxWeaponUnpackSequence(self) end, }