*@CMrILkڤOI*MúCNoneEngineSpiderSteroidsCore OnslaughtSystem GetTeamNum TakeDamageFlying ReplaceWithSkinsBlowUp WarnTarget XWeaponsReplacedWeaponClassNameSpiderSteroidLayerPickupSpiderSteroidLayerMutSpiderSteroidReplacerBeginSteroidWeaponClassSpiderSteroidProjectileAcquireTargetBlueMineClass DestroyedTimerLanded GrowthRate EndStateSpiderSteroidThrowFirePostBeginPlay RedMineClassScurry ScurryingMaxSizeUserStartUp Description AdjustSpeed BallLauncher GrowDamageTeamNumInventoryTypeFireModeClassProjectileClass PickupClassHealthSpiderSteroidProjectileRED BaseChangeGrowDamageRadiusSpiderSteroidProjectileBLUE FriendlyName HurtRadius BeginStateCheckReplacementGetInventoryClassOverrideEffectIsRelevant bBlockActors Movement LightColorForce Collision LightingKarma GroupNameiXA ScriptTextZBaseL Location Velocity ReturnValueVGetPropertyTextMaxCollisionRadiusCollisionHeightMinPhysics DrawScaleDynamicLoadObjectRange WeaponPickup RangeVector MyDamageTypeStartSizeRangeStopAnimatingWeapon DamageRadius SetDrawScale WeaponFire ProjectileAmmo Inventory CullDistance Ammunition DamageType BestDist EmittersDriver WeaponClassMutatorEmitterPawn FireModeVehicleMomentumTransfer AmmoClassbSuperRelevantInventoryClassNameParticleEmitter instigatedBydist Momentum HitLocationDamage HitNormalOther Attached InstigatorOwnerActorNewLoc bTeamLockedbUseCollisionStaticMeshbNoFXYaw ExplodeSoundDamTypeLinkShaft xWeaponBase WeaponTypeWeapons WeaponEntryRoll WeaponLockerTexture TargetDistONSMineProjectileONSStationaryWeaponPawnRole ONSMineLayer bPoweredClassONSMineThrowFireONSMineLayerPickupONSGrenadeExplosionEffectDetectionTimer ScurrySpeedPackage TextBufferReplacedWeaponPickupClassName VMWeaponsTXSpiderMineTEXPlayerWeaponsGroupSpiderMineBLUEtex CurrentMines TargetPawnTargetDirectionObject FunctionScurryAnimRate bClosedDownStateRotatorVectorStructXGame StrPropertyStructPropertyArrayPropertyClassPropertyReplacedWeaponClassReplacedWeaponPickupClassReplacedAmmoPickupClassObjectPropertySteroidPickupClassNameSteroidDisplayTextSteroidDescTextFloatProperty BoolProperty IntProperty ByteProperty GrowEmitter "$:8@29 芈5f))܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W=܇W= ύ#ύ#ύ#ύ#ύ#ύ#ύ#˟ ύ#$ ׃?!$?'$B0$zC-$A8=6  !83"*!,%@B@<92zU9 ) 012eua (" Y@ ,.2 !g  Y*!\[=  + #&@@@% 7Z9?79?&9?7`@9?& G([?*/a8 ;D9?&9?,9?&;:w%Br.*w.*.-'r.*.- :r* 10 G}//----------------------------------------------------------- // //----------------------------------------------------------- class SpiderSteroidThrowFire extends ONSMineThrowFire; 'O(ReplacedWeaponClassName 9V% ,w*!w**w*# R9V GH//----------------------------------------------------------- // //----------------------------------------------------------- class SpiderSteroidProjectileRED extends SpiderSteroidProjectile; )6 g Io$&-a!#-(a>a9?,' G 8 .WBr*q!$9:9:$    8zD9?&9?,9?&6  aC9?&9?,9?&q!?6C 59P 6@6%a+a!?q! G16H (|9V9V GI//----------------------------------------------------------- // //----------------------------------------------------------- class SpiderSteroidProjectileBLUE extends SpiderSteroidProjectile; +5'$Sw.*r..w.*ya/!&'r SpiderSteroidLayer(w.*r" (w.*. % 7vr6 6  ' G./Qh .+w*r.*-( G 24Y* o$ G34^u   G5c a( G-vp ew*2r! r c$69?,aa ?9D9?79?&9?7`@9?&o$9?, % w*w w?r* r!9?9?%  Gdq//----------------------------------------------------------- // //----------------------------------------------------------- class SpiderSteroidProjectile extends ONSMineProjectile; var float GrowthRate, MaxSize, GrowDamage, GrowDamageRadius; var float Health; simulated function AdjustSpeed() { ScurrySpeed = default.ScurrySpeed / ((Attached.length * (DamageRadius/GrowDamageRadius)) + 1); ScurryAnimRate = default.ScurryAnimRate / ((Attached.length * (DamageRadius*3.5/GrowDamageRadius)) + 1); } function AcquireTarget() { local Pawn A; local float Dist, BestDist; TargetPawn = None; foreach VisibleCollidingActors(class'Pawn', A, (750.0 * (((GrowDamageRadius/DamageRadius) - 1)/4 + 1))) { if ( A != Instigator && A.Health > 0 && A.GetTeamNum() != TeamNum && (Vehicle(A) == None || Vehicle(A).Driver != None || Vehicle(A).bTeamLocked) && (ONSStationaryWeaponPawn(A) == None || ONSStationaryWeaponPawn(A).bPowered) ) { Dist = VSize(A.Location - Location); if (TargetPawn == None || Dist < BestDist) { TargetPawn = A; BestDist = Dist; } } } } simulated state Scurrying { simulated function Timer() { local vector NewLoc; local rotator TargetDirection; local float TargetDist; if (TargetPawn == None) GotoState('Flying'); if (Physics != PHYS_Walking) return; NewLoc = TargetPawn.Location - Location; TargetDist = VSize(NewLoc); if (TargetDist < (1000.0 * (((GrowDamageRadius/DamageRadius) - 1)/4 + 1))) { NewLoc.Z = 0; Velocity = Normal(NewLoc) * ScurrySpeed; if (TargetDist < (225.0 * (((GrowDamageRadius/DamageRadius) - 1)/4 + 1))) { GotoState('Flying'); Velocity *= 1.2; Velocity.Z = 350; WarnTarget(); } else { TargetDirection = Rotator(NewLoc); TargetDirection.Yaw -= 16384; TargetDirection.Roll = 0; SetRotation(TargetDirection); LoopAnim('Scurry', ScurryAnimRate); } } else GotoState('Flying'); } simulated event BaseChange() { Super.BaseChange(); if (Base != None && Vehicle(Base) == None) bUseCollisionStaticMesh = False; } simulated function Landed(vector HitNormal) { SetPhysics(PHYS_Walking); } function BeginState() { WarnTarget(); } simulated function EndState() { StopAnimating(); SetTimer(0.0, False); } Begin: SetPhysics(PHYS_Walking); if (bClosedDown) { PlayAnim('StartUp'); bClosedDown = false; sleep(0.25); } SetTimer(DetectionTimer / 2, true); } function TakeDamage(int Damage, Pawn InstigatedBy, vector HitLocation, vector Momentum, class DamageType) { local vector NewLoc; if(InstigatedBy != none && (Instigator == InstigatedBy || InstigatedBy.GetTeamNum() == Instigator.GetTeamNum()) && DamageType == class'DamTypeLinkShaft') { if(DrawScale < MaxSize) { NewLoc = Location; NewLoc.Z += 2*GrowthRate; SetDrawScale(DrawScale*GrowthRate); SetCollisionSize(CollisionRadius*GrowthRate,CollisionHeight*GrowthRate); SetLocation(NewLoc); CullDistance *= GrowthRate; GrowDamageRadius *= (GrowthRate); GrowDamage *= GrowthRate * 1.00; Damage = GrowDamage; MomentumTransfer *= GrowthRate; ScurrySpeed = default.ScurrySpeed / ((Attached.length * (DamageRadius/GrowDamageRadius)) + 1); ScurryAnimRate = default.ScurryAnimRate / ((Attached.length * (DamageRadius*3.5/GrowDamageRadius)) + 1); SetPhysics(PHYS_Falling); Health += 4; } return; } if ( Damage > 0 && InstigatedBy != None && (Instigator != InstigatedBy || DamageType != MyDamageType) && (Instigator == None || Instigator == InstigatedBy || InstigatedBy.GetTeamNum() != Instigator.GetTeamNum()) ) { Health -= Damage; if(Health < 0) BlowUp(Location); } } simulated function BlowUp(Vector HitLocation) { Destroy(); } simulated function Destroyed() { local Emitter GrowEmitter; local int i; local Vehicle V; if (Role == ROLE_Authority) { foreach VisibleCollidingActors(class'Vehicle', V, 400.0,,True) { //Stupid vehicles, think they're special. ;) //For some reason HurtRadius was doing jack dook to the vehicle it attacked directly. //Kinda weird when it won't destroy a vehicle hitting it directly, but it will //hitting the wall next to it. V.TakeDamage((Damage * (GrowDamageRadius/DamageRadius - 1)), Instigator, Location, vect(0,0,0), MyDamageType); } HurtRadius(GrowDamage, GrowDamageRadius, MyDamageType, MomentumTransfer, Location ); } //make sure anything attached gets blown up too for (i = 0; i < Attached.length; i++) Attached[i].TakeDamage(GrowDamage, Instigator, Attached[i].Location, vect(0,0,0), MyDamageType); PlaySound(ExplodeSound, SLOT_Misc); if ( !bNoFX && EffectIsRelevant(Location,false) ) { GrowEmitter = Spawn(class'ONSGrenadeExplosionEffect'); GrowEmitter.Emitters[0].StartSizeRange.X.Min = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[0].StartSizeRange.X.Min; GrowEmitter.Emitters[0].StartSizeRange.X.Max = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[0].StartSizeRange.X.Max; GrowEmitter.Emitters[1].StartSizeRange.X.Min = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[1].StartSizeRange.X.Min; GrowEmitter.Emitters[1].StartSizeRange.X.Max = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[1].StartSizeRange.X.Max; GrowEmitter.Emitters[2].StartSizeRange.X.Min = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[2].StartSizeRange.X.Min; GrowEmitter.Emitters[2].StartSizeRange.X.Max = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[2].StartSizeRange.X.Max; GrowEmitter.Emitters[3].StartSizeRange.X.Min = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[3].StartSizeRange.X.Min; GrowEmitter.Emitters[3].StartSizeRange.X.Max = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[3].StartSizeRange.X.Max; GrowEmitter.Emitters[4].StartSizeRange.X.Min = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[4].StartSizeRange.X.Min; GrowEmitter.Emitters[4].StartSizeRange.X.Max = GrowDamageRadius/DamageRadius * GrowEmitter.default.Emitters[4].StartSizeRange.X.Max; } if (Role == ROLE_Authority && SpiderSteroidLayer(Owner) != None) SpiderSteroidLayer(Owner).CurrentMines--; super(Projectile).Destroyed(); } A//----------------------------------------------------------- // //----------------------------------------------------------- class SpiderSteroidLayerPickup extends ONSMineLayerPickup; ; u//----------------------------------------------------------- // //----------------------------------------------------------- class SpiderSteroidLayer extends ONSMineLayer; 7? a G>29:9:$/a8 C 'm<9D9?&#103 % 7 89D  # a$- 7(a 66%66%66%66%66&66&66&66&66,66,66,66,66,66,66,66,66,66,66,66,9:9:$w. *.  Gq(//----------------------------------------------------------- // //----------------------------------------------------------- class MutSpiderSteroidReplacer extends Mutator; var string ReplacedWeaponClassName; var class ReplacedWeaponClass; var class ReplacedWeaponPickupClass; var class ReplacedAmmoPickupClass; var class SteroidWeaponClass; var string SteroidPickupClassName; var localized string SteroidDisplayText, SteroidDescText; function PostBeginPlay() { local int FireMode; local string ReplacedWeaponPickupClassName; ReplacedWeaponClass = class(DynamicLoadObject(GetPropertyText("ReplacedWeaponClassName"),class'Class')); ReplacedWeaponPickupClassName = string(ReplacedWeaponClass.default.PickupClass); for(FireMode = 0; FireMode<2; FireMode++) { if( (ReplacedWeaponClass.default.FireModeClass[FireMode] != None) && (ReplacedWeaponClass.default.FireModeClass[FireMode].default.AmmoClass != None) && (ReplacedWeaponClass.default.FireModeClass[FireMode].default.AmmoClass.default.PickupClass != None) ) { ReplacedAmmoPickupClass = class(ReplacedWeaponClass.default.FireModeClass[FireMode].default.AmmoClass.default.PickupClass); break; } } SteroidPickupClassName = string(SteroidWeaponClass.default.PickupClass); Super.PostBeginPlay(); } function bool CheckReplacement( Actor Other, out byte bSuperRelevant ) { local int i; local WeaponLocker L; bSuperRelevant = 0; if (xWeaponBase(Other) != none && xWeaponBase(Other).WeaponType == ReplacedWeaponClass) { xWeaponBase(Other).WeaponType = SteroidWeaponClass; } else if (Weapon(Other) != None) { if ( Other.IsA('BallLauncher') ) return true; if (Other.Class == ReplacedWeaponClass) { ReplaceWith(Other, "SpiderSteroidLayer"); return false; } } else if (WeaponPickup(Other) != none && Other.Class == ReplacedWeaponPickupClass) { ReplaceWith(Other, SteroidPickupClassName); return false; } else if (WeaponLocker(Other) != None) { L = WeaponLocker(Other); for (i = 0; i < L.Weapons.Length; i++) if (L.Weapons[i].WeaponClass == ReplacedWeaponClass) L.Weapons[i].WeaponClass = SteroidWeaponClass; } return true; } function string GetInventoryClassOverride(string InventoryClassName) { if (InventoryClassName ~= string(ReplacedWeaponClass)) return string(SteroidWeaponClass); return Super.GetInventoryClassOverride(InventoryClassName); } @A/2 Cu ȟ;;)))i|i|i|Kii|KinBJi|KinBJi|9<=:>;]Onslaught.ONSMineLayer ?]Spider Steroids2]Spider Steroids$]~Spider Mines grow with the Link Gun secondary, increasing their damage and damage radius.||2004 Rachel 'Angel Mapper' CordoneVVP`P{VPhPpPKP]PPjAgUkdjWgStZPYPaPiV PHPktOtLjGpygfPtPjPiPCkxPWd VhP\PptbPltUPgp^P_Pvl*lVl,V[VYPLkElmPNjHtDgeuctQwMlfpElDpza6lPPaIZtlPQPTPRagFP^a/I\PBtua5u}peu~a[aXat`v-tNtMwPvGauOv@v]PStTv(a aKpAaaaaaRaPba%Pda4PwPuu@x h1 0 u11w A2)B N2Cm[2  i2+j u27q A31@ N3l Z3.| F=aS=@@ t>1F @?CM? ' [?._ g?7u t?)r @@ - L@7| X@.J e@@J q@Cq ~@)c JA7bVA/o eA1n rAaA 1i`C+X IE .cUEgxFCn_HConH ! }HCr IICs UIC aI %ZmI vGK!C4H}NCdER C4SiU d|X-z`ZC68Z^C4TR_C5Vfb-/?|f-&{g3v ah-4$nh-.Ri r@j C4oqroC4La7t m7s z1I G C4@S $S>t w C DCC4|(G/I C{O