*@sE]/gN2/ ;None typeClass quantityTick coolDownCorecmodv3 GameplaySystemcmodShieldPackSpinupEngine BeginState SpindownQuantityGrenadesplayEquippableAnimTeamspeedRelativeCooldownAllowedGrenadesAllowedWeapons isInWaterupdateHeatGlowammoSkinChange FirePressedsetControllableSkinsbuildControllableSkins ShieldPackPodIdleapplyPassiveEffectheatUpTriggerEffectEventRapidCooldownU MatCoordsVULVLspeedCooldownFactorcoolDownThreshold heatPeriodheatMaterialIndexdeactivatingDuration hitStayTimeactiveFractionDamageBlockedpassiveFractionDamageBlockedmuzzleSocketsvelocityInheritOnExitScale fireStateSpindown_IdlereleaseFireStatestrafeThrustForce strafeForce LightingKarmaForce Collision LightColor MovementforwardThrustForce spinPeriod forwardForceupThrustForcereverseThrustForce ReplaceActorEmptydiveThrustForce Start_EmptyengineDustGroundOffset maxSpreadstartHeldByCharacterMuzzle2HealthMuzzle1EquipmentClassesrechargeTimeSeconds ReplaceWithcreateThirdPersonMesh minSpreadMutateSpawnCombatRoleClass AirSpeedVectordriverWeaponClassGetProjectileSpreadScaleAwaitingPickupStartWeaponGrapplerunEquip EquippingrampUpTimeSecondsdurationSecondsGetOverlayMaterialForOwner PackShieldhudRefireIconCoordshudRefireIconweapons UnequippingPostBeginPlay setOutOfAmmoVehicleClasses PreBeginPlay PlayEffect classypod aimClasshasAmmofirstPersonOffsetprojectileClass animPrefixprojectileVelocityHeldprojectileInheritedVelFactor animClassDroppedfirstPersonMeshroundsPerSecond ammoCount ammoUsagemakeProjectileclassyPodWeaponcmodcmodArmorHeavycmodArmorLightfinishActiveEffectstartActiveEffectcmodArmorMediumCModArmorClasssetHasAmmoSkinshandleReleaseFirebGenerateMissSpeechEvents TopSpeed EndStateaimAdjustViewRotationremovePassiveEffectcanArmorOccupyengineDustTraceLengthhudIconhudIconCoordsinventoryIcon handleFire RoleDataPack CharacterWeaponVehicle ChaingunInvButtonChaingun GUITribesOwnerSkinsSelfIlluminationIndexOtherDelta DeltaSeconds ColorScale VehicleClassenergy Projectile PositionShallowCopyMaterial GetMaterial SetDrawType bWaterVolumeHUDPhysicsVolumeConstantColorMutatorShaderbCollideWorldPawn SkeletalMesh MaterialActor ScriptTextProcessedTextiA equipped TeamInfoArmor CombatRoleCharacterEquippableAnimatorEquippableAnimator EquippableAimProjectileWeapons EquipmentChaingunProjectileVehicleSpawnPointVehicleEffectObserverBCPitchYawpassiveIdleMaterialactiveIdleMaterialpassiveHitMaterialactiveHitMaterialGRpassiveEffectName Velocity ReturnValueDynamicLoadObjectTextureRoleClassPackage armorClass TextBufferObjectEnum FunctionspeedPackScaleStateColorfireLocfireRotbIsFirstPersonshieldFractionDamageBlocked shieldActivebControllableSkinSetspreadInRotUnitscharacterOwnerholderbHeld bDropped spinTime overheated heatTime heatShaderheatColorMaterial heatColor actualSpreadheldBy localHeldByVehiclePositionTypecurrentMuzzleIndexengineDustEffectIndexengineDustEffectLocationmuzzleFlashObserver currentIdle currentHitcurrentHitTime lastHealthcombatRoleDataTabsRotatorWeaponSniperRifleWeaponRocketPod WeaponMortarWeaponHandGrenadeWeaponGrenadeLauncherWeaponChaingun WeaponBurnerWeaponBucklerWeaponBlasterWeaponSpinfusorStruct ArmorHeavyName StrProperty VehiclePodStructPropertyArrayPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertyCModArmorClassNameVSPlightActiveShieldlightPassiveShieldmediumActiveShieldmediumPassiveShieldheavyActiveShieldheavyPassiveShielddifferencevievieenregistree " @/:The amount of time it takes for the chaingun to overheat FThe amount of time it takes for the chaingun to spin up or spin down  A z18 VOverlay material, if any, to be used when shield is active but has not been impacted 2:The angular deviation from ideal line of fire in degrees 3 ;Overlay material to be used when shield has been impacted [{fmB Y2-SKќ|\|\|\c ffI{ 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' ..\cmodv3\Classes\classypod.uc.YIGF$;DD$B}3$B4$;D;$ F=$`E>$zE?$BB$DA$PGR9/$?P$pFH$B;Multiplier for the speed when calculating cooldown/heatup .HThe fraction of the heatPeriod at which the gun can start firing again %=The maximum angle the spread will increase to during heatup 5 ;Overlay material to be used when shield has been impacted O ALength of time that the hit material is displayed for on damage ;+ VOverlay material, if any, to be used when shield is active but has not been impacted ZMvM69F6yaЌaЌaЉKԛKԛKԛ^B^B`m`m`m`mp@p@`m`m`m`m _~HҊHT { 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 %..\cmodv3\Classes\classyPodWeapon.ucN$?E$?<$?($@@'$?&$Q:)"s"t"r$pAjl$`En$?g@Sqi:QAk] Chaingun0 2 oIGHZ"!$MC#$C$$B%$ B^]Z"!$MC#$C$$B%$ BE_X][){@@83))1 W#2{=%+#-'#! D@mIE ;9 HeAd  SAT?g ?FpS\'O.'' $W$$ VI_c,5,, XG]*\e z*$9?%*  L>  9?%    9?%dw*dP5 ]O'*6%cmodv3.cmodArmorLight 6&cmodv3.cmodArmorMedium 6,cmodv3.cmodArmorHeavy  <N`gZ(c,(( nyE RcBr*p9W's armor class is none'_r0(a' NK H2Pg$KW|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\|\J 8J=~{ passiveFractionDamageBlocked=0.2000000 activeFractionDamageBlocked=0.750000 hitStayTime=0.500000 rechargeTimeSeconds=8.000000 rampUpTimeSeconds=0.000000 durationSeconds=8.000000 deactivatingDuration=0.000000 $..\cmodv3\Classes\cmodShieldPack.uc-$L>,$@?+$?K$AY$Z$A*$Y7uX 2&& 9?9?h69D@9?&69D@9?&a<7; f I8a!  Gq! Bg 5`I8a!  Gq! i:t1.! Y:-" Ja ZXF#$be M-'-(o$$-(a((( U4q1.! R4o/-"( I E-g7 7 & %L   * &  -' doM/a0 JIw*r  -10 >6D:6-( w r ---w* 69C9<6 69C9<6 69C9<6 69C9<6 No heat colour material Z@ku0a/!V.,sa/!\aLcmodv3.cmodshieldpack YLw}2 ^wJm1o|\7+׌ii|\7+׌ii|\7+׌iiKԛG6KԛKԛ)+)+ :85967*IHH{ ..\cmodv3\Classes\cmod.ucY  a_Jh !U_ !C Tbq! '  -9?&@  ! CBb!   1 !1/ RhJ/q! ' kj 5-w* .?3? \l& _w*w*-w*- 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; } p@oqrstuv0@~xSk  O|C3' Fclass 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'cmodv3.classyPod'; } } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).ammoCount = 8; return Other; } if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "cmodv3.cmodshieldpack"); } } function string MutateSpawnCombatRoleClass(Character c) { c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv3.cmodArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv3.cmodArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv3.cmodArmorHeavy", class'class')).default.AllowedWeapons; } QWd  @WxC2B^i*IHH { 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) $..\cmodv3\Classes\cmodArmorHeavy.ucY^ """ ""`"""",Z "Gclass cmodArmorHeavy extends Gameplay.Armor; VyE2D>ԍi*IHHD { 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) $..\cmodv3\Classes\cmodArmorLight.ucY^ """ " "*""""Z "Gclass cmodArmorLight extends Gameplay.Armor; U|G2F(4i*IHH { 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) %..\cmodv3\Classes\cmodArmorMedium.ucY^ """""H""""Z "Hclass cmodArmorMedium extends Gameplay.Armor; v8class 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 float differencevie; var character characterOwner; var float vieenregistree; 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; vieenregistree = characterOwner.health; characterOwner.shieldFractionDamageBlocked = activeFractionDamageBlocked; } 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=(vieenregistree-characterOwner.health); if (characterOwner.shieldFractionDamageBlocked!=0.2) { if (characterOwner.health < vieenregistree) { if ((characterOwner.energy >= differencevie) && (characterOwner.energy!=0)) { characterOwner.energy=characterOwner.energy-differencevie; } else if((characterOwner.energy < differencevie) && (characterOwner.energy!=0)) { characterOwner.energy=0; } } } if (localHeldBy != None) { if (lastHealth != localHeldBy.health) { if (lastHealth > localHeldBy.health) { currentHitTime = hitStayTime; } lastHealth = localHeldBy.health; } } vieenregistree=characterOwner.health; } J;- Kb55 L~/ & . w *. w* 66666666 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); } } v8class 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 float differencevie; var character characterOwner; var float vieenregistree; 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; vieenregistree = characterOwner.health; characterOwner.shieldFractionDamageBlocked = activeFractionDamageBlocked; } 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=(vieenregistree-characterOwner.health); if (characterOwner.shieldFractionDamageBlocked!=0.2) { if (characterOwner.health < vieenregistree) { if ((characterOwner.energy >= differencevie) && (characterOwner.energy!=0)) { characterOwner.energy=characterOwner.energy-differencevie; } else if((characterOwner.energy < differencevie) && (characterOwner.energy!=0)) { characterOwner.energy=0; } } } if (localHeldBy != None) { if (lastHealth != localHeldBy.health) { if (lastHealth > localHeldBy.health) { currentHitTime = hitStayTime; } lastHealth = localHeldBy.health; } } vieenregistree=characterOwner.health; } PQRSTHclass cmodArmorMedium extends Gameplay.Armor; Gclass cmodArmorLight extends Gameplay.Armor; Gclass cmodArmorHeavy extends Gameplay.Armor; !a. Fclass 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'cmodv3.classyPod'; } } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).ammoCount = 8; return Other; } if(Other.IsA('PackShield')) { Other.Destroy(); return ReplaceWith(Other, "cmodv3.cmodshieldpack"); } } function string MutateSpawnCombatRoleClass(Character c) { //thanks to compmod for that one! c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv3.cmodArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv3.cmodArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("cmodv3.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; } =zH7w*!%+ \^[P 9?%  _NNN MMMSMKMQNJMlMwMNMMMsMJMeAVMPMUMrFVMLKHMkMiMLMK\MtJSGM{MgMyMFMVUMMN}NFNEAvJdS NpGTMdJjKZUTM|MEAKHLNcHOSJUXMMfM}HoM{GtMzUAMxM@MvU`HOMDJiMOSH[SAQSSNcSWSuL[Sb KuSSS_JULbUmI0SSaMfS~SUSUpM\S SBSSEL`LaUpKTUmMLqSKrMuSFLYMxSS{M|MGRkMsM]UMIMHMzSSSOSDIGMNSCSzS[N_ jvP KiQSdS@S`SaLhFHMBM@M~MNRHMMyICMw9dDO9baOP^~O9f\P9gzP]WXQ9(WwQ9<dNS9)rT9eOU\ZmUPWJVYogVPrDWZPaWPqWPp]XPX{XTXXYQFuYL~SZPsrZOMO[Q]n[RXK\9\h\W_E]@Xc]AX@^_X]^CXz^QhW_P-t_9cQ`>^n`GXLaPAuia9NW^cFXudNXRe=^oeKYMfPCYjfIXChfm`h9&XM9'fe-}KP,j9EZGPDYaXXzP+`W[^wQXUPBusvThUX|QW Y9X>yP{PwPPG9m?W?9VD9O9A?HB:G9T>A9p>E9}J9v9=oH:l9>fP^d^O~B9`>@M9~-E@w S w9u^JSXh9 =@VX}9tU9 =IPFrF9vx9in^daWPD;x9Us^@FHwuN<9CV n|V@jaIjH LGB 6SBB:IS JCSJ?MgIL9WiiI@9s]kIP-n4Jm-. wn.W-lt-mR-n p-FP-Dn-o L-Ol9S8IwIAO^^OI}-C3Z{IM^n4]j9W