*M@*5#JZhNOClqo2'y62bT"x(B,r-B7{ damageTypeClass = class'compDamageTypeChaingun'; -..\compMod\Classes\compProjectileChaingun.ucMjKm234e^cx(Bx(B#{ vehicleDamageModifier = .8; ,..\compMod\Classes\compDamageTypeBlaster.uc$L?& VOverlay material, if any, to be used when shield is active but has not been impacted 0 ALength of time that the hit material is displayed for on damage 1L,PaDSA:̯ijKԛKԛ {2rP=9X=9&..\compMod\Classes\compBurningArea.ucRbT;\q ͑#P=9X=92{ burningAreaClass = class'compBurningArea' +..\compMod\Classes\compBurnerProjectile.uc`:Jmc2|B Y2>.ќ|\|\|\!~nppy!{ driverWeaponClass=class'compMod.compPodWeapon'; Energy = 15; EnergyMax = 15; EnergyRegenPerSec = 3; Health=100//was 140 //JCA properties topSpeed = 120000;// AirSpeed = 10000; coastingDamping = -.5; reverseThrustForce = 1200; reverseForce = 1200; thrustCombinedReduction = .40; forwardforce = 3000;//thrusting + forward (divided by thrust combined reduction) forwardThrustForce = 6500;//holding forward down upThrustForce = 4500; //up thrust componant divethrustforce = 7500; //dive down strafethrustforce = 2000; //strafe linearbankscale = .4; //sideways tilt Angularbankscale = .50; FlightRotationEffectMagnitude = 650; cornerSlowDownSpeedCoefficient = 1//was 10 //unknown attribute // // DrawType=DT_Mesh // Mesh=SkeletalMesh'Vehicles.Pod' // TPCameraDistance=800 strafeThrustForce = 2000//4000 strafeForce = 5000//4000 // forwardThrustForce = 500 // forwardForce = 250 // upThrustForce = 500 // reverseForce = 150 // reverseThrustForce = 250 // diveThrustForce = 500 // bDrawDriverInTP = true // HavokDataClass=class'PodHavokData' // rootBone="Pod" // positions(0)=(type=VP_DRIVER,hideOccupant=false,occupantControllerState=TribesPlayerDriving,thirdPersonCamera=true,lookAtInheritPitch=true,occupantAnimation=Pod_Stand,occupantConnection=character) // driverWeaponClass=class'PodWeapon' // muzzleSockets(0)=muzzle1 // muzzleSockets(1)=muzzle2 // muzzleSockets(2)=muzzle3 // muzzleSockets(3)=muzzle4 // motorClass = class'PodMotor' // idleAnimation = idle // leftAnimation = strafeLeft // rightAnimation = strafeRight // forwardAnimation = throttleForward // backAnimation = throttleBack // upAnimation = thrust // downAnimation = dive // blendTime = 0.2 // engineDustTraceLength = 750 // engineDustGroundOffset = 100 // angularBankScale = 0.3 // linearBankScale = 0.05 // waterDamagePerSecond = 0 // navigationTurnRate = 10000 // throttleScale = 0.002 // thrustThresholdPitch = 12000 // driveYawCoefficient = 25 // drivePitchCoefficient = 25 // navigationMaximumPitch = 12000 // localizedName = "fighter" ..\compMod\Classes\compPod.ucP$pAG$pAQ$@@l$Dp$@Ej$ Ek$;Ed$Ef$Di$Do$`ER$>S$e$?h$>K$`Gg$?s.<$@F$B7AnHkAccw pP=9X=95{ ropeGlowMaterial = Shader'FX.ScreenShader' '..\compMod\Classes\compGrapplerRope.ucJ-QFfE@O X=9=9f{ //damageAmt = 0 radiusDamageAmt = 58 radiusDamageSize = 650 radiusDamageMomentum = 255000 ...\compMod\Classes\compSpinfusorProjectile.uc$hB$"D$yH 5 ;Overlay material to be used when shield has been impacted K/@kn2M \#{ vehicleDamageModifier = .6; -..\compMod\Classes\compDamageTypeChaingun.uc$?8?VIIEI-( P'OKb @4G '' h%"(T9U%9U.9?%a%61C-= \!m|& !w.!*ff>L=?D?9?,K ^#I<B< c"g "$9?%"~w*~ j 5  _ ==(& -'   TB2cBr*p9W's armor class is none'_r (a' dN-6% compMod.compArmorLight 6& compMod.compArmorMedium 6, compMod.compArmorHeavy  hcBr*p9W's armor class is none'_r (a'  %s, wzUcr*CW-'{r9:%$ }Xq2H[s|aP1o|\7+׈ii|\7+׈ii|\7+׈iiKԛNYKԛ_rKԛYKԛKԛKԛKԛKԛG6G6Kԛ ?u ?u ?uKԛVc^Vc^KԛKԛOaOaOaKԛűKԛAKԛtXKԛ11111T T )+)+)+)+1/,0-.ԙ>7{ ..\compMod\Classes\compmod.ucDaa D- 8= J9:9:$  w*w*##MovementCollisionDamage}  JSBCBY2] tsmBmBmBmBmBmBmB_pii_pp{ lightPassiveShield = 0.2 mediumPassiveShield = 0.2 heavyPassiveShield = 0.2 lightActiveShield = 0.60 mediumActiveShield = 0.70 heavyActiveShield = 0.85 //Grappler = class'compMod.compGrappler' fallDamageModifier = .8; $..\compMod\Classes\compCharacter.ucO$L?"g*A<J/N8  At   x-'-(o$$-(a(((z Lightlight O0z Mediummedium 7? @L @U O2`3$KW|\|\|\|\|\|\|\|\|\|\|\+׈i|\+׈iE4a{ rechargeTimeSeconds = 8 rampUpTimeSeconds = 0 durationSeconds = 1.5 deactivatingDuration = 0 lightActiveShield = 0.60 mediumActiveShield = 0.68 heavyActiveShield = 0.83 lightPassiveShield = 0.2 mediumPassiveShield = 0.2 heavyPassiveShield = 0.2 thirdPersonMesh = StaticMesh'Packs.ShieldPack' StaticMesh = StaticMesh'Packs.ShieldPackdropped' passiveFractionDamageBlocked = 0.5 activeFractionDamageBlocked = 0.8 hitStayTime = 0.5 %..\compMod\Classes\compShieldPack.ucZ$?[$L?\$?)$?*$L>%${.?'$L>&$zT?($L>V$AQ$S$?X$ %74-. w*,. ,** r| /a0 hgw*compMod.compCharactercompMod.compCharacter10/a0 w*r  >w*r  +10 EFTOYg06@6b6%66%66%66%6 F9?pa=%66JJ66r66666%69D 669D 66%69D 6969D 66666  b9-*3a/!C.L>fa/!E.0Aa/!?. 2a/!nacompMod.compCharacter a/!BacompMod.compShieldPackla/!L. A. a/!>. E.@?.Ea/!G..,-a/!8. ;.@A.?a/!=. *., .@?a/!6. ף;Ga/!A.Bza/!@. ף= a/!T.>. . #.E.% RHM8HHKa''' r3t6fn\$1 of4kL{ roundsPerSecond = 0.5 //aimClass = class'AimArcWeapons' projectileClass = class'compTankRound'; projectileVelocity = 6000; ammoUsage = 0; //was 1 dropVelocity = 2000; //was 1500 %..\compMod\Classes\compTankMortar.uc#$EY"cclass compPodRocket extends EquipmentClasses.ProjectileVehicleFighterRocket; iD w9* 5 J class compGrapplerRope extends Gameplay.GrapplerRope; var() Material ropeGlowMaterial; simulated function Material GetOverlayMaterial(int Index) { log("rope texuter overlay: " $ ropeGlowMaterial); return ropeGlowMaterial; } jL damageType, optional float projectileFactor) { if(Energy > Damage) { Energy -= Damage;//subtract damage from energy Health += Damage;//undo damage taken } else { Health += Energy;//Since energy < damage, just heal what we can Energy = 0;//we used all our shields } //super.TakeDamage(Damage, instigatedBy, hitlocation, momentum, damageType); super.PostTakeDamage(Damage, instigatedBy, hitlocation, momentum, damageType, projectileFactor); } simulated function tick(float deltaSeconds) { if(Energy < EnergyMax) { Energy += EnergyRegenPerSec * deltaSeconds; if(Energy > EnergyMax) Energy = EnergyMax; } super.tick(deltaSeconds); } //This is where compmod decides what class can pilot each vehicle. Not clean...but there is no nice way to edit the armorclasses allowed vehicles // Returns true if the armour of the specified character can occupy the specified position. simulated function bool canArmorOccupy(VehiclePositionType position, Character character) { if (character.armorClass == None) { warn(character.name $ "'s armor class is none"); return true; } //else if (position == VP_DRIVER) // return canArmourBeDriver(character.armorClass); //else // return canArmourBePassenger(character.armorClass); if(character.ArmorClass == class'EquipmentClasses.ArmorHeavy') return false; else return true; } function bool aimAdjustViewRotation() { return true; } simulated event updateCameraRotation(float deltaSeconds) { local float maxRotationDelta; local rotator requiredRotationDelta; local rotator actualrotationDelta; local rotator rotationNormal; local rotator currentCameraRotationNormal; rotationNormal = rotation; if (rotationNormal.Pitch > 16384) rotationNormal.Yaw += 32768; rotationNormal = Normalize(rotationNormal); if (rotationNormal.Yaw < 0) rotationNormal.Yaw += 65536; if (rotationNormal.Pitch < 0) rotationNormal.Pitch += 65536; currentCameraRotationNormal = Normalize(currentCameraRotation); if (currentCameraRotationNormal.Yaw < 0) currentCameraRotationNormal.Yaw += 65536; if (currentCameraRotationNormal.Pitch < 0) currentCameraRotationNormal.Pitch += 65536; maxRotationDelta = deltaSeconds * 70000; requiredRotationDelta = rotationNormal - currentCameraRotationNormal; if (requiredRotationDelta.Pitch > 32768) requiredRotationDelta.Pitch -= 65536; else if (requiredRotationDelta.Pitch < -32768) requiredRotationDelta.Pitch += 65536; if (requiredRotationDelta.Yaw > 32768) requiredRotationDelta.Yaw -= 65536; else if (requiredRotationDelta.Yaw < -32768) requiredRotationDelta.Yaw += 65536; if (requiredRotationDelta.Yaw < 0) actualrotationDelta.Yaw = max(-maxRotationDelta, requiredRotationDelta.Yaw); else actualrotationDelta.Yaw = min(maxRotationDelta, requiredRotationDelta.Yaw); if (requiredRotationDelta.Pitch < 0) actualrotationDelta.Pitch = max(-maxRotationDelta, requiredRotationDelta.Pitch); else actualrotationDelta.Pitch = min(maxRotationDelta, requiredRotationDelta.Pitch); currentCameraRotation.Pitch += actualrotationDelta.Pitch; currentCameraRotation.Yaw += actualrotationDelta.Yaw; } )o;+prope texuter overlay: 9V)) py`class compMod extends Gameplay.Mutator; var class rocketClass; function preBeginPlay() { local Gameplay.GameInfo C; local Gameplay.VehicleSpawnPoint VSP; foreach AllActors(class'Gameplay.GameInfo', C) if (C != None) { C.Default.DefaultPlayerClassName = "compMod.compCharacter"; C.DefaultPlayerClassName = "compMod.compCharacter"; } foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehiclePod') { VSP.vehicleClass = class'compmod.compPod'; } if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleTank') { VSP.vehicleClass = class'compmod.compTank'; } } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('ProjectileSniperRifle')) { ProjectileSniperRifle(Other).LifeSpan = 0.2; return Other; } if(Other.IsA('ProjectileMortar')) { ProjectileMortar(Other).LifeSpan = 11; return Other; } if(Other.IsA('WeaponChaingun')) { WeaponChaingun(Other).projectileClass = class'compProjectileChaingun'; return Other; } if(Other.IsA('Character')) { Other.Destroy(); return ReplaceWith(Other, "compMod.compCharacter"); } if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "compMod.compShieldPack"); } if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).ropeClass = class'compGrapplerRope'; WeaponGrappler(Other).projectileClass = class'compGrapplerProjectile'; return Other; } if(Other.IsA('WeaponSpinfusor')) { WeaponSpinfusor(Other).ProjectileClass = class'compSpinfusorProjectile'; WeaponSpinfusor(Other).ProjectileInheritedVelFactor = 0.75; WeaponSpinfusor(Other).ProjectileVelocity = 5300; return Other; } if(Other.IsA('WeaponEnergyBlade')) { WeaponEnergyBlade(Other).Range = 500; WeaponEnergyBlade(Other).damageAmt = 45; return Other; } if(Other.IsA('WeaponBurner')) { WeaponBurner(Other).ProjectileClass = class'compBurnerProjectile'; WeaponBurner(Other).energyUsage = 12; WeaponBurner(Other).ProjectileInheritedVelFactor = 0.5; return Other; } if(Other.IsA('WeaponBlaster')) { WeaponBlaster(Other).ProjectileClass = class'compBlasterProjectile'; WeaponBlaster(Other).numberOfBullets = 12; WeaponBlaster(Other).energyUsage = 0.75; return Other; } if(Other.IsA('WeaponBuckler')) { WeaponBuckler(Other).checkingDmgVelMultiplier = 0.005; return Other; } if(Other.IsA('ProjectileBuckler')) { ProjectileBuckler(Other).damageAmt = 38; return Other; } if(Other.IsA('WeaponRocketPod')) { WeaponRocketPod(Other).launchDelay = 0.08; return Other; } if(Other.IsA('WeaponVehicleTank')) { WeaponVehicleTank(Other).roundsPerSecond = 0.4; WeaponVehicleTank(Other).aimClass = class'AimArcWeapons'; WeaponVehicleTank(Other).projectileClass = class'compTankRound'; WeaponVehicleTank(Other).projectileVelocity = 6000; WeaponVehicleTank(Other).ammoUsage = 0; return Other; } return Other; } function string MutateSpawnCombatRoleClass(Character c) { c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compMod.compArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compMod.compArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compMod.compArmorHeavy", class'class')).default.AllowedWeapons; } $9u:{ 6te1P=9=9+..\compMod\Classes\compPlayerController.uc>class compPlayerController extends Engine.PlayerController; N#M6v+6FtX P=9^=9{ launchDelay = .08; $..\compMod\Classes\compRocketPod.ucW$ ף=x~z06w6LP=9=94..\compMod\Classes\compPlayerCharacterController.ucRclass compPlayerCharacterController extends Gameplay.PlayerCharacterController; @Rclass compPlayerCharacterController extends Gameplay.PlayerCharacterController; >class compPlayerController extends Engine.PlayerController; L damageType, optional float projectileFactor) { if(Energy > Damage) { Energy -= Damage; Health += Damage; } else { Health += Energy; Energy = 0; } super.PostTakeDamage(Damage, instigatedBy, hitlocation, momentum, damageType, projectileFactor); } simulated function tick(float deltaSeconds) { if(Energy < EnergyMax) { Energy += EnergyRegenPerSec * deltaSeconds; if(Energy > EnergyMax) Energy = EnergyMax; } super.tick(deltaSeconds); } simulated function bool canArmorOccupy(VehiclePositionType position, Character character) { if (character.armorClass == None) { warn(character.name $ "'s armor class is none"); return true; } if(character.ArmorClass == class'EquipmentClasses.ArmorHeavy') return false; else return true; } function bool aimAdjustViewRotation() { return true; } simulated event updateCameraRotation(float deltaSeconds) { local float maxRotationDelta; local rotator requiredRotationDelta; local rotator actualrotationDelta; local rotator rotationNormal; local rotator currentCameraRotationNormal; rotationNormal = rotation; if (rotationNormal.Pitch > 16384) rotationNormal.Yaw += 32768; rotationNormal = Normalize(rotationNormal); if (rotationNormal.Yaw < 0) rotationNormal.Yaw += 65536; if (rotationNormal.Pitch < 0) rotationNormal.Pitch += 65536; currentCameraRotationNormal = Normalize(currentCameraRotation); if (currentCameraRotationNormal.Yaw < 0) currentCameraRotationNormal.Yaw += 65536; if (currentCameraRotationNormal.Pitch < 0) currentCameraRotationNormal.Pitch += 65536; maxRotationDelta = deltaSeconds * 70000; requiredRotationDelta = rotationNormal - currentCameraRotationNormal; if (requiredRotationDelta.Pitch > 32768) requiredRotationDelta.Pitch -= 65536; else if (requiredRotationDelta.Pitch < -32768) requiredRotationDelta.Pitch += 65536; if (requiredRotationDelta.Yaw > 32768) requiredRotationDelta.Yaw -= 65536; else if (requiredRotationDelta.Yaw < -32768) requiredRotationDelta.Yaw += 65536; if (requiredRotationDelta.Yaw < 0) actualrotationDelta.Yaw = max(-maxRotationDelta, requiredRotationDelta.Yaw); else actualrotationDelta.Yaw = min(maxRotationDelta, requiredRotationDelta.Yaw); if (requiredRotationDelta.Pitch < 0) actualrotationDelta.Pitch = max(-maxRotationDelta, requiredRotationDelta.Pitch); else actualrotationDelta.Pitch = min(maxRotationDelta, requiredRotationDelta.Pitch); currentCameraRotation.Pitch += actualrotationDelta.Pitch; currentCameraRotation.Yaw += actualrotationDelta.Yaw; } y`class compMod extends Gameplay.Mutator; var class rocketClass; function preBeginPlay() { local Gameplay.GameInfo C; local Gameplay.VehicleSpawnPoint VSP; foreach AllActors(class'Gameplay.GameInfo', C) if (C != None) { C.Default.DefaultPlayerClassName = "compMod.compCharacter"; C.DefaultPlayerClassName = "compMod.compCharacter"; //C.PlayerControllerClassName = "compMod.compPlayerCharacterController"; //C.Default.PlayerControllerClassName = "compMod.compPlayerCharacterController"; } foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehiclePod') { VSP.vehicleClass = class'compmod.compPod'; } if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleTank') { VSP.vehicleClass = class'compmod.compTank'; } } } /*function Mutate(string MutateString, PlayerController Sender) { if ( NextMutator != None ) NextMutator.Mutate(MutateString, Sender); PlayerCharacterController(Sender).Level.Game.DefaultPlayerClassName = "compMod.compCharacter"; PlayerCharacterController(Sender).Level.Game.Default.DefaultPlayerClassName = "compMod.compCharacter"; PlayerCharacterController(Sender).Level.Game.PlayerControllerClassName = "compMod.PlayerCharacterController"; PlayerCharacterController(Sender).Level.Game.Default.PlayerControllerClassName = "compMod.PlayerCharacterController"; }*/ function Actor ReplaceActor(Actor Other) { //replace ammotypes first for speed if(Other.IsA('ProjectileSniperRifle')) { ProjectileSniperRifle(Other).LifeSpan = 0.2;//was .1 return Other; } if(Other.IsA('ProjectileMortar')) { ProjectileMortar(Other).LifeSpan = 11; //was 8 return Other; } //swap cg bullets if(Other.IsA('WeaponChaingun')) { WeaponChaingun(Other).projectileClass = class'compProjectileChaingun'; return Other; } //replace character if(Other.IsA('Character')) { Other.Destroy(); return ReplaceWith(Other, "compMod.compCharacter"); } //replace shield if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "compMod.compShieldPack"); ///PackShield(Other).durationSeconds = 8; //PackShield(Other).rechargeTimeSeconds = 1.5; //PackShield(Other).rampUpTimeSeconds = 0; //return Other; } //limit ammo for grappler if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).ropeClass = class'compGrapplerRope'; WeaponGrappler(Other).projectileClass = class'compGrapplerProjectile'; return Other; //Other.Destroy(); //return ReplaceWith(Other, "compMod.compGrappler"); } //change spinfusor if(Other.IsA('WeaponSpinfusor')) { WeaponSpinfusor(Other).ProjectileClass = class'compSpinfusorProjectile'; WeaponSpinfusor(Other).ProjectileInheritedVelFactor = 0.75; //was .4 WeaponSpinfusor(Other).ProjectileVelocity = 5300;//was 4700 return Other; } //change WeaponEnergyBlade if(Other.IsA('WeaponEnergyBlade')) { WeaponEnergyBlade(Other).Range = 500;//was 400 WeaponEnergyBlade(Other).damageAmt = 45;//was 25 return Other; } //change burner if(Other.IsA('WeaponBurner')) { //return ReplaceWith(Other, "compMod.compBurner"); WeaponBurner(Other).ProjectileClass = class'compBurnerProjectile'; //WeaponBurner(Other).ProjectileVelocity = 5000; //was 5000 WeaponBurner(Other).energyUsage = 12;//was 15 WeaponBurner(Other).ProjectileInheritedVelFactor = 0.5;//was 0.0 return Other; } /**** //change sniper rifle if(Other.IsA('WeaponSniperRifle')) { Other.Destroy(); WeaponSniperRifle(Other).ProjectileVelocity = 6000000; return ReplaceWith(Other, "compMod.compSniperRifle"); } ****/ //change blaster if(Other.IsA('WeaponBlaster')) { WeaponBlaster(Other).ProjectileClass = class'compBlasterProjectile'; WeaponBlaster(Other).numberOfBullets = 12; WeaponBlaster(Other).energyUsage = 0.75; return Other; } //change buckler if(Other.IsA('WeaponBuckler')) { WeaponBuckler(Other).checkingDmgVelMultiplier = 0.005;//was .0005 return Other; } if(Other.IsA('ProjectileBuckler')) { ProjectileBuckler(Other).damageAmt = 38;//was 34 return Other; } //change rocket pod if(Other.IsA('WeaponRocketPod')) { WeaponRocketPod(Other).launchDelay = 0.08; return Other; } //change pod weapon //if(Other.IsA('WeaponVehicleFighterRocket')) //{ // Other.Destroy(); // return ReplaceWith(Other, "compMod.compPodWeapon"); //WeaponVehicleFighterRocket(Other).projectileClass = class'compMod.compPodRocket'; //WeaponVehicleFighterRocket(Other).roundsPerSecond = 0.8; //was 2.2 //WeaponVehicleFighterRocket(Other).projectileVelocity = 8000; //was 13000 //WeaponVehicleFighterRocket(Other).projectileInheritedVelFactor = 0.4;//from 0 //return Other; //} //change tank weapon if(Other.IsA('WeaponVehicleTank')) { WeaponVehicleTank(Other).roundsPerSecond = 0.4; WeaponVehicleTank(Other).aimClass = class'AimArcWeapons'; WeaponVehicleTank(Other).projectileClass = class'compTankRound'; WeaponVehicleTank(Other).projectileVelocity = 6000; WeaponVehicleTank(Other).ammoUsage = 0; //was 1 return Other; } return Other; } //function string MutateSpawnLoadoutClass(Character c) //{ // return "compMod.compSpawnLoadout"; //} function string MutateSpawnCombatRoleClass(Character c) { //hack in the grappler //c.grapplerClass = class(DynamicLoadObject("compMod.compGrappler", class'Class')); c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compMod.compArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compMod.compArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compMod.compArmorHeavy", class'class')).default.AllowedWeapons; } tclass compGrapplerProjectile extends Gameplay.GrapplerProjectile; var float Health; var class ProjFXClass; var Emitter projfx; var float burningDamagerPerSecond; var bool bLastHook; var Grappler source; simulated function PostNetBeginPlay() { super.PostNetBeginPlay(); } simulated function Destroyed() { if(projfx!=none) { } Super.Destroyed(); } function PostTakeDamage(float Damage, Engine.Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional float projectileFactor) { log(health); Health -= Damage; log(health); if(Health <= 0) Destroy(); Super.PostTakeDamage(Damage, EventInstigator, HitLocation, Momentum, DamageType, projectileFactor); } simulated function simulatedAttach(Actor Other, vector TouchLocation) { Super.simulatedAttach(Other, TouchLocation); SetCollision(True, True, True); } class compRocketPod extends EquipmentClasses.WeaponRocketPod; simulated protected function FireWeapon() { log("fired rocketpod at " $ launchDelay); super.FireWeapon(); } t4class compShieldPack extends EquipmentClasses.PackShield; var (ShieldPack) float passiveFractionDamageBlocked; var (ShieldPack) float activeFractionDamageBlocked; var (compShieldPack) Material passiveIdleMaterial "Overlay material, if any, to be used when shield is active but has not been impacted"; var (compShieldPack) Material activeIdleMaterial "Overlay material, if any, to be used when shield is active but has not been impacted"; var (compShieldPack) Material passiveHitMaterial "Overlay material to be used when shield has been impacted"; var (compShieldPack) Material activeHitMaterial "Overlay material to be used when shield has been impacted"; var (compShieldPack) float hitStayTime "Length of time that the hit material is displayed for on damage"; var() float lightActiveShield; var() float lightPassiveShield; var() float mediumActiveShield; var() float mediumPassiveShield; var() float heavyActiveShield; var() float heavyPassiveShield; var Material currentIdle; var Material currentHit; var float currentHitTime; var float lastHealth; function startHeldByCharacter(Character holder) { heldBy = holder; playEffect(passiveEffectName); applyPassiveEffect(holder); holder.createThirdPersonMesh(class); bHeld = true; bDropped = false; SetPhysics(PHYS_None); SetDrawType(DT_None); bCollideWorld = false; SetCollision(false, false, false); if(holder.combatRole.default.armorClass.default.armorName == "Light") { log("light"); passiveFractionDamageBlocked = lightPassiveShield; activeFractionDamageBlocked = lightActiveShield; } else if(holder.combatRole.default.armorClass.default.armorName == "Medium") { log("medium"); passiveFractionDamageBlocked = mediumPassiveShield; activeFractionDamageBlocked = mediumActiveShield; } else { passiveFractionDamageBlocked = heavyPassiveShield; activeFractionDamageBlocked = heavyActiveShield; } } simulated function applyPassiveEffect(Character characterOwner) { currentIdle = passiveIdleMaterial; currentHit = passiveHitMaterial; characterOwner.shieldActive = true; characterOwner.shieldFractionDamageBlocked = passiveFractionDamageBlocked; } simulated function removePassiveEffect(Character characterOwner) { characterOwner.shieldActive = false; } simulated function startActiveEffect(Character characterOwner) { currentIdle = activeIdleMaterial; currentHit = activeHitMaterial; lastHealth = characterOwner.health; characterOwner.shieldFractionDamageBlocked = activeFractionDamageBlocked; } simulated function finishActiveEffect() { if (heldBy != None) heldBy.shieldFractionDamageBlocked = passiveFractionDamageBlocked; currentIdle = passiveIdleMaterial; currentHit = passiveHitMaterial; } simulated event Material GetOverlayMaterialForOwner(int Index) { if (currentHitTime <= 0) { return currentIdle; } else { return currentHit; } } simulated function tick(float deltaSeconds) { super.tick(deltaSeconds); if (currentHitTime > 0) currentHitTime -= deltaSeconds; if (localHeldBy != None) { if (lastHealth != localHeldBy.health) { if (lastHealth > localHeldBy.health) { currentHitTime = hitStayTime; } lastHealth = localHeldBy.health; } } } J// such as class compGrapplerRope extends Gameplay.GrapplerRope; var() Material ropeGlowMaterial; simulated function Material GetOverlayMaterial(int Index) { log("rope texuter overlay: " $ ropeGlowMaterial); return ropeGlowMaterial; } `Kclass compCharacter extends Gameplay.MultiplayerCharacter; var float fallDamageModifier; simulated event OnMovementCollisionDamage(float damage) { local class collisionDamageType; damage *= fallDamageModifier; if (blockMovementDamage) return; if (level.timeSeconds ProjFXClass; var Emitter projfx; var float burningDamagerPerSecond; var bool bLastHook; var Grappler source; simulated function PostNetBeginPlay() { super.PostNetBeginPlay(); // 01/02/05 //projfx = Spawn(ProjFXClass); // projfx.SetBase(self); } simulated function Destroyed() { if(projfx!=none) { //projfx.Disabled = true; //projfx.Destroy(); } Super.Destroyed(); } function PostTakeDamage(float Damage, Engine.Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional float projectileFactor) { log(health); Health -= Damage; log(health); if(Health <= 0) Destroy(); Super.PostTakeDamage(Damage, EventInstigator, HitLocation, Momentum, DamageType, projectileFactor); } simulated function simulatedAttach(Actor Other, vector TouchLocation) { //flashy effect //projfx = Spawn(ProjFXClass); //projfx.SetBase(self); Super.simulatedAttach(Other, TouchLocation); SetCollision(True, True, True); } `Kclass compCharacter extends Gameplay.MultiplayerCharacter; var float fallDamageModifier; /* var float lightActiveShield; var float mediumActiveShield; var float heavyActiveShield; var float lightPassiveShield; var float mediumPassiveShield; var float heavyPassiveShield; simulated function bool shouldBreakRope() { local int i; local float ropeLength; if (Level.NetMode == NM_Client) return false; ropeLength = VSize(proj.Location - rope.Location); if (Controller == None) { //Log("!!!!!!!!Break grapple: Controller was None"); return true; } if (bAttached && (proj.Base == None || proj.Base.bDeleteMe)) { //Log("!!!!!!!!Break grapple: Projectiles base was None or destroyed"); //one less ammo for(i = 0; i < NUM_WEAPON_SLOTS;i++) if( Grappler(weaponSlots[i]) != None) { Grappler(weaponSlots[i]).ammoCount--; if (Grappler(weaponSlots[i]).ammoCount <= 0) Grappler(weaponSlots[i]).setOutOfAmmo(); compGrappler(weaponSlots[i]).Penalize(); LOG("ammo--, now " $ weaponSlots[i].ammoCount); } return true; } if (ropeLength > grapplerClass.default.maxRopeLength) { //Log("!!!!!!!!Break grapple: Rope got too long"); for(i = 0; i < NUM_WEAPON_SLOTS;i++) if(Grappler(weaponSlots[i]) != None) { Grappler(weaponSlots[i]).ammoCount--; if (Grappler(weaponSlots[i]).ammoCount <= 0) Grappler(weaponSlots[i]).setOutOfAmmo(); compGrappler(weaponSlots[i]).Penalize(); LOG("ammo--, now " $ weaponSlots[i].ammoCount); } return true; } if (ropeObstructionTrace(ropeLength - grapplerClass.default.ropeNonCollisionLength)) { //Log("!!!!!!!!Break grapple: Rope was obstructed"); for(i = 0; i < NUM_WEAPON_SLOTS;i++) if(Grappler(weaponSlots[i]) != None) { Grappler(weaponSlots[i]).ammoCount--; if (Grappler(weaponSlots[i]).ammoCount <= 0) Grappler(weaponSlots[i]).setOutOfAmmo(); compGrappler(weaponSlots[i]).Penalize(); LOG("ammo--, now " $ weaponSlots[i].ammoCount); } return true; } return false; } */ // on movement collision damage. // this method is called by fusion whenever a collision in the movement // is suffiently large as to cause damage to the character. simulated event OnMovementCollisionDamage(float damage) { local class collisionDamageType; damage *= fallDamageModifier; if (blockMovementDamage) return; if (level.timeSeconds 0) currentHitTime -= deltaSeconds; if (localHeldBy != None) { if (lastHealth != localHeldBy.health) { if (lastHealth > localHeldBy.health) { currentHitTime = hitStayTime; } lastHealth = localHeldBy.health; } } } @class compBurningArea extends EquipmentClasses.ProjectileBurnerBurningArea; simulated function Tick(float Delta) { local Actor hook; local int i; for (i = 0; i < Touching.Length; ++i) { if (!Touching[i].bProjTarget) continue; hook = compGrapplerProjectile(Touching[i]); if (hook != None)//&& FastTrace(hook.Location)) { hook.TakeDamage(compGrapplerProjectile(hook).burningDamagerPerSecond * Delta, None, Location, Velocity, None); } } super.Tick(Delta); } \class compSpinfusorProjectile extends EquipmentClasses.ProjectileSpinfusor; Tclass compBurnerProjectile extends EquipmentClasses.ProjectileBurner; @class compBurningArea extends EquipmentClasses.ProjectileBurnerBurningArea; simulated function Tick(float Delta) { local Actor hook; local int i; for (i = 0; i < Touching.Length; ++i) { if (!Touching[i].bProjTarget) continue; hook = compGrapplerProjectile(Touching[i]); if (hook != None) { hook.TakeDamage(compGrapplerProjectile(hook).burningDamagerPerSecond * Delta, None, Location, Velocity, None); } } super.Tick(Delta); } Tclass compBurnerProjectile extends EquipmentClasses.ProjectileBurner; Tclass compBlasterProjectile extends EquipmentClasses.ProjectileBlaster; ^NW2ViP=9X=9Z{ //AllowedWeapons(0)=(typeClass=class'EquipmentClasses.WeaponEnergyBlade',quantity=1) AllowedWeapons(0)=(typeClass=class'compMod.compGrappler',quantity=8) AllowedWeapons(1)=(typeClass=class'EquipmentClasses.WeaponSpinfusor',quantity=20) AllowedWeapons(2)=(typeClass=class'EquipmentClasses.WeaponBuckler',quantity=1) AllowedWeapons(3)=(typeClass=class'EquipmentClasses.WeaponGrenadeLauncher',quantity=15) AllowedWeapons(4)=(typeClass=class'EquipmentClasses.WeaponRocketpod',quantity=72) AllowedWeapons(5)=(typeClass=class'EquipmentClasses.WeaponBlaster',quantity=0) AllowedWeapons(6)=(typeClass=class'EquipmentClasses.WeaponGrappler',quantity=8) AllowedWeapons(7)=(typeClass=class'EquipmentClasses.WeaponBurner',quantity=25) AllowedWeapons(8)=(typeClass=class'EquipmentClasses.WeaponChaingun',quantity=200) AllowedWeapons(9)=(typeClass=class'compMod.compBurner',quantity=25) AllowedGrenades=(typeClass=class'EquipmentClasses.WeaponHandGrenade',quantity=5) &..\compMod\Classes\compArmorMedium.uc Yf """""H""""" Z "Rclass compArmorMedium extends Gameplay.Armor; _PY2X"iP=9X=9i{ //AllowedWeapons(0)=(typeClass=class'EquipmentClasses.WeaponEnergyBlade',quantity=1) AllowedWeapons(0)=(typeClass=class'compMod.compSniperRifle',quantity=10) AllowedWeapons(1)=(typeClass=class'EquipmentClasses.WeaponSpinfusor',quantity=15) AllowedWeapons(2)=(typeClass=class'EquipmentClasses.WeaponSniperRifle',quantity=10) AllowedWeapons(3)=(typeClass=class'EquipmentClasses.WeaponGrenadeLauncher',quantity=10) AllowedWeapons(4)=(typeClass=class'EquipmentClasses.WeaponRocketpod',quantity=42) AllowedWeapons(5)=(typeClass=class'EquipmentClasses.WeaponBlaster',quantity=0) AllowedWeapons(6)=(typeClass=class'EquipmentClasses.WeaponGrappler',quantity=8) AllowedWeapons(7)=(typeClass=class'EquipmentClasses.WeaponBurner',quantity=20) AllowedWeapons(8)=(typeClass=class'EquipmentClasses.WeaponChaingun',quantity=150) AllowedWeapons(9)=(typeClass=class'compMod.compBurner',quantity=20) AllowedGrenades=(typeClass=class'EquipmentClasses.WeaponHandGrenade',quantity=5) %..\compMod\Classes\compArmorLight.uc Yf """ " "*""""" Z "Wclass compArmorLight extends Gameplay.Armor; a4[2Z6$iP=9X=9]{ //AllowedWeapons(0)=(typeClass=class'EquipmentClasses.WeaponEnergyBlade',quantity=1) AllowedWeapons(0)=(typeClass=class'compMod.compGrappler',quantity=8) AllowedWeapons(1)=(typeClass=class'EquipmentClasses.WeaponSpinfusor',quantity=25) AllowedWeapons(2)=(typeClass=class'EquipmentClasses.WeaponMortar',quantity=10) AllowedWeapons(3)=(typeClass=class'EquipmentClasses.WeaponGrenadeLauncher',quantity=20) AllowedWeapons(4)=(typeClass=class'EquipmentClasses.WeaponRocketpod',quantity=96) AllowedWeapons(5)=(typeClass=class'EquipmentClasses.WeaponBlaster',quantity=0) AllowedWeapons(6)=(typeClass=class'EquipmentClasses.WeaponGrappler',quantity=8) AllowedWeapons(7)=(typeClass=class'EquipmentClasses.WeaponBurner',quantity=30) AllowedWeapons(8)=(typeClass=class'EquipmentClasses.WeaponChaingun',quantity=300) AllowedWeapons(9)=(typeClass=class'CompMod.compBurner',quantity=30) AllowedGrenades=(typeClass=class'EquipmentClasses.WeaponHandGrenade',quantity=5) %..\compMod\Classes\compArmorHeavy.uc Yf """ ""`""""," Z "Sclass compArmorHeavy extends Gameplay.Armor; Tclass compBlasterProjectile extends EquipmentClasses.ProjectileBlaster; Rclass compArmorMedium extends Gameplay.Armor; Wclass compArmorLight extends Gameplay.Armor; i class compTank extends VehicleClasses.VehicleTank; //This is where compmod decides what class can pilot each vehicle. Not clean...but there is no nice way to edit the armorclasses allowed vehicles // Returns true if the armour of the specified character can occupy the specified position. simulated function bool canArmorOccupy(VehiclePositionType position, Character character) { if (character.armorClass == None) { warn(character.name $ "'s armor class is none"); return true; } //else if (position == VP_DRIVER) // return canArmourBeDriver(character.armorClass); //else // return canArmourBePassenger(character.armorClass); if(character.ArmorClass == class'EquipmentClasses.ArmorHeavy') return false; else return true; } Sclass compArmorHeavy extends Gameplay.Armor; Q@SK 7w* (& bdR[7 9?%  e\class compSpinfusorProjectile extends EquipmentClasses.ProjectileSpinfusor; i class compTank extends VehicleClasses.VehicleTank; simulated function bool canArmorOccupy(VehiclePositionType position, Character character) { if (character.armorClass == None) { warn(character.name $ "'s armor class is none"); return true; } if(character.ArmorClass == class'EquipmentClasses.ArmorHeavy') return false; else return true; } \class compDamageTypeBlaster extends EquipmentClasses.ProjectileDamageTypeBlaster; ^class compDamageTypeChaingun extends EquipmentClasses.ProjectileDamageTypeChaingun; Tclass compProjectileChaingun extends EquipmentClasses.ProjectileChaingun; \class compDamageTypeBlaster extends EquipmentClasses.ProjectileDamageTypeBlaster; ^class compDamageTypeChaingun extends EquipmentClasses.ProjectileDamageTypeChaingun; Tclass compProjectileChaingun extends EquipmentClasses.ProjectileChaingun; U class compPodWeapon extends EquipmentClasses.WeaponVehicleFighterRocket; simulated protected function FireWeapon() { local Vector fireLoc; local int i; for( i = 0; i < 4; i ++) { fireLoc = rookMotor.getProjectileSpawnLocation(); makeProjectile(getAimRotation(fireLoc), fireLoc); lastFireTime = Level.TimeSeconds; if (rookMotor == None) initialiseRookMotor(); firedEffectProcessing(); } bFiredWeapon = true; playCharacterFireAnim(); animClass.static.playEquippableAnim(self, fireAnimation, speedPackScale); demoFireCount++; if (demoFireCount==0) demoFireCount = 1; } U class compPodWeapon extends EquipmentClasses.WeaponVehicleFighterRocket; simulated protected function FireWeapon() { local Vector fireLoc; local int i; for( i = 0; i < 4; i ++) { fireLoc = rookMotor.getProjectileSpawnLocation(); makeProjectile(getAimRotation(fireLoc), fireLoc); lastFireTime = Level.TimeSeconds; if (rookMotor == None) initialiseRookMotor(); firedEffectProcessing(); } bFiredWeapon = true; playCharacterFireAnim(); animClass.static.playEquippableAnim(self, fireAnimation, speedPackScale); demoFireCount++; if (demoFireCount==0) demoFireCount = 1; } aclass compTankMortar extends EquipmentClasses.WeaponVehicleTank; Wclass compTankRound extends EquipmentClasses.ProjectileMortarTank; aclass compTankMortar extends EquipmentClasses.WeaponVehicleTank; Wclass compTankRound extends EquipmentClasses.ProjectileMortarTank; ttttsvsnsusssd{ysQsBsCsxsdEiEjsTsTsZs~s>scs=sps8s]s\s?sBtsLsa@Es@se@sb{zsV CsVt!@Es@sEsmsPB}sDs\wwsGsP@JCrCICvBNsWFiCsHxosGwB|sb{[sYCs6@rsa~ksYsXxpsRA|w~s[Bjsks`@TsJs^s_sCsOsFsZs]sAtvsisBsPsSs]xsYsUslxDsEx5sO}DsEsXx"s^C sSsj}bsQx"xxMCWxCvxx@exKxmsFDsCgxAxaCYGEqCGxOshCMwqEux@KCL@`CqDzCNDuxNED[xMxIABC@tE^D{xSHx@xRZrD7snx;CCcDgx9sYChx|AfsWs\CyxTsRsc~l~k~mFN1s_@_sL@ssTsosUwKds}xssdylecnKfc`if>PGgbLdgcpBhco`hag~h`Z[icmxi_yUj`BsjtaPk`qq`[Orbhlr^CJs`AgsaHDt`@bt @u>G^uWn|uZf[vZgyvXhVw\l uw\CUxYnrxazQyTnyVxKzShizUH{XBe{$@gRCg`|ZDQx^`~u|AJqMOJe N +sRS Qc[q^FL`)kRDIqlhKYT`}um`\_bR@A`'_^G} IZDFybe^adRGC2~&``%^`({HfX>Q~RF[]OyFlVcB`{Y_eyxPxW^DueAS`&q[O^S j`*J`I>g`OQe "_v]mhU>W}`{T`PO>~_[NJ]+}g.hdk L]aewBZ\>"fv`Ao\ UK:S`[|\s>TjO[9c y MA\3D]$e4za D<[ 52W HIAf4ah JI>e4cf4cH3`nSLlpf4]\ e4Ky]e4wKDe4]{$f4zXvf4VRvPh`f4K5x:e4WCEe4sZ;e4kM:f4Wx;f4kO*f4kzNzef4i_PHHf4nP4{~f4jy*e4kcdnNe4ile4nU+e4@ Ce4jC`@Om`RD|x@n^Ef4s|+f4@ oYIoYnN3e4skMe4u^2e4kS3f4s~Mf4uq2f4kf.e4l Q.f4l }fe4xi #e4na ff4xO #f4nG