*@Q)"#RJqf%None compmod07Core Gameplay quantity typeClassEngineSystemEquipmentClassesTickcompShieldPackradiusDamageSize UnpoweredradiusDamageMomentumradiusDamageAmtweaponsBaseObjectClassesVehicleClasses VehicleClasscanArmorOccupyTriggerEffectEventAllowedGrenadesAllowedWeapons PowerLostTeamHealthQuantityGrenadesprojectileVelocityprojectileClassdamageTypeClass createRopedriverWeaponClass Allocate changeShield BeginStateUser damageAmtapplyPassiveEffect ShieldPackheavyActiveShield DestructedmediumActiveShield PlayBDAnim FireWeaponlightActiveShieldheavyPassiveShieldcanFire ammoCount ammoUsageroundsPerSecondprojectileInheritedVelFactormediumPassiveShieldlightPassiveShieldhasAmmo PlayEffectmaxAmmoUnpoweredLoopshouldBreakRopeconstruct_Name forwardForceforwardThrustForceupdateRespawnState reloadTime reloadTimerActive TopSpeed GravityScaledispatchMessage LifeSpanisAlive DrawScalecompArmorMediumcompArmorLight bProjTargetcompArmorHeavy DestroyedPostNetBeginPlayUnTriggerEffectEvent ReplaceActorGetOverlayMaterialcompSpawnRovercompSpawnTankWeaponVehicleTankcompAssaultShip ReplaceWithWeaponBlasterbCanBeDamagedSubmitKickVoteWeaponBucklerGetLocalPlayerControllerWeaponChaingun AirSpeedWeaponEnergyBladeWeaponGrapplerProjectileSniperRifleProjectileMortarcompSpinfusorProjectile shieldActiveburningAreaClassboostStrengthtreadVehicleGravityScaletreadGainFactor compTankthrottleToVelocityFactorPostTakeDamage treadLengthcompTankMortardeactivatingDuration hitStayTimeactiveFractionDamageBlockedBeginpassiveFractionDamageBlockedcollisionDamage launchDelayvehicleDamageModifier dropVelocity kickvoteConsoleCommandcompBlasterProjectileTouchUnpoweredStartUnpoweredStop ActivatethrustCombinedReductioncoastingDampingupdateCameraRotationOnMovementCollisionDamage onGrappledstrafeThrustForce strafeForce compBombcompTankRoundupThrustForce reverseForcereverseThrustForcediveThrustForce MovementangularBankScalelinearBankScale BreakGrapplefallDamageModifiercornerSlowDownSpeedCoefficientropeObstructionTrace LightColorupdateGrapplerRopeThirdPerson tickGrappler CollisionpickupCarryableisInRangeOfInventoryStationForcestartHeldByCharacter CharacterrechargeTimeSeconds FuseTimerKarmaplayEquippableAnimfiredEffectProcessing LightingcompBombWeaponcompBurnerProjectilecompBurningArea isPoweredplayCharacterFireAnimgetProjectileSpawnLocationcompCharactermakeProjectilecompDamageTypeBlastercompDamageTypeChaingun isDisabledcompGrapplerProjectilecompGrapplerRope compMPFlagcompPlayerCharacterControllercompPlayerControllercollisionDamageMagnitudeScalecompPodcompPodRocketfinishActiveEffectcompPodWeaponcreateThirdPersonMesh DamageTagDamagedcompProjectileChainguncompRocketPodinitialiseRookMotorsimulatedAttach compRoverremovePassiveEffect EndState ProjFXClassburningDamagerPerSecondaimAdjustViewRotationropeGlowMaterial ActivatingCharged isDamagedcompSpawnAssaultShip compSpawnPod activatePackMutateSpawnCombatRoleClasscanCharacterRespawnAtlocalizedNamestartActiveEffectattemptPickupotherClientOccupantLeaveoccupantEnterGetOverlayMaterialForOwnergetAimRotationServerRestartPlayerInVehicledeactivatePersonalShieldrampUpTimeSecondsshieldCharged PreBeginPlaydurationSeconds positionsRook energyUsagePodVehiclePositionPlayerCharacterController RoleDataRagdollPack occupantBuggy animClass aimClassJointControlledAircraft MPCarryableWeaponMPCarryableThrowerVehicle FlagStand chargeScale maxChargecapturableClassMPFlagProjectileBlaster EnergyBlade GrapplerBlaster RocketPodBuckler ScreenShaderFX_Ball_AliveFX BaseDevice bInitializedOwnerBase bDeleteMe Instigator TouchingIndexbCollisionDamageEnabled minimumCollisionDamageMagnitudeOtherfireAnimation TeamInfo numberInventoryStationPositions armorClassnumberOfBulletsbInitializationgrapplerClasspDeltaTimeChargeUpWeapon DeltaSeconds bIsSpectatorEventInstigator HitNormalTouchLocationspeedPackScale increaseAmmo armorNameDamage HitLocation MomentumprojectileFactorMessageBaseDevicePowerOffMessageBaseDevicePowerOn IFiringMotorMPCapturePointMovementCollisionDamageType BurningAreaGrapplerProjectile GrapplerRopeVehicleSpawnPointAssaultShipWeapon PodWeaponChargeUpWeaponAimArcWeapons EquippableEquippableAnimator CombatRoleMultiplayerCharacterClientSideCharacterArmorAnimationChannel Equipment chargeRate releaseDelaypeakChargeMaxHoldTimereelinLengthRatemaxRopeLengthropeNonCollisionLengthpositionIndexClientPositionDataHitLocNetModeSource TimeSecondsRotationNormalpassiveIdleMaterialactiveIdleMaterialpassiveHitMaterialactiveHitMaterialenergy+cannnotBeUsedWhileTouchingInventoryStationVoteReplicationInfopassiveEffectNamechargedEffectNameDefaultPlayerClassNameLevelPlayerControllerClassName Controller DamageTypeEmitterminCheckVelocity minCheckRatecheckingMultipliercheckingDmgVelMultipliercheckingDamageEDirectionTypemovementDamageTypeClass startLocfireLocvehicleRespawnIndex bKeepPawn bFiredWeapon lastFireTimedemoFireCount rookMotor ropeLengthcurrentCameraRotationmaxRotationDeltarequiredRotationDeltaactualrotationDeltacurrentCameraRotationNormalcollisionDamageTypeEClientPainTypebReelIn bAttachedropeNaturalLengthropeprojshieldFractionDamageBlocked GameInfo pseudoWeaponbDontAllowCarryablePickupsblockMovementDamagelastMovementDamageTimeinventoryStationI occupantTeamAnimationChannelIndexheldBy localHeldBycharacterOwnerpackActivatedTriggerholderrechargingAlphabHeld bDropped magnitude positionI oldOccupantbHasBeenOccupiedclientPositionsbSettledUpsideDown driverIndexVehiclePositionTypecarrierhealthMaximumtestLoc currentIdle currentHitcurrentHitTime lastHealthcombatRoleDataspawnStartTime LevelInfo ArmorHeavyWeaponSpinfusorMutatorProjectileMortarTankPlayerReplicationInfoProjectileSpinfusorProjectileVehicleFighterRocketProjectileDamageTypeChaingunProjectileDamageTypeBlasterProjectileChaingunProjectileBurnerBurningAreaProjectileBurner PackShieldWeaponVehicleAssaultShipBombWeaponSniperRifleWeaponRocketPod WeaponMortarWeaponHandGrenadeWeaponGrenadeLauncherShaderVotingReplicationInfoBase Projectile WeaponBurner Position TakeDamageWeaponVehicleFighterRocket SetAnimFrameStopAnimating VehicleTank VehicleBuggy VehiclePodVehicleAssaultShip SetDrawTypeBaseObjectVehicleSpawnTank"BaseObjectVehicleSpawnAssaultShipBaseObjectVehicleSpawnBuggyBaseObjectVehicleSpawnFighterPhysicsbCollideWorldMeshPawnPlayerControllerCollisionHeight MaterialbHiddenActor ScriptTextLabelProcessedTextiCZPitchYaw Location Rotation Velocity ReturnValue NormalizeDynamicLoadObjectRangeSoundRoleClassPackage TextBufferObjectEnum FunctionStateRotatorVectorhook tempFloatStructName StrPropertyStructPropertyArrayPropertyClassProperty NamePropertyObjectPropertyFloatPropertyprojfx BoolProperty bLastHook IntProperty EnergyMaxEnergyRegenPerSec ByteProperty rocketClassVSPTV_gui ui_watched2 TV_packsshieldpack_loop1T' M&@ZjEiud|a]4OBvR{ projFXClass = class'FX.FX_Ball_Alive' burningDamagerPerSecond = 55;//no burning damage after the area is gone, so this has to be enough bCanBeDamaged = True Health = 20 bProjTarget = true; /..\compmod07\Classes\compGrapplerProjectile.uc$A}~$\BVIw <&LCo'dE{ radiusDamageAmt = 120//was 140 radiusDamageSize = 1400; //was 1600 radiusDamageMomentum = 300000; //was 400000 fuseTimer = 0.0;//1.35; LifeSpan = 10; gravityScale = 1.2; //was 1500 &..\compmod07\Classes\compTankRound.ucY$$B $D $|HD$ AB$?HCdVWJ$QszvSEB Y2+dC|\|\|\p{ driverWeaponClass=class'compmod07.compBombWeapon'; forwardForce = 25000.00;//base: 22000.00 forwardThrustForce = 25000.00; //base: 22000.00 TopSpeed = 4000; //base: 2100 //lightRotationEffectMagnitude = 100.00; //base: 650.00 (..\compmod07\Classes\compAssaultShip.uc<$PF;$PFA$zEXkIno]B Y2/u.2ќ|\|\|\:k#{ //to reduce damage from ground collisionDamageMagnitudeScale = 0.00001 driverWeaponClass=class'compmod07.compPodWeapon'; //Energy = 15; //EnergyMax = 15; //EnergyRegenPerSec = 3; Health=110//was 140 //JCA properties topSpeed = 135000;// AirSpeed = 10000; coastingDamping = -.5; reverseThrustForce = 1200; reverseForce = 1200; thrustCombinedReduction = 1.0; forwardforce = 4000;//3000;//thrusting + forward (divided by thrust combined reduction) forwardThrustForce = 10000;//holding forward down while thrusting upThrustForce = 3500;//4500; //up thrust componant divethrustforce = 7500; //dive down strafethrustforce = 2500; //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" ..\compmod07\Classes\compPod.uc@$@EA$@E<$@F;$zED$ZEE$DF$DG$`E{$?|$I$?J$>n$'7A$HM$?I[$@F$BeJzB Y20m8¯ꘉ|\|\|\:{ "..\compmod07\Classes\compRover.uc[pp3Y,sO:z{ damageAmt = 10 radiusDamageAmt = 5 radiusDamageSize = 200 radiusDamageMomentum = 65000 LifeSpan = 2.7; &..\compmod07\Classes\compPodRocket.uc$@ $HC $}G$$ AD$,@@ VOverlay material, if any, to be used when shield is active but has not been impacted ? ;Overlay material to be used when shield has been impacted SGfFB Y2>wm|\|\|\b~{ health = 600; //was 800 //driverWeaponClass=class'compmod07.compTankMortar'; //Energy = 100; //EnergyMax = 100; //EnergyRegenPerSec = 20; //tank properties throttletovelocityfactor = 35;//was 25 treadgainfactor = .09;//was 0.04 treadVehicleGravityScale = 2;//was 3 treadLength = 230; //was 400 boostStrength = 16000000.000000;//was 15000000.000000 !..\compmod07\Classes\compTank.ucc$$tKi$fCg$ Be$Q=d$@$DA ;Overlay material to be used when shield has been impacted = VOverlay material, if any, to be used when shield is active but has not been impacted C ALength of time that the hit material is displayed for on damage BO`QABJ;jKԛKԛd|4O(..\compmod07\Classes\compBurningArea.ucG;EL~yrq6I]h"K_pa:V{ maxAmmo = 16; reloadTimer = .6; reloadTime = .6; ammoUsage = 1; ammoCount = 16; projectileClass = class'compmod07.compPodRocket'; roundsPerSecond = 6; //was 2.2 projectileVelocity = 13000;//7000; //was 13000 projectileInheritedVelFactor = 0.8;//from 0 &..\compmod07\Classes\compPodWeapon.uc7"?$?>$?/"0"1$@3$ KF2$L?mfs2J4e^c4OBv#{ vehicleDamageModifier = 1.0; ...\compmod07\Classes\compDamageTypeBlaster.ucMS )PT6UPNkMB.Y6 WR5_ˢa]ׄ|\|\|\|\|\|\4Oؒ#..\compmod07\Classes\compMPFlag.uc\T^h6X(JD{ reloadTime = 1.5; reloadTimer = 1.0; roundsPerSecond = 5; ammoUsage = 1; maxAmmo = 5; ammoCount = 5; projectileClass = class'compBomb'; projectileVelocity = 1; projectileInheritedVelFactor = 1.0; //dropVelocity = 2000; //was 1500 '..\compmod07\Classes\compBombWeapon.uc7"?$?>$?/"0"1$@Y$?2$?^BlY,^'Q{ DrawScale = 0.70; projectileClass = class'MortarProjectile' radiusDamageAmt = 55; radiusDamageSize = 900; radiusDamageMomentum = 30000; fuseTimer = 0.0; LifeSpan = 10; gravityScale = 1.5; !..\compmod07\Classes\compBomb.uc$\B $aD $`FF$333?B$?a`p N2[?Z$KW|\_p_p|\_p|\[?Z|\|\|\|\|\|\|\|\|\|\|\|\+׉i|\+׉i}{ 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 shieldCharged = Sound'TV_gui.ui_watched2' shieldActive = Sound'TV_packs.shieldpack_loop1' thirdPersonMesh = StaticMesh'Packs.ShieldPack' StaticMesh = StaticMesh'Packs.ShieldPackdropped' passiveFractionDamageBlocked = 0.5 activeFractionDamageBlocked = 0.8 hitStayTime = 0.5 '..\compmod07\Classes\compShieldPack.uco$?m$L?l$?,$?4$L>)${.?3$L>'$zT?-$L>SaX$AR$U$?k$\_`abcdefAhjov|l'y62bT":7{ damageTypeClass = class'compDamageTypeChaingun'; /..\compmod07\Classes\compProjectileChaingun.ucozmkgt2o \4OBv9{ vehicleDamageModifier = .65; //base was 0.5 right? /..\compmod07\Classes\compDamageTypeChaingun.ucr$ff&?cvrp%; G{ damageTypeClass = class'compDamageTypeBlaster'; damageAmt = 3; ...\compmod07\Classes\compBlasterProjectile.uc$$@@JvF! q!bin change shieldr {zLight._.bzMedium.`.c.a.d \class compDamageTypeBlaster extends EquipmentClasses.ProjectileDamageTypeBlaster; ^class compDamageTypeChaingun extends EquipmentClasses.ProjectileDamageTypeChaingun; Kclass 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); } R class compPlayerCharacterController extends Gameplay.PlayerCharacterController; exec function kickvote(string name) { //This hack allows a spectator to directly observe a player by pressing the vote to kick button. //Effectively disallows observers from voting to kick, of course. if(PlayerReplicationInfo.bIsSpectator) { log("Spectating " $name); ConsoleCommand("Spectate " $ name); } else if (voteReplicationInfo!=None) { log("sending kick vote: "$name); voteReplicationInfo.SubmitKickVote(name); } else log("none voteReplicationInfo!"); } function ServerRestartPlayerInVehicle(int vehicleRespawnIndex, bool bKeepPawn) { Log("ServerRestartPlayerInVehicle"); super.ServerRestartPlayerInVehicle(vehicleRespawnIndex, bKeepPawn); } nym\ 6xe1#4Oؒ-..\compmod07\Classes\compPlayerController.uc>class compPlayerController extends Engine.PlayerController; {L |K` wn* },h$T9U,9U.9?%a,kjhfe @%~n%^- 8= J9:9:$ $ w*w*$%##$6MovementCollisionDamaget%  B DiQ vw*r*Pm9j--isKw*a* &FC9h 9:9:$(&  Nr*'-/r*-'&'N&'( ~]y4]\a''' ^_kclass compCharacter extends Gameplay.MultiplayerCharacter; var float tempFloat; var float fallDamageModifier; var float lightPassiveShield; var float mediumPassiveShield; var float heavyPassiveShield; var float lightActiveShield; var float mediumActiveShield; var float heavyActiveShield; function bool shouldBreakRope() { local float ropeLength; if (Level.NetMode == NM_Client) return false; ropeLength = VSize(proj.Location - rope.Location); if (Controller == None) { return true; } if (bAttached && (proj.Base == None || proj.Base.bDeleteMe)) { return true; } if (ropeLength > grapplerClass.default.maxRopeLength) { return true; } if (ropeObstructionTrace(ropeLength - grapplerClass.default.ropeNonCollisionLength)) { return true; } return false; } simulated function tickGrappler(float Delta) { local float ropeLength; if (proj != None) { if (rope == None) createRope(); updateGrapplerRopeThirdPerson(); if (!shouldBreakRope()) { if (bAttached && bReelIn) ropeNaturalLength = FMax(0.0, ropeNaturalLength - grapplerClass.default.reelinLengthRate * Delta); } else breakGrapple(); } else if (rope != None) { rope.Destroy(); rope = None; } } simulated function createRope() { super.createRope(); } simulated event OnMovementCollisionDamage(float damage) { local class collisionDamageType; damage *= fallDamageModifier; if (blockMovementDamage) return; if (level.timeSeconds damageType, optional float projectileFactor) { local class pdt; local int positionI; local Controller killer; local Rook killerRook; local ModeInfo mode; local Rook instigatedRook; instigatedRook = Rook(instigatedBy); // catch case we have been torn off and this is called if (Level.NetMode == NM_Client) return; // disable invincibility if attacked by our own team if (instigatedRook != None && instigatedRook.team() == team()) bInvincible = false; // do nothing if in god mode or invincible if (InGodMode() || bInvincible) return; pdt = class(damageType); if (pdt != None) Damage *= pdt.default.vehicleDamageModifier; //shield code 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 } // avoid damage healing the car if (Damage < 0) return; // vehicle is dead if ((Health - Damage) <= 0) { aboutToDie(); // have all occupants leave for (positionI = 0; positionI < positions.length; ++positionI) { if (positions[positionI].occupant != None) driverLeave(true, positionI); } // Notify mode for stat-tracking purposes mode = ModeInfo(Level.Game); if (mode != None) { mode.OnVehicleDestroyed(instigatedBy, self, damageType); } // Remove dead vehicle's from other AI's VisionNotifier's // (maybe to be consistent with Pawn's postTakeDamage function we should call Died() here) Level.Game.NotifyKilled(instigatedBy.Controller, Controller, self); // emit death message if (instigatedBy != None) killer = instigatedBy.GetKillerController(); if (killer!= None && Killer.Pawn != None) { killerRook = Rook(Killer.Pawn); if (killerRook != None) dispatchMessage(new class'MessageDeath'(killerRook.getKillerLabel(), label, killer.Pawn.PlayerReplicationInfo, None)); else dispatchMessage(new class'MessageDeath'(killer.Pawn.label, label, killer.Pawn.PlayerReplicationInfo, None)); } else dispatchMessage(new class'MessageDeath'(self.label, label, None, None)); TriggerEffectEvent('VehicleDestroyed'); } Super.PostTakeDamage(Damage, instigatedBy, hitlocation, momentum, damageType, projectileFactor); } function tick(float deltaSeconds) { if(Energy < EnergyMax) Energy += EnergyRegenPerSec * deltaSeconds; else 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; } simulated event collisionDamage(float magnitude) { if (bCollisionDamageEnabled && magnitude >= minimumCollisionDamageMagnitude) { //apply damage on the server if (ROLE == ROLE_Authority) TakeDamage(collisionDamageMagnitudeScale * magnitude, self, Location, vect(0,0,0), class'DamageType'); } } vYlV06Juü+OU#4Oؒ6..\compmod07\Classes\compPlayerCharacterController.ucLDclass compMPFlag extends Gameplay.MPFlag; singular function Touch(Actor Other) { local Character c; local GrapplerProjectile p; local vector hitLoc, hitNormal, startLoc, testLoc; p = GrapplerProjectile(Other); if (p != None) { log("flag grappled"); onGrappled(Character(p.instigator)); return; } c = Character(Other); if (c == None || c.controller == None || bHidden || !c.isAlive() || carrier != None || c.bDontAllowCarryablePickups || c.Physics == PHYS_None || !bInitialized) { return; } startLoc = c.Location - Normal(c.Location - Location) * 10; testLoc = Location; testLoc.z += CollisionHeight; if (Trace(hitLoc, hitNormal, startLoc, testLoc, false) != None) { return; } attemptPickup(c); } 5w ` .5Gw *flag grappled.  .5r*r*-E w*-9:9:$ - 6  9?, 6SwaVU6(* K "4   % 74 -. w*,.m4** 4 Dclass compMPFlag extends Gameplay.MPFlag; singular function Touch(Actor Other) { local Character c; local GrapplerProjectile p; local vector hitLoc, hitNormal, startLoc, testLoc; p = GrapplerProjectile(Other); if (p != None) { log("flag grappled"); //Character(p.Instigator).detachGrapple(); onGrappled(Character(p.instigator)); return; } c = Character(Other); if (c == None || c.controller == None || bHidden || !c.isAlive() || carrier != None || c.bDontAllowCarryablePickups || c.Physics == PHYS_None || !bInitialized) { //Log("Unable to pickup "$self$" probably due to "$bInitialized); return; } // Don't allow picking up through geometry // TODO: Unfortunately this doesn't fully solve the case of energy barriers where // the player can be standing inside one startLoc = c.Location - Normal(c.Location - Location) * 10; testLoc = Location; testLoc.z += CollisionHeight; if (Trace(hitLoc, hitNormal, startLoc, testLoc, false) != None) { //Log("Not allowing pickup of "$self$" due to Trace"); return; } //Log(self$" attempting pickup by "$c); attemptPickup(c); } ~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); } Vclass compBurnerProjectile extends EquipmentClasses.ProjectileBurner; ZS. 5 zwclass compmod07 extends Gameplay.Mutator; var class rocketClass; function preBeginPlay() { local Gameplay.GameInfo C; local Gameplay.VehicleSpawnPoint VSP; local Gameplay.MPCapturePoint flagStand; log("************************"); log("*** CompMod ***"); log("************************"); foreach AllActors(class'Gameplay.GameInfo', C) if (C != None) { C.Default.DefaultPlayerClassName = "compmod07.compCharacter"; C.DefaultPlayerClassName = "compmod07.compCharacter"; C.PlayerControllerClassName = "compmod07.compPlayerCharacterController"; C.Default.PlayerControllerClassName = "compmod07.compPlayerCharacterController"; } foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehiclePod') { VSP.vehicleClass = class'compmod07.compPod'; } else if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleTank') { VSP.vehicleClass = class'compmod07.compTank'; } else if (VSP!= None && VSP.vehicleClass == class'VehicleClasses.VehicleBuggy') { VSP.vehicleClass = class'compmod07.compRover'; } else if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleAssaultShip') { VSP.vehicleClass = class'compmod07.compAssaultShip'; } } foreach AllActors(class'Gameplay.MPCapturePoint', flagStand) if (flagStand != None) { flagStand.capturableClass = class'compmod07.compMPFlag'; } } /*function Mutate(string MutateString, PlayerController Sender) { if ( NextMutator != None ) NextMutator.Mutate(MutateString, Sender); PlayerCharacterController(Sender).Level.Game.DefaultPlayerClassName = "compmod07.compCharacter"; PlayerCharacterController(Sender).Level.Game.Default.DefaultPlayerClassName = "compmod07.compCharacter"; PlayerCharacterController(Sender).Level.Game.PlayerControllerClassName = "compmod07.PlayerCharacterController"; PlayerCharacterController(Sender).Level.Game.Default.PlayerControllerClassName = "compmod07.PlayerCharacterController"; }*/ function Actor ReplaceActor(Actor Other) { //replace ammotypes first for speed if(Other.IsA('ProjectileSniperRifle')) { ProjectileSniperRifle(Other).LifeSpan = 0.15;//was .1 return Other; } //change sniper rifle /*else if(Other.IsA('WeaponSniperRifle')) { //Other.Destroy(); //WeaponSniperRifle(Other).ProjectileVelocity = 6000000; //return ReplaceWith(Other, "compmod07.compSniperRifle"); }*/ else if(Other.IsA('ProjectileMortar')) { ProjectileMortar(Other).LifeSpan = 12; //was 8 return Other; } //swap cg bullets else if(Other.IsA('WeaponChaingun')) { WeaponChaingun(Other).projectileClass = class'compProjectileChaingun'; return Other; } //replace character else if(Other.IsA('Character')) { Other.Destroy(); return ReplaceWith(Other, "compmod07.compCharacter"); } //replace shield /*else if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "compmod07.compShieldPack"); }*/ //edit grappler else if(Other.IsA('WeaponGrappler')) { //WeaponGrappler(Other).ropeClass = class'compGrapplerRope'; WeaponGrappler(Other).projectileClass = class'compGrapplerProjectile'; //WeaponGrappler(Other).ammoUsage = 0; return Other; } //change buckler else if(Other.IsA('WeaponBuckler')) { WeaponBuckler(Other).checkingDamage = 0;//15 WeaponBuckler(Other).checkingDmgVelMultiplier = 0;//0.01 WeaponBuckler(Other).checkingMultiplier = 0;//300 WeaponBuckler(Other).minCheckRate = 0;//0.2 WeaponBuckler(Other).minCheckVelocity = 0;//800 } //change spinfusor /*else 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 else if(Other.IsA('WeaponEnergyBlade')) { WeaponEnergyBlade(Other).Range = 500;//was 400 WeaponEnergyBlade(Other).damageAmt = 50;//was 25 return Other; } //change burner /*if(Other.IsA('WeaponBurner')) { //return ReplaceWith(Other, "compmod07.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 blaster else 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 /*else if(Other.IsA('WeaponRocketPod')) { WeaponRocketPod(Other).launchDelay = 0.08; return Other; }*/ //change pod weapon //if(Other.IsA('WeaponVehicleFighterRocket')) //{ // Other.Destroy(); // return ReplaceWith(Other, "compmod07.compPodWeapon"); //WeaponVehicleFighterRocket(Other).projectileClass = class'compmod07.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 else 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; } //change assault ship weapon /*else if(Other.IsA('WeaponVehicleAssaultShipBomb')) { WeaponVehicleAssaultShipBomb(Other).roundsPerSecond = 3; //WeaponVehicleAssaultShipBomb(Other).aimClass = class'AimArcWeapons'; //WeaponVehicleAssaultShipBomb(Other).projectileClass = class'compTankRound'; WeaponVehicleAssaultShipBomb(Other).projectileVelocity = 1; WeaponVehicleAssaultShipBomb(Other).ammoUsage = 0; //was 1 return Other; } else if(Other.IsA('BaseObjectVehicleSpawnBuggy')) { Log("*****Replacing rover pad"); Other.destroy(); return ReplaceWith(Other, "compmod07.compSpawnRover"); }*/ return Other; } //function string MutateSpawnLoadoutClass(Character c) //{ // return "compmod07.compSpawnLoadout"; //} function string MutateSpawnCombatRoleClass(Character c) { //hack in the grappler //c.grapplerClass = class(DynamicLoadObject("compmod07.compGrappler", class'Class')); c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compmod07.compArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compmod07.compArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compmod07.compArmorHeavy", class'class')).default.AllowedWeapons; } R class compPlayerCharacterController extends Gameplay.PlayerCharacterController; exec function kickvote(string name) { if(PlayerReplicationInfo.bIsSpectator) { log("Spectating " $name); ConsoleCommand("Spectate " $ name); } else if (voteReplicationInfo!=None) { log("sending kick vote: "$name); voteReplicationInfo.SubmitKickVote(name); } else log("none voteReplicationInfo!"); } function ServerRestartPlayerInVehicle(int vehicleRespawnIndex, bool bKeepPawn) { Log("ServerRestartPlayerInVehicle"); super.ServerRestartPlayerInVehicle(vehicleRespawnIndex, bKeepPawn); } t%D-pSpectating upSpectate w*psending kick vote:  Wnone voteReplicationInfo! UUL2DX߳1o|\7+׉ii|\7+׉ii|\7+׉iiKԛNYKԛ_rKԛYKԛKԛKԛG6KԛűűűűűKԛVc^Vc^KԛOaOaOaKԛ11111T T T T )+)+)+)+)+)+)+)+#HR]OZU&{ "..\compmod07\Classes\compmod07.ucWRP3ServerRestartPlayerInVehicleR-P O7  J1)9?%.O&)Q=)77 cclass compPodRocket extends EquipmentClasses.ProjectileVehicleFighterRocket; >class compPlayerController extends Engine.PlayerController; w\class compPod extends VehicleClasses.VehiclePod; var () float Energy; var () float EnergyMax; var () float EnergyRegenPerSec; 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; } simulated event collisionDamage(float magnitude) { if (bCollisionDamageEnabled && magnitude >= minimumCollisionDamageMagnitude) { if (ROLE == ROLE_Authority) TakeDamage(collisionDamageMagnitudeScale * magnitude, self, Location, vect(0,0,0), class'DamageType'); } } _`^br cBr*p9W's armor class is none'_r (a' zclass compGrapplerRope extends Gameplay.GrapplerRope; var() Material ropeGlowMaterial; simulated function Material GetOverlayMaterial(int Index) { log("rope texuter overlay: " $ ropeGlowMaterial); return ropeGlowMaterial; } af1' eN}=g06@6b6%66%66%66%6 N9?pa=%66JJ66r66666%69D 669D 66%69D 6969D 66666  ]class compBombWeapon extends EquipmentClasses.WeaponVehicleAssaultShipBomb; var int maxAmmo; var float reloadTimer; var float reloadTime; simulated function tick(float deltaSeconds) { if(reloadTimer <= 0) { if(ammoCount < maxAmmo) { increaseAmmo(1); reloadTimer = reloadTime; } } else { reloadTimer -= deltaSeconds; } super.tick(deltaSeconds); } simulated function bool canFire() { return hasAmmo(); } cSjHi6 p4OBv5{ ropeGlowMaterial = Shader'FX.ScreenShader' )..\compmod07\Classes\compGrapplerRope.uc@Kclass 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) { //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); } ^class compDamageTypeChaingun extends EquipmentClasses.ProjectileDamageTypeChaingun; @class compBomb extends compTankRound; \class compDamageTypeBlaster extends EquipmentClasses.ProjectileDamageTypeBlaster; g9pkVT- 9T9:9:$9#   Wclass compTankRound extends EquipmentClasses.ProjectileMortarTank; cclass compPodRocket extends EquipmentClasses.ProjectileVehicleFighterRocket; Lclass compPodWeapon extends EquipmentClasses.WeaponVehicleFighterRocket; var int maxAmmo; var float reloadTimer; var float reloadTime; simulated function tick(float deltaSeconds) { if(reloadTimer <= 0) { if(ammoCount < maxAmmo) { increaseAmmo(1); reloadTimer = reloadTime; } } else { reloadTimer -= deltaSeconds; } super.tick(deltaSeconds); } simulated function bool canFire() { return hasAmmo(); } simulated protected function FireWeapon() { local Vector fireLoc; local int i; for( i = 0; i < 2; 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; } Tclass compBlasterProjectile extends EquipmentClasses.ProjectileBlaster; *K:  J19?%.K&H=:: tcBr**p9W*'s armor class is none'_r* (a' ux. 5 w(+%U%s,( ceO((cr*x\-'b[9:%$ _kclass compCharacter extends Gameplay.MultiplayerCharacter; var float tempFloat; var float fallDamageModifier; var float lightPassiveShield; var float mediumPassiveShield; var float heavyPassiveShield; var float lightActiveShield; var float mediumActiveShield; var float heavyActiveShield; /* 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; } */ function bool shouldBreakRope() { local float ropeLength; //log("in SBR " $ ROLE); 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"); return true; } if (ropeLength > grapplerClass.default.maxRopeLength) { //Log("!!!!!!!!Break grapple: Rope got too long"); return true; } if (ropeObstructionTrace(ropeLength - grapplerClass.default.ropeNonCollisionLength)) { //Log("!!!!!!!!Break grapple: Rope was obstructed"); return true; } return false; } simulated function tickGrappler(float Delta) { local float ropeLength; if (proj != None) { if (rope == None) createRope(); updateGrapplerRopeThirdPerson(); //energy use code /*if (bAttached) { ropeLength = VSize(proj.Location - rope.Location); tempFloat = (70 + ropeNaturalLength - ropeLength); //should be negative if(tempFloat < 0) { if(!weaponUseEnergy( -(tempFloat * Delta / 12) )) { breakGrapple(); } } log("temp float: " $ tempFloat $ " energyUse: " $ tempFloat / 12); }*/ if (!shouldBreakRope()) { if (bAttached && bReelIn) ropeNaturalLength = FMax(0.0, ropeNaturalLength - grapplerClass.default.reelinLengthRate * Delta); } else breakGrapple(); } else if (rope != None) { rope.Destroy(); rope = None; } } simulated function createRope() { // weaponUseEnergy(8); super.createRope(); } // 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; //hack for fall damage modifier damage *= fallDamageModifier; if (blockMovementDamage) return; if (level.timeSeconds3$>-$L>,$?)$ff&?'$zT?Tclass compProjectileChaingun extends EquipmentClasses.ProjectileChaingun; class compRocketPod extends EquipmentClasses.WeaponRocketPod; simulated protected function FireWeapon() { log("fired rocketpod at " $ launchDelay); super.FireWeapon(); } +q(pfired rocketpod at 9U l9class compRover extends VehicleClasses.VehicleBuggy; 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; } simulated function otherClientOccupantLeave(int positionI, Character oldOccupant) { Log("otherClientOccupantLeave"); super.otherClientOccupantLeave(positionI, oldOccupant); if (Role == ROLE_Authority) updateRespawnState(); } function occupantEnter(Character p, int positionIndex) { Log("occupantEnter..."); super.occupantEnter(p, positionIndex); if (positionIndex == driverIndex) { Log("...entered to driver, updating respawn"); updateRespawnState(); } } simulated function bool canCharacterRespawnAt() { local int inventoryStationI; local TeamInfo occupantTeam; Log("can character respawn at rover?"); if (!isAlive()) {Log("not alive"); return false; } if (Role < ROLE_Authority) { if( clientPositions[driverIndex].occupant != None) { Log("client driver in the seat"); return false; } } else { if(positions[driverIndex].occupant != None) { Log("server driver in the seat"); return false; } } for (inventoryStationI = 2; inventoryStationI < 2 + numberInventoryStationPositions; ++inventoryStationI) if (clientPositions[inventoryStationI].occupant == None) break; if (inventoryStationI == 2 + numberInventoryStationPositions) { Log("slots full"); return false; } if (bSettledUpsideDown) { Log("rover flipped"); return false; } if (!bHasBeenOccupied) { Log("not yet occ'ed"); return false; } Log("...yes"); return true; } AcBr*p9W's armor class is none'_r (a' ~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); } @FL=DotherClientOccupantLeaveFEB9:9:$= b class compAssaultShip extends VehicleClasses.VehicleAssaultShip; 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; } Nclass compArmorMedium extends Gameplay.Armor; DDMEeoccupantEnter...D;c;...entered to driver, updating respawn= Mclass compArmorLight extends Gameplay.Armor; Oclass compArmorHeavy extends Gameplay.Armor; GKHVK dcan character respawn at rover?=Enot alive(9:9:$w6*client driver in the seat(w6*server driver in the seat( , ,r6 *  ,slots full(7-rover flipped(V-not yet occ'ed(...yes'  Wclass compTankRound extends EquipmentClasses.ProjectileMortarTank; ]Iclass 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; var Sound shieldCharged; var sound shieldActive; 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; } } } simulated state Charged { simulated function BeginState() { if (heldBy != None && heldBy.Controller == Level.GetLocalPlayerController()) { heldBy.TriggerEffectEvent(Name(Class.Name$chargedEffectName)); heldBy.PlaySound(shieldCharged,255,,30,200,,,,false,,); LOG("played sound1"); } rechargingAlpha = 1.0; } simulated function activate() { if (Character(Owner) == None || Character(Owner).Controller == None) return; if (Level.NetMode != NM_Client && cannnotBeUsedWhileTouchingInventoryStation && isInRangeOfInventoryStation()) return; GotoState('Activating'); if (Level.NetMode != NM_Client && !IsInState('Active')) packActivatedTrigger = !packActivatedTrigger; } Begin: } Vclass compBurnerProjectile extends EquipmentClasses.ProjectileBurner; O_RPϯ,͑#4{ burningAreaClass = class'compBurningArea' -..\compmod07\Classes\compBurnerProjectile.ucbBaclass compTankMortar extends EquipmentClasses.WeaponVehicleTank; QjK6Rn\$1bL{ roundsPerSecond = 0.5 //aimClass = class'AimArcWeapons' projectileClass = class'compTankRound'; projectileVelocity = 6000; ammoUsage = 0; //was 1 dropVelocity = 2000; //was 1500 '..\compmod07\Classes\compTankMortar.uc$Es"h 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; } \class compSpinfusorProjectile extends EquipmentClasses.ProjectileSpinfusor; T`EU@O bf{ //damageAmt = 0 radiusDamageAmt = 58 radiusDamageSize = 650 radiusDamageMomentum = 255000 0..\compmod07\Classes\compSpinfusorProjectile.uc$hB $"D $yH[class compSpawnTank extends BaseObjectClasses.BaseObjectVehicleSpawnTank; // State Unpowered simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; //this is the time the game thinks the vehicle started to spawn super.Tick(Delta); } } VBQAB Y2WCUޗ b2{ vehicleClass = class'compmod07.compTank'; &..\compmod07\Classes\compSpawnTank.uc>Eclass compSpawnRover extends BaseObjectClasses.BaseObjectVehicleSpawnBuggy; // State Unpowered simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; //this is the time the game thinks the vehicle started to spawn Global.Tick(Delta); if(Health <= 0) { GotoState('Destructed'); return; } if(isDisabled()) GotoState('Destructed'); if (isPowered()) { if(isDamaged()) GotoState('Damaged'); else if(Health >= healthMaximum) GotoState('Active'); } } simulated function BeginState() { if (!bInitialization) TriggerEffectEvent('UnpoweredStart'); TriggerEffectEvent('UnpoweredLoop'); if(Mesh != None) { if (!bInitialization) { if(HasAnim('PowerLost')) PlayBDAnim('PowerLost'); else StopAnimating(); } else { PlayBDAnim('PowerLost'); SetAnimFrame(1000.0); } } deactivatepersonalShield(); dispatchMessage(new class'MessageBaseDevicePowerOff'(Label)); bInitialization = false; } simulated function EndState() { UnTriggerEffectEvent('UnpoweredLoop'); TriggerEffectEvent('UnpoweredStop'); dispatchMessage(new class'MessageBaseDevicePowerOn'(Label)); } } X|P{B Y2Y@AcVF2d{bW{ vehicleClass = class'compmod07.compRover'; localizedName = "compmod Rover Pad" '..\compmod07\Classes\compSpawnRover.uc0I]compmod Rover Pad]class compSpawnPod extends BaseObjectClasses.BaseObjectVehicleSpawnFighter; // State Unpowered simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; //this is the time the game thinks the vehicle started to spawn super.Tick(Delta); } } ZxEwB Y2[ȹm<1{ vehicleClass = class'compmod07.compPod'; %..\compmod07\Classes\compSpawnPod.uc/]class compBombWeapon extends EquipmentClasses.WeaponVehicleAssaultShipBomb; var int maxAmmo; var float reloadTimer; var float reloadTime; simulated function tick(float deltaSeconds) { if(reloadTimer <= 0) { if(ammoCount < maxAmmo) { increaseAmmo(1); reloadTimer = reloadTime; } } else { reloadTimer -= deltaSeconds; } super.tick(deltaSeconds); } //AssaultShipWeapon sticks this true, so override simulated function bool canFire() { return hasAmmo(); } iclass compSpawnAssaultShip extends BaseObjectClasses.BaseObjectVehicleSpawnAssaultShip; // State Unpowered simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; //this is the time the game thinks the vehicle started to spawn super.Tick(Delta); } } @class compBomb extends compTankRound; ]tDsB Y2_ډ}p9{ vehicleClass = class'compmod07.compAssaultShip'; -..\compmod07\Classes\compSpawnAssaultShip.uc+]Iclass 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; var Sound shieldCharged; var sound shieldActive; 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; } } } // The pack is fully charged and ready to be activated. simulated state Charged { simulated function BeginState() { if (heldBy != None && heldBy.Controller == Level.GetLocalPlayerController()) { heldBy.TriggerEffectEvent(Name(Class.Name$chargedEffectName)); //sound hack #if IG_EFFECTS heldBy.PlaySound(shieldCharged,255,,30,200,,,,false,,); LOG("played sound1"); #else heldBy.PlaySound(shieldCharged,SLOT_None,255,,156,,false,,); LOG("played sound2"); #endif } rechargingAlpha = 1.0; } //maybe can delete stuff below here, and let the super handle it simulated function activate() { // if we have no controller, we're probably driving or manning a turret and shouldn't be allowed to use our pack. if (Character(Owner) == None || Character(Owner).Controller == None) return; // some packs cannot be used while touching an inventory station - handle that here if (Level.NetMode != NM_Client && cannnotBeUsedWhileTouchingInventoryStation && isInRangeOfInventoryStation()) return; GotoState('Activating'); // inform clients if (Level.NetMode != NM_Client && !IsInState('Active')) packActivatedTrigger = !packActivatedTrigger; } Begin: }  V 6%  s-'-(o$$-(a(((z Lightlight GCz Mediummedium ML TS Tclass compBlasterProjectile extends EquipmentClasses.ProjectileBlaster; b1%? =<=1-'1  l9class compRover extends VehicleClasses.VehicleBuggy; //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; } /* (debugging code) function updateRespawnState() { Log("updateRespawnState"); if (isRegisteredRespawnVehicle) { Log("server: reg'ed respawn veh"); if (!canCharacterRespawnAt()) { Log("server: remove respawn vehicle"); } } else { Log("server: NOT a reg'ed respawn veh"); if (canCharacterRespawnAt()) { Log("server: add respawn vehicle"); } } super.updateRespawnState(); } //called on client and server everytime someone switches position or enters vehicle simulated function clientOccupantEnter(ClientOccupantEnterData data) { Log("clientOccupantEnter"); super.clientOccupantEnter(data); //clientUpdateRespawnState(); } function switchPosition(int currentPositionIndex, byte selectedPosition) { Log("switchPosition"); super.switchPosition(currentPositionIndex, selectedPosition); } */ // Called on all machines when an occupant leaves this vehicle. simulated function otherClientOccupantLeave(int positionI, Character oldOccupant) { Log("otherClientOccupantLeave"); super.otherClientOccupantLeave(positionI, oldOccupant); if (Role == ROLE_Authority) updateRespawnState(); } function occupantEnter(Character p, int positionIndex) { Log("occupantEnter..."); super.occupantEnter(p, positionIndex); //if driver enters, check again to see if this is a valid spawnpoint if (positionIndex == driverIndex) { Log("...entered to driver, updating respawn"); updateRespawnState(); } } simulated function bool canCharacterRespawnAt() { local int inventoryStationI; local TeamInfo occupantTeam; Log("can character respawn at rover?"); if (!isAlive()) {Log("not alive"); return false; } if (Role < ROLE_Authority) { //no spawning with a driver in the seat if( clientPositions[driverIndex].occupant != None) { Log("client driver in the seat"); return false; } } else { //no spawning with a driver in the seat if(positions[driverIndex].occupant != None) { Log("server driver in the seat"); return false; } } // unneeded with above code // cannot respawn if being driven by an enemy //occupantTeam = getOccupantTeam(); //if (occupantTeam != None && occupantTeam != m_team) // return false; // cannot respawn if all inventory station slots are occupied for (inventoryStationI = 2; inventoryStationI < 2 + numberInventoryStationPositions; ++inventoryStationI) if (clientPositions[inventoryStationI].occupant == None) break; if (inventoryStationI == 2 + numberInventoryStationPositions) { Log("slots full"); return false; } // cannot respawn if settled upside down if (bSettledUpsideDown) { Log("rover flipped"); return false; } // cannot respawn if yet to be driven if (!bHasBeenOccupied) { Log("not yet occ'ed"); return false; } Log("...yes"); return true; } dg{G% g-( class compRocketPod extends EquipmentClasses.WeaponRocketPod; simulated protected function FireWeapon() { log("fired rocketpod at " $ launchDelay); super.FireWeapon(); } f.JM @@?.. g~w}6i+6FtX:{ launchDelay = .08; &..\compmod07\Classes\compRocketPod.ucq$ ף=hqU 7w* <= jlN]k 9?%  mk- i -$9?%-~w*~jA Tclass compProjectileChaingun extends EquipmentClasses.ProjectileChaingun; nrB n" w* rY!9Zp9W9WaZC AHC ( played sound1? qzF-r.*r.* ^9:9:$-T q!A9:9:$ a!@-- iclass compSpawnAssaultShip extends BaseObjectClasses.BaseObjectVehicleSpawnAssaultShip; simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; super.Tick(Delta); } } u  [ ?padding to spawnStartTime 9U 8S8w.8*ff>L=?D?9?,K ]class compSpawnPod extends BaseObjectClasses.BaseObjectVehicleSpawnFighter; simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; super.Tick(Delta); } } y  O ?padding to spawnStartTime 9U b class compAssaultShip extends VehicleClasses.VehicleAssaultShip; //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; } Eclass compSpawnRover extends BaseObjectClasses.BaseObjectVehicleSpawnBuggy; simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; Global.Tick(Delta); if(Health <= 0) { GotoState('Destructed'); return; } if(isDisabled()) GotoState('Destructed'); if (isPowered()) { if(isDamaged()) GotoState('Damaged'); else if(Health >= healthMaximum) GotoState('Active'); } } simulated function BeginState() { if (!bInitialization) TriggerEffectEvent('UnpoweredStart'); TriggerEffectEvent('UnpoweredLoop'); if(Mesh != None) { if (!bInitialization) { if(HasAnim('PowerLost')) PlayBDAnim('PowerLost'); else StopAnimating(); } else { PlayBDAnim('PowerLost'); SetAnimFrame(1000.0); } } deactivatepersonalShield(); dispatchMessage(new class'MessageBaseDevicePowerOff'(Label)); bInitialization = false; } simulated function EndState() { UnTriggerEffectEvent('UnpoweredLoop'); TriggerEffectEvent('UnpoweredStop'); dispatchMessage(new class'MessageBaseDevicePowerOn'(Label)); } } @ D7  padding to spawnStartTime 9U8 S9?%q!( chq!(aCq!uq!@ Lclass compPodWeapon extends EquipmentClasses.WeaponVehicleFighterRocket; var int maxAmmo; var float reloadTimer; var float reloadTime; simulated function tick(float deltaSeconds) { if(reloadTimer <= 0) { if(ammoCount < maxAmmo) { increaseAmmo(1); reloadTimer = reloadTime; } } else { reloadTimer -= deltaSeconds; } super.tick(deltaSeconds); } //AssaultShipWeapon sticks this true, so override simulated function bool canFire() { return hasAmmo(); } simulated protected function FireWeapon() { local Vector fireLoc; local int i; for( i = 0; i < 2; 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; } }""-!x!8ow*Y-Pa!*!Vo*!zDQC   F:-( |?>M!8!yC   F: [class compSpawnTank extends BaseObjectClasses.BaseObjectVehicleSpawnTank; simulated state Unpowered { simulated function Tick(float Delta) { Log("adding to spawnStartTime " $ Delta); spawnStartTime += Delta; super.Tick(Delta); } } C  M! ?padding to spawnStartTime 9U!!! Nclass compArmorMedium extends Gameplay.Armor; \class compSpinfusorProjectile extends EquipmentClasses.ProjectileSpinfusor; h 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; } HcBr#*p9W#'s armor class is none'_r# (a' #DGF2I*iK { AllowedWeapons(0)=(typeClass=class'EquipmentClasses.WeaponEnergyBlade',quantity=1) 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=5) AllowedWeapons(7)=(typeClass=class'EquipmentClasses.WeaponBurner',quantity=25) AllowedWeapons(8)=(typeClass=class'EquipmentClasses.WeaponChaingun',quantity=200) AllowedGrenades=(typeClass=class'EquipmentClasses.WeaponHandGrenade',quantity=5) (..\compmod07\Classes\compArmorMedium.ucY^ """""H""""Z "aclass compTankMortar extends EquipmentClasses.WeaponVehicleTank; zwclass compmod07 extends Gameplay.Mutator; var class rocketClass; function preBeginPlay() { local Gameplay.GameInfo C; local Gameplay.VehicleSpawnPoint VSP; local Gameplay.MPCapturePoint flagStand; log("************************"); log("*** CompMod ***"); log("************************"); foreach AllActors(class'Gameplay.GameInfo', C) if (C != None) { C.Default.DefaultPlayerClassName = "compmod07.compCharacter"; C.DefaultPlayerClassName = "compmod07.compCharacter"; C.PlayerControllerClassName = "compmod07.compPlayerCharacterController"; C.Default.PlayerControllerClassName = "compmod07.compPlayerCharacterController"; } foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehiclePod') { VSP.vehicleClass = class'compmod07.compPod'; } else if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleTank') { VSP.vehicleClass = class'compmod07.compTank'; } else if (VSP!= None && VSP.vehicleClass == class'VehicleClasses.VehicleBuggy') { VSP.vehicleClass = class'compmod07.compRover'; } else if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleAssaultShip') { VSP.vehicleClass = class'compmod07.compAssaultShip'; } } foreach AllActors(class'Gameplay.MPCapturePoint', flagStand) if (flagStand != None) { flagStand.capturableClass = class'compmod07.compMPFlag'; } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('ProjectileSniperRifle')) { ProjectileSniperRifle(Other).LifeSpan = 0.15; return Other; } else if(Other.IsA('ProjectileMortar')) { ProjectileMortar(Other).LifeSpan = 12; return Other; } else if(Other.IsA('WeaponChaingun')) { WeaponChaingun(Other).projectileClass = class'compProjectileChaingun'; return Other; } else if(Other.IsA('Character')) { Other.Destroy(); return ReplaceWith(Other, "compmod07.compCharacter"); } else if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).projectileClass = class'compGrapplerProjectile'; return Other; } else if(Other.IsA('WeaponBuckler')) { WeaponBuckler(Other).checkingDamage = 0; WeaponBuckler(Other).checkingDmgVelMultiplier = 0; WeaponBuckler(Other).checkingMultiplier = 0; WeaponBuckler(Other).minCheckRate = 0; WeaponBuckler(Other).minCheckVelocity = 0; } else if(Other.IsA('WeaponEnergyBlade')) { WeaponEnergyBlade(Other).Range = 500; WeaponEnergyBlade(Other).damageAmt = 50; return Other; } else if(Other.IsA('WeaponBlaster')) { WeaponBlaster(Other).ProjectileClass = class'compBlasterProjectile'; WeaponBlaster(Other).numberOfBullets = 12; WeaponBlaster(Other).energyUsage = 0.75; return Other; } else 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("compmod07.compArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compmod07.compArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("compmod07.compArmorHeavy", class'class')).default.AllowedWeapons; } 3MT c*************************** CompMod ***************************/a0 0/w*compmod07.compCharactercompmod07.compCharactercompmod07.compPlayerCharacterControllercompmod07.compPlayerCharacterController10/a0 /}w*r  /.w*r  >.w*r  0..w*r  +10/a0 '`_w'*' W10 Mclass compArmorLight extends Gameplay.Armor; OHH2PL=iP { AllowedWeapons(0)=(typeClass=class'EquipmentClasses.WeaponEnergyBlade',quantity=1) 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=5) AllowedWeapons(7)=(typeClass=class'EquipmentClasses.WeaponBurner',quantity=20) AllowedWeapons(8)=(typeClass=class'EquipmentClasses.WeaponChaingun',quantity=150) AllowedGrenades=(typeClass=class'EquipmentClasses.WeaponHandGrenade',quantity=5) '..\compmod07\Classes\compArmorLight.ucY_ """ " "*""""Z "Oclass compArmorHeavy extends Gameplay.Armor; NN@6a/!^.>la/!_.@Aa/!Z. la/!WaTcompmod07.compCharacter a/!]. a/!X.....a/!\..,2ea/!U. p., .@?a/!R.>. . .E.% 2KO+prope texuter overlay: 9V22 R"G36%"compmod07.compArmorLight 6&"compmod07.compArmorMedium 6,"compmod07.compArmorHeavy  QJI2V*niN { AllowedWeapons(0)=(typeClass=class'EquipmentClasses.WeaponEnergyBlade',quantity=1) 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) AllowedGrenades=(typeClass=class'EquipmentClasses.WeaponHandGrenade',quantity=5) '..\compmod07\Classes\compArmorHeavy.ucY_ """ ""`"""",Z "@GGGFWGFIFtFHFFFKFYFXQMFiFgF^F_Fe]|]{FvFSFFVDL F&FTFRGFoFXF[FfF]F]FBFdFrFUQNT}GVXfFoF\FfK X^XCXmUYFeFrF]FLFZXbF[FVVDWRF`FGSRJlFjKXcXEFVFeVF^J|FpF`FdFZFcXnK YEKBYwLBFqFHYdFX`uTX`EYoVFK_VEVGFfFI[F`UQ\FYFeFJUDF]Fl]{FcFdYmU|X_QsTyFQ]/FbFRXVF\FOFk[`FJVfF^FNFLF_GuFMSDSBFPFgKXYDYFTF`KhWvFGF\Kk KKFDKyFpK+XxXyKLYaFIFFFiKM]CF[FjFnVNFWFKKLKPK KQFXFkYiFh[aKFKSKAFS[pFmK~KVJM[~K9Yl]YCYj[g[hYmYn[sJ^[w[xKHKt]0YrVbKJKpY2K%[tYiK"YfXYP]fEYLYKYJYIVkYHYnKGYKwYoYpYq[S]Y$F`WAW@[z[~FaYTKQK{YqFYK"KzK|K.WA[_K+KK.KqKNZzsFcY1K}`HVaFeX}Y~FYX_QZUVFhF]FWK`TK`NKOKa[IKbF[FWKgFU[VLXn[s[m[zYqX{`lT~TXKFEYzFztGcDdGeDf@sZRbpxNyl\J[hyFYdqAj_[o}xZ[Aw[@U[BsRP[Cmi^KiOG[meCWBI?YxwWTIsIPWmILiHGIfyCWb] ASaW~h[PzX?XWvSPU~SeKCo`od(~zHboj@HpDfIj@GOeKCy`uK\ry[yvV[{YLfi e[|ZN[zuh[l`]`I}[,FHdwBv`[4~I>\r\yfVUI7k[)H[3fKDX7aR~X>[Qx['V[-tNQtokgN^fuBV[[S q MQO^@|L[4y3W-u,S)q'O~Vl~F!Ioj~UHIg~TE~MdvoC~rZ PgtpvEdF7i!]`Jw4s}ow4upw4beu4i G}!pmpQxu4TA\UvsL3QK=DhdA~ge3LWQ_\@{9GXyA_P`w4vk~w4Qt/u4N]ElQS}d@BWw4[`Wwc{B S^Wu4[qBw4ULw4ma@NX.4ku4Qx_w4i ptxYP QP^aX ^3u4z]xw4TW/w4N]k/}y/^W/_u/}R^Ou4Qn@/3\@O/}jlXw4tVjhJu4brou4uTYw4WIJu4s`/poSw4nB3w4zpIw4cjpw4kM@x^UI ^t+|RI.4N@BI+m_u4vkLdS Blw4kUw4V@+PV0w4C:f0|i ^e Bu4UD @Y 0Lhv +w4y ^ w4eW 0ME| w4dA w4fe 0HhK @s u4nP k~ [w4tI\ u4mP _k} u4xh jG` >u4 g u4sf `nY u4rG Qay u4\Z Psv u4ti E_] Xu4t| u4@p Yu4Wp DoG [u4tIv [aj [VqI pu4kz [%Qe 0u4C:v [{>y u4Vw [JRM wI_ [qNh [NDv }z @X [ @v lu4kv [BMa "hn zjV w4@@ <@ \| SjX w4tB w4 t >|s ^o GeN @s w4xP w4QxH aYTOxu4dGHjku4fUN{OSz@MGPkJh{@c