*@z}''xŨNS8vNone failboat_v1EngineCore GameplaySystemEquipmentClassesTeamcanArmorOccupyVehicleClassesShouldDeflectclientWeaponUseEnergydamageEnergyDrainFactorFiringModifyVehiclePadshasAmmoBucklerDeflectGetViewRotationFireTriggerEffectEventweaponUseEnergydriverWeaponClassTimerHealthModifyBaseTurrets PreBeginPlayTickspinfusorProjectileVelocityminimumThrottleFailWeaponTankFailVehicleTankFailVehiclePodFailVehicleBuggyFailVehicleAssaultShipFailProjectileSpinfusorFailProjectileSniperRifleFailProjectileRocketPodFailProjectileChaingunFailProjectileBurner LightingKarmaForce BeginState LightColor MovementFailProjectileBlasterPostTakeDamageFailBurningArea FailboatUnTriggerEffectEventDegrappleProjectileAlive LifeSpan ReplaceActorProjectileTouchbCanBeDamagedfail TopSpeed ChassisMass PackShieldbDisablePositionSwitching MaxVelocity CollisiondiveCombinedReductionturretWeaponClassburningAreaClass burnTimeheavyAttemptedToPilotflipPushUpImpulsestrafeThrustForce strafeForceupThrustForce reverseForcereverseThrustForcecornerSlowDownSpeedCoefficient vehicleFireweapons ChaingunsetSwitchedOnBurner RocketPodBlaster Spinfusor SniperRifle GrapplercanCharacterRespawnAtcollisionDamageMagnitudeScalesimulatedAttachgunnerWeaponClassMutateSpawnCombatRoleClassradiusDamageMomentumStructprojectileClassprojectileVelocityroundsPerSecondBuggy weaponClass occupant typeClass quantity RoleData damageAmt ShieldPackNameradiusDamageAmtJointControlledAircraft StrPropertyStructProperty bDeflectableVehiclePosition positionsArrayPropertyTurret CharacterWeaponClassPropertyVehicleQuantityWeaponProjectileBlasterBuckler InstigatorOther DeltaSecondsEventInstigatorTouchLocation TouchNormalDamage NamePropertyObjectProperty TeamInfoCharacterMotorMotorExplosiveProjectile BurningAreaGrapplerProjectileVehicleSpawnPoint CombatRoleArmor reelInDelay HitLocationClientPositionData MomentumpassiveFractionDamageBlockedactiveFractionDamageBlockedprojectileFactor VehicleClass armorClassenergyVectorknockbackScaleAllowedWeapons _fireOncebucklerHeightdeflectionNormal DamageTypecosDeflectionAngle bDeflectedclientPositions driverWeaponMutator DiveInputThrottleInput driverIndexVehiclePositionType fireOncecombatRoleDataFloatPropertyProjectileSpinfusorProjectileRocketPodProjectileBurner ProjectileProjectileSniperRifle ArmorHeavyWeaponVehicleTankWeaponGrapplerWeaponRocketPodWeaponSpinfusorProjectileBurnerBurningAreaWeaponChaingunWeaponSniperRifle WeaponBurnerWeaponBlasterWeaponVehicleTurretSentryProjectileChaingunWeaponTurretSentry PositionBaseObjectClasses BaseSensor BaseTurret BoolProperty VehiclePodVehicleAssaultShip VehicleTank VehicleBuggy IntPropertyPawnState FunctionEnumActor ScriptTextProcessedTextjiBC Location ReturnValueObject BytePropertyRoleClass&spinfusorProjectileInheritedVelFactorPackage TextBuffer vehiclePadB } TiYa!BKr-<Wd\B Y2WBќ|\|\|\ UMfL{ health = 80 // 140 minimumThrottle = .8; strafeThrustForce = 0 strafeForce = 0 upThrustForce = 0 reverseForce = 0 reverseThrustForce = 0 diveCombinedReduction = 1.000000 driverWeaponClass = None collisionDamageMagnitudeScale=0.000160//0.000080 cornerSlowDownSpeedCoefficient = 0 TopSpeed = 10000 heavyAttemptedToPilot = "This vehicle only supports light armor" )..\failboat_v1\Classes\FailVehiclePod.uc$L?E$F$G$H$I$?$?V$'99$@FJ$C]('This vehicle only supports light armor$BXZ UB Y2 |uꘉ|\|\|\ Ucc{ gunnerWeaponClass = Class'EquipmentClasses.WeaponVehicleTurretSentry' bDisablePositionSwitching = true flipPushUpImpulse = 3000000; chassisMass = 4000 +..\failboat_v1\Classes\FailVehicleBuggy.ucX:$zED$7J<"#$%(&`Q!PB Y2*߫뽴C|\|\|\ Ucg{ driverWeaponClass = None turretWeaponClass = class'EquipmentClasses.WeaponVehicleTurretSentry' 1..\failboat_v1\Classes\FailVehicleAssaultShip.uc@+/c"O0+ UNa:{ radiusDamageMomentum = 270000 MaxVelocity = 10000 2..\failboat_v1\Classes\FailProjectileSpinfusor.ucZ$փH=$@FAI2L1a]2:SW8{ bCanBeDamaged = true Health = 25.000000 ...\failboat_v1\Classes\DegrappleProjectile.uc$A7hG#E2LNY|\9|\~g |\9999|\|\|\|\|\UNa${ damageEnergyDrainFactor = .50 4..\failboat_v1\Classes\FailProjectileSniperRifle.uc $?qA$@3pq2:S%_{ 2..\failboat_v1\Classes\FailProjectileRocketPod.ucu@t=%>5+`bT"|\9|\~g |\9999|\|\|\|\|\2:S%_${ damageEnergyDrainFactor = .50 1..\failboat_v1\Classes\FailProjectileChaingun.uc $?x&?6>y/͑#2:S\A{ burningAreaClass = class'FailBurningArea' lifeSpan = 2.4 /..\failboat_v1\Classes\FailProjectileBurner.ucA84$@zC-D71/|\9|\~g |\9999|\|\|\|\|\2:S\${ damageEnergyDrainFactor = .50 0..\failboat_v1\Classes\FailProjectileBlaster.uc $?|F/HA87Oj2:SW{ burnTime = 2.4 *..\failboat_v1\Classes\FailBurningArea.ucB$@: 9  .9- w* .w * 99  #HB:  ! - -V  (   '( bclass FailProjectileChaingun extends EquipmentClasses.ProjectileChaingun; var() float damageEnergyDrainFactor; function bool ShouldDeflect(Actor Other, Vector TouchLocation, out Vector deflectionNormal) { local Character c; local Buckler b; local Vector bucklerHeight; c = Character(Other); if (bDeflectable && c != None) { b = Buckler(c.weapon); if (b != None && b.hasAmmo()) { deflectionNormal = Normal(Vector(c.motor.GetViewRotation())); bucklerHeight = c.Location + Vect(0.0, 0.0, 50.0); if (Normal(bucklerHeight - TouchLocation) Dot deflectionNormal < -b.cosDeflectionAngle) { b.TriggerEffectEvent('BucklerDeflect'); b.bDeflected = !b.bDeflected; if(c.energy < damageAmt * damageEnergyDrainFactor) { damageAmt -= (c.energy * damageEnergyDrainFactor); c.energy = 0; return false; } else { Instigator = c; c.weaponUseEnergy(damageAmt * damageEnergyDrainFactor); c.clientWeaponUseEnergy(damageAmt * damageEnergyDrainFactor); } return true; } } } return false; } Rclass FailProjectileBurner extends EquipmentClasses.ProjectileBurner; fclass FailProjectileRocketPod extends EquipmentClasses.ProjectileRocketPod; singular simulated function ProjectileTouch(Actor Other, vector TouchLocation, vector TouchNormal) { if(Other == Class'BaseObjectClasses.BaseSensor'){ radiusDamageAmt *= 0.8; damageAmt *= 0.8; } super.ProjectileTouch(Other, TouchLocation, TouchNormal); } 6>'r L?L?-+ " .  ..- w*.w*99  #HB/ !--V  (   '( `class FailProjectileBlaster extends EquipmentClasses.ProjectileBlaster; var() float damageEnergyDrainFactor; function bool ShouldDeflect(Actor Other, Vector TouchLocation, out Vector deflectionNormal) { local Character c; local Buckler b; local Vector bucklerHeight; c = Character(Other); if (bDeflectable && c != None) { b = Buckler(c.weapon); if (b != None && b.hasAmmo()) { deflectionNormal = Normal(Vector(c.motor.GetViewRotation())); bucklerHeight = c.Location + Vect(0.0, 0.0, 50.0); if (Normal(bucklerHeight - TouchLocation) Dot deflectionNormal < -b.cosDeflectionAngle) { b.TriggerEffectEvent('BucklerDeflect'); b.bDeflected = !b.bDeflected; if(c.energy < damageAmt * damageEnergyDrainFactor) { damageAmt -= (c.energy * damageEnergyDrainFactor); c.energy = 0; return false; } else { Instigator = c; c.weaponUseEnergy(damageAmt * damageEnergyDrainFactor); c.clientWeaponUseEnergy(damageAmt * damageEnergyDrainFactor); } return true; } } } return false; } hclass FailProjectileSniperRifle extends EquipmentClasses.ProjectileSniperRifle; var() float damageEnergyDrainFactor; function bool ShouldDeflect(Actor Other, Vector TouchLocation, out Vector deflectionNormal) { local Character c; local Buckler b; local Vector bucklerHeight; c = Character(Other); if (bDeflectable && c != None) { b = Buckler(c.weapon); if (b != None && b.hasAmmo()) { deflectionNormal = Normal(Vector(c.motor.GetViewRotation())); bucklerHeight = c.Location + Vect(0.0, 0.0, 50.0); if (Normal(bucklerHeight - TouchLocation) Dot deflectionNormal < -b.cosDeflectionAngle) { b.TriggerEffectEvent('BucklerDeflect'); b.bDeflected = !b.bDeflected; if(c.energy < damageAmt * damageEnergyDrainFactor) { damageAmt -= (c.energy * damageEnergyDrainFactor); c.energy = 0; return false; } else { Instigator = c; c.weaponUseEnergy(damageAmt * damageEnergyDrainFactor); c.clientWeaponUseEnergy(damageAmt * damageEnergyDrainFactor); } return true; } } } return false; } e1!3a )  $.)- w*.w*99  #HB& !--V( '( ^class FailBurningArea extends EquipmentClasses.ProjectileBurnerBurningArea; function Timer() { UntriggerEffectEvent('Alive'); Destroy(); } J'W'(a''' .B9?%a!"#$% L class DegrappleProjectile extends Gameplay.GrapplerProjectile; var float Health; function PostTakeDamage(float Damage, 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); } Dclass FailWeaponTank extends EquipmentClasses.WeaponVehicleTank; /* simulated function fire(optional bool fireOnce) { GotoState('Firing'); } State Firing { simulated function BeginState() { SetTimer(1, false); } simulated function Timer() { driverWeapon.fire(true); } } */ /* protected function Projectile makeProjectile(Rotator fireRot, Vector fireLoc) { /* local SniperRifleProjectile p; local FailProjectileTankBeam b; p = SniperRifleProjectile(Super.makeProjectile(fireRot, fireLoc)); if (p != None) b = new class'SniperRifleBeam'(p); return p; */ local EquipmentClasses.ProjectileMortarTank p; local FailProjectileTankBeam b; p = EquipmentClasses.ProjectileMortarTank(Super.makeProjectile(fireRot, fireLoc)); if (p != None) b = new Class'FailProjectileTankBeam'(p); return p; } */ State Firing { simulated function BeginState() { SetTimer(3, false); } simulated function Timer() { return; } } event simulated bool fire(optional bool _fireOnce) { fireOnce = _fireOnce; GotoState('Firing'); return Super.fire(_fireOnce); } Mpl6N 1LW\h{ )..\failboat_v1\Classes\FailWeaponTank.ucXclass FailProjectileSpinfusor extends EquipmentClasses.ProjectileSpinfusor; x class FailVehicleAssaultShip 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') && (position == VP_DRIVER)) return false; else return true; } ;uBr*p9W's armor class is none'qr 9:;9:$(s' uclass FailVehicleTank extends VehicleClasses.VehicleTank; /* function Timer(){ driverWeapon.fire(true); } */ //Thanks Stryker //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; } if((character.ArmorClass == class'EquipmentClasses.ArmorHeavy')) return false; else return true; } simulated function fire(optional bool fireOnce) { GotoState('Firing'); } /* State Firing { simulated function BeginState() { SetTimer(3, false); } simulated function Timer() { driverWeapon.fire(true); } } */ RjeB Y2SMh7m|\|\|\ WMf0{ //driverWeaponClass=Class'FailWeaponTank' *..\failboat_v1\Classes\FailVehicleTank.ucz class FailVehicleBuggy 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') && (position == VP_DRIVER)) return false; else return true; } simulated function bool canCharacterRespawnAt() { if (clientPositions[0].occupant != None) return false; return super.canCharacterRespawnAt(); } uBr*p9W's armor class is none'qr 9:9:$(s' Cclass FailVehiclePod extends VehicleClasses.VehiclePod; var float minimumThrottle; //Thanks Stryker //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; } if((character.ArmorClass == class'EquipmentClasses.ArmorHeavy')) return false; else return true; } simulated event Tick(float deltaSeconds) { if(positions[driverIndex].occupant != None) ThrottleInput = 1; super.Tick(deltaSeconds); } simulated function vehicleFire() { if (driverWeapon == None || DiveInput) return; fire(false); } z class FailVehicleBuggy extends VehicleClasses.VehicleBuggy; //Thanks Stryker //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; } if((character.ArmorClass == class'EquipmentClasses.ArmorHeavy') && (position == VP_DRIVER)) return false; else return true; } simulated function bool canCharacterRespawnAt() { // cannot respawn if there is a driver if (clientPositions[0].occupant != None) return false; return super.canCharacterRespawnAt(); } V[Uw6%*( Cclass FailVehiclePod extends VehicleClasses.VehiclePod; var float minimumThrottle; 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 event Tick(float deltaSeconds) { if(positions[driverIndex].occupant != None) ThrottleInput = 1; super.Tick(deltaSeconds); } simulated function vehicleFire() { if (driverWeapon == None || DiveInput) return; fire(false); } ]_ cBr*p9W's armor class is none'_r (a' x class FailVehicleAssaultShip extends VehicleClasses.VehicleAssaultShip; //Thanks Stryker //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; } if((character.ArmorClass == class'EquipmentClasses.ArmorHeavy') && (position == VP_DRIVER)) return false; else return true; } ^,.!w6*?,  Xclass FailProjectileSpinfusor extends EquipmentClasses.ProjectileSpinfusor; bKW!r*- ( uclass FailVehicleTank 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; } simulated function fire(optional bool fireOnce) { GotoState('Firing'); } gcBr*p9W's armor class is none'_r (a' hclass FailProjectileSniperRifle extends EquipmentClasses.ProjectileSniperRifle; var() float damageEnergyDrainFactor; function bool ShouldDeflect(Actor Other, Vector TouchLocation, out Vector deflectionNormal) { local Character c; local Buckler b; local Vector bucklerHeight; c = Character(Other); if (bDeflectable && c != None) { b = Buckler(c.weapon); if (b != None && b.hasAmmo()) { deflectionNormal = Normal(Vector(c.motor.GetViewRotation())); bucklerHeight = c.Location + Vect(0.0, 0.0, 50.0); if (Normal(bucklerHeight - TouchLocation) Dot deflectionNormal < -b.cosDeflectionAngle) { b.TriggerEffectEvent('BucklerDeflect'); b.bDeflected = !b.bDeflected; if(c.energy < damageAmt * damageEnergyDrainFactor) { damageAmt -= (c.energy * damageEnergyDrainFactor); c.energy = 0; return false; } else { Instigator = c; c.weaponUseEnergy(damageAmt * damageEnergyDrainFactor); c.clientWeaponUseEnergy(damageAmt * damageEnergyDrainFactor); } return true; } } } return false; } fk q!  Dclass FailWeaponTank extends EquipmentClasses.WeaponVehicleTank; State Firing { simulated function BeginState() { SetTimer(3, false); } simulated function Timer() { return; } } event simulated bool fire(optional bool _fireOnce) { fireOnce = _fireOnce; GotoState('Firing'); return Super.fire(_fireOnce); } o ;*4 a@@( n8  m?(#--q! -  fclass FailProjectileRocketPod extends EquipmentClasses.ProjectileRocketPod; singular simulated function ProjectileTouch(Actor Other, vector TouchLocation, vector TouchNormal) { //80% damage against sensor. Prevent distant sensor spamming if(Other == Class'BaseObjectClasses.BaseSensor'){ radiusDamageAmt *= 0.8; damageAmt *= 0.8; } super.ProjectileTouch(Other, TouchLocation, TouchNormal); } q5class Failboat extends Gameplay.Mutator config(Fail); var config float spinfusorProjectileVelocity; var config float spinfusorProjectileInheritedVelFactor; function PreBeginPlay() { ModifyVehiclePads(); ModifyBaseTurrets(); } function ModifyBaseTurrets() { local BaseObjectClasses.BaseTurret baseTurret; ForEach AllActors(Class'BaseObjectClasses.BaseTurret', baseTurret){ baseTurret.weaponClass = Class'EquipmentClasses.WeaponTurretSentry'; } } function ModifyVehiclePads() { local Gameplay.VehicleSpawnPoint vehiclePad; ForEach AllActors(Class'Gameplay.VehicleSpawnPoint', vehiclePad) if(vehiclePad != None){ if(vehiclePad.vehicleClass == Class'VehicleClasses.VehiclePod') vehiclePad.vehicleClass = Class'FailVehiclePod'; if(vehiclePad.vehicleClass == Class'VehicleClasses.VehicleAssaultShip') vehiclePad.vehicleClass = Class'FailVehicleAssaultShip'; if(vehiclePad.vehicleClass == Class'VehicleClasses.VehicleBuggy') vehiclePad.vehicleClass = Class'FailVehicleBuggy'; if(vehiclePad.vehicleClass == Class'VehicleClasses.VehicleTank') vehiclePad.setSwitchedOn(false); } } function string MutateSpawnCombatRoleClass(Character c) { local int i, j; c.team().combatRoleData[2].role.default.armorClass.default.knockbackScale = 1.04; c.team().combatRoleData[2].role.default.armorClass.default.health = 225; for(i = 0; i < c.team().combatRoleData.length; i++) for(j = 0; j < c.team().combatRoleData[i].role.default.armorClass.default.AllowedWeapons.length; j++) if(c.team().combatRoleData[i].role.default.armorClass.default.AllowedWeapons[j].typeClass == Class'EquipmentClasses.WeaponGrappler') c.team().combatRoleData[i].role.default.armorClass.default.AllowedWeapons[j].quantity = 5; ModifyVehiclePads(); return Super.MutateSpawnCombatRoleClass(c); } function Actor ReplaceActor(Actor Other) { if(Other.IsA('Chaingun')) { WeaponChaingun(Other).projectileClass = Class'FailProjectileChaingun'; } if(Other.IsA('SniperRifle')) { WeaponSniperRifle(Other).projectileClass = Class'FailProjectileSniperRifle'; } if(Other.IsA('Blaster')) { WeaponBlaster(Other).projectileClass = Class'FailProjectileBlaster'; } if(Other.IsA('Spinfusor')) { WeaponSpinfusor(Other).projectileClass = Class'FailProjectileSpinfusor'; WeaponSpinfusor(Other).projectileVelocity = spinfusorProjectileVelocity; } if(Other.IsA('Burner')) { WeaponBurner(Other).projectileClass = Class'FailProjectileBurner'; } if(Other.IsA('RocketPod')) { WeaponRocketPod(Other).projectileClass = Class'FailProjectileRocketPod'; } if(Other.IsA('Grappler')) { Gameplay.Grappler(Other).projectileClass = Class'DegrappleProjectile'; Gameplay.Grappler(Other).reelInDelay = 0.5; Gameplay.Grappler(Other).roundsPerSecond = 1.0; } if(Other.IsA('PackShield')) { Gameplay.ShieldPack(Other).activeFractionDamageBlocked = 0.500000; Gameplay.ShieldPack(Other).passiveFractionDamageBlocked = 0.1000000; } return Super.ReplaceActor(Other); } bclass FailProjectileChaingun extends EquipmentClasses.ProjectileChaingun; var() float damageEnergyDrainFactor; function bool ShouldDeflect(Actor Other, Vector TouchLocation, out Vector deflectionNormal) { local Character c; local Buckler b; local Vector bucklerHeight; c = Character(Other); if (bDeflectable && c != None) { b = Buckler(c.weapon); if (b != None && b.hasAmmo()) { deflectionNormal = Normal(Vector(c.motor.GetViewRotation())); bucklerHeight = c.Location + Vect(0.0, 0.0, 50.0); if (Normal(bucklerHeight - TouchLocation) Dot deflectionNormal < -b.cosDeflectionAngle) { b.TriggerEffectEvent('BucklerDeflect'); b.bDeflected = !b.bDeflected; if(c.energy < damageAmt * damageEnergyDrainFactor) { damageAmt -= (c.energy * damageEnergyDrainFactor); c.energy = 0; return false; } else { Instigator = c; c.weaponUseEnergy(damageAmt * damageEnergyDrainFactor); c.clientWeaponUseEnergy(damageAmt * damageEnergyDrainFactor); } return true; } } } return false; } @4 vG(/a0 % 10 Rclass FailProjectileBurner extends EquipmentClasses.ProjectileBurner; wZ/a0 w*Gr  sr  *r  r N(10 `class FailProjectileBlaster extends EquipmentClasses.ProjectileBlaster; var() float damageEnergyDrainFactor; function bool ShouldDeflect(Actor Other, Vector TouchLocation, out Vector deflectionNormal) { local Character c; local Buckler b; local Vector bucklerHeight; c = Character(Other); if (bDeflectable && c != None) { b = Buckler(c.weapon); if (b != None && b.hasAmmo()) { deflectionNormal = Normal(Vector(c.motor.GetViewRotation())); bucklerHeight = c.Location + Vect(0.0, 0.0, 50.0); if (Normal(bucklerHeight - TouchLocation) Dot deflectionNormal < -b.cosDeflectionAngle) { b.TriggerEffectEvent('BucklerDeflect'); b.bDeflected = !b.bDeflected; if(c.energy < damageAmt * damageEnergyDrainFactor) { damageAmt -= (c.energy * damageEnergyDrainFactor); c.energy = 0; return false; } else { Instigator = c; c.weaponUseEnergy(damageAmt * damageEnergyDrainFactor); c.clientWeaponUseEnergy(damageAmt * damageEnergyDrainFactor); } return true; } } } return false; } yY.6,?6,aC % 7 %x 76 nr6 6  6 6 ,  w ^class FailBurningArea extends EquipmentClasses.ProjectileBurnerBurningArea; function Timer() { UntriggerEffectEvent('Alive'); Destroy(); }  @q5class Failboat extends Gameplay.Mutator config(Fail); var config float spinfusorProjectileVelocity; var config float spinfusorProjectileInheritedVelFactor; function PreBeginPlay() { ModifyVehiclePads(); ModifyBaseTurrets(); } function ModifyBaseTurrets() { local BaseObjectClasses.BaseTurret baseTurret; ForEach AllActors(Class'BaseObjectClasses.BaseTurret', baseTurret){ baseTurret.weaponClass = Class'EquipmentClasses.WeaponTurretSentry'; } } //Copied from Vanilla. Thank you Rapher function ModifyVehiclePads() { local Gameplay.VehicleSpawnPoint vehiclePad; ForEach AllActors(Class'Gameplay.VehicleSpawnPoint', vehiclePad) if(vehiclePad != None){ if(vehiclePad.vehicleClass == Class'VehicleClasses.VehiclePod') vehiclePad.vehicleClass = Class'FailVehiclePod'; //vehiclePad.setSwitchedOn(false); if(vehiclePad.vehicleClass == Class'VehicleClasses.VehicleAssaultShip') vehiclePad.vehicleClass = Class'FailVehicleAssaultShip'; if(vehiclePad.vehicleClass == Class'VehicleClasses.VehicleBuggy') vehiclePad.vehicleClass = Class'FailVehicleBuggy'; if(vehiclePad.vehicleClass == Class'VehicleClasses.VehicleTank') //vehiclePad.vehicleClass = Class'FailVehicleTank'; vehiclePad.setSwitchedOn(false); } } function string MutateSpawnCombatRoleClass(Character c) { local int i, j; //Heavies. Copied from Vanilla Plus. Thank you Odio c.team().combatRoleData[2].role.default.armorClass.default.knockbackScale = 1.04; c.team().combatRoleData[2].role.default.armorClass.default.health = 225; for(i = 0; i < c.team().combatRoleData.length; i++) for(j = 0; j < c.team().combatRoleData[i].role.default.armorClass.default.AllowedWeapons.length; j++) if(c.team().combatRoleData[i].role.default.armorClass.default.AllowedWeapons[j].typeClass == Class'EquipmentClasses.WeaponGrappler') c.team().combatRoleData[i].role.default.armorClass.default.AllowedWeapons[j].quantity = 5; ModifyVehiclePads(); return Super.MutateSpawnCombatRoleClass(c); } function Actor ReplaceActor(Actor Other) { if(Other.IsA('Chaingun')) { WeaponChaingun(Other).projectileClass = Class'FailProjectileChaingun'; } if(Other.IsA('SniperRifle')) { WeaponSniperRifle(Other).projectileClass = Class'FailProjectileSniperRifle'; } if(Other.IsA('Blaster')) { WeaponBlaster(Other).projectileClass = Class'FailProjectileBlaster'; } if(Other.IsA('Spinfusor')) { WeaponSpinfusor(Other).projectileClass = Class'FailProjectileSpinfusor'; WeaponSpinfusor(Other).projectileVelocity = spinfusorProjectileVelocity; //WeaponSpinfusor(Other).projectileInheritedVelFactor = spinfusorProjectileInheritedVelFactor; } if(Other.IsA('Burner')) { WeaponBurner(Other).projectileClass = Class'FailProjectileBurner'; } if(Other.IsA('RocketPod')) { WeaponRocketPod(Other).projectileClass = Class'FailProjectileRocketPod'; } //Copied from Vanilla. Thank you Rapher if(Other.IsA('Grappler')) { Gameplay.Grappler(Other).projectileClass = Class'DegrappleProjectile'; Gameplay.Grappler(Other).reelInDelay = 0.5; Gameplay.Grappler(Other).roundsPerSecond = 1.0; } if(Other.IsA('PackShield')) { Gameplay.ShieldPack(Other).activeFractionDamageBlocked = 0.500000; Gameplay.ShieldPack(Other).passiveFractionDamageBlocked = 0.1000000; } return Super.ReplaceActor(Other); } ~@0s6?3L1oKԛYKԛDϊKԛOaKԛ ?u ?uKԛKԛtXKԛiGiGiGKԛ%%|\7+׉i|\7+׉i|\7|\7+׉i|\7+׉i|\7+׉i)+)+)+)+)+)+)+)+oʫ8,>'+()WtmW{ spinfusorProjectileVelocity = 8000 //spinfusorProjectileInheritedVelFactor = 1 #..\failboat_v1\Classes\Failboat.uc$E{5=@-a/!M. 5Za/!S. 2a/!Q. 7a/!R. 0.4a/!O. 6'a/!P. 3a/!T. 1.?.?a/!;.?.= L class DegrappleProjectile extends Gameplay.GrapplerProjectile; var float Health; function PostTakeDamage(float Damage, 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); } UUSqUSPSwUSVSSSGSESjS@StSGSASk[TfeSISrU S}SfSHfSsRs\sQSTSfoe}\sRsR[dSlSQSpgS_SFFcEUzS|S@f[SBoVE SSA}l@x@CS_S~@rkNE5SvSmSsSoStS_SuSBSgSkSiShSvE6EUSiSqSrSwEEEW[uEYE.sbBcfUffJfNSZs`ESsfOEEKBbSpk][L@aSnSx}dSCE*@^SEf]@a}`f^faSD[monS{SjEfhSDEyg?GMF@=Md@CMBAyW`ACL~A{M\BGL{B=LYC{KwC{JTD7 qD5 NE2 kEQqHFfqgFVqFG^qeG=XDHJ~bHCYHGY^I1}ICXZJpWxJw|VKGXtKAyRL=YpLVyNMK lM @wXJ{w^JKV_JMt_JZ R`JPr`G|OaIymaI|KbGyib!}GcA}DhbzbhA|hCy]iC|{i"|Yj2pUn#`Er$zew_z%[}z&}X-\U/Jq=y{=|YQyw=OU5 or5I4ya6I4iZ3I4}C36U@COU7 or7I4wa2I4X86W2 oM8I4u|1W>q1.QoGO@1I4c ]NH4[@q[0I4oL*I4O {*HJSH4LRx^QOV I4Qs HDH4ZL H4QfVOw UFTZOZI4ZwQ{n^yi*H4O G^OVNs0H4oAKHpSI4LxSzDfy~2H4\fO[S4xjdlNI4[IN