*(@lghݨďA 7(None typeClass quantityTick coolDownCorecmodv5 GameplaySystemcmodShieldPackEngineSpinup BeginState SpindownQuantityGrenadesplayEquippableAnimTeamspeedRelativeCooldown isInWaterupdateHeatGlowAllowedGrenadesAllowedWeaponsammoSkinChange FirePressedsetControllableSkinsbuildControllableSkinsheatUp ShieldPackapplyPassiveEffectIdlePodCModArmorClassVehicleClassescanArmorOccupy MatCoordsHealthTriggerEffectEventVLULVURapidCooldownspeedCooldownFactorheatMaterialIndexdeactivatingDuration hitStayTimeactiveFractionDamageBlockedpassiveFractionDamageBlockedmuzzleSocketsvelocityInheritOnExitScale fireStatecoolDownThresholdreleaseFireState LightingKarmaForce Collision LightColor MovementstrafeThrustForce heatPeriodPostTakeDamage strafeForceforwardThrustForce forwardForce ReplaceActorEmptyupThrustForcereverseThrustForcediveThrustForceengineDustTraceLengthengineDustGroundOffsetMuzzle1gunnerWeaponClass spinPeriodstartHeldByCharacterEquipmentClassesWeaponGrappler ReplaceWithbCanBeDamaged PackShield TopSpeedrechargeTimeSeconds AirSpeed maxSpreadcreateThirdPersonMeshMutateSpawnCombatRoleClassdriverWeaponClassStartGetProjectileSpreadScalesimulatedAttachAwaitingPickupMuzzle2unEquip EquippingrampUpTimeSecondsdurationSecondsGetOverlayMaterialForOwner minSpreadhudRefireIconCoordshudRefireIcon Unequipping setOutOfAmmo classypodweaponsSpindown_Idle Start_EmptystartActiveEffectbGenerateMissSpeechEvents handleFire PlayEffectclassyPodWeapon aimClasshasAmmofirstPersonOffsetprojectileClass animPrefixprojectileVelocityHeldprojectileInheritedVelFactor animClassDroppedfirstPersonMeshroundsPerSecond ammoCount ammoUsagemakeProjectilecmodcmodArmorHeavycmodArmorLight classyBuggyfinishActiveEffectinventoryIconcmodArmorMediumclassyGrapplerProjectilesetHasAmmoSkinshandleReleaseFirehudIconCoordsPostBeginPlay PreBeginPlayaimAdjustViewRotationremovePassiveEffectVector EndStatehudIcon RoleDataPack CharacterWeaponVehicle ChaingunInvButtonChaingun GUITribesOwnerSkinsSelfIlluminationIndexOtherDelta DeltaSecondsEventInstigatorTouchLocationDamage HitLocation MomentumprojectileFactor ColorScale VehicleClassenergy Projectile PositionShallowCopyMaterial GetMaterial SetDrawType bWaterVolumeHUDPhysicsVolume DamageTypeConstantColorMutatorShaderbCollideWorldPawn SkeletalMesh MaterialActor ScriptTextProcessedText equipped TeamInfoArmor CombatRoleCharacterEquippableAnimatorEquippableAnimator EquippableAimProjectileWeapons EquipmentChaingunProjectileGrapplerProjectileVehicleSpawnPointVehicleEffectObserveriABCpassiveIdleMaterialactiveIdleMaterialpassiveHitMaterialactiveHitMaterialPitchYawpassiveEffectNameGR Velocity ReturnValueDynamicLoadObjectTextureRole armorClassClassPackage TextBufferObjectspeedPackScaleEnum FunctionfireLocfireRotbIsFirstPersonshieldFractionDamageBlocked shieldActivebControllableSkinSetspreadInRotUnitscharacterOwnerholderbHeld bDropped spinTime overheated heatTime heatShaderheatColorMaterial heatColor actualSpreadheldBy localHeldByVehiclePositionTypecurrentMuzzleIndexengineDustEffectIndexengineDustEffectLocationmuzzleFlashObserver currentIdle currentHitcurrentHitTime lastHealthcombatRoleDataTabsStateWeaponSniperRifleWeaponRocketPod WeaponMortarWeaponHandGrenadeWeaponGrenadeLauncherWeaponChaingun WeaponBurnerWeaponBucklerWeaponBlasterWeaponSpinfusorColor ArmorHeavyRotatorStruct VehicleBuggy VehiclePodName StrPropertyStructPropertyArrayPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertyCModArmorClassNameVSPlightActiveShieldlightPassiveShieldmediumActiveShieldmediumPassiveShieldheavyActiveShieldheavyPassiveShieldvieenregistreedifferencevie % TFThe amount of time it takes for the chaingun to spin up or spin down ?:The amount of time it takes for the chaingun to overheat  UOs#= 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 3:The angular deviation from ideal line of fire in degrees $;Multiplier for the speed when calculating cooldown/heatup =The maximum angle the spread will increase to during heatup vq`BrB Y27ڤꘉ|\|\|\  8^j:{{ positions(0)=(type=VP_DRIVER,hideOccupant=false,occupantControllerState=TribesPlayerDriving,thirdPersonCamera=true,occupantAnimation=Buggy_Stand,occupantConnection=character,enterAnimation=HatchClosing,occupiedAnimation=HatchClosed,unoccupiedAnimation=HatchOpen,exitAnimation=HatchOpening,ManifestXPosition=50,ManifestYPosition=20) positions(1)=(type=VP_GUNNER,hideOccupant=true,occupantControllerState=PlayerVehicleTurreting,thirdPersonCamera=false,ManifestXPosition=30,ManifestYPosition=20) positions(2)=(type=VP_INVENTORY_STATION_ONE,hideOccupant=true,thirdPersonCamera=false,ManifestXPosition=33,ManifestYPosition=53,bNotLabelledInManifest=true) positions(3)=(type=VP_INVENTORY_STATION_TWO,hideOccupant=true,thirdPersonCamera=false,ManifestXPosition=33,ManifestYPosition=67,bNotLabelledInManifest=true) positions(4)=(type=VP_INVENTORY_STATION_THREE,hideOccupant=true,thirdPersonCamera=false,ManifestXPosition=47,ManifestYPosition=53,bNotLabelledInManifest=true) positions(5)=(type=VP_INVENTORY_STATION_FOUR,hideOccupant=true,thirdPersonCamera=false,ManifestXPosition=47,ManifestYPosition=67,bNotLabelledInManifest=true) gunnerWeaponClass=None CModArmorClass=class'EquipmentClasses.ArmorHeavy' !..\cmodv5\Classes\classyBuggy.ucItmFu83va] XJ{ bCanBeDamaged = True //bWorldGeometry = true Health = 25 ...\cmodv5\Classes\classyGrapplerProjectile.uc#$AO_ ALength of time that the hit material is displayed for on damage hPgDB Y2;SKќ|\|\|\  PI{ Health=100 velocityInheritOnExitScale=0.500000 TPCameraDistance=800 AirSpeed=9500.000000 strafeThrustForce = 100 strafeForce = 750 forwardThrustForce = 9000 forwardForce = 7500 upThrustForce = 4000 reverseForce = 150 reverseThrustForce = 100 diveThrustForce = 2000 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'classyPodWeapon' muzzleSockets(0)=muzzle1 muzzleSockets(1)=muzzle2 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 TopSpeed=100000.000000 navigationTurnRate = 10000 throttleScale = 0.002 thrustThresholdPitch = 12000 driveYawCoefficient = 25 drivePitchCoefficient = 25 navigationMaximumPitch = 12000 cornerSlowDownSpeedCoefficient = 10 localizedName = "fighter" CModArmorClass=class'EquipmentClasses.ArmorHeavy' ..\cmodv5\Classes\classypod.uc0YH\F$;DG$B;$B>$;D?$ F@$`EC$zED$BE$DQ$PGWI1$?S$pF#$B( 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 1HThe fraction of the heatPeriod at which the gun can start firing again ABCDF5gKou6IF6yaЊaЊaЉKԛKԛKԛ^B^B`m`m`m`mp@p@`m`m`m`m hK:dp^MdT { heatMaterialIndex = 1 minSpread = 1 maxSpread = 1 spinPeriod = 0.5 heatPeriod = 3.0 coolDownThreshold = 1.7 speedCooldownFactor = 0.0008 firstPersonMesh = Mesh'Weapons.Chaingun' firstPersonOffset = (X=-23,Y=26,Z=-24) roundsPerSecond = 15 ammoCount = 150 ammoUsage = 0 projectileClass = class'ChaingunProjectile' projectileVelocity =7500 projectileInheritedVelFactor = 1.0 aimClass = class'AimProjectileWeapons' animClass = class'CharacterEquippableAnimator' animPrefix = "Chaingun" fireState = Spinup releaseFireState = Spindown inventoryIcon = texture'GUITribes.InvButtonChaingun' hudIcon = texture'HUD.Tabs' hudIconCoords = (U=205,V=472,UL=80,VL=40) hudRefireIcon = texture'HUD.Tabs' hudRefireIconCoords = (U=205,V=421,UL=80,VL=40) bGenerateMissSpeechEvents = false %..\cmodv5\Classes\classyPodWeapon.ucb$?T$?J$?<$@@3$?*$Q:+"|"}"{$pAsu$`Ew$?plSzr:NAt] Chaingun2 4 xDPIZ"($MC'$C&$B%$ BdcZ"($MC'$C&$B%$ B.c,.. RJegZ*'=B*'*9?%a'@ABCD m ]a Q $9?%  9D9?,9?$  %9?9? 9? 9w*9%:9D "O."" dP[?g ;9 XNyS\QS^]!Y!! @5 hT_f)3y=()-')- &E&& OWvIc6q1.$!)R6o?-%( ,W,, YZV2M;~2-( p/ // UAB\0kAB=>0$9D0 94! uBr*p9W's armor class is none'qr99:49:$(s' EN! RcBr*p9W's armor class is none'_r<(a' j I8a!  Gq! {Ht1.$!)Y H-%  ^B 5lV0v*6%cmodv5.cmodArmorLight 6&cmodv5.cmodArmorMedium 6,cmodv5.cmodArmorHeavy  iK$"bn U-'-(o$$-(a((( }I8a!  Gq! [~ ZjG~X#3+ +#9?9?h69D@9?&69D@9?&a<G5 tE-g7 7 &%L *&  -' x r ---w*  69C9<6 69C9<6 69C9<6 69C9<6 No heat colour material oAxCa/!PaNcmodv5.cmodshieldpackva/!M. 8 LEZEFa''' SM \2n$KW|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\L 8F{ passiveFractionDamageBlocked=0.1000000 activeFractionDamageBlocked=0.750000 hitStayTime=0.500000 rechargeTimeSeconds=16.000000 rampUpTimeSeconds=0.000000 durationSeconds=3.000000 deactivatingDuration=0.000000 $..\cmodv5\Classes\cmodShieldPack.uc/$=.$@?-$?R$A_$`$@@,$Ko/a0 Iw*r  ;w*r  710 feR2"p;v1o|\7+׊ii|\7+׊ii|\7+׊iiKԛKԛKԛG6)+)+)+)+ :859678<{ ..\cmodv5\Classes\cmod.uc+ . w *. w* 66666666 qG/ rf55 s;- nnclass classyPodWeapon extends Gameplay.Weapon; var() float minSpread "The angular deviation from ideal line of fire in degrees"; var() float maxSpread "The maximum angle the spread will increase to during heatup"; var() float spinPeriod "The amount of time it takes for the chaingun to spin up or spin down"; var float spinTime; var bool overheated; var() float heatPeriod "The amount of time it takes for the chaingun to overheat"; var() float coolDownThreshold "The fraction of the heatPeriod at which the gun can start firing again"; var() float speedCooldownFactor "Multiplier for the speed when calculating cooldown/heatup"; var float heatTime; var Shader heatShader; var ConstantColor heatColorMaterial; var Color heatColor; var() int heatMaterialIndex; var bool bControllableSkinSet; simulated function buildControllableSkins() { heatShader = Shader(ShallowCopyMaterial(GetMaterial(heatMaterialIndex), self)); if (heatShader != None) { heatColorMaterial = ConstantColor(ShallowCopyMaterial(heatShader.SelfIllumination, self)); if (heatColorMaterial != None) { heatShader.SelfIllumination = heatColorMaterial; heatColor.R = heatColorMaterial.color.R; heatColor.G = heatColorMaterial.color.G; heatColor.B = heatColorMaterial.color.B; heatColor.A = heatColorMaterial.color.A; setControllableSkins(); } } } simulated function setHasAmmoSkins() { Super.setHasAmmoSkins(); ammoSkinChange(); } simulated function setOutOfAmmo() { Super.setOutOfAmmo(); ammoSkinChange(); } simulated function ammoSkinChange() { if (bControllableSkinSet) setControllableSkins(); else buildControllableSkins(); } simulated function setControllableSkins() { local int i; if (Skins.Length <= heatMaterialIndex) Skins.Length = heatMaterialIndex + 1; for (i = 0; i < heatMaterialIndex; ++i) { Skins[i] = None; } Skins[heatMaterialIndex] = heatShader; bControllableSkinSet = true; } protected function Projectile makeProjectile(Rotator fireRot, Vector fireLoc) { local Rotator r; local float actualSpread; local float spreadInRotUnits; actualSpread = ((maxSpread - minSpread) * (heatTime / heatPeriod)) + minSpread; spreadInRotUnits = actualSpread * 65536 / 360; r.Yaw = spreadInRotUnits * (2.0f * FRand() - 1); r.Pitch = spreadInRotUnits * (2.0f * FRand() - 1); return Super.makeProjectile( fireRot + r, fireLoc ); } function unEquip() { Super.unEquip(); spinTime = 0.0; } simulated function float GetProjectileSpreadScale() { return heatTime / heatPeriod; } simulated function updateHeatGlow() { local float colorScale; if (bIsFirstPerson && equipped) { if (bControllableSkinSet) { if (heatColorMaterial != None) { colorScale = heatTime / heatPeriod; heatColorMaterial.Color.R = float(heatColor.R) * colorScale; heatColorMaterial.Color.G = float(heatColor.G) * colorScale; heatColorMaterial.Color.B = float(heatColor.B) * colorScale; heatColorMaterial.Color.A = float(heatColor.A) * colorScale; } else Log("No heat colour material"); } else buildControllableSkins(); } } simulated function bool isInWater() { return (Owner != None && Owner.PhysicsVolume != None && Owner.PhysicsVolume.bWaterVolume) || (PhysicsVolume != None && PhysicsVolume.bWaterVolume); } simulated function float speedRelativeCooldown() { if (Owner != None) return VSize(Owner.Velocity) * speedCooldownFactor + 1.0; else return 1.0; } simulated function heatUp(float Delta) { if (isInWater()) { if (heatTime > 0.0) { heatTime = 0.0; TriggerEffectEvent('RapidCooldown'); } } else { heatTime = FMin(heatPeriod, heatTime + (Delta * speedPackScale) / speedRelativeCooldown()); } updateHeatGlow(); overheated = heatTime >= heatPeriod; } simulated function coolDown(float Delta) { if (isInWater()) { if (heatTime > 0.0) { heatTime = 0.0; TriggerEffectEvent('RapidCooldown'); } } else { heatTime = FMax(0.0, heatTime - Delta * speedRelativeCooldown()); } updateHeatGlow(); if (heatTime <= coolDownThreshold) overheated = false; } simulated State Idle { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Spinup { simulated function BeginState() { if (spinTime >= spinPeriod) spinTime = 0.0; if (spinTime == 0.0) { if (hasAmmo()) animClass.static.playEquippableAnim(self, 'Start'); else animClass.static.playEquippableAnim(self, 'Start_Empty'); } } simulated function Tick(float Delta) { Global.Tick(Delta); if (!IsInState('Spinup')) return; coolDown(Delta); spinTime += Delta; if (spinTime >= spinPeriod) GotoState('FirePressed'); } simulated protected function bool handleReleaseFire() { spinTime = spinPeriod - spinTime; GotoState('Spindown'); return true; } } simulated state FirePressed { simulated function BeginState() { heatTime = FMin(heatPeriod, heatTime + (1 / roundsPerSecond) * 2.0); super.BeginState(); } simulated function Tick(float Delta) { heatUp(Delta); Super.Tick(Delta); } } simulated state Empty { simulated function BeginState() { Super.BeginState(); fireState = 'FirePressed'; } simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } simulated function EndState() { Super.EndState(); fireState = 'Spinup'; } } simulated State Spindown { simulated function BeginState() { animClass.static.playEquippableAnim(self, 'Spindown_Idle'); if (spinTime >= spinPeriod) spinTime = 0.0; } simulated function Tick(float Delta) { Global.Tick(Delta); if (!IsInState('Spindown')) return; coolDown(Delta); spinTime += Delta; if (spinTime >= spinPeriod) GotoState('Idle'); } simulated protected function bool handleFire() { spinTime = spinPeriod - spinTime; GotoState('Spinup'); return true; } } simulated State AwaitingPickup { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Held { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Dropped { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Equipping { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Unequipping { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } i]d  wkYk   kz& _w*w*-w*- y| 5-w* 1?3?  a_Jq !X_ !j gHq! '  - 9?&@ ]Ob!  bCm/q! ' s class classyPod extends VehicleClasses.VehiclePod; var array muzzleSockets; var int currentMuzzleIndex; var int engineDustEffectIndex; var vector engineDustEffectLocation; var (Pod) float engineDustTraceLength; var (Pod) float engineDustGroundOffset; var VehicleEffectObserver muzzleFlashObserver; var string CModArmorClassName; var class CModArmorClass; 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 == cmodarmorclass) return false; else return true; } function bool aimAdjustViewRotation() { return true; } G@FHIJKLM<@aQL3' Iclass cmod extends Gameplay.Mutator; function preBeginPlay() { local Gameplay.VehicleSpawnPoint VSP; foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehiclePod') { VSP.vehicleClass = class'cmodv5.classyPod'; } if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleBuggy') { VSP.vehicleClass = class'cmodv5.classyBuggy'; } } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "cmodv5.cmodshieldpack"); } if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).projectileClass = class'cmodv5.classyGrapplerProjectile'; return Other; } } function string MutateSpawnCombatRoleClass(Character c) { c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv5.cmodArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv5.cmodArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv5.cmodArmorHeavy", class'class')).default.AllowedWeapons; } g8class cmodShieldPack extends EquipmentClasses.PackShield; var (ShieldPack) float passiveFractionDamageBlocked; var (ShieldPack) float activeFractionDamageBlocked; var (cmodShieldPack) Material passiveIdleMaterial "Overlay material, if any, to be used when shield is active but has not been impacted"; var (cmodShieldPack) Material activeIdleMaterial "Overlay material, if any, to be used when shield is active but has not been impacted"; var (cmodShieldPack) Material passiveHitMaterial "Overlay material to be used when shield has been impacted"; var (cmodShieldPack) Material activeHitMaterial "Overlay material to be used when shield has been impacted"; var (cmodShieldPack) 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 character characterOwner; var int vieenregistree; var int differencevie; function PostBeginPlay(){ super.PostBeginPlay(); characterOwner = Character(Owner); } 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); } 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; characterOwner.shieldFractionDamageBlocked = activeFractionDamageBlocked; vieenregistree=characterOwner.health; } simulated function finishActiveEffect() { if (heldBy != None) characterOwner.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; differencevie=3*(characterOwner.health-vieenregistree); if ((characterOwner.shieldFractionDamageBlocked == activeFractionDamageBlocked) && (differencevie<0)) { if (characterOwner.health differencevie) { characterOwner.energy=characterOwner.energy+differencevie; } else { characterOwner.energy=0; } } } if (localHeldBy != None) { if (lastHealth != localHeldBy.health) { if (lastHealth > localHeldBy.health) { currentHitTime = hitStayTime; } lastHealth = localHeldBy.health; } } vieenregistree=characterOwner.health; } @e@W2V^i⑵ { 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') AllowedWeapons(6)=(typeClass=Class'EquipmentClasses.WeaponGrappler',quantity=8) AllowedWeapons(7)=(typeClass=Class'EquipmentClasses.WeaponBurner') AllowedWeapons(8)=(typeClass=Class'EquipmentClasses.WeaponChaingun',quantity=300) AllowedGrenades=(typeClass=Class'EquipmentClasses.WeaponHandGrenade',quantity=5) $..\cmodv5\Classes\cmodArmorHeavy.ucY` """ ""`"""",Z "Gclass cmodArmorHeavy extends Gameplay.Armor; ^AY2X>ԍi⑵D { 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') AllowedWeapons(6)=(typeClass=Class'EquipmentClasses.WeaponGrappler',quantity=8) AllowedWeapons(7)=(typeClass=Class'EquipmentClasses.WeaponBurner') AllowedWeapons(8)=(typeClass=Class'EquipmentClasses.WeaponChaingun',quantity=150) AllowedGrenades=(typeClass=Class'EquipmentClasses.WeaponHandGrenade',quantity=5) $..\cmodv5\Classes\cmodArmorLight.ucY` """ " "*""""Z "Gclass cmodArmorLight extends Gameplay.Armor; ]E[2Z(4i8⑵ { 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') AllowedWeapons(6)=(typeClass=Class'EquipmentClasses.WeaponGrappler',quantity=8) AllowedWeapons(7)=(typeClass=Class'EquipmentClasses.WeaponBurner') AllowedWeapons(8)=(typeClass=Class'EquipmentClasses.WeaponChaingun',quantity=200) AllowedGrenades=(typeClass=Class'EquipmentClasses.WeaponHandGrenade',quantity=5) %..\cmodv5\Classes\cmodArmorMedium.ucY` """""H""""Z "Hclass cmodArmorMedium extends Gameplay.Armor; g8class cmodShieldPack extends EquipmentClasses.PackShield; var (ShieldPack) float passiveFractionDamageBlocked; var (ShieldPack) float activeFractionDamageBlocked; var (cmodShieldPack) Material passiveIdleMaterial "Overlay material, if any, to be used when shield is active but has not been impacted"; var (cmodShieldPack) Material activeIdleMaterial "Overlay material, if any, to be used when shield is active but has not been impacted"; var (cmodShieldPack) Material passiveHitMaterial "Overlay material to be used when shield has been impacted"; var (cmodShieldPack) Material activeHitMaterial "Overlay material to be used when shield has been impacted"; var (cmodShieldPack) 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 character characterOwner; var int vieenregistree; var int differencevie; function PostBeginPlay(){ super.PostBeginPlay(); characterOwner = Character(Owner); } 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); } 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; characterOwner.shieldFractionDamageBlocked = activeFractionDamageBlocked; vieenregistree=characterOwner.health; } simulated function finishActiveEffect() { if (heldBy != None) characterOwner.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; differencevie=3*(characterOwner.health-vieenregistree); if ((characterOwner.shieldFractionDamageBlocked == activeFractionDamageBlocked) && (differencevie<0)) { if (characterOwner.health differencevie) { characterOwner.energy=characterOwner.energy+differencevie; } else { characterOwner.energy=0; } } } if (localHeldBy != None) { if (lastHealth != localHeldBy.health) { if (lastHealth > localHeldBy.health) { currentHitTime = hitStayTime; } lastHealth = localHeldBy.health; } } vieenregistree=characterOwner.health; } Hclass cmodArmorMedium extends Gameplay.Armor; Gclass cmodArmorLight extends Gameplay.Armor; `abcdGclass cmodArmorHeavy extends Gameplay.Armor; Iclass cmod extends Gameplay.Mutator; function preBeginPlay() { local Gameplay.VehicleSpawnPoint VSP; foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehiclePod') { VSP.vehicleClass = class'cmodv5.classyPod'; } if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleBuggy') { VSP.vehicleClass = class'cmodv5.classyBuggy'; } } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "cmodv5.cmodshieldpack"); } if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).projectileClass = class'cmodv5.classyGrapplerProjectile'; return Other; } } function string MutateSpawnCombatRoleClass(Character c) { //thanks to compmod for that one! c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv5.cmodArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv5.cmodArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv5.cmodArmorHeavy", class'class')).default.AllowedWeapons; } nnclass classyPodWeapon extends Gameplay.Weapon; var() float minSpread "The angular deviation from ideal line of fire in degrees"; var() float maxSpread "The maximum angle the spread will increase to during heatup"; var() float spinPeriod "The amount of time it takes for the chaingun to spin up or spin down"; var float spinTime; var bool overheated; var() float heatPeriod "The amount of time it takes for the chaingun to overheat"; var() float coolDownThreshold "The fraction of the heatPeriod at which the gun can start firing again"; var() float speedCooldownFactor "Multiplier for the speed when calculating cooldown/heatup"; var float heatTime; var Shader heatShader; var ConstantColor heatColorMaterial; var Color heatColor; var() int heatMaterialIndex; var bool bControllableSkinSet; simulated function buildControllableSkins() { // Build a controllable texture panner for the dial shader heatShader = Shader(ShallowCopyMaterial(GetMaterial(heatMaterialIndex), self)); if (heatShader != None) { heatColorMaterial = ConstantColor(ShallowCopyMaterial(heatShader.SelfIllumination, self)); if (heatColorMaterial != None) { heatShader.SelfIllumination = heatColorMaterial; heatColor.R = heatColorMaterial.color.R; heatColor.G = heatColorMaterial.color.G; heatColor.B = heatColorMaterial.color.B; heatColor.A = heatColorMaterial.color.A; setControllableSkins(); } } } simulated function setHasAmmoSkins() { Super.setHasAmmoSkins(); ammoSkinChange(); } simulated function setOutOfAmmo() { Super.setOutOfAmmo(); ammoSkinChange(); } simulated function ammoSkinChange() { if (bControllableSkinSet) setControllableSkins(); else buildControllableSkins(); } simulated function setControllableSkins() { local int i; if (Skins.Length <= heatMaterialIndex) Skins.Length = heatMaterialIndex + 1; for (i = 0; i < heatMaterialIndex; ++i) { Skins[i] = None; } Skins[heatMaterialIndex] = heatShader; bControllableSkinSet = true; } protected function Projectile makeProjectile(Rotator fireRot, Vector fireLoc) { local Rotator r; local float actualSpread; local float spreadInRotUnits; actualSpread = ((maxSpread - minSpread) * (heatTime / heatPeriod)) + minSpread; spreadInRotUnits = actualSpread * 65536 / 360; r.Yaw = spreadInRotUnits * (2.0f * FRand() - 1); r.Pitch = spreadInRotUnits * (2.0f * FRand() - 1); return Super.makeProjectile( fireRot + r, fireLoc ); } function unEquip() { Super.unEquip(); spinTime = 0.0; } // function for HUD to get weapon spread simulated function float GetProjectileSpreadScale() { return heatTime / heatPeriod; } simulated function updateHeatGlow() { local float colorScale; if (bIsFirstPerson && equipped) { if (bControllableSkinSet) { if (heatColorMaterial != None) { colorScale = heatTime / heatPeriod; heatColorMaterial.Color.R = float(heatColor.R) * colorScale; heatColorMaterial.Color.G = float(heatColor.G) * colorScale; heatColorMaterial.Color.B = float(heatColor.B) * colorScale; heatColorMaterial.Color.A = float(heatColor.A) * colorScale; } else Log("No heat colour material"); } else buildControllableSkins(); } } simulated function bool isInWater() { return (Owner != None && Owner.PhysicsVolume != None && Owner.PhysicsVolume.bWaterVolume) || (PhysicsVolume != None && PhysicsVolume.bWaterVolume); } simulated function float speedRelativeCooldown() { if (Owner != None) return VSize(Owner.Velocity) * speedCooldownFactor + 1.0; else return 1.0; } simulated function heatUp(float Delta) { if (isInWater()) { if (heatTime > 0.0) { heatTime = 0.0; TriggerEffectEvent('RapidCooldown'); } } else { heatTime = FMin(heatPeriod, heatTime + (Delta * speedPackScale) / speedRelativeCooldown()); } updateHeatGlow(); overheated = heatTime >= heatPeriod; } simulated function coolDown(float Delta) { if (isInWater()) { if (heatTime > 0.0) { heatTime = 0.0; TriggerEffectEvent('RapidCooldown'); } } else { heatTime = FMax(0.0, heatTime - Delta * speedRelativeCooldown()); } updateHeatGlow(); if (heatTime <= coolDownThreshold) overheated = false; } simulated State Idle { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Spinup { simulated function BeginState() { if (spinTime >= spinPeriod) spinTime = 0.0; if (spinTime == 0.0) { if (hasAmmo()) animClass.static.playEquippableAnim(self, 'Start'); else animClass.static.playEquippableAnim(self, 'Start_Empty'); } } simulated function Tick(float Delta) { Global.Tick(Delta); if (!IsInState('Spinup')) // State change is possible in Global.Tick return; coolDown(Delta); spinTime += Delta; if (spinTime >= spinPeriod) GotoState('FirePressed'); } simulated protected function bool handleReleaseFire() { spinTime = spinPeriod - spinTime; GotoState('Spindown'); return true; } } simulated state FirePressed { simulated function BeginState() { heatTime = FMin(heatPeriod, heatTime + (1 / roundsPerSecond) * 2.0); super.BeginState(); } simulated function Tick(float Delta) { heatUp(Delta); Super.Tick(Delta); } } simulated state Empty { simulated function BeginState() { Super.BeginState(); fireState = 'FirePressed'; } simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } simulated function EndState() { Super.EndState(); fireState = 'Spinup'; } } simulated State Spindown { simulated function BeginState() { animClass.static.playEquippableAnim(self, 'Spindown_Idle'); if (spinTime >= spinPeriod) spinTime = 0.0; } simulated function Tick(float Delta) { Global.Tick(Delta); if (!IsInState('Spindown')) // State change is possible in Global.Tick return; coolDown(Delta); spinTime += Delta; if (spinTime >= spinPeriod) GotoState('Idle'); } simulated protected function bool handleFire() { spinTime = spinPeriod - spinTime; GotoState('Spinup'); return true; } } simulated State AwaitingPickup { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Held { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Dropped { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Equipping { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } simulated State Unequipping { simulated function Tick(float Delta) { coolDown(Delta); Super.Tick(Delta); } } s// Pod // Tweaked version class classyPod extends VehicleClasses.VehiclePod; var array muzzleSockets; var int currentMuzzleIndex; var int engineDustEffectIndex; var vector engineDustEffectLocation; var (Pod) float engineDustTraceLength; var (Pod) float engineDustGroundOffset; var VehicleEffectObserver muzzleFlashObserver; var string CModArmorClassName; var class CModArmorClass; /* NOTE Da_Wrecka: This entire function is unnecessary; we can just specify the class to use in DefaultProperties function PostBeginPlay(){ super.PostBeginPlay(); cmodarmorclass = class(DynamicLoadObject("EquipmentClasses.ArmorHeavy", class'class')); }*/ //compmod's way of telling which armor can use it 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 == cmodarmorclass) return false; else return true; } function bool aimAdjustViewRotation() { return true; } -J.  1 !i/ _CI7w*-( lnaQ 9?%  o ! B class classyBuggy extends VehicleClasses.VehicleBuggy; var class CModArmorClass; //compmod's way of telling which armor can use it 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 == cmodarmorclass)&&(position==VP_DRIVER)) return false; else return true; } B class classyBuggy extends VehicleClasses.VehicleBuggy; var class CModArmorClass; 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 == cmodarmorclass)&&(position==VP_DRIVER)) return false; else return true; } [ class classyGrapplerProjectile extends Gameplay.GrapplerProjectile; var float Health; function PostTakeDamage(float Damage, Engine.Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional float projectileFactor) { Health -= Damage; 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 classyGrapplerProjectile extends Gameplay.GrapplerProjectile; var float Health; function PostTakeDamage(float Damage, Engine.Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional float projectileFactor) { Health -= Damage; 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); } ]]] \S\_\b\Z]L\y\\\B\Y\~\T\r\^PM\G\B\}\v\[UM\U\R\\xZ#\\\\tV] YYPN\M\DBZh\F\U\pWgYpPOVZ]Jb ]UYvW[Zf]T]K\QW[BBBeB[bX\L\GB^PQ\W\H\FWZ\A\s\I\K\R\DV@WxawbO\T\]bbZbb~ YAbbkY[bbb=[nbJBvb]b\s\PbG[gBbbfXSb \NYub!bBybbX2]oBybH[l[mbKZ`Bvbbk\[|Z{Ws\@B[e\C\EbY\HbVbMXS\ibLbCba]h wrV YhWbKbAblbm[u\qUV]XW\\J\Q\R\X\E\V\CIpiSInFTIrcTnjAUIs_Uo_}Ul][VIJdzVI<W^XIquYI+SZkfpZngM[n~j[n}G\jIe\nfB]n|_]eL}]b^\^Ihy^aSV_`Su_g^T`fkq`iUOaiimanJbP^gbnMuDcT^ydM_VeS^seN^Pfitmfn.JgIoggW^DhLbahnOYhVjXj8#vjIbWSkZ^jln/GmJ^dm]^An_j^nI*X|n\jTpITZrp`jLrickrY^JsBCgsFEj7on-`Ngpn;^nNu}nPYrI3fKL`qLcPLdoLq!NLeom]LmakidIc^goVDK9ZIe>S8=VQnDgQ9kI[>dO9bIy?[I^>ZR9XU:QI=KnPHX9XIv?QIvP[9FI>nM<}^:yIB>snkRq7!JC;!}MdXJIvbI =XpVDUnKrYhXKI =cI~``Ii@IUipAF~8ZAD y EpKD~IBIkKIG7vIf7mI=dI{4EoaiWfI]